aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MOVED134
-rw-r--r--audio/Makefile3
-rw-r--r--audio/ardour/Makefile126
-rw-r--r--audio/ardour/distinfo2
-rw-r--r--audio/ardour/files/patch-SConstruct78
-rw-r--r--audio/ardour/files/patch-aubio4340
-rw-r--r--audio/ardour/files/patch-boost-1.5213
-rw-r--r--audio/ardour/files/patch-gtk2__ardour_automation__selectable.h11
-rw-r--r--audio/ardour/files/patch-gtk2__ardour_editor.cc33
-rw-r--r--audio/ardour/files/patch-gtk2__ardour_editor__keyboard.cc14
-rw-r--r--audio/ardour/files/patch-gtk2__ardour_gain__meter.cc25
-rw-r--r--audio/ardour/files/patch-gtk2__ardour_route__time__axis.cc11
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-SConscript14
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-ardour_ui.cc51
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-connection_editor.cc23
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-connection_editor.h25
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-engine_dialog.cc121
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-io_selector.cc39
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-io_selector.h25
-rw-r--r--audio/ardour/files/patch-gtk2_ardour-new_session_dialog.cc32
-rw-r--r--audio/ardour/files/patch-libs-ardour-ardour-io.h13
-rw-r--r--audio/ardour/files/patch-libs-ardour-session.cc368
-rw-r--r--audio/ardour/files/patch-libs-fst-jackvst.h22
-rw-r--r--audio/ardour/files/patch-libs-fst-vsti.c18
-rw-r--r--audio/ardour/files/patch-libs-midi++2-SConscript12
-rw-r--r--audio/ardour/files/patch-libs-pbd-mountpoint.cc11
-rw-r--r--audio/ardour/files/patch-libs-pbd-pbd-stl_delete.h20
-rw-r--r--audio/ardour/files/patch-libs-pbd-stacktrace.cc13
-rw-r--r--audio/ardour/files/patch-libs-surfaces-mackie-mackie_control_protocol.cc29
-rw-r--r--audio/ardour/files/patch-libs_gtkmm2ext_fastmeter.cc11
-rw-r--r--audio/ardour/files/patch-libs_gtkmm2ext_idle__adjustment.cc10
-rw-r--r--audio/ardour/files/patch-tempoline_crash83
-rw-r--r--audio/ardour/files/patch-vst-SConscript11
-rw-r--r--audio/ardour/pkg-descr14
-rw-r--r--audio/ardour/pkg-plist158
-rw-r--r--audio/mixxx21/Makefile112
-rw-r--r--audio/mixxx21/distinfo3
-rw-r--r--audio/mixxx21/files/patch-build_depends.py172
-rw-r--r--audio/mixxx21/files/patch-build_features.py102
-rw-r--r--audio/mixxx21/files/patch-build_mixxx.py27
-rw-r--r--audio/mixxx21/files/patch-lib_hidapi-0.8.0-rc1_libusb_hid.c11
-rw-r--r--audio/mixxx21/files/patch-plugins_soundsourcem4a_soundsourcem4a.h11
-rw-r--r--audio/mixxx21/files/patch-src-encoder_encodermp3.cpp11
-rw-r--r--audio/mixxx21/files/patch-src-util_screensaver.cpp27
-rw-r--r--audio/mixxx21/files/patch-src_controllers_controllermanager.cpp12
-rw-r--r--audio/mixxx21/files/patch-src_controllers_controllerpresetfilehandler.cpp14
-rw-r--r--audio/mixxx21/files/patch-vamp-plugins_SConscript11
-rw-r--r--audio/mixxx21/pkg-descr5
-rw-r--r--audio/mixxx21/pkg-plist7
-rw-r--r--audio/xmms2/Makefile224
-rw-r--r--audio/xmms2/distinfo2
-rw-r--r--audio/xmms2/files/extra-patch-src-clients-vistest-wscript30
-rw-r--r--audio/xmms2/files/patch-src_clients_lib_xmmsclient-glib_wscript34
-rw-r--r--audio/xmms2/files/patch-src_clients_lib_xmmsclient_wscript34
-rw-r--r--audio/xmms2/files/patch-src_include_wscript22
-rw-r--r--audio/xmms2/files/patch-src_include_xmmsclient_xmmsclient++_coll.h11
-rw-r--r--audio/xmms2/files/patch-src_plugins_airplay_raop__client.c25
-rw-r--r--audio/xmms2/files/patch-src_plugins_airplay_wscript11
-rw-r--r--audio/xmms2/files/patch-src_plugins_ao_ao.c10
-rw-r--r--audio/xmms2/files/patch-src_plugins_avcodec_avcodec.c527
-rw-r--r--audio/xmms2/files/patch-src_plugins_avcodec_avcodec__compat.h69
-rw-r--r--audio/xmms2/files/patch-src_plugins_cdda_cdda.c11
-rw-r--r--audio/xmms2/files/patch-src_plugins_file_wscript19
-rw-r--r--audio/xmms2/files/patch-src_plugins_modplug_modplug.c11
-rw-r--r--audio/xmms2/files/patch-src_plugins_musepack_wscript11
-rw-r--r--audio/xmms2/files/patch-wscript40
-rw-r--r--audio/xmms2/pkg-descr6
-rw-r--r--audio/xmms2/pkg-plist153
-rw-r--r--chinese/Makefile1
-rw-r--r--chinese/sunpinyin/Makefile38
-rw-r--r--chinese/sunpinyin/distinfo6
-rw-r--r--chinese/sunpinyin/files/patch-SConstruct34
-rw-r--r--chinese/sunpinyin/files/patch-man_SConscript11
-rw-r--r--chinese/sunpinyin/files/patch-src_ime-core_imi__winHandler.cpp18
-rw-r--r--chinese/sunpinyin/files/patch-src_portability.h10
-rw-r--r--chinese/sunpinyin/files/patch-src_slm_thread_slmthread.cpp17
-rw-r--r--chinese/sunpinyin/files/patch-src_sunpinyin-dictgen.mk.in26
-rw-r--r--chinese/sunpinyin/files/patch-xdg35
-rw-r--r--chinese/sunpinyin/pkg-descr5
-rw-r--r--chinese/sunpinyin/pkg-plist51
-rw-r--r--databases/Makefile2
-rw-r--r--databases/arangodb32/Makefile51
-rw-r--r--databases/arangodb32/distinfo3
-rw-r--r--databases/arangodb32/files/arangod.in86
-rw-r--r--databases/arangodb32/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h28
-rw-r--r--databases/arangodb32/files/patch-CMakeLists.txt43
-rw-r--r--databases/arangodb32/files/patch-arangod_Agency_Store.cpp11
-rw-r--r--databases/arangodb32/files/patch-arangod_RestHandler_RestAuthHandler.cpp11
-rw-r--r--databases/arangodb32/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp25
-rw-r--r--databases/arangodb32/files/patch-cmake_ArangoDBInstall.cmake11
-rw-r--r--databases/arangodb32/files/patch-lib_Basics_ArangoGlobalContext.cpp14
-rw-r--r--databases/arangodb32/files/patch-lib_Basics_process-utils.cpp52
-rw-r--r--databases/arangodb32/files/patch-lib_Basics_socket-utils.h15
-rw-r--r--databases/arangodb32/files/patch-lib_Logger_LogAppenderSyslog.cpp11
-rw-r--r--databases/arangodb32/pkg-descr5
-rw-r--r--databases/arangodb32/pkg-plist4807
-rw-r--r--databases/arangodb33/Makefile49
-rw-r--r--databases/arangodb33/distinfo3
-rw-r--r--databases/arangodb33/files/arangod.in86
-rw-r--r--databases/arangodb33/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h28
-rw-r--r--databases/arangodb33/files/patch-CMakeLists.txt43
-rw-r--r--databases/arangodb33/files/patch-arangod_Agency_Store.cpp11
-rw-r--r--databases/arangodb33/files/patch-arangod_RestHandler_RestAuthHandler.cpp11
-rw-r--r--databases/arangodb33/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp25
-rw-r--r--databases/arangodb33/files/patch-cmake_ArangoDBInstall.cmake11
-rw-r--r--databases/arangodb33/files/patch-lib_Basics_ArangoGlobalContext.cpp14
-rw-r--r--databases/arangodb33/files/patch-lib_Basics_process-utils.cpp36
-rw-r--r--databases/arangodb33/files/patch-lib_Basics_socket-utils.h15
-rw-r--r--databases/arangodb33/files/patch-lib_Logger_LogAppenderSyslog.cpp11
-rw-r--r--databases/arangodb33/pkg-descr5
-rw-r--r--databases/arangodb33/pkg-message27
-rw-r--r--databases/arangodb33/pkg-plist4798
-rw-r--r--devel/Makefile35
-rw-r--r--devel/bzr/Makefile40
-rw-r--r--devel/bzr/distinfo3
-rw-r--r--devel/bzr/files/patch-ssh_hostname167
-rw-r--r--devel/bzr/pkg-descr7
-rw-r--r--devel/chromium-gn/Makefile30
-rw-r--r--devel/chromium-gn/pkg-descr4
-rw-r--r--devel/electron4/Makefile287
-rw-r--r--devel/electron4/Makefile.tests49
-rw-r--r--devel/electron4/Makefile.version4
-rw-r--r--devel/electron4/distinfo15
-rw-r--r--devel/electron4/files/apply-electron-patches.sh20
-rw-r--r--devel/electron4/files/package-lock.json12235
-rw-r--r--devel/electron4/files/package.json76
-rw-r--r--devel/electron4/files/patch-BUILD.gn87
-rw-r--r--devel/electron4/files/patch-apps_ui_views_app__window__frame__view.cc11
-rw-r--r--devel/electron4/files/patch-ash_display_mirror__window__controller.cc14
-rw-r--r--devel/electron4/files/patch-base_BUILD.gn67
-rw-r--r--devel/electron4/files/patch-base_allocator_allocator__shim.cc11
-rw-r--r--devel/electron4/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc77
-rw-r--r--devel/electron4/files/patch-base_allocator_allocator__shim__override__libc__symbols.h11
-rw-r--r--devel/electron4/files/patch-base_allocator_allocator__shim__unittest.cc36
-rw-r--r--devel/electron4/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_debug_debugger__posix.cc57
-rw-r--r--devel/electron4/files/patch-base_debug_elf__reader__linux.cc13
-rw-r--r--devel/electron4/files/patch-base_debug_proc__maps__linux.cc11
-rw-r--r--devel/electron4/files/patch-base_debug_stack__trace.h10
-rw-r--r--devel/electron4/files/patch-base_debug_stack__trace__posix.cc40
-rw-r--r--devel/electron4/files/patch-base_debug_thread__heap__usage__tracker.cc15
-rw-r--r--devel/electron4/files/patch-base_files_file__path__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_files_file__path__watcher__kqueue.h13
-rw-r--r--devel/electron4/files/patch-base_files_file__path__watcher__stub.cc51
-rw-r--r--devel/electron4/files/patch-base_files_file__path__watcher__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_files_file__util.h11
-rw-r--r--devel/electron4/files/patch-base_files_memory__mapped__file__posix.cc11
-rw-r--r--devel/electron4/files/patch-base_i18n_icu__util.cc20
-rw-r--r--devel/electron4/files/patch-base_linux__util.cc18
-rw-r--r--devel/electron4/files/patch-base_logging__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_native__library__posix.cc11
-rw-r--r--devel/electron4/files/patch-base_native__library__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_posix_unix__domain__socket.cc49
-rw-r--r--devel/electron4/files/patch-base_posix_unix__domain__socket__unittest.cc12
-rw-r--r--devel/electron4/files/patch-base_process_internal__linux.cc16
-rw-r--r--devel/electron4/files/patch-base_process_internal__linux.h11
-rw-r--r--devel/electron4/files/patch-base_process_kill.h11
-rw-r--r--devel/electron4/files/patch-base_process_kill__posix.cc11
-rw-r--r--devel/electron4/files/patch-base_process_launch.cc11
-rw-r--r--devel/electron4/files/patch-base_process_launch.h20
-rw-r--r--devel/electron4/files/patch-base_process_launch__posix.cc10
-rw-r--r--devel/electron4/files/patch-base_process_memory.cc20
-rw-r--r--devel/electron4/files/patch-base_process_memory.h11
-rw-r--r--devel/electron4/files/patch-base_process_memory__unittest.cc18
-rw-r--r--devel/electron4/files/patch-base_process_process__handle.cc11
-rw-r--r--devel/electron4/files/patch-base_process_process__handle.h11
-rw-r--r--devel/electron4/files/patch-base_process_process__handle__freebsd.cc17
-rw-r--r--devel/electron4/files/patch-base_process_process__info__linux.cc39
-rw-r--r--devel/electron4/files/patch-base_process_process__iterator__freebsd.cc45
-rw-r--r--devel/electron4/files/patch-base_process_process__metrics.h112
-rw-r--r--devel/electron4/files/patch-base_process_process__metrics__freebsd.cc85
-rw-r--r--devel/electron4/files/patch-base_process_process__metrics__posix.cc20
-rw-r--r--devel/electron4/files/patch-base_profiler_stack__sampling__profiler__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_security__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_strings_safe__sprintf__unittest.cc18
-rw-r--r--devel/electron4/files/patch-base_sys__info__freebsd.cc71
-rw-r--r--devel/electron4/files/patch-base_sys__info__posix.cc38
-rw-r--r--devel/electron4/files/patch-base_test_launcher_test__launcher.cc10
-rw-r--r--devel/electron4/files/patch-base_test_test__file__util__linux.cc13
-rw-r--r--devel/electron4/files/patch-base_test_test__file__util__posix.cc11
-rw-r--r--devel/electron4/files/patch-base_third__party_libevent_BUILD.gn24
-rw-r--r--devel/electron4/files/patch-base_threading_platform__thread.h11
-rw-r--r--devel/electron4/files/patch-base_threading_platform__thread__linux.cc21
-rw-r--r--devel/electron4/files/patch-base_threading_platform__thread__posix.cc11
-rw-r--r--devel/electron4/files/patch-base_threading_thread__local__storage__unittest.cc11
-rw-r--r--devel/electron4/files/patch-base_threading_thread__task__runner__handle.cc26
-rw-r--r--devel/electron4/files/patch-base_trace__event_malloc__dump__provider.cc21
-rw-r--r--devel/electron4/files/patch-base_trace__event_process__memory__dump.cc11
-rw-r--r--devel/electron4/files/patch-base_trace__event_process__memory__dump.h11
-rw-r--r--devel/electron4/files/patch-build_config_BUILD.gn30
-rw-r--r--devel/electron4/files/patch-build_config_BUILDCONFIG.gn119
-rw-r--r--devel/electron4/files/patch-build_config_allocator.gni20
-rw-r--r--devel/electron4/files/patch-build_config_compiler_BUILD.gn89
-rw-r--r--devel/electron4/files/patch-build_config_compiler_compiler.gni11
-rw-r--r--devel/electron4/files/patch-build_config_features.gni11
-rw-r--r--devel/electron4/files/patch-build_config_linux_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-build_config_linux_pkg-config.py26
-rw-r--r--devel/electron4/files/patch-build_config_sysroot.gni15
-rw-r--r--devel/electron4/files/patch-build_gn__run__binary.py11
-rw-r--r--devel/electron4/files/patch-build_linux_chrome.map29
-rw-r--r--devel/electron4/files/patch-build_linux_libpci_BUILD.gn53
-rw-r--r--devel/electron4/files/patch-build_linux_unbundle_libusb.gn27
-rw-r--r--devel/electron4/files/patch-build_linux_unbundle_replace__gn__files.py10
-rw-r--r--devel/electron4/files/patch-build_toolchain_gcc__toolchain.gni45
-rw-r--r--devel/electron4/files/patch-build_toolchain_get__concurrent__links.py17
-rw-r--r--devel/electron4/files/patch-build_toolchain_linux_BUILD.gn10
-rw-r--r--devel/electron4/files/patch-cc_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-cc_layers_scrollbar__layer__impl__base.cc13
-rw-r--r--devel/electron4/files/patch-cc_trees_property__tree.cc20
-rw-r--r--devel/electron4/files/patch-chrome_app_chrome__command__ids.h11
-rw-r--r--devel/electron4/files/patch-chrome_app_chrome__main.cc19
-rw-r--r--devel/electron4/files/patch-chrome_app_chrome__main__delegate.cc74
-rw-r--r--devel/electron4/files/patch-chrome_app_chromium__strings.grd11
-rw-r--r--devel/electron4/files/patch-chrome_app_generated__resources.grd20
-rw-r--r--devel/electron4/files/patch-chrome_app_google__chrome__strings.grd11
-rw-r--r--devel/electron4/files/patch-chrome_app_settings__strings.grdp20
-rw-r--r--devel/electron4/files/patch-chrome_app_shutdown__signal__handlers__posix.cc15
-rw-r--r--devel/electron4/files/patch-chrome_app_theme_chrome__unscaled__resources.grd11
-rw-r--r--devel/electron4/files/patch-chrome_browser_about__flags.cc72
-rw-r--r--devel/electron4/files/patch-chrome_browser_after__startup__task__utils.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_background_background__mode__optimizer.cc15
-rw-r--r--devel/electron4/files/patch-chrome_browser_browser__resources.grd11
-rw-r--r--devel/electron4/files/patch-chrome_browser_chrome__browser__main.cc42
-rw-r--r--devel/electron4/files/patch-chrome_browser_chrome__browser__main__linux.cc27
-rw-r--r--devel/electron4/files/patch-chrome_browser_chrome__browser__main__posix.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.cc83
-rw-r--r--devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.h17
-rw-r--r--devel/electron4/files/patch-chrome_browser_defaults.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_diagnostics_diagnostics__writer.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__commands.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__commands.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__prefs.cc65
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__prefs.h20
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__query.cc14
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__shelf__context__menu.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_download_download__status__updater.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_BUILD.gn15
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_activity__log_activity__log.cc14
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_bookmark__app__helper.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_extensions_external__provider__impl.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_first__run_first__run__internal__posix.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_flag__descriptions.cc36
-rw-r--r--devel/electron4/files/patch-chrome_browser_flag__descriptions.h35
-rw-r--r--devel/electron4/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc15
-rw-r--r--devel/electron4/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc14
-rw-r--r--devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc28
-rw-r--r--devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc27
-rw-r--r--devel/electron4/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc23
-rw-r--r--devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_memory__details.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_memory__details__linux.cc13
-rw-r--r--devel/electron4/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc21
-rw-r--r--devel/electron4/files/patch-chrome_browser_net_system__network__context__manager.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc14
-rw-r--r--devel/electron4/files/patch-chrome_browser_password__manager_password__store__factory.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_platform__util.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_plugins_plugins__resource__service.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_process__singleton__posix.cc34
-rw-r--r--devel/electron4/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc29
-rw-r--r--devel/electron4/files/patch-chrome_browser_renderer__preferences__util.cc38
-rw-r--r--devel/electron4/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py19
-rw-r--r--devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js20
-rw-r--r--devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html29
-rw-r--r--devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js33
-rw-r--r--devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc15
-rw-r--r--devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_search_local__files__ntp__source.cc16
-rw-r--r--devel/electron4/files/patch-chrome_browser_speech_tts__controller__impl.cc16
-rw-r--r--devel/electron4/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_sync_chrome__sync__client.cc19
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.cc56
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.h39
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc44
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h50
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc16
-rw-r--r--devel/electron4/files/patch-chrome_browser_task__manager_task__manager__observer.h16
-rw-r--r--devel/electron4/files/patch-chrome_browser_tracing_crash__service__uploader.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_browser__command__controller.cc38
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc10
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_sad__tab.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc22
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_tab__helpers.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc15
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc50
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_accelerator__table.cc29
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc38
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_chrome__views__delegate.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_first__run__dialog.cc24
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__frame.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__layout.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc29
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_webui_about__ui.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc49
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc20
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h11
-rw-r--r--devel/electron4/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc20
-rw-r--r--devel/electron4/files/patch-chrome_common_BUILD.gn13
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__features.cc45
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__features.h20
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__paths.cc97
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__paths.h29
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__paths__internal.h11
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__switches.cc17
-rw-r--r--devel/electron4/files/patch-chrome_common_chrome__switches.h17
-rw-r--r--devel/electron4/files/patch-chrome_common_extensions_api_api__sources.gni11
-rw-r--r--devel/electron4/files/patch-chrome_common_extensions_command.cc11
-rw-r--r--devel/electron4/files/patch-chrome_common_features.gni14
-rw-r--r--devel/electron4/files/patch-chrome_common_pref__names.cc29
-rw-r--r--devel/electron4/files/patch-chrome_common_pref__names.h38
-rw-r--r--devel/electron4/files/patch-chrome_common_webui__url__constants.cc41
-rw-r--r--devel/electron4/files/patch-chrome_common_webui__url__constants.h25
-rw-r--r--devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc29
-rw-r--r--devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h20
-rw-r--r--devel/electron4/files/patch-chrome_service_cloud__print_print__system.cc11
-rw-r--r--devel/electron4/files/patch-chrome_test_base_in__process__browser__test.cc22
-rw-r--r--devel/electron4/files/patch-chrome_test_base_testing__browser__process.h13
-rw-r--r--devel/electron4/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc20
-rw-r--r--devel/electron4/files/patch-chromecast_browser_cast__browser__main__parts.cc29
-rw-r--r--devel/electron4/files/patch-chromecast_browser_cast__content__browser__client.cc11
-rw-r--r--devel/electron4/files/patch-components_autofill__strings.grdp11
-rw-r--r--devel/electron4/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc14
-rw-r--r--devel/electron4/files/patch-components_autofill_core_browser_autofill__experiments.cc20
-rw-r--r--devel/electron4/files/patch-components_autofill_core_common_autofill__util.cc11
-rw-r--r--devel/electron4/files/patch-components_content__settings_core_browser_website__settings__registry.cc11
-rw-r--r--devel/electron4/files/patch-components_cookie__config_cookie__store__util.cc24
-rw-r--r--devel/electron4/files/patch-components_crash_content_app_BUILD.gn20
-rw-r--r--devel/electron4/files/patch-components_crash_content_app_crashpad.cc43
-rw-r--r--devel/electron4/files/patch-components_crash_content_browser_BUILD.gn23
-rw-r--r--devel/electron4/files/patch-components_crash_core_common_BUILD.gn28
-rw-r--r--devel/electron4/files/patch-components_download_internal_common_base__file.cc11
-rw-r--r--devel/electron4/files/patch-components_download_quarantine_quarantine__linux.cc49
-rw-r--r--devel/electron4/files/patch-components_feature__engagement_public_event__constants.cc14
-rw-r--r--devel/electron4/files/patch-components_feature__engagement_public_event__constants.h20
-rw-r--r--devel/electron4/files/patch-components_feedback_anonymizer__tool.cc14
-rw-r--r--devel/electron4/files/patch-components_flags__ui_flags__state.cc11
-rw-r--r--devel/electron4/files/patch-components_gcm__driver_gcm__client.h10
-rw-r--r--devel/electron4/files/patch-components_gcm__driver_gcm__client__impl.cc12
-rw-r--r--devel/electron4/files/patch-components_keyed__service_core_dependency__graph__unittest.cc14
-rw-r--r--devel/electron4/files/patch-components_metrics_BUILD.gn14
-rw-r--r--devel/electron4/files/patch-components_metrics_drive__metrics__provider__linux.cc16
-rw-r--r--devel/electron4/files/patch-components_metrics_system__memory__stats__recorder__linux.cc18
-rw-r--r--devel/electron4/files/patch-components_neterror_resources_neterror.js11
-rw-r--r--devel/electron4/files/patch-components_network__session__configurator_browser_network__session__configurator.cc11
-rw-r--r--devel/electron4/files/patch-components_new__or__sad__tab__strings.grdp38
-rw-r--r--devel/electron4/files/patch-components_os__crypt_os__crypt.h29
-rw-r--r--devel/electron4/files/patch-components_os__crypt_os__crypt__unittest.cc11
-rw-r--r--devel/electron4/files/patch-components_password__manager_core_browser_import_csv__reader.cc14
-rw-r--r--devel/electron4/files/patch-components_plugins_renderer_plugin__placeholder.cc14
-rw-r--r--devel/electron4/files/patch-components_policy_core_common_schema.cc14
-rw-r--r--devel/electron4/files/patch-components_policy_resources_policy__templates.json83
-rw-r--r--devel/electron4/files/patch-components_policy_tools_generate__policy__source.py20
-rw-r--r--devel/electron4/files/patch-components_previews_core_previews__features.cc11
-rw-r--r--devel/electron4/files/patch-components_services_filesystem_file__system__app.cc20
-rw-r--r--devel/electron4/files/patch-components_services_font_font__service__app.cc11
-rw-r--r--devel/electron4/files/patch-components_storage__monitor_BUILD.gn20
-rw-r--r--devel/electron4/files/patch-components_storage__monitor_removable__device__constants.cc11
-rw-r--r--devel/electron4/files/patch-components_storage__monitor_removable__device__constants.h11
-rw-r--r--devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.cc57
-rw-r--r--devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.h48
-rw-r--r--devel/electron4/files/patch-components_sync_base_get__session__name.cc20
-rw-r--r--devel/electron4/files/patch-components_sync_base_get__session__name__linux.cc14
-rw-r--r--devel/electron4/files/patch-components_update__client_update__query__params.cc11
-rw-r--r--devel/electron4/files/patch-components_url__matcher_regex__set__matcher.cc16
-rw-r--r--devel/electron4/files/patch-components_url__matcher_url__matcher__factory.cc14
-rw-r--r--devel/electron4/files/patch-components_webcrypto_algorithms_test__helpers.cc14
-rw-r--r--devel/electron4/files/patch-content_app_content__main__runner__impl.cc29
-rw-r--r--devel/electron4/files/patch-content_browser_BUILD.gn14
-rw-r--r--devel/electron4/files/patch-content_browser_browser__main__loop.cc28
-rw-r--r--devel/electron4/files/patch-content_browser_child__process__launcher__helper__linux.cc76
-rw-r--r--devel/electron4/files/patch-content_browser_media_media__internals.cc11
-rw-r--r--devel/electron4/files/patch-content_browser_memory_memory__monitor.cc11
-rw-r--r--devel/electron4/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc16
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc29
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.cc29
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.h19
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__process__host__impl.h15
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__view__host__impl.cc11
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc29
-rw-r--r--devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc11
-rw-r--r--devel/electron4/files/patch-content_browser_service__worker_service__worker__fetch__dispatcher.cc11
-rw-r--r--devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.cc69
-rw-r--r--devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.h25
-rw-r--r--devel/electron4/files/patch-content_common_BUILD.gn15
-rw-r--r--devel/electron4/files/patch-content_common_common__sandbox__support__linux.cc10
-rw-r--r--devel/electron4/files/patch-content_common_user__agent.cc17
-rw-r--r--devel/electron4/files/patch-content_gpu_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-content_gpu_gpu__main.cc47
-rw-r--r--devel/electron4/files/patch-content_gpu_gpu__sandbox__hook__linux.cc11
-rw-r--r--devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc29
-rw-r--r--devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h20
-rw-r--r--devel/electron4/files/patch-content_ppapi__plugin_ppapi__plugin__main.cc11
-rw-r--r--devel/electron4/files/patch-content_public_browser_web__ui__data__source.h51
-rw-r--r--devel/electron4/files/patch-content_public_common_child__process__host.h20
-rw-r--r--devel/electron4/files/patch-content_public_common_content__switches.cc11
-rw-r--r--devel/electron4/files/patch-content_public_common_content__switches.h11
-rw-r--r--devel/electron4/files/patch-content_public_common_renderer__preferences.h11
-rw-r--r--devel/electron4/files/patch-content_public_common_use__zoom__for__dsf__policy.cc11
-rw-r--r--devel/electron4/files/patch-content_public_test_browser__test__base.cc13
-rw-r--r--devel/electron4/files/patch-content_renderer_media_stream_processed__local__audio__source.cc11
-rw-r--r--devel/electron4/files/patch-content_renderer_render__thread__impl.cc56
-rw-r--r--devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.cc56
-rw-r--r--devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.h11
-rw-r--r--devel/electron4/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc19
-rw-r--r--devel/electron4/files/patch-content_shell_browser_shell__browser__context.cc20
-rw-r--r--devel/electron4/files/patch-content_shell_browser_shell__browser__main__parts.cc20
-rw-r--r--devel/electron4/files/patch-content_test_content__test__suite.cc18
-rw-r--r--devel/electron4/files/patch-content_utility_utility__main.cc11
-rw-r--r--devel/electron4/files/patch-device_bluetooth_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-device_gamepad_gamepad__provider.cc11
-rw-r--r--devel/electron4/files/patch-device_serial_BUILD.gn25
-rw-r--r--devel/electron4/files/patch-device_serial_serial__io__handler__posix.cc11
-rw-r--r--devel/electron4/files/patch-device_usb_BUILD.gn21
-rw-r--r--devel/electron4/files/patch-device_usb_usb__context.cc12
-rw-r--r--devel/electron4/files/patch-device_usb_usb__error.cc11
-rw-r--r--devel/electron4/files/patch-device_usb_usb__service__impl.cc45
-rw-r--r--devel/electron4/files/patch-device_usb_usb__service__impl.h26
-rw-r--r--devel/electron4/files/patch-electron_BUILD.gn27
-rw-r--r--devel/electron4/files/patch-electron_atom_app_atom__main.cc35
-rw-r--r--devel/electron4/files/patch-electron_atom_app_atom__main__delegate.cc11
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_api_atom__api__app.cc29
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_api_atom__api__web__contents.cc20
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc20
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_browser.h15
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_io__thread.cc29
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_relauncher__linux.cc32
-rw-r--r--devel/electron4/files/patch-electron_atom_browser_ui_views_submenu__button.cc11
-rw-r--r--devel/electron4/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc42
-rw-r--r--devel/electron4/files/patch-electron_atom_common_atom__command__line.cc11
-rw-r--r--devel/electron4/files/patch-electron_atom_common_atom__command__line.h11
-rw-r--r--devel/electron4/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc14
-rw-r--r--devel/electron4/files/patch-electron_atom_common_node__bindings.cc11
-rw-r--r--devel/electron4/files/patch-electron_atom_common_node__bindings__linux.cc69
-rw-r--r--devel/electron4/files/patch-electron_brightray_browser_brightray__paths.h11
-rw-r--r--devel/electron4/files/patch-electron_brightray_browser_browser__main__parts.cc29
-rw-r--r--devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.cc38
-rw-r--r--devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.h11
-rw-r--r--devel/electron4/files/patch-electron_brightray_common_platform__util.h11
-rw-r--r--devel/electron4/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc20
-rw-r--r--devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.cc17
-rw-r--r--devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.h11
-rw-r--r--devel/electron4/files/patch-electron_lib_browser_api_app.js11
-rw-r--r--devel/electron4/files/patch-electron_lib_browser_api_dialog.js11
-rw-r--r--devel/electron4/files/patch-electron_lib_browser_api_menu-item-roles.js11
-rw-r--r--devel/electron4/files/patch-electron_lib_browser_api_power-monitor.js11
-rw-r--r--devel/electron4/files/patch-electron_lib_browser_init.js11
-rw-r--r--devel/electron4/files/patch-electron_lib_common_api_clipboard.js10
-rw-r--r--devel/electron4/files/patch-electron_script_lib_utils.js10
-rw-r--r--devel/electron4/files/patch-electron_spec_api-app-spec.js75
-rw-r--r--devel/electron4/files/patch-electron_spec_api-auto-updater-spec.js11
-rw-r--r--devel/electron4/files/patch-electron_spec_api-browser-window-spec.js38
-rw-r--r--devel/electron4/files/patch-electron_spec_api-clipboard-spec.js38
-rw-r--r--devel/electron4/files/patch-electron_spec_api-crash-reporter-spec.js11
-rw-r--r--devel/electron4/files/patch-electron_spec_api-net-log-spec.js29
-rw-r--r--devel/electron4/files/patch-electron_spec_api-notification-dbus-spec.js11
-rw-r--r--devel/electron4/files/patch-electron_spec_api-power-monitor-spec.js11
-rw-r--r--devel/electron4/files/patch-electron_spec_chromium-spec.js11
-rw-r--r--devel/electron4/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc14
-rw-r--r--devel/electron4/files/patch-extensions_browser_api_messaging_message__service.cc20
-rw-r--r--devel/electron4/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc20
-rw-r--r--devel/electron4/files/patch-extensions_browser_api_web__request_form__data__parser.cc14
-rw-r--r--devel/electron4/files/patch-extensions_browser_browser__context__keyed__service__factories.cc11
-rw-r--r--devel/electron4/files/patch-extensions_common_api___permission__features.json29
-rw-r--r--devel/electron4/files/patch-extensions_common_api_runtime.json11
-rw-r--r--devel/electron4/files/patch-extensions_common_feature__switch.cc14
-rw-r--r--devel/electron4/files/patch-extensions_common_features_feature.cc11
-rw-r--r--devel/electron4/files/patch-extensions_common_image__util.cc14
-rw-r--r--devel/electron4/files/patch-extensions_common_stack__frame.cc14
-rw-r--r--devel/electron4/files/patch-extensions_renderer_bindings_api__binding__util.cc11
-rw-r--r--devel/electron4/files/patch-extensions_shell_app_shell__main__delegate.cc29
-rw-r--r--devel/electron4/files/patch-gpu_command__buffer_service_program__manager.cc14
-rw-r--r--devel/electron4/files/patch-gpu_config_gpu__control__list.cc32
-rw-r--r--devel/electron4/files/patch-gpu_config_gpu__test__config.cc11
-rw-r--r--devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc54
-rw-r--r--devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h38
-rw-r--r--devel/electron4/files/patch-gpu_ipc_service_gpu__init.cc29
-rw-r--r--devel/electron4/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc20
-rw-r--r--devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.cc20
-rw-r--r--devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.h11
-rw-r--r--devel/electron4/files/patch-headless_lib_headless__macros.h13
-rw-r--r--devel/electron4/files/patch-ipc_ipc__channel.h11
-rw-r--r--devel/electron4/files/patch-ipc_ipc__channel__common.cc11
-rw-r--r--devel/electron4/files/patch-ipc_ipc__channel__mojo.cc11
-rw-r--r--devel/electron4/files/patch-ipc_ipc__message__utils.cc11
-rw-r--r--devel/electron4/files/patch-ipc_ipc__message__utils.h11
-rw-r--r--devel/electron4/files/patch-media_BUILD.gn12
-rw-r--r--devel/electron4/files/patch-media_audio_BUILD.gn31
-rw-r--r--devel/electron4/files/patch-media_audio_alsa_audio__manager__alsa.cc54
-rw-r--r--devel/electron4/files/patch-media_audio_audio__manager.cc29
-rw-r--r--devel/electron4/files/patch-media_audio_audio__manager.h11
-rw-r--r--devel/electron4/files/patch-media_audio_audio__output__proxy__unittest.cc11
-rw-r--r--devel/electron4/files/patch-media_audio_pulse_pulse.sigs143
-rw-r--r--devel/electron4/files/patch-media_base_audio__latency.cc11
-rw-r--r--devel/electron4/files/patch-media_base_scopedfd__helper.h19
-rw-r--r--devel/electron4/files/patch-media_base_video__frame.cc47
-rw-r--r--devel/electron4/files/patch-media_base_video__frame.h38
-rw-r--r--devel/electron4/files/patch-media_capture_video_create__video__capture__device__factory.cc20
-rw-r--r--devel/electron4/files/patch-media_capture_video_fake__video__capture__device__factory.cc11
-rw-r--r--devel/electron4/files/patch-media_capture_video_file__video__capture__device__factory.cc11
-rw-r--r--devel/electron4/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc26
-rw-r--r--devel/electron4/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc32
-rw-r--r--devel/electron4/files/patch-media_capture_video_linux_video__capture__device__linux.cc60
-rw-r--r--devel/electron4/files/patch-media_capture_video_video__capture__device__client.cc11
-rw-r--r--devel/electron4/files/patch-media_filters_vp9__parser.h10
-rw-r--r--devel/electron4/files/patch-media_formats_common_offset__byte__queue.cc20
-rw-r--r--devel/electron4/files/patch-media_formats_common_offset__byte__queue.h22
-rw-r--r--devel/electron4/files/patch-media_formats_mp2t_es__parser__adts.cc26
-rw-r--r--devel/electron4/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc26
-rw-r--r--devel/electron4/files/patch-media_media__options.gni12
-rw-r--r--devel/electron4/files/patch-mojo_core_options__validation__unittest.cc11
-rw-r--r--devel/electron4/files/patch-mojo_public_c_system_buffer.h11
-rw-r--r--devel/electron4/files/patch-mojo_public_c_system_data__pipe.h11
-rw-r--r--devel/electron4/files/patch-mojo_public_c_system_message__pipe.h11
-rw-r--r--devel/electron4/files/patch-mojo_public_c_system_thunks.cc47
-rw-r--r--devel/electron4/files/patch-net_BUILD.gn29
-rw-r--r--devel/electron4/files/patch-net_base_address__tracker__linux.cc259
-rw-r--r--devel/electron4/files/patch-net_base_address__tracker__linux.h12
-rw-r--r--devel/electron4/files/patch-net_base_address__tracker__linux__unittest.cc14
-rw-r--r--devel/electron4/files/patch-net_base_network__change__notifier.cc10
-rw-r--r--devel/electron4/files/patch-net_base_network__interfaces__freebsd.cc243
-rw-r--r--devel/electron4/files/patch-net_base_network__interfaces__freebsd.h47
-rw-r--r--devel/electron4/files/patch-net_base_network__interfaces__posix.h11
-rw-r--r--devel/electron4/files/patch-net_disk__cache_blockfile_disk__format.h12
-rw-r--r--devel/electron4/files/patch-net_dns_address__sorter__posix.cc12
-rw-r--r--devel/electron4/files/patch-net_dns_dns__config__service__posix__unittest.cc11
-rw-r--r--devel/electron4/files/patch-net_dns_dns__reloader.cc13
-rw-r--r--devel/electron4/files/patch-net_dns_dns__util.cc11
-rw-r--r--devel/electron4/files/patch-net_dns_host__resolver__proc.cc11
-rw-r--r--devel/electron4/files/patch-net_features.gni11
-rw-r--r--devel/electron4/files/patch-net_http_http__auth__gssapi__posix.cc14
-rw-r--r--devel/electron4/files/patch-net_http_http__network__session.cc12
-rw-r--r--devel/electron4/files/patch-net_proxy__resolution_proxy__config__service__linux.cc39
-rw-r--r--devel/electron4/files/patch-net_proxy__resolution_proxy__resolution__service.cc29
-rw-r--r--devel/electron4/files/patch-net_socket_socks5__client__socket.cc13
-rw-r--r--devel/electron4/files/patch-net_socket_udp__socket__posix.cc96
-rw-r--r--devel/electron4/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc10
-rw-r--r--devel/electron4/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc20
-rw-r--r--devel/electron4/files/patch-net_url__request_url__request__context__builder.cc11
-rw-r--r--devel/electron4/files/patch-pdf_pdfium_pdfium__engine.cc65
-rw-r--r--devel/electron4/files/patch-ppapi_proxy_file__io__resource.cc48
-rw-r--r--devel/electron4/files/patch-printing_backend_print__backend__cups.h11
-rw-r--r--devel/electron4/files/patch-printing_cups__config__helper.py11
-rw-r--r--devel/electron4/files/patch-remoting_base_chromoting__event.cc11
-rw-r--r--devel/electron4/files/patch-remoting_client_display_sys__opengl.h11
-rw-r--r--devel/electron4/files/patch-remoting_host_evaluate__capability.cc11
-rw-r--r--devel/electron4/files/patch-remoting_host_host__attributes.cc11
-rw-r--r--devel/electron4/files/patch-remoting_host_host__details.cc11
-rw-r--r--devel/electron4/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc20
-rw-r--r--devel/electron4/files/patch-remoting_host_me2me__desktop__environment.cc11
-rw-r--r--devel/electron4/files/patch-remoting_host_remoting__me2me__host.cc108
-rw-r--r--devel/electron4/files/patch-remoting_webapp_base_js_platform.js17
-rw-r--r--devel/electron4/files/patch-sandbox_features.gni10
-rw-r--r--devel/electron4/files/patch-sandbox_linux_BUILD.gn47
-rw-r--r--devel/electron4/files/patch-sandbox_linux_services_init__process__reaper.cc15
-rw-r--r--devel/electron4/files/patch-sandbox_linux_services_libc__interceptor.cc21
-rw-r--r--devel/electron4/files/patch-services_catalog_public_cpp_manifest__parsing__util.cc21
-rw-r--r--devel/electron4/files/patch-services_catalog_store.cc10
-rw-r--r--devel/electron4/files/patch-services_catalog_store.h10
-rw-r--r--devel/electron4/files/patch-services_content_simple__browser_simple__browser__service.h20
-rw-r--r--devel/electron4/files/patch-services_device_geolocation_location__arbitrator.cc11
-rw-r--r--devel/electron4/files/patch-services_device_hid_BUILD.gn22
-rw-r--r--devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.cc194
-rw-r--r--devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.h73
-rw-r--r--devel/electron4/files/patch-services_device_hid_hid__service.cc20
-rw-r--r--devel/electron4/files/patch-services_device_hid_hid__service__freebsd.cc374
-rw-r--r--devel/electron4/files/patch-services_device_hid_hid__service__freebsd.h51
-rw-r--r--devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc11
-rw-r--r--devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc14
-rw-r--r--devel/electron4/files/patch-services_network_BUILD.gn10
-rw-r--r--devel/electron4/files/patch-services_network_network__context.cc38
-rw-r--r--devel/electron4/files/patch-services_network_network__sandbox__hook__linux.cc18
-rw-r--r--devel/electron4/files/patch-services_network_network__service.cc20
-rw-r--r--devel/electron4/files/patch-services_network_network__service.h11
-rw-r--r--devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h11
-rw-r--r--devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc40
-rw-r--r--devel/electron4/files/patch-services_service__manager_embedder_main.cc11
-rw-r--r--devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.cc19
-rw-r--r--devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.h20
-rw-r--r--devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_standalone__service.cc11
-rw-r--r--devel/electron4/files/patch-services_service__manager_runner_host_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-services_service__manager_sandbox_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_common_zygote__features.gni8
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc40
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h13
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_zygote__host__linux.h16
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_zygote__linux.cc15
-rw-r--r--devel/electron4/files/patch-services_service__manager_zygote_zygote__main__linux.cc48
-rw-r--r--devel/electron4/files/patch-services_tracing_public_cpp_trace__event__agent.cc11
-rw-r--r--devel/electron4/files/patch-services_tracing_tracing__service.h11
-rw-r--r--devel/electron4/files/patch-skia_ext_SkMemory__new__handler.cpp20
-rw-r--r--devel/electron4/files/patch-third__party_angle_BUILD.gn21
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h16
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp90
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp21
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp55
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_libANGLE_Display.cpp20
-rw-r--r--devel/electron4/files/patch-third__party_angle_src_libANGLE_renderer_gl_renderergl__utils.cpp11
-rw-r--r--devel/electron4/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h10
-rw-r--r--devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c11
-rw-r--r--devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h11
-rw-r--r--devel/electron4/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_BUILD.gn10
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc20
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h38
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc20
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc29
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc20
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc14
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn16
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_atomics.h11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h11
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc14
-rw-r--r--devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc22
-rw-r--r--devel/electron4/files/patch-third__party_boringssl_BUILD.gn36
-rw-r--r--devel/electron4/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c54
-rw-r--r--devel/electron4/files/patch-third__party_boringssl_src_crypto_ex__data.c13
-rw-r--r--devel/electron4/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h11
-rw-r--r--devel/electron4/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h20
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h20
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc11
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc33
-rw-r--r--devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc20
-rw-r--r--devel/electron4/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h19
-rw-r--r--devel/electron4/files/patch-third__party_electron__node_common.gypi18
-rw-r--r--devel/electron4/files/patch-third__party_electron__node_deps_uv_BUILD.gn44
-rw-r--r--devel/electron4/files/patch-third__party_ffmpeg_libavutil_mem.c12
-rw-r--r--devel/electron4/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h11
-rw-r--r--devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc43
-rw-r--r--devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest.cc10
-rw-r--r--devel/electron4/files/patch-third__party_leveldatabase_env__chromium.cc14
-rw-r--r--devel/electron4/files/patch-third__party_libXNVCtrl_NVCtrl.c25
-rw-r--r--devel/electron4/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc11
-rw-r--r--devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h11
-rw-r--r--devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h11
-rw-r--r--devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h19
-rw-r--r--devel/electron4/files/patch-third__party_libyuv_include_libyuv_row.h37
-rw-r--r--devel/electron4/files/patch-third__party_node_node.py10
-rw-r--r--devel/electron4/files/patch-third__party_pdfium_core_fxcrt_fx__system.h11
-rw-r--r--devel/electron4/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp14
-rw-r--r--devel/electron4/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp106
-rw-r--r--devel/electron4/files/patch-third__party_pdfium_fxjs_js__define.cpp22
-rw-r--r--devel/electron4/files/patch-third__party_pdfium_third__party_base_logging.h11
-rw-r--r--devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_build__config.h37
-rw-r--r--devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h11
-rw-r--r--devel/electron4/files/patch-third__party_perfetto_src_base_unix__task__runner.cc11
-rw-r--r--devel/electron4/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc12
-rw-r--r--devel/electron4/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h11
-rw-r--r--devel/electron4/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc47
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_core_SkCpu.cpp19
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h11
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp41
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h20
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp77
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp11
-rw-r--r--devel/electron4/files/patch-third__party_skia_src_sksl_SkSLString.h11
-rw-r--r--devel/electron4/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h11
-rw-r--r--devel/electron4/files/patch-third__party_snappy_src_snappy.h20
-rw-r--r--devel/electron4/files/patch-third__party_sqlite_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_BUILD.gn10
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_Common_Configurator.cpp12
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp14
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp29
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp11
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h29
-rw-r--r--devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc11
-rw-r--r--devel/electron4/files/patch-third__party_usrsctp_BUILD.gn20
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_BUILD.gn12
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_BUILD.gn20
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_byteorder.h11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_httpcommon.cc11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_ipaddress.h13
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_network.cc29
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_network.h13
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.cc56
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.h11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread.cc12
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc40
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_rtc__base_stringutils.h17
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_system__wrappers_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-third__party_webrtc_webrtc.gni11
-rw-r--r--devel/electron4/files/patch-third__party_yasm_BUILD.gn16
-rw-r--r--devel/electron4/files/patch-third__party_zlib_BUILD.gn20
-rw-r--r--devel/electron4/files/patch-third__party_zlib_arm__features.c29
-rw-r--r--devel/electron4/files/patch-tools_gn_base_files_file__posix.cc11
-rw-r--r--devel/electron4/files/patch-tools_gn_base_files_file__util.h11
-rw-r--r--devel/electron4/files/patch-tools_gn_base_files_file__util__posix.cc11
-rw-r--r--devel/electron4/files/patch-tools_gn_base_files_scoped__file.cc11
-rw-r--r--devel/electron4/files/patch-tools_gn_build_gen.py33
-rw-r--r--devel/electron4/files/patch-tools_gn_tools_gn_exec__process.cc13
-rw-r--r--devel/electron4/files/patch-tools_gn_util_sys__info.cc11
-rw-r--r--devel/electron4/files/patch-tools_json__schema__compiler_feature__compiler.py10
-rw-r--r--devel/electron4/files/patch-tools_json__schema__compiler_model.py11
-rw-r--r--devel/electron4/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-tools_variations_fieldtrial__to__struct.py10
-rw-r--r--devel/electron4/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc20
-rw-r--r--devel/electron4/files/patch-ui_base_ime_ime__engine__handler__interface.h11
-rw-r--r--devel/electron4/files/patch-ui_base_ime_input__method__initializer.cc38
-rw-r--r--devel/electron4/files/patch-ui_base_resource_resource__bundle.cc20
-rw-r--r--devel/electron4/files/patch-ui_base_resource_resource__bundle__freebsd.cc24
-rw-r--r--devel/electron4/files/patch-ui_base_ui__base__features.cc20
-rw-r--r--devel/electron4/files/patch-ui_base_ui__base__features.h14
-rw-r--r--devel/electron4/files/patch-ui_base_webui_web__ui__util.cc11
-rw-r--r--devel/electron4/files/patch-ui_events_devices_x11_device__data__manager__x11.cc19
-rw-r--r--devel/electron4/files/patch-ui_events_event__switches.cc11
-rw-r--r--devel/electron4/files/patch-ui_events_event__switches.h11
-rw-r--r--devel/electron4/files/patch-ui_events_keycodes_dom_keycode__converter.cc11
-rw-r--r--devel/electron4/files/patch-ui_gfx_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-ui_gfx_canvas__skia.cc11
-rw-r--r--devel/electron4/files/patch-ui_gfx_codec_jpeg__codec.cc20
-rw-r--r--devel/electron4/files/patch-ui_gfx_font__fallback__linux.cc13
-rw-r--r--devel/electron4/files/patch-ui_gfx_font__list.cc11
-rw-r--r--devel/electron4/files/patch-ui_gfx_font__render__params.h18
-rw-r--r--devel/electron4/files/patch-ui_gfx_gpu__memory__buffer.h20
-rw-r--r--devel/electron4/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h29
-rw-r--r--devel/electron4/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc25
-rw-r--r--devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc42
-rw-r--r--devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h11
-rw-r--r--devel/electron4/files/patch-ui_gfx_native__pixmap__handle.cc28
-rw-r--r--devel/electron4/files/patch-ui_gfx_native__pixmap__handle.h28
-rw-r--r--devel/electron4/files/patch-ui_gfx_render__text.cc46
-rw-r--r--devel/electron4/files/patch-ui_gl_BUILD.gn11
-rw-r--r--devel/electron4/files/patch-ui_gl_generate__bindings.py12
-rw-r--r--devel/electron4/files/patch-ui_gl_gl__bindings__api__autogen__glx.h10
-rw-r--r--devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.cc61
-rw-r--r--devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.h43
-rw-r--r--devel/electron4/files/patch-ui_gl_gl__fence.cc11
-rw-r--r--devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.cc43
-rw-r--r--devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.h34
-rw-r--r--devel/electron4/files/patch-ui_message__center_public_cpp_message__center__constants.h11
-rw-r--r--devel/electron4/files/patch-ui_native__theme_native__theme.h11
-rw-r--r--devel/electron4/files/patch-ui_native__theme_native__theme__base.cc11
-rw-r--r--devel/electron4/files/patch-ui_strings_app__locale__settings.grd11
-rw-r--r--devel/electron4/files/patch-ui_views_controls_label.cc20
-rw-r--r--devel/electron4/files/patch-ui_views_controls_textfield_textfield.cc73
-rw-r--r--devel/electron4/files/patch-ui_views_corewm_tooltip__aura.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_examples_widget__example.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_selection__controller.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_style_platform__style.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_views__delegate.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_views__delegate.h11
-rw-r--r--devel/electron4/files/patch-ui_views_window_custom__frame__view.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_window_dialog__delegate.cc11
-rw-r--r--devel/electron4/files/patch-ui_views_window_frame__background.cc11
-rw-r--r--devel/electron4/files/patch-ui_webui_resources_js_cr.js14
-rw-r--r--devel/electron4/files/patch-ui_webui_resources_js_icon.js11
-rw-r--r--devel/electron4/files/patch-v8_BUILD.gn41
-rw-r--r--devel/electron4/files/patch-v8_src_base_cpu.cc18
-rw-r--r--devel/electron4/files/patch-v8_src_base_platform_platform-posix.cc15
-rw-r--r--devel/electron4/files/patch-v8_src_log-utils.h11
-rw-r--r--devel/electron4/pkg-descr10
-rw-r--r--devel/electron4/pkg-plist122
-rw-r--r--devel/electron5/Makefile302
-rw-r--r--devel/electron5/Makefile.tests55
-rw-r--r--devel/electron5/Makefile.version4
-rw-r--r--devel/electron5/distinfo15
-rw-r--r--devel/electron5/files/apply-electron-patches.sh20
-rw-r--r--devel/electron5/files/package-lock.json13356
-rw-r--r--devel/electron5/files/package.json88
-rw-r--r--devel/electron5/files/patch-BUILD.gn87
-rw-r--r--devel/electron5/files/patch-apps_ui_views_app__window__frame__view.cc11
-rw-r--r--devel/electron5/files/patch-ash_display_mirror__window__controller.cc14
-rw-r--r--devel/electron5/files/patch-base_BUILD.gn67
-rw-r--r--devel/electron5/files/patch-base_allocator_allocator__shim.cc11
-rw-r--r--devel/electron5/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc77
-rw-r--r--devel/electron5/files/patch-base_allocator_allocator__shim__override__libc__symbols.h11
-rw-r--r--devel/electron5/files/patch-base_allocator_allocator__shim__unittest.cc36
-rw-r--r--devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator.cc11
-rw-r--r--devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h38
-rw-r--r--devel/electron5/files/patch-base_debug_debugger__posix.cc56
-rw-r--r--devel/electron5/files/patch-base_debug_elf__reader__linux.cc13
-rw-r--r--devel/electron5/files/patch-base_debug_proc__maps__linux.cc11
-rw-r--r--devel/electron5/files/patch-base_debug_stack__trace.cc11
-rw-r--r--devel/electron5/files/patch-base_debug_stack__trace.h10
-rw-r--r--devel/electron5/files/patch-base_debug_stack__trace__posix.cc31
-rw-r--r--devel/electron5/files/patch-base_files_file__path__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_files_file__path__watcher__kqueue.h13
-rw-r--r--devel/electron5/files/patch-base_files_file__path__watcher__stub.cc51
-rw-r--r--devel/electron5/files/patch-base_files_file__path__watcher__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_files_file__util.h11
-rw-r--r--devel/electron5/files/patch-base_files_file__util__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_files_memory__mapped__file__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_i18n_icu__util.cc20
-rw-r--r--devel/electron5/files/patch-base_linux__util.cc18
-rw-r--r--devel/electron5/files/patch-base_logging__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_native__library__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_native__library__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_numerics_safe__math__shared__impl.h13
-rw-r--r--devel/electron5/files/patch-base_posix_can__lower__nice__to.cc20
-rw-r--r--devel/electron5/files/patch-base_posix_unix__domain__socket.cc49
-rw-r--r--devel/electron5/files/patch-base_posix_unix__domain__socket__unittest.cc12
-rw-r--r--devel/electron5/files/patch-base_process_internal__linux.cc16
-rw-r--r--devel/electron5/files/patch-base_process_internal__linux.h11
-rw-r--r--devel/electron5/files/patch-base_process_kill.h11
-rw-r--r--devel/electron5/files/patch-base_process_kill__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_process_launch.cc11
-rw-r--r--devel/electron5/files/patch-base_process_launch.h20
-rw-r--r--devel/electron5/files/patch-base_process_launch__posix.cc10
-rw-r--r--devel/electron5/files/patch-base_process_memory.cc20
-rw-r--r--devel/electron5/files/patch-base_process_memory.h11
-rw-r--r--devel/electron5/files/patch-base_process_memory__unittest.cc18
-rw-r--r--devel/electron5/files/patch-base_process_process__handle.cc11
-rw-r--r--devel/electron5/files/patch-base_process_process__handle.h11
-rw-r--r--devel/electron5/files/patch-base_process_process__handle__freebsd.cc17
-rw-r--r--devel/electron5/files/patch-base_process_process__iterator__freebsd.cc44
-rw-r--r--devel/electron5/files/patch-base_process_process__linux.cc18
-rw-r--r--devel/electron5/files/patch-base_process_process__metrics.cc20
-rw-r--r--devel/electron5/files/patch-base_process_process__metrics.h112
-rw-r--r--devel/electron5/files/patch-base_process_process__metrics__freebsd.cc122
-rw-r--r--devel/electron5/files/patch-base_process_process__metrics__posix.cc20
-rw-r--r--devel/electron5/files/patch-base_process_process__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_profiler_stack__sampling__profiler__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_security__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_strings_safe__sprintf__unittest.cc18
-rw-r--r--devel/electron5/files/patch-base_system_sys__info__freebsd.cc71
-rw-r--r--devel/electron5/files/patch-base_system_sys__info__posix.cc38
-rw-r--r--devel/electron5/files/patch-base_task_task__scheduler_scheduler__single__thread__task__runner__manager__unittest.cc12
-rw-r--r--devel/electron5/files/patch-base_test_generate__fontconfig__caches.cc17
-rw-r--r--devel/electron5/files/patch-base_test_launcher_test__launcher.cc10
-rw-r--r--devel/electron5/files/patch-base_test_test__file__util__linux.cc13
-rw-r--r--devel/electron5/files/patch-base_test_test__file__util__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_third__party_libevent_BUILD.gn24
-rw-r--r--devel/electron5/files/patch-base_threading_platform__thread.h11
-rw-r--r--devel/electron5/files/patch-base_threading_platform__thread__linux.cc30
-rw-r--r--devel/electron5/files/patch-base_threading_platform__thread__posix.cc11
-rw-r--r--devel/electron5/files/patch-base_threading_thread__local__storage__unittest.cc11
-rw-r--r--devel/electron5/files/patch-base_threading_thread__task__runner__handle.cc26
-rw-r--r--devel/electron5/files/patch-base_trace__event_malloc__dump__provider.cc21
-rw-r--r--devel/electron5/files/patch-base_trace__event_process__memory__dump.cc11
-rw-r--r--devel/electron5/files/patch-base_trace__event_process__memory__dump.h11
-rw-r--r--devel/electron5/files/patch-build_config_BUILD.gn30
-rw-r--r--devel/electron5/files/patch-build_config_BUILDCONFIG.gn48
-rw-r--r--devel/electron5/files/patch-build_config_allocator.gni20
-rw-r--r--devel/electron5/files/patch-build_config_compiler_BUILD.gn83
-rw-r--r--devel/electron5/files/patch-build_config_compiler_compiler.gni11
-rw-r--r--devel/electron5/files/patch-build_config_features.gni11
-rw-r--r--devel/electron5/files/patch-build_config_freetype_freetype.gni9
-rw-r--r--devel/electron5/files/patch-build_config_linux_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-build_config_linux_pkg-config.py26
-rw-r--r--devel/electron5/files/patch-build_config_sysroot.gni15
-rw-r--r--devel/electron5/files/patch-build_detect__host__arch.py11
-rw-r--r--devel/electron5/files/patch-build_gn__run__binary.py11
-rw-r--r--devel/electron5/files/patch-build_linux_chrome.map29
-rw-r--r--devel/electron5/files/patch-build_linux_libpci_BUILD.gn53
-rw-r--r--devel/electron5/files/patch-build_linux_unbundle_libusb.gn27
-rw-r--r--devel/electron5/files/patch-build_linux_unbundle_replace__gn__files.py10
-rw-r--r--devel/electron5/files/patch-build_toolchain_gcc__toolchain.gni45
-rw-r--r--devel/electron5/files/patch-build_toolchain_get__concurrent__links.py17
-rw-r--r--devel/electron5/files/patch-build_toolchain_linux_BUILD.gn10
-rw-r--r--devel/electron5/files/patch-cc_BUILD.gn21
-rw-r--r--devel/electron5/files/patch-cc_layers_scrollbar__layer__impl__base.cc13
-rw-r--r--devel/electron5/files/patch-cc_trees_property__tree.cc20
-rw-r--r--devel/electron5/files/patch-chrome_app_chrome__command__ids.h11
-rw-r--r--devel/electron5/files/patch-chrome_app_chrome__main.cc16
-rw-r--r--devel/electron5/files/patch-chrome_app_chrome__main__delegate.cc128
-rw-r--r--devel/electron5/files/patch-chrome_app_chromium__strings.grd20
-rw-r--r--devel/electron5/files/patch-chrome_app_generated__resources.grd29
-rw-r--r--devel/electron5/files/patch-chrome_app_google__chrome__strings.grd20
-rw-r--r--devel/electron5/files/patch-chrome_app_settings__strings.grdp20
-rw-r--r--devel/electron5/files/patch-chrome_app_shutdown__signal__handlers__posix.cc21
-rw-r--r--devel/electron5/files/patch-chrome_app_theme_chrome__unscaled__resources.grd11
-rw-r--r--devel/electron5/files/patch-chrome_browser_about__flags.cc120
-rw-r--r--devel/electron5/files/patch-chrome_browser_after__startup__task__utils.cc38
-rw-r--r--devel/electron5/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc70
-rw-r--r--devel/electron5/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_background_background__mode__optimizer.cc15
-rw-r--r--devel/electron5/files/patch-chrome_browser_browser__resources.grd11
-rw-r--r--devel/electron5/files/patch-chrome_browser_chrome__browser__main.cc72
-rw-r--r--devel/electron5/files/patch-chrome_browser_chrome__browser__main__linux.cc27
-rw-r--r--devel/electron5/files/patch-chrome_browser_chrome__browser__main__posix.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.cc97
-rw-r--r--devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.h17
-rw-r--r--devel/electron5/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_defaults.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_diagnostics_diagnostics__writer.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__commands.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__commands.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__item__model.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__prefs.cc65
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__prefs.h20
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__query.cc14
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__shelf__context__menu.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_download_download__status__updater.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_BUILD.gn15
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_activity__log_activity__log.cc14
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_bookmark__app__helper.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_external__provider__impl.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_extensions_install__signer.cc18
-rw-r--r--devel/electron5/files/patch-chrome_browser_first__run_first__run__internal__posix.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_flag__descriptions.cc34
-rw-r--r--devel/electron5/files/patch-chrome_browser_flag__descriptions.h32
-rw-r--r--devel/electron5/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc15
-rw-r--r--devel/electron5/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc14
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc28
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc27
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc23
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc33
-rw-r--r--devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h36
-rw-r--r--devel/electron5/files/patch-chrome_browser_memory__details.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_memory__details__linux.cc13
-rw-r--r--devel/electron5/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc13
-rw-r--r--devel/electron5/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc21
-rw-r--r--devel/electron5/files/patch-chrome_browser_net_system__network__context__manager.cc26
-rw-r--r--devel/electron5/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc14
-rw-r--r--devel/electron5/files/patch-chrome_browser_password__manager_password__store__factory.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_platform__util.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_plugins_plugins__resource__service.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_policy_machine__level__user__cloud__policy__controller.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_prefs_browser__prefs.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_process__singleton__posix.cc34
-rw-r--r--devel/electron5/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_profiles_profile__attributes__entry.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_renderer__preferences__util.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py19
-rw-r--r--devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js20
-rw-r--r--devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html29
-rw-r--r--devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js33
-rw-r--r--devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc15
-rw-r--r--devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_search_local__files__ntp__source.cc16
-rw-r--r--devel/electron5/files/patch-chrome_browser_signin_signin__util.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_sync_chrome__sync__client.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.cc56
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.h39
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc72
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h50
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc16
-rw-r--r--devel/electron5/files/patch-chrome_browser_task__manager_task__manager__observer.h16
-rw-r--r--devel/electron5/files/patch-chrome_browser_tracing_crash__service__uploader.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_browser__command__controller.cc38
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_browser__view__prefs.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_browser__window.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc10
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_sad__tab.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc22
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_tab__helpers.cc25
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc15
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc50
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_accelerator__table.cc46
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc38
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_chrome__views__delegate.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_first__run__dialog.cc24
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__frame.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.h20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_hung__renderer__view.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc29
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_webui_about__ui.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc49
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h11
-rw-r--r--devel/electron5/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc20
-rw-r--r--devel/electron5/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc11
-rw-r--r--devel/electron5/files/patch-chrome_common_BUILD.gn13
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__features.cc36
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__features.h24
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__paths.cc114
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__paths.h42
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__paths__internal.h11
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__switches.cc17
-rw-r--r--devel/electron5/files/patch-chrome_common_chrome__switches.h17
-rw-r--r--devel/electron5/files/patch-chrome_common_extensions_api_api__sources.gni11
-rw-r--r--devel/electron5/files/patch-chrome_common_extensions_command.cc11
-rw-r--r--devel/electron5/files/patch-chrome_common_features.gni14
-rw-r--r--devel/electron5/files/patch-chrome_common_pref__names.cc29
-rw-r--r--devel/electron5/files/patch-chrome_common_pref__names.h29
-rw-r--r--devel/electron5/files/patch-chrome_common_webui__url__constants.cc41
-rw-r--r--devel/electron5/files/patch-chrome_common_webui__url__constants.h25
-rw-r--r--devel/electron5/files/patch-chrome_renderer_chrome__content__renderer__client.cc11
-rw-r--r--devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc29
-rw-r--r--devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h20
-rw-r--r--devel/electron5/files/patch-chrome_service_cloud__print_print__system.cc11
-rw-r--r--devel/electron5/files/patch-chrome_test_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-chrome_test_base_in__process__browser__test.cc22
-rw-r--r--devel/electron5/files/patch-chrome_test_base_testing__browser__process.h13
-rw-r--r--devel/electron5/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc20
-rw-r--r--devel/electron5/files/patch-chromecast_browser_cast__browser__main__parts.cc29
-rw-r--r--devel/electron5/files/patch-chromecast_browser_cast__content__browser__client.cc11
-rw-r--r--devel/electron5/files/patch-chromecast_browser_tts_tts__controller__impl.cc14
-rw-r--r--devel/electron5/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc23
-rw-r--r--devel/electron5/files/patch-components_autofill__strings.grdp11
-rw-r--r--devel/electron5/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc14
-rw-r--r--devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.cc46
-rw-r--r--devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.h36
-rw-r--r--devel/electron5/files/patch-components_autofill_core_common_autofill__util.cc11
-rw-r--r--devel/electron5/files/patch-components_content__settings_core_browser_website__settings__registry.cc11
-rw-r--r--devel/electron5/files/patch-components_cookie__config_cookie__store__util.cc24
-rw-r--r--devel/electron5/files/patch-components_crash_content_app_BUILD.gn29
-rw-r--r--devel/electron5/files/patch-components_crash_content_app_crashpad.cc43
-rw-r--r--devel/electron5/files/patch-components_crash_content_browser_BUILD.gn27
-rw-r--r--devel/electron5/files/patch-components_crash_core_common_BUILD.gn28
-rw-r--r--devel/electron5/files/patch-components_download_internal_common_base__file.cc11
-rw-r--r--devel/electron5/files/patch-components_download_quarantine_quarantine__linux.cc36
-rw-r--r--devel/electron5/files/patch-components_download_quarantine_test__support__linux.cc20
-rw-r--r--devel/electron5/files/patch-components_feature__engagement_public_event__constants.cc14
-rw-r--r--devel/electron5/files/patch-components_feature__engagement_public_event__constants.h20
-rw-r--r--devel/electron5/files/patch-components_feedback_anonymizer__tool.cc14
-rw-r--r--devel/electron5/files/patch-components_flags__ui_flags__state.cc11
-rw-r--r--devel/electron5/files/patch-components_gcm__driver_gcm__client.h10
-rw-r--r--devel/electron5/files/patch-components_gcm__driver_gcm__client__impl.cc12
-rw-r--r--devel/electron5/files/patch-components_keyed__service_core_dependency__graph__unittest.cc14
-rw-r--r--devel/electron5/files/patch-components_metrics_BUILD.gn14
-rw-r--r--devel/electron5/files/patch-components_metrics_drive__metrics__provider__linux.cc16
-rw-r--r--devel/electron5/files/patch-components_metrics_metrics__log.cc11
-rw-r--r--devel/electron5/files/patch-components_metrics_system__memory__stats__recorder__linux.cc18
-rw-r--r--devel/electron5/files/patch-components_neterror_resources_neterror.js11
-rw-r--r--devel/electron5/files/patch-components_network__session__configurator_browser_network__session__configurator.cc11
-rw-r--r--devel/electron5/files/patch-components_new__or__sad__tab__strings.grdp38
-rw-r--r--devel/electron5/files/patch-components_os__crypt_os__crypt.h48
-rw-r--r--devel/electron5/files/patch-components_os__crypt_os__crypt__unittest.cc11
-rw-r--r--devel/electron5/files/patch-components_plugins_renderer_plugin__placeholder.cc14
-rw-r--r--devel/electron5/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc73
-rw-r--r--devel/electron5/files/patch-components_policy_core_common_schema.cc14
-rw-r--r--devel/electron5/files/patch-components_policy_resources_policy__templates.json83
-rw-r--r--devel/electron5/files/patch-components_policy_tools_generate__policy__source.py20
-rw-r--r--devel/electron5/files/patch-components_previews_core_previews__features.cc18
-rw-r--r--devel/electron5/files/patch-components_services_filesystem_file__system__app.cc20
-rw-r--r--devel/electron5/files/patch-components_services_font_font__service__app.cc11
-rw-r--r--devel/electron5/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc20
-rw-r--r--devel/electron5/files/patch-components_storage__monitor_BUILD.gn20
-rw-r--r--devel/electron5/files/patch-components_storage__monitor_removable__device__constants.cc11
-rw-r--r--devel/electron5/files/patch-components_storage__monitor_removable__device__constants.h11
-rw-r--r--devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.cc57
-rw-r--r--devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.h48
-rw-r--r--devel/electron5/files/patch-components_sync_base_get__session__name.cc20
-rw-r--r--devel/electron5/files/patch-components_sync_base_get__session__name__linux.cc14
-rw-r--r--devel/electron5/files/patch-components_sync_device__info_local__device__info__provider__impl.cc11
-rw-r--r--devel/electron5/files/patch-components_update__client_update__query__params.cc11
-rw-r--r--devel/electron5/files/patch-components_url__matcher_regex__set__matcher.cc16
-rw-r--r--devel/electron5/files/patch-components_url__matcher_url__matcher__factory.cc14
-rw-r--r--devel/electron5/files/patch-components_webcrypto_algorithms_test__helpers.cc14
-rw-r--r--devel/electron5/files/patch-content_app_content__main__runner__impl.cc73
-rw-r--r--devel/electron5/files/patch-content_browser_BUILD.gn14
-rw-r--r--devel/electron5/files/patch-content_browser_browser__main__loop.cc46
-rw-r--r--devel/electron5/files/patch-content_browser_child__process__launcher__helper__linux.cc76
-rw-r--r--devel/electron5/files/patch-content_browser_media_media__internals.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_memory_memory__monitor.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc27
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc29
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.cc29
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.h19
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__process__host__impl.h15
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__view__host__impl.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc29
-rw-r--r--devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc29
-rw-r--r--devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h47
-rw-r--r--devel/electron5/files/patch-content_browser_service__manager_service__manager__context.cc35
-rw-r--r--devel/electron5/files/patch-content_browser_storage__partition__impl.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_storage__partition__impl__map.cc11
-rw-r--r--devel/electron5/files/patch-content_browser_webui_shared__resources__data__source.cc14
-rw-r--r--devel/electron5/files/patch-content_common_BUILD.gn15
-rw-r--r--devel/electron5/files/patch-content_common_common__sandbox__support__linux.cc10
-rw-r--r--devel/electron5/files/patch-content_common_user__agent.cc17
-rw-r--r--devel/electron5/files/patch-content_gpu_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-content_gpu_gpu__main.cc47
-rw-r--r--devel/electron5/files/patch-content_gpu_gpu__sandbox__hook__linux.cc58
-rw-r--r--devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc38
-rw-r--r--devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h25
-rw-r--r--devel/electron5/files/patch-content_public_app_content__packaged__services__manifest.cc20
-rw-r--r--devel/electron5/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc11
-rw-r--r--devel/electron5/files/patch-content_public_common_child__process__host.h20
-rw-r--r--devel/electron5/files/patch-content_public_common_common__param__traits__macros.h11
-rw-r--r--devel/electron5/files/patch-content_public_common_content__features.cc11
-rw-r--r--devel/electron5/files/patch-content_public_common_content__switches.cc11
-rw-r--r--devel/electron5/files/patch-content_public_common_content__switches.h11
-rw-r--r--devel/electron5/files/patch-content_public_common_renderer__preferences.h11
-rw-r--r--devel/electron5/files/patch-content_public_common_use__zoom__for__dsf__policy.cc11
-rw-r--r--devel/electron5/files/patch-content_public_test_browser__test__base.cc13
-rw-r--r--devel/electron5/files/patch-content_public_test_mock__render__thread.cc11
-rw-r--r--devel/electron5/files/patch-content_renderer_media_audio_audio__device__factory.cc11
-rw-r--r--devel/electron5/files/patch-content_renderer_media_stream_processed__local__audio__source.cc20
-rw-r--r--devel/electron5/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc11
-rw-r--r--devel/electron5/files/patch-content_renderer_render__thread__impl.cc56
-rw-r--r--devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.cc56
-rw-r--r--devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.h29
-rw-r--r--devel/electron5/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc19
-rw-r--r--devel/electron5/files/patch-content_shell_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-content_shell_browser_shell__browser__context.cc20
-rw-r--r--devel/electron5/files/patch-content_shell_browser_shell__browser__main__parts.cc20
-rw-r--r--devel/electron5/files/patch-content_shell_test__runner_test__runner.cc29
-rw-r--r--devel/electron5/files/patch-content_test_content__test__suite.cc18
-rw-r--r--devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc29
-rw-r--r--devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h24
-rw-r--r--devel/electron5/files/patch-device_bluetooth_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-device_gamepad_gamepad__provider.cc11
-rw-r--r--devel/electron5/files/patch-device_usb_BUILD.gn21
-rw-r--r--devel/electron5/files/patch-device_usb_usb__context.cc12
-rw-r--r--devel/electron5/files/patch-device_usb_usb__error.cc11
-rw-r--r--devel/electron5/files/patch-device_usb_usb__service__impl.cc45
-rw-r--r--devel/electron5/files/patch-device_usb_usb__service__impl.h26
-rw-r--r--devel/electron5/files/patch-electron_BUILD.gn36
-rw-r--r--devel/electron5/files/patch-electron_atom_app_atom__main.cc35
-rw-r--r--devel/electron5/files/patch-electron_atom_app_atom__main__delegate.cc29
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_api_atom__api__app.cc38
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_api_atom__api__web__contents.cc34
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts.cc11
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc20
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_atom__paths.h11
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_browser.h33
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_native__window__views.cc47
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_native__window__views.h11
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_relauncher__linux.cc32
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc38
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h11
-rw-r--r--devel/electron5/files/patch-electron_atom_browser_ui_views_submenu__button.cc11
-rw-r--r--devel/electron5/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc42
-rw-r--r--devel/electron5/files/patch-electron_atom_common_api_atom__bindings.cc11
-rw-r--r--devel/electron5/files/patch-electron_atom_common_atom__command__line.cc11
-rw-r--r--devel/electron5/files/patch-electron_atom_common_atom__command__line.h11
-rw-r--r--devel/electron5/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc14
-rw-r--r--devel/electron5/files/patch-electron_atom_common_node__bindings.cc11
-rw-r--r--devel/electron5/files/patch-electron_atom_common_node__bindings__linux.cc69
-rw-r--r--devel/electron5/files/patch-electron_atom_common_platform__util.h11
-rw-r--r--devel/electron5/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc20
-rw-r--r--devel/electron5/files/patch-electron_default__app_default__app.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_browser_api_app.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_browser_api_dialog.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_browser_api_menu-item-roles.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_browser_api_power-monitor.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_browser_init.js11
-rw-r--r--devel/electron5/files/patch-electron_lib_common_api_clipboard.js10
-rw-r--r--devel/electron5/files/patch-electron_script_lib_config.py11
-rw-r--r--devel/electron5/files/patch-electron_script_lib_utils.js11
-rw-r--r--devel/electron5/files/patch-electron_script_spec-runner.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-app-spec.js83
-rw-r--r--devel/electron5/files/patch-electron_spec_api-auto-updater-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-browser-window-spec.js47
-rw-r--r--devel/electron5/files/patch-electron_spec_api-clipboard-spec.js38
-rw-r--r--devel/electron5/files/patch-electron_spec_api-content-tracing-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-crash-reporter-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-net-log-spec.js29
-rw-r--r--devel/electron5/files/patch-electron_spec_api-notification-dbus-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-power-monitor-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-process-spec.js11
-rw-r--r--devel/electron5/files/patch-electron_spec_api-shell-spec.js42
-rw-r--r--devel/electron5/files/patch-electron_spec_chromium-spec.js27
-rw-r--r--devel/electron5/files/patch-electron_spec_version-bump-spec.js11
-rw-r--r--devel/electron5/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc14
-rw-r--r--devel/electron5/files/patch-extensions_browser_api_messaging_message__service.cc35
-rw-r--r--devel/electron5/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc20
-rw-r--r--devel/electron5/files/patch-extensions_browser_api_web__request_form__data__parser.cc14
-rw-r--r--devel/electron5/files/patch-extensions_browser_browser__context__keyed__service__factories.cc11
-rw-r--r--devel/electron5/files/patch-extensions_common_api___permission__features.json29
-rw-r--r--devel/electron5/files/patch-extensions_common_api_runtime.json11
-rw-r--r--devel/electron5/files/patch-extensions_common_feature__switch.cc14
-rw-r--r--devel/electron5/files/patch-extensions_common_features_feature.cc11
-rw-r--r--devel/electron5/files/patch-extensions_common_image__util.cc14
-rw-r--r--devel/electron5/files/patch-extensions_common_stack__frame.cc14
-rw-r--r--devel/electron5/files/patch-extensions_renderer_bindings_api__binding__util.cc11
-rw-r--r--devel/electron5/files/patch-extensions_shell_app_shell__main__delegate.cc29
-rw-r--r--devel/electron5/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc11
-rw-r--r--devel/electron5/files/patch-gpu_command__buffer_service_program__manager.cc14
-rw-r--r--devel/electron5/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc11
-rw-r--r--devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.cc20
-rw-r--r--devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.h11
-rw-r--r--devel/electron5/files/patch-gpu_config_gpu__control__list.cc32
-rw-r--r--devel/electron5/files/patch-gpu_config_gpu__test__config.cc11
-rw-r--r--devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc47
-rw-r--r--devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h29
-rw-r--r--devel/electron5/files/patch-gpu_ipc_service_gpu__init.cc29
-rw-r--r--devel/electron5/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc20
-rw-r--r--devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc73
-rw-r--r--devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.h13
-rw-r--r--devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.cc20
-rw-r--r--devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.h11
-rw-r--r--devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.cc38
-rw-r--r--devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.h11
-rw-r--r--devel/electron5/files/patch-headless_lib_headless__macros.h13
-rw-r--r--devel/electron5/files/patch-ipc_ipc__channel.h11
-rw-r--r--devel/electron5/files/patch-ipc_ipc__channel__common.cc11
-rw-r--r--devel/electron5/files/patch-ipc_ipc__channel__mojo.cc11
-rw-r--r--devel/electron5/files/patch-ipc_ipc__message__utils.cc11
-rw-r--r--devel/electron5/files/patch-ipc_ipc__message__utils.h11
-rw-r--r--devel/electron5/files/patch-media_BUILD.gn12
-rw-r--r--devel/electron5/files/patch-media_audio_BUILD.gn22
-rw-r--r--devel/electron5/files/patch-media_audio_alsa_audio__manager__alsa.cc54
-rw-r--r--devel/electron5/files/patch-media_audio_audio__input__device.cc11
-rw-r--r--devel/electron5/files/patch-media_audio_audio__manager.cc29
-rw-r--r--devel/electron5/files/patch-media_audio_audio__manager.h11
-rw-r--r--devel/electron5/files/patch-media_audio_audio__output__proxy__unittest.cc11
-rw-r--r--devel/electron5/files/patch-media_base_audio__latency.cc11
-rw-r--r--devel/electron5/files/patch-media_base_scopedfd__helper.h19
-rw-r--r--devel/electron5/files/patch-media_base_video__frame.cc47
-rw-r--r--devel/electron5/files/patch-media_base_video__frame.h38
-rw-r--r--devel/electron5/files/patch-media_capture_video_create__video__capture__device__factory.cc20
-rw-r--r--devel/electron5/files/patch-media_capture_video_fake__video__capture__device__factory.cc11
-rw-r--r--devel/electron5/files/patch-media_capture_video_file__video__capture__device__factory.cc11
-rw-r--r--devel/electron5/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc26
-rw-r--r--devel/electron5/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc32
-rw-r--r--devel/electron5/files/patch-media_capture_video_linux_video__capture__device__linux.cc60
-rw-r--r--devel/electron5/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc11
-rw-r--r--devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.cc11
-rw-r--r--devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.h11
-rw-r--r--devel/electron5/files/patch-media_capture_video_video__capture__device__client.cc11
-rw-r--r--devel/electron5/files/patch-media_filters_vp9__parser.h10
-rw-r--r--devel/electron5/files/patch-media_formats_common_offset__byte__queue.cc20
-rw-r--r--devel/electron5/files/patch-media_formats_common_offset__byte__queue.h22
-rw-r--r--devel/electron5/files/patch-media_formats_mp2t_es__parser__adts.cc26
-rw-r--r--devel/electron5/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc26
-rw-r--r--devel/electron5/files/patch-media_media__options.gni12
-rw-r--r--devel/electron5/files/patch-media_mojo_services_gpu__mojo__media__client.cc20
-rw-r--r--devel/electron5/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc11
-rw-r--r--devel/electron5/files/patch-mojo_public_c_system_thunks.cc47
-rw-r--r--devel/electron5/files/patch-mojo_public_js_mojo__bindings__resources.grd11
-rw-r--r--devel/electron5/files/patch-net_BUILD.gn37
-rw-r--r--devel/electron5/files/patch-net_base_address__tracker__linux.cc360
-rw-r--r--devel/electron5/files/patch-net_base_address__tracker__linux.h12
-rw-r--r--devel/electron5/files/patch-net_base_address__tracker__linux__unittest.cc14
-rw-r--r--devel/electron5/files/patch-net_base_network__change__notifier.cc10
-rw-r--r--devel/electron5/files/patch-net_base_network__interfaces__posix.h11
-rw-r--r--devel/electron5/files/patch-net_disk__cache_blockfile_disk__format.h12
-rw-r--r--devel/electron5/files/patch-net_dns_address__sorter__posix.cc12
-rw-r--r--devel/electron5/files/patch-net_dns_dns__config__service__posix__unittest.cc47
-rw-r--r--devel/electron5/files/patch-net_dns_dns__reloader.cc13
-rw-r--r--devel/electron5/files/patch-net_dns_dns__util.cc11
-rw-r--r--devel/electron5/files/patch-net_dns_host__resolver__proc.cc11
-rw-r--r--devel/electron5/files/patch-net_features.gni11
-rw-r--r--devel/electron5/files/patch-net_http_http__auth__gssapi__posix.cc14
-rw-r--r--devel/electron5/files/patch-net_http_http__network__session.cc12
-rw-r--r--devel/electron5/files/patch-net_nqe_network__quality__estimator.cc11
-rw-r--r--devel/electron5/files/patch-net_nqe_network__quality__estimator__unittest.cc11
-rw-r--r--devel/electron5/files/patch-net_proxy__resolution_proxy__config__service__linux.cc39
-rw-r--r--devel/electron5/files/patch-net_proxy__resolution_proxy__resolution__service.cc29
-rw-r--r--devel/electron5/files/patch-net_socket_socket__posix.cc11
-rw-r--r--devel/electron5/files/patch-net_socket_socks5__client__socket.cc13
-rw-r--r--devel/electron5/files/patch-net_socket_tcp__socket__posix.cc20
-rw-r--r--devel/electron5/files/patch-net_socket_udp__socket__posix.cc115
-rw-r--r--devel/electron5/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc10
-rw-r--r--devel/electron5/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc20
-rw-r--r--devel/electron5/files/patch-net_tools_quic_quic__http__proxy__backend.cc11
-rw-r--r--devel/electron5/files/patch-net_url__request_url__request__context__builder.cc11
-rw-r--r--devel/electron5/files/patch-pdf_pdfium_pdfium__engine.cc74
-rw-r--r--devel/electron5/files/patch-ppapi_proxy_file__io__resource.cc48
-rw-r--r--devel/electron5/files/patch-printing_backend_print__backend__cups.h11
-rw-r--r--devel/electron5/files/patch-printing_cups__config__helper.py11
-rw-r--r--devel/electron5/files/patch-remoting_base_chromoting__event.cc11
-rw-r--r--devel/electron5/files/patch-remoting_client_display_sys__opengl.h11
-rw-r--r--devel/electron5/files/patch-remoting_host_evaluate__capability.cc11
-rw-r--r--devel/electron5/files/patch-remoting_host_host__attributes.cc11
-rw-r--r--devel/electron5/files/patch-remoting_host_host__details.cc11
-rw-r--r--devel/electron5/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc35
-rw-r--r--devel/electron5/files/patch-remoting_host_me2me__desktop__environment.cc11
-rw-r--r--devel/electron5/files/patch-remoting_host_remoting__me2me__host.cc108
-rw-r--r--devel/electron5/files/patch-remoting_webapp_base_js_platform.js17
-rw-r--r--devel/electron5/files/patch-sandbox_features.gni10
-rw-r--r--devel/electron5/files/patch-sandbox_linux_BUILD.gn47
-rw-r--r--devel/electron5/files/patch-sandbox_linux_services_init__process__reaper.cc15
-rw-r--r--devel/electron5/files/patch-sandbox_linux_services_libc__interceptor.cc21
-rw-r--r--devel/electron5/files/patch-services_audio_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-services_catalog_store.cc10
-rw-r--r--devel/electron5/files/patch-services_catalog_store.h10
-rw-r--r--devel/electron5/files/patch-services_content_simple__browser_simple__browser__service.h20
-rw-r--r--devel/electron5/files/patch-services_device_device__service.h11
-rw-r--r--devel/electron5/files/patch-services_device_geolocation_location__arbitrator.cc11
-rw-r--r--devel/electron5/files/patch-services_device_hid_BUILD.gn22
-rw-r--r--devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.cc243
-rw-r--r--devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.h71
-rw-r--r--devel/electron5/files/patch-services_device_hid_hid__service.cc20
-rw-r--r--devel/electron5/files/patch-services_device_hid_hid__service__freebsd.cc376
-rw-r--r--devel/electron5/files/patch-services_device_hid_hid__service__freebsd.h51
-rw-r--r--devel/electron5/files/patch-services_device_serial_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-services_device_serial_serial__io__handler__posix.cc11
-rw-r--r--devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc20
-rw-r--r--devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc14
-rw-r--r--devel/electron5/files/patch-services_network_BUILD.gn10
-rw-r--r--devel/electron5/files/patch-services_network_network__context.cc38
-rw-r--r--devel/electron5/files/patch-services_network_network__sandbox__hook__linux.cc18
-rw-r--r--devel/electron5/files/patch-services_network_network__service.cc20
-rw-r--r--devel/electron5/files/patch-services_network_network__service.h11
-rw-r--r--devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h14
-rw-r--r--devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc80
-rw-r--r--devel/electron5/files/patch-services_service__manager_embedder_main.cc11
-rw-r--r--devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.cc19
-rw-r--r--devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.h20
-rw-r--r--devel/electron5/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn14
-rw-r--r--devel/electron5/files/patch-services_service__manager_runner_host_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-services_service__manager_sandbox_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-services_service__manager_sandbox_sandbox__type.cc11
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_common_zygote__features.gni8
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc40
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h13
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_zygote__host__linux.h16
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_zygote__linux.cc15
-rw-r--r--devel/electron5/files/patch-services_service__manager_zygote_zygote__main__linux.cc48
-rw-r--r--devel/electron5/files/patch-skia_ext_SkMemory__new__handler.cpp20
-rw-r--r--devel/electron5/files/patch-third__party_angle_BUILD.gn21
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h16
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp90
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp21
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp55
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_libANGLE_Display.cpp20
-rw-r--r--devel/electron5/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h11
-rw-r--r--devel/electron5/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h10
-rw-r--r--devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c11
-rw-r--r--devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h11
-rw-r--r--devel/electron5/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_layout_layout__view.cc20
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_BUILD.gn10
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc20
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h53
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc20
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc29
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc20
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc38
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc14
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn16
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h11
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc14
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading.cc29
-rw-r--r--devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc22
-rw-r--r--devel/electron5/files/patch-third__party_boringssl_BUILD.gn36
-rw-r--r--devel/electron5/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c63
-rw-r--r--devel/electron5/files/patch-third__party_boringssl_src_crypto_ex__data.c13
-rw-r--r--devel/electron5/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h11
-rw-r--r--devel/electron5/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h11
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni11
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_client_BUILD.gn15
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc41
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h20
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h20
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc11
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc11
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc29
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc11
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc40
-rw-r--r--devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc20
-rw-r--r--devel/electron5/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h53
-rw-r--r--devel/electron5/files/patch-third__party_electron__node_deps_uv_BUILD.gn45
-rw-r--r--devel/electron5/files/patch-third__party_ffmpeg_libavutil_mem.c12
-rw-r--r--devel/electron5/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h11
-rw-r--r--devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc43
-rw-r--r--devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest.cc10
-rw-r--r--devel/electron5/files/patch-third__party_googletest_src_googletest_test_googletest-port-test.cc11
-rw-r--r--devel/electron5/files/patch-third__party_leveldatabase_env__chromium.cc14
-rw-r--r--devel/electron5/files/patch-third__party_libXNVCtrl_NVCtrl.c25
-rw-r--r--devel/electron5/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc11
-rw-r--r--devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h11
-rw-r--r--devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h11
-rw-r--r--devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h19
-rw-r--r--devel/electron5/files/patch-third__party_libyuv_include_libyuv_row.h37
-rw-r--r--devel/electron5/files/patch-third__party_node_node.py10
-rw-r--r--devel/electron5/files/patch-third__party_pdfium_core_fxcrt_fx__system.h11
-rw-r--r--devel/electron5/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp14
-rw-r--r--devel/electron5/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp106
-rw-r--r--devel/electron5/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp22
-rw-r--r--devel/electron5/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp14
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_build__config.h51
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_event.h14
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_time.h20
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h11
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_src_base_unix__socket.cc12
-rw-r--r--devel/electron5/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc22
-rw-r--r--devel/electron5/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h11
-rw-r--r--devel/electron5/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc47
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_core_SkCpu.cpp19
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h11
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp41
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h20
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp77
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp11
-rw-r--r--devel/electron5/files/patch-third__party_skia_src_sksl_SkSLString.h11
-rw-r--r--devel/electron5/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h11
-rw-r--r--devel/electron5/files/patch-third__party_snappy_src_snappy.h20
-rw-r--r--devel/electron5/files/patch-third__party_sqlite_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_BUILD.gn24
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_Common_Configurator.cpp12
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp14
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp20
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp29
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp11
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h152
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h20
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h29
-rw-r--r--devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc11
-rw-r--r--devel/electron5/files/patch-third__party_usrsctp_BUILD.gn20
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_BUILD.gn12
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_BUILD.gn20
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_byte__order.h11
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h11
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.cc12
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.h13
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_network.cc29
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_network.h13
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc56
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h11
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc40
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_rtc__base_string__utils.h17
-rw-r--r--devel/electron5/files/patch-third__party_webrtc_system__wrappers_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-third__party_yasm_yasm__assemble.gni159
-rw-r--r--devel/electron5/files/patch-third__party_zlib_arm__features.c97
-rw-r--r--devel/electron5/files/patch-tools_gn_base_files_file__posix.cc11
-rw-r--r--devel/electron5/files/patch-tools_gn_base_files_file__util.h11
-rw-r--r--devel/electron5/files/patch-tools_gn_base_files_file__util__posix.cc11
-rw-r--r--devel/electron5/files/patch-tools_gn_base_files_scoped__file.cc11
-rw-r--r--devel/electron5/files/patch-tools_gn_build_gen.py33
-rw-r--r--devel/electron5/files/patch-tools_gn_tools_gn_exec__process.cc13
-rw-r--r--devel/electron5/files/patch-tools_gn_util_sys__info.cc11
-rw-r--r--devel/electron5/files/patch-tools_json__schema__compiler_feature__compiler.py10
-rw-r--r--devel/electron5/files/patch-tools_json__schema__compiler_model.py11
-rw-r--r--devel/electron5/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-tools_variations_fieldtrial__to__struct.py10
-rw-r--r--devel/electron5/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc20
-rw-r--r--devel/electron5/files/patch-ui_base_ime_ime__engine__handler__interface.h11
-rw-r--r--devel/electron5/files/patch-ui_base_ime_input__method__initializer.cc38
-rw-r--r--devel/electron5/files/patch-ui_base_resource_resource__bundle.cc20
-rw-r--r--devel/electron5/files/patch-ui_base_resource_resource__bundle__freebsd.cc24
-rw-r--r--devel/electron5/files/patch-ui_base_ui__base__features.cc20
-rw-r--r--devel/electron5/files/patch-ui_base_ui__base__features.h14
-rw-r--r--devel/electron5/files/patch-ui_base_webui_web__ui__util.cc11
-rw-r--r--devel/electron5/files/patch-ui_events_devices_x11_device__data__manager__x11.cc19
-rw-r--r--devel/electron5/files/patch-ui_events_event__switches.cc11
-rw-r--r--devel/electron5/files/patch-ui_events_event__switches.h11
-rw-r--r--devel/electron5/files/patch-ui_events_keycodes_dom_keycode__converter.cc11
-rw-r--r--devel/electron5/files/patch-ui_gfx_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-ui_gfx_canvas__skia.cc11
-rw-r--r--devel/electron5/files/patch-ui_gfx_codec_jpeg__codec.cc20
-rw-r--r--devel/electron5/files/patch-ui_gfx_font__fallback__linux.cc13
-rw-r--r--devel/electron5/files/patch-ui_gfx_font__list.cc11
-rw-r--r--devel/electron5/files/patch-ui_gfx_font__render__params.h18
-rw-r--r--devel/electron5/files/patch-ui_gfx_gpu__memory__buffer.h20
-rw-r--r--devel/electron5/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h29
-rw-r--r--devel/electron5/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc25
-rw-r--r--devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc38
-rw-r--r--devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h20
-rw-r--r--devel/electron5/files/patch-ui_gfx_native__pixmap__handle.cc28
-rw-r--r--devel/electron5/files/patch-ui_gfx_native__pixmap__handle.h28
-rw-r--r--devel/electron5/files/patch-ui_gfx_render__text.cc46
-rw-r--r--devel/electron5/files/patch-ui_gl_BUILD.gn11
-rw-r--r--devel/electron5/files/patch-ui_gl_generate__bindings.py12
-rw-r--r--devel/electron5/files/patch-ui_gl_gl__bindings__api__autogen__glx.h10
-rw-r--r--devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.cc61
-rw-r--r--devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.h43
-rw-r--r--devel/electron5/files/patch-ui_gl_gl__fence.cc11
-rw-r--r--devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.cc43
-rw-r--r--devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.h34
-rw-r--r--devel/electron5/files/patch-ui_message__center_public_cpp_message__center__constants.h11
-rw-r--r--devel/electron5/files/patch-ui_message__center_views_message__popup__view.cc11
-rw-r--r--devel/electron5/files/patch-ui_native__theme_native__theme.h11
-rw-r--r--devel/electron5/files/patch-ui_native__theme_native__theme__base.cc11
-rw-r--r--devel/electron5/files/patch-ui_strings_app__locale__settings.grd11
-rw-r--r--devel/electron5/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_controls_label.cc20
-rw-r--r--devel/electron5/files/patch-ui_views_controls_textfield_textfield.cc73
-rw-r--r--devel/electron5/files/patch-ui_views_corewm_tooltip__aura.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_examples_widget__example.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_selection__controller.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_style_platform__style.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_views__delegate.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_views__delegate.h11
-rw-r--r--devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc20
-rw-r--r--devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h11
-rw-r--r--devel/electron5/files/patch-ui_views_window_custom__frame__view.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_window_dialog__delegate.cc11
-rw-r--r--devel/electron5/files/patch-ui_views_window_frame__background.cc11
-rw-r--r--devel/electron5/files/patch-ui_webui_resources_js_cr.js14
-rw-r--r--devel/electron5/files/patch-ui_webui_resources_js_icon.js11
-rw-r--r--devel/electron5/files/patch-v8_BUILD.gn32
-rw-r--r--devel/electron5/files/patch-v8_src_api.cc20
-rw-r--r--devel/electron5/files/patch-v8_src_base_cpu.cc18
-rw-r--r--devel/electron5/files/patch-v8_src_base_platform_platform-posix.cc24
-rw-r--r--devel/electron5/files/patch-v8_src_external-reference-table.cc11
-rw-r--r--devel/electron5/files/patch-v8_src_log-utils.h11
-rw-r--r--devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.cc20
-rw-r--r--devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.h11
-rw-r--r--devel/electron5/files/patch-v8_src_trap-handler_trap-handler.h11
-rw-r--r--devel/electron5/pkg-descr10
-rw-r--r--devel/electron5/pkg-plist124
-rw-r--r--devel/electron6/Makefile302
-rw-r--r--devel/electron6/Makefile.version4
-rw-r--r--devel/electron6/distinfo15
-rw-r--r--devel/electron6/files/apply-electron-patches.sh20
-rw-r--r--devel/electron6/files/package.json135
-rw-r--r--devel/electron6/files/patch-BUILD.gn95
-rw-r--r--devel/electron6/files/patch-apps_ui_views_app__window__frame__view.cc11
-rw-r--r--devel/electron6/files/patch-ash_display_mirror__window__controller.cc14
-rw-r--r--devel/electron6/files/patch-base_BUILD.gn67
-rw-r--r--devel/electron6/files/patch-base_allocator_allocator__shim.cc11
-rw-r--r--devel/electron6/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc76
-rw-r--r--devel/electron6/files/patch-base_allocator_allocator__shim__override__libc__symbols.h11
-rw-r--r--devel/electron6/files/patch-base_allocator_allocator__shim__unittest.cc36
-rw-r--r--devel/electron6/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h11
-rw-r--r--devel/electron6/files/patch-base_base__switches.cc20
-rw-r--r--devel/electron6/files/patch-base_base__switches.h20
-rw-r--r--devel/electron6/files/patch-base_cpu.cc38
-rw-r--r--devel/electron6/files/patch-base_debug_debugger__posix.cc56
-rw-r--r--devel/electron6/files/patch-base_debug_elf__reader.cc18
-rw-r--r--devel/electron6/files/patch-base_debug_proc__maps__linux.cc11
-rw-r--r--devel/electron6/files/patch-base_debug_stack__trace.cc11
-rw-r--r--devel/electron6/files/patch-base_debug_stack__trace.h10
-rw-r--r--devel/electron6/files/patch-base_debug_stack__trace__posix.cc31
-rw-r--r--devel/electron6/files/patch-base_files_file__path__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_files_file__path__watcher.cc11
-rw-r--r--devel/electron6/files/patch-base_files_file__path__watcher__kqueue.h13
-rw-r--r--devel/electron6/files/patch-base_files_file__path__watcher__stub.cc51
-rw-r--r--devel/electron6/files/patch-base_files_file__path__watcher__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_files_file__util.h11
-rw-r--r--devel/electron6/files/patch-base_files_file__util__posix.cc11
-rw-r--r--devel/electron6/files/patch-base_files_scoped__file.cc11
-rw-r--r--devel/electron6/files/patch-base_i18n_icu__util.cc20
-rw-r--r--devel/electron6/files/patch-base_linux__util.cc18
-rw-r--r--devel/electron6/files/patch-base_logging__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_memory_protected__memory__posix.cc31
-rw-r--r--devel/electron6/files/patch-base_native__library__posix.cc11
-rw-r--r--devel/electron6/files/patch-base_native__library__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_numerics_safe__math__shared__impl.h13
-rw-r--r--devel/electron6/files/patch-base_posix_can__lower__nice__to.cc20
-rw-r--r--devel/electron6/files/patch-base_posix_unix__domain__socket.cc49
-rw-r--r--devel/electron6/files/patch-base_posix_unix__domain__socket__unittest.cc12
-rw-r--r--devel/electron6/files/patch-base_process_internal__linux.cc16
-rw-r--r--devel/electron6/files/patch-base_process_internal__linux.h11
-rw-r--r--devel/electron6/files/patch-base_process_kill.h16
-rw-r--r--devel/electron6/files/patch-base_process_kill__posix.cc20
-rw-r--r--devel/electron6/files/patch-base_process_launch.cc11
-rw-r--r--devel/electron6/files/patch-base_process_launch.h20
-rw-r--r--devel/electron6/files/patch-base_process_launch__posix.cc10
-rw-r--r--devel/electron6/files/patch-base_process_memory.cc20
-rw-r--r--devel/electron6/files/patch-base_process_memory.h11
-rw-r--r--devel/electron6/files/patch-base_process_memory__unittest.cc18
-rw-r--r--devel/electron6/files/patch-base_process_process__handle.cc11
-rw-r--r--devel/electron6/files/patch-base_process_process__handle.h11
-rw-r--r--devel/electron6/files/patch-base_process_process__handle__freebsd.cc17
-rw-r--r--devel/electron6/files/patch-base_process_process__iterator__freebsd.cc44
-rw-r--r--devel/electron6/files/patch-base_process_process__linux.cc18
-rw-r--r--devel/electron6/files/patch-base_process_process__metrics.cc38
-rw-r--r--devel/electron6/files/patch-base_process_process__metrics.h131
-rw-r--r--devel/electron6/files/patch-base_process_process__metrics__freebsd.cc259
-rw-r--r--devel/electron6/files/patch-base_process_process__metrics__posix.cc20
-rw-r--r--devel/electron6/files/patch-base_process_process__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_profiler_stack__sampling__profiler__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc24
-rw-r--r--devel/electron6/files/patch-base_security__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_strings_safe__sprintf__unittest.cc18
-rw-r--r--devel/electron6/files/patch-base_syslog__logging.cc20
-rw-r--r--devel/electron6/files/patch-base_system_sys__info.h11
-rw-r--r--devel/electron6/files/patch-base_system_sys__info__freebsd.cc71
-rw-r--r--devel/electron6/files/patch-base_system_sys__info__posix.cc38
-rw-r--r--devel/electron6/files/patch-base_task_thread__pool_environment__config__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_test_fontconfig__util__linux.cc408
-rw-r--r--devel/electron6/files/patch-base_test_generate__fontconfig__caches.cc25
-rw-r--r--devel/electron6/files/patch-base_test_launcher_test__launcher.cc10
-rw-r--r--devel/electron6/files/patch-base_test_test__file__util__linux.cc13
-rw-r--r--devel/electron6/files/patch-base_test_test__file__util__posix.cc11
-rw-r--r--devel/electron6/files/patch-base_third__party_libevent_BUILD.gn24
-rw-r--r--devel/electron6/files/patch-base_threading_platform__thread.h11
-rw-r--r--devel/electron6/files/patch-base_threading_platform__thread__linux.cc30
-rw-r--r--devel/electron6/files/patch-base_threading_platform__thread__posix.cc11
-rw-r--r--devel/electron6/files/patch-base_threading_thread__local__storage__unittest.cc11
-rw-r--r--devel/electron6/files/patch-base_threading_thread__task__runner__handle.cc26
-rw-r--r--devel/electron6/files/patch-base_trace__event_malloc__dump__provider.cc21
-rw-r--r--devel/electron6/files/patch-base_trace__event_process__memory__dump.cc11
-rw-r--r--devel/electron6/files/patch-base_trace__event_process__memory__dump.h11
-rw-r--r--devel/electron6/files/patch-build_config_BUILD.gn30
-rw-r--r--devel/electron6/files/patch-build_config_BUILDCONFIG.gn48
-rw-r--r--devel/electron6/files/patch-build_config_allocator.gni20
-rw-r--r--devel/electron6/files/patch-build_config_compiler_BUILD.gn92
-rw-r--r--devel/electron6/files/patch-build_config_compiler_compiler.gni11
-rw-r--r--devel/electron6/files/patch-build_config_features.gni11
-rw-r--r--devel/electron6/files/patch-build_config_freetype_freetype.gni9
-rw-r--r--devel/electron6/files/patch-build_config_linux_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-build_config_linux_pkg-config.py26
-rw-r--r--devel/electron6/files/patch-build_config_sysroot.gni15
-rw-r--r--devel/electron6/files/patch-build_detect__host__arch.py11
-rw-r--r--devel/electron6/files/patch-build_gn__run__binary.py11
-rw-r--r--devel/electron6/files/patch-build_linux_chrome.map29
-rw-r--r--devel/electron6/files/patch-build_linux_libpci_BUILD.gn53
-rw-r--r--devel/electron6/files/patch-build_linux_unbundle_libusb.gn27
-rw-r--r--devel/electron6/files/patch-build_linux_unbundle_replace__gn__files.py10
-rw-r--r--devel/electron6/files/patch-build_toolchain_gcc__toolchain.gni45
-rw-r--r--devel/electron6/files/patch-build_toolchain_get__concurrent__links.py17
-rw-r--r--devel/electron6/files/patch-build_toolchain_linux_BUILD.gn10
-rw-r--r--devel/electron6/files/patch-cc_BUILD.gn21
-rw-r--r--devel/electron6/files/patch-cc_layers_scrollbar__layer__impl__base.cc13
-rw-r--r--devel/electron6/files/patch-cc_trees_property__tree.cc20
-rw-r--r--devel/electron6/files/patch-chrome_app_chrome__command__ids.h11
-rw-r--r--devel/electron6/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc20
-rw-r--r--devel/electron6/files/patch-chrome_app_chrome__main.cc16
-rw-r--r--devel/electron6/files/patch-chrome_app_chrome__main__delegate.cc137
-rw-r--r--devel/electron6/files/patch-chrome_app_chromium__strings.grd29
-rw-r--r--devel/electron6/files/patch-chrome_app_generated__resources.grd29
-rw-r--r--devel/electron6/files/patch-chrome_app_google__chrome__strings.grd29
-rw-r--r--devel/electron6/files/patch-chrome_app_settings__strings.grdp20
-rw-r--r--devel/electron6/files/patch-chrome_app_shutdown__signal__handlers__posix.cc21
-rw-r--r--devel/electron6/files/patch-chrome_app_theme_chrome__unscaled__resources.grd20
-rw-r--r--devel/electron6/files/patch-chrome_browser_about__flags.cc183
-rw-r--r--devel/electron6/files/patch-chrome_browser_after__startup__task__utils.cc38
-rw-r--r--devel/electron6/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc70
-rw-r--r--devel/electron6/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc17
-rw-r--r--devel/electron6/files/patch-chrome_browser_background_background__mode__optimizer.cc15
-rw-r--r--devel/electron6/files/patch-chrome_browser_browser__resources.grd20
-rw-r--r--devel/electron6/files/patch-chrome_browser_chrome__browser__main.cc75
-rw-r--r--devel/electron6/files/patch-chrome_browser_chrome__browser__main__linux.cc27
-rw-r--r--devel/electron6/files/patch-chrome_browser_chrome__browser__main__posix.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.cc92
-rw-r--r--devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.h17
-rw-r--r--devel/electron6/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_defaults.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_diagnostics_diagnostics__writer.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__commands.cc35
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__commands.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__item__model.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__prefs.cc65
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__prefs.h20
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__query.cc14
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__shelf__context__menu.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_download_download__status__updater.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_BUILD.gn15
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_activity__log_activity__log.cc14
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc43
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_bookmark__app__extension__util.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_external__provider__impl.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_extensions_install__signer.cc18
-rw-r--r--devel/electron6/files/patch-chrome_browser_first__run_first__run__dialog.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_first__run_first__run__internal.h18
-rw-r--r--devel/electron6/files/patch-chrome_browser_first__run_first__run__internal__posix.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_flag__descriptions.cc28
-rw-r--r--devel/electron6/files/patch-chrome_browser_flag__descriptions.h26
-rw-r--r--devel/electron6/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc15
-rw-r--r--devel/electron6/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc14
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc28
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc27
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc23
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc33
-rw-r--r--devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h36
-rw-r--r--devel/electron6/files/patch-chrome_browser_memory__details.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_memory__details__linux.cc13
-rw-r--r--devel/electron6/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc13
-rw-r--r--devel/electron6/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc21
-rw-r--r--devel/electron6/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_net_system__network__context__manager.cc65
-rw-r--r--devel/electron6/files/patch-chrome_browser_notifications_notification__display__service__impl.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc14
-rw-r--r--devel/electron6/files/patch-chrome_browser_password__manager_password__store__factory.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc38
-rw-r--r--devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_platform__util.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_plugins_plugins__resource__service.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc34
-rw-r--r--devel/electron6/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_prefs_browser__prefs.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_process__singleton__posix.cc34
-rw-r--r--devel/electron6/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_profiles_profile__attributes__entry.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_renderer__preferences__util.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py19
-rw-r--r--devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js20
-rw-r--r--devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html29
-rw-r--r--devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js33
-rw-r--r--devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc15
-rw-r--r--devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_search_local__files__ntp__source.cc16
-rw-r--r--devel/electron6/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_signin_signin__util.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_sync_chrome__sync__client.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.cc56
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.h48
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc72
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h50
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc16
-rw-r--r--devel/electron6/files/patch-chrome_browser_task__manager_task__manager__observer.h16
-rw-r--r--devel/electron6/files/patch-chrome_browser_tracing_crash__service__uploader.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_browser__command__controller.cc38
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_browser__view__prefs.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_browser__window.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc10
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_sad__tab.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc22
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_tab__helpers.cc25
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc15
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc50
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_accelerator__table.cc46
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc38
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_chrome__views__delegate.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_first__run__dialog.cc24
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__frame.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__view.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_hung__renderer__view.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc29
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_webui_about__ui.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc55
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h11
-rw-r--r--devel/electron6/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc20
-rw-r--r--devel/electron6/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc11
-rw-r--r--devel/electron6/files/patch-chrome_common_BUILD.gn13
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__features.cc27
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__features.h24
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__paths.cc113
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__paths.h42
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__paths__internal.h11
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__switches.cc11
-rw-r--r--devel/electron6/files/patch-chrome_common_chrome__switches.h11
-rw-r--r--devel/electron6/files/patch-chrome_common_extensions_api_api__sources.gni11
-rw-r--r--devel/electron6/files/patch-chrome_common_extensions_command.cc11
-rw-r--r--devel/electron6/files/patch-chrome_common_features.gni14
-rw-r--r--devel/electron6/files/patch-chrome_common_pref__names.cc44
-rw-r--r--devel/electron6/files/patch-chrome_common_pref__names.h41
-rw-r--r--devel/electron6/files/patch-chrome_common_webui__url__constants.cc48
-rw-r--r--devel/electron6/files/patch-chrome_common_webui__url__constants.h32
-rw-r--r--devel/electron6/files/patch-chrome_renderer_chrome__content__renderer__client.cc11
-rw-r--r--devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc29
-rw-r--r--devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h20
-rw-r--r--devel/electron6/files/patch-chrome_service_cloud__print_print__system.cc11
-rw-r--r--devel/electron6/files/patch-chrome_test_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-chrome_test_base_in__process__browser__test.cc22
-rw-r--r--devel/electron6/files/patch-chrome_test_base_testing__browser__process.h13
-rw-r--r--devel/electron6/files/patch-chrome_test_chromedriver_chrome__launcher.cc13
-rw-r--r--devel/electron6/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc20
-rw-r--r--devel/electron6/files/patch-chromecast_browser_cast__browser__main__parts.cc38
-rw-r--r--devel/electron6/files/patch-chromecast_browser_cast__content__browser__client.cc11
-rw-r--r--devel/electron6/files/patch-chromecast_browser_metrics_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-chromecast_browser_tts_tts__controller__impl.cc14
-rw-r--r--devel/electron6/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc23
-rw-r--r--devel/electron6/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc14
-rw-r--r--devel/electron6/files/patch-components_autofill_core_browser_autofill__experiments.cc11
-rw-r--r--devel/electron6/files/patch-components_autofill_core_browser_personal__data__manager.cc15
-rw-r--r--devel/electron6/files/patch-components_autofill_core_common_autofill__util.cc11
-rw-r--r--devel/electron6/files/patch-components_content__settings_core_browser_website__settings__registry.cc11
-rw-r--r--devel/electron6/files/patch-components_cookie__config_cookie__store__util.cc24
-rw-r--r--devel/electron6/files/patch-components_crash_content_app_BUILD.gn20
-rw-r--r--devel/electron6/files/patch-components_crash_content_app_crashpad.cc43
-rw-r--r--devel/electron6/files/patch-components_crash_content_browser_BUILD.gn27
-rw-r--r--devel/electron6/files/patch-components_crash_core_common_BUILD.gn28
-rw-r--r--devel/electron6/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc20
-rw-r--r--devel/electron6/files/patch-components_download_internal_common_base__file.cc20
-rw-r--r--devel/electron6/files/patch-components_feature__engagement_public_event__constants.cc14
-rw-r--r--devel/electron6/files/patch-components_feature__engagement_public_event__constants.h20
-rw-r--r--devel/electron6/files/patch-components_feedback_anonymizer__tool.cc14
-rw-r--r--devel/electron6/files/patch-components_flags__ui_flags__state.cc11
-rw-r--r--devel/electron6/files/patch-components_gcm__driver_gcm__client.h10
-rw-r--r--devel/electron6/files/patch-components_gcm__driver_gcm__client__impl.cc12
-rw-r--r--devel/electron6/files/patch-components_keyed__service_core_dependency__graph__unittest.cc14
-rw-r--r--devel/electron6/files/patch-components_metrics_BUILD.gn14
-rw-r--r--devel/electron6/files/patch-components_metrics_drive__metrics__provider__linux.cc16
-rw-r--r--devel/electron6/files/patch-components_metrics_metrics__log.cc11
-rw-r--r--devel/electron6/files/patch-components_metrics_system__memory__stats__recorder__linux.cc18
-rw-r--r--devel/electron6/files/patch-components_neterror_resources_neterror.js11
-rw-r--r--devel/electron6/files/patch-components_network__session__configurator_browser_network__session__configurator.cc11
-rw-r--r--devel/electron6/files/patch-components_new__or__sad__tab__strings.grdp38
-rw-r--r--devel/electron6/files/patch-components_os__crypt_os__crypt.h48
-rw-r--r--devel/electron6/files/patch-components_os__crypt_os__crypt__unittest.cc11
-rw-r--r--devel/electron6/files/patch-components_plugins_renderer_plugin__placeholder.cc14
-rw-r--r--devel/electron6/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc73
-rw-r--r--devel/electron6/files/patch-components_policy_core_common_schema.cc14
-rw-r--r--devel/electron6/files/patch-components_policy_resources_policy__templates.json83
-rw-r--r--devel/electron6/files/patch-components_policy_tools_generate__policy__source.py20
-rw-r--r--devel/electron6/files/patch-components_previews_core_previews__features.cc18
-rw-r--r--devel/electron6/files/patch-components_services_filesystem_file__system__app.cc20
-rw-r--r--devel/electron6/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc20
-rw-r--r--devel/electron6/files/patch-components_storage__monitor_BUILD.gn20
-rw-r--r--devel/electron6/files/patch-components_storage__monitor_removable__device__constants.cc11
-rw-r--r--devel/electron6/files/patch-components_storage__monitor_removable__device__constants.h11
-rw-r--r--devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.cc57
-rw-r--r--devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.h48
-rw-r--r--devel/electron6/files/patch-components_sync__device__info_local__device__info__util__linux.cc26
-rw-r--r--devel/electron6/files/patch-components_update__client_update__query__params.cc11
-rw-r--r--devel/electron6/files/patch-components_url__matcher_regex__set__matcher.cc16
-rw-r--r--devel/electron6/files/patch-components_url__matcher_url__matcher__factory.cc14
-rw-r--r--devel/electron6/files/patch-components_webcrypto_algorithms_test__helpers.cc14
-rw-r--r--devel/electron6/files/patch-content_app_content__main__runner__impl.cc73
-rw-r--r--devel/electron6/files/patch-content_browser_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-content_browser_browser__main__loop.cc46
-rw-r--r--devel/electron6/files/patch-content_browser_builtin__service__manifests.cc20
-rw-r--r--devel/electron6/files/patch-content_browser_child__process__launcher__helper__linux.cc92
-rw-r--r--devel/electron6/files/patch-content_browser_devtools_protocol_system__info__handler.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_gpu_gpu__process__host.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_media_media__internals.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_memory_memory__monitor.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc27
-rw-r--r--devel/electron6/files/patch-content_browser_ppapi__plugin__process__host.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc29
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc20
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.cc29
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.h19
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.cc38
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.h15
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__view__host__impl.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc29
-rw-r--r--devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc29
-rw-r--r--devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h47
-rw-r--r--devel/electron6/files/patch-content_browser_service__manager_service__manager__context.cc35
-rw-r--r--devel/electron6/files/patch-content_browser_utility__process__host.cc11
-rw-r--r--devel/electron6/files/patch-content_browser_webui_shared__resources__data__source.cc17
-rw-r--r--devel/electron6/files/patch-content_common_BUILD.gn15
-rw-r--r--devel/electron6/files/patch-content_common_common__sandbox__support__linux.cc10
-rw-r--r--devel/electron6/files/patch-content_common_user__agent.cc17
-rw-r--r--devel/electron6/files/patch-content_gpu_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-content_gpu_gpu__main.cc47
-rw-r--r--devel/electron6/files/patch-content_gpu_gpu__sandbox__hook__linux.cc58
-rw-r--r--devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc38
-rw-r--r--devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h25
-rw-r--r--devel/electron6/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc11
-rw-r--r--devel/electron6/files/patch-content_public_common_child__process__host.h11
-rw-r--r--devel/electron6/files/patch-content_public_common_common__param__traits__macros.h11
-rw-r--r--devel/electron6/files/patch-content_public_common_content__features.cc20
-rw-r--r--devel/electron6/files/patch-content_public_common_content__switches.cc11
-rw-r--r--devel/electron6/files/patch-content_public_common_content__switches.h11
-rw-r--r--devel/electron6/files/patch-content_public_common_use__zoom__for__dsf__policy.cc11
-rw-r--r--devel/electron6/files/patch-content_public_test_browser__test__base.cc13
-rw-r--r--devel/electron6/files/patch-content_public_test_mock__render__thread.cc11
-rw-r--r--devel/electron6/files/patch-content_renderer_media_audio_audio__device__factory.cc11
-rw-r--r--devel/electron6/files/patch-content_renderer_media_stream_processed__local__audio__source.cc20
-rw-r--r--devel/electron6/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc11
-rw-r--r--devel/electron6/files/patch-content_renderer_render__process__impl.cc11
-rw-r--r--devel/electron6/files/patch-content_renderer_render__thread__impl.cc51
-rw-r--r--devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.cc56
-rw-r--r--devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.h29
-rw-r--r--devel/electron6/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc19
-rw-r--r--devel/electron6/files/patch-content_shell_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-content_shell_app_shell__main__delegate.cc20
-rw-r--r--devel/electron6/files/patch-content_shell_browser_shell__browser__context.cc20
-rw-r--r--devel/electron6/files/patch-content_shell_browser_shell__browser__main__parts.cc20
-rw-r--r--devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__context.cc11
-rw-r--r--devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc11
-rw-r--r--devel/electron6/files/patch-content_shell_test__runner_test__runner.cc29
-rw-r--r--devel/electron6/files/patch-content_test_content__test__suite.cc18
-rw-r--r--devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc29
-rw-r--r--devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h24
-rw-r--r--devel/electron6/files/patch-device_bluetooth_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-device_gamepad_gamepad__provider.cc11
-rw-r--r--devel/electron6/files/patch-electron_BUILD.gn53
-rw-r--r--devel/electron6/files/patch-electron_atom_app_atom__main.cc35
-rw-r--r--devel/electron6/files/patch-electron_atom_app_atom__main__delegate.cc29
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_api_atom__api__app.cc38
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_api_atom__api__web__contents.cc34
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts.cc11
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc20
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_atom__paths.h11
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_browser.h33
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_native__window__views.cc47
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_native__window__views.h11
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_relauncher__linux.cc32
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc38
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h11
-rw-r--r--devel/electron6/files/patch-electron_atom_browser_ui_views_submenu__button.cc11
-rw-r--r--devel/electron6/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc42
-rw-r--r--devel/electron6/files/patch-electron_atom_common_api_electron__bindings.cc11
-rw-r--r--devel/electron6/files/patch-electron_atom_common_atom__command__line.cc11
-rw-r--r--devel/electron6/files/patch-electron_atom_common_atom__command__line.h11
-rw-r--r--devel/electron6/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc14
-rw-r--r--devel/electron6/files/patch-electron_atom_common_node__bindings.cc11
-rw-r--r--devel/electron6/files/patch-electron_atom_common_node__bindings__linux.cc69
-rw-r--r--devel/electron6/files/patch-electron_atom_common_platform__util.h11
-rw-r--r--devel/electron6/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc20
-rw-r--r--devel/electron6/files/patch-electron_default__app_default__app.ts11
-rw-r--r--devel/electron6/files/patch-electron_lib_browser_api_dialog.js11
-rw-r--r--devel/electron6/files/patch-electron_lib_browser_api_menu-item-roles.js11
-rw-r--r--devel/electron6/files/patch-electron_lib_browser_api_power-monitor.js11
-rw-r--r--devel/electron6/files/patch-electron_lib_browser_init.ts11
-rw-r--r--devel/electron6/files/patch-electron_lib_browser_rpc-server.js11
-rw-r--r--devel/electron6/files/patch-electron_lib_common_api_clipboard.js11
-rw-r--r--devel/electron6/files/patch-electron_script_lib_config.py12
-rw-r--r--devel/electron6/files/patch-electron_script_lib_utils.js11
-rw-r--r--devel/electron6/files/patch-electron_script_spec-runner.js11
-rw-r--r--devel/electron6/files/patch-electron_spec-main_api-app-spec.ts83
-rw-r--r--devel/electron6/files/patch-electron_spec_api-auto-updater-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_api-browser-window-spec.js56
-rw-r--r--devel/electron6/files/patch-electron_spec_api-clipboard-spec.js38
-rw-r--r--devel/electron6/files/patch-electron_spec_api-content-tracing-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_api-crash-reporter-spec.js92
-rw-r--r--devel/electron6/files/patch-electron_spec_api-net-log-spec.js29
-rw-r--r--devel/electron6/files/patch-electron_spec_api-notification-dbus-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_api-power-monitor-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_api-process-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_api-screen-spec.js38
-rw-r--r--devel/electron6/files/patch-electron_spec_api-shell-spec.js34
-rw-r--r--devel/electron6/files/patch-electron_spec_chromium-spec.js27
-rw-r--r--devel/electron6/files/patch-electron_spec_fixtures_api_crash-restart.html11
-rw-r--r--devel/electron6/files/patch-electron_spec_node-spec.js11
-rw-r--r--devel/electron6/files/patch-electron_spec_version-bump-spec.js11
-rw-r--r--devel/electron6/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc14
-rw-r--r--devel/electron6/files/patch-extensions_browser_api_messaging_message__service.cc34
-rw-r--r--devel/electron6/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc20
-rw-r--r--devel/electron6/files/patch-extensions_browser_api_web__request_form__data__parser.cc14
-rw-r--r--devel/electron6/files/patch-extensions_browser_browser__context__keyed__service__factories.cc11
-rw-r--r--devel/electron6/files/patch-extensions_common_api___permission__features.json29
-rw-r--r--devel/electron6/files/patch-extensions_common_api_runtime.json11
-rw-r--r--devel/electron6/files/patch-extensions_common_feature__switch.cc14
-rw-r--r--devel/electron6/files/patch-extensions_common_features_feature.cc11
-rw-r--r--devel/electron6/files/patch-extensions_common_image__util.cc14
-rw-r--r--devel/electron6/files/patch-extensions_common_stack__frame.cc14
-rw-r--r--devel/electron6/files/patch-extensions_renderer_bindings_api__binding__util.cc11
-rw-r--r--devel/electron6/files/patch-extensions_shell_app_shell__main__delegate.cc29
-rw-r--r--devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.cc20
-rw-r--r--devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.h19
-rw-r--r--devel/electron6/files/patch-google__apis_gcm_engine_heartbeat__manager.cc53
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc11
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc29
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc20
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_service_program__manager.cc14
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc11
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.cc20
-rw-r--r--devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.h11
-rw-r--r--devel/electron6/files/patch-gpu_config_gpu__control__list.cc32
-rw-r--r--devel/electron6/files/patch-gpu_config_gpu__test__config.cc11
-rw-r--r--devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc56
-rw-r--r--devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h29
-rw-r--r--devel/electron6/files/patch-gpu_ipc_service_gpu__init.cc83
-rw-r--r--devel/electron6/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc20
-rw-r--r--devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc73
-rw-r--r--devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.h13
-rw-r--r--devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.cc20
-rw-r--r--devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.h35
-rw-r--r--devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.cc20
-rw-r--r--devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.h11
-rw-r--r--devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.cc38
-rw-r--r--devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.h11
-rw-r--r--devel/electron6/files/patch-headless_lib_headless__macros.h13
-rw-r--r--devel/electron6/files/patch-ipc_ipc__channel.h11
-rw-r--r--devel/electron6/files/patch-ipc_ipc__channel__common.cc20
-rw-r--r--devel/electron6/files/patch-ipc_ipc__channel__mojo.cc15
-rw-r--r--devel/electron6/files/patch-ipc_ipc__message__utils.cc11
-rw-r--r--devel/electron6/files/patch-ipc_ipc__message__utils.h11
-rw-r--r--devel/electron6/files/patch-media_BUILD.gn12
-rw-r--r--devel/electron6/files/patch-media_audio_BUILD.gn22
-rw-r--r--devel/electron6/files/patch-media_audio_alsa_audio__manager__alsa.cc54
-rw-r--r--devel/electron6/files/patch-media_audio_audio__input__device.cc11
-rw-r--r--devel/electron6/files/patch-media_audio_audio__manager.cc29
-rw-r--r--devel/electron6/files/patch-media_audio_audio__manager.h11
-rw-r--r--devel/electron6/files/patch-media_audio_audio__output__proxy__unittest.cc11
-rw-r--r--devel/electron6/files/patch-media_audio_pulse_pulse.sigs46
-rw-r--r--devel/electron6/files/patch-media_base_audio__latency.cc11
-rw-r--r--devel/electron6/files/patch-media_base_scopedfd__helper.h19
-rw-r--r--devel/electron6/files/patch-media_base_video__frame.cc47
-rw-r--r--devel/electron6/files/patch-media_base_video__frame.h38
-rw-r--r--devel/electron6/files/patch-media_capture_video_create__video__capture__device__factory.cc20
-rw-r--r--devel/electron6/files/patch-media_capture_video_fake__video__capture__device__factory.cc11
-rw-r--r--devel/electron6/files/patch-media_capture_video_file__video__capture__device__factory.cc11
-rw-r--r--devel/electron6/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc26
-rw-r--r--devel/electron6/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc32
-rw-r--r--devel/electron6/files/patch-media_capture_video_linux_video__capture__device__linux.cc61
-rw-r--r--devel/electron6/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc11
-rw-r--r--devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.cc20
-rw-r--r--devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.h15
-rw-r--r--devel/electron6/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc11
-rw-r--r--devel/electron6/files/patch-media_capture_video_video__capture__device__client.cc11
-rw-r--r--devel/electron6/files/patch-media_filters_vp9__parser.h10
-rw-r--r--devel/electron6/files/patch-media_formats_common_offset__byte__queue.cc20
-rw-r--r--devel/electron6/files/patch-media_formats_common_offset__byte__queue.h22
-rw-r--r--devel/electron6/files/patch-media_formats_mp2t_es__parser__adts.cc26
-rw-r--r--devel/electron6/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc26
-rw-r--r--devel/electron6/files/patch-media_gpu_libyuv__image__processor.cc38
-rw-r--r--devel/electron6/files/patch-media_gpu_linux_platform__video__frame__utils.cc20
-rw-r--r--devel/electron6/files/patch-media_gpu_vaapi_vaapi__dmabuf__video__frame__mapper.cc20
-rw-r--r--devel/electron6/files/patch-media_gpu_vaapi_vaapi__video__encode__accelerator.cc20
-rw-r--r--devel/electron6/files/patch-media_gpu_video__frame__mapper__factory.cc51
-rw-r--r--devel/electron6/files/patch-media_media__options.gni12
-rw-r--r--devel/electron6/files/patch-media_mojo_services_gpu__mojo__media__client.cc20
-rw-r--r--devel/electron6/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc11
-rw-r--r--devel/electron6/files/patch-mojo_public_c_system_thunks.cc58
-rw-r--r--devel/electron6/files/patch-mojo_public_js_mojo__bindings__resources.grd11
-rw-r--r--devel/electron6/files/patch-net_BUILD.gn37
-rw-r--r--devel/electron6/files/patch-net_base_address__tracker__linux.cc177
-rw-r--r--devel/electron6/files/patch-net_base_address__tracker__linux.h12
-rw-r--r--devel/electron6/files/patch-net_base_address__tracker__linux__unittest.cc14
-rw-r--r--devel/electron6/files/patch-net_base_network__change__notifier.cc10
-rw-r--r--devel/electron6/files/patch-net_base_network__interfaces__posix.h11
-rw-r--r--devel/electron6/files/patch-net_disk__cache_blockfile_disk__format.h12
-rw-r--r--devel/electron6/files/patch-net_dns_address__sorter__posix.cc12
-rw-r--r--devel/electron6/files/patch-net_dns_dns__config__service__posix__unittest.cc47
-rw-r--r--devel/electron6/files/patch-net_dns_dns__reloader.cc13
-rw-r--r--devel/electron6/files/patch-net_dns_dns__util.cc11
-rw-r--r--devel/electron6/files/patch-net_dns_host__resolver__proc.cc11
-rw-r--r--devel/electron6/files/patch-net_features.gni11
-rw-r--r--devel/electron6/files/patch-net_http_http__auth__gssapi__posix.cc14
-rw-r--r--devel/electron6/files/patch-net_http_http__auth__gssapi__posix.h12
-rw-r--r--devel/electron6/files/patch-net_nqe_network__quality__estimator.cc11
-rw-r--r--devel/electron6/files/patch-net_nqe_network__quality__estimator__unittest.cc11
-rw-r--r--devel/electron6/files/patch-net_proxy__resolution_proxy__config__service__linux.cc39
-rw-r--r--devel/electron6/files/patch-net_proxy__resolution_proxy__resolution__service.cc29
-rw-r--r--devel/electron6/files/patch-net_quic_platform_impl_quic__ip__address__impl.cc10
-rw-r--r--devel/electron6/files/patch-net_socket_socket__posix.cc11
-rw-r--r--devel/electron6/files/patch-net_socket_socks5__client__socket.cc13
-rw-r--r--devel/electron6/files/patch-net_socket_tcp__socket__posix.cc20
-rw-r--r--devel/electron6/files/patch-net_socket_udp__socket__posix.cc108
-rw-r--r--devel/electron6/files/patch-net_socket_udp__socket__posix.h11
-rw-r--r--devel/electron6/files/patch-net_socket_unix__domain__client__socket__posix.cc11
-rw-r--r--devel/electron6/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc20
-rw-r--r--devel/electron6/files/patch-net_tools_quic_quic__http__proxy__backend.cc11
-rw-r--r--devel/electron6/files/patch-net_url__request_url__request__context__builder.cc20
-rw-r--r--devel/electron6/files/patch-pdf_pdfium_pdfium__engine.cc74
-rw-r--r--devel/electron6/files/patch-ppapi_proxy_file__io__resource.cc48
-rw-r--r--devel/electron6/files/patch-printing_backend_print__backend__cups.h11
-rw-r--r--devel/electron6/files/patch-printing_cups__config__helper.py11
-rw-r--r--devel/electron6/files/patch-remoting_base_chromoting__event.cc11
-rw-r--r--devel/electron6/files/patch-remoting_client_display_sys__opengl.h11
-rw-r--r--devel/electron6/files/patch-remoting_host_evaluate__capability.cc11
-rw-r--r--devel/electron6/files/patch-remoting_host_host__attributes.cc11
-rw-r--r--devel/electron6/files/patch-remoting_host_host__details.cc11
-rw-r--r--devel/electron6/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc35
-rw-r--r--devel/electron6/files/patch-remoting_host_me2me__desktop__environment.cc11
-rw-r--r--devel/electron6/files/patch-remoting_host_remoting__me2me__host.cc108
-rw-r--r--devel/electron6/files/patch-remoting_webapp_base_js_platform.js17
-rw-r--r--devel/electron6/files/patch-sandbox_features.gni10
-rw-r--r--devel/electron6/files/patch-sandbox_linux_BUILD.gn47
-rw-r--r--devel/electron6/files/patch-sandbox_linux_services_init__process__reaper.cc15
-rw-r--r--devel/electron6/files/patch-sandbox_linux_services_libc__interceptor.cc21
-rw-r--r--devel/electron6/files/patch-services_audio_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.cc20
-rw-r--r--devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.h20
-rw-r--r--devel/electron6/files/patch-services_device_geolocation_location__arbitrator.cc11
-rw-r--r--devel/electron6/files/patch-services_device_hid_BUILD.gn22
-rw-r--r--devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.cc243
-rw-r--r--devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.h71
-rw-r--r--devel/electron6/files/patch-services_device_hid_hid__service.cc20
-rw-r--r--devel/electron6/files/patch-services_device_hid_hid__service__freebsd.cc377
-rw-r--r--devel/electron6/files/patch-services_device_hid_hid__service__freebsd.h51
-rw-r--r--devel/electron6/files/patch-services_device_serial_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-services_device_serial_serial__io__handler__posix.cc11
-rw-r--r--devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc20
-rw-r--r--devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc14
-rw-r--r--devel/electron6/files/patch-services_device_usb_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-services_network_BUILD.gn10
-rw-r--r--devel/electron6/files/patch-services_network_network__context.cc11
-rw-r--r--devel/electron6/files/patch-services_network_network__sandbox__hook__linux.cc18
-rw-r--r--devel/electron6/files/patch-services_network_network__service.cc20
-rw-r--r--devel/electron6/files/patch-services_network_network__service.h11
-rw-r--r--devel/electron6/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc20
-rw-r--r--devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h32
-rw-r--r--devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc103
-rw-r--r--devel/electron6/files/patch-services_service__manager_embedder_main.cc11
-rw-r--r--devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.cc19
-rw-r--r--devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.h20
-rw-r--r--devel/electron6/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn14
-rw-r--r--devel/electron6/files/patch-services_service__manager_sandbox_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-services_service__manager_sandbox_sandbox__type.cc11
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_common_zygote__features.gni8
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc40
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h13
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_zygote__host__linux.h16
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_zygote__linux.cc15
-rw-r--r--devel/electron6/files/patch-services_service__manager_zygote_zygote__main__linux.cc48
-rw-r--r--devel/electron6/files/patch-services_video__capture_broadcasting__receiver.cc20
-rw-r--r--devel/electron6/files/patch-skia_ext_SkMemory__new__handler.cpp20
-rw-r--r--devel/electron6/files/patch-third__party_angle_BUILD.gn21
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h16
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp90
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp21
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp55
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_libANGLE_Display.cpp20
-rw-r--r--devel/electron6/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h11
-rw-r--r--devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c11
-rw-r--r--devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h11
-rw-r--r--devel/electron6/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_BUILD.gn13
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_layout_layout__view.cc20
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc11
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc20
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_BUILD.gn10
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc20
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h53
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc20
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc29
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc20
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_shaping_shape__result__inline__headers.h78
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc38
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h27
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc14
-rw-r--r--devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc22
-rw-r--r--devel/electron6/files/patch-third__party_boringssl_BUILD.gn36
-rw-r--r--devel/electron6/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c63
-rw-r--r--devel/electron6/files/patch-third__party_boringssl_src_crypto_ex__data.c13
-rw-r--r--devel/electron6/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h11
-rw-r--r--devel/electron6/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h11
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni11
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_client_BUILD.gn15
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc41
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h20
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h20
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc11
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc11
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc29
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc11
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc40
-rw-r--r--devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc20
-rw-r--r--devel/electron6/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h53
-rw-r--r--devel/electron6/files/patch-third__party_electron__node_deps_uv_BUILD.gn45
-rw-r--r--devel/electron6/files/patch-third__party_ffmpeg_libavutil_mem.c12
-rw-r--r--devel/electron6/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h10
-rw-r--r--devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc43
-rw-r--r--devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest.cc10
-rw-r--r--devel/electron6/files/patch-third__party_harfbuzz-ng_harfbuzz.gni20
-rw-r--r--devel/electron6/files/patch-third__party_leveldatabase_env__chromium.cc14
-rw-r--r--devel/electron6/files/patch-third__party_libXNVCtrl_NVCtrl.c25
-rw-r--r--devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h11
-rw-r--r--devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h11
-rw-r--r--devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h19
-rw-r--r--devel/electron6/files/patch-third__party_libyuv_include_libyuv_row.h37
-rw-r--r--devel/electron6/files/patch-third__party_nasm_config_config-linux.h29
-rw-r--r--devel/electron6/files/patch-third__party_node_node.py10
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp11
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_core_fxcrt_fx__system.h11
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp14
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp106
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp22
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc11
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h38
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp14
-rw-r--r--devel/electron6/files/patch-third__party_pdfium_xfa_fwl_cfwl__notedriver.cpp19
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_build__config.h51
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_event.h14
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h25
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_time.h20
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h11
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_src_base_unix__socket.cc12
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc22
-rw-r--r--devel/electron6/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc28
-rw-r--r--devel/electron6/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h11
-rw-r--r--devel/electron6/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc47
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_core_SkCpu.cpp19
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h11
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp41
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h20
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp11
-rw-r--r--devel/electron6/files/patch-third__party_skia_src_sksl_SkSLString.h11
-rw-r--r--devel/electron6/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h11
-rw-r--r--devel/electron6/files/patch-third__party_snappy_src_snappy.h20
-rw-r--r--devel/electron6/files/patch-third__party_sqlite_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_BUILD.gn24
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_Common_Configurator.cpp12
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp14
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp20
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp29
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp11
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h152
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h20
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h29
-rw-r--r--devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc11
-rw-r--r--devel/electron6/files/patch-third__party_usrsctp_BUILD.gn20
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_BUILD.gn12
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_BUILD.gn20
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_byte__order.h11
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h11
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.cc12
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.h13
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_network.cc29
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_network.h13
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc65
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h11
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc40
-rw-r--r--devel/electron6/files/patch-third__party_webrtc_system__wrappers_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-third__party_yasm_yasm__assemble.gni159
-rw-r--r--devel/electron6/files/patch-third__party_zlib_arm__features.c46
-rw-r--r--devel/electron6/files/patch-tools_gn_base_files_file__posix.cc11
-rw-r--r--devel/electron6/files/patch-tools_gn_base_files_file__util.h11
-rw-r--r--devel/electron6/files/patch-tools_gn_base_files_file__util__posix.cc11
-rw-r--r--devel/electron6/files/patch-tools_gn_base_files_scoped__file.cc11
-rw-r--r--devel/electron6/files/patch-tools_gn_build_gen.py33
-rw-r--r--devel/electron6/files/patch-tools_gn_tools_gn_exec__process.cc13
-rw-r--r--devel/electron6/files/patch-tools_gn_util_sys__info.cc11
-rw-r--r--devel/electron6/files/patch-tools_json__schema__compiler_feature__compiler.py10
-rw-r--r--devel/electron6/files/patch-tools_json__schema__compiler_model.py11
-rw-r--r--devel/electron6/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-tools_variations_fieldtrial__to__struct.py10
-rw-r--r--devel/electron6/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc20
-rw-r--r--devel/electron6/files/patch-ui_base_ime_init_input__method__initializer.cc38
-rw-r--r--devel/electron6/files/patch-ui_base_resource_resource__bundle.cc20
-rw-r--r--devel/electron6/files/patch-ui_base_resource_resource__bundle__freebsd.cc24
-rw-r--r--devel/electron6/files/patch-ui_base_ui__base__features.cc20
-rw-r--r--devel/electron6/files/patch-ui_base_ui__base__features.h15
-rw-r--r--devel/electron6/files/patch-ui_base_webui_web__ui__util.cc11
-rw-r--r--devel/electron6/files/patch-ui_events_devices_x11_device__data__manager__x11.cc19
-rw-r--r--devel/electron6/files/patch-ui_events_event__switches.cc11
-rw-r--r--devel/electron6/files/patch-ui_events_event__switches.h11
-rw-r--r--devel/electron6/files/patch-ui_events_keycodes_dom_keycode__converter.cc11
-rw-r--r--devel/electron6/files/patch-ui_gfx_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-ui_gfx_canvas__skia.cc11
-rw-r--r--devel/electron6/files/patch-ui_gfx_codec_jpeg__codec.cc20
-rw-r--r--devel/electron6/files/patch-ui_gfx_font__fallback__linux.cc13
-rw-r--r--devel/electron6/files/patch-ui_gfx_font__list.cc11
-rw-r--r--devel/electron6/files/patch-ui_gfx_font__render__params.h18
-rw-r--r--devel/electron6/files/patch-ui_gfx_gpu__memory__buffer.h20
-rw-r--r--devel/electron6/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h35
-rw-r--r--devel/electron6/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc25
-rw-r--r--devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc66
-rw-r--r--devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h20
-rw-r--r--devel/electron6/files/patch-ui_gfx_native__pixmap__handle.cc47
-rw-r--r--devel/electron6/files/patch-ui_gfx_native__pixmap__handle.h29
-rw-r--r--devel/electron6/files/patch-ui_gfx_render__text.cc46
-rw-r--r--devel/electron6/files/patch-ui_gl_BUILD.gn11
-rw-r--r--devel/electron6/files/patch-ui_gl_generate__bindings.py12
-rw-r--r--devel/electron6/files/patch-ui_gl_gl__bindings__api__autogen__glx.h10
-rw-r--r--devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.cc61
-rw-r--r--devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.h43
-rw-r--r--devel/electron6/files/patch-ui_gl_gl__fence.cc11
-rw-r--r--devel/electron6/files/patch-ui_gl_gl__surface__glx.cc14
-rw-r--r--devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.cc43
-rw-r--r--devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.h34
-rw-r--r--devel/electron6/files/patch-ui_message__center_public_cpp_message__center__constants.h11
-rw-r--r--devel/electron6/files/patch-ui_message__center_views_message__popup__view.cc11
-rw-r--r--devel/electron6/files/patch-ui_native__theme_native__theme.h11
-rw-r--r--devel/electron6/files/patch-ui_native__theme_native__theme__base.cc11
-rw-r--r--devel/electron6/files/patch-ui_strings_app__locale__settings.grd11
-rw-r--r--devel/electron6/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_controls_label.cc20
-rw-r--r--devel/electron6/files/patch-ui_views_controls_textfield_textfield.cc73
-rw-r--r--devel/electron6/files/patch-ui_views_corewm_tooltip__aura.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_examples_widget__example.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_selection__controller.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_style_platform__style.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_views__delegate.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_views__delegate.h11
-rw-r--r--devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc20
-rw-r--r--devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h11
-rw-r--r--devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__x11.cc32
-rw-r--r--devel/electron6/files/patch-ui_views_window_custom__frame__view.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_window_dialog__delegate.cc11
-rw-r--r--devel/electron6/files/patch-ui_views_window_frame__background.cc11
-rw-r--r--devel/electron6/files/patch-ui_webui_resources_js_cr.js14
-rw-r--r--devel/electron6/files/patch-ui_webui_resources_js_icon.js11
-rw-r--r--devel/electron6/files/patch-v8_BUILD.gn32
-rw-r--r--devel/electron6/files/patch-v8_src_api_api.cc20
-rw-r--r--devel/electron6/files/patch-v8_src_base_cpu.cc18
-rw-r--r--devel/electron6/files/patch-v8_src_base_platform_platform-posix.cc24
-rw-r--r--devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.cc20
-rw-r--r--devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.h11
-rw-r--r--devel/electron6/files/patch-v8_src_trap-handler_trap-handler.h11
-rw-r--r--devel/electron6/files/yarn.lock8581
-rw-r--r--devel/electron6/pkg-descr10
-rw-r--r--devel/electron6/pkg-plist124
-rw-r--r--devel/electron7/Makefile305
-rw-r--r--devel/electron7/Makefile.version4
-rw-r--r--devel/electron7/distinfo17
-rw-r--r--devel/electron7/files/apply-electron-patches.sh20
-rw-r--r--devel/electron7/files/package.json129
-rw-r--r--devel/electron7/files/patch-BUILD.gn95
-rw-r--r--devel/electron7/files/patch-apps_ui_views_app__window__frame__view.cc11
-rw-r--r--devel/electron7/files/patch-ash_display_mirror__window__controller.cc14
-rw-r--r--devel/electron7/files/patch-base_BUILD.gn67
-rw-r--r--devel/electron7/files/patch-base_allocator_allocator__shim.cc11
-rw-r--r--devel/electron7/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc76
-rw-r--r--devel/electron7/files/patch-base_allocator_allocator__shim__override__libc__symbols.h11
-rw-r--r--devel/electron7/files/patch-base_allocator_allocator__shim__unittest.cc36
-rw-r--r--devel/electron7/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h11
-rw-r--r--devel/electron7/files/patch-base_base__switches.cc20
-rw-r--r--devel/electron7/files/patch-base_base__switches.h20
-rw-r--r--devel/electron7/files/patch-base_cpu.cc38
-rw-r--r--devel/electron7/files/patch-base_debug_debugger__posix.cc56
-rw-r--r--devel/electron7/files/patch-base_debug_elf__reader.cc18
-rw-r--r--devel/electron7/files/patch-base_debug_proc__maps__linux.cc11
-rw-r--r--devel/electron7/files/patch-base_debug_stack__trace.cc11
-rw-r--r--devel/electron7/files/patch-base_debug_stack__trace.h10
-rw-r--r--devel/electron7/files/patch-base_debug_stack__trace__posix.cc31
-rw-r--r--devel/electron7/files/patch-base_files_file__path__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_files_file__path__watcher.cc11
-rw-r--r--devel/electron7/files/patch-base_files_file__path__watcher__kqueue.h13
-rw-r--r--devel/electron7/files/patch-base_files_file__path__watcher__stub.cc51
-rw-r--r--devel/electron7/files/patch-base_files_file__path__watcher__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_files_file__util.h11
-rw-r--r--devel/electron7/files/patch-base_files_file__util__posix.cc11
-rw-r--r--devel/electron7/files/patch-base_files_scoped__file.cc11
-rw-r--r--devel/electron7/files/patch-base_i18n_icu__util.cc20
-rw-r--r--devel/electron7/files/patch-base_linux__util.cc18
-rw-r--r--devel/electron7/files/patch-base_logging__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_memory_platform__shared__memory__region.h29
-rw-r--r--devel/electron7/files/patch-base_memory_platform__shared__memory__region__posix.cc38
-rw-r--r--devel/electron7/files/patch-base_memory_protected__memory__posix.cc31
-rw-r--r--devel/electron7/files/patch-base_native__library__posix.cc11
-rw-r--r--devel/electron7/files/patch-base_native__library__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_numerics_safe__math__shared__impl.h12
-rw-r--r--devel/electron7/files/patch-base_posix_can__lower__nice__to.cc20
-rw-r--r--devel/electron7/files/patch-base_posix_unix__domain__socket.cc49
-rw-r--r--devel/electron7/files/patch-base_posix_unix__domain__socket__unittest.cc12
-rw-r--r--devel/electron7/files/patch-base_process_internal__linux.cc16
-rw-r--r--devel/electron7/files/patch-base_process_internal__linux.h11
-rw-r--r--devel/electron7/files/patch-base_process_kill.h16
-rw-r--r--devel/electron7/files/patch-base_process_kill__posix.cc20
-rw-r--r--devel/electron7/files/patch-base_process_launch.cc11
-rw-r--r--devel/electron7/files/patch-base_process_launch.h20
-rw-r--r--devel/electron7/files/patch-base_process_launch__posix.cc10
-rw-r--r--devel/electron7/files/patch-base_process_memory.cc20
-rw-r--r--devel/electron7/files/patch-base_process_memory.h11
-rw-r--r--devel/electron7/files/patch-base_process_memory__unittest.cc18
-rw-r--r--devel/electron7/files/patch-base_process_process__handle.cc11
-rw-r--r--devel/electron7/files/patch-base_process_process__handle.h11
-rw-r--r--devel/electron7/files/patch-base_process_process__handle__freebsd.cc17
-rw-r--r--devel/electron7/files/patch-base_process_process__iterator__freebsd.cc44
-rw-r--r--devel/electron7/files/patch-base_process_process__linux.cc18
-rw-r--r--devel/electron7/files/patch-base_process_process__metrics.cc38
-rw-r--r--devel/electron7/files/patch-base_process_process__metrics.h131
-rw-r--r--devel/electron7/files/patch-base_process_process__metrics__freebsd.cc259
-rw-r--r--devel/electron7/files/patch-base_process_process__metrics__posix.cc20
-rw-r--r--devel/electron7/files/patch-base_process_process__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_profiler_stack__sampling__profiler__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc24
-rw-r--r--devel/electron7/files/patch-base_security__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_strings_safe__sprintf__unittest.cc18
-rw-r--r--devel/electron7/files/patch-base_syslog__logging.cc20
-rw-r--r--devel/electron7/files/patch-base_system_sys__info.h11
-rw-r--r--devel/electron7/files/patch-base_system_sys__info__freebsd.cc59
-rw-r--r--devel/electron7/files/patch-base_system_sys__info__posix.cc11
-rw-r--r--devel/electron7/files/patch-base_task_thread__pool_environment__config__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_test_fontconfig__util__linux.cc408
-rw-r--r--devel/electron7/files/patch-base_test_generate__fontconfig__caches.cc25
-rw-r--r--devel/electron7/files/patch-base_test_launcher_test__launcher.cc10
-rw-r--r--devel/electron7/files/patch-base_test_test__file__util__linux.cc13
-rw-r--r--devel/electron7/files/patch-base_test_test__file__util__posix.cc11
-rw-r--r--devel/electron7/files/patch-base_third__party_libevent_BUILD.gn24
-rw-r--r--devel/electron7/files/patch-base_threading_platform__thread.h11
-rw-r--r--devel/electron7/files/patch-base_threading_platform__thread__linux.cc30
-rw-r--r--devel/electron7/files/patch-base_threading_platform__thread__posix.cc11
-rw-r--r--devel/electron7/files/patch-base_threading_thread__local__storage__unittest.cc11
-rw-r--r--devel/electron7/files/patch-base_threading_thread__task__runner__handle.cc26
-rw-r--r--devel/electron7/files/patch-base_trace__event_malloc__dump__provider.cc21
-rw-r--r--devel/electron7/files/patch-base_trace__event_process__memory__dump.cc11
-rw-r--r--devel/electron7/files/patch-base_trace__event_process__memory__dump.h11
-rw-r--r--devel/electron7/files/patch-build_config_BUILD.gn30
-rw-r--r--devel/electron7/files/patch-build_config_BUILDCONFIG.gn48
-rw-r--r--devel/electron7/files/patch-build_config_compiler_BUILD.gn92
-rw-r--r--devel/electron7/files/patch-build_config_compiler_compiler.gni11
-rw-r--r--devel/electron7/files/patch-build_config_features.gni11
-rw-r--r--devel/electron7/files/patch-build_config_freetype_freetype.gni9
-rw-r--r--devel/electron7/files/patch-build_config_linux_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-build_config_linux_pkg-config.py26
-rw-r--r--devel/electron7/files/patch-build_config_sysroot.gni15
-rw-r--r--devel/electron7/files/patch-build_detect__host__arch.py11
-rw-r--r--devel/electron7/files/patch-build_gn__run__binary.py11
-rw-r--r--devel/electron7/files/patch-build_linux_chrome.map29
-rw-r--r--devel/electron7/files/patch-build_linux_libpci_BUILD.gn53
-rw-r--r--devel/electron7/files/patch-build_linux_unbundle_libusb.gn27
-rw-r--r--devel/electron7/files/patch-build_linux_unbundle_replace__gn__files.py10
-rw-r--r--devel/electron7/files/patch-build_toolchain_gcc__toolchain.gni45
-rw-r--r--devel/electron7/files/patch-build_toolchain_get__concurrent__links.py17
-rw-r--r--devel/electron7/files/patch-build_toolchain_linux_BUILD.gn10
-rw-r--r--devel/electron7/files/patch-cc_BUILD.gn21
-rw-r--r--devel/electron7/files/patch-cc_layers_scrollbar__layer__impl__base.cc13
-rw-r--r--devel/electron7/files/patch-cc_trees_property__tree.cc20
-rw-r--r--devel/electron7/files/patch-chrome_app_chrome__command__ids.h11
-rw-r--r--devel/electron7/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc20
-rw-r--r--devel/electron7/files/patch-chrome_app_chrome__main.cc16
-rw-r--r--devel/electron7/files/patch-chrome_app_chrome__main__delegate.cc144
-rw-r--r--devel/electron7/files/patch-chrome_app_chromium__strings.grd29
-rw-r--r--devel/electron7/files/patch-chrome_app_generated__resources.grd29
-rw-r--r--devel/electron7/files/patch-chrome_app_google__chrome__strings.grd29
-rw-r--r--devel/electron7/files/patch-chrome_app_settings__strings.grdp20
-rw-r--r--devel/electron7/files/patch-chrome_app_shutdown__signal__handlers__posix.cc21
-rw-r--r--devel/electron7/files/patch-chrome_app_theme_chrome__unscaled__resources.grd20
-rw-r--r--devel/electron7/files/patch-chrome_app_theme_theme__resources.grd11
-rw-r--r--devel/electron7/files/patch-chrome_browser_about__flags.cc285
-rw-r--r--devel/electron7/files/patch-chrome_browser_after__startup__task__utils.cc38
-rw-r--r--devel/electron7/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc70
-rw-r--r--devel/electron7/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc17
-rw-r--r--devel/electron7/files/patch-chrome_browser_background_background__mode__manager.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_background_background__mode__optimizer.cc15
-rw-r--r--devel/electron7/files/patch-chrome_browser_browser__features.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_browser__features.h14
-rw-r--r--devel/electron7/files/patch-chrome_browser_browser__resources.grd20
-rw-r--r--devel/electron7/files/patch-chrome_browser_chrome__browser__main.cc75
-rw-r--r--devel/electron7/files/patch-chrome_browser_chrome__browser__main__linux.cc27
-rw-r--r--devel/electron7/files/patch-chrome_browser_chrome__browser__main__posix.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.cc83
-rw-r--r--devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.h17
-rw-r--r--devel/electron7/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_defaults.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_diagnostics_diagnostics__writer.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__commands.cc35
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__commands.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__item__model.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__prefs.cc65
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__prefs.h20
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__query.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__shelf__context__menu.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_download_download__status__updater.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_BUILD.gn15
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_activity__log_activity__log.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc43
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_external__provider__impl.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_extensions_install__signer.cc18
-rw-r--r--devel/electron7/files/patch-chrome_browser_first__run_first__run__dialog.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_first__run_first__run__internal.h18
-rw-r--r--devel/electron7/files/patch-chrome_browser_first__run_first__run__internal__posix.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_flag__descriptions.cc79
-rw-r--r--devel/electron7/files/patch-chrome_browser_flag__descriptions.h87
-rw-r--r--devel/electron7/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc15
-rw-r--r--devel/electron7/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc28
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc27
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc23
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc33
-rw-r--r--devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h36
-rw-r--r--devel/electron7/files/patch-chrome_browser_memory__details.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_memory__details__linux.cc13
-rw-r--r--devel/electron7/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc13
-rw-r--r--devel/electron7/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc21
-rw-r--r--devel/electron7/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc25
-rw-r--r--devel/electron7/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_net_system__network__context__manager.cc64
-rw-r--r--devel/electron7/files/patch-chrome_browser_notifications_notification__display__service__impl.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_password__manager_password__store__factory.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc38
-rw-r--r--devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_platform__util.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_plugins_plugins__resource__service.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc43
-rw-r--r--devel/electron7/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_prefs_browser__prefs.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_process__singleton__posix.cc34
-rw-r--r--devel/electron7/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_profiles_profile__attributes__entry.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_renderer__preferences__util.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py19
-rw-r--r--devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js20
-rw-r--r--devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html29
-rw-r--r--devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js33
-rw-r--r--devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc15
-rw-r--r--devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc14
-rw-r--r--devel/electron7/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.cc17
-rw-r--r--devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.h20
-rw-r--r--devel/electron7/files/patch-chrome_browser_signin_signin__util.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_sync_chrome__sync__client.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.cc56
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.h48
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc72
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h50
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc16
-rw-r--r--devel/electron7/files/patch-chrome_browser_task__manager_task__manager__observer.h16
-rw-r--r--devel/electron7/files/patch-chrome_browser_themes_theme__service__factory.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_tracing_crash__service__uploader.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_browser__command__controller.cc38
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_browser__view__prefs.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc10
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_sad__tab.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc31
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_tab__helpers.cc25
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc15
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc50
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_ui__features.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_ui__features.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_accelerator__table.cc46
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc38
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_chrome__views__delegate.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_first__run__dialog.cc24
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__frame.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__view.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_hung__renderer__view.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc29
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_webui_about__ui.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc55
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h11
-rw-r--r--devel/electron7/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc20
-rw-r--r--devel/electron7/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc11
-rw-r--r--devel/electron7/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc11
-rw-r--r--devel/electron7/files/patch-chrome_common_BUILD.gn13
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__features.cc27
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__features.h24
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__paths.cc101
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__paths.h42
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__paths__internal.h11
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__switches.cc11
-rw-r--r--devel/electron7/files/patch-chrome_common_chrome__switches.h11
-rw-r--r--devel/electron7/files/patch-chrome_common_extensions_api_api__sources.gni11
-rw-r--r--devel/electron7/files/patch-chrome_common_extensions_command.cc11
-rw-r--r--devel/electron7/files/patch-chrome_common_features.gni14
-rw-r--r--devel/electron7/files/patch-chrome_common_pref__names.cc44
-rw-r--r--devel/electron7/files/patch-chrome_common_pref__names.h41
-rw-r--r--devel/electron7/files/patch-chrome_common_webui__url__constants.cc48
-rw-r--r--devel/electron7/files/patch-chrome_common_webui__url__constants.h32
-rw-r--r--devel/electron7/files/patch-chrome_renderer_chrome__content__renderer__client.cc45
-rw-r--r--devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc29
-rw-r--r--devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h20
-rw-r--r--devel/electron7/files/patch-chrome_service_cloud__print_print__system.cc11
-rw-r--r--devel/electron7/files/patch-chrome_test_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-chrome_test_base_in__process__browser__test.cc22
-rw-r--r--devel/electron7/files/patch-chrome_test_base_testing__browser__process.h13
-rw-r--r--devel/electron7/files/patch-chrome_test_chromedriver_chrome__launcher.cc13
-rw-r--r--devel/electron7/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc20
-rw-r--r--devel/electron7/files/patch-chromecast_browser_cast__browser__main__parts.cc38
-rw-r--r--devel/electron7/files/patch-chromecast_browser_cast__content__browser__client.cc11
-rw-r--r--devel/electron7/files/patch-chromecast_browser_metrics_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-chromecast_browser_tts_tts__controller__impl.cc14
-rw-r--r--devel/electron7/files/patch-chromecast_media_base_monotonic__clock.cc23
-rw-r--r--devel/electron7/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc14
-rw-r--r--devel/electron7/files/patch-components_autofill_core_browser_autofill__experiments.cc11
-rw-r--r--devel/electron7/files/patch-components_autofill_core_browser_personal__data__manager.cc15
-rw-r--r--devel/electron7/files/patch-components_autofill_core_common_autofill__payments__features.cc11
-rw-r--r--devel/electron7/files/patch-components_autofill_core_common_autofill__util.cc11
-rw-r--r--devel/electron7/files/patch-components_content__settings_core_browser_website__settings__registry.cc11
-rw-r--r--devel/electron7/files/patch-components_cookie__config_cookie__store__util.cc24
-rw-r--r--devel/electron7/files/patch-components_crash_content_app_BUILD.gn20
-rw-r--r--devel/electron7/files/patch-components_crash_content_app_crashpad.cc43
-rw-r--r--devel/electron7/files/patch-components_crash_content_browser_BUILD.gn27
-rw-r--r--devel/electron7/files/patch-components_crash_core_common_BUILD.gn28
-rw-r--r--devel/electron7/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc20
-rw-r--r--devel/electron7/files/patch-components_download_internal_common_base__file.cc20
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_event__constants.cc27
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_event__constants.h30
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_feature__constants.cc20
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_feature__constants.h20
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_feature__list.cc20
-rw-r--r--devel/electron7/files/patch-components_feature__engagement_public_feature__list.h38
-rw-r--r--devel/electron7/files/patch-components_feedback_anonymizer__tool.cc14
-rw-r--r--devel/electron7/files/patch-components_flags__ui_flags__state.cc11
-rw-r--r--devel/electron7/files/patch-components_gcm__driver_gcm__client.h10
-rw-r--r--devel/electron7/files/patch-components_gcm__driver_gcm__client__impl.cc12
-rw-r--r--devel/electron7/files/patch-components_keyed__service_core_dependency__graph__unittest.cc14
-rw-r--r--devel/electron7/files/patch-components_metrics_BUILD.gn14
-rw-r--r--devel/electron7/files/patch-components_metrics_drive__metrics__provider__linux.cc16
-rw-r--r--devel/electron7/files/patch-components_metrics_metrics__log.cc11
-rw-r--r--devel/electron7/files/patch-components_metrics_system__memory__stats__recorder__linux.cc18
-rw-r--r--devel/electron7/files/patch-components_neterror_resources_neterror.js11
-rw-r--r--devel/electron7/files/patch-components_network__session__configurator_browser_network__session__configurator.cc11
-rw-r--r--devel/electron7/files/patch-components_new__or__sad__tab__strings.grdp38
-rw-r--r--devel/electron7/files/patch-components_os__crypt_os__crypt.h48
-rw-r--r--devel/electron7/files/patch-components_os__crypt_os__crypt__unittest.cc11
-rw-r--r--devel/electron7/files/patch-components_plugins_renderer_plugin__placeholder.cc14
-rw-r--r--devel/electron7/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc73
-rw-r--r--devel/electron7/files/patch-components_policy_core_common_schema.cc14
-rw-r--r--devel/electron7/files/patch-components_policy_resources_policy__templates.json83
-rw-r--r--devel/electron7/files/patch-components_policy_tools_generate__policy__source.py19
-rw-r--r--devel/electron7/files/patch-components_previews_core_previews__features.cc18
-rw-r--r--devel/electron7/files/patch-components_storage__monitor_BUILD.gn16
-rw-r--r--devel/electron7/files/patch-components_storage__monitor_removable__device__constants.cc11
-rw-r--r--devel/electron7/files/patch-components_storage__monitor_removable__device__constants.h11
-rw-r--r--devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.cc57
-rw-r--r--devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.h48
-rw-r--r--devel/electron7/files/patch-components_sync__device__info_local__device__info__util__linux.cc26
-rw-r--r--devel/electron7/files/patch-components_update__client_update__query__params.cc11
-rw-r--r--devel/electron7/files/patch-components_url__matcher_regex__set__matcher.cc16
-rw-r--r--devel/electron7/files/patch-components_url__matcher_url__matcher__factory.cc14
-rw-r--r--devel/electron7/files/patch-components_webcrypto_algorithms_test__helpers.cc14
-rw-r--r--devel/electron7/files/patch-content_app_content__main__runner__impl.cc73
-rw-r--r--devel/electron7/files/patch-content_browser_browser__main__loop.cc46
-rw-r--r--devel/electron7/files/patch-content_browser_child__process__launcher__helper__linux.cc92
-rw-r--r--devel/electron7/files/patch-content_browser_devtools_protocol_system__info__handler.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_gpu_gpu__process__host.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_media_media__internals.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc27
-rw-r--r--devel/electron7/files/patch-content_browser_ppapi__plugin__process__host.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc29
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc20
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.cc29
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.h19
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.cc47
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.h15
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__view__host__impl.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc29
-rw-r--r--devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc11
-rw-r--r--devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc29
-rw-r--r--devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h47
-rw-r--r--devel/electron7/files/patch-content_browser_scheduler_responsiveness_watcher.cc20
-rw-r--r--devel/electron7/files/patch-content_browser_utility__process__host.cc29
-rw-r--r--devel/electron7/files/patch-content_browser_webui_shared__resources__data__source.cc17
-rw-r--r--devel/electron7/files/patch-content_common_BUILD.gn15
-rw-r--r--devel/electron7/files/patch-content_common_common__sandbox__support__linux.cc10
-rw-r--r--devel/electron7/files/patch-content_common_user__agent.cc17
-rw-r--r--devel/electron7/files/patch-content_gpu_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-content_gpu_gpu__main.cc56
-rw-r--r--devel/electron7/files/patch-content_gpu_gpu__sandbox__hook__linux.cc58
-rw-r--r--devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc38
-rw-r--r--devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h25
-rw-r--r--devel/electron7/files/patch-content_public_app_content__main__delegate.cc18
-rw-r--r--devel/electron7/files/patch-content_public_app_content__main__delegate.h20
-rw-r--r--devel/electron7/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc11
-rw-r--r--devel/electron7/files/patch-content_public_common_child__process__host.h11
-rw-r--r--devel/electron7/files/patch-content_public_common_common__param__traits__macros.h11
-rw-r--r--devel/electron7/files/patch-content_public_common_content__features.cc29
-rw-r--r--devel/electron7/files/patch-content_public_common_content__switches.cc11
-rw-r--r--devel/electron7/files/patch-content_public_common_content__switches.h11
-rw-r--r--devel/electron7/files/patch-content_public_common_use__zoom__for__dsf__policy.cc11
-rw-r--r--devel/electron7/files/patch-content_public_test_browser__test__base.cc13
-rw-r--r--devel/electron7/files/patch-content_public_test_mock__render__thread.cc11
-rw-r--r--devel/electron7/files/patch-content_renderer_media_audio_audio__device__factory.cc11
-rw-r--r--devel/electron7/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc11
-rw-r--r--devel/electron7/files/patch-content_renderer_render__process__impl.cc20
-rw-r--r--devel/electron7/files/patch-content_renderer_render__thread__impl.cc51
-rw-r--r--devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.cc56
-rw-r--r--devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.h29
-rw-r--r--devel/electron7/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc19
-rw-r--r--devel/electron7/files/patch-content_shell_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-content_shell_app_shell__main__delegate.cc20
-rw-r--r--devel/electron7/files/patch-content_shell_browser_shell__browser__context.cc20
-rw-r--r--devel/electron7/files/patch-content_shell_browser_shell__browser__main__parts.cc20
-rw-r--r--devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__context.cc11
-rw-r--r--devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc11
-rw-r--r--devel/electron7/files/patch-content_shell_test__runner_test__runner.cc29
-rw-r--r--devel/electron7/files/patch-content_test_content__test__suite.cc18
-rw-r--r--devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc29
-rw-r--r--devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h24
-rw-r--r--devel/electron7/files/patch-device_bluetooth_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-device_gamepad_gamepad__provider.cc11
-rw-r--r--devel/electron7/files/patch-device_gamepad_hid__writer__linux.cc11
-rw-r--r--devel/electron7/files/patch-electron_BUILD.gn40
-rw-r--r--devel/electron7/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc20
-rw-r--r--devel/electron7/files/patch-electron_default__app_default__app.ts11
-rw-r--r--devel/electron7/files/patch-electron_lib_browser_api_app.ts11
-rw-r--r--devel/electron7/files/patch-electron_lib_browser_api_dialog.js11
-rw-r--r--devel/electron7/files/patch-electron_lib_browser_api_menu-item-roles.js11
-rw-r--r--devel/electron7/files/patch-electron_lib_browser_init.ts11
-rw-r--r--devel/electron7/files/patch-electron_lib_browser_rpc-server.js11
-rw-r--r--devel/electron7/files/patch-electron_lib_common_api_clipboard.js11
-rw-r--r--devel/electron7/files/patch-electron_script_lib_config.py12
-rw-r--r--devel/electron7/files/patch-electron_script_lib_utils.js11
-rw-r--r--devel/electron7/files/patch-electron_script_spec-runner.js11
-rw-r--r--devel/electron7/files/patch-electron_shell_app_atom__main.cc35
-rw-r--r--devel/electron7/files/patch-electron_shell_app_atom__main__delegate.cc29
-rw-r--r--devel/electron7/files/patch-electron_shell_app_node__main.cc20
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_api_atom__api__app.cc47
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_api_atom__api__web__contents.cc34
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_api_process__metric.h20
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts.cc11
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts__posix.cc20
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_atom__paths.h18
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_browser.h33
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_native__window__views.cc47
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_native__window__views.h11
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_relauncher__linux.cc32
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.cc38
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.h11
-rw-r--r--devel/electron7/files/patch-electron_shell_browser_ui_views_submenu__button.cc11
-rw-r--r--devel/electron7/files/patch-electron_shell_common_api_atom__api__crash__reporter.cc18
-rw-r--r--devel/electron7/files/patch-electron_shell_common_api_electron__bindings.cc11
-rw-r--r--devel/electron7/files/patch-electron_shell_common_atom__command__line.cc11
-rw-r--r--devel/electron7/files/patch-electron_shell_common_atom__command__line.h11
-rw-r--r--devel/electron7/files/patch-electron_shell_common_crash__reporter_crash__reporter.cc14
-rw-r--r--devel/electron7/files/patch-electron_shell_common_node__bindings.cc11
-rw-r--r--devel/electron7/files/patch-electron_shell_common_node__bindings__linux.cc69
-rw-r--r--devel/electron7/files/patch-electron_shell_common_platform__util.h11
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-app-spec.ts100
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-browser-window-spec.ts74
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-content-tracing-spec.ts11
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-net-log-spec.js29
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-screen-spec.ts38
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-tray-spec.ts11
-rw-r--r--devel/electron7/files/patch-electron_spec-main_api-web-contents-spec.ts11
-rw-r--r--devel/electron7/files/patch-electron_spec-main_version-bump-spec.ts18
-rw-r--r--devel/electron7/files/patch-electron_spec-main_visibility-state-spec.ts11
-rw-r--r--devel/electron7/files/patch-electron_spec_api-clipboard-spec.js38
-rw-r--r--devel/electron7/files/patch-electron_spec_api-crash-reporter-spec.js101
-rw-r--r--devel/electron7/files/patch-electron_spec_api-notification-dbus-spec.js10
-rw-r--r--devel/electron7/files/patch-electron_spec_api-power-monitor-spec.js11
-rw-r--r--devel/electron7/files/patch-electron_spec_api-process-spec.js11
-rw-r--r--devel/electron7/files/patch-electron_spec_api-shell-spec.js23
-rw-r--r--devel/electron7/files/patch-electron_spec_api-subframe-spec.js11
-rw-r--r--devel/electron7/files/patch-electron_spec_chromium-spec.js27
-rw-r--r--devel/electron7/files/patch-electron_spec_fixtures_api_crash-restart.html11
-rw-r--r--devel/electron7/files/patch-electron_spec_fixtures_module_crash.js11
-rw-r--r--devel/electron7/files/patch-electron_spec_node-spec.js11
-rw-r--r--devel/electron7/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc14
-rw-r--r--devel/electron7/files/patch-extensions_browser_api_messaging_message__service.cc34
-rw-r--r--devel/electron7/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc20
-rw-r--r--devel/electron7/files/patch-extensions_browser_api_web__request_form__data__parser.cc14
-rw-r--r--devel/electron7/files/patch-extensions_browser_browser__context__keyed__service__factories.cc11
-rw-r--r--devel/electron7/files/patch-extensions_common_api___permission__features.json29
-rw-r--r--devel/electron7/files/patch-extensions_common_api_runtime.json11
-rw-r--r--devel/electron7/files/patch-extensions_common_feature__switch.cc16
-rw-r--r--devel/electron7/files/patch-extensions_common_features_feature.cc11
-rw-r--r--devel/electron7/files/patch-extensions_common_image__util.cc14
-rw-r--r--devel/electron7/files/patch-extensions_common_stack__frame.cc14
-rw-r--r--devel/electron7/files/patch-extensions_renderer_bindings_api__binding__util.cc11
-rw-r--r--devel/electron7/files/patch-extensions_shell_app_shell__main__delegate.cc20
-rw-r--r--devel/electron7/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc11
-rw-r--r--devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.cc20
-rw-r--r--devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.h19
-rw-r--r--devel/electron7/files/patch-google__apis_gcm_engine_heartbeat__manager.cc53
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc11
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc65
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.h11
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc20
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_service_program__manager.cc14
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc11
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.cc20
-rw-r--r--devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.h11
-rw-r--r--devel/electron7/files/patch-gpu_config_gpu__control__list.cc32
-rw-r--r--devel/electron7/files/patch-gpu_config_gpu__test__config.cc11
-rw-r--r--devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc56
-rw-r--r--devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h29
-rw-r--r--devel/electron7/files/patch-gpu_ipc_service_gpu__init.cc118
-rw-r--r--devel/electron7/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc20
-rw-r--r--devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc76
-rw-r--r--devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.h13
-rw-r--r--devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.cc32
-rw-r--r--devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.h42
-rw-r--r--devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.cc20
-rw-r--r--devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.h11
-rw-r--r--devel/electron7/files/patch-headless_lib_browser_headless__request__context__manager.cc29
-rw-r--r--devel/electron7/files/patch-headless_lib_headless__content__main__delegate.cc20
-rw-r--r--devel/electron7/files/patch-headless_lib_headless__content__main__delegate.h11
-rw-r--r--devel/electron7/files/patch-headless_lib_headless__macros.h13
-rw-r--r--devel/electron7/files/patch-ipc_ipc__channel.h11
-rw-r--r--devel/electron7/files/patch-ipc_ipc__channel__common.cc20
-rw-r--r--devel/electron7/files/patch-ipc_ipc__channel__mojo.cc15
-rw-r--r--devel/electron7/files/patch-ipc_ipc__message__utils.cc11
-rw-r--r--devel/electron7/files/patch-ipc_ipc__message__utils.h11
-rw-r--r--devel/electron7/files/patch-media_BUILD.gn12
-rw-r--r--devel/electron7/files/patch-media_audio_BUILD.gn22
-rw-r--r--devel/electron7/files/patch-media_audio_alsa_audio__manager__alsa.cc54
-rw-r--r--devel/electron7/files/patch-media_audio_audio__input__device.cc11
-rw-r--r--devel/electron7/files/patch-media_audio_audio__manager.cc29
-rw-r--r--devel/electron7/files/patch-media_audio_audio__manager.h11
-rw-r--r--devel/electron7/files/patch-media_audio_audio__output__proxy__unittest.cc11
-rw-r--r--devel/electron7/files/patch-media_audio_pulse_pulse.sigs46
-rw-r--r--devel/electron7/files/patch-media_base_audio__latency.cc11
-rw-r--r--devel/electron7/files/patch-media_base_scopedfd__helper.h23
-rw-r--r--devel/electron7/files/patch-media_base_video__frame.cc74
-rw-r--r--devel/electron7/files/patch-media_base_video__frame.h50
-rw-r--r--devel/electron7/files/patch-media_capture_video_create__video__capture__device__factory.cc20
-rw-r--r--devel/electron7/files/patch-media_capture_video_fake__video__capture__device__factory.cc11
-rw-r--r--devel/electron7/files/patch-media_capture_video_file__video__capture__device__factory.cc11
-rw-r--r--devel/electron7/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc26
-rw-r--r--devel/electron7/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc32
-rw-r--r--devel/electron7/files/patch-media_capture_video_linux_video__capture__device__linux.cc61
-rw-r--r--devel/electron7/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc11
-rw-r--r--devel/electron7/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc11
-rw-r--r--devel/electron7/files/patch-media_capture_video_video__capture__device__client.cc11
-rw-r--r--devel/electron7/files/patch-media_filters_vp9__parser.h10
-rw-r--r--devel/electron7/files/patch-media_formats_common_offset__byte__queue.cc20
-rw-r--r--devel/electron7/files/patch-media_formats_common_offset__byte__queue.h22
-rw-r--r--devel/electron7/files/patch-media_formats_mp2t_es__parser__adts.cc26
-rw-r--r--devel/electron7/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc26
-rw-r--r--devel/electron7/files/patch-media_gpu_libyuv__image__processor.cc38
-rw-r--r--devel/electron7/files/patch-media_gpu_linux_platform__video__frame__utils.cc20
-rw-r--r--devel/electron7/files/patch-media_media__options.gni12
-rw-r--r--devel/electron7/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc11
-rw-r--r--devel/electron7/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc20
-rw-r--r--devel/electron7/files/patch-media_mojo_services_gpu__mojo__media__client.cc20
-rw-r--r--devel/electron7/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc11
-rw-r--r--devel/electron7/files/patch-mojo_public_c_system_thunks.cc58
-rw-r--r--devel/electron7/files/patch-mojo_public_js_mojo__bindings__resources.grd11
-rw-r--r--devel/electron7/files/patch-net_BUILD.gn46
-rw-r--r--devel/electron7/files/patch-net_base_address__tracker__linux.cc177
-rw-r--r--devel/electron7/files/patch-net_base_address__tracker__linux.h12
-rw-r--r--devel/electron7/files/patch-net_base_address__tracker__linux__unittest.cc14
-rw-r--r--devel/electron7/files/patch-net_base_network__change__notifier.cc19
-rw-r--r--devel/electron7/files/patch-net_base_network__interfaces__posix.h11
-rw-r--r--devel/electron7/files/patch-net_disk__cache_blockfile_disk__format.h12
-rw-r--r--devel/electron7/files/patch-net_dns_address__sorter__posix.cc12
-rw-r--r--devel/electron7/files/patch-net_dns_dns__config__service__posix__unittest.cc47
-rw-r--r--devel/electron7/files/patch-net_dns_dns__reloader.cc13
-rw-r--r--devel/electron7/files/patch-net_dns_dns__util.cc11
-rw-r--r--devel/electron7/files/patch-net_dns_host__resolver__proc.cc11
-rw-r--r--devel/electron7/files/patch-net_features.gni11
-rw-r--r--devel/electron7/files/patch-net_http_http__auth__gssapi__posix.cc14
-rw-r--r--devel/electron7/files/patch-net_http_http__auth__gssapi__posix.h12
-rw-r--r--devel/electron7/files/patch-net_nqe_network__quality__estimator.cc11
-rw-r--r--devel/electron7/files/patch-net_nqe_network__quality__estimator__unittest.cc11
-rw-r--r--devel/electron7/files/patch-net_proxy__resolution_proxy__config__service__linux.cc39
-rw-r--r--devel/electron7/files/patch-net_proxy__resolution_proxy__resolution__service.cc29
-rw-r--r--devel/electron7/files/patch-net_socket_socket__posix.cc11
-rw-r--r--devel/electron7/files/patch-net_socket_socks5__client__socket.cc13
-rw-r--r--devel/electron7/files/patch-net_socket_tcp__socket__posix.cc20
-rw-r--r--devel/electron7/files/patch-net_socket_udp__socket__posix.cc108
-rw-r--r--devel/electron7/files/patch-net_socket_udp__socket__posix.h11
-rw-r--r--devel/electron7/files/patch-net_socket_unix__domain__client__socket__posix.cc11
-rw-r--r--devel/electron7/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc20
-rw-r--r--devel/electron7/files/patch-net_tools_quic_quic__http__proxy__backend.cc11
-rw-r--r--devel/electron7/files/patch-net_traffic__annotation_network__traffic__annotation.h20
-rw-r--r--devel/electron7/files/patch-net_url__request_url__fetcher.cc11
-rw-r--r--devel/electron7/files/patch-net_url__request_url__fetcher.h11
-rw-r--r--devel/electron7/files/patch-net_url__request_url__request__context.cc11
-rw-r--r--devel/electron7/files/patch-net_url__request_url__request__context.h11
-rw-r--r--devel/electron7/files/patch-net_url__request_url__request__context__builder.cc20
-rw-r--r--devel/electron7/files/patch-pdf_pdfium_pdfium__engine.cc56
-rw-r--r--devel/electron7/files/patch-ppapi_proxy_file__io__resource.cc48
-rw-r--r--devel/electron7/files/patch-ppapi_proxy_flash__resource.cc11
-rw-r--r--devel/electron7/files/patch-printing_cups__config__helper.py11
-rw-r--r--devel/electron7/files/patch-remoting_base_chromoting__event.cc11
-rw-r--r--devel/electron7/files/patch-remoting_client_display_sys__opengl.h11
-rw-r--r--devel/electron7/files/patch-remoting_host_evaluate__capability.cc11
-rw-r--r--devel/electron7/files/patch-remoting_host_host__attributes.cc11
-rw-r--r--devel/electron7/files/patch-remoting_host_host__details.cc11
-rw-r--r--devel/electron7/files/patch-remoting_host_host__main.cc27
-rw-r--r--devel/electron7/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc35
-rw-r--r--devel/electron7/files/patch-remoting_host_me2me__desktop__environment.cc11
-rw-r--r--devel/electron7/files/patch-remoting_host_remoting__me2me__host.cc108
-rw-r--r--devel/electron7/files/patch-remoting_host_switches.cc14
-rw-r--r--devel/electron7/files/patch-remoting_host_switches.h14
-rw-r--r--devel/electron7/files/patch-remoting_resources_remoting__strings.grd20
-rw-r--r--devel/electron7/files/patch-remoting_webapp_base_js_platform.js17
-rw-r--r--devel/electron7/files/patch-sandbox_features.gni10
-rw-r--r--devel/electron7/files/patch-sandbox_linux_BUILD.gn47
-rw-r--r--devel/electron7/files/patch-sandbox_linux_services_init__process__reaper.cc15
-rw-r--r--devel/electron7/files/patch-sandbox_linux_services_libc__interceptor.cc21
-rw-r--r--devel/electron7/files/patch-services_audio_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-services_device_geolocation_location__arbitrator.cc11
-rw-r--r--devel/electron7/files/patch-services_device_hid_BUILD.gn22
-rw-r--r--devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.cc243
-rw-r--r--devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.h71
-rw-r--r--devel/electron7/files/patch-services_device_hid_hid__service.cc20
-rw-r--r--devel/electron7/files/patch-services_device_hid_hid__service__freebsd.cc378
-rw-r--r--devel/electron7/files/patch-services_device_hid_hid__service__freebsd.h51
-rw-r--r--devel/electron7/files/patch-services_device_serial_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-services_device_serial_serial__io__handler__posix.cc11
-rw-r--r--devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc20
-rw-r--r--devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc14
-rw-r--r--devel/electron7/files/patch-services_device_usb_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-services_network_BUILD.gn10
-rw-r--r--devel/electron7/files/patch-services_network_network__context.cc11
-rw-r--r--devel/electron7/files/patch-services_network_network__sandbox__hook__linux.cc18
-rw-r--r--devel/electron7/files/patch-services_network_network__service.cc20
-rw-r--r--devel/electron7/files/patch-services_network_network__service.h11
-rw-r--r--devel/electron7/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc20
-rw-r--r--devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h32
-rw-r--r--devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc103
-rw-r--r--devel/electron7/files/patch-services_service__manager_embedder_main.cc11
-rw-r--r--devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.cc19
-rw-r--r--devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.h20
-rw-r--r--devel/electron7/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn14
-rw-r--r--devel/electron7/files/patch-services_service__manager_sandbox_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-services_service__manager_sandbox_sandbox__type.cc11
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_common_zygote__features.gni8
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc40
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h13
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_zygote__host__linux.h16
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_zygote__linux.cc15
-rw-r--r--devel/electron7/files/patch-services_service__manager_zygote_zygote__main__linux.cc48
-rw-r--r--devel/electron7/files/patch-services_video__capture_broadcasting__receiver.cc20
-rw-r--r--devel/electron7/files/patch-skia_ext_SkMemory__new__handler.cpp20
-rw-r--r--devel/electron7/files/patch-third__party_angle_BUILD.gn21
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h16
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp90
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp21
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp55
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_libANGLE_Display.cpp20
-rw-r--r--devel/electron7/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h11
-rw-r--r--devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c11
-rw-r--r--devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h11
-rw-r--r--devel/electron7/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_BUILD.gn13
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_layout_layout__view.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc11
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_BUILD.gn10
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h53
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc29
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc20
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc38
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h27
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc14
-rw-r--r--devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc22
-rw-r--r--devel/electron7/files/patch-third__party_boringssl_BUILD.gn36
-rw-r--r--devel/electron7/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c63
-rw-r--r--devel/electron7/files/patch-third__party_boringssl_src_crypto_ex__data.c13
-rw-r--r--devel/electron7/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h11
-rw-r--r--devel/electron7/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h11
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni11
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_client_BUILD.gn15
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc41
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h20
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h20
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc11
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc11
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc29
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc11
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc40
-rw-r--r--devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc20
-rw-r--r--devel/electron7/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h53
-rw-r--r--devel/electron7/files/patch-third__party_electron__node_deps_uv_BUILD.gn45
-rw-r--r--devel/electron7/files/patch-third__party_ffmpeg_libavutil_mem.c12
-rw-r--r--devel/electron7/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h10
-rw-r--r--devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc43
-rw-r--r--devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest.cc10
-rw-r--r--devel/electron7/files/patch-third__party_leveldatabase_env__chromium.cc14
-rw-r--r--devel/electron7/files/patch-third__party_libXNVCtrl_NVCtrl.c25
-rw-r--r--devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h11
-rw-r--r--devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h11
-rw-r--r--devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h19
-rw-r--r--devel/electron7/files/patch-third__party_libyuv_include_libyuv_row.h37
-rw-r--r--devel/electron7/files/patch-third__party_nasm_config_config-linux.h29
-rw-r--r--devel/electron7/files/patch-third__party_node_node.py10
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp11
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_core_fxcrt_fx__system.h11
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp14
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp106
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp22
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc11
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h38
-rw-r--r--devel/electron7/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp14
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_build__config.h51
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_time.h20
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h13
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_thread__utils.h24
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_src_base_unix__socket.cc12
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc12
-rw-r--r--devel/electron7/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc28
-rw-r--r--devel/electron7/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h11
-rw-r--r--devel/electron7/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc47
-rw-r--r--devel/electron7/files/patch-third__party_skia_src_core_SkCpu.cpp19
-rw-r--r--devel/electron7/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h11
-rw-r--r--devel/electron7/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp41
-rw-r--r--devel/electron7/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp11
-rw-r--r--devel/electron7/files/patch-third__party_skia_src_sksl_SkSLString.h11
-rw-r--r--devel/electron7/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h11
-rw-r--r--devel/electron7/files/patch-third__party_snappy_src_snappy.h20
-rw-r--r--devel/electron7/files/patch-third__party_sqlite_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_BUILD.gn24
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_Common_Configurator.cpp12
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp14
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp20
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp29
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp11
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_src_Yarn_Thread.cpp22
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h152
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h20
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h29
-rw-r--r--devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc11
-rw-r--r--devel/electron7/files/patch-third__party_usrsctp_BUILD.gn20
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_BUILD.gn12
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_byte__order.h11
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h11
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.cc12
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.h13
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_network.cc29
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_network.h13
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc65
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h11
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc39
-rw-r--r--devel/electron7/files/patch-third__party_webrtc_system__wrappers_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-third__party_zlib_arm__features.c46
-rw-r--r--devel/electron7/files/patch-tools_gn_base_files_file__posix.cc11
-rw-r--r--devel/electron7/files/patch-tools_gn_base_files_file__util.h11
-rw-r--r--devel/electron7/files/patch-tools_gn_base_files_file__util__posix.cc11
-rw-r--r--devel/electron7/files/patch-tools_gn_base_files_scoped__file.cc11
-rw-r--r--devel/electron7/files/patch-tools_gn_build_gen.py24
-rw-r--r--devel/electron7/files/patch-tools_gn_tools_gn_exec__process.cc13
-rw-r--r--devel/electron7/files/patch-tools_gn_util_sys__info.cc11
-rw-r--r--devel/electron7/files/patch-tools_json__schema__compiler_feature__compiler.py10
-rw-r--r--devel/electron7/files/patch-tools_json__schema__compiler_model.py11
-rw-r--r--devel/electron7/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-tools_variations_fieldtrial__to__struct.py10
-rw-r--r--devel/electron7/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc20
-rw-r--r--devel/electron7/files/patch-ui_base_ime_init_input__method__initializer.cc38
-rw-r--r--devel/electron7/files/patch-ui_base_resource_resource__bundle.cc20
-rw-r--r--devel/electron7/files/patch-ui_base_resource_resource__bundle__freebsd.cc24
-rw-r--r--devel/electron7/files/patch-ui_base_ui__base__features.cc20
-rw-r--r--devel/electron7/files/patch-ui_base_ui__base__features.h15
-rw-r--r--devel/electron7/files/patch-ui_base_webui_web__ui__util.cc11
-rw-r--r--devel/electron7/files/patch-ui_events_devices_x11_device__data__manager__x11.cc19
-rw-r--r--devel/electron7/files/patch-ui_events_event__switches.cc11
-rw-r--r--devel/electron7/files/patch-ui_events_event__switches.h11
-rw-r--r--devel/electron7/files/patch-ui_events_keycodes_dom_keycode__converter.cc11
-rw-r--r--devel/electron7/files/patch-ui_gfx_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-ui_gfx_canvas__skia.cc11
-rw-r--r--devel/electron7/files/patch-ui_gfx_codec_jpeg__codec.cc20
-rw-r--r--devel/electron7/files/patch-ui_gfx_font__fallback__linux.cc13
-rw-r--r--devel/electron7/files/patch-ui_gfx_font__list.cc11
-rw-r--r--devel/electron7/files/patch-ui_gfx_font__render__params.h18
-rw-r--r--devel/electron7/files/patch-ui_gfx_gpu__memory__buffer.h20
-rw-r--r--devel/electron7/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h44
-rw-r--r--devel/electron7/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc25
-rw-r--r--devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc75
-rw-r--r--devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h29
-rw-r--r--devel/electron7/files/patch-ui_gfx_native__pixmap__handle.cc56
-rw-r--r--devel/electron7/files/patch-ui_gfx_native__pixmap__handle.h38
-rw-r--r--devel/electron7/files/patch-ui_gfx_render__text.cc46
-rw-r--r--devel/electron7/files/patch-ui_gl_BUILD.gn11
-rw-r--r--devel/electron7/files/patch-ui_gl_generate__bindings.py12
-rw-r--r--devel/electron7/files/patch-ui_gl_gl__bindings__api__autogen__glx.h10
-rw-r--r--devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.cc61
-rw-r--r--devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.h43
-rw-r--r--devel/electron7/files/patch-ui_gl_gl__fence.cc11
-rw-r--r--devel/electron7/files/patch-ui_gl_gl__surface__glx.cc14
-rw-r--r--devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.cc43
-rw-r--r--devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.h34
-rw-r--r--devel/electron7/files/patch-ui_message__center_public_cpp_message__center__constants.h11
-rw-r--r--devel/electron7/files/patch-ui_message__center_views_message__popup__view.cc11
-rw-r--r--devel/electron7/files/patch-ui_native__theme_native__theme.h11
-rw-r--r--devel/electron7/files/patch-ui_native__theme_native__theme__base.cc11
-rw-r--r--devel/electron7/files/patch-ui_platform__window_platform__window__delegate.h20
-rw-r--r--devel/electron7/files/patch-ui_platform__window_platform__window__init__properties.h11
-rw-r--r--devel/electron7/files/patch-ui_strings_app__locale__settings.grd11
-rw-r--r--devel/electron7/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_controls_label.cc20
-rw-r--r--devel/electron7/files/patch-ui_views_controls_textfield_textfield.cc73
-rw-r--r--devel/electron7/files/patch-ui_views_corewm_tooltip__aura.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_examples_widget__example.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_selection__controller.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_style_platform__style.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_views__delegate.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_views__delegate.h11
-rw-r--r--devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc20
-rw-r--r--devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h11
-rw-r--r--devel/electron7/files/patch-ui_views_window_custom__frame__view.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_window_dialog__delegate.cc11
-rw-r--r--devel/electron7/files/patch-ui_views_window_frame__background.cc11
-rw-r--r--devel/electron7/files/patch-ui_webui_resources_js_cr.js14
-rw-r--r--devel/electron7/files/patch-ui_webui_resources_js_icon.js11
-rw-r--r--devel/electron7/files/patch-v8_BUILD.gn32
-rw-r--r--devel/electron7/files/patch-v8_src_api_api.cc20
-rw-r--r--devel/electron7/files/patch-v8_src_base_cpu.cc18
-rw-r--r--devel/electron7/files/patch-v8_src_base_platform_platform-posix.cc24
-rw-r--r--devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.cc20
-rw-r--r--devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.h11
-rw-r--r--devel/electron7/files/patch-v8_src_trap-handler_trap-handler.h11
-rw-r--r--devel/electron7/files/patch-weblayer_browser_browser__main__parts__impl.cc20
-rw-r--r--devel/electron7/files/patch-weblayer_shell_app_shell__main.cc20
-rw-r--r--devel/electron7/files/yarn.lock7925
-rw-r--r--devel/electron7/pkg-descr10
-rw-r--r--devel/electron7/pkg-plist124
-rw-r--r--devel/gnatpython/Makefile19
-rw-r--r--devel/gnatpython/distinfo2
-rw-r--r--devel/gnatpython/files/patch-setup__helpers.py11
-rw-r--r--devel/gnatpython/pkg-descr5
-rw-r--r--devel/godot2-tools/Makefile13
-rw-r--r--devel/godot2-tools/pkg-message11
-rw-r--r--devel/godot2/Makefile111
-rw-r--r--devel/godot2/distinfo5
-rw-r--r--devel/godot2/files/patch-SConstruct36
-rw-r--r--devel/godot2/files/patch-drivers_SCsub11
-rw-r--r--devel/godot2/files/patch-drivers_rtaudio_audio__driver__rtaudio.cpp18
-rw-r--r--devel/godot2/files/patch-drivers_unix_os__unix.cpp54
-rw-r--r--devel/godot2/files/patch-modules_speex_audio__stream__speex.cpp11
-rw-r--r--devel/godot2/files/patch-modules_squish_SCsub11
-rw-r--r--devel/godot2/files/patch-platform_x11_detect.py94
-rw-r--r--devel/godot2/files/patch-thirdparty_glew_glew.c11
-rw-r--r--devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.cpp89
-rw-r--r--devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.h16
-rw-r--r--devel/godot2/pkg-descr9
-rw-r--r--devel/libhid/Makefile31
-rw-r--r--devel/libhid/distinfo2
-rw-r--r--devel/libhid/files/extra-patch-usb12
-rw-r--r--devel/libhid/files/patch-Makefile.in11
-rw-r--r--devel/libhid/files/patch-configure31
-rw-r--r--devel/libhid/files/patch-hidparser-hidtypes.h11
-rw-r--r--devel/libhid/files/patch-src_hid_initialisation.c10
-rw-r--r--devel/libhid/files/patch-src_hid_opening.c9
-rw-r--r--devel/libhid/files/patch-src_hid_parsing.c9
-rw-r--r--devel/libhid/files/patch-test_lshid.c10
-rw-r--r--devel/libhid/files/patch-test_test_libhid.c9
-rw-r--r--devel/libhid/pkg-descr9
-rw-r--r--devel/libhid/pkg-plist23
-rw-r--r--devel/libosmocore/Makefile50
-rw-r--r--devel/libosmocore/distinfo3
-rw-r--r--devel/libosmocore/files/patch-src_gb_gprs__ns__sns.c11
-rw-r--r--devel/libosmocore/files/patch-src_sockaddr__str.c11
-rw-r--r--devel/libosmocore/files/patch-src_timer__clockgettime.c27
-rw-r--r--devel/libosmocore/pkg-descr7
-rw-r--r--devel/libosmocore/pkg-plist185
-rw-r--r--devel/llvm60/Makefile459
-rw-r--r--devel/llvm60/Makefile.COMMANDS90
-rw-r--r--devel/llvm60/distinfo15
-rw-r--r--devel/llvm60/files/clang/patch-fformat_extensions.diff44
-rw-r--r--devel/llvm60/files/clang/patch-fopenmp.diff14
-rw-r--r--devel/llvm60/files/clang/patch-head-r331066.diff40
-rw-r--r--devel/llvm60/files/clang/patch-head-r336227.diff42
-rw-r--r--devel/llvm60/files/clang/patch-head-r338697.diff104
-rw-r--r--devel/llvm60/files/clang/patch-head-r339019.diff30
-rw-r--r--devel/llvm60/files/clang/patch-stable12-r342281.diff834
-rw-r--r--devel/llvm60/files/clang/patch-tools_clang_lib_Headers_CMakeLists.txt32
-rw-r--r--devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format-sublime.py14
-rw-r--r--devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format.py11
-rw-r--r--devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_git-clang-format32
-rw-r--r--devel/llvm60/files/clang/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer12
-rw-r--r--devel/llvm60/files/lld/patch-head-r331731.diff67
-rw-r--r--devel/llvm60/files/lld/patch-head-r333401.diff34
-rw-r--r--devel/llvm60/files/lld/patch-head-r336664.diff52
-rw-r--r--devel/llvm60/files/lld/patch-head-r336972.diff146
-rw-r--r--devel/llvm60/files/lld/patch-head-r337282.diff39
-rw-r--r--devel/llvm60/files/lld/patch-head-r338251.diff123
-rw-r--r--devel/llvm60/files/lld/patch-head-r338682.diff55
-rw-r--r--devel/llvm60/files/lld/patch-head-r339013.diff39
-rw-r--r--devel/llvm60/files/lld/patch-head-r339304.diff37
-rw-r--r--devel/llvm60/files/lldb/patch-head-r332849.diff38
-rw-r--r--devel/llvm60/files/lldb/patch-head-r332965.diff22
-rw-r--r--devel/llvm60/files/llvm-wrapper.sh.in12
-rw-r--r--devel/llvm60/files/openmp/patch-bug3227929
-rw-r--r--devel/llvm60/files/openmp/patch-i38611
-rw-r--r--devel/llvm60/files/patch-cmake_modules_AddSphinxTarget.cmake11
-rw-r--r--devel/llvm60/files/patch-head-r308867.diff33
-rw-r--r--devel/llvm60/files/patch-head-r330686.diff80
-rw-r--r--devel/llvm60/files/patch-head-r331065.diff88
-rw-r--r--devel/llvm60/files/patch-head-r331366.diff609
-rw-r--r--devel/llvm60/files/patch-head-r336969.diff32
-rw-r--r--devel/llvm60/files/patch-head-r336970.diff24
-rw-r--r--devel/llvm60/files/patch-head-r337615.diff64
-rw-r--r--devel/llvm60/files/patch-head-r338689.diff32
-rw-r--r--devel/llvm60/files/patch-svn-r3223251589
-rw-r--r--devel/llvm60/pkg-descr8
-rw-r--r--devel/llvm60/pkg-plist2899
-rw-r--r--devel/mongo-cxx-driver/Makefile47
-rw-r--r--devel/mongo-cxx-driver/distinfo3
-rw-r--r--devel/mongo-cxx-driver/files/patch-SConstruct33
-rw-r--r--devel/mongo-cxx-driver/files/patch-boost-1.6726
-rw-r--r--devel/mongo-cxx-driver/pkg-descr7
-rw-r--r--devel/mongo-cxx-driver/pkg-plist112
-rw-r--r--devel/p5-Log-Any-Adapter-Callback/Makefile26
-rw-r--r--devel/p5-Log-Any-Adapter-Callback/distinfo3
-rw-r--r--devel/p5-Log-Any-Adapter-Callback/pkg-descr3
-rw-r--r--devel/p5-Log-Any-Adapter-Callback/pkg-plist2
-rw-r--r--devel/py-backports.functools_lru_cache/Makefile29
-rw-r--r--devel/py-backports.functools_lru_cache/distinfo3
-rw-r--r--devel/py-backports.functools_lru_cache/pkg-descr5
-rw-r--r--devel/py-backports.os/Makefile35
-rw-r--r--devel/py-backports.os/distinfo3
-rw-r--r--devel/py-backports.os/pkg-descr9
-rw-r--r--devel/py-backports.shutil_get_terminal_size/Makefile32
-rw-r--r--devel/py-backports.shutil_get_terminal_size/distinfo2
-rw-r--r--devel/py-backports.shutil_get_terminal_size/pkg-descr3
-rw-r--r--devel/py-backports_abc/Makefile20
-rw-r--r--devel/py-backports_abc/distinfo3
-rw-r--r--devel/py-backports_abc/pkg-descr3
-rw-r--r--devel/py-cheetah/Makefile23
-rw-r--r--devel/py-cheetah/distinfo2
-rw-r--r--devel/py-cheetah/pkg-descr7
-rw-r--r--devel/py-dis3/Makefile25
-rw-r--r--devel/py-dis3/distinfo3
-rw-r--r--devel/py-dis3/pkg-descr4
-rw-r--r--devel/py-enum34/Makefile32
-rw-r--r--devel/py-enum34/distinfo3
-rw-r--r--devel/py-enum34/pkg-descr5
-rw-r--r--devel/py-functools32/Makefile25
-rw-r--r--devel/py-functools32/distinfo2
-rw-r--r--devel/py-functools32/pkg-descr5
-rw-r--r--devel/py-futures/Makefile27
-rw-r--r--devel/py-futures/distinfo3
-rw-r--r--devel/py-futures/pkg-descr8
-rw-r--r--devel/py-more-itertools5/Makefile30
-rw-r--r--devel/py-more-itertools5/distinfo3
-rw-r--r--devel/py-more-itertools5/pkg-descr7
-rw-r--r--devel/py-pathlib/Makefile33
-rw-r--r--devel/py-pathlib/distinfo2
-rw-r--r--devel/py-pathlib/pkg-descr4
-rw-r--r--devel/py-selectors2/Makefile22
-rw-r--r--devel/py-selectors2/distinfo3
-rw-r--r--devel/py-selectors2/pkg-descr4
-rw-r--r--devel/py-should_dsl/Makefile19
-rw-r--r--devel/py-should_dsl/distinfo2
-rw-r--r--devel/py-should_dsl/pkg-descr3
-rw-r--r--devel/py-singledispatch/Makefile23
-rw-r--r--devel/py-singledispatch/distinfo2
-rw-r--r--devel/py-singledispatch/pkg-descr10
-rw-r--r--devel/py-subprocess32/Makefile24
-rw-r--r--devel/py-subprocess32/distinfo3
-rw-r--r--devel/py-subprocess32/pkg-descr9
-rw-r--r--devel/py-total-ordering/Makefile16
-rw-r--r--devel/py-total-ordering/distinfo2
-rw-r--r--devel/py-total-ordering/pkg-descr3
-rw-r--r--devel/py-typing/Makefile23
-rw-r--r--devel/py-typing/distinfo3
-rw-r--r--devel/py-typing/pkg-descr8
-rw-r--r--devel/py-weakrefmethod/Makefile23
-rw-r--r--devel/py-weakrefmethod/distinfo3
-rw-r--r--devel/py-weakrefmethod/pkg-descr3
-rw-r--r--devel/rbtools/Makefile25
-rw-r--r--devel/rbtools/distinfo3
-rw-r--r--devel/rbtools/pkg-descr4
-rw-r--r--devel/subversion-lts/Makefile227
-rw-r--r--devel/subversion-lts/Makefile.common115
-rw-r--r--devel/subversion-lts/distinfo3
-rw-r--r--devel/subversion-lts/files/220_subversion.conf.sample.in104
-rw-r--r--devel/subversion-lts/files/build-outputs.mk.addons3684
-rw-r--r--devel/subversion-lts/files/extra-patch-build.conf11
-rw-r--r--devel/subversion-lts/files/extra-patch-fbsd-template164
-rw-r--r--devel/subversion-lts/files/extra-patch-svnserve-wrapper11
-rw-r--r--devel/subversion-lts/files/patch-Makefile.in11
-rw-r--r--devel/subversion-lts/files/patch-build-outputs.mk17
-rw-r--r--devel/subversion-lts/files/pkg-message.in8
-rw-r--r--devel/subversion-lts/files/svnserve.in40
-rw-r--r--devel/subversion-lts/files/svnserve.wrapper9
-rw-r--r--devel/subversion-lts/pkg-descr6
-rw-r--r--devel/subversion-lts/pkg-plist472
-rw-r--r--devel/viewvc/Makefile70
-rw-r--r--devel/viewvc/distinfo3
-rw-r--r--devel/viewvc/files/pkg-message.in74
-rw-r--r--devel/viewvc/files/viewvc.in70
-rw-r--r--devel/viewvc/pkg-descr8
-rw-r--r--devel/viewvc/pkg-plist178
-rw-r--r--dns/Makefile1
-rw-r--r--dns/py-dns/Makefile32
-rw-r--r--dns/py-dns/distinfo2
-rw-r--r--dns/py-dns/files/patch-DNS-Lib.py15
-rw-r--r--dns/py-dns/files/patch-DNS-Type.py11
-rw-r--r--dns/py-dns/pkg-descr5
-rw-r--r--editors/Makefile1
-rw-r--r--editors/atom/Makefile261
-rw-r--r--editors/atom/distinfo11
-rw-r--r--editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_apm.js11
-rw-r--r--editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_auth.js11
-rw-r--r--editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_install.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_ATatom_nsfw_binding.gyp12
-rw-r--r--editors/atom/files/atom/patch-node__modules_ATatom_watcher_binding.gyp11
-rw-r--r--editors/atom/files/atom/patch-node__modules_atom-keymap_lib_helpers.js20
-rw-r--r--editors/atom/files/atom/patch-node__modules_dugite_build_lib_git-environment.js52
-rw-r--r--editors/atom/files/atom/patch-node__modules_fs-admin_binding.gyp11
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_bin_linux-ssh-wrapper.sh9
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_lib_git-shell-out-strategy.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_lib_models_workdir-context.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_package.json10
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_test_git-strategies.test.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_github_test_github-package.test.js20
-rw-r--r--editors/atom/files/atom/patch-node__modules_nslog_binding.gyp11
-rw-r--r--editors/atom/files/atom/patch-node__modules_os-homedir_index.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_scrollbar-style_binding.gyp16
-rw-r--r--editors/atom/files/atom/patch-node__modules_spell-check_lib_checker-env.coffee9
-rw-r--r--editors/atom/files/atom/patch-node__modules_spell-check_lib_locale-checker.coffee10
-rw-r--r--editors/atom/files/atom/patch-node__modules_spellchecker_binding.gyp20
-rw-r--r--editors/atom/files/atom/patch-node__modules_spellchecker_vendor_hunspell_src_hunspell_affentry.hxx102
-rw-r--r--editors/atom/files/atom/patch-node__modules_symbols-view_lib_tag-generator.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_tabs_lib_tab-bar-view.coffee11
-rw-r--r--editors/atom/files/atom/patch-node__modules_text-buffer_lib_text-buffer.js11
-rw-r--r--editors/atom/files/atom/patch-node__modules_tree-view_lib_root-drag-and-drop.coffee11
-rw-r--r--editors/atom/files/atom/patch-node__modules_tree-view_spec_tree-view-package-spec.coffee11
-rw-r--r--editors/atom/files/atom/patch-node__modules_user-home_index.js11
-rw-r--r--editors/atom/files/node/patch-common.gypi18
-rw-r--r--editors/atom/files/node/patch-configure.py11
-rw-r--r--editors/atom/files/patch-atom.sh20
-rw-r--r--editors/atom/files/patch-package.json11
-rw-r--r--editors/atom/files/patch-packages_welcome_lib_guide-view.js11
-rw-r--r--editors/atom/files/patch-script_build20
-rw-r--r--editors/atom/files/patch-script_lib_dump-symbols.js14
-rw-r--r--editors/atom/files/patch-script_lib_package-application.js29
-rw-r--r--editors/atom/files/patch-script_package.json20
-rw-r--r--editors/atom/files/patch-script_test20
-rw-r--r--editors/atom/files/patch-spec_main-process_atom-application.test.js11
-rw-r--r--editors/atom/files/patch-src_atom-paths.js11
-rw-r--r--editors/atom/files/patch-src_config-schema.js17
-rw-r--r--editors/atom/files/patch-src_crash-reporter-start.js18
-rw-r--r--editors/atom/files/patch-src_main-process_atom-application.js11
-rw-r--r--editors/atom/files/patch-src_main-process_atom-window.js11
-rw-r--r--editors/atom/files/patch-src_main-process_auto-update-manager.js11
-rw-r--r--editors/atom/files/patch-src_text-editor-component.js29
-rw-r--r--editors/atom/files/patch-src_update-process-env.js11
-rw-r--r--editors/atom/files/patch-src_window-event-handler.js11
-rw-r--r--editors/atom/files/script/patch-script_node__modules_electron-packager_ignore.js11
-rw-r--r--editors/atom/files/script/patch-script_node__modules_electron-packager_targets.js22
-rw-r--r--editors/atom/files/script/patch-script_node__modules_passwd-user_index.js29
-rw-r--r--editors/atom/files/script/patch-script_node__modules_user-home_index.js11
-rw-r--r--editors/atom/pkg-descr6
-rw-r--r--editors/atom/pkg-plist8726
-rw-r--r--emulators/Makefile3
-rw-r--r--emulators/fceux/Makefile93
-rw-r--r--emulators/fceux/distinfo3
-rw-r--r--emulators/fceux/files/patch-fceux-server_server.cpp11
-rw-r--r--emulators/fceux/files/patch-src_boards_mapinc.h8
-rw-r--r--emulators/fceux/files/patch-src_cheat.cpp11
-rw-r--r--emulators/fceux/pkg-descr11
-rw-r--r--emulators/fceux/pkg-plist106
-rw-r--r--emulators/gem5/Makefile51
-rw-r--r--emulators/gem5/distinfo2
-rw-r--r--emulators/gem5/files/patch-SConstruct39
-rw-r--r--emulators/gem5/files/patch-src_SConscript11
-rw-r--r--emulators/gem5/files/patch-src_mem_physical.cc14
-rw-r--r--emulators/gem5/files/patch-util_term_Makefile11
-rw-r--r--emulators/gem5/pkg-descr5
-rw-r--r--emulators/gem5/pkg-plist108
-rw-r--r--emulators/nonpareil/Makefile44
-rw-r--r--emulators/nonpareil/distinfo2
-rw-r--r--emulators/nonpareil/files/patch-SConstruct86
-rw-r--r--emulators/nonpareil/files/patch-src_SConscript114
-rw-r--r--emulators/nonpareil/files/patch-src_asm.h11
-rw-r--r--emulators/nonpareil/files/patch-src_printer.c10
-rw-r--r--emulators/nonpareil/files/patch-src_proc.c16
-rw-r--r--emulators/nonpareil/files/patch-src_util.c18
-rw-r--r--emulators/nonpareil/files/patch-src_util.h11
-rw-r--r--emulators/nonpareil/pkg-descr7
-rw-r--r--emulators/nonpareil/pkg-plist49
-rw-r--r--games/0ad/Makefile92
-rw-r--r--games/0ad/distinfo5
-rw-r--r--games/0ad/files/patch-build_premake_extern__libs5.lua21
-rw-r--r--games/0ad/files/patch-build_premake_premake5.lua17
-rw-r--r--games/0ad/files/patch-build_workspaces_update-workspaces.sh13
-rw-r--r--games/0ad/files/patch-icu6817
-rw-r--r--games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp157
-rw-r--r--games/0ad/files/patch-libraries_source_fcollada_src_Makefile11
-rw-r--r--games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff168
-rw-r--r--games/0ad/files/patch-libraries_source_spidermonkey_build.sh17
-rw-r--r--games/0ad/files/patch-source_lib_allocators_page__aligned.cpp20
-rw-r--r--games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp20
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp30
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp34
-rw-r--r--games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp56
-rw-r--r--games/0ad/pkg-descr16
-rw-r--r--games/0ad/pkg-plist12
-rw-r--r--games/Makefile8
-rw-r--r--games/dangerdeep/Makefile56
-rw-r--r--games/dangerdeep/distinfo2
-rw-r--r--games/dangerdeep/files/patch-SConstruct104
-rw-r--r--games/dangerdeep/files/patch-src__condvar.h18
-rw-r--r--games/dangerdeep/files/patch-src__faulthandler.h10
-rw-r--r--games/dangerdeep/files/patch-src__mutex.h20
-rw-r--r--games/dangerdeep/files/patch-src__subsim.cpp19
-rw-r--r--games/dangerdeep/files/patch-src__thread.h19
-rw-r--r--games/dangerdeep/files/patch-src_coastmap.h20
-rw-r--r--games/dangerdeep/files/patch-src_shader.cpp26
-rw-r--r--games/dangerdeep/pkg-descr6
-rw-r--r--games/freera/Makefile41
-rw-r--r--games/freera/distinfo2
-rw-r--r--games/freera/files/SConstruct27
-rw-r--r--games/freera/files/patch-src-freera.cpp13
-rw-r--r--games/freera/files/patch-src_game_loadmap.cpp11
-rw-r--r--games/freera/files/pkg-message.in14
-rw-r--r--games/freera/pkg-descr6
-rw-r--r--games/glob2/Makefile80
-rw-r--r--games/glob2/distinfo2
-rw-r--r--games/glob2/files/patch-SConstruct84
-rw-r--r--games/glob2/files/patch-boost-1.6917
-rw-r--r--games/glob2/files/patch-data__SConscript9
-rw-r--r--games/glob2/files/patch-src_EditorMainMenu.cpp11
-rw-r--r--games/glob2/files/patch-src_LANMenuScreen.cpp11
-rw-r--r--games/glob2/files/patch-src_YOGClientLobbyScreen.cpp11
-rw-r--r--games/glob2/files/patch-src__ConfigFiles.h15
-rw-r--r--games/glob2/files/patch-src__Game.h36
-rw-r--r--games/glob2/files/pkg-message.in20
-rw-r--r--games/glob2/pkg-descr12
-rw-r--r--games/glob2/pkg-plist1746
-rw-r--r--games/marsnomercy/Makefile55
-rw-r--r--games/marsnomercy/distinfo2
-rw-r--r--games/marsnomercy/files/mars-nomercy.in12
-rw-r--r--games/marsnomercy/files/patch-SConstruct108
-rw-r--r--games/marsnomercy/files/pkg-message.in14
-rw-r--r--games/marsnomercy/pkg-descr21
-rw-r--r--games/netpanzer/Makefile53
-rw-r--r--games/netpanzer/distinfo3
-rw-r--r--games/netpanzer/files/patch-SConstruct19
-rw-r--r--games/netpanzer/files/patch-src_Lib_Network_Address.hpp11
-rw-r--r--games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp11
-rw-r--r--games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp17
-rw-r--r--games/netpanzer/pkg-descr8
-rw-r--r--games/pingus/Makefile48
-rw-r--r--games/pingus/distinfo5
-rw-r--r--games/pingus/files/patch-SConscript13
-rw-r--r--games/pingus/files/patch-boost-signals2380
-rw-r--r--games/pingus/files/patch-src-lisp-getters.hpp11
-rw-r--r--games/pingus/files/patch-src__pingus__pingus_main.cpp11
-rw-r--r--games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp11
-rw-r--r--games/pingus/files/patch-src__util__file_reader.hpp10
-rw-r--r--games/pingus/files/patch-src_pingus_screens_demo__session.cpp10
-rw-r--r--games/pingus/pkg-descr5
-rw-r--r--games/renpy/Makefile109
-rw-r--r--games/renpy/distinfo3
-rw-r--r--games/renpy/files/patch-issue86911
-rw-r--r--games/renpy/files/patch-system-fribidi57
-rw-r--r--games/renpy/pkg-descr9
-rw-r--r--graphics/Makefile4
-rw-r--r--graphics/goxel/Makefile45
-rw-r--r--graphics/goxel/distinfo3
-rw-r--r--graphics/goxel/files/patch-SConstruct35
-rw-r--r--graphics/goxel/files/patch-ext__src_cycles_src_util_util__path.cpp13
-rw-r--r--graphics/goxel/pkg-descr3
-rw-r--r--graphics/goxel/pkg-plist4
-rw-r--r--graphics/py-pillow6/Makefile80
-rw-r--r--graphics/py-pillow6/distinfo3
-rw-r--r--graphics/py-pillow6/pkg-descr5
-rw-r--r--graphics/sk1libs/Makefile34
-rw-r--r--graphics/sk1libs/distinfo2
-rw-r--r--graphics/sk1libs/files/patch-src-utils-fs.py22
-rw-r--r--graphics/sk1libs/files/patch-src-utils-system.py19
-rw-r--r--graphics/sk1libs/files/patch-src_imaging_libimagingft___imagingft.c11
-rw-r--r--graphics/sk1libs/pkg-descr4
-rw-r--r--graphics/sk1libs/pkg-plist525
-rw-r--r--graphics/uniconvertor/Makefile30
-rw-r--r--graphics/uniconvertor/distinfo2
-rw-r--r--graphics/uniconvertor/pkg-descr30
-rw-r--r--graphics/uniconvertor/pkg-plist260
-rw-r--r--lang/Makefile8
-rw-r--r--lang/julia10/Makefile188
-rw-r--r--lang/julia10/distinfo3
-rw-r--r--lang/julia10/files/check_openblas.c10
-rw-r--r--lang/julia10/files/extra-patch-openblas-fix-arch.patch19
-rw-r--r--lang/julia10/files/extra-patch-ui_Makefile11
-rw-r--r--lang/julia10/files/patch-Make.inc53
-rw-r--r--lang/julia10/files/patch-Makefile122
-rw-r--r--lang/julia10/files/patch-base_Makefile11
-rw-r--r--lang/julia10/files/patch-deps_blas.mk17
-rw-r--r--lang/julia10/files/patch-src_Makefile20
-rw-r--r--lang/julia10/pkg-message9
-rw-r--r--lang/julia10/pkg-plist817
-rw-r--r--lang/pypy/Makefile170
-rw-r--r--lang/pypy/bsd.pypy.cffi.mk30
-rw-r--r--lang/pypy/bsd.pypy.mk22
-rw-r--r--lang/pypy/distinfo5
-rw-r--r--lang/pypy/files/patch-lib__pypy___curses__build.py11
-rw-r--r--lang/pypy/pkg-descr17
-rw-r--r--lang/pypy/pkg-message17
-rw-r--r--lang/pypy/pkg-plist2366
-rw-r--r--lang/pypy3/Makefile66
-rw-r--r--lang/pypy3/distinfo5
-rw-r--r--lang/pypy3/files/patch-lib__pypy___blake2___blake2__build.py11
-rw-r--r--lang/pypy3/files/patch-lib__pypy___curses__build.py11
-rw-r--r--lang/pypy3/pkg-descr17
-rw-r--r--lang/pypy3/pkg-plist2484
-rw-r--r--lang/spidermonkey185/Makefile127
-rw-r--r--lang/spidermonkey185/distinfo2
-rw-r--r--lang/spidermonkey185/files/patch-assembler_jit_ExecutableAllocator.h14
-rw-r--r--lang/spidermonkey185/files/patch-assembler_wtf_Platform.h18
-rw-r--r--lang/spidermonkey185/files/patch-bug7712811839
-rw-r--r--lang/spidermonkey185/files/patch-c++11247
-rw-r--r--lang/spidermonkey185/files/patch-configure.in36
-rw-r--r--lang/spidermonkey185/files/patch-jsscript.h48
-rw-r--r--lang/spidermonkey185/files/patch-jsstr.cpp36
-rw-r--r--lang/spidermonkey185/files/patch-nanojit_CodeAlloc.cpp10
-rw-r--r--lang/spidermonkey185/files/patch-nanojit_njcpudetect.h11
-rw-r--r--lang/spidermonkey185/pkg-descr3
-rw-r--r--lang/spidermonkey185/pkg-plist106
-rw-r--r--lang/spidermonkey24/Makefile82
-rw-r--r--lang/spidermonkey24/distinfo2
-rw-r--r--lang/spidermonkey24/files/patch-assembler_jit_ExecutableAllocator.h14
-rw-r--r--lang/spidermonkey24/files/patch-assembler_wtf_Platform.h18
-rw-r--r--lang/spidermonkey24/files/patch-bug101297132
-rw-r--r--lang/spidermonkey24/files/patch-bug104179535
-rw-r--r--lang/spidermonkey24/files/patch-bug104622432
-rw-r--r--lang/spidermonkey24/files/patch-bug70217923
-rw-r--r--lang/spidermonkey24/files/patch-bug89424020
-rw-r--r--lang/spidermonkey24/files/patch-config_milestone.pl11
-rw-r--r--lang/spidermonkey24/files/patch-jit_AsmJSSignalHandlers.cpp67
-rw-r--r--lang/spidermonkey24/files/patch-jit_arm_Architecture-arm.cpp11
-rw-r--r--lang/spidermonkey24/files/patch-mfbt_Types.h12
-rw-r--r--lang/spidermonkey24/files/patch-utils.h12
-rw-r--r--lang/spidermonkey24/files/patch-vm_NumericConversions.h11
-rw-r--r--lang/spidermonkey24/pkg-descr3
-rw-r--r--lang/spidermonkey24/pkg-plist80
-rw-r--r--lang/spidermonkey52/Makefile101
-rw-r--r--lang/spidermonkey52/distinfo3
-rw-r--r--lang/spidermonkey52/files/patch-142686523
-rw-r--r--lang/spidermonkey52/files/patch-build_autoconf_config.sub24
-rw-r--r--lang/spidermonkey52/files/patch-disable-mozglue62
-rw-r--r--lang/spidermonkey52/files/patch-js_src_jsapi-tests_testPrintf.cpp10
-rw-r--r--lang/spidermonkey52/pkg-descr3
-rw-r--r--lang/spidermonkey52/pkg-plist161
-rw-r--r--lang/spidermonkey60/Makefile70
-rw-r--r--lang/spidermonkey60/distinfo3
-rw-r--r--lang/spidermonkey60/files/patch-js_public_TypeDecls.h26
-rw-r--r--lang/spidermonkey60/pkg-descr3
-rw-r--r--lang/spidermonkey60/pkg-plist172
-rw-r--r--lang/tolua++/Makefile36
-rw-r--r--lang/tolua++/distinfo2
-rw-r--r--lang/tolua++/files/patch-SConstruct41
-rw-r--r--lang/tolua++/files/patch-src-lib-SCsub16
-rw-r--r--lang/tolua++/files/patch-src-tests-SCsub9
-rw-r--r--lang/tolua++/pkg-descr16
-rw-r--r--lang/tolua++/pkg-plist6
-rw-r--r--mail/Makefile1
-rw-r--r--mail/getmail/Makefile43
-rw-r--r--mail/getmail/distinfo3
-rw-r--r--mail/getmail/files/patch-setup.py42
-rw-r--r--mail/getmail/pkg-descr20
-rw-r--r--mail/getmail/pkg-message14
-rw-r--r--math/Makefile1
-rw-r--r--math/gringo/Makefile30
-rw-r--r--math/gringo/distinfo3
-rw-r--r--math/gringo/files/patch-SConscript11
-rw-r--r--math/gringo/files/patch-SConstruct20
-rw-r--r--math/gringo/files/patch-libgringo_src_term.cc10
-rw-r--r--math/gringo/pkg-descr6
-rw-r--r--multimedia/Makefile2
-rw-r--r--multimedia/ffmpeg2theora/Makefile28
-rw-r--r--multimedia/ffmpeg2theora/distinfo3
-rw-r--r--multimedia/ffmpeg2theora/files/patch-SConstruct30
-rw-r--r--multimedia/ffmpeg2theora/files/patch-src_ffmpeg2theora.c14
-rw-r--r--multimedia/ffmpeg2theora/files/patch-src_subtitles.c11
-rw-r--r--multimedia/ffmpeg2theora/pkg-descr5
-rw-r--r--multimedia/mimms/Makefile32
-rw-r--r--multimedia/mimms/distinfo2
-rw-r--r--multimedia/mimms/pkg-descr7
-rw-r--r--multimedia/mimms/pkg-plist11
-rw-r--r--net-p2p/Makefile1
-rw-r--r--net-p2p/linuxdcpp/Makefile42
-rw-r--r--net-p2p/linuxdcpp/distinfo2
-rw-r--r--net-p2p/linuxdcpp/files/patch-BufferSocket.cpp11
-rw-r--r--net-p2p/linuxdcpp/files/patch-SConstruct86
-rw-r--r--net-p2p/linuxdcpp/files/patch-dcpp_CryptoManager.cpp26
-rw-r--r--net-p2p/linuxdcpp/files/patch-libc++64
-rw-r--r--net-p2p/linuxdcpp/pkg-descr13
-rw-r--r--net-p2p/linuxdcpp/pkg-plist114
-rw-r--r--net/Makefile1
-rw-r--r--net/py-ipaddress/Makefile21
-rw-r--r--net/py-ipaddress/distinfo3
-rw-r--r--net/py-ipaddress/pkg-descr7
-rw-r--r--security/Makefile4
-rw-r--r--security/broccoli/Makefile65
-rw-r--r--security/broccoli/distinfo3
-rw-r--r--security/broccoli/files/patch-aux_broccoli_src_bro__openssl.c15
-rw-r--r--security/broccoli/pkg-descr4
-rw-r--r--security/broccoli/pkg-plist22
-rw-r--r--security/orthrus/Makefile39
-rw-r--r--security/orthrus/distinfo2
-rw-r--r--security/orthrus/pkg-descr4
-rw-r--r--security/orthrus/pkg-message15
-rw-r--r--security/orthrus/pkg-plist12
-rw-r--r--security/py-backports.ssl_match_hostname/Makefile30
-rw-r--r--security/py-backports.ssl_match_hostname/distinfo3
-rw-r--r--security/py-backports.ssl_match_hostname/pkg-descr3
-rw-r--r--security/sandsifter/Makefile51
-rw-r--r--security/sandsifter/distinfo3
-rw-r--r--security/sandsifter/files/patch-sifter.py50
-rw-r--r--security/sandsifter/pkg-descr12
-rw-r--r--security/sandsifter/pkg-message12
-rw-r--r--security/sandsifter/pkg-plist16
-rw-r--r--sysutils/Makefile5
-rw-r--r--sysutils/cinnamon-control-center/Makefile81
-rw-r--r--sysutils/cinnamon-control-center/distinfo6
-rw-r--r--sysutils/cinnamon-control-center/files/patch-configure.ac24
-rw-r--r--sysutils/cinnamon-control-center/files/patch-m4_intltool.m411
-rw-r--r--sysutils/cinnamon-control-center/files/patch-panels_datetime_Makefile.am11
-rw-r--r--sysutils/cinnamon-control-center/pkg-descr3
-rw-r--r--sysutils/cinnamon-control-center/pkg-plist281
-rw-r--r--sysutils/ori/Makefile52
-rw-r--r--sysutils/ori/distinfo4
-rw-r--r--sysutils/ori/files/patch-SConstruct18
-rw-r--r--sysutils/ori/pkg-descr7
-rw-r--r--sysutils/osquery/Makefile91
-rw-r--r--sysutils/osquery/distinfo5
-rw-r--r--sysutils/osquery/files/osqueryd.in41
-rw-r--r--sysutils/osquery/files/patch-boost-1.6913
-rw-r--r--sysutils/osquery/pkg-descr7
-rw-r--r--sysutils/osquery/pkg-message10
-rw-r--r--sysutils/osquery/pkg-plist36
-rw-r--r--sysutils/py-shutilwhich/Makefile30
-rw-r--r--sysutils/py-shutilwhich/distinfo2
-rw-r--r--sysutils/py-shutilwhich/pkg-descr8
-rw-r--r--sysutils/uefi-edk2-bhyve-csm/Makefile11
-rw-r--r--www/Makefile53
-rw-r--r--www/cliqz/Makefile191
-rw-r--r--www/cliqz/Makefile.options24
-rw-r--r--www/cliqz/distinfo13
-rw-r--r--www/cliqz/files/patch-addon-search56
-rw-r--r--www/cliqz/files/patch-bug128858739
-rw-r--r--www/cliqz/files/patch-bug155089189
-rw-r--r--www/cliqz/files/patch-bug161891443
-rw-r--r--www/cliqz/files/patch-bug162856734
-rw-r--r--www/cliqz/files/patch-bug164098217
-rw-r--r--www/cliqz/files/patch-bug166371531087
-rw-r--r--www/cliqz/files/patch-bug1667736106
-rw-r--r--www/cliqz/files/patch-cliqz__env.sh27
-rw-r--r--www/cliqz/files/patch-mozilla-release_config_rules.mk34
-rw-r--r--www/cliqz/files/patch-mozilla-release_gfx_skia_skia_src_core_SkCpu.cpp32
-rw-r--r--www/cliqz/pkg-descr5
-rw-r--r--www/cliqz/pkg-plist45
-rw-r--r--www/iridium/Makefile270
-rw-r--r--www/iridium/distinfo3
-rw-r--r--www/iridium/files/audio_manager_openbsd.cc177
-rw-r--r--www/iridium/files/audio_manager_openbsd.h65
-rw-r--r--www/iridium/files/extra-patch-clang40
-rw-r--r--www/iridium/files/iridium-browser.desktop.in11
-rw-r--r--www/iridium/files/iridium.in19
-rw-r--r--www/iridium/files/patch-3p-pdfium_3p_base_allocator_partition__allocator_page__allocator__internals__posix.h11
-rw-r--r--www/iridium/files/patch-BUILD.gn95
-rw-r--r--www/iridium/files/patch-apps_app__restore__service__browsertest.cc11
-rw-r--r--www/iridium/files/patch-apps_ui_views_app__window__frame__view.cc11
-rw-r--r--www/iridium/files/patch-ash_display_mirror__window__controller.cc14
-rw-r--r--www/iridium/files/patch-base_BUILD.gn98
-rw-r--r--www/iridium/files/patch-base_allocator_allocator__shim.cc11
-rw-r--r--www/iridium/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc76
-rw-r--r--www/iridium/files/patch-base_allocator_allocator__shim__override__libc__symbols.h11
-rw-r--r--www/iridium/files/patch-base_allocator_allocator__shim__unittest.cc45
-rw-r--r--www/iridium/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h11
-rw-r--r--www/iridium/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc17
-rw-r--r--www/iridium/files/patch-base_base__switches.cc20
-rw-r--r--www/iridium/files/patch-base_base__switches.h20
-rw-r--r--www/iridium/files/patch-base_cpu.cc38
-rw-r--r--www/iridium/files/patch-base_debug_debugger__posix.cc56
-rw-r--r--www/iridium/files/patch-base_debug_elf__reader.cc28
-rw-r--r--www/iridium/files/patch-base_debug_proc__maps__linux.cc141
-rw-r--r--www/iridium/files/patch-base_debug_stack__trace.cc11
-rw-r--r--www/iridium/files/patch-base_debug_stack__trace.h10
-rw-r--r--www/iridium/files/patch-base_debug_stack__trace__posix.cc23
-rw-r--r--www/iridium/files/patch-base_debug_stack__trace__unittest.cc31
-rw-r--r--www/iridium/files/patch-base_files_file__path__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_files_file__path__watcher.cc15
-rw-r--r--www/iridium/files/patch-base_files_file__path__watcher__kqueue.h13
-rw-r--r--www/iridium/files/patch-base_files_file__path__watcher__stub.cc53
-rw-r--r--www/iridium/files/patch-base_files_file__path__watcher__unittest.cc41
-rw-r--r--www/iridium/files/patch-base_files_file__util.h11
-rw-r--r--www/iridium/files/patch-base_files_file__util__posix.cc11
-rw-r--r--www/iridium/files/patch-base_files_file__util__unittest.cc20
-rw-r--r--www/iridium/files/patch-base_files_scoped__file.cc11
-rw-r--r--www/iridium/files/patch-base_i18n_icu__util.cc20
-rw-r--r--www/iridium/files/patch-base_linux__util.cc20
-rw-r--r--www/iridium/files/patch-base_logging__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_memory_discardable__memory.cc63
-rw-r--r--www/iridium/files/patch-base_memory_discardable__memory__internal.h19
-rw-r--r--www/iridium/files/patch-base_memory_madv__free__discardable__memory__posix.cc11
-rw-r--r--www/iridium/files/patch-base_memory_platform__shared__memory__region.h29
-rw-r--r--www/iridium/files/patch-base_memory_platform__shared__memory__region__posix.cc38
-rw-r--r--www/iridium/files/patch-base_memory_shared__memory__region__unittest.cc16
-rw-r--r--www/iridium/files/patch-base_native__library__posix.cc11
-rw-r--r--www/iridium/files/patch-base_native__library__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_numerics_safe__math__shared__impl.h12
-rw-r--r--www/iridium/files/patch-base_path__service__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_posix_can__lower__nice__to.cc20
-rw-r--r--www/iridium/files/patch-base_posix_unix__domain__socket.cc49
-rw-r--r--www/iridium/files/patch-base_posix_unix__domain__socket__unittest.cc12
-rw-r--r--www/iridium/files/patch-base_process_internal__linux.cc97
-rw-r--r--www/iridium/files/patch-base_process_internal__linux.h34
-rw-r--r--www/iridium/files/patch-base_process_kill.h16
-rw-r--r--www/iridium/files/patch-base_process_kill__posix.cc20
-rw-r--r--www/iridium/files/patch-base_process_launch.cc11
-rw-r--r--www/iridium/files/patch-base_process_launch.h20
-rw-r--r--www/iridium/files/patch-base_process_launch__posix.cc10
-rw-r--r--www/iridium/files/patch-base_process_memory.cc20
-rw-r--r--www/iridium/files/patch-base_process_memory.h11
-rw-r--r--www/iridium/files/patch-base_process_memory__unittest.cc18
-rw-r--r--www/iridium/files/patch-base_process_process__handle.cc11
-rw-r--r--www/iridium/files/patch-base_process_process__handle.h11
-rw-r--r--www/iridium/files/patch-base_process_process__handle__freebsd.cc17
-rw-r--r--www/iridium/files/patch-base_process_process__iterator__freebsd.cc44
-rw-r--r--www/iridium/files/patch-base_process_process__linux.cc31
-rw-r--r--www/iridium/files/patch-base_process_process__metrics.cc38
-rw-r--r--www/iridium/files/patch-base_process_process__metrics.h131
-rw-r--r--www/iridium/files/patch-base_process_process__metrics__freebsd.cc259
-rw-r--r--www/iridium/files/patch-base_process_process__metrics__posix.cc20
-rw-r--r--www/iridium/files/patch-base_process_process__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_process_process__util__unittest.cc16
-rw-r--r--www/iridium/files/patch-base_profiler_register__context.h60
-rw-r--r--www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.cc11
-rw-r--r--www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.h20
-rw-r--r--www/iridium/files/patch-base_profiler_stack__copier__signal.cc63
-rw-r--r--www/iridium/files/patch-base_profiler_stack__sampling__profiler__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_profiler_thread__delegate__posix.cc50
-rw-r--r--www/iridium/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc24
-rw-r--r--www/iridium/files/patch-base_security__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_synchronization_lock__impl.h16
-rw-r--r--www/iridium/files/patch-base_syslog__logging.cc20
-rw-r--r--www/iridium/files/patch-base_system_sys__info.h20
-rw-r--r--www/iridium/files/patch-base_system_sys__info__freebsd.cc67
-rw-r--r--www/iridium/files/patch-base_system_sys__info__posix.cc11
-rw-r--r--www/iridium/files/patch-base_task_thread__pool_environment__config__unittest.cc11
-rw-r--r--www/iridium/files/patch-base_test_fontconfig__util__linux.cc406
-rw-r--r--www/iridium/files/patch-base_test_generate__fontconfig__caches.cc17
-rw-r--r--www/iridium/files/patch-base_test_launcher_test__launcher.cc19
-rw-r--r--www/iridium/files/patch-base_test_test__file__util__posix.cc11
-rw-r--r--www/iridium/files/patch-base_test_test__suite.cc37
-rw-r--r--www/iridium/files/patch-base_third__party_libevent_BUILD.gn24
-rw-r--r--www/iridium/files/patch-base_threading_platform__thread.h11
-rw-r--r--www/iridium/files/patch-base_threading_platform__thread__linux.cc30
-rw-r--r--www/iridium/files/patch-base_threading_platform__thread__posix.cc11
-rw-r--r--www/iridium/files/patch-base_threading_platform__thread__unittest.cc20
-rw-r--r--www/iridium/files/patch-base_threading_thread__task__runner__handle.cc26
-rw-r--r--www/iridium/files/patch-base_trace__event_malloc__dump__provider.cc21
-rw-r--r--www/iridium/files/patch-base_trace__event_process__memory__dump.cc11
-rw-r--r--www/iridium/files/patch-base_trace__event_process__memory__dump.h11
-rw-r--r--www/iridium/files/patch-build_config_BUILD.gn30
-rw-r--r--www/iridium/files/patch-build_config_BUILDCONFIG.gn48
-rw-r--r--www/iridium/files/patch-build_config_compiler_BUILD.gn92
-rw-r--r--www/iridium/files/patch-build_config_compiler_compiler.gni20
-rw-r--r--www/iridium/files/patch-build_config_features.gni11
-rw-r--r--www/iridium/files/patch-build_config_freetype_freetype.gni9
-rw-r--r--www/iridium/files/patch-build_config_linux_BUILD.gn11
-rw-r--r--www/iridium/files/patch-build_config_linux_pkg-config.py26
-rw-r--r--www/iridium/files/patch-build_config_sysroot.gni15
-rw-r--r--www/iridium/files/patch-build_detect__host__arch.py11
-rw-r--r--www/iridium/files/patch-build_gn__run__binary.py11
-rw-r--r--www/iridium/files/patch-build_linux_chrome.map29
-rw-r--r--www/iridium/files/patch-build_linux_libpci_BUILD.gn53
-rw-r--r--www/iridium/files/patch-build_linux_unbundle_libusb.gn27
-rw-r--r--www/iridium/files/patch-build_linux_unbundle_replace__gn__files.py10
-rw-r--r--www/iridium/files/patch-build_toolchain_gcc__toolchain.gni45
-rw-r--r--www/iridium/files/patch-build_toolchain_get__concurrent__links.py17
-rw-r--r--www/iridium/files/patch-build_toolchain_linux_BUILD.gn10
-rw-r--r--www/iridium/files/patch-cc_BUILD.gn19
-rw-r--r--www/iridium/files/patch-cc_layers_scrollbar__layer__impl__base.cc13
-rw-r--r--www/iridium/files/patch-cc_trees_property__tree.cc20
-rw-r--r--www/iridium/files/patch-chrome_app_chrome__command__ids.h11
-rw-r--r--www/iridium/files/patch-chrome_app_chrome__main.cc16
-rw-r--r--www/iridium/files/patch-chrome_app_chrome__main__delegate.cc159
-rw-r--r--www/iridium/files/patch-chrome_app_chromium__strings.grd29
-rw-r--r--www/iridium/files/patch-chrome_app_generated__resources.grd29
-rw-r--r--www/iridium/files/patch-chrome_app_google__chrome__strings.grd29
-rw-r--r--www/iridium/files/patch-chrome_app_settings__strings.grdp20
-rw-r--r--www/iridium/files/patch-chrome_app_shutdown__signal__handlers__posix.cc21
-rw-r--r--www/iridium/files/patch-chrome_app_theme_chrome__unscaled__resources.grd11
-rw-r--r--www/iridium/files/patch-chrome_app_theme_theme__resources.grd11
-rw-r--r--www/iridium/files/patch-chrome_browser_about__flags.cc205
-rw-r--r--www/iridium/files/patch-chrome_browser_after__startup__task__utils.cc38
-rw-r--r--www/iridium/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc70
-rw-r--r--www/iridium/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc17
-rw-r--r--www/iridium/files/patch-chrome_browser_background_background__mode__manager.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_background_background__mode__optimizer.cc15
-rw-r--r--www/iridium/files/patch-chrome_browser_browser__resources.grd11
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__browser__interface__binders.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__browser__main.cc66
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__browser__main__linux.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__browser__main__posix.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__content__browser__client.cc115
-rw-r--r--www/iridium/files/patch-chrome_browser_chrome__content__browser__client.h17
-rw-r--r--www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list__crashpad.cc31
-rw-r--r--www/iridium/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_defaults.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_dev__ui__browser__resources.grd11
-rw-r--r--www/iridium/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_diagnostics_diagnostics__writer.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__commands.cc35
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__commands.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__item__model.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__prefs.cc65
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__prefs.h20
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__query.cc14
-rw-r--r--www/iridium/files/patch-chrome_browser_download_download__shelf__context__menu.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_BUILD.gn15
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_activity__log_activity__log.cc14
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher__linux.cc40
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_erp_chrome_desktop_report_request_helper.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc43
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_external__provider__impl.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_extensions_install__signer.cc18
-rw-r--r--www/iridium/files/patch-chrome_browser_first__run_first__run__dialog.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_first__run_first__run__internal.h18
-rw-r--r--www/iridium/files/patch-chrome_browser_first__run_first__run__internal__posix.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_flag__descriptions.cc65
-rw-r--r--www/iridium/files/patch-chrome_browser_flag__descriptions.h72
-rw-r--r--www/iridium/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc15
-rw-r--r--www/iridium/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc14
-rw-r--r--www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc28
-rw-r--r--www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc27
-rw-r--r--www/iridium/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc23
-rw-r--r--www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc33
-rw-r--r--www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h36
-rw-r--r--www/iridium/files/patch-chrome_browser_memory__details.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_memory__details__linux.cc13
-rw-r--r--www/iridium/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc13
-rw-r--r--www/iridium/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc21
-rw-r--r--www/iridium/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc25
-rw-r--r--www/iridium/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_net_system__network__context__manager.cc64
-rw-r--r--www/iridium/files/patch-chrome_browser_notifications_notification__display__service__impl.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc14
-rw-r--r--www/iridium/files/patch-chrome_browser_password__manager_password__store__factory.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc38
-rw-r--r--www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_plugins_plugins__resource__service.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc43
-rw-r--r--www/iridium/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_prefs_browser__prefs.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_process__singleton__posix.cc34
-rw-r--r--www/iridium/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_profiles_profile__attributes__entry.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_renderer__preferences__util.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py19
-rw-r--r--www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js20
-rw-r--r--www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html29
-rw-r--r--www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js33
-rw-r--r--www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc15
-rw-r--r--www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc14
-rw-r--r--www/iridium/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.cc17
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.h19
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_sharing__device__registration.cc24
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_sharing__handler__registry__impl.cc32
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_sharing__service.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.cc17
-rw-r--r--www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.h19
-rw-r--r--www/iridium/files/patch-chrome_browser_signin_signin__util.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_sync_chrome__sync__client.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.cc56
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.h48
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc72
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h50
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc16
-rw-r--r--www/iridium/files/patch-chrome_browser_task__manager_task__manager__observer.h16
-rw-r--r--www/iridium/files/patch-chrome_browser_themes_theme__service__factory.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_tracing_crash__service__uploader.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_browser__command__controller.cc38
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_browser__view__prefs.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_gtk_print__dialog__gtk.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_sad__tab.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc31
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_tab__helpers.cc25
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc15
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc50
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_accelerator__table.cc46
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc38
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_chrome__views__delegate.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_download_download__item__view.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_first__run__dialog.cc13
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_browser__frame.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_browser__view.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_hung__renderer__view.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_tabs_tab.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc29
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_webui_about__ui.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc55
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h11
-rw-r--r--www/iridium/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc20
-rw-r--r--www/iridium/files/patch-chrome_browser_web__applications_components_web__app__file__handler__registration.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_web__applications_components_web__app__shortcut.cc11
-rw-r--r--www/iridium/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc11
-rw-r--r--www/iridium/files/patch-chrome_common_BUILD.gn13
-rw-r--r--www/iridium/files/patch-chrome_common_channel__info.h11
-rw-r--r--www/iridium/files/patch-chrome_common_channel__info__posix.cc20
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__features.cc18
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__features.h15
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__paths.cc111
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__paths.h42
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__paths__internal.h11
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__switches.cc11
-rw-r--r--www/iridium/files/patch-chrome_common_chrome__switches.h11
-rw-r--r--www/iridium/files/patch-chrome_common_extensions_api_api__sources.gni11
-rw-r--r--www/iridium/files/patch-chrome_common_extensions_command.cc11
-rw-r--r--www/iridium/files/patch-chrome_common_features.gni14
-rw-r--r--www/iridium/files/patch-chrome_common_media_cdm__host__file__path.cc11
-rw-r--r--www/iridium/files/patch-chrome_common_pref__names.cc44
-rw-r--r--www/iridium/files/patch-chrome_common_pref__names.h41
-rw-r--r--www/iridium/files/patch-chrome_common_webui__url__constants.cc48
-rw-r--r--www/iridium/files/patch-chrome_common_webui__url__constants.h32
-rw-r--r--www/iridium/files/patch-chrome_renderer_chrome__content__renderer__client.cc11
-rw-r--r--www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc29
-rw-r--r--www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h20
-rw-r--r--www/iridium/files/patch-chrome_service_cloud__print_print__system.cc11
-rw-r--r--www/iridium/files/patch-chrome_test_BUILD.gn11
-rw-r--r--www/iridium/files/patch-chrome_test_base_chrome__test__launcher.cc20
-rw-r--r--www/iridium/files/patch-chrome_test_base_in__process__browser__test.cc40
-rw-r--r--www/iridium/files/patch-chrome_test_base_interactive__ui__tests__main.cc25
-rw-r--r--www/iridium/files/patch-chrome_test_base_test__browser__window.h11
-rw-r--r--www/iridium/files/patch-chrome_test_base_testing__browser__process.h13
-rw-r--r--www/iridium/files/patch-chrome_test_chromedriver_chrome__launcher.cc13
-rw-r--r--www/iridium/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc20
-rw-r--r--www/iridium/files/patch-chrome_test_chromedriver_key__converter__unittest.cc38
-rw-r--r--www/iridium/files/patch-chromecast_browser_cast__browser__main__parts.cc56
-rw-r--r--www/iridium/files/patch-chromecast_browser_cast__content__browser__client.cc11
-rw-r--r--www/iridium/files/patch-chromecast_browser_metrics_BUILD.gn11
-rw-r--r--www/iridium/files/patch-chromecast_browser_tts_tts__controller__impl.cc14
-rw-r--r--www/iridium/files/patch-chromecast_external__mojo_public_cpp_external__mojo__broker.cc20
-rw-r--r--www/iridium/files/patch-chromecast_media_base_monotonic__clock.cc23
-rw-r--r--www/iridium/files/patch-chromecast_renderer_cast__content__renderer__client.cc11
-rw-r--r--www/iridium/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc14
-rw-r--r--www/iridium/files/patch-components_autofill_core_browser_autofill__experiments.cc11
-rw-r--r--www/iridium/files/patch-components_autofill_core_browser_autofill__external__delegate.cc11
-rw-r--r--www/iridium/files/patch-components_autofill_core_browser_personal__data__manager.cc15
-rw-r--r--www/iridium/files/patch-components_autofill_core_common_autofill__payments__features.cc11
-rw-r--r--www/iridium/files/patch-components_autofill_core_common_autofill__util.cc11
-rw-r--r--www/iridium/files/patch-components_content__settings_core_browser_website__settings__registry.cc11
-rw-r--r--www/iridium/files/patch-components_cookie__config_cookie__store__util.cc24
-rw-r--r--www/iridium/files/patch-components_crash_content_app_BUILD.gn52
-rw-r--r--www/iridium/files/patch-components_crash_content_app_crashpad.cc43
-rw-r--r--www/iridium/files/patch-components_crash_content_app_crashpad.h66
-rw-r--r--www/iridium/files/patch-components_crash_content_app_crashpad__linux.cc24
-rw-r--r--www/iridium/files/patch-components_crash_content_browser_BUILD.gn27
-rw-r--r--www/iridium/files/patch-components_crash_core_common_BUILD.gn31
-rw-r--r--www/iridium/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc20
-rw-r--r--www/iridium/files/patch-components_download_internal_common_base__file.cc20
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_event__constants.cc27
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_event__constants.h30
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_feature__constants.cc20
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_feature__constants.h20
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_feature__list.cc20
-rw-r--r--www/iridium/files/patch-components_feature__engagement_public_feature__list.h38
-rw-r--r--www/iridium/files/patch-components_feedback_anonymizer__tool.cc14
-rw-r--r--www/iridium/files/patch-components_flags__ui_flags__state.cc11
-rw-r--r--www/iridium/files/patch-components_gcm__driver_gcm__client.h10
-rw-r--r--www/iridium/files/patch-components_gcm__driver_gcm__client__impl.cc12
-rw-r--r--www/iridium/files/patch-components_keyed__service_core_dependency__graph__unittest.cc14
-rw-r--r--www/iridium/files/patch-components_metrics_BUILD.gn14
-rw-r--r--www/iridium/files/patch-components_metrics_drive__metrics__provider__linux.cc16
-rw-r--r--www/iridium/files/patch-components_metrics_metrics__log.cc11
-rw-r--r--www/iridium/files/patch-components_metrics_system__memory__stats__recorder__linux.cc18
-rw-r--r--www/iridium/files/patch-components_neterror_resources_neterror.js11
-rw-r--r--www/iridium/files/patch-components_network__session__configurator_browser_network__session__configurator.cc11
-rw-r--r--www/iridium/files/patch-components_new__or__sad__tab__strings.grdp47
-rw-r--r--www/iridium/files/patch-components_os__crypt_os__crypt.h48
-rw-r--r--www/iridium/files/patch-components_os__crypt_os__crypt__unittest.cc11
-rw-r--r--www/iridium/files/patch-components_plugins_renderer_plugin__placeholder.cc14
-rw-r--r--www/iridium/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc73
-rw-r--r--www/iridium/files/patch-components_policy_core_common_schema.cc14
-rw-r--r--www/iridium/files/patch-components_policy_resources_policy__templates.json83
-rw-r--r--www/iridium/files/patch-components_policy_tools_generate__policy__source.py19
-rw-r--r--www/iridium/files/patch-components_previews_core_previews__features.cc18
-rw-r--r--www/iridium/files/patch-components_security__interstitials_content_captive__portal__blocking__page.cc11
-rw-r--r--www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.cc29
-rw-r--r--www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.h20
-rw-r--r--www/iridium/files/patch-components_storage__monitor_BUILD.gn16
-rw-r--r--www/iridium/files/patch-components_storage__monitor_removable__device__constants.cc11
-rw-r--r--www/iridium/files/patch-components_storage__monitor_removable__device__constants.h11
-rw-r--r--www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.cc57
-rw-r--r--www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.h48
-rw-r--r--www/iridium/files/patch-components_sync__device__info_device__info__sync__bridge.cc16
-rw-r--r--www/iridium/files/patch-components_sync__device__info_local__device__info__util.cc11
-rw-r--r--www/iridium/files/patch-components_sync__device__info_local__device__info__util__linux.cc14
-rw-r--r--www/iridium/files/patch-components_update__client_update__query__params.cc11
-rw-r--r--www/iridium/files/patch-components_url__formatter_spoof__checks_idn__spoof__checker.cc11
-rw-r--r--www/iridium/files/patch-components_url__matcher_regex__set__matcher.cc16
-rw-r--r--www/iridium/files/patch-components_url__matcher_url__matcher__factory.cc14
-rw-r--r--www/iridium/files/patch-components_viz_common_features.cc20
-rw-r--r--www/iridium/files/patch-components_viz_common_gpu_dawn__context__provider.cc11
-rw-r--r--www/iridium/files/patch-components_viz_host_host__display__client.cc11
-rw-r--r--www/iridium/files/patch-components_viz_host_host__display__client.h11
-rw-r--r--www/iridium/files/patch-components_viz_service_display__embedder_skia__output__device__dawn.cc11
-rw-r--r--www/iridium/files/patch-components_viz_service_display__embedder_skia__output__surface__impl.cc11
-rw-r--r--www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.cc20
-rw-r--r--www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.h20
-rw-r--r--www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.cc20
-rw-r--r--www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.h11
-rw-r--r--www/iridium/files/patch-components_viz_test_fake__output__surface.cc11
-rw-r--r--www/iridium/files/patch-components_viz_test_fake__output__surface.h11
-rw-r--r--www/iridium/files/patch-components_viz_test_mock__display__client.h11
-rw-r--r--www/iridium/files/patch-components_webcrypto_algorithms_test__helpers.cc14
-rw-r--r--www/iridium/files/patch-content_app_content__main__runner__impl.cc73
-rw-r--r--www/iridium/files/patch-content_browser_browser__main__loop.cc46
-rw-r--r--www/iridium/files/patch-content_browser_child__process__launcher__helper__linux.cc76
-rw-r--r--www/iridium/files/patch-content_browser_devtools_protocol_system__info__handler.cc11
-rw-r--r--www/iridium/files/patch-content_browser_gpu_gpu__process__host.cc11
-rw-r--r--www/iridium/files/patch-content_browser_media_media__internals.cc11
-rw-r--r--www/iridium/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc27
-rw-r--r--www/iridium/files/patch-content_browser_ppapi__plugin__process__host.cc11
-rw-r--r--www/iridium/files/patch-content_browser_ppapi__plugin__process__host__receiver__bindings.cc20
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc29
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc20
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__message__filter.cc29
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__message__filter.h19
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.cc47
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.h15
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__view__host__impl.cc11
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc29
-rw-r--r--www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc11
-rw-r--r--www/iridium/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc11
-rw-r--r--www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc29
-rw-r--r--www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h47
-rw-r--r--www/iridium/files/patch-content_browser_scheduler_responsiveness_watcher.cc20
-rw-r--r--www/iridium/files/patch-content_browser_utility__process__host.cc11
-rw-r--r--www/iridium/files/patch-content_browser_utility__process__host__receiver__bindings.cc20
-rw-r--r--www/iridium/files/patch-content_browser_v8__snapshot__files.cc11
-rw-r--r--www/iridium/files/patch-content_browser_webui_shared__resources__data__source.cc17
-rw-r--r--www/iridium/files/patch-content_common_BUILD.gn15
-rw-r--r--www/iridium/files/patch-content_common_common__sandbox__support__linux.cc10
-rw-r--r--www/iridium/files/patch-content_common_user__agent.cc17
-rw-r--r--www/iridium/files/patch-content_gpu_BUILD.gn11
-rw-r--r--www/iridium/files/patch-content_gpu_gpu__main.cc56
-rw-r--r--www/iridium/files/patch-content_gpu_gpu__sandbox__hook__linux.cc58
-rw-r--r--www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc29
-rw-r--r--www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h25
-rw-r--r--www/iridium/files/patch-content_public_app_content__main__delegate.cc18
-rw-r--r--www/iridium/files/patch-content_public_app_content__main__delegate.h20
-rw-r--r--www/iridium/files/patch-content_public_common_child__process__host.h11
-rw-r--r--www/iridium/files/patch-content_public_common_common__param__traits__macros.h11
-rw-r--r--www/iridium/files/patch-content_public_common_content__features.cc29
-rw-r--r--www/iridium/files/patch-content_public_common_content__switches.cc11
-rw-r--r--www/iridium/files/patch-content_public_common_content__switches.h11
-rw-r--r--www/iridium/files/patch-content_public_common_use__zoom__for__dsf__policy.cc11
-rw-r--r--www/iridium/files/patch-content_public_test_browser__test__base.cc31
-rw-r--r--www/iridium/files/patch-content_public_test_content__browser__test.cc29
-rw-r--r--www/iridium/files/patch-content_public_test_mock__render__thread.cc11
-rw-r--r--www/iridium/files/patch-content_renderer_media_audio_audio__device__factory.cc11
-rw-r--r--www/iridium/files/patch-content_renderer_render__process__impl.cc20
-rw-r--r--www/iridium/files/patch-content_renderer_render__thread__impl.cc51
-rw-r--r--www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.cc47
-rw-r--r--www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.h29
-rw-r--r--www/iridium/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc19
-rw-r--r--www/iridium/files/patch-content_shell_BUILD.gn11
-rw-r--r--www/iridium/files/patch-content_shell_app_shell__main__delegate.cc20
-rw-r--r--www/iridium/files/patch-content_shell_browser_shell__browser__context.cc20
-rw-r--r--www/iridium/files/patch-content_shell_browser_shell__browser__main__parts.cc20
-rw-r--r--www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__context.cc11
-rw-r--r--www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc11
-rw-r--r--www/iridium/files/patch-content_shell_test__runner_test__runner.cc29
-rw-r--r--www/iridium/files/patch-content_test_content__test__suite.cc18
-rw-r--r--www/iridium/files/patch-content_utility_BUILD.gn11
-rw-r--r--www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc29
-rw-r--r--www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h24
-rw-r--r--www/iridium/files/patch-device_bluetooth_BUILD.gn11
-rw-r--r--www/iridium/files/patch-device_gamepad_gamepad__provider.cc11
-rw-r--r--www/iridium/files/patch-device_gamepad_hid__writer__linux.cc11
-rw-r--r--www/iridium/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc14
-rw-r--r--www/iridium/files/patch-extensions_browser_api_messaging_message__service.cc34
-rw-r--r--www/iridium/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc20
-rw-r--r--www/iridium/files/patch-extensions_browser_api_web__request_form__data__parser.cc14
-rw-r--r--www/iridium/files/patch-extensions_browser_browser__context__keyed__service__factories.cc11
-rw-r--r--www/iridium/files/patch-extensions_common_api___permission__features.json29
-rw-r--r--www/iridium/files/patch-extensions_common_api_runtime.json11
-rw-r--r--www/iridium/files/patch-extensions_common_feature__switch.cc16
-rw-r--r--www/iridium/files/patch-extensions_common_features_feature.cc11
-rw-r--r--www/iridium/files/patch-extensions_common_image__util.cc14
-rw-r--r--www/iridium/files/patch-extensions_common_stack__frame.cc14
-rw-r--r--www/iridium/files/patch-extensions_renderer_bindings_api__binding__util.cc11
-rw-r--r--www/iridium/files/patch-extensions_shell_app_shell__main__delegate.cc20
-rw-r--r--www/iridium/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc11
-rw-r--r--www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.cc20
-rw-r--r--www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.h19
-rw-r--r--www/iridium/files/patch-google__apis_gcm_engine_heartbeat__manager.cc53
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc20
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc100
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.h11
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc20
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_service_program__manager.cc14
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc11
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.cc20
-rw-r--r--www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.h11
-rw-r--r--www/iridium/files/patch-gpu_config_gpu__control__list.cc32
-rw-r--r--www/iridium/files/patch-gpu_config_gpu__test__config.cc11
-rw-r--r--www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc47
-rw-r--r--www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h29
-rw-r--r--www/iridium/files/patch-gpu_ipc_service_gpu__init.cc136
-rw-r--r--www/iridium/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc20
-rw-r--r--www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc56
-rw-r--r--www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.h20
-rw-r--r--www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.cc32
-rw-r--r--www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.h45
-rw-r--r--www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.cc29
-rw-r--r--www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.h11
-rw-r--r--www/iridium/files/patch-headless_lib_browser_headless__request__context__manager.cc29
-rw-r--r--www/iridium/files/patch-headless_lib_headless__content__main__delegate.cc20
-rw-r--r--www/iridium/files/patch-headless_lib_headless__content__main__delegate.h11
-rw-r--r--www/iridium/files/patch-headless_lib_headless__macros.h13
-rw-r--r--www/iridium/files/patch-ipc_ipc__channel.h11
-rw-r--r--www/iridium/files/patch-ipc_ipc__channel__common.cc20
-rw-r--r--www/iridium/files/patch-ipc_ipc__channel__mojo.cc15
-rw-r--r--www/iridium/files/patch-ipc_ipc__message__utils.cc11
-rw-r--r--www/iridium/files/patch-ipc_ipc__message__utils.h11
-rw-r--r--www/iridium/files/patch-media_BUILD.gn12
-rw-r--r--www/iridium/files/patch-media_audio_BUILD.gn22
-rw-r--r--www/iridium/files/patch-media_audio_alsa_audio__manager__alsa.cc54
-rw-r--r--www/iridium/files/patch-media_audio_audio__input__device.cc11
-rw-r--r--www/iridium/files/patch-media_audio_audio__manager.cc29
-rw-r--r--www/iridium/files/patch-media_audio_audio__manager.h11
-rw-r--r--www/iridium/files/patch-media_base_audio__latency.cc11
-rw-r--r--www/iridium/files/patch-media_base_media__switches.cc11
-rw-r--r--www/iridium/files/patch-media_base_scopedfd__helper.h23
-rw-r--r--www/iridium/files/patch-media_base_video__frame.cc74
-rw-r--r--www/iridium/files/patch-media_base_video__frame.h50
-rw-r--r--www/iridium/files/patch-media_capture_video_create__video__capture__device__factory.cc20
-rw-r--r--www/iridium/files/patch-media_capture_video_fake__video__capture__device__factory.cc11
-rw-r--r--www/iridium/files/patch-media_capture_video_file__video__capture__device__factory.cc11
-rw-r--r--www/iridium/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc26
-rw-r--r--www/iridium/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc11
-rw-r--r--www/iridium/files/patch-media_capture_video_video__capture__device__client.cc11
-rw-r--r--www/iridium/files/patch-media_filters_vp9__parser.h10
-rw-r--r--www/iridium/files/patch-media_formats_common_offset__byte__queue.cc20
-rw-r--r--www/iridium/files/patch-media_formats_common_offset__byte__queue.h22
-rw-r--r--www/iridium/files/patch-media_formats_mp2t_es__parser__adts.cc26
-rw-r--r--www/iridium/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc26
-rw-r--r--www/iridium/files/patch-media_gpu_buffer__validation.cc48
-rw-r--r--www/iridium/files/patch-media_media__options.gni12
-rw-r--r--www/iridium/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc11
-rw-r--r--www/iridium/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc32
-rw-r--r--www/iridium/files/patch-media_mojo_services_gpu__mojo__media__client.cc20
-rw-r--r--www/iridium/files/patch-media_video_fake__gpu__memory__buffer.cc47
-rw-r--r--www/iridium/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc11
-rw-r--r--www/iridium/files/patch-media_webrtc_webrtc__switches.cc11
-rw-r--r--www/iridium/files/patch-mojo_public_c_system_thunks.cc49
-rw-r--r--www/iridium/files/patch-mojo_public_js_mojo__bindings__resources.grd11
-rw-r--r--www/iridium/files/patch-net_BUILD.gn46
-rw-r--r--www/iridium/files/patch-net_base_address__tracker__linux.cc88
-rw-r--r--www/iridium/files/patch-net_base_address__tracker__linux.h12
-rw-r--r--www/iridium/files/patch-net_base_address__tracker__linux__unittest.cc14
-rw-r--r--www/iridium/files/patch-net_base_features.cc11
-rw-r--r--www/iridium/files/patch-net_base_network__change__notifier.cc28
-rw-r--r--www/iridium/files/patch-net_base_network__interfaces__posix.h11
-rw-r--r--www/iridium/files/patch-net_disk__cache_blockfile_disk__format.h12
-rw-r--r--www/iridium/files/patch-net_dns_address__sorter__posix.cc12
-rw-r--r--www/iridium/files/patch-net_dns_dns__config__service__posix__unittest.cc47
-rw-r--r--www/iridium/files/patch-net_dns_dns__reloader.cc13
-rw-r--r--www/iridium/files/patch-net_dns_dns__util.cc11
-rw-r--r--www/iridium/files/patch-net_dns_host__resolver__proc.cc11
-rw-r--r--www/iridium/files/patch-net_features.gni11
-rw-r--r--www/iridium/files/patch-net_http_http__auth__gssapi__posix.cc14
-rw-r--r--www/iridium/files/patch-net_http_http__auth__gssapi__posix.h12
-rw-r--r--www/iridium/files/patch-net_nqe_network__quality__estimator.cc11
-rw-r--r--www/iridium/files/patch-net_nqe_network__quality__estimator__unittest.cc11
-rw-r--r--www/iridium/files/patch-net_proxy__resolution_proxy__config__service__linux.cc39
-rw-r--r--www/iridium/files/patch-net_proxy__resolution_proxy__resolution__service.cc29
-rw-r--r--www/iridium/files/patch-net_socket_socket__posix.cc11
-rw-r--r--www/iridium/files/patch-net_socket_socks5__client__socket.cc13
-rw-r--r--www/iridium/files/patch-net_socket_tcp__socket__posix.cc20
-rw-r--r--www/iridium/files/patch-net_socket_udp__socket__posix.cc108
-rw-r--r--www/iridium/files/patch-net_socket_udp__socket__posix.h11
-rw-r--r--www/iridium/files/patch-net_socket_unix__domain__client__socket__posix.cc11
-rw-r--r--www/iridium/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc20
-rw-r--r--www/iridium/files/patch-net_tools_quic_quic__http__proxy__backend.cc11
-rw-r--r--www/iridium/files/patch-net_traffic__annotation_network__traffic__annotation.h20
-rw-r--r--www/iridium/files/patch-net_url__request_url__fetcher.cc11
-rw-r--r--www/iridium/files/patch-net_url__request_url__fetcher.h11
-rw-r--r--www/iridium/files/patch-net_url__request_url__request__context.cc11
-rw-r--r--www/iridium/files/patch-net_url__request_url__request__context.h11
-rw-r--r--www/iridium/files/patch-net_url__request_url__request__context__builder.cc20
-rw-r--r--www/iridium/files/patch-pdf_pdfium_pdfium__engine.cc56
-rw-r--r--www/iridium/files/patch-ppapi_proxy_file__io__resource.cc48
-rw-r--r--www/iridium/files/patch-ppapi_proxy_flash__resource.cc11
-rw-r--r--www/iridium/files/patch-printing_cups__config__helper.py11
-rw-r--r--www/iridium/files/patch-remoting_base_chromoting__event.cc11
-rw-r--r--www/iridium/files/patch-remoting_client_display_sys__opengl.h11
-rw-r--r--www/iridium/files/patch-remoting_host_evaluate__capability.cc11
-rw-r--r--www/iridium/files/patch-remoting_host_host__attributes.cc11
-rw-r--r--www/iridium/files/patch-remoting_host_host__details.cc11
-rw-r--r--www/iridium/files/patch-remoting_host_host__main.cc27
-rw-r--r--www/iridium/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc35
-rw-r--r--www/iridium/files/patch-remoting_host_me2me__desktop__environment.cc11
-rw-r--r--www/iridium/files/patch-remoting_host_remoting__me2me__host.cc108
-rw-r--r--www/iridium/files/patch-remoting_host_switches.cc14
-rw-r--r--www/iridium/files/patch-remoting_host_switches.h14
-rw-r--r--www/iridium/files/patch-remoting_resources_remoting__strings.grd20
-rw-r--r--www/iridium/files/patch-sandbox_features.gni11
-rw-r--r--www/iridium/files/patch-sandbox_linux_BUILD.gn47
-rw-r--r--www/iridium/files/patch-sandbox_linux_services_init__process__reaper.cc15
-rw-r--r--www/iridium/files/patch-sandbox_linux_services_libc__interceptor.cc21
-rw-r--r--www/iridium/files/patch-services_audio_BUILD.gn11
-rw-r--r--www/iridium/files/patch-services_device_geolocation_location__arbitrator.cc11
-rw-r--r--www/iridium/files/patch-services_device_hid_BUILD.gn22
-rw-r--r--www/iridium/files/patch-services_device_hid_hid__connection__freebsd.cc243
-rw-r--r--www/iridium/files/patch-services_device_hid_hid__connection__freebsd.h71
-rw-r--r--www/iridium/files/patch-services_device_hid_hid__service.cc20
-rw-r--r--www/iridium/files/patch-services_device_hid_hid__service__freebsd.cc386
-rw-r--r--www/iridium/files/patch-services_device_hid_hid__service__freebsd.h50
-rw-r--r--www/iridium/files/patch-services_device_serial_BUILD.gn11
-rw-r--r--www/iridium/files/patch-services_device_serial_serial__io__handler__posix.cc11
-rw-r--r--www/iridium/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc14
-rw-r--r--www/iridium/files/patch-services_device_usb_BUILD.gn11
-rw-r--r--www/iridium/files/patch-services_network_BUILD.gn10
-rw-r--r--www/iridium/files/patch-services_network_network__context.cc11
-rw-r--r--www/iridium/files/patch-services_network_network__sandbox__hook__linux.cc18
-rw-r--r--www/iridium/files/patch-services_network_network__service.cc20
-rw-r--r--www/iridium/files/patch-services_network_network__service.h11
-rw-r--r--www/iridium/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc20
-rw-r--r--www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h32
-rw-r--r--www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc103
-rw-r--r--www/iridium/files/patch-services_service__manager_embedder_main.cc11
-rw-r--r--www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.cc19
-rw-r--r--www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.h20
-rw-r--r--www/iridium/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn14
-rw-r--r--www/iridium/files/patch-services_service__manager_sandbox_BUILD.gn11
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_common_zygote__features.gni8
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc40
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h13
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_zygote__host__linux.h16
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_zygote__linux.cc15
-rw-r--r--www/iridium/files/patch-services_service__manager_zygote_zygote__main__linux.cc48
-rw-r--r--www/iridium/files/patch-services_tracing_public_cpp_perfetto_trace__time.cc23
-rw-r--r--www/iridium/files/patch-services_tracing_public_cpp_stack__sampling_tracing__sampler__profiler.cc11
-rw-r--r--www/iridium/files/patch-services_video__capture_broadcasting__receiver.cc20
-rw-r--r--www/iridium/files/patch-skia_ext_SkMemory__new__handler.cpp20
-rw-r--r--www/iridium/files/patch-third__party_angle_BUILD.gn10
-rw-r--r--www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h16
-rw-r--r--www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp90
-rw-r--r--www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp21
-rw-r--r--www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp55
-rw-r--r--www/iridium/files/patch-third__party_angle_src_libANGLE_Display.cpp11
-rw-r--r--www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h11
-rw-r--r--www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_vulkan_DisplayVk__api.h15
-rw-r--r--www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c11
-rw-r--r--www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h11
-rw-r--r--www/iridium/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_BUILD.gn13
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_controller_blink__initializer.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_controller_memory__usage__monitor__posix.h47
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_layout_layout__view.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc11
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_BUILD.gn10
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h58
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc29
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc20
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc38
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h27
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc14
-rw-r--r--www/iridium/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc22
-rw-r--r--www/iridium/files/patch-third__party_boringssl_BUILD.gn36
-rw-r--r--www/iridium/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c73
-rw-r--r--www/iridium/files/patch-third__party_boringssl_src_crypto_ex__data.c13
-rw-r--r--www/iridium/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h11
-rw-r--r--www/iridium/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h11
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni11
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_client_BUILD.gn15
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc41
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h20
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h20
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc11
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc11
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc29
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc11
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc40
-rw-r--r--www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc20
-rw-r--r--www/iridium/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h57
-rw-r--r--www/iridium/files/patch-third__party_ffmpeg_libavutil_mem.c12
-rw-r--r--www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc43
-rw-r--r--www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest.cc10
-rw-r--r--www/iridium/files/patch-third__party_harfbuzz-ng_harfbuzz.gni20
-rw-r--r--www/iridium/files/patch-third__party_leveldatabase_env__chromium.cc14
-rw-r--r--www/iridium/files/patch-third__party_libXNVCtrl_NVCtrl.c25
-rw-r--r--www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h11
-rw-r--r--www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h11
-rw-r--r--www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h19
-rw-r--r--www/iridium/files/patch-third__party_libpng_pnglibconf.h14
-rw-r--r--www/iridium/files/patch-third__party_libyuv_include_libyuv_row.h37
-rw-r--r--www/iridium/files/patch-third__party_nasm_config_config-linux.h29
-rw-r--r--www/iridium/files/patch-third__party_node_node.py10
-rw-r--r--www/iridium/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp11
-rw-r--r--www/iridium/files/patch-third__party_pdfium_core_fxcrt_fx__system.h11
-rw-r--r--www/iridium/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp14
-rw-r--r--www/iridium/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp106
-rw-r--r--www/iridium/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp22
-rw-r--r--www/iridium/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp14
-rw-r--r--www/iridium/files/patch-third__party_perfetto_include_perfetto_base_build__config.h70
-rw-r--r--www/iridium/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h24
-rw-r--r--www/iridium/files/patch-third__party_perfetto_include_perfetto_base_time.h20
-rw-r--r--www/iridium/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h13
-rw-r--r--www/iridium/files/patch-third__party_perfetto_src_base_thread__task__runner.cc20
-rw-r--r--www/iridium/files/patch-third__party_perfetto_src_base_unix__socket.cc20
-rw-r--r--www/iridium/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc10
-rw-r--r--www/iridium/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc28
-rw-r--r--www/iridium/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h11
-rw-r--r--www/iridium/files/patch-third__party_skia_src_core_SkCpu.cpp19
-rw-r--r--www/iridium/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h11
-rw-r--r--www/iridium/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp41
-rw-r--r--www/iridium/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp11
-rw-r--r--www/iridium/files/patch-third__party_skia_src_sksl_SkSLString.h11
-rw-r--r--www/iridium/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h11
-rw-r--r--www/iridium/files/patch-third__party_sqlite_BUILD.gn11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_BUILD.gn24
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_Common_Configurator.cpp12
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp14
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp20
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp29
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_src_Vulkan_VkDebug.cpp53
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h152
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h20
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h29
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_memory.cpp11
-rw-r--r--www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_thread.cpp22
-rw-r--r--www/iridium/files/patch-third__party_usrsctp_BUILD.gn20
-rw-r--r--www/iridium/files/patch-third__party_webrtc_BUILD.gn12
-rw-r--r--www/iridium/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn11
-rw-r--r--www/iridium/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc10
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_byte__order.h11
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h11
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.cc12
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.h13
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_network.cc29
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_network.h13
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc47
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h11
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc39
-rw-r--r--www/iridium/files/patch-third__party_webrtc_rtc__base_third__party_sigslot_sigslot.h19
-rw-r--r--www/iridium/files/patch-third__party_webrtc_system__wrappers_BUILD.gn11
-rw-r--r--www/iridium/files/patch-third__party_yasm_yasm__assemble.gni157
-rw-r--r--www/iridium/files/patch-tools_gn_build_gen.py24
-rw-r--r--www/iridium/files/patch-tools_gn_src_base_files_file__posix.cc11
-rw-r--r--www/iridium/files/patch-tools_gn_src_base_files_file__util.h11
-rw-r--r--www/iridium/files/patch-tools_gn_src_base_files_file__util__posix.cc11
-rw-r--r--www/iridium/files/patch-tools_gn_src_base_files_scoped__file.cc11
-rw-r--r--www/iridium/files/patch-tools_gn_src_gn_exec__process.cc13
-rw-r--r--www/iridium/files/patch-tools_gn_src_util_sys__info.cc11
-rw-r--r--www/iridium/files/patch-tools_json__schema__compiler_feature__compiler.py10
-rw-r--r--www/iridium/files/patch-tools_json__schema__compiler_model.py11
-rw-r--r--www/iridium/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn11
-rw-r--r--www/iridium/files/patch-tools_variations_fieldtrial__to__struct.py10
-rw-r--r--www/iridium/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc20
-rw-r--r--www/iridium/files/patch-ui_base_ime_init_input__method__initializer.cc38
-rw-r--r--www/iridium/files/patch-ui_base_resource_resource__bundle.cc20
-rw-r--r--www/iridium/files/patch-ui_base_resource_resource__bundle__freebsd.cc24
-rw-r--r--www/iridium/files/patch-ui_base_ui__base__features.cc20
-rw-r--r--www/iridium/files/patch-ui_base_ui__base__features.h15
-rw-r--r--www/iridium/files/patch-ui_base_webui_web__ui__util.cc11
-rw-r--r--www/iridium/files/patch-ui_base_x_x11__shm__image__pool__base.cc43
-rw-r--r--www/iridium/files/patch-ui_compositor_compositor.cc11
-rw-r--r--www/iridium/files/patch-ui_compositor_compositor.h11
-rw-r--r--www/iridium/files/patch-ui_compositor_compositor__observer.h16
-rw-r--r--www/iridium/files/patch-ui_compositor_host_host__context__factory__private.cc11
-rw-r--r--www/iridium/files/patch-ui_events_devices_x11_device__data__manager__x11.cc19
-rw-r--r--www/iridium/files/patch-ui_events_event__switches.cc11
-rw-r--r--www/iridium/files/patch-ui_events_event__switches.h11
-rw-r--r--www/iridium/files/patch-ui_events_keycodes_dom_keycode__converter.cc11
-rw-r--r--www/iridium/files/patch-ui_gfx_BUILD.gn11
-rw-r--r--www/iridium/files/patch-ui_gfx_canvas__skia.cc11
-rw-r--r--www/iridium/files/patch-ui_gfx_codec_jpeg__codec.cc20
-rw-r--r--www/iridium/files/patch-ui_gfx_font__fallback__linux.cc13
-rw-r--r--www/iridium/files/patch-ui_gfx_font__list.cc11
-rw-r--r--www/iridium/files/patch-ui_gfx_font__names__testing.cc29
-rw-r--r--www/iridium/files/patch-ui_gfx_font__render__params.h18
-rw-r--r--www/iridium/files/patch-ui_gfx_font__util.cc25
-rw-r--r--www/iridium/files/patch-ui_gfx_gpu__memory__buffer.cc11
-rw-r--r--www/iridium/files/patch-ui_gfx_gpu__memory__buffer.h20
-rw-r--r--www/iridium/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h44
-rw-r--r--www/iridium/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc25
-rw-r--r--www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc75
-rw-r--r--www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h29
-rw-r--r--www/iridium/files/patch-ui_gfx_native__pixmap__handle.cc64
-rw-r--r--www/iridium/files/patch-ui_gfx_native__pixmap__handle.h38
-rw-r--r--www/iridium/files/patch-ui_gfx_render__text.cc46
-rw-r--r--www/iridium/files/patch-ui_gl_BUILD.gn11
-rw-r--r--www/iridium/files/patch-ui_gl_generate__bindings.py12
-rw-r--r--www/iridium/files/patch-ui_gl_gl__bindings__api__autogen__glx.h10
-rw-r--r--www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.cc61
-rw-r--r--www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.h43
-rw-r--r--www/iridium/files/patch-ui_gl_gl__fence.cc11
-rw-r--r--www/iridium/files/patch-ui_gl_sync__control__vsync__provider.cc43
-rw-r--r--www/iridium/files/patch-ui_gl_sync__control__vsync__provider.h34
-rw-r--r--www/iridium/files/patch-ui_message__center_public_cpp_message__center__constants.h11
-rw-r--r--www/iridium/files/patch-ui_message__center_views_message__popup__view.cc11
-rw-r--r--www/iridium/files/patch-ui_native__theme_native__theme.h11
-rw-r--r--www/iridium/files/patch-ui_native__theme_native__theme__base.cc11
-rw-r--r--www/iridium/files/patch-ui_platform__window_platform__window__init__properties.h20
-rw-r--r--www/iridium/files/patch-ui_strings_app__locale__settings.grd11
-rw-r--r--www/iridium/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc11
-rw-r--r--www/iridium/files/patch-ui_views_controls_label.cc20
-rw-r--r--www/iridium/files/patch-ui_views_controls_textfield_textfield.cc73
-rw-r--r--www/iridium/files/patch-ui_views_corewm_tooltip__aura.cc11
-rw-r--r--www/iridium/files/patch-ui_views_examples_widget__example.cc11
-rw-r--r--www/iridium/files/patch-ui_views_selection__controller.cc11
-rw-r--r--www/iridium/files/patch-ui_views_style_platform__style.cc11
-rw-r--r--www/iridium/files/patch-ui_views_views__delegate.cc11
-rw-r--r--www/iridium/files/patch-ui_views_views__delegate.h11
-rw-r--r--www/iridium/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc11
-rw-r--r--www/iridium/files/patch-ui_views_widget_native__widget__aura.cc27
-rw-r--r--www/iridium/files/patch-ui_views_window_custom__frame__view.cc11
-rw-r--r--www/iridium/files/patch-ui_views_window_dialog__delegate.cc11
-rw-r--r--www/iridium/files/patch-ui_views_window_frame__background.cc11
-rw-r--r--www/iridium/files/patch-ui_webui_resources_js_cr.js14
-rw-r--r--www/iridium/files/patch-ui_webui_resources_js_icon.js11
-rw-r--r--www/iridium/files/patch-v8_BUILD.gn32
-rw-r--r--www/iridium/files/patch-v8_include_v8config.h21
-rw-r--r--www/iridium/files/patch-v8_src_api_api.cc11
-rw-r--r--www/iridium/files/patch-v8_src_base_cpu.cc18
-rw-r--r--www/iridium/files/patch-v8_src_base_platform_platform-freebsd.cc13
-rw-r--r--www/iridium/files/patch-v8_src_base_platform_platform-posix.cc24
-rw-r--r--www/iridium/files/patch-weblayer_app_content__main__delegate__impl.cc11
-rw-r--r--www/iridium/files/patch-weblayer_browser_browser__main__parts__impl.cc20
-rw-r--r--www/iridium/files/patch-weblayer_browser_content__browser__client__impl.cc38
-rw-r--r--www/iridium/files/patch-weblayer_browser_content__browser__client__impl.h17
-rw-r--r--www/iridium/files/patch-weblayer_browser_system__network__context__manager.cc11
-rw-r--r--www/iridium/files/patch-weblayer_common_weblayer__paths.cc20
-rw-r--r--www/iridium/files/sndio_input.cc201
-rw-r--r--www/iridium/files/sndio_input.h91
-rw-r--r--www/iridium/files/sndio_output.cc183
-rw-r--r--www/iridium/files/sndio_output.h86
-rw-r--r--www/iridium/pkg-descr7
-rw-r--r--www/iridium/pkg-plist1101
-rw-r--r--www/moinmoin/Makefile91
-rw-r--r--www/moinmoin/distinfo3
-rw-r--r--www/moinmoin/files/extra-patch-recaptchav2299
-rw-r--r--www/moinmoin/files/extra-patch-verifyemail232
-rw-r--r--www/moinmoin/files/patch-setup.cfg10
-rw-r--r--www/moinmoin/files/patch-setup.py10
-rw-r--r--www/moinmoin/files/pkg-install.in148
-rw-r--r--www/moinmoin/pkg-descr5
-rw-r--r--www/moinmoin/pkg-plist3555
-rw-r--r--www/node10/Makefile108
-rw-r--r--www/node10/distinfo3
-rw-r--r--www/node10/files/extra-patch-common.gypi13
-rw-r--r--www/node10/files/patch-common.gypi18
-rw-r--r--www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl-cl.gypi17
-rw-r--r--www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl.gypi17
-rw-r--r--www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi17
-rw-r--r--www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi17
-rw-r--r--www/node10/files/patch-deps_openssl_config_bn__conf__asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_config_bn__conf__no-asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_config_dso__conf__asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_config_dso__conf__no-asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_config_opensslconf__asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_config_opensslconf__no-asm.h13
-rw-r--r--www/node10/files/patch-deps_openssl_openssl-cl__no__asm.gypi17
-rw-r--r--www/node10/files/patch-deps_openssl_openssl__no__asm.gypi11
-rw-r--r--www/node10/files/patch-deps_v8_src_arm_cpu-arm.cc22
-rw-r--r--www/node10/files/patch-deps_v8_src_base_platform_platform-freebsd.cc50
-rw-r--r--www/node10/files/patch-deps_v8_src_libsampler_sampler.cc19
-rw-r--r--www/node10/files/patch-icu68109
-rw-r--r--www/node10/files/patch-node.gypi12
-rw-r--r--www/node10/pkg-descr6
-rw-r--r--www/node10/pkg-message7
-rw-r--r--www/node10/pkg-plist431
-rw-r--r--www/node12/Makefile111
-rw-r--r--www/node12/distinfo3
-rw-r--r--www/node12/files/extra-patch-common.gypi13
-rw-r--r--www/node12/files/extra-patch-tools_v8__gypfiles_v8.gyp11
-rw-r--r--www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi11
-rw-r--r--www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi11
-rw-r--r--www/node12/files/patch-deps_openssl_openssl-cl__no__asm.gypi17
-rw-r--r--www/node12/files/patch-deps_openssl_openssl__no__asm.gypi11
-rw-r--r--www/node12/files/patch-deps_v8_src_base_platform_platform-freebsd.cc62
-rw-r--r--www/node12/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc22
-rw-r--r--www/node12/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h20
-rw-r--r--www/node12/files/patch-deps_v8_src_compiler_backend_instruction-selector.cc11
-rw-r--r--www/node12/files/patch-deps_v8_src_compiler_backend_ppc_code-generator-ppc.cc11
-rw-r--r--www/node12/files/patch-deps_v8_src_execution_simulator.h11
-rw-r--r--www/node12/files/patch-deps_v8_src_libsampler_sampler.cc19
-rw-r--r--www/node12/files/patch-node.gypi12
-rw-r--r--www/node12/pkg-descr6
-rw-r--r--www/node12/pkg-message7
-rw-r--r--www/node12/pkg-plist478
-rw-r--r--www/trac-OhlohWidgetsMacro/Makefile23
-rw-r--r--www/trac-OhlohWidgetsMacro/distinfo2
-rw-r--r--www/trac-OhlohWidgetsMacro/files/patch-ohloh_widgets__macro.py20
-rw-r--r--www/trac-OhlohWidgetsMacro/pkg-descr3
-rw-r--r--www/trac-TracGoogleAnalytics/Makefile25
-rw-r--r--www/trac-TracGoogleAnalytics/distinfo2
-rw-r--r--www/trac-TracGoogleAnalytics/pkg-descr8
-rw-r--r--www/trac-accountmanager/Makefile37
-rw-r--r--www/trac-accountmanager/distinfo3
-rw-r--r--www/trac-accountmanager/pkg-descr4
-rw-r--r--www/trac-advancedticketworkflow/Makefile22
-rw-r--r--www/trac-advancedticketworkflow/distinfo2
-rw-r--r--www/trac-advancedticketworkflow/pkg-descr5
-rw-r--r--www/trac-autocomplete/Makefile23
-rw-r--r--www/trac-autocomplete/distinfo2
-rw-r--r--www/trac-autocomplete/pkg-descr4
-rw-r--r--www/trac-ccselector/Makefile23
-rw-r--r--www/trac-ccselector/distinfo2
-rw-r--r--www/trac-ccselector/pkg-descr13
-rw-r--r--www/trac-ccselector/pkg-message13
-rw-r--r--www/trac-customfieldadmin/Makefile30
-rw-r--r--www/trac-customfieldadmin/distinfo2
-rw-r--r--www/trac-customfieldadmin/pkg-descr8
-rw-r--r--www/trac-customfieldadmin/pkg-message13
-rw-r--r--www/trac-datefield/Makefile23
-rw-r--r--www/trac-datefield/distinfo2
-rw-r--r--www/trac-datefield/pkg-descr4
-rw-r--r--www/trac-defaultcc/Makefile27
-rw-r--r--www/trac-defaultcc/distinfo2
-rw-r--r--www/trac-defaultcc/pkg-descr4
-rw-r--r--www/trac-devel/Makefile61
-rw-r--r--www/trac-devel/distinfo3
-rw-r--r--www/trac-devel/files/tracd.in61
-rw-r--r--www/trac-devel/pkg-descr21
-rw-r--r--www/trac-devel/pkg-message17
-rw-r--r--www/trac-discussion/Makefile33
-rw-r--r--www/trac-discussion/distinfo2
-rw-r--r--www/trac-discussion/pkg-descr9
-rw-r--r--www/trac-downloads/Makefile34
-rw-r--r--www/trac-downloads/distinfo2
-rw-r--r--www/trac-downloads/files/patch-tracdownloads_consoleadmin.py12
-rw-r--r--www/trac-downloads/files/patch-tracdownloads_tags.py14
-rw-r--r--www/trac-downloads/pkg-descr11
-rw-r--r--www/trac-email2trac-postfix/Makefile11
-rw-r--r--www/trac-email2trac/Makefile53
-rw-r--r--www/trac-email2trac/distinfo3
-rw-r--r--www/trac-email2trac/pkg-descr12
-rw-r--r--www/trac-email2trac/pkg-plist4
-rw-r--r--www/trac-estimator/Makefile24
-rw-r--r--www/trac-estimator/distinfo2
-rw-r--r--www/trac-estimator/pkg-descr5
-rw-r--r--www/trac-estimator/pkg-message21
-rw-r--r--www/trac-fivestarvote/Makefile34
-rw-r--r--www/trac-fivestarvote/distinfo2
-rw-r--r--www/trac-fivestarvote/pkg-descr6
-rw-r--r--www/trac-fullblog/Makefile33
-rw-r--r--www/trac-fullblog/distinfo2
-rw-r--r--www/trac-fullblog/pkg-descr5
-rw-r--r--www/trac-fullblognotification/Makefile31
-rw-r--r--www/trac-fullblognotification/distinfo2
-rw-r--r--www/trac-fullblognotification/pkg-descr18
-rw-r--r--www/trac-graphviz/Makefile33
-rw-r--r--www/trac-graphviz/distinfo2
-rw-r--r--www/trac-graphviz/files/patch-graphviz_graphviz.py36
-rw-r--r--www/trac-graphviz/pkg-descr4
-rw-r--r--www/trac-iniadmin/Makefile24
-rw-r--r--www/trac-iniadmin/distinfo2
-rw-r--r--www/trac-iniadmin/pkg-descr3
-rw-r--r--www/trac-keywords/Makefile31
-rw-r--r--www/trac-keywords/distinfo2
-rw-r--r--www/trac-keywords/files/patch-fix-javascript22
-rw-r--r--www/trac-keywords/files/patch-trackeywords_web__ui.py12
-rw-r--r--www/trac-keywords/pkg-descr4
-rw-r--r--www/trac-keywordsecretticket/Makefile26
-rw-r--r--www/trac-keywordsecretticket/distinfo3
-rw-r--r--www/trac-keywordsecretticket/pkg-descr3
-rw-r--r--www/trac-ldap/Makefile42
-rw-r--r--www/trac-ldap/distinfo2
-rw-r--r--www/trac-ldap/pkg-descr9
-rw-r--r--www/trac-ldapauthstore/Makefile44
-rw-r--r--www/trac-ldapauthstore/distinfo2
-rw-r--r--www/trac-ldapauthstore/pkg-descr9
-rw-r--r--www/trac-math/Makefile35
-rw-r--r--www/trac-math/distinfo2
-rw-r--r--www/trac-math/files/patch-tracmath_tracmath.py21
-rw-r--r--www/trac-math/files/pkg-message.in17
-rw-r--r--www/trac-math/pkg-descr4
-rw-r--r--www/trac-mercurial/Makefile25
-rw-r--r--www/trac-mercurial/distinfo2
-rw-r--r--www/trac-mercurial/pkg-descr4
-rw-r--r--www/trac-navadd/Makefile23
-rw-r--r--www/trac-navadd/distinfo2
-rw-r--r--www/trac-navadd/pkg-descr9
-rw-r--r--www/trac-permredirect/Makefile27
-rw-r--r--www/trac-permredirect/distinfo2
-rw-r--r--www/trac-permredirect/pkg-descr3
-rw-r--r--www/trac-privatetickets/Makefile22
-rw-r--r--www/trac-privatetickets/distinfo3
-rw-r--r--www/trac-privatetickets/pkg-descr12
-rw-r--r--www/trac-pydotorgtheme/Makefile23
-rw-r--r--www/trac-pydotorgtheme/distinfo2
-rw-r--r--www/trac-pydotorgtheme/pkg-descr3
-rw-r--r--www/trac-scrumburndown/Makefile25
-rw-r--r--www/trac-scrumburndown/distinfo2
-rw-r--r--www/trac-scrumburndown/pkg-descr4
-rw-r--r--www/trac-scrumburndown/pkg-message22
-rw-r--r--www/trac-spam-filter/Makefile23
-rw-r--r--www/trac-spam-filter/distinfo2
-rw-r--r--www/trac-spam-filter/pkg-descr4
-rw-r--r--www/trac-subtickets/Makefile28
-rw-r--r--www/trac-subtickets/distinfo3
-rw-r--r--www/trac-subtickets/files/patch-setup.cfg10
-rw-r--r--www/trac-subtickets/files/patch-tracsubtickets_api.py20
-rw-r--r--www/trac-subtickets/pkg-descr3
-rw-r--r--www/trac-tags/Makefile46
-rw-r--r--www/trac-tags/Makefile.svn_rev1
-rw-r--r--www/trac-tags/distinfo2
-rw-r--r--www/trac-tags/files/patch-tractags_model.py21
-rw-r--r--www/trac-tags/pkg-descr6
-rw-r--r--www/trac-themeengine/Makefile23
-rw-r--r--www/trac-themeengine/distinfo2
-rw-r--r--www/trac-themeengine/pkg-descr4
-rw-r--r--www/trac-ticketimport/Makefile35
-rw-r--r--www/trac-ticketimport/distinfo2
-rw-r--r--www/trac-ticketimport/pkg-descr15
-rw-r--r--www/trac-tickettemplate/Makefile24
-rw-r--r--www/trac-tickettemplate/distinfo2
-rw-r--r--www/trac-tickettemplate/pkg-descr4
-rw-r--r--www/trac-timingandestimation/Makefile23
-rw-r--r--www/trac-timingandestimation/distinfo2
-rw-r--r--www/trac-timingandestimation/pkg-descr6
-rw-r--r--www/trac-timingandestimation/pkg-message21
-rw-r--r--www/trac-tocmacro/Makefile21
-rw-r--r--www/trac-tocmacro/distinfo2
-rw-r--r--www/trac-tocmacro/pkg-descr4
-rw-r--r--www/trac-tweakui/Makefile35
-rw-r--r--www/trac-tweakui/distinfo2
-rw-r--r--www/trac-tweakui/files/pkg-message.in28
-rw-r--r--www/trac-tweakui/pkg-descr9
-rw-r--r--www/trac-vote/Makefile32
-rw-r--r--www/trac-vote/distinfo2
-rw-r--r--www/trac-vote/pkg-descr7
-rw-r--r--www/trac-wikigoodies/Makefile26
-rw-r--r--www/trac-wikigoodies/distinfo2
-rw-r--r--www/trac-wikigoodies/pkg-descr14
-rw-r--r--www/trac-wikinotification/Makefile24
-rw-r--r--www/trac-wikinotification/distinfo2
-rw-r--r--www/trac-wikinotification/files/patch-WikiNotification__notification.py79
-rw-r--r--www/trac-wikinotification/files/patch-WikiNotification__templates__wiki_notification_email_template.txt59
-rw-r--r--www/trac-wikinotification/pkg-descr5
-rw-r--r--www/trac-wikinotification/pkg-message17
-rw-r--r--www/trac-wikitemplates/Makefile27
-rw-r--r--www/trac-wikitemplates/distinfo2
-rw-r--r--www/trac-wikitemplates/pkg-descr4
-rw-r--r--www/trac-wikitopdf/Makefile22
-rw-r--r--www/trac-wikitopdf/distinfo2
-rw-r--r--www/trac-wikitopdf/pkg-descr15
-rw-r--r--www/trac-wysiwyg/Makefile43
-rw-r--r--www/trac-wysiwyg/Makefile.svn_rev1
-rw-r--r--www/trac-wysiwyg/distinfo2
-rw-r--r--www/trac-wysiwyg/pkg-descr5
-rw-r--r--www/trac-wysiwyg/pkg-message12
-rw-r--r--www/trac-xmlrpc/Makefile28
-rw-r--r--www/trac-xmlrpc/distinfo2
-rw-r--r--www/trac-xmlrpc/pkg-descr7
-rw-r--r--www/trac/Makefile61
-rw-r--r--www/trac/distinfo3
-rw-r--r--www/trac/files/tracd.in61
-rw-r--r--www/trac/pkg-descr21
-rw-r--r--www/trac/pkg-message17
4730 files changed, 238349 insertions, 134 deletions
diff --git a/MOVED b/MOVED
index 5b2c16c90f30..e89d214ece9b 100644
--- a/MOVED
+++ b/MOVED
@@ -15907,137 +15907,3 @@ www/mediawiki134|www/mediawiki135|2020-12-31|Has expired: Upstream end of life
www/py-aiohttp2|www/py-aiohttp|2020-12-31|Has expired: Use www/py-aiohttp instead
graphics/drm-legacy-kmod|graphics/drm-kmod|2020-12-31|Has expired: Obsolete version, use drm-kmod
net/mediatomb|net/gerbera|2020-12-31|Removed: no new release for over 10 years
-audio/ardour||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-audio/mixxx21||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-audio/xmms2||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-chinese/sunpinyin||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-databases/arangodb32||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-databases/arangodb33||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/bzr||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/chromium-gn||2020-12-31|Has expired: Uses deprecated version of python, use devel/gn instead
-devel/electron4||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/electron5||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/electron6||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/electron7||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/gnatpython||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/godot2||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-devel/godot2-tools||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-devel/libhid||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/libosmocore||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/llvm60||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/mongo-cxx-driver||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-devel/p5-Log-Any-Adapter-Callback||2020-12-31|Has expired: Use devel/p5-Log-Any (Log::Any::Adapter::Capture) instead
-devel/py-backports.functools_lru_cache||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-backports.os||2020-12-31|Has expired: Python 2 is EOL upstream
-devel/py-backports.shutil_get_terminal_size||2020-12-31|Has expired: Python 2 is EOL upstream
-devel/py-backports_abc||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-cheetah||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-dis3||2020-12-31|Has expired: Python 2 only, backport of Python 3
-devel/py-enum34||2020-12-31|Has expired: Will be removed along with python27
-devel/py-functools32||2020-12-31|Has expired: Python 2 only, backport of Python 3
-devel/py-futures||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-more-itertools5||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-pathlib||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-selectors2||2020-12-31|Has expired: Python 2 is EOL upstream
-devel/py-should_dsl||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-singledispatch||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-subprocess32||2020-12-31|Has expired: Python 2 only, following EOL of lang/python27
-devel/py-total-ordering||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/py-typing||2020-12-31|Has expired: Python 2 only, backport of Python 3
-devel/py-weakrefmethod||2020-12-31|Has expired: Python 2 only, backport of Python 3
-devel/rbtools||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/subversion-lts||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-devel/viewvc||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-dns/py-dns||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-editors/atom||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-emulators/fceux||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-emulators/gem5||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-emulators/nonpareil||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/0ad||2020-12-31|Has expired: Uses deprecated version of python
-games/dangerdeep||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/freera||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/glob2||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/marsnomercy||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/netpanzer||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/pingus||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-games/renpy||2020-12-31|Has expired: Uses deprecated version of python
-graphics/goxel||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-graphics/py-pillow6||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-graphics/sk1libs||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-graphics/uniconvertor||2020-12-31|Has expired: Uses deprecated version of python
-lang/julia10||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/pypy||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/pypy3||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/spidermonkey185||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/spidermonkey24||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/spidermonkey52||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-lang/spidermonkey60||2020-12-31|Has expired: Requires python2 to build
-lang/tolua++||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-mail/getmail||2020-12-31|Has expired: Uses deprecated version of python
-math/gringo||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-multimedia/ffmpeg2theora||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-multimedia/mimms||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-net/py-ipaddress||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-net-p2p/linuxdcpp||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-security/broccoli||2020-12-31|Has expired: Depends lang/python27 which is EOLed upstream
-security/orthrus||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-security/py-backports.ssl_match_hostname||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-security/sandsifter||2020-12-31|Has expired: Uses deprecated version of python, see https://github.com/rigred/sandsifter/issues/10
-sysutils/cinnamon-control-center||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-sysutils/ori||2020-12-31|Has expired: Uses Python 2.7 version of scons, and Python 2.7 which is EOLed upstream
-sysutils/osquery||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-sysutils/py-shutilwhich||2020-12-31|Has expired: Python 2 only, backport of Python 3
-sysutils/uefi-edk2-bhyve-csm||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/cliqz||2020-12-31|Has expired: Uses deprecated version of python
-www/iridium||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/moinmoin||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/node10||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/node12||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-OhlohWidgetsMacro||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-TracGoogleAnalytics||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-accountmanager||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-advancedticketworkflow||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-autocomplete||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-ccselector||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-customfieldadmin||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-datefield||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-defaultcc||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-devel||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-discussion||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-downloads||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-email2trac||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-email2trac-postfix||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-estimator||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-fivestarvote||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-fullblog||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-fullblognotification||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-graphviz||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-iniadmin||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-keywords||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-keywordsecretticket||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-ldap||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-ldapauthstore||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-math||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-mercurial||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-navadd||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-permredirect||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-privatetickets||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-pydotorgtheme||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-scrumburndown||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-spam-filter||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-subtickets||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-tags||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-themeengine||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-ticketimport||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-tickettemplate||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-timingandestimation||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-tocmacro||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-tweakui||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-vote||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-wikigoodies||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-wikinotification||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-wikitemplates||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-wikitopdf||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-wysiwyg||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
-www/trac-xmlrpc||2020-12-31|Has expired: Uses Python 2.7 which is EOLed upstream
diff --git a/audio/Makefile b/audio/Makefile
index 1fac9e13adbe..27048f7e2a0b 100644
--- a/audio/Makefile
+++ b/audio/Makefile
@@ -28,6 +28,7 @@
SUBDIR += ample
SUBDIR += amsynth
SUBDIR += aqualung
+ SUBDIR += ardour
SUBDIR += ardour6
SUBDIR += ario
SUBDIR += arss
@@ -501,6 +502,7 @@
SUBDIR += mixer.app
SUBDIR += mixertui
SUBDIR += mixxx
+ SUBDIR += mixxx21
SUBDIR += mkcue
SUBDIR += moc
SUBDIR += modplug-tools
@@ -867,6 +869,7 @@
SUBDIR += xmix
SUBDIR += xmixer
SUBDIR += xmmix
+ SUBDIR += xmms2
SUBDIR += xmp
SUBDIR += xmradio
SUBDIR += xoscope
diff --git a/audio/ardour/Makefile b/audio/ardour/Makefile
new file mode 100644
index 000000000000..72a70d4296d1
--- /dev/null
+++ b/audio/ardour/Makefile
@@ -0,0 +1,126 @@
+# Created by: Edward Tomasz Napierala <trasz@pin.if.uz.zgora.pl>
+# $FreeBSD$
+
+PORTNAME= ardour
+PORTVERSION= 2.8.16
+PORTREVISION= 19
+CATEGORIES= audio
+MASTER_SITES= http://freebsd.nsu.ru/distfiles/
+
+MAINTAINER= danfe@FreeBSD.org
+COMMENT= Multichannel digital audio workstation
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BROKEN_powerpc64= Does not build: KeyError: 'soundtouch'
+
+BUILD_DEPENDS= ${LOCALBASE}/include/linux/input.h:devel/evdev-proto
+LIB_DEPENDS= libaubio.so:audio/aubio \
+ libboost_date_time.so:devel/boost-libs \
+ libcurl.so:ftp/curl \
+ libfftw3.so:math/fftw3 \
+ libfftw3f.so:math/fftw3-float \
+ libfontconfig.so:x11-fonts/fontconfig \
+ libfreetype.so:print/freetype2 \
+ libgnomecanvasmm-2.6.so:graphics/libgnomecanvasmm26 \
+ libjack.so:audio/jack \
+ liblo.so:audio/liblo \
+ liblrdf.so:textproc/liblrdf \
+ libraptor2.so:textproc/raptor2 \
+ libsamplerate.so:audio/libsamplerate \
+ libsndfile.so:audio/libsndfile
+
+USES= cpe gettext gnome pkgconfig scons:python2 tar:bzip2
+MAKE_ARGS+= SYSLIBS=yes PREFIX=${PREFIX} NLS=yes
+CFLAGS+= -I${LOCALBASE}/include -DHAVE_AUBIO4
+USE_GNOME= atk atkmm cairo cairomm gdkpixbuf2 glib20 glibmm gtk20 gtkmm24 \
+ libartlgpl2 libgnomecanvas libsigc++20 libxslt pango pangomm
+
+USE_LDCONFIG= ${PREFIX}/lib/ardour2 ${PREFIX}/lib/ardour2/surfaces
+
+PLIST_SUB= DISTVERSION=${DISTVERSION}
+
+OPTIONS_DEFINE= OPTIMIZED_CFLAGS VST
+VST_DESC= VST plugins support
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MVST}
+MAKE_ARGS+= VST=yes
+LIB_DEPENDS+= libwine.so:emulators/wine
+PLIST_SUB+= NO_VST="@comment "
+PLIST_SUB+= VST=""
+.else
+PLIST_SUB+= NO_VST=""
+PLIST_SUB+= VST="@comment "
+.endif
+
+# Upstream uses these flags by default
+.if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
+CFLAGS+= -O3 -fomit-frame-pointer -ffast-math -fstrength-reduce
+. if ${ARCH} == "amd64"
+MAKE_ARGS+= DIST_TARGET=x86_64
+MAKE_ARGS+= FPU_OPTIMIZATION=1
+. elif ${MACHINE_CPU:Msse}
+MAKE_ARGS+= DIST_TARGET=i686
+MAKE_ARGS+= FPU_OPTIMIZATION=1
+. else
+MAKE_ARGS+= DIST_TARGET=i386
+MAKE_ARGS+= FPU_OPTIMIZATION=0
+. endif
+.else
+MAKE_ARGS+= FPU_OPTIMIZATION=0
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|%%CFLAGS%%|${CFLAGS}|' ${WRKSRC}/SConstruct
+ @${REINPLACE_CMD} -e 's|alsa_pcm|oss|g' ${WRKSRC}/templates/*.template
+ @${REINPLACE_CMD} -e 's|std::pair<double|std::pair<const double|' \
+ ${WRKSRC}/gtk2_ardour/tempo_lines.h
+ @${REINPLACE_CMD} -e '/sigc++\/class_slot\.h/d' \
+ ${WRKSRC}/libs/ardour/audioregion.cc \
+ ${WRKSRC}/libs/ardour/region.cc
+ @${REINPLACE_CMD} -e 's|time_t|& *|' \
+ ${WRKSRC}/libs/ardour/audiosource.cc
+ @${REINPLACE_CMD} -e '/sigc++\/retype\.h/d' \
+ ${WRKSRC}/libs/ardour/audio_track.cc \
+ ${WRKSRC}/gtk2_ardour/editor_markers.cc \
+ ${WRKSRC}/libs/ardour/session.cc \
+ ${WRKSRC}/libs/ardour/session_transport.cc \
+ ${WRKSRC}/libs/ardour/track.cc
+ @${REINPLACE_CMD} -e '/missing_source = /s,;, != NULL;,' \
+ ${WRKSRC}/gtk2_ardour/editor_region_list.cc
+ @${REINPLACE_CMD} -E 's,(graph_gc|layout) == 0,!&,' \
+ ${WRKSRC}/gtk2_ardour/fft_graph.cc \
+ ${WRKSRC}/gtk2_ardour/panner2d.cc
+ @${REINPLACE_CMD} -e 's,( *bind,(sigc::bind,' \
+ ${WRKSRC}/libs/gtkmm2ext/gtk_ui.cc \
+ ${WRKSRC}/gtk2_ardour/ardour_ui2.cc \
+ ${WRKSRC}/gtk2_ardour/ardour_ui_ed.cc \
+ ${WRKSRC}/gtk2_ardour/audio_clock.cc \
+ ${WRKSRC}/gtk2_ardour/audio_region_editor.cc \
+ ${WRKSRC}/gtk2_ardour/crossfade_edit.cc \
+ ${WRKSRC}/gtk2_ardour/editor.cc \
+ ${WRKSRC}/gtk2_ardour/editor_audio_import.cc \
+ ${WRKSRC}/gtk2_ardour/editor_canvas.cc \
+ ${WRKSRC}/gtk2_ardour/editor_markers.cc \
+ ${WRKSRC}/gtk2_ardour/editor_ops.cc \
+ ${WRKSRC}/gtk2_ardour/editor_selection.cc \
+ ${WRKSRC}/gtk2_ardour/editor_tempodisplay.cc \
+ ${WRKSRC}/gtk2_ardour/generic_pluginui.cc \
+ ${WRKSRC}/gtk2_ardour/io_selector.cc \
+ ${WRKSRC}/gtk2_ardour/level_meter.cc \
+ ${WRKSRC}/gtk2_ardour/mixer_strip.cc \
+ ${WRKSRC}/gtk2_ardour/mixer_ui.cc \
+ ${WRKSRC}/gtk2_ardour/option_editor.cc \
+ ${WRKSRC}/gtk2_ardour/plugin_ui.cc \
+ ${WRKSRC}/gtk2_ardour/route_time_axis.cc \
+ ${WRKSRC}/gtk2_ardour/time_axis_view_item.cc
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${PREFIX}/share/ardour2/templates
+ ${INSTALL_DATA} ${WRKSRC}/templates/*.template \
+ ${STAGEDIR}${PREFIX}/share/ardour2/templates
+
+.include <bsd.port.mk>
diff --git a/audio/ardour/distinfo b/audio/ardour/distinfo
new file mode 100644
index 000000000000..0e44b067e3a7
--- /dev/null
+++ b/audio/ardour/distinfo
@@ -0,0 +1,2 @@
+SHA256 (ardour-2.8.16.tar.bz2) = 37ee32119ba105fa0883faa7e18c58ecd5276894568da224a554d9ef49075e40
+SIZE (ardour-2.8.16.tar.bz2) = 2169916
diff --git a/audio/ardour/files/patch-SConstruct b/audio/ardour/files/patch-SConstruct
new file mode 100644
index 000000000000..756c22a289b5
--- /dev/null
+++ b/audio/ardour/files/patch-SConstruct
@@ -0,0 +1,78 @@
+--- SConstruct.orig 2012-12-02 19:19:45 UTC
++++ SConstruct
+@@ -784,10 +784,7 @@ if env['FPU_OPTIMIZATION']:
+ # handle x86/x86_64 libdir properly
+
+ if env['DIST_LIBDIR'] == '':
+- if env['DIST_TARGET'] == 'x86_64':
+- env['LIBDIR']='lib64'
+- else:
+- env['LIBDIR']='lib'
++ env['LIBDIR']='lib'
+ else:
+ env['LIBDIR'] = env['DIST_LIBDIR']
+
+@@ -838,13 +835,7 @@ if env['ARCH'] != '':
+ # prepend boiler plate optimization flags
+ #
+
+-opt_flags[:0] = [
+- "-O3",
+- "-fomit-frame-pointer",
+- "-ffast-math",
+- "-fstrength-reduce",
+- "-pipe"
+- ]
++opt_flags[:0] = [ "%%CFLAGS%%" ];
+
+ if env['DEBUG'] == 1:
+ env.Append(CCFLAGS=" ".join (debug_flags))
+@@ -866,7 +857,7 @@ if env['UNIVERSAL'] == 1:
+ #
+
+ env.Append(CCFLAGS="-Wall")
+-env.Append(CXXFLAGS="-Woverloaded-virtual")
++env.Append(CXXFLAGS="-Woverloaded-virtual -std=c++11 -Wno-c++11-narrowing")
+
+ if env['EXTRA_WARN']:
+ env.Append(CCFLAGS="-Wextra -pedantic -ansi")
+@@ -955,6 +946,7 @@ conf.Finish()
+
+ libraries['usb'] = LibraryInfo ()
+ prep_libcheck(env, libraries['usb'])
++libraries['usb'].Append(CCFLAGS="-I/usr/local/include", LINKFLAGS="-L/usr/local/lib")
+
+ conf = Configure (libraries['usb'])
+ if conf.CheckLib ('usb', 'usb_interrupt_write'):
+@@ -1006,6 +998,7 @@ libraries['boost'] = conf.Finish ()
+
+ libraries['dmalloc'] = LibraryInfo ()
+ prep_libcheck(env, libraries['dmalloc'])
++libraries['dmalloc'].Append(CCFLAGS="-I/usr/local/include", LINKFLAGS="-L/usr/local/lib")
+
+ #
+ # look for the threaded version
+@@ -1063,8 +1056,10 @@ elif conf.CheckCHeader('/System/Library/Frameworks/Cor
+ subst_dict['%MIDITAG%'] = "ardour"
+ subst_dict['%MIDITYPE%'] = "coremidi"
+ else:
+- print "It appears you don't have the required MIDI libraries installed. For Linux this means you are missing the development package for ALSA libraries."
+- sys.exit (1)
++ libraries['sysmidi'] = LibraryInfo ()
++ env['SYSMIDI'] = 'none'
++ subst_dict['%MIDITAG%'] = "none"
++ subst_dict['%MIDITYPE%'] = "none"
+
+ pname = env['PROGRAM_NAME']
+ subst_dict['%MIDI_DEVICE_NAME%'] = pname.lower()
+@@ -1352,8 +1347,8 @@ if conf.CheckCHeader('/System/Library/Frameworks/CoreA
+ subst_dict['%JACK_INPUT%'] = "coreaudio:Built-in Audio:in"
+ subst_dict['%JACK_OUTPUT%'] = "coreaudio:Built-in Audio:out"
+ else:
+- subst_dict['%JACK_INPUT%'] = "alsa_pcm:playback_"
+- subst_dict['%JACK_OUTPUT%'] = "alsa_pcm:capture_"
++ subst_dict['%JACK_INPUT%'] = "oss:playback_"
++ subst_dict['%JACK_OUTPUT%'] = "oss:capture_"
+
+ # posix_memalign available
+ if not conf.CheckFunc('posix_memalign'):
diff --git a/audio/ardour/files/patch-aubio4 b/audio/ardour/files/patch-aubio4
new file mode 100644
index 000000000000..b3b670d1546b
--- /dev/null
+++ b/audio/ardour/files/patch-aubio4
@@ -0,0 +1,340 @@
+commit 1eaa30b7257f006878c9b2c88ecbaea5bc36b174
+Author: Robin Gareus <robin@gareus.org>
+Date: Sun Jan 12 18:11:14 2014 +0100
+
+ aubio 3+4 compat
+
+diff --git libs/vamp-plugins/Onset.cpp libs/vamp-plugins/Onset.cpp
+index d475b11..196ca29 100644
+--- libs/vamp-plugins/Onset.cpp
++++ libs/vamp-plugins/Onset.cpp
+@@ -22,29 +22,51 @@ using std::vector;
+ using std::cerr;
+ using std::endl;
+
++#ifdef HAVE_AUBIO4
++const char *getAubioNameForOnsetType(OnsetType t)
++{
++ // In the same order as the enum elements in the header
++ static const char *const names[] = {
++ "energy", "specdiff", "hfc", "complex", "phase", "kl", "mkl", "specflux"
++ };
++ return names[(int)t];
++}
++#endif
++
+ Onset::Onset(float inputSampleRate) :
+ Plugin(inputSampleRate),
+ m_ibuf(0),
+- m_fftgrain(0),
+ m_onset(0),
++#ifdef HAVE_AUBIO4
++ m_onsetdet(0),
++ m_onsettype(OnsetComplex),
++ m_minioi(4),
++ m_silence(-70),
++#else
++ m_fftgrain(0),
+ m_pv(0),
+ m_peakpick(0),
+ m_onsetdet(0),
+ m_onsettype(aubio_onset_complex),
+- m_threshold(0.3),
++ m_channelCount(1),
+ m_silence(-90),
+- m_channelCount(1)
++#endif
++ m_threshold(0.3)
+ {
+ }
+
+ Onset::~Onset()
+ {
++#ifdef HAVE_AUBIO4
++ if (m_onsetdet) del_aubio_onset(m_onsetdet);
++#else
+ if (m_onsetdet) aubio_onsetdetection_free(m_onsetdet);
+- if (m_ibuf) del_fvec(m_ibuf);
+- if (m_onset) del_fvec(m_onset);
+ if (m_fftgrain) del_cvec(m_fftgrain);
+ if (m_pv) del_aubio_pvoc(m_pv);
+ if (m_peakpick) del_aubio_peakpicker(m_peakpick);
++#endif
++ if (m_ibuf) del_fvec(m_ibuf);
++ if (m_onset) del_fvec(m_onset);
+ }
+
+ string
+@@ -74,7 +96,11 @@ Onset::getMaker() const
+ int
+ Onset::getPluginVersion() const
+ {
++#ifdef HAVE_AUBIO4
++ return 2;
++#else
+ return 1;
++#endif
+ }
+
+ string
+@@ -86,10 +112,20 @@ Onset::getCopyright() const
+ bool
+ Onset::initialise(size_t channels, size_t stepSize, size_t blockSize)
+ {
+- m_channelCount = channels;
+ m_stepSize = stepSize;
+ m_blockSize = blockSize;
+
++#ifdef HAVE_AUBIO4
++ if (channels != 1) {
++ std::cerr << "Onset::initialise: channels must be 1" << std::endl;
++ return false;
++ }
++ m_ibuf = new_fvec(stepSize);
++ m_onset = new_fvec(1);
++ reset();
++#else
++ m_channelCount = channels;
++
+ m_ibuf = new_fvec(stepSize, channels);
+ m_onset = new_fvec(1, channels);
+ m_fftgrain = new_cvec(blockSize, channels);
+@@ -103,13 +139,32 @@ Onset::initialise(size_t channels, size_t stepSize, size_t blockSize)
+
+ m_lastOnset = Vamp::RealTime::zeroTime - m_delay - m_delay;
+
++#endif
+ return true;
+ }
+
++#ifdef HAVE_AUBIO4
+ void
+ Onset::reset()
+ {
++ if (m_onsetdet) del_aubio_onset(m_onsetdet);
++
++ m_onsetdet = new_aubio_onset
++ (const_cast<char *>(getAubioNameForOnsetType(m_onsettype)),
++ m_blockSize,
++ m_stepSize,
++ lrintf(m_inputSampleRate));
++
++ aubio_onset_set_threshold(m_onsetdet, m_threshold);
++ aubio_onset_set_silence(m_onsetdet, m_silence);
++ aubio_onset_set_minioi(m_onsetdet, m_minioi);
++
++ m_delay = Vamp::RealTime::frame2RealTime(4 * m_stepSize,
++ lrintf(m_inputSampleRate));
++
++ m_lastOnset = Vamp::RealTime::zeroTime - m_delay - m_delay;
+ }
++#endif
+
+ size_t
+ Onset::getPreferredStepSize() const
+@@ -132,8 +187,13 @@ Onset::getParameterDescriptors() const
+ desc.identifier = "onsettype";
+ desc.name = "Onset Detection Function Type";
+ desc.minValue = 0;
++#ifdef HAVE_AUBIO4
++ desc.maxValue = 7;
++ desc.defaultValue = (int)OnsetComplex;
++#else
+ desc.maxValue = 6;
+ desc.defaultValue = (int)aubio_onset_complex;
++#endif
+ desc.isQuantized = true;
+ desc.quantizeStep = 1;
+ desc.valueNames.push_back("Energy Based");
+@@ -143,6 +203,9 @@ Onset::getParameterDescriptors() const
+ desc.valueNames.push_back("Phase Deviation");
+ desc.valueNames.push_back("Kullback-Liebler");
+ desc.valueNames.push_back("Modified Kullback-Liebler");
++#ifdef HAVE_AUBIO4
++ desc.valueNames.push_back("Spectral Flux");
++#endif
+ list.push_back(desc);
+
+ desc = ParameterDescriptor();
+@@ -159,11 +222,27 @@ Onset::getParameterDescriptors() const
+ desc.name = "Silence Threshold";
+ desc.minValue = -120;
+ desc.maxValue = 0;
++#ifdef HAVE_AUBIO4
++ desc.defaultValue = -70;
++#else
+ desc.defaultValue = -90;
++#endif
+ desc.unit = "dB";
+ desc.isQuantized = false;
+ list.push_back(desc);
+
++#ifdef HAVE_AUBIO4
++ desc = ParameterDescriptor();
++ desc.identifier = "minioi";
++ desc.name = "Minimum Inter-Onset Interval";
++ desc.minValue = 0;
++ desc.maxValue = 40;
++ desc.defaultValue = 4;
++ desc.unit = "ms";
++ desc.isQuantized = true;
++ desc.quantizeStep = 1;
++ list.push_back(desc);
++#endif
+ return list;
+ }
+
+@@ -176,6 +255,10 @@ Onset::getParameter(std::string param) const
+ return m_threshold;
+ } else if (param == "silencethreshold") {
+ return m_silence;
++#ifdef HAVE_AUBIO4
++ } else if (param == "minioi") {
++ return m_minioi;
++#endif
+ } else {
+ return 0.0;
+ }
+@@ -186,6 +269,16 @@ Onset::setParameter(std::string param, float value)
+ {
+ if (param == "onsettype") {
+ switch (lrintf(value)) {
++#ifdef HAVE_AUBIO4
++ case 0: m_onsettype = OnsetEnergy; break;
++ case 1: m_onsettype = OnsetSpecDiff; break;
++ case 2: m_onsettype = OnsetHFC; break;
++ case 3: m_onsettype = OnsetComplex; break;
++ case 4: m_onsettype = OnsetPhase; break;
++ case 5: m_onsettype = OnsetKL; break;
++ case 6: m_onsettype = OnsetMKL; break;
++ case 7: m_onsettype = OnsetSpecFlux; break;
++#else
+ case 0: m_onsettype = aubio_onset_energy; break;
+ case 1: m_onsettype = aubio_onset_specdiff; break;
+ case 2: m_onsettype = aubio_onset_hfc; break;
+@@ -193,11 +286,16 @@ Onset::setParameter(std::string param, float value)
+ case 4: m_onsettype = aubio_onset_phase; break;
+ case 5: m_onsettype = aubio_onset_kl; break;
+ case 6: m_onsettype = aubio_onset_mkl; break;
++#endif
+ }
+ } else if (param == "peakpickthreshold") {
+ m_threshold = value;
+ } else if (param == "silencethreshold") {
+ m_silence = value;
++#ifdef HAVE_AUBIO4
++ } else if (param == "minioi") {
++ m_minioi = value;
++#endif
+ }
+ }
+
+@@ -216,6 +314,7 @@ Onset::getOutputDescriptors() const
+ d.sampleRate = 0;
+ list.push_back(d);
+
++#ifndef HAVE_AUBIO4
+ d = OutputDescriptor();
+ d.identifier = "detectionfunction";
+ d.name = "Onset Detection Function";
+@@ -226,7 +325,7 @@ Onset::getOutputDescriptors() const
+ d.isQuantized = false;
+ d.sampleType = OutputDescriptor::OneSamplePerStep;
+ list.push_back(d);
+-
++#endif
+ return list;
+ }
+
+@@ -234,6 +333,15 @@ Onset::FeatureSet
+ Onset::process(const float *const *inputBuffers,
+ Vamp::RealTime timestamp)
+ {
++#ifdef HAVE_AUBIO4
++ for (size_t i = 0; i < m_stepSize; ++i) {
++ fvec_set_sample(m_ibuf, inputBuffers[0][i], i);
++ }
++
++ aubio_onset_do(m_onsetdet, m_ibuf, m_onset);
++
++ bool isonset = m_onset->data[0];
++#else
+ for (size_t i = 0; i < m_stepSize; ++i) {
+ for (size_t j = 0; j < m_channelCount; ++j) {
+ fvec_write_sample(m_ibuf, inputBuffers[j][i], j, i);
+@@ -250,6 +358,7 @@ Onset::process(const float *const *inputBuffers,
+ isonset = false;
+ }
+ }
++#endif
+
+ FeatureSet returnFeatures;
+
+@@ -263,11 +372,13 @@ Onset::process(const float *const *inputBuffers,
+ m_lastOnset = timestamp;
+ }
+ }
++#ifndef HAVE_AUBIO4
+ Feature feature;
+ for (size_t j = 0; j < m_channelCount; ++j) {
+ feature.values.push_back(m_onset->data[j][0]);
+ }
+ returnFeatures[1].push_back(feature);
++#endif
+
+ return returnFeatures;
+ }
+diff --git libs/vamp-plugins/Onset.h libs/vamp-plugins/Onset.h
+index 314e107..bba95e0 100644
+--- libs/vamp-plugins/Onset.h
++++ libs/vamp-plugins/Onset.h
+@@ -20,6 +20,19 @@
+ #include <vamp-sdk/Plugin.h>
+ #include <aubio/aubio.h>
+
++#ifdef HAVE_AUBIO4
++enum OnsetType {
++ OnsetEnergy,
++ OnsetSpecDiff,
++ OnsetHFC,
++ OnsetComplex,
++ OnsetPhase,
++ OnsetKL,
++ OnsetMKL,
++ OnsetSpecFlux // new in 0.4!
++};
++#endif
++
+ class Onset : public Vamp::Plugin
+ {
+ public:
+@@ -54,20 +67,25 @@ public:
+
+ protected:
+ fvec_t *m_ibuf;
+- cvec_t *m_fftgrain;
+ fvec_t *m_onset;
++#ifdef HAVE_AUBIO4
++ aubio_onset_t *m_onsetdet;
++ OnsetType m_onsettype;
++ float m_minioi;
++#else
++ cvec_t *m_fftgrain;
+ aubio_pvoc_t *m_pv;
+ aubio_pickpeak_t *m_peakpick;
+ aubio_onsetdetection_t *m_onsetdet;
+ aubio_onsetdetection_type m_onsettype;
+- float m_threshold;
++ size_t m_channelCount;
++#endif
+ float m_silence;
++ float m_threshold;
+ size_t m_stepSize;
+ size_t m_blockSize;
+- size_t m_channelCount;
+ Vamp::RealTime m_delay;
+ Vamp::RealTime m_lastOnset;
+ };
+
+-
+ #endif
diff --git a/audio/ardour/files/patch-boost-1.52 b/audio/ardour/files/patch-boost-1.52
new file mode 100644
index 000000000000..ac9bbf034896
--- /dev/null
+++ b/audio/ardour/files/patch-boost-1.52
@@ -0,0 +1,13 @@
+--- SConstruct.orig 2012-11-21 00:30:54.000000000 +0100
++++ SConstruct 2012-11-21 17:34:02.000000000 +0100
+@@ -955,7 +961,9 @@
+ # FLAC ....
+ #
+
+-# boost (we don't link against boost, just use some header files)
++# boost (we need to link against boost with >=1.50. header files alone will not work anymore)
++
++env.Append(LIBS=['boost_system'])
+
+ libraries['boost'] = LibraryInfo ()
+ prep_libcheck(env, libraries['boost'])
diff --git a/audio/ardour/files/patch-gtk2__ardour_automation__selectable.h b/audio/ardour/files/patch-gtk2__ardour_automation__selectable.h
new file mode 100644
index 000000000000..3ea4c8fd6841
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2__ardour_automation__selectable.h
@@ -0,0 +1,11 @@
+--- gtk2_ardour/automation_selectable.h.orig 2009-02-24 12:37:42 UTC
++++ gtk2_ardour/automation_selectable.h
+@@ -36,7 +36,7 @@ struct AutomationSelectable : public Sel
+ AutomationSelectable (nframes_t s, nframes_t e, double l, double h, TimeAxisView& atv)
+ : start (s), end (e), low_fract (l), high_fract (h), track (atv) {}
+
+- bool operator== (const AutomationSelectable& other) {
++ bool operator== (const AutomationSelectable& other) const {
+ return start == other.start &&
+ end == other.end &&
+ low_fract == other.low_fract &&
diff --git a/audio/ardour/files/patch-gtk2__ardour_editor.cc b/audio/ardour/files/patch-gtk2__ardour_editor.cc
new file mode 100644
index 000000000000..30199e4a91d5
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2__ardour_editor.cc
@@ -0,0 +1,33 @@
+--- gtk2_ardour/editor.cc.orig 2012-03-16 14:33:28 UTC
++++ gtk2_ardour/editor.cc
+@@ -803,16 +803,16 @@ Editor::Editor ()
+ list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+ Glib::RefPtr<Gdk::Pixbuf> icon;
+
+- if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_16px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_22px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_32px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_48px"))) {
+ window_icons.push_back (icon);
+ }
+ if (!window_icons.empty()) {
+@@ -1862,8 +1862,7 @@ Editor::add_region_context_items (AudioStreamView* sv,
+ become selected.
+ */
+
+- region_menu->signal_map_event().connect (
+- bind (
++ region_menu->signal_map_event().connect ( bind (
+ mem_fun(*this, &Editor::set_selected_regionview_from_map_event),
+ sv,
+ boost::weak_ptr<Region>(region)
diff --git a/audio/ardour/files/patch-gtk2__ardour_editor__keyboard.cc b/audio/ardour/files/patch-gtk2__ardour_editor__keyboard.cc
new file mode 100644
index 000000000000..6421cd34304c
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2__ardour_editor__keyboard.cc
@@ -0,0 +1,14 @@
+--- gtk2_ardour/editor_keyboard.cc.orig 2009-03-02 21:07:08 UTC
++++ gtk2_ardour/editor_keyboard.cc
+@@ -42,9 +42,9 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot
+ Glib::RefPtr<Gdk::Window> evw = track_canvas->get_window()->get_pointer (x, y, mask);
+ bool doit = false;
+
+- if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) {
++ if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask)) {
+ doit = true;
+- } else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)!= 0) {
++ } else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)) {
+ doit = true;
+ }
+
diff --git a/audio/ardour/files/patch-gtk2__ardour_gain__meter.cc b/audio/ardour/files/patch-gtk2__ardour_gain__meter.cc
new file mode 100644
index 000000000000..7bb7bfaf1932
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2__ardour_gain__meter.cc
@@ -0,0 +1,25 @@
+--- gtk2_ardour/gain_meter.cc.orig 2010-04-20 17:28:37 UTC
++++ gtk2_ardour/gain_meter.cc
+@@ -63,7 +63,7 @@ Glib::RefPtr<Gdk::Pixbuf> GainMeter::slider;
+ void
+ GainMeter::setup_slider_pix ()
+ {
+- if ((slider = ::get_icon ("fader_belt")) == 0) {
++ if (!(slider = ::get_icon ("fader_belt"))) {
+ throw failed_constructor();
+ }
+ }
+@@ -89,11 +89,11 @@ GainMeterBase::GainMeterBase (Session& s,
+ if (horizontal) {
+ gain_slider = manage (new HSliderController (pix,
+ &gain_adjustment,
+- false));
++ 0x0));
+ } else {
+ gain_slider = manage (new VSliderController (pix,
+ &gain_adjustment,
+- false));
++ 0x0));
+ }
+
+ level_meter = new LevelMeter(_session);
diff --git a/audio/ardour/files/patch-gtk2__ardour_route__time__axis.cc b/audio/ardour/files/patch-gtk2__ardour_route__time__axis.cc
new file mode 100644
index 000000000000..184729941744
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2__ardour_route__time__axis.cc
@@ -0,0 +1,11 @@
+--- gtk2_ardour/route_time_axis.cc.orig 2010-04-17 15:23:01 UTC
++++ gtk2_ardour/route_time_axis.cc
+@@ -89,7 +89,7 @@ Glib::RefPtr<Gdk::Pixbuf> RouteTimeAxisView::slider;
+ void
+ RouteTimeAxisView::setup_slider_pix ()
+ {
+- if ((slider = ::get_icon ("fader_belt_h")) == 0) {
++ if (!(slider = ::get_icon ("fader_belt_h"))) {
+ throw failed_constructor ();
+ }
+ }
diff --git a/audio/ardour/files/patch-gtk2_ardour-SConscript b/audio/ardour/files/patch-gtk2_ardour-SConscript
new file mode 100644
index 000000000000..bc50d2a9b3d4
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-SConscript
@@ -0,0 +1,14 @@
+--- gtk2_ardour/SConscript.orig
++++ gtk2_ardour/SConscript
+@@ -411,9 +411,9 @@ for style in ['', 'BOLD', 'ITALIC']:
+ #
+
+ if env['GTKOSX']:
+- ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P -DGTKOSX -DTOP_MENUBAR ardour.menus.in ardour.menus", chdir=1)
++ ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P -DGTKOSX -DTOP_MENUBAR -o ardour.menus ardour.menus.in", chdir=1)
+ else:
+- ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P ardour.menus.in ardour.menus", chdir=1)
++ ardour_menus = env.Command ('ardour.menus', 'ardour.menus.in', "cpp -E -P -o ardour.menus ardour.menus.in", chdir=1)
+
+ ardour_dark_theme = env.SubstInFile ('ardour2_ui_dark.rc', 'ardour2_ui_dark.rc.in', SUBST_DICT = my_font_dict)
+ ardour_light_theme = env.SubstInFile ('ardour2_ui_light.rc', 'ardour2_ui_light.rc.in', SUBST_DICT = my_font_dict)
diff --git a/audio/ardour/files/patch-gtk2_ardour-ardour_ui.cc b/audio/ardour/files/patch-gtk2_ardour-ardour_ui.cc
new file mode 100644
index 000000000000..92429db29fe2
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-ardour_ui.cc
@@ -0,0 +1,51 @@
+--- gtk2_ardour/ardour_ui.cc.orig
++++ gtk2_ardour/ardour_ui.cc
+@@ -31,6 +31,8 @@
+ #include <iostream>
+
+ #include <sys/resource.h>
++#include <sys/types.h>
++#include <sys/sysctl.h>
+
+ #include <gtkmm/messagedialog.h>
+ #include <gtkmm/accelmap.h>
+@@ -696,8 +698,11 @@ ARDOUR_UI::check_memory_locking ()
+ struct rlimit limits;
+ int64_t ram;
+ long pages, page_size;
++ size_t pages_len=sizeof(pages);
++
++ if ((page_size = getpagesize()) < 0 ||
++ sysctlbyname("hw.availpages", &pages, &pages_len, NULL, 0)) {
+
+- if ((page_size = sysconf (_SC_PAGESIZE)) < 0 ||(pages = sysconf (_SC_PHYS_PAGES)) < 0) {
+ ram = 0;
+ } else {
+ ram = (int64_t) pages * (int64_t) page_size;
+@@ -716,7 +721,7 @@ ARDOUR_UI::check_memory_locking ()
+ "This might cause %1 to run out of memory before your system "
+ "runs out of memory. \n\n"
+ "You can view the memory limit with 'ulimit -l', "
+- "and it is normally controlled by /etc/security/limits.conf"), PROGRAM_NAME));
++ "and it is normally controlled by /etc/login.conf"), PROGRAM_NAME));
+
+ VBox* vbox = msg.get_vbox();
+ HBox hbox;
+@@ -1964,7 +1969,7 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine,
+
+ const char **connections = io.input(0)->get_connections();
+
+- if (connections == 0 || connections[0] == '\0') {
++ if (connections == 0 || *connections[0] == '\0') {
+ buf = _("off");
+ } else {
+ buf = connections[0];
+@@ -1983,7 +1988,7 @@ ARDOUR_UI::name_io_setup (AudioEngine& engine,
+
+ const char **connections = io.output(0)->get_connections();
+
+- if (connections == 0 || connections[0] == '\0') {
++ if (connections == 0 || *connections[0] == '\0') {
+ buf = _("off");
+ } else {
+ buf = connections[0];
diff --git a/audio/ardour/files/patch-gtk2_ardour-connection_editor.cc b/audio/ardour/files/patch-gtk2_ardour-connection_editor.cc
new file mode 100644
index 000000000000..ef5ee05e01e8
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-connection_editor.cc
@@ -0,0 +1,23 @@
+--- gtk2_ardour/connection_editor.cc.orig
++++ gtk2_ardour/connection_editor.cc
+@@ -502,9 +502,9 @@ ConnectionEditor::display_connection_sta
+ frame_label += _("\"");
+ port_frame.set_label (frame_label);
+
+- for (slist<ScrolledWindow *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
++ for (boost::container::slist<ScrolledWindow *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
+
+- slist<ScrolledWindow *>::iterator tmp;
++ boost::container::slist<ScrolledWindow *>::iterator tmp;
+
+ tmp = i;
+ tmp++;
+@@ -612,7 +612,7 @@ ConnectionEditor::connection_port_button
+
+ tview->set_name ("ConnectionEditorPortListSelected");
+
+- for (slist<ScrolledWindow *>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
++ for (boost::container::slist<ScrolledWindow *>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
+
+ Widget *child = (*i)->get_child();
+
diff --git a/audio/ardour/files/patch-gtk2_ardour-connection_editor.h b/audio/ardour/files/patch-gtk2_ardour-connection_editor.h
new file mode 100644
index 000000000000..e27a2add3c35
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-connection_editor.h
@@ -0,0 +1,25 @@
+--- gtk2_ardour/connection_editor.h.orig
++++ gtk2_ardour/connection_editor.h
+@@ -20,12 +20,7 @@
+ #ifndef __ardour_gtk_connection_editor_h__
+ #define __ardour_gtk_connection_editor_h__
+
+-#if __GNUC__ >= 3
+-#include <ext/slist>
+-using __gnu_cxx::slist;
+-#else
+-#include <slist.h>
+-#endif
++#include <boost/container/slist.hpp>
+
+ #include <gtkmm/box.h>
+ #include <gtkmm/window.h>
+@@ -116,7 +111,7 @@ class ConnectionEditor : public ArdourDi
+ Gtk::Button add_port_button;
+
+ Glib::Mutex port_display_lock;
+- slist<Gtk::ScrolledWindow *> port_displays;
++ boost::container::slist<Gtk::ScrolledWindow *> port_displays;
+
+ Gtk::Button ok_button;
+ Gtk::Button cancel_button;
diff --git a/audio/ardour/files/patch-gtk2_ardour-engine_dialog.cc b/audio/ardour/files/patch-gtk2_ardour-engine_dialog.cc
new file mode 100644
index 000000000000..48de52f7dc33
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-engine_dialog.cc
@@ -0,0 +1,121 @@
+--- gtk2_ardour/engine_dialog.cc.orig 2008-04-09 23:17:02.000000000 +0200
++++ gtk2_ardour/engine_dialog.cc 2008-04-10 18:53:32.000000000 +0200
+@@ -12,7 +12,7 @@
+ #include <CoreFoundation/CFString.h>
+ #include <sys/param.h>
+ #include <mach-o/dyld.h>
+-#else
++#elif !defined(__FreeBSD__)
+ #include <alsa/asoundlib.h>
+ #endif
+
+@@ -113,7 +113,9 @@
+ #ifdef __APPLE__
+ strings.push_back (X_("CoreAudio"));
+ #else
++#ifndef __FreeBSD__
+ strings.push_back (X_("ALSA"));
++#endif
+ strings.push_back (X_("OSS"));
+ strings.push_back (X_("FFADO"));
+ #endif
+@@ -158,7 +160,7 @@
+ basic_packer.attach (period_size_combo, 1, 2, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+ row++;
+
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ label = manage (new Label (_("Number of buffers")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+ basic_packer.attach (periods_spinner, 1, 2, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+@@ -179,7 +181,7 @@
+ row++;
+ /* no audio mode with CoreAudio, its duplex or nuthin' */
+
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ label = manage (new Label (_("Audio Mode")));
+ basic_packer.attach (*label, 0, 1, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+ basic_packer.attach (audio_mode_combo, 1, 2, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+@@ -218,7 +220,7 @@
+ realtime_button.signal_toggled().connect (mem_fun (*this, &EngineControl::realtime_changed));
+ realtime_changed ();
+
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ label = manage (new Label (_("Realtime Priority")));
+ label->set_alignment (1.0, 0.5);
+ options_packer.attach (*label, 0, 1, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+@@ -268,7 +270,7 @@
+ options_packer.attach (*label, 0, 1, row, row + 1, FILL|EXPAND, (AttachOptions) 0);
+ ++row;
+
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ label = manage (new Label (_("Dither")));
+ label->set_alignment (1.0, 0.5);
+ options_packer.attach (dither_mode_combo, 1, 2, row, row + 1, FILL|EXPAND, AttachOptions(0));
+@@ -299,7 +301,7 @@
+ device_packer.set_spacings (6);
+ row = 0;
+
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ label = manage (new Label (_("Input device")));
+ label->set_alignment (1.0, 0.5);
+ device_packer.attach (*label, 0, 1, row, row+1, FILL|EXPAND, (AttachOptions) 0);
+@@ -570,7 +572,7 @@
+ void
+ EngineControl::realtime_changed ()
+ {
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ priority_spinner.set_sensitive (realtime_button.get_active());
+ #endif
+ }
+@@ -586,8 +588,10 @@
+ #endif
+
+ #ifndef __APPLE__
++#ifndef __FreeBSD__
+ } else if (driver == "ALSA") {
+ devices[driver] = enumerate_alsa_devices ();
++#endif
+ } else if (driver == "FFADO") {
+ devices[driver] = enumerate_ffado_devices ();
+ } else if (driver == "OSS") {
+@@ -714,6 +718,7 @@
+ return devs;
+ }
+ #else
++#ifndef __FreeBSD__
+ vector<string>
+ EngineControl::enumerate_alsa_devices ()
+ {
+@@ -774,6 +779,7 @@
+
+ return devs;
+ }
++#endif
+
+ vector<string>
+ EngineControl::enumerate_ffado_devices ()
+@@ -816,7 +822,9 @@
+ vector<string>& strings = devices[driver];
+
+ if (strings.empty() && driver != "FFADO" && driver != "Dummy") {
++#if 0
+ error << string_compose (_("No devices found for driver \"%1\""), driver) << endmsg;
++#endif
+ return;
+ }
+
+@@ -862,7 +870,7 @@
+ EngineControl::redisplay_latency ()
+ {
+ uint32_t rate = get_rate();
+-#ifdef __APPLE_
++#if defined(__APPLE_) || defined(__FreeBSD__)
+ float periods = 2;
+ #else
+ float periods = periods_adjustment.get_value();
diff --git a/audio/ardour/files/patch-gtk2_ardour-io_selector.cc b/audio/ardour/files/patch-gtk2_ardour-io_selector.cc
new file mode 100644
index 000000000000..ae4681ad9c3f
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-io_selector.cc
@@ -0,0 +1,39 @@
+--- gtk2_ardour/io_selector.cc.orig
++++ gtk2_ardour/io_selector.cc
+@@ -389,9 +389,9 @@ IOSelector::display_ports ()
+ limit = io->n_outputs();
+ }
+
+- for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
++ for (boost::container::slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
+
+- slist<TreeView *>::iterator tmp;
++ boost::container::slist<TreeView *>::iterator tmp;
+
+ tmp = i;
+ ++tmp;
+@@ -632,13 +632,13 @@ IOSelector::connection_button_release (G
+ void
+ IOSelector::select_next_treeview ()
+ {
+- slist<TreeView*>::iterator next;
++ boost::container::slist<TreeView*>::iterator next;
+
+ if (port_displays.empty() || port_displays.size() == 1) {
+ return;
+ }
+
+- for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
++ for (boost::container::slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
+
+ if ((*i)->get_name() == "IOSelectorPortListSelected") {
+
+@@ -681,7 +681,7 @@ IOSelector::select_treeview (TreeView* t
+ gtk_widget_queue_draw (ccol->button);
+ }
+
+- for (slist<TreeView*>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
++ for (boost::container::slist<TreeView*>::iterator i = port_displays.begin(); i != port_displays.end(); ++i) {
+ if (*i == tview) {
+ continue;
+ }
diff --git a/audio/ardour/files/patch-gtk2_ardour-io_selector.h b/audio/ardour/files/patch-gtk2_ardour-io_selector.h
new file mode 100644
index 000000000000..37f4ec456b9e
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-io_selector.h
@@ -0,0 +1,25 @@
+--- gtk2_ardour/io_selector.h.orig
++++ gtk2_ardour/io_selector.h
+@@ -20,12 +20,7 @@
+ #ifndef __ardour_ui_io_selector_h__
+ #define __ardour_ui_io_selector_h__
+
+-#if __GNUC__ >= 3
+-#include <ext/slist>
+-using __gnu_cxx::slist;
+-#else
+-#include <slist.h>
+-#endif
++#include <boost/container/slist.hpp>
+
+ #include <string>
+
+@@ -110,7 +105,7 @@ class IOSelector : public Gtk::VBox {
+ Gtk::ScrolledWindow port_display_scroller;
+
+ Glib::Mutex port_display_lock;
+- slist<Gtk::TreeView *> port_displays;
++ boost::container::slist<Gtk::TreeView *> port_displays;
+ void display_ports ();
+
+ void rescan ();
diff --git a/audio/ardour/files/patch-gtk2_ardour-new_session_dialog.cc b/audio/ardour/files/patch-gtk2_ardour-new_session_dialog.cc
new file mode 100644
index 000000000000..bde1ed1ed1b5
--- /dev/null
+++ b/audio/ardour/files/patch-gtk2_ardour-new_session_dialog.cc
@@ -0,0 +1,32 @@
+--- gtk2_ardour/new_session_dialog.cc.orig 2008-01-14 10:04:17.000000000 +0100
++++ gtk2_ardour/new_session_dialog.cc 2008-01-14 10:04:44.000000000 +0100
+@@ -361,16 +361,16 @@ NewSessionDialog::NewSessionDialog()
+ list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
+ Glib::RefPtr<Gdk::Pixbuf> icon;
+
+- if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_16px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_22px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_32px"))) {
+ window_icons.push_back (icon);
+ }
+- if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
++ if ((icon = ::get_icon ("ardour_icon_48px"))) {
+ window_icons.push_back (icon);
+ }
+ if (!window_icons.empty()) {
+@@ -589,7 +589,7 @@ NewSessionDialog::set_session_folder(const std::string
+ */
+
+
+-#ifdef __APPLE__
++#ifndef __Linux__
+
+ char buf[PATH_MAX];
+
diff --git a/audio/ardour/files/patch-libs-ardour-ardour-io.h b/audio/ardour/files/patch-libs-ardour-ardour-io.h
new file mode 100644
index 000000000000..46a5278b8483
--- /dev/null
+++ b/audio/ardour/files/patch-libs-ardour-ardour-io.h
@@ -0,0 +1,13 @@
+--- libs/ardour/ardour/io.h.orig
++++ libs/ardour/ardour/io.h
+@@ -288,6 +288,10 @@ class IO : public PBD::StatefulDestructi
+ XMLNode *pending_state_node;
+ int ports_became_legal ();
+
++ static bool connecting_is_legal() {
++ return connecting_legal;
++ }
++
+ private:
+ mutable Glib::Mutex io_lock;
+
diff --git a/audio/ardour/files/patch-libs-ardour-session.cc b/audio/ardour/files/patch-libs-ardour-session.cc
new file mode 100644
index 000000000000..c676a43c79bb
--- /dev/null
+++ b/audio/ardour/files/patch-libs-ardour-session.cc
@@ -0,0 +1,368 @@
+--- libs/ardour/session.cc.orig
++++ libs/ardour/session.cc
+@@ -79,7 +79,6 @@
+ using namespace std;
+ using namespace ARDOUR;
+ using namespace PBD;
+-using boost::shared_ptr;
+
+ #ifdef __x86_64__
+ static const int CPU_CACHE_ALIGN = 64;
+@@ -399,14 +398,14 @@ Session::Session (AudioEngine &eng,
+ int control_id = 1;
+
+ if (control_out_channels) {
+- shared_ptr<Route> r (new Route (*this, _("monitor"), -1, control_out_channels, -1, control_out_channels, Route::ControlOut));
++ boost::shared_ptr<Route> r (new Route (*this, _("monitor"), -1, control_out_channels, -1, control_out_channels, Route::ControlOut));
+ r->set_remote_control_id (control_id++);
+
+ rl.push_back (r);
+ }
+
+ if (master_out_channels) {
+- shared_ptr<Route> r (new Route (*this, _("master"), -1, master_out_channels, -1, master_out_channels, Route::MasterOut));
++ boost::shared_ptr<Route> r (new Route (*this, _("master"), -1, master_out_channels, -1, master_out_channels, Route::MasterOut));
+ r->set_remote_control_id (control_id);
+
+ rl.push_back (r);
+@@ -984,8 +983,8 @@ Session::hookup_io ()
+ boost::shared_ptr<Session::RouteList>
+ Session::get_routes_with_regions_at (nframes64_t const p) const
+ {
+- shared_ptr<RouteList> r = routes.reader ();
+- shared_ptr<RouteList> rl (new RouteList);
++ boost::shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> rl (new RouteList);
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
+@@ -1590,9 +1589,9 @@ struct RouteSorter {
+ };
+
+ static void
+-trace_terminal (shared_ptr<Route> r1, shared_ptr<Route> rbase)
++trace_terminal (boost::shared_ptr<Route> r1, boost::shared_ptr<Route> rbase)
+ {
+- shared_ptr<Route> r2;
++ boost::shared_ptr<Route> r2;
+
+ if ((r1->fed_by.find (rbase) != r1->fed_by.end()) && (rbase->fed_by.find (r1) != rbase->fed_by.end())) {
+ info << string_compose(_("feedback loop setup between %1 and %2"), r1->name(), rbase->name()) << endmsg;
+@@ -1601,13 +1600,13 @@ trace_terminal (shared_ptr<Route> r1, sh
+
+ /* make a copy of the existing list of routes that feed r1 */
+
+- set<shared_ptr<Route> > existing = r1->fed_by;
++ set<boost::shared_ptr<Route> > existing = r1->fed_by;
+
+ /* for each route that feeds r1, recurse, marking it as feeding
+ rbase as well.
+ */
+
+- for (set<shared_ptr<Route> >::iterator i = existing.begin(); i != existing.end(); ++i) {
++ for (set<boost::shared_ptr<Route> >::iterator i = existing.begin(); i != existing.end(); ++i) {
+ r2 =* i;
+
+ /* r2 is a route that feeds r1 which somehow feeds base. mark
+@@ -1651,14 +1650,14 @@ Session::resort_routes ()
+ {
+
+ RCUWriter<RouteList> writer (routes);
+- shared_ptr<RouteList> r = writer.get_copy ();
++ boost::shared_ptr<RouteList> r = writer.get_copy ();
+ resort_routes_using (r);
+ /* writer goes out of scope and forces update */
+ }
+ }
+
+ void
+-Session::resort_routes_using (shared_ptr<RouteList> r)
++Session::resort_routes_using (boost::shared_ptr<RouteList> r)
+ {
+ RouteList::iterator i, j;
+
+@@ -1723,7 +1722,7 @@ Session::new_audio_track (int input_chan
+ /* count existing audio tracks */
+
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if (dynamic_cast<AudioTrack*>((*i).get()) != 0) {
+@@ -1776,7 +1775,7 @@ Session::new_audio_track (int input_chan
+ nphysical_out = 0;
+ }
+
+- shared_ptr<AudioTrack> track;
++ boost::shared_ptr<AudioTrack> track;
+
+ try {
+ track = boost::shared_ptr<AudioTrack>((new AudioTrack (*this, track_name, Route::Flag (0), mode)));
+@@ -1884,7 +1883,7 @@ Session::set_remote_control_ids ()
+ {
+ RemoteModel m = Config->get_remote_model();
+
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ( MixerOrdered == m) {
+@@ -1913,7 +1912,7 @@ Session::new_audio_route (int input_chan
+ /* count existing audio busses */
+
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if (dynamic_cast<AudioTrack*>((*i).get()) == 0) {
+@@ -1945,7 +1944,7 @@ Session::new_audio_route (int input_chan
+ } while (bus_id < (UINT_MAX-1));
+
+ try {
+- shared_ptr<Route> bus (new Route (*this, bus_name, -1, -1, -1, -1, Route::Flag(0), DataType::AUDIO));
++ boost::shared_ptr<Route> bus (new Route (*this, bus_name, -1, -1, -1, -1, Route::Flag(0), DataType::AUDIO));
+
+ if (bus->ensure_io (input_channels, output_channels, false, this)) {
+ error << string_compose (_("cannot configure %1 in/%2 out configuration for new audio track"),
+@@ -2060,7 +2059,7 @@ Session::new_route_from_template (uint32
+ Track::zero_diskstream_id_in_xml (node_copy);
+
+ try {
+- shared_ptr<Route> route (XMLRouteFactory (node_copy));
++ boost::shared_ptr<Route> route (XMLRouteFactory (node_copy));
+
+ if (route == 0) {
+ error << _("Session: cannot create track/bus from template description") << endmsg;
+@@ -2107,7 +2106,7 @@ boost::shared_ptr<Route>
+ Session::new_video_track (string name)
+ {
+ uint32_t control_id = ntracks() + nbusses() + 1;
+- shared_ptr<Route> new_route (
++ boost::shared_ptr<Route> new_route (
+ new Route ( *this, name, -1, -1, -1, -1, Route::Flag(0), ARDOUR::DataType::NIL));
+ new_route->set_remote_control_id (control_id);
+
+@@ -2115,7 +2114,7 @@ Session::new_video_track (string name)
+ rl.push_back (new_route);
+ {
+ RCUWriter<RouteList> writer (routes);
+- shared_ptr<RouteList> r = writer.get_copy ();
++ boost::shared_ptr<RouteList> r = writer.get_copy ();
+ r->insert (r->end(), rl.begin(), rl.end());
+ resort_routes_using (r);
+ }
+@@ -2127,7 +2126,7 @@ Session::add_routes (RouteList& new_rout
+ {
+ {
+ RCUWriter<RouteList> writer (routes);
+- shared_ptr<RouteList> r = writer.get_copy ();
++ boost::shared_ptr<RouteList> r = writer.get_copy ();
+ r->insert (r->end(), new_routes.begin(), new_routes.end());
+ resort_routes_using (r);
+ }
+@@ -2150,7 +2149,7 @@ Session::add_routes (RouteList& new_rout
+ }
+ }
+
+- if (_control_out && IO::connecting_legal) {
++ if (_control_out && IO::connecting_is_legal()) {
+
+ vector<string> cports;
+ uint32_t ni = _control_out->n_inputs();
+@@ -2198,14 +2197,14 @@ Session::add_diskstream (boost::shared_p
+ }
+
+ void
+-Session::remove_route (shared_ptr<Route> route)
++Session::remove_route (boost::shared_ptr<Route> route)
+ {
+ //clear solos before removing the route
+ route->set_solo ( false, this);
+
+ {
+ RCUWriter<RouteList> writer (routes);
+- shared_ptr<RouteList> rs = writer.get_copy ();
++ boost::shared_ptr<RouteList> rs = writer.get_copy ();
+
+ rs->remove (route);
+
+@@ -2215,11 +2214,11 @@ Session::remove_route (shared_ptr<Route>
+ */
+
+ if (route == _master_out) {
+- _master_out = shared_ptr<Route> ();
++ _master_out = boost::shared_ptr<Route> ();
+ }
+
+ if (route == _control_out) {
+- _control_out = shared_ptr<Route> ();
++ _control_out = boost::shared_ptr<Route> ();
+
+ /* cancel control outs for all routes */
+
+@@ -2308,7 +2307,7 @@ Session::route_solo_changed (void* src,
+
+ is_track = (boost::dynamic_pointer_cast<AudioTrack>(route) != 0);
+
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+
+@@ -2404,7 +2403,7 @@ Session::update_route_solo_state ()
+ the solo mute setting of each track.
+ */
+
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->soloed()) {
+@@ -2446,7 +2445,7 @@ Session::update_route_solo_state ()
+ void
+ Session::modify_solo_mute (bool is_track, bool mute)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+
+@@ -2511,7 +2510,7 @@ Session::catch_up_on_solo_mute_override
+ /* this is called whenever the param solo-mute-override is
+ changed.
+ */
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ (*i)->catch_up_on_solo_mute_override ();
+@@ -2521,7 +2520,7 @@ Session::catch_up_on_solo_mute_override
+ bool
+ Session::io_name_is_legal (const std::string& name)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->name() == name) {
+@@ -2536,10 +2535,10 @@ Session::io_name_is_legal (const std::st
+ return true;
+ }
+
+-shared_ptr<Route>
++boost::shared_ptr<Route>
+ Session::route_by_name (const std::string& name)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->name() == name) {
+@@ -2547,13 +2546,13 @@ Session::route_by_name (const std::strin
+ }
+ }
+
+- return shared_ptr<Route> ((Route*) 0);
++ return boost::shared_ptr<Route> ((Route*) 0);
+ }
+
+-shared_ptr<Route>
++boost::shared_ptr<Route>
+ Session::route_by_id (PBD::ID id)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->id() == id) {
+@@ -2561,13 +2560,13 @@ Session::route_by_id (PBD::ID id)
+ }
+ }
+
+- return shared_ptr<Route> ((Route*) 0);
++ return boost::shared_ptr<Route> ((Route*) 0);
+ }
+
+-shared_ptr<Route>
++boost::shared_ptr<Route>
+ Session::route_by_remote_id (uint32_t id)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->remote_control_id() == id) {
+@@ -2575,7 +2574,7 @@ Session::route_by_remote_id (uint32_t id
+ }
+ }
+
+- return shared_ptr<Route> ((Route*) 0);
++ return boost::shared_ptr<Route> ((Route*) 0);
+ }
+
+ void
+@@ -3595,7 +3594,7 @@ Session::is_auditioning () const
+ void
+ Session::set_all_solo (bool yn)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if (!(*i)->hidden()) {
+@@ -3609,7 +3608,7 @@ Session::set_all_solo (bool yn)
+ void
+ Session::set_all_mute (bool yn)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ if (!(*i)->hidden()) {
+@@ -3680,7 +3679,7 @@ Session::record_enable_all ()
+ void
+ Session::record_enable_change_all (bool yn)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+ AudioTrack* at;
+@@ -4071,7 +4070,7 @@ Session::reset_native_file_format ()
+ bool
+ Session::route_name_unique (string n) const
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
+ if ((*i)->name() == n) {
+@@ -4117,7 +4116,7 @@ Session::allocate_pan_automation_buffers
+ int
+ Session::freeze (InterThreadInfo& itt)
+ {
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
+
+@@ -4355,7 +4354,7 @@ uint32_t
+ Session::ntracks () const
+ {
+ uint32_t n = 0;
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
+ if (dynamic_cast<AudioTrack*> ((*i).get())) {
+@@ -4370,7 +4369,7 @@ uint32_t
+ Session::nbusses () const
+ {
+ uint32_t n = 0;
+- shared_ptr<RouteList> r = routes.reader ();
++ boost::shared_ptr<RouteList> r = routes.reader ();
+
+ for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
+ if (dynamic_cast<AudioTrack*> ((*i).get()) == 0) {
diff --git a/audio/ardour/files/patch-libs-fst-jackvst.h b/audio/ardour/files/patch-libs-fst-jackvst.h
new file mode 100644
index 000000000000..3ae7ebcb6719
--- /dev/null
+++ b/audio/ardour/files/patch-libs-fst-jackvst.h
@@ -0,0 +1,22 @@
+--- libs/fst/jackvst.h.orig Wed Aug 30 22:49:25 2006
++++ libs/fst/jackvst.h Sat Mar 24 16:58:18 2007
+@@ -6,7 +6,9 @@
+ #include <jack/jack.h>
+ #include <jack/ringbuffer.h>
+ #include <fst.h>
++#ifdef WITH_ALSA
+ #include <alsa/asoundlib.h>
++#endif
+
+ typedef struct _JackVST JackVST;
+
+@@ -26,7 +28,9 @@
+ /* For VST/i support */
+
+ pthread_t midi_thread;
++#ifdef WITH_ALSA
+ snd_seq_t* seq;
++#endif WITH_ALSA
+ int midiquit;
+ jack_ringbuffer_t* event_queue;
+ struct VstEvents* events;
diff --git a/audio/ardour/files/patch-libs-fst-vsti.c b/audio/ardour/files/patch-libs-fst-vsti.c
new file mode 100644
index 000000000000..36ea5e1c60ba
--- /dev/null
+++ b/audio/ardour/files/patch-libs-fst-vsti.c
@@ -0,0 +1,18 @@
+--- libs/fst/vsti.c.orig Sat Mar 24 16:56:58 2007
++++ libs/fst/vsti.c Sat Mar 24 16:59:07 2007
+@@ -32,6 +32,8 @@
+ #include <jackvst.h>
+ #include <vst/aeffectx.h>
+
++#ifdef WITH_ALSA
++
+ snd_seq_t *
+ create_sequencer (const char* client_name, bool isinput)
+ {
+@@ -177,5 +179,5 @@
+ snd_seq_close (jvst->seq);
+ }
+
+-
++#endif
+
diff --git a/audio/ardour/files/patch-libs-midi++2-SConscript b/audio/ardour/files/patch-libs-midi++2-SConscript
new file mode 100644
index 000000000000..37ca9c8ea3e0
--- /dev/null
+++ b/audio/ardour/files/patch-libs-midi++2-SConscript
@@ -0,0 +1,12 @@
+--- libs/midi++2/SConscript.orig Sun Nov 12 16:24:06 2006
++++ libs/midi++2/SConscript Wed Dec 6 00:49:53 2006
+@@ -39,8 +39,7 @@
+ midi2.Append (LINKFLAGS="-framework CoreMIDI")
+ midi2.Append (LINKFLAGS="-framework CoreFoundation")
+ else:
+- sysdep_src = [ 'alsa_sequencer_midiport.cc' ]
+- midi2.Append (CCFLAGS="-DWITH_ALSA")
++ sysdep_src = [ ]
+
+ midi2.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
+ midi2.Append(CCFLAGS="-DLIBSIGC_DISABLE_DEPRECATED")
diff --git a/audio/ardour/files/patch-libs-pbd-mountpoint.cc b/audio/ardour/files/patch-libs-pbd-mountpoint.cc
new file mode 100644
index 000000000000..7cadbb8cc4e3
--- /dev/null
+++ b/audio/ardour/files/patch-libs-pbd-mountpoint.cc
@@ -0,0 +1,11 @@
+--- libs/pbd/mountpoint.cc.orig
++++ libs/pbd/mountpoint.cc
+@@ -19,7 +19,7 @@
+ */
+
+ #include <cstdio>
+-#include <cstring>
++#include <cstdlib>
+ #include <string>
+ #include <cstring>
+ #include <limits.h>
diff --git a/audio/ardour/files/patch-libs-pbd-pbd-stl_delete.h b/audio/ardour/files/patch-libs-pbd-pbd-stl_delete.h
new file mode 100644
index 000000000000..e240ad907d0c
--- /dev/null
+++ b/audio/ardour/files/patch-libs-pbd-pbd-stl_delete.h
@@ -0,0 +1,20 @@
+--- libs/pbd/pbd/stl_delete.h.orig
++++ libs/pbd/pbd/stl_delete.h
+@@ -23,7 +23,7 @@
+ /* To actually use any of these deletion functions, you need to
+ first include the revelant container type header.
+ */
+-#if defined(_CPP_VECTOR) || defined(_GLIBCXX_VECTOR) || defined(__SGI_STL_VECTOR)
++#if defined(_LIBCPP_VECTOR) || defined(_GLIBCXX_VECTOR) || defined(__SGI_STL_VECTOR)
+ template<class T> void vector_delete (std::vector<T *> *vec)
+ {
+ typename std::vector<T *>::iterator i;
+@@ -33,7 +33,7 @@ template<class T> void vector_delete (st
+ }
+ vec->clear ();
+ }
+-#endif // _CPP_VECTOR || _GLIBCXX_VECTOR || __SGI_STL_VECTOR
++#endif // _LIBCPP_VECTOR || _GLIBCXX_VECTOR || __SGI_STL_VECTOR
+
+ #if defined(_CPP_MAP) || defined(_GLIBCXX_MAP) || defined(__SGI_STL_MAP)
+ template<class K, class T> void map_delete (std::map<K, T *> *m)
diff --git a/audio/ardour/files/patch-libs-pbd-stacktrace.cc b/audio/ardour/files/patch-libs-pbd-stacktrace.cc
new file mode 100644
index 000000000000..a71c6d4a7780
--- /dev/null
+++ b/audio/ardour/files/patch-libs-pbd-stacktrace.cc
@@ -0,0 +1,13 @@
+--- libs/pbd/stacktrace.cc.orig Thu Mar 29 18:26:37 2007
++++ libs/pbd/stacktrace.cc Thu Mar 29 18:27:27 2007
+@@ -3,7 +3,9 @@
+
+ /* Obtain a backtrace and print it to stdout. */
+
+-#ifdef HAVE_EXECINFO
++/* Without this change, ardourvst dies during startup with
++ 'wine: could not load L"Z:\\usr\\local\\lib\\ardour2\\ardour_vst.exe.so": Bad EXE format for''. */
++#if 0
+
+ #include <execinfo.h>
+ #include <stdlib.h>
diff --git a/audio/ardour/files/patch-libs-surfaces-mackie-mackie_control_protocol.cc b/audio/ardour/files/patch-libs-surfaces-mackie-mackie_control_protocol.cc
new file mode 100644
index 000000000000..8d26956665a4
--- /dev/null
+++ b/audio/ardour/files/patch-libs-surfaces-mackie-mackie_control_protocol.cc
@@ -0,0 +1,29 @@
+--- libs/surfaces/mackie/mackie_control_protocol.cc.orig
++++ libs/surfaces/mackie/mackie_control_protocol.cc
+@@ -64,8 +64,6 @@ using namespace sigc;
+ using namespace Mackie;
+ using namespace PBD;
+
+-using boost::shared_ptr;
+-
+ #include "i18n.h"
+
+ MackieMidiBuilder builder;
+@@ -200,7 +198,7 @@ MackieControlProtocol::port_for_id( uint
+ // predicate for sort call in get_sorted_routes
+ struct RouteByRemoteId
+ {
+- bool operator () ( const shared_ptr<Route> & a, const shared_ptr<Route> & b ) const {
++ bool operator () ( const boost::shared_ptr<Route> & a, const boost::shared_ptr<Route> & b ) const {
+ return a->remote_control_id() < b->remote_control_id();
+ }
+
+@@ -680,7 +678,7 @@ MackieControlProtocol::create_ports()
+ }
+ }
+
+-shared_ptr<Route>
++boost::shared_ptr<Route>
+ MackieControlProtocol::master_route()
+ {
+ boost::shared_ptr<IO> mo = session->master_out ();
diff --git a/audio/ardour/files/patch-libs_gtkmm2ext_fastmeter.cc b/audio/ardour/files/patch-libs_gtkmm2ext_fastmeter.cc
new file mode 100644
index 000000000000..e123e4e24ed4
--- /dev/null
+++ b/audio/ardour/files/patch-libs_gtkmm2ext_fastmeter.cc
@@ -0,0 +1,11 @@
+--- libs/gtkmm2ext/fastmeter.cc.orig 2009-02-24 12:37:45 UTC
++++ libs/gtkmm2ext/fastmeter.cc
+@@ -476,7 +476,7 @@ FastMeter::set (float lvl)
+
+ Glib::RefPtr<Gdk::Window> win;
+
+- if ((win = get_window()) == 0) {
++ if (!(win = get_window())) {
+ queue_draw ();
+ return;
+ }
diff --git a/audio/ardour/files/patch-libs_gtkmm2ext_idle__adjustment.cc b/audio/ardour/files/patch-libs_gtkmm2ext_idle__adjustment.cc
new file mode 100644
index 000000000000..aca975159d3a
--- /dev/null
+++ b/audio/ardour/files/patch-libs_gtkmm2ext_idle__adjustment.cc
@@ -0,0 +1,10 @@
+--- libs/gtkmm2ext/idle_adjustment.cc.orig 2018-09-03 19:39:58 UTC
++++ libs/gtkmm2ext/idle_adjustment.cc
+@@ -21,6 +21,7 @@
+ #include <gtkmm2ext/idle_adjustment.h>
+ #include <gtkmm/main.h>
+ #include <iostream>
++#include <gtkmm.h>
+
+ using namespace Gtk;
+ using namespace sigc;
diff --git a/audio/ardour/files/patch-tempoline_crash b/audio/ardour/files/patch-tempoline_crash
new file mode 100644
index 000000000000..bcf4117179a5
--- /dev/null
+++ b/audio/ardour/files/patch-tempoline_crash
@@ -0,0 +1,83 @@
+commit b29f54fb6efcdb2facf0471bd8e24d8eea3231b0
+Author: Paul Davis <paul@linuxaudiosystems.com>
+Date: Wed Feb 20 18:53:30 2013 +0000
+
+ back-port tempo line assert fix from 3.0 to stop crashing under some relatively easy to hit conditions
+
+ git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@14067 d708f5d6-7413-0410-9779-e7cbd77b26cf
+
+diff --git a/gtk2_ardour/tempo_lines.cc b/gtk2_ardour/tempo_lines.cc
+index e8bd034..a373dec 100644
+--- gtk2_ardour/tempo_lines.cc.orig
++++ gtk2_ardour/tempo_lines.cc
+@@ -146,9 +146,8 @@ TempoLines::draw (ARDOUR::TempoMap::BBTPointList& points, double frames_per_unit
+ }
+
+ xpos = rint(((nframes64_t)(*i).frame) / (double)frames_per_unit);
+- if (inserted_last_time && !_lines.empty()) {
+- li = _lines.lower_bound(xpos); // first line >= xpos
+- }
++
++ li = _lines.lower_bound(xpos); // first line >= xpos
+
+ line = (li != _lines.end()) ? li->second : NULL;
+ assert(!line || line->property_x1() == li->first);
+@@ -215,33 +214,35 @@ TempoLines::draw (ARDOUR::TempoMap::BBTPointList& points, double frames_per_unit
+ // Create a new line
+ } else if (_lines.size() < needed || _lines.size() < MAX_CACHED_LINES) {
+ //cout << "*** CREATING LINE" << endl;
+- assert(_lines.find(xpos) == _lines.end());
+- line = new ArdourCanvas::SimpleLine (*_group);
+- line->property_x1() = xpos;
+- line->property_x2() = xpos;
+- line->property_y1() = 0.0;
+- line->property_y2() = _height;
+- line->property_color_rgba() = color;
+- _lines.insert(make_pair(xpos, line));
+- inserted_last_time = true;
++ if (_lines.find(xpos) == _lines.end()) {
++ line = new ArdourCanvas::SimpleLine (*_group);
++ line->property_x1() = xpos;
++ line->property_x2() = xpos;
++ line->property_y1() = 0.0;
++ line->property_y2() = _height;
++ line->property_color_rgba() = color;
++ _lines.insert(make_pair(xpos, line));
++ inserted_last_time = true;
++ }
+
+ // Steal from the left
+ } else {
+ //cout << "*** STEALING FROM LEFT" << endl;
+- assert(_lines.find(xpos) == _lines.end());
+- Lines::iterator steal = _lines.begin();
+- line = steal->second;
+- _lines.erase(steal);
+- line->property_color_rgba() = color;
+- line->property_x1() = xpos;
+- line->property_x2() = xpos;
+- _lines.insert(make_pair(xpos, line));
+- inserted_last_time = true; // search next time
+- invalidated = true;
+-
+- // Shift clean range right
+- _clean_left = max(_clean_left, steal->first);
+- _clean_right = max(_clean_right, xpos);
++ if (_lines.find(xpos) == _lines.end()) {
++ Lines::iterator steal = _lines.begin();
++ line = steal->second;
++ _lines.erase(steal);
++ line->property_color_rgba() = color;
++ line->property_x1() = xpos;
++ line->property_x2() = xpos;
++ _lines.insert(make_pair(xpos, line));
++ inserted_last_time = true; // search next time
++ invalidated = true;
++
++ // Shift clean range right
++ _clean_left = max(_clean_left, steal->first);
++ _clean_right = max(_clean_right, xpos);
++ }
+ }
+
+ break;
diff --git a/audio/ardour/files/patch-vst-SConscript b/audio/ardour/files/patch-vst-SConscript
new file mode 100644
index 000000000000..5239b8a77874
--- /dev/null
+++ b/audio/ardour/files/patch-vst-SConscript
@@ -0,0 +1,11 @@
+--- vst/SConscript.orig Sat Mar 24 13:25:52 2007
++++ vst/SConscript Sat Mar 24 13:26:42 2007
+@@ -20,7 +20,7 @@
+ )
+
+ ardour_vst.Append (CCFLAGS="-DVST_SUPPORT", CPPPATH="#libs/fst", LIBPATH='#gtk2_ardour', LIBS="ardourgtk")
+-ardour_vst.Append (LINKFLAGS='-L/usr/X11R6/lib -lasound -lX11 -lpthread')
++#ardour_vst.Append (LINKFLAGS='-L/usr/X11R6/lib -lasound -lX11 -lpthread')
+ ardour_vst["CC"] ="winegcc"
+ ardour_vst["LINK"] ="wineg++ -mwindows"
+
diff --git a/audio/ardour/pkg-descr b/audio/ardour/pkg-descr
new file mode 100644
index 000000000000..70fcef73b1d7
--- /dev/null
+++ b/audio/ardour/pkg-descr
@@ -0,0 +1,14 @@
+Ardour is a digital audio workstation. You can use it to record, edit, and
+mix multi-track audio. Produce your own CD's. Mix video soundtracks.
+Experiment with new ideas about music and sound. Generate sound
+installations for 12 speaker gallery shows.
+
+Ardour capabilities include: multichannel recording, non-linear, non-
+destructive region based editing with unlimited undo/redo, full automation
+support, a mixer whose capabilities rival high end hardware consoles, lots
+of plugins to warp, shift, and shape your music, and controllable from
+hardware control surfaces at the same time as it syncs to timecode. If you
+have been looking for a tool similar to ProTools, Nuendo, Cubase SX, Digital
+Performer, Samplitude, or Sequoia, you might have found it.
+
+WWW: http://ardour.org/
diff --git a/audio/ardour/pkg-plist b/audio/ardour/pkg-plist
new file mode 100644
index 000000000000..90c539f7043b
--- /dev/null
+++ b/audio/ardour/pkg-plist
@@ -0,0 +1,158 @@
+%%NO_VST%%bin/ardour2
+%%VST%%bin/ardourvst
+etc/ardour2/SAE-de-keypad.bindings
+etc/ardour2/SAE-de-nokeypad.bindings
+etc/ardour2/SAE-us-keypad.bindings
+etc/ardour2/SAE-us-nokeypad.bindings
+etc/ardour2/ardour-sae.menus
+etc/ardour2/ardour.menus
+etc/ardour2/ardour2_ui_dark.rc
+etc/ardour2/ardour2_ui_dark_sae.rc
+etc/ardour2/ardour2_ui_default.conf
+etc/ardour2/ardour2_ui_light.rc
+etc/ardour2/ardour2_ui_light_sae.rc
+etc/ardour2/ardour_system.rc
+etc/ardour2/ergonomic-us.bindings
+etc/ardour2/mnemonic-us.bindings
+%%NO_VST%%lib/ardour2/ardour-%%DISTVERSION%%
+%%VST%%lib/ardour2/ardour_vst.exe.so
+lib/ardour2/engines/libclearlooks.so
+lib/ardour2/libardour.so
+lib/ardour2/libardour_cp.so
+%%VST%%lib/ardour2/libardourgtk.so
+lib/ardour2/libgtkmm2ext.so
+lib/ardour2/libmidi++.so
+lib/ardour2/libpbd.so
+lib/ardour2/librubberband.so
+lib/ardour2/libvamphostsdk.so
+lib/ardour2/libvampsdk.so
+lib/ardour2/surfaces/libardour_genericmidi.so
+lib/ardour2/surfaces/libardour_mackie.so
+lib/ardour2/surfaces/libardour_powermate.so
+lib/ardour2/surfaces/libardour_tranzport.so
+lib/ardour2/vamp/libardourvampplugins.so
+share/ardour2/icons/application-x-ardour_16px.png
+share/ardour2/icons/application-x-ardour_22px.png
+share/ardour2/icons/application-x-ardour_32px.png
+share/ardour2/icons/application-x-ardour_48px.png
+share/ardour2/icons/ardour_icon_16px.png
+share/ardour2/icons/ardour_icon_22px.png
+share/ardour2/icons/ardour_icon_32px.png
+share/ardour2/icons/ardour_icon_48px.png
+share/ardour2/icons/computer_keyboard.png
+share/ardour2/icons/computer_keyboard_active.png
+share/ardour2/icons/crossfade-in-S1.png
+share/ardour2/icons/crossfade-in-S2.png
+share/ardour2/icons/crossfade-in-constant-power.png
+share/ardour2/icons/crossfade-in-fast-cut.png
+share/ardour2/icons/crossfade-in-linear.png
+share/ardour2/icons/crossfade-in-long-cut.png
+share/ardour2/icons/crossfade-in-short-cut.png
+share/ardour2/icons/crossfade-in-slow-cut.png
+share/ardour2/icons/crossfade-out-S1.png
+share/ardour2/icons/crossfade-out-S2.png
+share/ardour2/icons/crossfade-out-constant-power.png
+share/ardour2/icons/crossfade-out-fast-cut.png
+share/ardour2/icons/crossfade-out-linear.png
+share/ardour2/icons/crossfade-out-long-cut.png
+share/ardour2/icons/crossfade-out-short-cut.png
+share/ardour2/icons/crossfade-out-slow-cut.png
+share/ardour2/icons/fader_belt.png
+share/ardour2/icons/fader_belt_h.png
+share/ardour2/icons/ferret_02.png
+share/ardour2/icons/grabber_edit_point.png
+share/ardour2/icons/hide.png
+share/ardour2/icons/nudge_left.png
+share/ardour2/icons/nudge_right.png
+share/ardour2/icons/record_normal_red.png
+share/ardour2/icons/record_tape_red.png
+share/ardour2/icons/sae.png
+share/ardour2/icons/saelogo.png
+share/ardour2/icons/strip_width.png
+share/ardour2/icons/tool_audition.png
+share/ardour2/icons/tool_gain.png
+share/ardour2/icons/tool_object.png
+share/ardour2/icons/tool_stretch.png
+share/ardour2/icons/tool_zoom.png
+share/ardour2/icons/transport_end.png
+share/ardour2/icons/transport_loop.png
+share/ardour2/icons/transport_play.png
+share/ardour2/icons/transport_range.png
+share/ardour2/icons/transport_record.png
+share/ardour2/icons/transport_start.png
+share/ardour2/icons/transport_stop.png
+share/ardour2/icons/zoom_full.png
+share/ardour2/icons/zoom_in.png
+share/ardour2/icons/zoom_out.png
+share/ardour2/pixmaps/forwardblarrow.xpm
+share/ardour2/pixmaps/hiin.xpm
+share/ardour2/pixmaps/hiout.xpm
+share/ardour2/pixmaps/hslider00.xpm
+share/ardour2/pixmaps/hslider01.xpm
+share/ardour2/pixmaps/left_arrow.xpm
+share/ardour2/pixmaps/linin.xpm
+share/ardour2/pixmaps/linout.xpm
+share/ardour2/pixmaps/loin.xpm
+share/ardour2/pixmaps/loop.xpm
+share/ardour2/pixmaps/loout.xpm
+share/ardour2/pixmaps/lr.xpm
+share/ardour2/pixmaps/regin.xpm
+share/ardour2/pixmaps/regin2.xpm
+share/ardour2/pixmaps/regout.xpm
+share/ardour2/pixmaps/regout2.xpm
+share/ardour2/pixmaps/revdblarrow.xpm
+share/ardour2/pixmaps/right_arrow.xpm
+share/ardour2/pixmaps/set-next-button.xpm
+share/ardour2/pixmaps/small-round-button-01.xpm
+share/ardour2/pixmaps/small_x.xpm
+share/ardour2/pixmaps/toggle-button-00.xpm
+share/ardour2/pixmaps/toggle-button-01.xpm
+share/ardour2/pixmaps/tool_audition.xpm
+share/ardour2/pixmaps/tool_gain.xpm
+share/ardour2/pixmaps/tool_object.xpm
+share/ardour2/pixmaps/tool_range.xpm
+share/ardour2/pixmaps/tool_stretch.xpm
+share/ardour2/pixmaps/tool_zoom.xpm
+share/ardour2/pixmaps/vslider00.xpm
+share/ardour2/pixmaps/vslider01.xpm
+share/ardour2/pixmaps/vslider02_rail.xpm
+share/ardour2/pixmaps/vslider02_slider.xpm
+share/ardour2/pixmaps/vslider_slider_16wide.xpm
+share/ardour2/pixmaps/zoom_full.xpm
+share/ardour2/pixmaps/zoom_in.xpm
+share/ardour2/pixmaps/zoom_out.xpm
+share/ardour2/splash.png
+share/ardour2/templates/16 Tracks.template
+share/ardour2/templates/2 Track.template
+share/ardour2/templates/32 Tracks.template
+share/ardour2/templates/4 Tracks.template
+share/ardour2/templates/8 Tracks.template
+share/locale/cs/LC_MESSAGES/gtk2_ardour.mo
+share/locale/de/LC_MESSAGES/gtk2_ardour.mo
+share/locale/el/LC_MESSAGES/gtk2_ardour.mo
+share/locale/el/LC_MESSAGES/libardour2.mo
+share/locale/el/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/es/LC_MESSAGES/gtk2_ardour.mo
+share/locale/es/LC_MESSAGES/libardour2.mo
+share/locale/es/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/eu/LC_MESSAGES/gtk2_ardour.mo
+share/locale/eu/LC_MESSAGES/libardour2.mo
+share/locale/eu/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/fr/LC_MESSAGES/gtk2_ardour.mo
+share/locale/fr/LC_MESSAGES/libardour2.mo
+share/locale/it/LC_MESSAGES/gtk2_ardour.mo
+share/locale/it/LC_MESSAGES/libardour2.mo
+share/locale/nn/LC_MESSAGES/gtk2_ardour.mo
+share/locale/nn/LC_MESSAGES/libardour2.mo
+share/locale/nn/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/pl/LC_MESSAGES/gtk2_ardour.mo
+share/locale/pl/LC_MESSAGES/libardour2.mo
+share/locale/pl/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/pt/LC_MESSAGES/gtk2_ardour.mo
+share/locale/pt/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/pt_PT/LC_MESSAGES/gtk2_ardour.mo
+share/locale/ru/LC_MESSAGES/gtk2_ardour.mo
+share/locale/ru/LC_MESSAGES/libardour2.mo
+share/locale/ru/LC_MESSAGES/libgtkmm2ext.mo
+share/locale/sv/LC_MESSAGES/gtk2_ardour.mo
+share/locale/sv/LC_MESSAGES/libardour2.mo
diff --git a/audio/mixxx21/Makefile b/audio/mixxx21/Makefile
new file mode 100644
index 000000000000..483186ddabe9
--- /dev/null
+++ b/audio/mixxx21/Makefile
@@ -0,0 +1,112 @@
+# Created by: Jean-Yves Lefort <jylefort@brutele.be>
+# $FreeBSD$
+
+PORTNAME= mixxx
+DISTVERSIONPREFIX= release-
+DISTVERSION= 2.1.8
+PORTREVISION= 10
+CATEGORIES= audio
+PKGNAMESUFFIX= 21
+
+MAINTAINER= acm@FreeBSD.org
+COMMENT= DJ mixing application
+
+LICENSE= GPLv2+
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+LIB_DEPENDS= libchromaprint.so:audio/chromaprint \
+ libFLAC.so:audio/flac \
+ libfftw3.so:math/fftw3 \
+ libhidapi.so:comms/hidapi \
+ libid3tag.so:audio/libid3tag \
+ libmad.so:audio/libmad \
+ libmodplug.so:audio/libmodplug \
+ libportaudio.so:audio/portaudio \
+ libSoundTouch.so:audio/soundtouch \
+ libebur128.so:audio/libebur128 \
+ librubberband.so:audio/rubberband \
+ libsndfile.so:audio/libsndfile \
+ libvamp-sdk.so:audio/vamp-plugin-sdk \
+ libogg.so:audio/libogg \
+ libvorbisfile.so:audio/libvorbis \
+ libtag.so:audio/taglib \
+ libprotobuf.so:devel/protobuf
+
+USES= compiler:c++11-lang gl iconv qt:5 pkgconfig scons:python2 xorg
+USE_XORG= x11
+USE_GL= gl glu
+USE_GITHUB= yes
+GH_ACCOUNT= mixxxdj
+USE_QT= buildtools concurrent core dbus gui network opengl script scripttools \
+ sql sql-sqlite3 svg testlib xml xmlpatterns linguisttools_build \
+ qmake_build widgets
+
+CONFLICTS= mixxx20* mixxx
+
+MAKE_ARGS= qtdir="${PREFIX}" install_root="${PREFIX}" \
+ build=release optimize=off ${GUI} battery=0 vamp=1 modplug=1
+LATE_INSTALL_ARGS= --install-sandbox=${STAGEDIR}
+
+GUI= qt5=1
+
+PORTDATA= *
+PORTDOCS= *
+
+OPTIONS_DEFINE= DOCS FAAD GPERFTOOLS HID LAME OPUS SHOUTCAST WAVPACK
+OPTIONS_DEFAULT= FAAD HID SHOUTCAST OPUS WAVPACK
+OPTIONS_SUB= yes
+
+FAAD_LIB_DEPENDS= libfaad.so:audio/faad \
+ libmp4v2.so:multimedia/mp4v2
+FAAD_MAKE_ARGS= faad=1
+FAAD_MAKE_ARGS_OFF= faad=0
+GPERFTOOLS_LIB_DEPENDS= libtcmalloc.so:devel/google-perftools
+GPERFTOOLS_MAKE_ARGS= perftools=1
+GPERFTOOLS_MAKE_ARGS_OFF= perftools=0
+HID_DESC= USB HID controllers support
+HID_MAKE_ARGS= hid=1
+HID_MAKE_ARGS_OFF= hid=0
+LAME_RUN_DEPENDS= lame:audio/lame
+OPUS_LIB_DEPENDS= libopus.so:audio/opus \
+ libopusfile.so:audio/opusfile
+OPUS_MAKE_ARGS= opus=1
+OPUS_MAKE_ARGS_OFF= opus=0
+SHOUTCAST_LIB_DEPENDS= libshout.so:audio/libshout
+SHOUTCAST_MAKE_ARGS= shoutcast=1
+SHOUTCAST_MAKE_ARGS_OFF= shoutcast=0
+WAVPACK_LIB_DEPENDS= libwavpack.so:audio/wavpack
+WAVPACK_MAKE_ARGS= wv=1
+WAVPACK_MAKE_ARGS_OFF= wv=0
+
+post-patch:
+ @${REINPLACE_CMD} -e "s|%%LOCALBASE%%|${LOCALBASE}|g ; \
+ s|%%PREFIX%%|${PREFIX}|g" \
+ ${WRKSRC}/build/depends.py
+ @${REINPLACE_CMD} -e "s|bzr |true |g" \
+ ${WRKSRC}/build/util.py
+ @${REINPLACE_CMD} -e "/('install', docs)/d" \
+ ${WRKSRC}/src/SConscript
+ @${REINPLACE_CMD} -e "s|^Exec=.*|Exec=mixxx| ; \
+ s|^Icon=.*|Icon=${PREFIX}/share/pixmaps/mixxx-icon.png|" \
+ ${WRKSRC}/res/linux/mixxx.desktop
+ @${REINPLACE_CMD} -e "s,(Q_OS_LINUX),(Q_OS_LINUX) || defined(Q_OS_FREEBSD),g" \
+ ${WRKSRC}/src/util/screensaver.h
+.for i in midi/midimessage.h
+ @${ECHO_CMD} >> ${WRKSRC}/src/controllers/${i}
+.endfor
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/mixxx
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/mixxx/plugins/*/*.so
+ @${MKDIR} ${STAGEDIR}${PREFIX}/lib/mixxx/plugins/soundsource
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+.for i in Mixxx-Manual.pdf README README.md
+ (cd ${WRKSRC} && ${INSTALL_DATA} ${i} \
+ ${STAGEDIR}${DOCSDIR})
+.endfor
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ cd ${WRKSRC} && ${INSTALL_DATA} Mixxx-Manual.pdf \
+ ${STAGEDIR}${DOCSDIR}
+ @${FIND} ${STAGEDIR}${PREFIX}/lib/mixxx/plugins/soundsource -type d -empty -delete
+
+.include <bsd.port.mk>
diff --git a/audio/mixxx21/distinfo b/audio/mixxx21/distinfo
new file mode 100644
index 000000000000..ef0714d17fc8
--- /dev/null
+++ b/audio/mixxx21/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1555975666
+SHA256 (mixxxdj-mixxx-release-2.1.8_GH0.tar.gz) = 172e7aaca760a8635fbda83f0bec2f5403b5bcd011ea088c0a7b0767b83b7e41
+SIZE (mixxxdj-mixxx-release-2.1.8_GH0.tar.gz) = 34652727
diff --git a/audio/mixxx21/files/patch-build_depends.py b/audio/mixxx21/files/patch-build_depends.py
new file mode 100644
index 000000000000..8277d88b7cf1
--- /dev/null
+++ b/audio/mixxx21/files/patch-build_depends.py
@@ -0,0 +1,172 @@
+--- build/depends.py 2018-12-27 02:36:10.000000000 -0500
++++ build/depends.py 2019-01-05 23:40:05.463593000 -0500
+@@ -12,7 +12,7 @@
+ if not conf.CheckLib('portaudio'):
+ raise Exception(
+ 'Did not find libportaudio.a, portaudio.lib, or the PortAudio-v19 development header files.')
+- elif build.platform_is_linux:
++ elif build.platform_is_linux or build.platform_is_bsd:
+ build.env.ParseConfig('pkg-config portaudio-2.0 --silence-errors --cflags --libs')
+
+ # Turn on PortAudio support in Mixxx
+@@ -74,7 +74,8 @@
+
+ if (not conf.CheckLib('GLU') and
+ not conf.CheckLib('glu32') and
+- not conf.CheckCHeader('OpenGL/glu.h')):
++ not conf.CheckCHeader('OpenGL/glu.h') and
++ not conf.CheckCHeader('GL/glu.h')):
+ raise Exception('Did not find GLU development files')
+
+
+@@ -106,7 +107,7 @@
+ class UPower(Dependence):
+ """UPower is used to get battery measurements on Linux."""
+ def configure(self, build, conf):
+- if not build.platform_is_linux:
++ if not build.platform_is_linux or not build.platform_is_bsd:
+ return
+ build.env.ParseConfig(
+ 'pkg-config upower-glib --silence-errors --cflags --libs')
+@@ -185,15 +186,17 @@
+
+ class Qt(Dependence):
+ DEFAULT_QT4DIRS = {'linux': '/usr/share/qt4',
+- 'bsd': '/usr/local/lib/qt4',
++ 'bsd': '%%LOCALBASE%%/share/qt4',
+ 'osx': '/Library/Frameworks',
+ 'windows': 'C:\\qt\\4.6.0'}
+
+ DEFAULT_QT5DIRS64 = {'linux': '/usr/lib/x86_64-linux-gnu/qt5',
++ 'bsd': '%%LOCALBASE%%/lib/qt5',
+ 'osx': '/Library/Frameworks',
+ 'windows': 'C:\\qt\\5.0.1'}
+
+ DEFAULT_QT5DIRS32 = {'linux': '/usr/lib/i386-linux-gnu/qt5',
++ 'bsd': '%%LOCALBASE%%/lib/qt5',
+ 'osx': '/Library/Frameworks',
+ 'windows': 'C:\\qt\\5.0.1'}
+
+@@ -319,10 +322,18 @@
+ build.env.Append(CCFLAGS='-fPIC')
+
+ elif build.platform_is_bsd:
+- build.env.Append(LIBS=qt_modules)
+- include_paths = ['$QTDIR/include/%s' % module
+- for module in qt_modules]
+- build.env.Append(CPPPATH=include_paths)
++ qt_modules.extend(['QtDBus'])
++ if qt5:
++ qt5_modules = [w.replace('Qt', 'Qt5') for w in qt_modules]
++ build.env.Append(LIBS = qt5_modules)
++ build.env.Append(CCFLAGS='-fPIC')
++ include_paths = ['%%LOCALBASE%%/include/qt5/%s' % module
++ for module in qt_modules]
++ else:
++ build.env.Append(LIBS = qt_modules)
++ include_paths = ['%%LOCALBASE%%/include/qt4/%s' % module
++ for module in qt_modules]
++ build.env.Append(CPPPATH=include_paths)
+ elif build.platform_is_osx:
+ qtdir = build.env['QTDIR']
+ build.env.Append(
+@@ -487,7 +498,7 @@
+ if not build.platform_is_windows and not (using_104_sdk or compiling_on_104):
+ qtdir = build.env['QTDIR']
+ framework_path = Qt.find_framework_libdir(qtdir, qt5)
+- if os.path.isdir(framework_path):
++ if framework_path and os.path.isdir(framework_path):
+ build.env.Append(LINKFLAGS="-L" + framework_path)
+
+ # Mixxx requires C++11 support. Windows enables C++11 features by
+@@ -581,7 +592,7 @@
+ if env is None:
+ env = build.env
+
+- if build.platform_is_linux:
++ if build.platform_is_linux or build.platform_is_bsd:
+ # Try using system lib
+ if conf.CheckForPKG('soundtouch', '2.0.0'):
+ # System Lib found
+@@ -625,7 +636,7 @@
+ # the files correctly. Adding this folder ot the include path should fix
+ # it, though might cause issues. This is safe to remove once we
+ # deprecate Karmic support. rryan 2/2011
+- build.env.Append(CPPPATH='/usr/include/taglib/')
++ build.env.Append(CPPPATH='%%LOCALBASE%%/include/taglib/')
+
+ if build.platform_is_windows and build.static_dependencies:
+ build.env.Append(CPPDEFINES='TAGLIB_STATIC')
+@@ -1337,7 +1348,6 @@
+
+ if build.toolchain_is_gnu:
+ # Default GNU Options
+- build.env.Append(CCFLAGS='-pipe')
+ build.env.Append(CCFLAGS='-Wall')
+ if build.compiler_is_clang:
+ # Quiet down Clang warnings about inconsistent use of override
+@@ -1445,12 +1455,13 @@
+
+ elif build.platform_is_osx:
+ # Stuff you may have compiled by hand
+- if os.path.isdir('/usr/local/include'):
+- build.env.Append(LIBPATH=['/usr/local/lib'])
++ if os.path.isdir('%%LOCALBASE%%/include'):
++ build.env.Append(LIBPATH=['%%LOCALBASE%%/lib'])
+ # Use -isystem instead of -I to avoid compiler warnings from
+ # system libraries. This cuts down on Mixxx's compilation output
+ # significantly when using Homebrew installed to /usr/local.
+- build.env.Append(CCFLAGS=['-isystem', '/usr/local/include'])
++ build.env.Append(CPPPATH=['%%LOCALBASE%%/include'])
++ build.env.Append(CCFLAGS=['-isystem', '%%LOCALBASE%%/include'])
+
+ # Non-standard libpaths for fink and certain (most?) darwin ports
+ if os.path.isdir('/sw/include'):
+@@ -1463,17 +1474,24 @@
+ build.env.Append(CPPPATH=['/opt/local/include'])
+
+ elif build.platform_is_bsd:
++ qt5 = Qt.qt5_enabled(build)
++
++ if qt5:
++ qtdirectory = 'qt5'
++ else:
++ qtdirectory = 'qt4'
++
+ build.env.Append(CPPDEFINES='__BSD__')
+ build.env.Append(CPPPATH=['/usr/include',
+- '/usr/local/include',
+- '/usr/X11R6/include/'])
++ '%%LOCALBASE%%/include',
++ '%%LOCALBASE%%/include/'+ qtdirectory])
+ build.env.Append(LIBPATH=['/usr/lib/',
+- '/usr/local/lib',
+- '/usr/X11R6/lib'])
++ '%%LOCALBASE%%/lib',
++ '%%LOCALBASE%%/lib/'+ qtdirectory])
+ build.env.Append(LIBS='pthread')
+ # why do we need to do this on OpenBSD and not on Linux? if we
+ # don't then CheckLib("vorbisfile") fails
+- build.env.Append(LIBS=['ogg', 'vorbis'])
++ build.env.Append(LIBS=['ogg', 'vorbis','X11'])
+
+ # Define for things that would like to special case UNIX (Linux or BSD)
+ if build.platform_is_bsd or build.platform_is_linux:
+@@ -1506,7 +1524,7 @@
+ # Say where to find resources on Unix. TODO(XXX) replace this with a
+ # RESOURCE_PATH that covers Win and OSX too:
+ if build.platform_is_linux or build.platform_is_bsd:
+- prefix = SCons.ARGUMENTS.get('prefix', '/usr/local')
++ prefix = SCons.ARGUMENTS.get('prefix', '%%PREFIX%%')
+ share_path = os.path.join (prefix, build.env.get(
+ 'SHAREDIR', default='share'), 'mixxx')
+ build.env.Append(
+@@ -1517,7 +1535,7 @@
+ CPPDEFINES=('UNIX_LIB_PATH', r'\"%s\"' % lib_path))
+
+ def depends(self, build):
+- return [SoundTouch, ReplayGain, Ebur128Mit, PortAudio, PortMIDI, Qt, TestHeaders,
++ return [SoundTouch, ReplayGain, Ebur128Mit, PortAudio, Qt, TestHeaders,
+ FidLib, SndFile, FLAC, OggVorbis, OpenGL, TagLib, ProtoBuf,
+ Chromaprint, RubberBand, SecurityFramework, CoreServices, IOKit,
+ QtScriptByteArray, Reverb, FpClassify, PortAudioRingBuffer]
diff --git a/audio/mixxx21/files/patch-build_features.py b/audio/mixxx21/files/patch-build_features.py
new file mode 100644
index 000000000000..f97c69449dfc
--- /dev/null
+++ b/audio/mixxx21/files/patch-build_features.py
@@ -0,0 +1,102 @@
+--- build/features.py 2018-10-28 12:33:56.000000000 -0500
++++ build/features.py 2018-11-06 14:58:04.915561000 -0500
+@@ -105,13 +105,24 @@
+ # -pthread tells GCC to do the right thing regardless of system
+ build.env.Append(CCFLAGS='-pthread')
+ build.env.Append(LINKFLAGS='-pthread')
++ elif build.platform_is_bsd:
++ build.env.ParseConfig('pkg-config hidapi --silence-errors --cflags --libs')
+
++ conf.CheckLib(['pthread', 'libpthread'])
++ conf.CheckLib(['rt', 'librt'])
++
++ # -pthread tells GCC to do the right thing regardless of system
++ build.env.Append(CCFLAGS='-pthread')
++ build.env.Append(LINKFLAGS='-pthread')
+ else:
+ self.INTERNAL_LINK = True
+ if build.platform_is_windows and not conf.CheckLib(['setupapi', 'libsetupapi']):
+ raise Exception('Did not find the setupapi library, exiting.')
+ elif build.platform_is_osx:
+ build.env.AppendUnique(FRAMEWORKS=['IOKit', 'CoreFoundation'])
++ elif build.platform_is_bsd:
++ conf.CheckLib(['usb', 'libusb'])
++ conf.CheckLib(['usbhid', 'libusbhid'])
+
+ build.env.Append(CPPDEFINES='__HID__')
+ if self.INTERNAL_LINK:
+@@ -129,7 +140,7 @@
+ # setupapi.
+ sources.append(
+ os.path.join(self.HIDAPI_INTERNAL_PATH, "windows/hid.c"))
+- elif build.platform_is_linux:
++ elif build.platform_is_linux or build.platform_is_bsd:
+ # hidapi compiles the libusb implementation by default on Linux
+ sources.append(
+ os.path.join(self.HIDAPI_INTERNAL_PATH, 'libusb/hid.c'))
+@@ -147,14 +158,14 @@
+ def enabled(self, build):
+ # For now only make Bulk default on Linux only. Turn on for all
+ # platforms after the 1.11.0 release.
+- is_default = 1 if build.platform_is_linux else 0
++ is_default = 1 if build.platform_is_linux or build.platform_is_bsd else 0
+ build.flags['bulk'] = util.get_flags(build.env, 'bulk', is_default)
+ if int(build.flags['bulk']):
+ return True
+ return False
+
+ def add_options(self, build, vars):
+- is_default = 1 if build.platform_is_linux else 0
++ is_default = 1 if build.platform_is_linux or build.platform_is_bsd else 0
+ vars.Add('bulk',
+ 'Set to 1 to enable USB Bulk controller support.', is_default)
+
+@@ -162,12 +173,15 @@
+ if not self.enabled(build):
+ return
+
+- build.env.ParseConfig(
+- 'pkg-config libusb-1.0 --silence-errors --cflags --libs')
+- if (not conf.CheckLib(['libusb-1.0', 'usb-1.0']) or
+- not conf.CheckHeader('libusb-1.0/libusb.h')):
+- raise Exception(
+- 'Did not find the libusb 1.0 development library or its header file, exiting!')
++ if build.platform_is_linux:
++ build.env.ParseConfig(
++ 'pkg-config libusb-1.0 --silence-errors --cflags --libs')
++ if (not conf.CheckLib(['libusb-1.0', 'usb-1.0']) or
++ not conf.CheckHeader('libusb-1.0/libusb.h')):
++ raise Exception(
++ 'Did not find the libusb 1.0 development library or its header file, exiting!')
++ elif build.platform_is_bsd:
++ conf.CheckLib(['usb', 'libusb'])
+
+ build.env.Append(CPPDEFINES='__BULK__')
+
+@@ -396,7 +410,7 @@
+ # If there is no system vamp-hostsdk is installed or if the version
+ # of the installed vamp-hostsdk is less than the bundled version,
+ # then we'll directly link the bundled vamp-hostsdk
+- if not conf.CheckLib('vamp-hostsdk') or not conf.CheckForPKG('vamp-plugin-sdk', '2.7.1'):
++ if not conf.CheckLib('vamp-hostsdk') or not conf.CheckForPKG('vamp-sdk', '2.7.1'):
+ # For header includes
+ build.env.Append(CPPPATH=[self.INTERNAL_VAMP_PATH])
+ self.INTERNAL_LINK = True
+@@ -409,7 +423,7 @@
+ # FFTW3 support
+ have_fftw3_h = conf.CheckHeader('fftw3.h')
+ have_fftw3 = conf.CheckLib('fftw3', autoadd=False)
+- if have_fftw3_h and have_fftw3 and build.platform_is_linux:
++ if have_fftw3_h and have_fftw3 and (build.platform_is_linux or build.platform_is_bsd) :
+ build.env.Append(CPPDEFINES='HAVE_FFTW3')
+ build.env.ParseConfig(
+ 'pkg-config fftw3 --silence-errors --cflags --libs')
+@@ -1295,7 +1309,7 @@
+ return ["util/battery/batterywindows.cpp"]
+ elif build.platform_is_osx:
+ return ["util/battery/batterymac.cpp"]
+- elif build.platform_is_linux:
++ elif build.platform_is_linux or build.platform_is_bsd:
+ return ["util/battery/batterylinux.cpp"]
+ else:
+ raise Exception('Battery support is not implemented for the target platform.')
diff --git a/audio/mixxx21/files/patch-build_mixxx.py b/audio/mixxx21/files/patch-build_mixxx.py
new file mode 100644
index 000000000000..1ee0a37c9389
--- /dev/null
+++ b/audio/mixxx21/files/patch-build_mixxx.py
@@ -0,0 +1,27 @@
+--- build/mixxx.py 2018-04-15 13:30:27.000000000 -0500
++++ build/mixxx.py 2018-04-21 22:31:31.694426000 -0500
+@@ -394,9 +394,9 @@
+ self.env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])
+
+ # Allow installation directories to be specified.
+- prefix = Script.ARGUMENTS.get('prefix', '/usr/local')
++ prefix = Script.ARGUMENTS.get('prefix', '%%PREFIX%%')
+ if 'LIBDIR' in os.environ:
+- self.env['LIBDIR'] = os.path.relpath(os.environ['LIBDIR'], prefix)
++ self.env['LIBDIR'] = 'lib' # os.path.relpath(os.environ['LIBDIR'], prefix)
+ if 'BINDIR' in os.environ:
+ self.env['BINDIR'] = os.path.relpath(os.environ['BINDIR'], prefix)
+ if 'SHAREDIR' in os.environ:
+@@ -429,10 +429,10 @@
+ def install_options(self):
+ cachefile = os.path.join(self.get_cache_dir(), 'custom.py')
+ vars = Script.Variables(cachefile)
+- vars.Add('prefix', 'Set to your install prefix', '/usr/local')
++ vars.Add('prefix', 'Set to your install prefix', '%%PREFIX%%')
+ vars.Add('virtualize',
+ 'Dynamically swap out the build directory when switching Git branches.', 1)
+- vars.Add('qtdir', 'Set to your QT4 directory', '/usr/share/qt4')
++ vars.Add('qtdir', 'Set to your QT4 directory', '%%LOCALBASE%%/share/qt4')
+ vars.Add('qt_sqlite_plugin', 'Set to 1 to package the Qt SQLite plugin.'
+ '\n Set to 0 if SQLite support is compiled into QtSQL.', 0)
+ vars.Add('target',
diff --git a/audio/mixxx21/files/patch-lib_hidapi-0.8.0-rc1_libusb_hid.c b/audio/mixxx21/files/patch-lib_hidapi-0.8.0-rc1_libusb_hid.c
new file mode 100644
index 000000000000..262647d3ea6f
--- /dev/null
+++ b/audio/mixxx21/files/patch-lib_hidapi-0.8.0-rc1_libusb_hid.c
@@ -0,0 +1,11 @@
+--- lib/hidapi-0.8.0-rc1/libusb/hid.c.orig 2015-12-29 16:10:41 UTC
++++ lib/hidapi-0.8.0-rc1/libusb/hid.c
+@@ -258,7 +258,7 @@ static int get_usage(uint8_t *report_des
+ Note that the data parameter is Unicode in UTF-16LE encoding.
+ Return value is the number of bytes in data, or LIBUSB_ERROR_*.
+ */
+-static inline int libusb_get_string_descriptor(libusb_device_handle *dev,
++inline int libusb_get_string_descriptor(libusb_device_handle *dev,
+ uint8_t descriptor_index, uint16_t lang_id,
+ unsigned char *data, int length)
+ {
diff --git a/audio/mixxx21/files/patch-plugins_soundsourcem4a_soundsourcem4a.h b/audio/mixxx21/files/patch-plugins_soundsourcem4a_soundsourcem4a.h
new file mode 100644
index 000000000000..d45a2ae4a508
--- /dev/null
+++ b/audio/mixxx21/files/patch-plugins_soundsourcem4a_soundsourcem4a.h
@@ -0,0 +1,11 @@
+--- plugins/soundsourcem4a/soundsourcem4a.h.orig 2019-07-19 22:36:09 UTC
++++ plugins/soundsourcem4a/soundsourcem4a.h
+@@ -5,6 +5,8 @@
+
+ #include "util/readaheadsamplebuffer.h"
+
++#include <sys/types.h>
++
+ #ifdef __MP4V2__
+ #include <mp4v2/mp4v2.h>
+ #else
diff --git a/audio/mixxx21/files/patch-src-encoder_encodermp3.cpp b/audio/mixxx21/files/patch-src-encoder_encodermp3.cpp
new file mode 100644
index 000000000000..67914779e1c1
--- /dev/null
+++ b/audio/mixxx21/files/patch-src-encoder_encodermp3.cpp
@@ -0,0 +1,11 @@
+--- src/encoder/encodermp3.cpp 2017-09-24 22:09:28.258505000 -0500
++++ src/encoder/encodermp3.cpp 2017-09-24 22:12:09.197474000 -0500
+@@ -76,7 +76,7 @@
+ */
+ QStringList libnames;
+ QString libname = "";
+-#ifdef __LINUX__
++#if defined(__LINUX__) || defined(__FreeBSD__)
+ libnames << "mp3lame";
+ #elif __WINDOWS__
+ libnames << "lame_enc.dll";
diff --git a/audio/mixxx21/files/patch-src-util_screensaver.cpp b/audio/mixxx21/files/patch-src-util_screensaver.cpp
new file mode 100644
index 000000000000..a05c284ecba3
--- /dev/null
+++ b/audio/mixxx21/files/patch-src-util_screensaver.cpp
@@ -0,0 +1,27 @@
+--- src/util/screensaver.cpp 2018-04-22 02:22:56.333283000 -0500
++++ src/util/screensaver.cpp 2018-04-22 02:24:03.836501000 -0500
+@@ -23,13 +23,13 @@
+ # include "util/mac.h"
+ #elif defined(Q_OS_WIN)
+ # include <windows.h>
+-#elif defined(Q_OS_LINUX)
++#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
+ # include <QtDBus>
+ #elif HAVE_XSCREENSAVER_SUSPEND
+ # include <X11/extensions/scrnsaver.h>
+ #endif // Q_OS_WIN
+
+-#if defined(Q_OS_LINUX) || HAVE_XSCREENSAVER_SUSPEND
++#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || HAVE_XSCREENSAVER_SUSPEND
+ # define None XNone
+ # define Window XWindow
+ # include <X11/Xlib.h>
+@@ -140,7 +140,7 @@
+ s_enabled = false;
+ }
+
+-#elif defined(Q_OS_LINUX)
++#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
+ const char *SCREENSAVERS[][4] = {
+ // org.freedesktop.ScreenSaver is the standard. should work for gnome and kde too,
+ // but I add their specific names too
diff --git a/audio/mixxx21/files/patch-src_controllers_controllermanager.cpp b/audio/mixxx21/files/patch-src_controllers_controllermanager.cpp
new file mode 100644
index 000000000000..7b2fc13b2c09
--- /dev/null
+++ b/audio/mixxx21/files/patch-src_controllers_controllermanager.cpp
@@ -0,0 +1,12 @@
+--- src/controllers/controllermanager.cpp 2018-04-15 13:30:27.000000000 -0500
++++ src/controllers/controllermanager.cpp 2018-04-21 22:34:32.638474000 -0500
+@@ -127,7 +127,9 @@
+
+ // Instantiate all enumerators. Enumerators can take a long time to
+ // construct since they interact with host MIDI APIs.
++#ifdef __PORTMIDI__
+ m_enumerators.append(new PortMidiEnumerator());
++#endif
+ #ifdef __HSS1394__
+ m_enumerators.append(new Hss1394Enumerator());
+ #endif
diff --git a/audio/mixxx21/files/patch-src_controllers_controllerpresetfilehandler.cpp b/audio/mixxx21/files/patch-src_controllers_controllerpresetfilehandler.cpp
new file mode 100644
index 000000000000..464b33c32d4b
--- /dev/null
+++ b/audio/mixxx21/files/patch-src_controllers_controllerpresetfilehandler.cpp
@@ -0,0 +1,14 @@
+--- src/controllers/controllerpresetfilehandler.cpp.orig 2015-12-29 16:10:41 UTC
++++ src/controllers/controllerpresetfilehandler.cpp
+@@ -43,7 +43,11 @@ ControllerPresetPointer ControllerPreset
+ pHandler = new MidiControllerPresetFileHandler();
+ } else if (scriptPath.endsWith(HID_PRESET_EXTENSION, Qt::CaseInsensitive) ||
+ scriptPath.endsWith(BULK_PRESET_EXTENSION, Qt::CaseInsensitive)) {
++#if __HID__
+ pHandler = new HidControllerPresetFileHandler();
++#else
++ return ControllerPresetPointer();
++#endif
+ }
+
+ if (pHandler == NULL) {
diff --git a/audio/mixxx21/files/patch-vamp-plugins_SConscript b/audio/mixxx21/files/patch-vamp-plugins_SConscript
new file mode 100644
index 000000000000..dfc658763c92
--- /dev/null
+++ b/audio/mixxx21/files/patch-vamp-plugins_SConscript
@@ -0,0 +1,11 @@
+--- vamp-plugins/SConscript 2018-11-06 14:08:42.093656000 -0500
++++ vamp-plugins/SConscript 2018-11-06 14:08:56.517582000 -0500
+@@ -54,7 +54,7 @@
+ # If there is no system vamp-sdk is installed or if the version
+ # of the installed vamp-sdk is less than the bundled version,
+ # then we'll directly link the bundled vamp-sdk.
+- if not conf.CheckLib('vamp-sdk') or not conf.CheckForPKG('vamp-plugin-sdk', '2.7.1'):
++ if not conf.CheckLib('vamp-hostsdk') or not conf.CheckForPKG('vamp-sdk', '2.7.1'):
+ INTERNAL_VAMP_PATH = '#lib/vamp'
+ # For header includes
+ env.Append(CPPPATH=[INTERNAL_VAMP_PATH])
diff --git a/audio/mixxx21/pkg-descr b/audio/mixxx21/pkg-descr
new file mode 100644
index 000000000000..1f4dd927512c
--- /dev/null
+++ b/audio/mixxx21/pkg-descr
@@ -0,0 +1,5 @@
+Mixxx is software for DJ'ing. You can use wave based audio files, Ogg Vorbis
+and MP3 files as audio input. Mixxx can be controlled through the GUI and
+with external controllers including MIDI devices, joysticks, and more.
+
+WWW: https://mixxx.org/
diff --git a/audio/mixxx21/pkg-plist b/audio/mixxx21/pkg-plist
new file mode 100644
index 000000000000..43032a033426
--- /dev/null
+++ b/audio/mixxx21/pkg-plist
@@ -0,0 +1,7 @@
+bin/mixxx
+%%FAAD%%lib/mixxx/plugins/soundsourceqt5/libsoundsourcem4a.so
+%%WAVPACK%%lib/mixxx/plugins/soundsourceqt5/libsoundsourcewv.so
+lib/mixxx/plugins/vampqt5/libmixxxminimal.so
+share/appdata/mixxx.appdata.xml
+share/applications/mixxx.desktop
+share/pixmaps/mixxx-icon.png
diff --git a/audio/xmms2/Makefile b/audio/xmms2/Makefile
new file mode 100644
index 000000000000..285d2d691221
--- /dev/null
+++ b/audio/xmms2/Makefile
@@ -0,0 +1,224 @@
+# Created by: Alexander Botero-Lowry <alex@foxybanana.com>
+# $FreeBSD$
+
+PORTNAME?= xmms2
+PORTVERSION= 0.8
+DISTVERSIONSUFFIX= DrO_o
+PORTREVISION?= 35
+CATEGORIES?= audio
+MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTVERSION}%20${DISTVERSIONSUFFIX}
+
+MAINTAINER?= madpilot@FreeBSD.org
+COMMENT?= Rewrite of xmms as a client/server system (developer release)
+
+USES+= pkgconfig tar:bzip2 waf
+
+CONFIGURE_ARGS+= --conf-prefix=${LOCALBASE} \
+ --mandir=${MANPREFIX}/man \
+ --without-plugins="ofa"
+INSTALL_TARGET= install --without-ldconfig
+
+.if !defined(XMMS2_SLAVE)
+USE_GNOME= glib20
+USES+= gnome python:2.7,build readline sqlite
+
+USE_LDCONFIG= yes
+
+PLIST_SUB+= INCLUDEDIR="include/${PORTNAME}" LIBDIR="lib/${PORTNAME}"
+
+CPPFLAGS+= -I${LOCALBASE}/include
+
+OPTIONS_DEFINE= AIRPLAY AO APE AVCODEC CDDA CURL ET FAAD FAM FLAC \
+ GME GVFS ICES JACK MAD MDNS MMS \
+ MODPLUG MPG123 MUSEPACK PULSEAUDIO SAMBA SID \
+ SNDFILE SPEEX TREMOR VISUAL VOCODER VORBIS WAVPACK XML
+OPTIONS_SINGLE= MDNS
+OPTIONS_SINGLE_MDNS= MDNS_APPLE MDNS_AVAHI
+OPTIONS_DEFAULT= CURL FAAD FLAC MPG123 MDNS MDNS_AVAHI VORBIS
+
+AIRPLAY_DESC= Support output via Airport Express
+AVCODEC_DESC= Avcodevc playback support
+ET_DESC= Install usage feedback reporting client
+FAM_DESC= Support to update Media Library on file change
+GME_DESC= Video game music files support
+GVFS_DESC= Playback files via GVFS
+ICES_DESC= Playback files to an icecast server
+MDNS_DESC= Announce XMMS2d via mDNS (Choose implementation)
+MDNS_APPLE_DESC= Use Apple mDNS implementation
+MDNS_AVAHI_DESC= Use Avahi mDNS implementation
+SAMBA_DESC= Playback files via SMB
+SID_DESC= Playback SID files
+VISUAL_DESC= Visualization plugins support
+VOCODER_DESC= Phase Vocoder effect plugin
+XML_DESC= Support XML based playlists (XSPF, RSS)
+
+OPTIONS_SUB= yes
+
+AIRPLAY_USES= ssl
+AIRPLAY_CONFIGURE_OFF= --without-plugins="airplay"
+
+AO_LIB_DEPENDS= libao.so:audio/libao
+AO_CONFIGURE_OFF= --without-plugins="ao"
+
+APE_LIB_DEPENDS= libmac.so:audio/mac
+APE_CONFIGURE_OFF= --without-plugins="mac"
+
+AVCODEC_LIB_DEPENDS= libavutil.so:multimedia/ffmpeg
+AVCODEC_CONFIGURE_OFF= --without-plugins="avcodec"
+
+CDDA_LIB_DEPENDS= libcdio.so:sysutils/libcdio \
+ libcdio_cdda.so:sysutils/libcdio-paranoia \
+ libdiscid.so:audio/libdiscid
+CDDA_CONFIGURE_OFF= --without-plugins="cdda"
+
+CURL_LIB_DEPENDS= libcurl.so:ftp/curl
+CURL_CONFIGURE_OFF= --without-plugins="curl" --without-plugins="icymetaint"
+
+FAAD_LIB_DEPENDS= libfaad.so:audio/faad
+FAAD_CONFIGURE_OFF= --without-plugins="faad" --without-plugins="mp4"
+
+FAM_USES= fam:gamin
+FAM_CONFIGURE_OFF= --without-optionals="medialib-updater"
+
+FLAC_LIB_DEPENDS= libFLAC.so:audio/flac
+
+GME_LIB_DEPENDS= libgme.so:audio/libgme
+GME_CONFIGURE_OFF= --without-plugins="gme"
+
+GVFS_USE= GNOME=gvfs
+GVFS_CONFIGURE_OFF= --without-plugins="gvfs"
+
+ICES_LIB_DEPENDS= libshout.so:audio/libshout
+ICES_CONFIGURE_OFF= --without-plugins="ices"
+
+JACK_LIB_DEPENDS= libjack.so:audio/jack
+JACK_CONFIGURE_OFF= --without-plugins="jack"
+
+MAD_LIB_DEPENDS= libmad.so:audio/libmad
+MAD_CONFIGURE_OFF= --without-plugins="mad"
+
+MDNS_CONFIGURE_OFF= --without-optionals="mdns"
+
+MDNS_APPLE_CONFIGURE_ON= --with-mdns-backend="dns_sd"
+MDNS_APPLE_LIB_DEPENDS= libdns_sd.so:net/mDNSResponder
+
+MDNS_AVAHI_CONFIGURE_ON= --with-mdns-backend="avahi"
+MDNS_AVAHI_LIB_DEPENDS= libavahi-core.so:net/avahi-app
+
+MMS_LIB_DEPENDS= libmms.so:net/libmms
+MMS_CONFIGURE_OFF= --without-plugins="mms"
+
+MODPLUG_LIB_DEPENDS= libmodplug.so:audio/libmodplug
+MODPLUG_CONFIGURE_OFF= --without-plugins="modplug"
+
+MPG123_LIB_DEPENDS= libmpg123.so:audio/mpg123
+MPG123_CONFIGURE_OFF= --without-plugins="mpg123"
+
+MUSEPACK_LIB_DEPENDS= libmpcdec.so:audio/musepack
+MUSEPACK_CONFIGURE_OFF= --without-plugins="musepack"
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_CONFIGURE_OFF= --without-plugins="pulse"
+
+SAMBA_USES= samba:lib
+SAMBA_CPPFLAGS= -I${SAMBAINCLUDES}
+SAMBA_LDFLAGS= -L${SAMBALIBS}
+SAMBA_CONFIGURE_OFF= --without-plugins="samba"
+
+SID_LIB_DEPENDS= libsidplay2.so:audio/libsidplay2
+SID_CONFIGURE_OFF= --without-plugins="sid"
+
+SNDFILE_LIB_DEPENDS= libsndfile.so:audio/libsndfile
+SNDFILE_CONFIGURE_OFF= --without-plugins="sndfile"
+
+SPEEX_LIB_DEPENDS= libspeex.so:audio/speex
+SPEEX_CONFIGURE_OFF= --without-plugins="speex"
+
+TREMOR_LIB_DEPENDS= libvorbisidec.so:audio/libtremor
+TREMOR_CONFIGURE_OFF= --without-plugins="tremor"
+
+VISUAL_USES= sdl
+VISUAL_USE= SDL=sdl
+VISUAL_LIB_DEPENDS= libvisual-0.4.so:graphics/libvisual04
+VISUAL_CONFIGURE_OFF= --without-optionals="vistest"
+VISUAL_CONFIGURE_ON= --with-vis-reference-clients
+
+VOCODER_LIB_DEPENDS= libfftw3f.so:math/fftw3-float \
+ libsamplerate.so:audio/libsamplerate
+VOCODER_CONFIGURE_OFF= --without-plugins="vocoder"
+
+VORBIS_LIB_DEPENDS= libvorbis.so:audio/libvorbis
+VORBIS_CONFIGURE_OFF= --without-plugins="vorbis"
+
+WAVPACK_LIB_DEPENDS= libwavpack.so:audio/wavpack
+WAVPACK_CONFIGURE_OFF= --without-plugins="wavpack"
+
+XML_USE= GNOME=libxml2
+XML_CONFIGURE_OFF= --without-plugins="xml" --without-plugins="rss" \
+ --without-plugins="xspf"
+
+ET_CONFIGURE_OFF= --without-optionals="et"
+
+.endif # !XMMS2_SLAVE
+
+.include <bsd.port.options.mk>
+
+.if defined(XMMS2_SLAVE)
+CONFIGURE_ARGS+= --without-xmms2d
+
+.if ${XMMS2_SLAVE} == "python"
+CONFIGURE_ARGS+= --with-optionals="python"
+.elif ${XMMS2_SLAVE} == "ruby"
+CONFIGURE_ARGS+= --with-optionals="ruby"
+.elif ${XMMS2_SLAVE} == "perl"
+CONFIGURE_ARGS+= --with-optionals="perl"
+.elif ${XMMS2_SLAVE} == "ruby-ecore"
+CONFIGURE_ARGS+= --with-optionals="ruby" --with-optionals="xmmsclient-ecore"
+.elif ${XMMS2_SLAVE} == "cpp"
+CONFIGURE_ARGS+= --with-optionals="xmmsclient++" \
+ --with-optionals="xmmsclient++-glib"
+.endif
+
+.else # XMMS2_SLAVE
+CONFIGURE_ARGS+= --without-optionals="python" \
+ --without-optionals="ruby" \
+ --without-optionals="xmmsclient-ecore" \
+ --without-optionals="xmmsclient++" \
+ --without-optionals="xmmsclient++-glib" \
+ --without-optionals="perl"
+.endif # XMMS2_SLAVE
+
+.if !defined(XMMS2_SLAVE)
+
+# xmms2-ripper
+.if ${PORT_OPTIONS:MVISUAL} && ${PORT_OPTIONS:MVORBIS}
+LIB_DEPENDS+= libvorbisenc.so:audio/libvorbis
+.else
+EXTRA_PATCHES+= ${FILESDIR}/extra-patch-src-clients-vistest-wscript
+.endif
+
+.endif # !XMMS2_SLAVE
+
+# Force to nothing to avoid bsd.openssl.mk adding definitions
+# to it when AIRPLAY option is active, waf does not understand it anyway.
+MAKE_ARGS=
+
+post-patch:
+ @${REINPLACE_CMD} -e "s|%%WRKSRC%%|${WRKSRC}|" ${WRKSRC}/wscript
+.if ${PORT_OPTIONS:MVISUAL} && ${PORT_OPTIONS:MVORBIS}
+ @${REINPLACE_CMD} -e "s|'vorbisenc',|'vorbisenc vorbis ogg',|" \
+ ${WRKSRC}/src/clients/vistest/wscript
+.endif
+
+post-install:
+.if !defined(XMMS2_SLAVE)
+ ${MKDIR} ${STAGEDIR}${DATADIR}/scripts/startup.d
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/*
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libxmmsclient*
+.else
+ ${RM} -R ${STAGEDIR}${PREFIX}/lib/xmms2
+ ${FIND} ${STAGEDIR}${PREFIX}/lib -name '*.so*' | ${XARGS} ${STRIP_CMD}
+.endif
+
+.include <bsd.port.mk>
diff --git a/audio/xmms2/distinfo b/audio/xmms2/distinfo
new file mode 100644
index 000000000000..0db108e337bf
--- /dev/null
+++ b/audio/xmms2/distinfo
@@ -0,0 +1,2 @@
+SHA256 (xmms2-0.8DrO_o.tar.bz2) = c77e41e7bd5788889d5a2f78331ca8c748b8721bd2e59f36c36ad4c7cae8694a
+SIZE (xmms2-0.8DrO_o.tar.bz2) = 1670726
diff --git a/audio/xmms2/files/extra-patch-src-clients-vistest-wscript b/audio/xmms2/files/extra-patch-src-clients-vistest-wscript
new file mode 100644
index 000000000000..db0c7495c7b1
--- /dev/null
+++ b/audio/xmms2/files/extra-patch-src-clients-vistest-wscript
@@ -0,0 +1,30 @@
+--- src/clients/vistest/wscript~
++++ src/clients/vistest/wscript
+@@ -23,17 +23,6 @@ def build(bld):
+ t.install_path = None
+
+
+- if bld.env.LIB_vorbisenc:
+- t = bld(features = 'c cprogram',
+- target = 'xmms2-ripper',
+- source = 'ripper.c',
+- includes = '. ../../.. ../../include',
+- uselib = 'vorbisenc',
+- use = 'xmmsclient'
+- )
+- if not bld.env.INSTALL_VIS_REFERENCE_CLIENTS:
+- t.install_path = None
+-
+ if bld.env.LIB_visual and bld.env.LIB_sdl:
+ t = bld(features = 'c cprogram',
+ target = 'xmms2-libvisual',
+@@ -53,9 +42,6 @@ def configure(conf):
+
+ conf.check_cc(lib="m", uselib_store="math", mandatory=False)
+
+- conf.check_cfg(package='vorbisenc', uselib_store='vorbisenc',
+- args='--cflags --libs', mandatory=False)
+-
+ if conf.check_cfg(package='libvisual-0.4', uselib_store='visual',
+ args='--cflags --libs', mandatory=False):
+ conf.check_cfg(package='sdl', uselib_store='sdl',
diff --git a/audio/xmms2/files/patch-src_clients_lib_xmmsclient-glib_wscript b/audio/xmms2/files/patch-src_clients_lib_xmmsclient-glib_wscript
new file mode 100644
index 000000000000..782a4b98cafb
--- /dev/null
+++ b/audio/xmms2/files/patch-src_clients_lib_xmmsclient-glib_wscript
@@ -0,0 +1,34 @@
+--- src/clients/lib/xmmsclient-glib/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/clients/lib/xmmsclient-glib/wscript
+@@ -1,19 +1,21 @@
+ from waftools import tool
+
+ def build(bld):
+- obj = bld(features='c cshlib',
+- target = 'xmmsclient-glib',
+- includes = '../../../.. ../../../include',
+- source = 'xmmsclient-glib.c',
+- uselib = 'glib2',
+- use = 'xmmsclient',
+- vnum = '1.0.0'
+- )
++ if bld.env.BUILD_XMMS2D:
++ obj = bld(features='c cshlib',
++ target = 'xmmsclient-glib',
++ includes = '../../../.. ../../../include',
++ source = 'xmmsclient-glib.c',
++ uselib = 'glib2',
++ use = 'xmmsclient',
++ vnum = '1.0.0'
++ )
+
+- tool.add_install_flag(bld, obj)
++ tool.add_install_flag(bld, obj)
+
+ def configure(conf):
+- conf.env.XMMS_PKGCONF_FILES.append(('xmms2-client-glib', '-lxmmsclient-glib'))
++ if not conf.options.without_xmms2d:
++ conf.env.XMMS_PKGCONF_FILES.append(('xmms2-client-glib', '-lxmmsclient-glib'))
+
+ return True
+
diff --git a/audio/xmms2/files/patch-src_clients_lib_xmmsclient_wscript b/audio/xmms2/files/patch-src_clients_lib_xmmsclient_wscript
new file mode 100644
index 000000000000..a8135f56f562
--- /dev/null
+++ b/audio/xmms2/files/patch-src_clients_lib_xmmsclient_wscript
@@ -0,0 +1,34 @@
+--- src/clients/lib/xmmsclient/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/clients/lib/xmmsclient/wscript
+@@ -25,19 +25,21 @@ def build(bld):
+ else:
+ source.extend(["visualization/dummy.c"])
+
+- obj = bld(features = 'c cshlib',
+- target = 'xmmsclient',
+- includes = '../../../.. ../../../include ../../../includepriv',
+- source = source,
+- uselib = 'socket time',
+- use = 'xmmsipc xmmssocket xmmsutils xmmstypes xmmsvisualization',
+- vnum = '6.0.0'
+- )
++ if bld.env.BUILD_XMMS2D:
++ obj = bld(features = 'c cshlib',
++ target = 'xmmsclient',
++ includes = '../../../.. ../../../include ../../../includepriv',
++ source = source,
++ uselib = 'socket time',
++ use = 'xmmsipc xmmssocket xmmsutils xmmstypes xmmsvisualization',
++ vnum = '6.0.0'
++ )
+
+- tool.add_install_flag(bld, obj)
++ tool.add_install_flag(bld, obj)
+
+ def configure(conf):
+- conf.env.XMMS_PKGCONF_FILES.append(("xmms2-client", "-lxmmsclient"))
++ if not conf.options.without_xmms2d:
++ conf.env.XMMS_PKGCONF_FILES.append(("xmms2-client", "-lxmmsclient"))
+
+ conf.check_cc(function_name="semtimedop",
+ header_name=["sys/types.h", "sys/ipc.h", "sys/sem.h"],
diff --git a/audio/xmms2/files/patch-src_include_wscript b/audio/xmms2/files/patch-src_include_wscript
new file mode 100644
index 000000000000..a4e84c9edaa5
--- /dev/null
+++ b/audio/xmms2/files/patch-src_include_wscript
@@ -0,0 +1,22 @@
+--- src/include/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/include/wscript
+@@ -2,12 +2,13 @@ import os
+
+ def build(bld):
+ # FIXME: This is a test that should work.
+- for d in bld.path.ant_glob('**', dir=True, src=False):
+- rpath = d.path_from(bld.path)
+- bld.recurse(rpath)
+- f = d.ant_glob('*.h')
+- if f:
+- bld.install_files(os.path.join(bld.env.INCLUDEDIR, 'xmms2', rpath), f)
++ if bld.env.BUILD_XMMS2D:
++ for d in bld.path.ant_glob('**', dir=True, src=False):
++ rpath = d.path_from(bld.path)
++ bld.recurse(rpath)
++ f = d.ant_glob('*.h')
++ if f:
++ bld.install_files(os.path.join(bld.env.INCLUDEDIR, 'xmms2', rpath), f)
+
+ #paths = ['xmms', 'xmmsc', 'xmmsclient', 'xmmsclient/xmmsclient++']
+ #for p in paths:
diff --git a/audio/xmms2/files/patch-src_include_xmmsclient_xmmsclient++_coll.h b/audio/xmms2/files/patch-src_include_xmmsclient_xmmsclient++_coll.h
new file mode 100644
index 000000000000..f237eea4085b
--- /dev/null
+++ b/audio/xmms2/files/patch-src_include_xmmsclient_xmmsclient++_coll.h
@@ -0,0 +1,11 @@
+--- src/include/xmmsclient/xmmsclient++/coll.h.orig 2011-10-20 19:26:08 UTC
++++ src/include/xmmsclient/xmmsclient++/coll.h
+@@ -612,7 +612,7 @@ namespace Xmms
+
+ template< typename keyT, typename valT >
+ AbstractElement< keyT, valT >::AbstractElement( const Coll& coll, keyT index )
+- : coll_ (coll), index_( index )
++ : coll_ ( const_cast< Coll& >( coll ) ), index_( index )
+ {
+ xmmsv_coll_ref( coll_.getColl() );
+ }
diff --git a/audio/xmms2/files/patch-src_plugins_airplay_raop__client.c b/audio/xmms2/files/patch-src_plugins_airplay_raop__client.c
new file mode 100644
index 000000000000..ddf7db6376c4
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_airplay_raop__client.c
@@ -0,0 +1,25 @@
+--- src/plugins/airplay/raop_client.c.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/airplay/raop_client.c
+@@ -1,6 +1,8 @@
+ #include <string.h>
+ #include <unistd.h>
+
++#include <openssl/opensslv.h>
++#include <openssl/ossl_typ.h>
+ #include <openssl/rand.h>
+ #include <openssl/rsa.h>
+ #include <openssl/bio.h>
+@@ -137,8 +139,13 @@ raop_rsa_encrypt (guchar *text, gint len, guchar *res)
+ static const guchar exp[] = {0x01, 0x00, 0x01};
+
+ rsa = RSA_new ();
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ rsa->n = BN_bin2bn (mod, 256, NULL);
+ rsa->e = BN_bin2bn (exp, 3, NULL);
++#else
++ RSA_set0_key(rsa, BN_bin2bn (mod, 256, NULL), BN_bin2bn (exp, 3, NULL), NULL);
++#endif
+
+ size = RSA_public_encrypt (len, text, res, rsa, RSA_PKCS1_OAEP_PADDING);
+
diff --git a/audio/xmms2/files/patch-src_plugins_airplay_wscript b/audio/xmms2/files/patch-src_plugins_airplay_wscript
new file mode 100644
index 000000000000..5b1e9bf87006
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_airplay_wscript
@@ -0,0 +1,11 @@
+--- src/plugins/airplay/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/airplay/wscript
+@@ -12,8 +12,6 @@ rtspmessage.c
+ def plugin_configure(conf):
+ # MinGW doesn't ship sys/select.h
+ conf.check_cc(header_name='sys/select.h')
+- conf.check_cfg(package="openssl", args="--cflags --libs",
+- uselib_store="openssl")
+
+ configure, build = plugin("airplay", configure=plugin_configure,
+ source = source, libs=["openssl"], output_prio=4)
diff --git a/audio/xmms2/files/patch-src_plugins_ao_ao.c b/audio/xmms2/files/patch-src_plugins_ao_ao.c
new file mode 100644
index 000000000000..972ef05bbfe4
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_ao_ao.c
@@ -0,0 +1,10 @@
+--- src/plugins/ao/ao.c.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/ao/ao.c
+@@ -162,6 +162,7 @@ xmms_ao_new (xmms_output_t *output)
+
+ /* let's just use some common format to check if the device
+ * name is valid */
++ memset(&format, 0, sizeof(format));
+ format.bits = 16;
+ format.rate = 44100;
+ format.channels = 2;
diff --git a/audio/xmms2/files/patch-src_plugins_avcodec_avcodec.c b/audio/xmms2/files/patch-src_plugins_avcodec_avcodec.c
new file mode 100644
index 000000000000..da9bd420ba57
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_avcodec_avcodec.c
@@ -0,0 +1,527 @@
+--- src/plugins/avcodec/avcodec.c.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/avcodec/avcodec.c
+@@ -1,7 +1,7 @@
+ /** @file avcodec.c
+ * Decoder plugin for ffmpeg avcodec formats
+ *
+- * Copyright (C) 2006-2011 XMMS2 Team
++ * Copyright (C) 2006-2014 XMMS2 Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+@@ -14,15 +14,16 @@
+ * Lesser General Public License for more details.
+ */
+
+-#include "xmms_configuration.h"
+-#include "xmms/xmms_xformplugin.h"
+-#include "xmms/xmms_sample.h"
+-#include "xmms/xmms_log.h"
++#include <xmms_configuration.h>
++#include <xmms/xmms_xformplugin.h>
++#include <xmms/xmms_sample.h>
++#include <xmms/xmms_log.h>
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <glib.h>
++#include <libavutil/mem.h>
+
+ #include "avcodec_compat.h"
+
+@@ -36,6 +37,8 @@ typedef struct {
+ guint buffer_size;
+ gboolean no_demuxer;
+
++ AVFrame *read_out_frame;
++
+ guint channels;
+ guint samplerate;
+ xmms_sample_format_t sampleformat;
+@@ -53,10 +56,14 @@ typedef struct {
+ static gboolean xmms_avcodec_plugin_setup (xmms_xform_plugin_t *xform_plugin);
+ static gboolean xmms_avcodec_init (xmms_xform_t *xform);
+ static void xmms_avcodec_destroy (xmms_xform_t *xform);
++static gint xmms_avcodec_internal_read_some (xmms_xform_t *xform, xmms_avcodec_data_t *data, xmms_error_t *error);
++static gint xmms_avcodec_internal_decode_some (xmms_avcodec_data_t *data);
++static void xmms_avcodec_internal_append (xmms_avcodec_data_t *data);
+ static gint xmms_avcodec_read (xmms_xform_t *xform, xmms_sample_t *buf, gint len,
+ xmms_error_t *error);
+ static gint64 xmms_avcodec_seek (xmms_xform_t *xform, gint64 samples,
+ xmms_xform_seek_mode_t whence, xmms_error_t *err);
++static xmms_sample_format_t xmms_avcodec_translate_sample_format (enum AVSampleFormat av_sample_format);
+
+ /*
+ * Plugin header
+@@ -85,13 +92,23 @@ xmms_avcodec_plugin_setup (xmms_xform_pl
+ xmms_magic_add ("A/52 (AC-3) header", "audio/x-ffmpeg-ac3",
+ "0 beshort 0x0b77", NULL);
+ xmms_magic_add ("DTS header", "audio/x-ffmpeg-dca",
+- "0 belong 0x7ffe8001", NULL);
++ "0 belong 0x7ffe8001", NULL);
+
+ xmms_xform_plugin_indata_add (xform_plugin,
+ XMMS_STREAM_TYPE_MIMETYPE,
+ "audio/x-ffmpeg-*",
+ NULL);
+
++ XMMS_DBG ("avcodec version at build time is %d.%d.%d",
++ (LIBAVCODEC_VERSION_INT >> 16),
++ (LIBAVCODEC_VERSION_INT >> 8) & 0xff,
++ LIBAVCODEC_VERSION_INT & 0xff);
++ XMMS_DBG ("avcodec version at run time is %d.%d.%d",
++ (avcodec_version() >> 16),
++ (avcodec_version() >> 8) & 0xff,
++ avcodec_version() & 0xff);
++ XMMS_DBG ("avcodec configuration is %s", avcodec_configuration());
++
+ return TRUE;
+ }
+
+@@ -107,6 +124,7 @@ xmms_avcodec_destroy (xmms_xform_t *xfor
+
+ avcodec_close (data->codecctx);
+ av_free (data->codecctx);
++ av_frame_free (&data->read_out_frame);
+
+ g_string_free (data->outbuf, TRUE);
+ g_free (data->buffer);
+@@ -132,9 +150,10 @@ xmms_avcodec_init (xmms_xform_t *xform)
+ data->buffer_size = AVCODEC_BUFFER_SIZE;
+ data->codecctx = NULL;
+
++ data->read_out_frame = av_frame_alloc ();
++
+ xmms_xform_private_data_set (xform, data);
+
+- avcodec_init ();
+ avcodec_register_all ();
+
+ mimetype = xmms_xform_indata_get_str (xform,
+@@ -161,12 +180,12 @@ xmms_avcodec_init (xmms_xform_t *xform)
+ data->channels = ret;
+ }
+
+- /* bitrate required for WMA files */
++ /* Required by WMA xform. */
+ xmms_xform_auxdata_get_int (xform,
+ "bitrate",
+ &data->bitrate);
+
+- /* ALAC and MAC require bits per sample field to be 16 */
++ /* Required by tta and apefile xforms. */
+ xmms_xform_auxdata_get_int (xform,
+ "samplebits",
+ &data->samplebits);
+@@ -188,7 +207,8 @@ xmms_avcodec_init (xmms_xform_t *xform)
+ !strcmp (data->codec_id, "adpcm_swf") ||
+ !strcmp (data->codec_id, "pcm_s16le") ||
+ !strcmp (data->codec_id, "ac3") ||
+- !strcmp (data->codec_id, "dca")) {
++ !strcmp (data->codec_id, "dca") ||
++ !strcmp (data->codec_id, "nellymoser")) {
+ /* number 1024 taken from libavformat raw.c RAW_PACKET_SIZE */
+ data->extradata = g_malloc0 (1024);
+ data->extradata_size = 1024;
+@@ -196,22 +216,22 @@ xmms_avcodec_init (xmms_xform_t *xform)
+ } else {
+ /* A demuxer plugin forgot to give decoder config? */
+ xmms_log_error ("Decoder config data not found!");
+- return FALSE;
++ goto err;
+ }
+ }
+
+- data->codecctx = avcodec_alloc_context ();
++ data->codecctx = avcodec_alloc_context3 (codec);
+ data->codecctx->sample_rate = data->samplerate;
+ data->codecctx->channels = data->channels;
+ data->codecctx->bit_rate = data->bitrate;
+- CONTEXT_BPS (data->codecctx) = data->samplebits;
++ data->codecctx->bits_per_coded_sample = data->samplebits;
+ data->codecctx->block_align = data->block_align;
+ data->codecctx->extradata = data->extradata;
+ data->codecctx->extradata_size = data->extradata_size;
+ data->codecctx->codec_id = codec->id;
+ data->codecctx->codec_type = codec->type;
+
+- if (avcodec_open (data->codecctx, codec) < 0) {
++ if (avcodec_open2 (data->codecctx, codec, NULL) < 0) {
+ XMMS_DBG ("Opening decoder '%s' failed", codec->name);
+ goto err;
+ } else {
+@@ -220,7 +240,7 @@ xmms_avcodec_init (xmms_xform_t *xform)
+
+ /* some codecs need to have something read before they set
+ * the samplerate and channels correctly, unfortunately... */
+- if ((ret = xmms_avcodec_read (xform, buf, 42, &error)) > 0) {
++ if ((ret = xmms_avcodec_read (xform, buf, sizeof (buf), &error)) > 0) {
+ g_string_insert_len (data->outbuf, 0, buf, ret);
+ } else {
+ XMMS_DBG ("First read failed, codec is not working...");
+@@ -231,19 +251,27 @@ xmms_avcodec_init (xmms_xform_t *xform)
+
+ data->samplerate = data->codecctx->sample_rate;
+ data->channels = data->codecctx->channels;
++ data->sampleformat = xmms_avcodec_translate_sample_format (data->codecctx->sample_fmt);
++ if (data->sampleformat == XMMS_SAMPLE_FORMAT_UNKNOWN) {
++ avcodec_close (data->codecctx);
++ goto err;
++ }
+
+ xmms_xform_outdata_type_add (xform,
+ XMMS_STREAM_TYPE_MIMETYPE,
+ "audio/pcm",
+ XMMS_STREAM_TYPE_FMT_FORMAT,
+- XMMS_SAMPLE_FORMAT_S16,
++ data->sampleformat,
+ XMMS_STREAM_TYPE_FMT_CHANNELS,
+ data->channels,
+ XMMS_STREAM_TYPE_FMT_SAMPLERATE,
+ data->samplerate,
+ XMMS_STREAM_TYPE_END);
+
+- XMMS_DBG ("Decoder '%s' initialized successfully!", codec->name);
++ XMMS_DBG ("Decoder %s at rate %d with %d channels of format %s initialized",
++ codec->name, data->codecctx->sample_rate,
++ data->codecctx->channels,
++ av_get_sample_fmt_name (data->codecctx->sample_fmt));
+
+ return TRUE;
+
+@@ -251,6 +279,9 @@ err:
+ if (data->codecctx) {
+ av_free (data->codecctx);
+ }
++ if (data->read_out_frame) {
++ avcodec_free_frame (&data->read_out_frame);
++ }
+ g_string_free (data->outbuf, TRUE);
+ g_free (data->extradata);
+ g_free (data);
+@@ -263,102 +294,24 @@ xmms_avcodec_read (xmms_xform_t *xform,
+ xmms_error_t *error)
+ {
+ xmms_avcodec_data_t *data;
+- char outbuf[AVCODEC_MAX_AUDIO_FRAME_SIZE];
+- gint outbufsize, bytes_read = 0;
+ guint size;
+
+ data = xmms_xform_private_data_get (xform);
+ g_return_val_if_fail (data, -1);
+
+- size = MIN (data->outbuf->len, len);
+- while (size == 0) {
+- AVPacket packet;
+- av_init_packet (&packet);
++ while (0 == (size = MIN (data->outbuf->len, len))) {
++ gint res;
+
+ if (data->no_demuxer || data->buffer_length == 0) {
+- gint read_total;
+-
+- bytes_read = xmms_xform_read (xform,
+- (gchar *) (data->buffer + data->buffer_length),
+- data->buffer_size - data->buffer_length,
+- error);
+-
+- if (bytes_read < 0) {
+- XMMS_DBG ("Error while reading data");
+- return bytes_read;
+- } else if (bytes_read == 0) {
+- XMMS_DBG ("EOF");
+- return 0;
+- }
+-
+- read_total = bytes_read;
+-
+- /* If we have a demuxer plugin, make sure we read the whole packet */
+- while (read_total == data->buffer_size && !data->no_demuxer) {
+- /* multiply the buffer size and try to read again */
+- data->buffer = g_realloc (data->buffer, data->buffer_size * 2);
+- bytes_read = xmms_xform_read (xform,
+- (gchar *) data->buffer +
+- data->buffer_size,
+- data->buffer_size,
+- error);
+- data->buffer_size *= 2;
+-
+- if (bytes_read < 0) {
+- XMMS_DBG ("Error while reading data");
+- return bytes_read;
+- }
+-
+- read_total += bytes_read;
+-
+- if (read_total < data->buffer_size) {
+- /* finally double the buffer size for performance reasons, the
+- * hotspot handling likes to fit two frames in the buffer */
+- data->buffer = g_realloc (data->buffer, data->buffer_size * 2);
+- data->buffer_size *= 2;
+- XMMS_DBG ("Reallocated avcodec internal buffer to be %d bytes",
+- data->buffer_size);
+-
+- break;
+- }
+- }
+-
+- /* Update the buffer length */
+- data->buffer_length += read_total;
+- }
+-
+- packet.data = data->buffer;
+- packet.size = data->buffer_length;
+-
+- outbufsize = sizeof (outbuf);
+- bytes_read = avcodec_decode_audio3 (data->codecctx, (short *) outbuf,
+- &outbufsize, &packet);
+-
+- /* The DTS decoder of ffmpeg is buggy and always returns
+- * the input buffer length, get frame length from header */
+- if (!strcmp (data->codec_id, "dca") && bytes_read > 0) {
+- bytes_read = ((int)data->buffer[5] << 12) |
+- ((int)data->buffer[6] << 4) |
+- ((int)data->buffer[7] >> 4);
+- bytes_read = (bytes_read & 0x3fff) + 1;
+- }
+-
+- if (bytes_read < 0 || bytes_read > data->buffer_length) {
+- XMMS_DBG ("Error decoding data!");
+- return -1;
+- } else if (bytes_read != data->buffer_length) {
+- g_memmove (data->buffer,
+- data->buffer + bytes_read,
+- data->buffer_length - bytes_read);
+- }
+-
+- data->buffer_length -= bytes_read;
++ gint bytes_read;
+
+- if (outbufsize > 0) {
+- g_string_append_len (data->outbuf, outbuf, outbufsize);
++ bytes_read = xmms_avcodec_internal_read_some (xform, data, error);
++ if (bytes_read <= 0) { return bytes_read; }
+ }
+
+- size = MIN (data->outbuf->len, len);
++ res = xmms_avcodec_internal_decode_some (data);
++ if (res < 0) { return res; }
++ if (res > 0) { xmms_avcodec_internal_append (data); }
+ }
+
+ memcpy (buf, data->outbuf->str, size);
+@@ -371,8 +324,6 @@ static gint64
+ xmms_avcodec_seek (xmms_xform_t *xform, gint64 samples, xmms_xform_seek_mode_t whence, xmms_error_t *err)
+ {
+ xmms_avcodec_data_t *data;
+- char outbuf[AVCODEC_MAX_AUDIO_FRAME_SIZE];
+- gint outbufsize, bytes_read = 0;
+ gint64 ret = -1;
+
+ g_return_val_if_fail (xform, -1);
+@@ -390,23 +341,11 @@ xmms_avcodec_seek (xmms_xform_t *xform,
+
+ /* The buggy ape decoder doesn't flush buffers, so we need to finish decoding
+ * the frame before seeking to avoid segfaults... this hack sucks */
++ /* FIXME: Is ^^^ still true? */
+ while (data->buffer_length > 0) {
+- AVPacket packet;
+- av_init_packet (&packet);
+- packet.data = data->buffer;
+- packet.size = data->buffer_length;
+-
+- outbufsize = sizeof (outbuf);
+- bytes_read = avcodec_decode_audio3 (data->codecctx, (short *) outbuf,
+- &outbufsize, &packet);
+-
+- if (bytes_read < 0 || bytes_read > data->buffer_length) {
+- XMMS_DBG ("Error decoding data!");
++ if (xmms_avcodec_internal_decode_some (data) < 0) {
+ return -1;
+ }
+-
+- data->buffer_length -= bytes_read;
+- g_memmove (data->buffer, data->buffer + bytes_read, data->buffer_length);
+ }
+
+ ret = xmms_xform_seek (xform, samples, whence, err);
+@@ -420,3 +359,178 @@ xmms_avcodec_seek (xmms_xform_t *xform,
+
+ return ret;
+ }
++
++static xmms_sample_format_t
++xmms_avcodec_translate_sample_format (enum AVSampleFormat av_sample_format)
++{
++ switch (av_sample_format) {
++ case AV_SAMPLE_FMT_U8:
++ case AV_SAMPLE_FMT_U8P:
++ return XMMS_SAMPLE_FORMAT_U8;
++ case AV_SAMPLE_FMT_S16:
++ case AV_SAMPLE_FMT_S16P:
++ return XMMS_SAMPLE_FORMAT_S16;
++ case AV_SAMPLE_FMT_S32:
++ case AV_SAMPLE_FMT_S32P:
++ return XMMS_SAMPLE_FORMAT_S32;
++ case AV_SAMPLE_FMT_FLT:
++ case AV_SAMPLE_FMT_FLTP:
++ return XMMS_SAMPLE_FORMAT_FLOAT;
++ case AV_SAMPLE_FMT_DBL:
++ case AV_SAMPLE_FMT_DBLP:
++ return XMMS_SAMPLE_FORMAT_DOUBLE;
++ default:
++ XMMS_DBG ("AVSampleFormat (%i: %s) not supported.", av_sample_format,
++ av_get_sample_fmt_name (av_sample_format));
++ return XMMS_SAMPLE_FORMAT_UNKNOWN;
++ }
++}
++
++/*
++Read some data from our source of data to data->buffer, updating buffer_length
++and buffer_size as needed.
++
++Returns: on error: negative
++ on EOF: zero
++ otherwise: number of bytes read.
++*/
++static gint
++xmms_avcodec_internal_read_some (xmms_xform_t *xform,
++ xmms_avcodec_data_t *data,
++ xmms_error_t *error)
++{
++ gint bytes_read, read_total;
++
++ bytes_read = xmms_xform_read (xform,
++ (gchar *) (data->buffer + data->buffer_length),
++ data->buffer_size - data->buffer_length,
++ error);
++
++ if (bytes_read < 0) {
++ XMMS_DBG ("Error while reading data");
++ return bytes_read;
++ } else if (bytes_read == 0) {
++ XMMS_DBG ("EOF");
++ return 0;
++ }
++
++ read_total = bytes_read;
++
++ /* If we have a demuxer plugin, make sure we read the whole packet */
++ while (read_total == data->buffer_size && !data->no_demuxer) {
++ /* multiply the buffer size and try to read again */
++ data->buffer = g_realloc (data->buffer, data->buffer_size * 2);
++ bytes_read = xmms_xform_read (xform,
++ (gchar *) data->buffer +
++ data->buffer_size,
++ data->buffer_size,
++ error);
++ data->buffer_size *= 2;
++
++ if (bytes_read < 0) {
++ XMMS_DBG ("Error while reading data");
++ return bytes_read;
++ }
++
++ read_total += bytes_read;
++
++ if (read_total < data->buffer_size) {
++ /* finally double the buffer size for performance reasons, the
++ * hotspot handling likes to fit two frames in the buffer */
++ data->buffer = g_realloc (data->buffer, data->buffer_size * 2);
++ data->buffer_size *= 2;
++ XMMS_DBG ("Reallocated avcodec internal buffer to be %d bytes",
++ data->buffer_size);
++
++ break;
++ }
++ }
++
++ /* Update the buffer length */
++ data->buffer_length += read_total;
++
++ return read_total;
++}
++
++/*
++Decode some data from data->buffer[0..data->buffer_length-1] to
++data->read_out_frame
++
++Returns: on error: negative
++ on no new data produced: zero
++ otherwise: positive
++
++FIXME: data->buffer should be at least data->buffer_length +
++FF_INPUT_BUFFER_PADDING_SIZE long.
++*/
++static gint
++xmms_avcodec_internal_decode_some (xmms_avcodec_data_t *data)
++{
++ int got_frame = 0;
++ gint bytes_read = 0;
++ AVPacket packet;
++
++ av_init_packet (&packet);
++ packet.data = data->buffer;
++ packet.size = data->buffer_length;
++
++ /* clear buffers and reset fields to defaults */
++ av_frame_unref (data->read_out_frame);
++
++ bytes_read = avcodec_decode_audio4 (
++ data->codecctx, data->read_out_frame, &got_frame, &packet);
++
++ /* The DTS decoder of ffmpeg is buggy and always returns
++ * the input buffer length, get frame length from header */
++ /* FIXME: Is ^^^^ still true? */
++ if (!strcmp (data->codec_id, "dca") && bytes_read > 0) {
++ bytes_read = ((int)data->buffer[5] << 12) |
++ ((int)data->buffer[6] << 4) |
++ ((int)data->buffer[7] >> 4);
++ bytes_read = (bytes_read & 0x3fff) + 1;
++ }
++
++ if (bytes_read < 0 || bytes_read > data->buffer_length) {
++ XMMS_DBG ("Error decoding data!");
++ return -1;
++ }
++
++ if (bytes_read < data->buffer_length) {
++ data->buffer_length -= bytes_read;
++ g_memmove (data->buffer,
++ data->buffer + bytes_read,
++ data->buffer_length);
++ } else {
++ data->buffer_length = 0;
++ }
++
++ return got_frame ? 1 : 0;
++}
++
++static void
++xmms_avcodec_internal_append (xmms_avcodec_data_t *data)
++{
++ enum AVSampleFormat fmt = (enum AVSampleFormat) data->read_out_frame->format;
++ int samples = data->read_out_frame->nb_samples;
++ int channels = data->codecctx->channels;
++ int bps = av_get_bytes_per_sample (fmt);
++
++ if (av_sample_fmt_is_planar (fmt)) {
++ /* Convert from planar to packed format */
++ gint i, j;
++
++ for (i = 0; i < samples; i++) {
++ for (j = 0; j < channels; j++) {
++ g_string_append_len (
++ data->outbuf,
++ (gchar *) (data->read_out_frame->extended_data[j] + i*bps),
++ bps
++ );
++ }
++ }
++ } else {
++ g_string_append_len (data->outbuf,
++ (gchar *) data->read_out_frame->extended_data[0],
++ samples * channels * bps);
++ }
++}
diff --git a/audio/xmms2/files/patch-src_plugins_avcodec_avcodec__compat.h b/audio/xmms2/files/patch-src_plugins_avcodec_avcodec__compat.h
new file mode 100644
index 000000000000..665c4a6f01d8
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_avcodec_avcodec__compat.h
@@ -0,0 +1,69 @@
+--- src/plugins/avcodec/avcodec_compat.h.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/avcodec/avcodec_compat.h
+@@ -1,7 +1,7 @@
+ /** @file avcodec_compat.h
+ * Compatibility header for libavcodec backwards compatibility
+ *
+- * Copyright (C) 2011 XMMS2 Team
++ * Copyright (C) 2011-2014 XMMS2 Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+@@ -21,47 +21,16 @@
+ # include "avcodec.h"
+ #endif
+
+-/* Map avcodec_decode_audio2 into the deprecated version
+- * avcodec_decode_audio in versions earlier than 51.28 */
+-#if LIBAVCODEC_VERSION_INT < 0x331c00
+-# define avcodec_decode_audio2 avcodec_decode_audio
+-#endif
+-
+-/* Handle API change that happened in libavcodec 52.00 */
+-#if LIBAVCODEC_VERSION_INT < 0x340000
+-# define CONTEXT_BPS(codecctx) (codecctx)->bits_per_sample
+-#else
+-# define CONTEXT_BPS(codecctx) (codecctx)->bits_per_coded_sample
+-#endif
+-
+-/* Before 52.23 AVPacket was defined in avformat.h which we
+- * do not want to depend on, so we define part of it manually
+- * on versions smaller than 52.23 (this makes me cry) */
+-#if LIBAVCODEC_VERSION_INT < 0x341700
+-typedef struct AVPacket {
+- uint8_t *data;
+- int size;
+-} AVPacket;
+-#endif
+-
+-/* Same thing as above for av_init_packet and version 52.25 */
+-#if LIBAVCODEC_VERSION_INT < 0x341900
+-# define av_init_packet(pkt) do { \
+- (pkt)->data = NULL; \
+- (pkt)->size = 0; \
+- } while(0)
+-#endif
+-
+-/* Map avcodec_decode_audio3 into the deprecated version
+- * avcodec_decode_audio2 in versions earlier than 52.26 */
+-#if LIBAVCODEC_VERSION_INT < 0x341a00
+-# define avcodec_decode_audio3(avctx, samples, frame_size_ptr, avpkt) \
+- avcodec_decode_audio2(avctx, samples, frame_size_ptr, \
+- (avpkt)->data, (avpkt)->size)
++/* Map avcodec_free_frame to av_freep if the former doesn't exist.
++ * (This is in versions earlier than 54.28.0 (libav) or 54.59.100 (ffmpeg)) */
++#if ! HAVE_AVCODEC_FREE_FRAME
++# define avcodec_free_frame av_freep
+ #endif
+
+-/* Handle API change that happened in libavcodec 52.64 */
+-#if LIBAVCODEC_VERSION_INT < 0x344000
+-# define AVMEDIA_TYPE_AUDIO CODEC_TYPE_AUDIO
++/* Map av_frame_alloc, av_frame_unref, av_frame_free into their
++ * deprecated versions in versions earlier than 55.28.1 */
++#if LIBAVCODEC_VERSION_INT < 0x371c01
++# define av_frame_alloc avcodec_alloc_frame
++# define av_frame_unref avcodec_get_frame_defaults
++# define av_frame_free avcodec_free_frame
+ #endif
+-
diff --git a/audio/xmms2/files/patch-src_plugins_cdda_cdda.c b/audio/xmms2/files/patch-src_plugins_cdda_cdda.c
new file mode 100644
index 000000000000..f7b55f5cf915
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_cdda_cdda.c
@@ -0,0 +1,11 @@
+--- src/plugins/cdda/cdda.c.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/cdda/cdda.c
+@@ -18,7 +18,7 @@
+ #include "xmms/xmms_log.h"
+ #include "xmms/xmms_util.h"
+
+-#include <cdio/cdda.h>
++#include <cdio/paranoia/cdda.h>
+ #include <cdio/cdio.h>
+ #include <cdio/logging.h>
+ #include <discid/discid.h>
diff --git a/audio/xmms2/files/patch-src_plugins_file_wscript b/audio/xmms2/files/patch-src_plugins_file_wscript
new file mode 100644
index 000000000000..a09b4fbbd95b
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_file_wscript
@@ -0,0 +1,19 @@
+--- src/plugins/file/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/file/wscript
+@@ -1,7 +1,7 @@
+ from waftools.plugin import plugin
+
+ def plugin_build(bld, obj):
+- if bld.env.HAVE_FSTATAT and bld.env.HAVE_DIRFD:
++ if bld.env.HAVE_FSTATAT:
+ obj.source.append('browse/fstatat.c')
+ else:
+ obj.source.append('browse/gdir.c')
+@@ -9,7 +9,6 @@ def plugin_build(bld, obj):
+ def plugin_configure(conf):
+ conf.check_cc(function_name='fstatat', header_name=['fcntl.h','sys/stat.h'],
+ defines=['_ATFILE_SOURCE=1'])
+- conf.check_cc(function_name='dirfd', header_name=['dirent.h','sys/types.h'])
+
+ configure, build = plugin("file",
+ configure=plugin_configure, build=plugin_build,
diff --git a/audio/xmms2/files/patch-src_plugins_modplug_modplug.c b/audio/xmms2/files/patch-src_plugins_modplug_modplug.c
new file mode 100644
index 000000000000..4f4d24268f6e
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_modplug_modplug.c
@@ -0,0 +1,11 @@
+--- src/plugins/modplug/modplug.c.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/modplug/modplug.c
+@@ -9,7 +9,7 @@
+ #include "xmms/xmms_sample.h"
+ #include "xmms/xmms_medialib.h"
+ #include "xmms/xmms_log.h"
+-#include <modplug.h>
++#include <libmodplug/modplug.h>
+
+ #include <glib.h>
+ #include <string.h>
diff --git a/audio/xmms2/files/patch-src_plugins_musepack_wscript b/audio/xmms2/files/patch-src_plugins_musepack_wscript
new file mode 100644
index 000000000000..8c5f646cfebb
--- /dev/null
+++ b/audio/xmms2/files/patch-src_plugins_musepack_wscript
@@ -0,0 +1,11 @@
+--- src/plugins/musepack/wscript.orig 2011-10-20 19:26:08 UTC
++++ src/plugins/musepack/wscript
+@@ -8,7 +8,7 @@ def plugin_configure(conf):
+ conf.check_cc(header_name="mpcdec/mpcdec.h", defines="HAVE_MPCDEC_OLD",
+ uselib_store="mpcdec")
+
+- conf.check_cc(lib="mpcdec", uselib_store="mpcdec")
++ conf.check_cc(lib="mpcdec", uselib="math", uselib_store="mpcdec")
+
+ configure, build = plugin("musepack", configure=plugin_configure,
+ libs=["mpcdec"])
diff --git a/audio/xmms2/files/patch-wscript b/audio/xmms2/files/patch-wscript
new file mode 100644
index 000000000000..de05e67ce918
--- /dev/null
+++ b/audio/xmms2/files/patch-wscript
@@ -0,0 +1,40 @@
+--- wscript.orig 2011-10-20 19:26:08 UTC
++++ wscript
+@@ -131,7 +131,8 @@ def build(bld):
+ VERSION = bld.env.VERSION
+ )
+
+- bld.install_files('${SHAREDDIR}', "mind.in.a.box-lament_snipplet.ogg")
++ if bld.env.BUILD_XMMS2D:
++ bld.install_files('${SHAREDDIR}', "mind.in.a.box-lament_snipplet.ogg")
+
+ bld.add_post_fun(shutdown)
+
+@@ -295,9 +296,6 @@ def configure(conf):
+ conf.msg("uncommited changed", changed and "yes" or "no")
+ conf.env.VERSION = "%s (git commit: %s%s)" % (BASEVERSION, nam, dirty)
+
+- conf.env.append_unique('CFLAGS', ['-g', '-O0'])
+- conf.env.append_unique('CXXFLAGS', ['-g', '-O0'])
+-
+ if conf.options.with_profiling:
+ conf.env.with_profiling = True
+ conf.env.append_unique('CFLAGS', ['--coverage'])
+@@ -330,7 +328,7 @@ def configure(conf):
+ conf.env.PKGCONFIGDIR = conf.options.pkgconfigdir
+ Logs.pprint('Normal', conf.env.PKGCONFIGDIR) #XXX What is it ?
+ else:
+- conf.env.PKGCONFIGDIR = os.path.join(conf.env.LIBDIR, 'pkgconfig')
++ conf.env.PKGCONFIGDIR = os.path.join(conf.env.PREFIX, 'libdata', 'pkgconfig')
+
+ if conf.options.config_prefix:
+ for d in conf.options.config_prefix:
+@@ -339,6 +337,8 @@ def configure(conf):
+ conf.env.prepend_value('LIBPATH', os.path.join(d, 'lib'))
+ conf.env.prepend_value('CPPPATH', os.path.join(d, 'include'))
+
++ conf.env.prepend_value('LIBPATH', "%%WRKSRC%%/_build_/src/clients/lib/xmmsclient")
++
+ if Options.platform != 'win32':
+ conf.env.append_unique('CFLAGS_cstlib', ['-fPIC', '-DPIC'])
+ conf.env.append_unique('CPPFLAGS_cxxshlib', ['-fPIC', '-DPIC'])
diff --git a/audio/xmms2/pkg-descr b/audio/xmms2/pkg-descr
new file mode 100644
index 000000000000..2a23b090515e
--- /dev/null
+++ b/audio/xmms2/pkg-descr
@@ -0,0 +1,6 @@
+XMMS2 is a redesign of the XMMS music player. It features a client-server
+model, allowing multiple (even simultaneous!) user interfaces, both textual
+and graphical. All common audio formats are supported using plugins. On top
+of this, there is a flexible media library to organize your music.
+
+WWW: https://github.com/xmms2/wiki/wiki
diff --git a/audio/xmms2/pkg-plist b/audio/xmms2/pkg-plist
new file mode 100644
index 000000000000..b651b2b2ff27
--- /dev/null
+++ b/audio/xmms2/pkg-plist
@@ -0,0 +1,153 @@
+bin/nyxmms2
+%%VISUAL%%bin/vistest
+%%VISUAL%%bin/vistest-fft
+bin/xmms2
+%%ET%%bin/xmms2-et
+%%MDNS%%%%MDNS_AVAHI%%bin/xmms2-find-avahi
+bin/xmms2-launcher
+%%VISUAL%%bin/xmms2-libvisual
+%%MDNS%%%%MDNS_AVAHI%%bin/xmms2-mdns-avahi
+%%MDNS%%%%MDNS_APPLE%%bin/xmms2-mdns-dnssd
+%%FAM%%bin/xmms2-mlib-updater
+%%VISUAL%%%%VORBIS%%bin/xmms2-ripper
+bin/xmms2d
+%%INCLUDEDIR%%/xmms/xmms_bindata.h
+%%INCLUDEDIR%%/xmms/xmms_config.h
+%%INCLUDEDIR%%/xmms/xmms_error.h
+%%INCLUDEDIR%%/xmms/xmms_ipc.h
+%%INCLUDEDIR%%/xmms/xmms_log.h
+%%INCLUDEDIR%%/xmms/xmms_medialib.h
+%%INCLUDEDIR%%/xmms/xmms_object.h
+%%INCLUDEDIR%%/xmms/xmms_outputplugin.h
+%%INCLUDEDIR%%/xmms/xmms_plugin.h
+%%INCLUDEDIR%%/xmms/xmms_sample.h
+%%INCLUDEDIR%%/xmms/xmms_streamtype.h
+%%INCLUDEDIR%%/xmms/xmms_util.h
+%%INCLUDEDIR%%/xmms/xmms_xformplugin.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_compiler.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_errorcodes.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_idnumbers.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_ipc_msg.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_ipc_transport.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_sockets.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_stdbool.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_stdint.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_stringport.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_strlist.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_unistd.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_util.h
+%%INCLUDEDIR%%/xmmsc/xmmsc_visualization.h
+%%INCLUDEDIR%%/xmmsc/xmmsv.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_bitbuffer.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_build.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_coll.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_deprecated.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_dict.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_general.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_list.h
+%%INCLUDEDIR%%/xmmsc/xmmsv_util.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++-glib.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/bindata.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/client.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/coll.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/collection.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/config.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/dict.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/exceptions.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/helpers.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/list.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/listener.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/mainloop.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/medialib.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/playback.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/playlist.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/result.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/signal.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/stats.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/typedefs.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient++/xform.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient-cf.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient-ecore.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient-glib.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient-qt.h
+%%INCLUDEDIR%%/xmmsclient/xmmsclient.h
+lib/libxmmsclient-glib.so
+lib/libxmmsclient-glib.so.1
+lib/libxmmsclient-glib.so.1.0.0
+lib/libxmmsclient.so
+lib/libxmmsclient.so.6
+lib/libxmmsclient.so.6.0.0
+%%AIRPLAY%%%%LIBDIR%%/libxmms_airplay.so
+%%AO%%%%LIBDIR%%/libxmms_ao.so
+%%LIBDIR%%/libxmms_apefile.so
+%%LIBDIR%%/libxmms_asf.so
+%%LIBDIR%%/libxmms_asx.so
+%%AVCODEC%%%%LIBDIR%%/libxmms_avcodec.so
+%%CDDA%%%%LIBDIR%%/libxmms_cdda.so
+%%LIBDIR%%/libxmms_cue.so
+%%CURL%%%%LIBDIR%%/libxmms_curl.so
+%%LIBDIR%%/libxmms_daap.so
+%%LIBDIR%%/libxmms_diskwrite.so
+%%LIBDIR%%/libxmms_equalizer.so
+%%FAAD%%%%LIBDIR%%/libxmms_faad.so
+%%LIBDIR%%/libxmms_file.so
+%%FLAC%%%%LIBDIR%%/libxmms_flac.so
+%%LIBDIR%%/libxmms_flv.so
+%%GME%%%%LIBDIR%%/libxmms_gme.so
+%%GVFS%%%%LIBDIR%%/libxmms_gvfs.so
+%%LIBDIR%%/libxmms_html.so
+%%ICES%%%%LIBDIR%%/libxmms_ices.so
+%%CURL%%%%LIBDIR%%/libxmms_icymetaint.so
+%%LIBDIR%%/libxmms_id3v2.so
+%%JACK%%%%LIBDIR%%/libxmms_jack.so
+%%LIBDIR%%/libxmms_karaoke.so
+%%LIBDIR%%/libxmms_m3u.so
+%%APE%%%%LIBDIR%%/libxmms_mac.so
+%%MAD%%%%LIBDIR%%/libxmms_mad.so
+%%MMS%%%%LIBDIR%%/libxmms_mms.so
+%%MODPLUG%%%%LIBDIR%%/libxmms_modplug.so
+%%MPG123%%%%LIBDIR%%/libxmms_mpg123.so
+%%MUSEPACK%%%%LIBDIR%%/libxmms_musepack.so
+%%FAAD%%%%LIBDIR%%/libxmms_mp4.so
+%%LIBDIR%%/libxmms_normalize.so
+%%LIBDIR%%/libxmms_null.so
+%%LIBDIR%%/libxmms_nulstripper.so
+%%LIBDIR%%/libxmms_oss.so
+%%LIBDIR%%/libxmms_pls.so
+%%PULSEAUDIO%%%%LIBDIR%%/libxmms_pulse.so
+%%LIBDIR%%/libxmms_replaygain.so
+%%XML%%%%LIBDIR%%/libxmms_rss.so
+%%SAMBA%%%%LIBDIR%%/libxmms_samba.so
+%%SID%%%%LIBDIR%%/libxmms_sid.so
+%%SNDFILE%%%%LIBDIR%%/libxmms_sndfile.so
+%%SPEEX%%%%LIBDIR%%/libxmms_speex.so
+%%TREMOR%%%%LIBDIR%%/libxmms_tremor.so
+%%LIBDIR%%/libxmms_tta.so
+%%VOCODER%%%%LIBDIR%%/libxmms_vocoder.so
+%%VORBIS%%%%LIBDIR%%/libxmms_vorbis.so
+%%LIBDIR%%/libxmms_wave.so
+%%WAVPACK%%%%LIBDIR%%/libxmms_wavpack.so
+%%XML%%%%LIBDIR%%/libxmms_xml.so
+%%XML%%%%LIBDIR%%/libxmms_xspf.so
+libdata/pkgconfig/xmms2-client-glib.pc
+libdata/pkgconfig/xmms2-client.pc
+libdata/pkgconfig/xmms2-plugin.pc
+%%ET%%man/man1/xmms2-et.1.gz
+man/man1/xmms2-launcher.1.gz
+%%MDNS%%%%MDNS_AVAHI%%man/man1/xmms2-mdns-avahi.1.gz
+man/man1/xmms2.1.gz
+man/man1/xmms2d.1.gz
+share/pixmaps/xmms2-128.png
+share/pixmaps/xmms2-16.png
+share/pixmaps/xmms2-32.png
+share/pixmaps/xmms2-48.png
+share/pixmaps/xmms2-black-on-white.svg
+share/pixmaps/xmms2-white-on-black.svg
+share/pixmaps/xmms2.svg
+%%DATADIR%%/mind.in.a.box-lament_snipplet.ogg
+%%ET%%%%DATADIR%%/scripts/startup.d/xmms2-et-launcher.sh
+%%MDNS%%%%MDNS_AVAHI%%%%DATADIR%%/scripts/startup.d/xmms2-mdns-launcher.sh
+%%MDNS%%%%MDNS_APPLE%%%%DATADIR%%/scripts/startup.d/xmms2-mdns-launcher.sh
+%%FAM%%%%DATADIR%%/scripts/startup.d/xmms2-mlib-updater.sh
+@dir %%DATADIR%%/scripts/startup.d
diff --git a/chinese/Makefile b/chinese/Makefile
index 4caa9330887f..465da7bcc5b1 100644
--- a/chinese/Makefile
+++ b/chinese/Makefile
@@ -130,6 +130,7 @@
SUBDIR += sourcehansans-tc-otf
SUBDIR += sourcehanserif-sc-otf
SUBDIR += sourcehanserif-tc-otf
+ SUBDIR += sunpinyin
SUBDIR += taipeisanstc
SUBDIR += tin
SUBDIR += tintin++
diff --git a/chinese/sunpinyin/Makefile b/chinese/sunpinyin/Makefile
new file mode 100644
index 000000000000..9bedb7c52bee
--- /dev/null
+++ b/chinese/sunpinyin/Makefile
@@ -0,0 +1,38 @@
+# Created by: Zhihao Yuan <lichray@gmail.com>
+# $FreeBSD$
+
+PORTNAME= sunpinyin
+DISTVERSION= 2.0.4rc3
+PORTREVISION= 1
+CATEGORIES= chinese devel
+MASTER_SITES= SF/open-gram:2
+DISTFILES= lm_sc.3gm.arpa-20140820.tar.bz2:2 dict.utf8-20131214.tar.bz2:2
+
+MAINTAINER= lichray@gmail.com
+COMMENT= Statistical language model based input method engine
+
+LICENSE= LGPL21 CDDL
+LICENSE_COMB= dual
+
+LIB_DEPENDS= libsqlite3.so:databases/sqlite3
+
+USE_GITHUB= yes
+GH_TAGNAME= a8bd811
+
+MAKE_ARGS+= --prefix=${PREFIX}
+USE_LDCONFIG= yes
+USES= gmake iconv perl5 pkgconfig python:2.7 scons:python2 shebangfix
+USE_PERL5= build
+SHEBANG_FILES= python/*.py
+LDFLAGS+= -L${LOCALBASE}/lib ${ICONV_LIB}
+INSTALL_TARGET= install-lib install-headers --install-sandbox=${STAGEDIR}
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libsunpinyin.so.3.0
+ ${SETENV} PATH=${WRKSRC}/src:$${PATH} ${GMAKE} -C ${WRKDIR} \
+ -f ${WRKSRC}/src/sunpinyin-dictgen.mk STAGEDIR=${STAGEDIR}
+ ${INSTALL} -d ${STAGEDIR}${DATADIR}
+ ${INSTALL_DATA} ${WRKDIR}/lm_sc.t3g ${WRKDIR}/pydict_sc.bin \
+ ${STAGEDIR}${DATADIR}
+
+.include <bsd.port.mk>
diff --git a/chinese/sunpinyin/distinfo b/chinese/sunpinyin/distinfo
new file mode 100644
index 000000000000..40a469cdf7b0
--- /dev/null
+++ b/chinese/sunpinyin/distinfo
@@ -0,0 +1,6 @@
+SHA256 (sunpinyin-sunpinyin-2.0.4rc3-a8bd811_GH0.tar.gz) = 762575e71a5e24c4efc291407302a161ad51b8bf8902d952b54076f4511997ef
+SIZE (sunpinyin-sunpinyin-2.0.4rc3-a8bd811_GH0.tar.gz) = 547083
+SHA256 (lm_sc.3gm.arpa-20140820.tar.bz2) = 751bab7c55ea93a2cedfb0fbb7eb09f67d4da9c2c55496e5f31eb8580f1d1e2f
+SIZE (lm_sc.3gm.arpa-20140820.tar.bz2) = 36623028
+SHA256 (dict.utf8-20131214.tar.bz2) = af70bc2bcd7af7468495774fed9e3a2de434650119fbc3d3388c2bcf7e0acb01
+SIZE (dict.utf8-20131214.tar.bz2) = 674512
diff --git a/chinese/sunpinyin/files/patch-SConstruct b/chinese/sunpinyin/files/patch-SConstruct
new file mode 100644
index 000000000000..ffd859c026ff
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-SConstruct
@@ -0,0 +1,34 @@
+--- SConstruct.orig 2014-11-14 14:17:48 UTC
++++ SConstruct
+@@ -215,10 +215,11 @@ def CreateEnvironment():
+ make = 'gmake'
+ tar = 'gtar'
+ libln_builder = Builder(action='cd ${TARGET.dir} && ln -s ${SOURCE.name} ${TARGET.name}')
+- env = Environment(ENV=os.environ, CFLAGS=cflags, CXXFLAGS='',
++ env = Environment(ENV=os.environ,
+ MAKE=make, WGET=wget, W3M=w3m, TAR=tar,
+- CPPPATH=['.'] + allinc(),
+- tools=['default', 'textfile'])
++ tools=['default', 'textfile'],
++ **ARGUMENTS)
++ env['CPPPATH'] = ['.'] + allinc()
+ env.Append(BUILDERS={'InstallAsSymlink': libln_builder})
+ env['ENDIANNESS'] = "be" if sys.byteorder == "big" else "le"
+ return env
+@@ -375,7 +376,6 @@ def DoConfigure():
+ conf.CheckFunc('getopt_long')
+ conf.CheckFunc('getpagesize')
+ conf.CheckFunc('get_opt')
+- conf.CheckCHeader('iconv.h')
+ conf.CheckCHeader('inttypes.h')
+ conf.CheckCHeader('locale.h')
+ conf.CheckCHeader('libintl.h')
+@@ -463,7 +463,7 @@ def DoInstall():
+ lib_target_bin),
+ ]
+
+- lib_pkgconfig_target = env.Install(os.path.join(libdir, 'pkgconfig'),
++ lib_pkgconfig_target = env.Install(os.path.join(env['PREFIX'], 'libdata/pkgconfig'),
+ ['sunpinyin-2.0.pc'])
+ bin_target = env.Install(bindir, bins)
+ man1_target = env.Install(man1dir, man1s)
diff --git a/chinese/sunpinyin/files/patch-man_SConscript b/chinese/sunpinyin/files/patch-man_SConscript
new file mode 100644
index 000000000000..e04f8c8623af
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-man_SConscript
@@ -0,0 +1,11 @@
+--- man/SConscript.orig 2014-11-14 14:17:48 UTC
++++ man/SConscript
+@@ -1,7 +1,7 @@
+ import os
+ Import('env')
+
+-pod2man = Builder(action = 'pod2man < $SOURCE > $TARGET')
++pod2man = Builder(action = 'pod2man $SOURCE $TARGET')
+ env.Append(BUILDERS = {'Man': pod2man})
+
+ env.Man('mmseg.1', 'mmseg.pod')
diff --git a/chinese/sunpinyin/files/patch-src_ime-core_imi__winHandler.cpp b/chinese/sunpinyin/files/patch-src_ime-core_imi__winHandler.cpp
new file mode 100644
index 000000000000..74fdf4f2fa59
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-src_ime-core_imi__winHandler.cpp
@@ -0,0 +1,18 @@
+--- src/ime-core/imi_winHandler.cpp.orig 2014-11-14 14:17:48 UTC
++++ src/ime-core/imi_winHandler.cpp
+@@ -87,6 +87,7 @@ CIMIWinHandler::throwBackKey(unsigned ke
+ void
+ CIMIWinHandler::updateStatus(int key, int value)
+ {
++#ifdef DEBUG
+ switch (key) {
+ case STATUS_ID_CN:
+ printf("CN status is "); break;
+@@ -101,6 +102,7 @@ CIMIWinHandler::updateStatus(int key, in
+
+ printf("%d\n", value);
+ fflush(stdout);
++#endif
+ }
+
+ // -*- indent-tabs-mode: nil -*- vim:et:ts=4
diff --git a/chinese/sunpinyin/files/patch-src_portability.h b/chinese/sunpinyin/files/patch-src_portability.h
new file mode 100644
index 000000000000..93c117af2c66
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-src_portability.h
@@ -0,0 +1,10 @@
+--- src/portability.h.orig 2014-11-14 14:17:48 UTC
++++ src/portability.h
+@@ -42,6 +42,7 @@
+ #include <stdio.h>
+ #include <math.h>
+ #include <stdint.h>
++#include <stdlib.h>
+ #include <string>
+ #include <cstring>
+
diff --git a/chinese/sunpinyin/files/patch-src_slm_thread_slmthread.cpp b/chinese/sunpinyin/files/patch-src_slm_thread_slmthread.cpp
new file mode 100644
index 000000000000..723c45843d74
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-src_slm_thread_slmthread.cpp
@@ -0,0 +1,17 @@
+--- src/slm/thread/slmthread.cpp.orig 2014-11-14 14:17:48 UTC
++++ src/slm/thread/slmthread.cpp
+@@ -250,10 +250,10 @@ main(int argc, char* argv[])
+
+ bool usingLogPr = slm.isUseLogPr();
+
+- #define EffectivePr(a) (float((usingLogPr) ? ((a) / log(2.0)) : (-log2((a)))))
+- #define OriginalPr(b) (float((usingLogPr) ? ((b) * log(2.0)) : (exp2(-(b)))))
+- #define EffectiveBow(a) (float((usingLogPr) ? (exp(-(a))) : ((a))))
+- #define OriginalBow(b) (float((usingLogPr) ? (-log((b))) : ((b))))
++ #define EffectivePr(a) (float((usingLogPr) ? ((a) / logf(2.0f)) : (-log2f((a)))))
++ #define OriginalPr(b) (float((usingLogPr) ? ((b) * logf(2.0f)) : (exp2f(-(b)))))
++ #define EffectiveBow(a) (float((usingLogPr) ? (expf(-(a))) : ((a))))
++ #define OriginalBow(b) (float((usingLogPr) ? (-logf((b))) : ((b))))
+
+ printf("\nfirst pass..."); fflush(stdout);
+ for (int lvl = 0; lvl <= slm.getN(); ++lvl) {
diff --git a/chinese/sunpinyin/files/patch-src_sunpinyin-dictgen.mk.in b/chinese/sunpinyin/files/patch-src_sunpinyin-dictgen.mk.in
new file mode 100644
index 000000000000..4372c17738ef
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-src_sunpinyin-dictgen.mk.in
@@ -0,0 +1,26 @@
+--- src/sunpinyin-dictgen.mk.in.orig 2014-11-14 14:17:48 UTC
++++ src/sunpinyin-dictgen.mk.in
+@@ -42,22 +42,7 @@ DL_ROOT = ${DL_HOST}/open-gram
+ DICT_PAT = 'dict\.utf8-[0-9]\+.tar.bz2'
+ SLM_PAT = 'lm_sc\.3gm\.arpa-[0-9]\+.tar.bz2'
+
+-DICT_AR = $(shell ${W3M} ${DL_LIST} | grep -o ${DICT_PAT} | sort | tail -n 1)
+-SLM_AR = $(shell ${W3M} ${DL_LIST} | grep -o ${SLM_PAT} | sort | tail -n 1)
+-
+-all: install
+-
+-${DICT_AR}:
+- ${WGET} ${DL_ROOT}/$@
+-
+-dict.utf8: ${DICT_AR}
+- ${TAR} xmf $^
+-
+-${SLM_AR}:
+- ${WGET} ${DL_ROOT}/$@
+-
+-lm_sc.3gm.arpa: ${SLM_AR}
+- ${TAR} xmf $^
++all: lm_sc.t3g pydict_sc.bin
+
+ lm_sc.3gm: lm_sc.3gm.arpa dict.utf8
+ slmpack $^ $@
diff --git a/chinese/sunpinyin/files/patch-xdg b/chinese/sunpinyin/files/patch-xdg
new file mode 100644
index 000000000000..452c3aacb46f
--- /dev/null
+++ b/chinese/sunpinyin/files/patch-xdg
@@ -0,0 +1,35 @@
+--- src/ime-core/imi_options.cpp.orig 2014-11-14 14:17:48 UTC
++++ src/ime-core/imi_options.cpp
+@@ -73,12 +73,15 @@ CSimplifiedChinesePolicy::loadResources(
+
+ if (!m_user_data_dir.size()) {
+ char path[256];
+- const char *home = getenv("HOME");
+- snprintf(path,
+- sizeof(path),
+- "%s/%s",
+- home,
+- SUNPINYIN_USERDATA_DIR_PREFIX);
++ const char *home = getenv("XDG_CONFIG_HOME");
++ if (home == NULL)
++ snprintf(path, sizeof(path),
++ "%s/.config/%s", getenv("HOME"),
++ SUNPINYIN_USERDATA_DIR_PREFIX);
++ else
++ snprintf(path, sizeof(path),
++ "%s/%s", home,
++ SUNPINYIN_USERDATA_DIR_PREFIX);
+ m_user_data_dir = path;
+ }
+
+--- src/ime-core/imi_options.h.orig 2014-11-14 14:17:48 UTC
++++ src/ime-core/imi_options.h
+@@ -52,7 +52,7 @@
+ #include "pinyin/hunpin_seg.h"
+
+ #ifndef SUNPINYIN_USERDATA_DIR_PREFIX
+-#define SUNPINYIN_USERDATA_DIR_PREFIX ".sunpinyin"
++#define SUNPINYIN_USERDATA_DIR_PREFIX "sunpinyin"
+ #endif
+
+ struct CSimplifiedChinesePolicy : public IConfigurable {
diff --git a/chinese/sunpinyin/pkg-descr b/chinese/sunpinyin/pkg-descr
new file mode 100644
index 000000000000..5e010cf93aa0
--- /dev/null
+++ b/chinese/sunpinyin/pkg-descr
@@ -0,0 +1,5 @@
+SunPinyin is a statistical language model based Chinese input method, which
+was firstly developed by Sun Beijing Globalization team, and opensource'd
+to community with OpenSolaris project, with LGPLv2 and CDDL dual-licenses.
+
+WWW: http://code.google.com/p/sunpinyin/
diff --git a/chinese/sunpinyin/pkg-plist b/chinese/sunpinyin/pkg-plist
new file mode 100644
index 000000000000..9d178553e762
--- /dev/null
+++ b/chinese/sunpinyin/pkg-plist
@@ -0,0 +1,51 @@
+include/sunpinyin-2.0/ime-core/ic_history.h
+include/sunpinyin-2.0/ime-core/imi_context.h
+include/sunpinyin-2.0/ime-core/imi_data.h
+include/sunpinyin-2.0/ime-core/imi_defines.h
+include/sunpinyin-2.0/ime-core/imi_funcobjs.h
+include/sunpinyin-2.0/ime-core/imi_glibHandler.h
+include/sunpinyin-2.0/ime-core/imi_keys.h
+include/sunpinyin-2.0/ime-core/imi_option_event.h
+include/sunpinyin-2.0/ime-core/imi_option_keys.h
+include/sunpinyin-2.0/ime-core/imi_options.h
+include/sunpinyin-2.0/ime-core/imi_uiobjects.h
+include/sunpinyin-2.0/ime-core/imi_view.h
+include/sunpinyin-2.0/ime-core/imi_view_classic.h
+include/sunpinyin-2.0/ime-core/imi_winHandler.h
+include/sunpinyin-2.0/ime-core/lattice_states.h
+include/sunpinyin-2.0/ime-core/userdict.h
+include/sunpinyin-2.0/ime-core/utils.h
+include/sunpinyin-2.0/lexicon/pytrie.h
+include/sunpinyin-2.0/lexicon/pytrie_gen.h
+include/sunpinyin-2.0/lexicon/trie_writer.h
+include/sunpinyin-2.0/pinyin/datrie.h
+include/sunpinyin-2.0/pinyin/datrie_impl.h
+include/sunpinyin-2.0/pinyin/hunpin_seg.h
+include/sunpinyin-2.0/pinyin/pinyin_data.h
+include/sunpinyin-2.0/pinyin/pinyin_seg.h
+include/sunpinyin-2.0/pinyin/quanpin_trie.h
+include/sunpinyin-2.0/pinyin/segmentor.h
+include/sunpinyin-2.0/pinyin/shuangpin_data.h
+include/sunpinyin-2.0/pinyin/shuangpin_seg.h
+include/sunpinyin-2.0/pinyin/syllable.h
+include/sunpinyin-2.0/portability.h
+include/sunpinyin-2.0/slm/ids2ngram/idngram.h
+include/sunpinyin-2.0/slm/ids2ngram/idngram_merge.h
+include/sunpinyin-2.0/slm/sim_dict.h
+include/sunpinyin-2.0/slm/sim_fmerge.h
+include/sunpinyin-2.0/slm/sim_sen.h
+include/sunpinyin-2.0/slm/sim_slm.h
+include/sunpinyin-2.0/slm/slm.h
+include/sunpinyin-2.0/slm/slmbuild/sim_slmbuilder.h
+include/sunpinyin-2.0/slm/slmpack/arpa_slm.h
+include/sunpinyin-2.0/slm/slmpack/common.h
+include/sunpinyin-2.0/slm/thread/ValueCompress.h
+include/sunpinyin-2.0/slm/tslmendian/slm_file.h
+include/sunpinyin-2.0/slm/tslmendian/writer.h
+include/sunpinyin-2.0/sunpinyin.h
+lib/libsunpinyin.so
+lib/libsunpinyin.so.3
+lib/libsunpinyin.so.3.0
+libdata/pkgconfig/sunpinyin-2.0.pc
+%%DATADIR%%/lm_sc.t3g
+%%DATADIR%%/pydict_sc.bin
diff --git a/databases/Makefile b/databases/Makefile
index d925297f4754..a4425b7724c3 100644
--- a/databases/Makefile
+++ b/databases/Makefile
@@ -21,6 +21,8 @@
SUBDIR += apq-mysql
SUBDIR += apq-odbc
SUBDIR += apq-pgsql
+ SUBDIR += arangodb32
+ SUBDIR += arangodb33
SUBDIR += arrow
SUBDIR += ateam_mysql57_ldap_auth
SUBDIR += ateam_mysql_ldap_auth
diff --git a/databases/arangodb32/Makefile b/databases/arangodb32/Makefile
new file mode 100644
index 000000000000..15810fadc67b
--- /dev/null
+++ b/databases/arangodb32/Makefile
@@ -0,0 +1,51 @@
+# Created by: Vlad Galu <galu@packetdam.com>
+# $FreeBSD$
+
+PORTNAME= arangodb
+DISTVERSIONPREFIX= v
+DISTVERSION= 3.2.13
+PORTREVISION= 1
+CATEGORIES= databases net
+PKGNAMESUFFIX= 32
+
+MAINTAINER= dev@dudu.ro
+COMMENT= Distributed NoSQL database with multiple data models
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS= amd64
+ONLY_FOR_ARCHS_REASON= "Only builds on amd64"
+USES= gmake ssl cmake:noninja python:2.7 compiler
+USE_GITHUB= yes
+
+CMAKE_ARGS= -DUSE_JEMALLOC:BOOL=off \
+ -DUSE_BACKTRACE:BOOL=on \
+ -DBASE_LD_FLAGS:STRING="-L${BUILD_WRKSRC}/3rdParty/V8/v5.7.492.77/x64.release/obj.target/src -L${BUILD_WRKSRC}/3rdParty/V8/v5.7.492.77/x64.release/obj.target/third_party/icu -L${LOCALBASE}/lib -L/usr/lib"
+
+USERS= arangodb
+GROUPS= arangodb
+USE_RC_SUBR= arangod
+
+OPTIONS_DEFINE= DOCS
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1200057
+SUB_LIST+= LEGACY_LIMITS="@comment " MODERN_LIMITS=""
+.else
+SUB_LIST+= LEGACY_LIMITS="" MODERN_LIMITS="@comment "
+.endif
+
+post-install:
+ ${REINPLACE_CMD} -e 's|/usr/local/var/lib/arangodb3|/var/db/arangodb|g' ${STAGEDIR}${PREFIX}/etc/arangodb/*.conf
+ ${REINPLACE_CMD} -e 's|/usr/local/var/log/arangodb3|/var/log/arangodb|g' ${STAGEDIR}${PREFIX}/etc/arangodb/arangod.conf
+ ${FIND} ${STAGEDIR}${PREFIX}/etc/arangodb/ -type f -name *.conf -exec ${MV} {} {}.sample \;
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var/lib/arangodb
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var/lib/arangodb-apps
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var/lib
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var/log/arangodb
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var/log
+ ${RMDIR} ${STAGEDIR}${PREFIX}/var
+
+.include <bsd.port.mk>
diff --git a/databases/arangodb32/distinfo b/databases/arangodb32/distinfo
new file mode 100644
index 000000000000..f8a020816194
--- /dev/null
+++ b/databases/arangodb32/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1524145771
+SHA256 (arangodb-arangodb-v3.2.13_GH0.tar.gz) = 83784358c91f7163a47ec509ac4e527dc659182cfa8678b044da1b50c3e381fd
+SIZE (arangodb-arangodb-v3.2.13_GH0.tar.gz) = 144636599
diff --git a/databases/arangodb32/files/arangod.in b/databases/arangodb32/files/arangod.in
new file mode 100644
index 000000000000..a71bc94b6f90
--- /dev/null
+++ b/databases/arangodb32/files/arangod.in
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# PROVIDE: arangod
+# REQUIRE: NETWORK ldconfig
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# arangod_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable arangod.
+%%LEGACY_LIMITS%%# arangod_limits (bool): Set to "NO" by default.
+%%LEGACY_LIMITS%%# Set it to yes to run `limits -e -U arangodb`
+%%LEGACY_LIMITS%%# just before arangod starts.
+# arangod_dbpath (str): Default to "/var/db/arangodb"
+# Base database directory.
+# arangod_logpath (str): Default to "/var/log/arangodb"
+# Base logging directory
+# arangod_apppath (str): Default to "/var/db/arangodb-apps"
+# Base apps directory
+# arangod_flags (str): Custom additional arguments to be passed to arangod.
+# Default to "".
+# arangod_config (str): Default to "%%PREFIX%%/etc/arangodb/arangod.conf"
+# Path to config file
+#
+
+. /etc/rc.subr
+
+name="arangod"
+rcvar=arangod_enable
+
+load_rc_config $name
+
+: ${arangod_enable="NO"}
+%%LEGACY_LIMITS%%: ${arangod_limits="NO"}
+: ${arangod_dbpath="/var/db/arangodb"}
+: ${arangod_logpath="/var/log/arangodb"}
+: ${arangod_apppath="/var/db/arangodb-apps"}
+: ${arangod_flags=""}
+: ${arangod_user="arangodb"}
+: ${arangod_group="arangodb"}
+: ${arangod_config="%%PREFIX%%/etc/arangodb/arangod.conf"}
+
+pidfile="${arangod_dbpath}/arangod.lock"
+command=%%PREFIX%%/sbin/${name}
+command_args="--configuration $arangod_config --database.directory $arangod_dbpath --log.output ${arangod_logpath}/arangod.log --javascript.app-path ${arangod_apppath} --daemon --pid-file ${pidfile} >/dev/null 2>/dev/null"
+start_precmd="${name}_prestart"
+
+arangod_create_dbpath()
+{
+ mkdir ${arangod_dbpath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_dbpath}
+}
+
+arangod_create_logpath()
+{
+ mkdir ${arangod_logpath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_logpath}
+}
+
+arangod_create_apppath()
+{
+ mkdir ${arangod_apppath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_apppath}
+}
+
+arangod_prestart()
+{
+ if [ ! -d ${arangod_dbpath} ]; then
+ arangod_create_dbpath || return 1
+ fi
+ if [ ! -d ${arangod_logpath} ]; then
+ arangod_create_logpath || return 1
+ fi
+ if [ ! -d ${arangod_apppath} ]; then
+ arangod_create_apppath || return 1
+ fi
+%%LEGACY_LIMITS%% if checkyesno arangod_limits; then
+%%LEGACY_LIMITS%% eval `/usr/bin/limits -e -U ${arangod_user}` 2>/dev/null
+%%LEGACY_LIMITS%% else
+%%LEGACY_LIMITS%% return 0
+%%LEGACY_LIMITS%% fi
+%%MODERN_LIMITS%% return 0
+}
+
+run_rc_command "$1"
diff --git a/databases/arangodb32/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h b/databases/arangodb32/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h
new file mode 100644
index 000000000000..332a42556ea4
--- /dev/null
+++ b/databases/arangodb32/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h
@@ -0,0 +1,28 @@
+In file included from rocksdb/utilities/backupable/backupable_db.cc:16:
+rocksdb/util/channel.h:35:33: error: no matching constructor for initialization of 'std::lock_guard<std::mutex>'
+ std::lock_guard<std::mutex> lk(lock_);
+ ^ ~~~~~
+/usr/include/c++/v1/__mutex_base:90:14: note: candidate constructor not viable: 1st argument ('const std::mutex') would lose const qualifier
+ explicit lock_guard(mutex_type& __m) _LIBCPP_THREAD_SAFETY_ANNOTATION(acquire_capability(__m))
+ ^
+/usr/include/c++/v1/__mutex_base:100:5: note: candidate constructor not viable: no known conversion from 'const std::mutex' to 'const std::__1::lock_guard<std::__1::mutex>' for 1st argument
+ lock_guard(lock_guard const&) _LIBCPP_EQUAL_DELETE;
+ ^
+/usr/include/c++/v1/__mutex_base:94:5: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
+ lock_guard(mutex_type& __m, adopt_lock_t) _LIBCPP_THREAD_SAFETY_ANNOTATION(requires_capability(__m))
+ ^
+1 error generated.
+
+https://github.com/facebook/rocksdb/commit/a796c06fef6a8e43d793f8e627db3f29e6f95964
+
+--- 3rdParty/rocksdb/v5.6.X/util/channel.h.orig 2018-04-13 11:22:33 UTC
++++ 3rdParty/rocksdb/v5.6.X/util/channel.h
+@@ -62,7 +62,7 @@ class channel {
+
+ private:
+ std::condition_variable cv_;
+- std::mutex lock_;
++ mutable std::mutex lock_;
+ std::queue<T> buffer_;
+ bool eof_;
+ };
diff --git a/databases/arangodb32/files/patch-CMakeLists.txt b/databases/arangodb32/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..05d422b21018
--- /dev/null
+++ b/databases/arangodb32/files/patch-CMakeLists.txt
@@ -0,0 +1,43 @@
+--- CMakeLists.txt.orig 2018-04-11 15:16:11 UTC
++++ CMakeLists.txt
+@@ -38,9 +38,9 @@ if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
+ endif ()
+
+ if (WIN32)
+- project(arangodb3 CXX C)
++ project(arangodb CXX C)
+ else ()
+- project(arangodb3 CXX C ASM)
++ project(arangodb CXX C ASM)
+ endif ()
+
+ # required for clang completion in editors
+@@ -377,7 +377,7 @@ if (CMAKE_COMPILER_IS_GNUCC OR APPLE)
+ endif ()
+
+ if (CMAKE_COMPILER_IS_CLANG)
+- if (APPLE)
++ if (APPLE OR FREEBSD)
+ set(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} -stdlib=libc++")
+ add_definitions("-Wno-deprecated-declarations")
+ else ()
+@@ -483,7 +483,7 @@ else ()
+
+ include(VcMacros)
+
+- option(USE_OPTIMIZE_FOR_ARCHITECTURE "try to determine CPU architecture" ON)
++ option(USE_OPTIMIZE_FOR_ARCHITECTURE "try to determine CPU architecture" OFF)
+
+ if (USE_OPTIMIZE_FOR_ARCHITECTURE)
+ # mop: core2 (merom) is our absolute minimum!
+@@ -594,9 +594,7 @@ endif ()
+ ################################################################################
+
+ if (NOT WINDOWS)
+- set(SYS_LIBS ${SYS_LIBS} resolv)
+-
+- if (NOT DARWIN)
++ if (NOT DARWIN OR FREEBSD)
+ set(SYS_LIBS ${SYS_LIBS} rt)
+ endif ()
+ endif ()
diff --git a/databases/arangodb32/files/patch-arangod_Agency_Store.cpp b/databases/arangodb32/files/patch-arangod_Agency_Store.cpp
new file mode 100644
index 000000000000..5860dfdcd0fd
--- /dev/null
+++ b/databases/arangodb32/files/patch-arangod_Agency_Store.cpp
@@ -0,0 +1,11 @@
+--- arangod/Agency/Store.cpp.orig 2017-11-15 11:23:07 UTC
++++ arangod/Agency/Store.cpp
+@@ -601,7 +601,7 @@ void Store::dumpToBuilder(Builder& build
+ auto ts = std::chrono::duration_cast<std::chrono::seconds>(
+ i.first.time_since_epoch())
+ .count();
+- builder.add(i.second, VPackValue(ts));
++ builder.add(i.second, VPackValue((int64_t)ts));
+ }
+ }
+ {
diff --git a/databases/arangodb32/files/patch-arangod_RestHandler_RestAuthHandler.cpp b/databases/arangodb32/files/patch-arangod_RestHandler_RestAuthHandler.cpp
new file mode 100644
index 000000000000..b3134688347a
--- /dev/null
+++ b/databases/arangodb32/files/patch-arangod_RestHandler_RestAuthHandler.cpp
@@ -0,0 +1,11 @@
+--- arangod/RestHandler/RestAuthHandler.cpp.orig 2017-11-15 11:23:07 UTC
++++ arangod/RestHandler/RestAuthHandler.cpp
+@@ -59,7 +59,7 @@ std::string RestAuthHandler::generateJwt
+ VPackObjectBuilder p(&bodyBuilder);
+ bodyBuilder.add("preferred_username", VPackValue(username));
+ bodyBuilder.add("iss", VPackValue("arangodb"));
+- bodyBuilder.add("exp", VPackValue(exp.count()));
++ bodyBuilder.add("exp", VPackValue((int64_t)exp.count()));
+ }
+ return authentication->authInfo()->generateJwt(bodyBuilder);
+ }
diff --git a/databases/arangodb32/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp b/databases/arangodb32/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp
new file mode 100644
index 000000000000..1b8be3c36734
--- /dev/null
+++ b/databases/arangodb32/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp
@@ -0,0 +1,25 @@
+--- arangod/RocksDBEngine/RocksDBThrottle.cpp.orig 2018-01-05 13:56:52 UTC
++++ arangod/RocksDBEngine/RocksDBThrottle.cpp
+@@ -515,8 +515,8 @@ void RocksDBThrottle::AdjustThreadPriori
+ pid_t tid;
+ int ret_val;
+
+- tid = syscall(SYS_gettid);
+- if (-1!=(int)tid)
++ ret_val = syscall(SYS_thr_self, &tid);
++ if (-1!=ret_val)
+ {
+ errno=0;
+ ret_val=getpriority(PRIO_PROCESS, tid);
+@@ -534,8 +534,9 @@ void RocksDBThrottle::AdjustThreadPriori
+ && (gThreadPriority._basePriority+Adjustment)!=gThreadPriority._currentPriority) {
+
+ pid_t tid;
+- tid = syscall(SYS_gettid);
+- if (-1!=(int)tid)
++ int ret_val;
++ ret_val = syscall(SYS_thr_self, &tid);
++ if (-1!=(int)ret_val)
+ {
+ gThreadPriority._currentPriority = gThreadPriority._basePriority + Adjustment;
+ setpriority(PRIO_PROCESS, tid, gThreadPriority._currentPriority);
diff --git a/databases/arangodb32/files/patch-cmake_ArangoDBInstall.cmake b/databases/arangodb32/files/patch-cmake_ArangoDBInstall.cmake
new file mode 100644
index 000000000000..91a7456014ad
--- /dev/null
+++ b/databases/arangodb32/files/patch-cmake_ArangoDBInstall.cmake
@@ -0,0 +1,11 @@
+--- cmake/ArangoDBInstall.cmake.orig 2017-11-16 20:17:40 UTC
++++ cmake/ArangoDBInstall.cmake
+@@ -100,7 +100,7 @@ endif ()
+
+ install(
+ DIRECTORY
+- ${PROJECT_BINARY_DIR}/var/log/arangodb3
++ ${PROJECT_BINARY_DIR}/var/log/arangodb
+ DESTINATION
+ ${CMAKE_INSTALL_LOCALSTATEDIR}/log
+ )
diff --git a/databases/arangodb32/files/patch-lib_Basics_ArangoGlobalContext.cpp b/databases/arangodb32/files/patch-lib_Basics_ArangoGlobalContext.cpp
new file mode 100644
index 000000000000..1e656e16fc88
--- /dev/null
+++ b/databases/arangodb32/files/patch-lib_Basics_ArangoGlobalContext.cpp
@@ -0,0 +1,14 @@
+--- lib/Basics/ArangoGlobalContext.cpp.orig 2018-04-12 13:04:01 UTC
++++ lib/Basics/ArangoGlobalContext.cpp
+@@ -145,10 +145,9 @@ ArangoGlobalContext::ArangoGlobalContext
+ #ifndef __GLIBC__
+ // Increase default stack size for libmusl:
+ pthread_attr_t a;
+- memset(&a, 0, sizeof(pthread_attr_t));
++ pthread_attr_init(&a);
+ pthread_attr_setstacksize(&a, 8*1024*1024); // 8MB as in glibc
+ pthread_attr_setguardsize(&a, 4096); // one page
+- pthread_setattr_default_np(&a);
+ #endif
+ #endif
+ #endif
diff --git a/databases/arangodb32/files/patch-lib_Basics_process-utils.cpp b/databases/arangodb32/files/patch-lib_Basics_process-utils.cpp
new file mode 100644
index 000000000000..895a1f4ad680
--- /dev/null
+++ b/databases/arangodb32/files/patch-lib_Basics_process-utils.cpp
@@ -0,0 +1,52 @@
+--- lib/Basics/process-utils.cpp.orig 2017-11-15 11:23:07 UTC
++++ lib/Basics/process-utils.cpp
+@@ -23,7 +23,7 @@
+
+ #include "process-utils.h"
+
+-#if defined(TRI_HAVE_MACOS_MEM_STATS)
++#if defined(TRI_HAVE_MACOS_MEM_STATS) || defined (__FreeBSD__)
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #endif
+@@ -581,6 +581,7 @@ TRI_process_info_t TRI_ProcessInfoSelf()
+ }
+
+ #else
++#ifdef _WIN32
+ /// --------------------------------------------
+ /// transform a file time to timestamp
+ /// Particularities:
+@@ -673,6 +674,7 @@ TRI_process_info_t TRI_ProcessInfoSelf()
+ return result;
+ }
+ #endif
++#endif
+
+ ////////////////////////////////////////////////////////////////////////////////
+ /// @brief returns information about the process
+@@ -1254,7 +1256,7 @@ bool TRI_ContinueExternalProcess(TRI_ext
+ /// @brief gets the physical memory
+ ////////////////////////////////////////////////////////////////////////////////
+
+-#if defined(TRI_HAVE_MACOS_MEM_STATS)
++#if defined(TRI_HAVE_MACOS_MEM_STATS) || defined(__FreeBSD__)
+
+ static uint64_t GetPhysicalMemory() {
+ int mib[2];
+@@ -1297,6 +1299,7 @@ static uint64_t GetPhysicalMemory() {
+
+ #else
+
++#ifdef _WIN32
+ static uint64_t GetPhysicalMemory() {
+ PROCESS_MEMORY_COUNTERS pmc;
+ memset(&result, 0, sizeof(result));
+@@ -1307,6 +1310,7 @@ static uint64_t GetPhysicalMemory() {
+ }
+ return 0;
+ }
++#endif // _WIN32
+ #endif
+ #endif
+ #endif
diff --git a/databases/arangodb32/files/patch-lib_Basics_socket-utils.h b/databases/arangodb32/files/patch-lib_Basics_socket-utils.h
new file mode 100644
index 000000000000..0bb3c0dd8b6b
--- /dev/null
+++ b/databases/arangodb32/files/patch-lib_Basics_socket-utils.h
@@ -0,0 +1,15 @@
+--- lib/Basics/socket-utils.h.orig 2017-11-15 11:23:07 UTC
++++ lib/Basics/socket-utils.h
+@@ -31,6 +31,12 @@
+ #include <WS2tcpip.h>
+ #endif
+
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#endif
++
+ ////////////////////////////////////////////////////////////////////////////////
+ /// @brief socket types
+ ////////////////////////////////////////////////////////////////////////////////
diff --git a/databases/arangodb32/files/patch-lib_Logger_LogAppenderSyslog.cpp b/databases/arangodb32/files/patch-lib_Logger_LogAppenderSyslog.cpp
new file mode 100644
index 000000000000..8d31e1dd1545
--- /dev/null
+++ b/databases/arangodb32/files/patch-lib_Logger_LogAppenderSyslog.cpp
@@ -0,0 +1,11 @@
+--- lib/Logger/LogAppenderSyslog.cpp.orig 2018-04-12 15:37:36 UTC
++++ lib/Logger/LogAppenderSyslog.cpp
+@@ -62,7 +62,7 @@ LogAppenderSyslog::LogAppenderSyslog(std
+ if ('0' <= facility[0] && facility[0] <= '9') {
+ value = StringUtils::int32(facility);
+ } else {
+- CODE* ptr = reinterpret_cast<CODE*>(facilitynames);
++ const CODE* ptr = reinterpret_cast<const CODE*>(facilitynames);
+
+ while (ptr->c_name != 0) {
+ if (strcmp(ptr->c_name, facility.c_str()) == 0) {
diff --git a/databases/arangodb32/pkg-descr b/databases/arangodb32/pkg-descr
new file mode 100644
index 000000000000..9c83131f5380
--- /dev/null
+++ b/databases/arangodb32/pkg-descr
@@ -0,0 +1,5 @@
+ArangoDB is a native multi-model database with flexible data models for
+documents, graphs, and key-values. Build high performance applications
+using a convenient SQL-like query language or JavaScript extensions
+
+WWW: https://www.arangodb.com
diff --git a/databases/arangodb32/pkg-plist b/databases/arangodb32/pkg-plist
new file mode 100644
index 000000000000..b6a5840f63ff
--- /dev/null
+++ b/databases/arangodb32/pkg-plist
@@ -0,0 +1,4807 @@
+bin/arangobench
+bin/arangodump
+bin/arangoexport
+bin/arangoimp
+bin/arangorestore
+bin/arangosh
+bin/arangovpack
+bin/foxx-manager
+@sample %%ETCDIR%%/arango-dfdb.conf.sample
+@sample %%ETCDIR%%/arango-init-database.conf.sample
+@sample %%ETCDIR%%/arango-secure-installation.conf.sample
+@sample %%ETCDIR%%/arangobench.conf.sample
+@sample %%ETCDIR%%/arangod.conf.sample
+@sample %%ETCDIR%%/arangodump.conf.sample
+@sample %%ETCDIR%%/arangoexport.conf.sample
+@sample %%ETCDIR%%/arangoimp.conf.sample
+@sample %%ETCDIR%%/arangorestore.conf.sample
+@sample %%ETCDIR%%/arangosh.conf.sample
+@sample %%ETCDIR%%/foxx-manager.conf.sample
+share/man/man1/arangobench.1.gz
+share/man/man1/arangodump.1.gz
+share/man/man1/arangoexport.1.gz
+share/man/man1/arangoimp.1.gz
+share/man/man1/arangorestore.1.gz
+share/man/man1/arangosh.1.gz
+share/man/man8/arango-dfdb.8.gz
+share/man/man8/arangod.8.gz
+share/man/man8/foxx-manager.8.gz
+share/man/man8/rcarangod.8.gz
+sbin/arango-dfdb
+sbin/arango-init-database
+sbin/arango-secure-installation
+sbin/arangod
+%%DATADIR%%/arangodb-helper
+%%DATADIR%%/arangodb-update-db
+%%DATADIR%%/exitcodes.dat
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/js/actions/_admin/app.js
+%%DATADIR%%/js/actions/_admin/database/app.js
+%%DATADIR%%/js/actions/_admin/foxx/app.js
+%%DATADIR%%/js/actions/_admin/routing/app.js
+%%DATADIR%%/js/actions/_admin/server/app.js
+%%DATADIR%%/js/actions/_admin/statistics/app.js
+%%DATADIR%%/js/actions/_api/collection/app.js
+%%DATADIR%%/js/actions/api-aqlfunction.js
+%%DATADIR%%/js/actions/api-cluster.js
+%%DATADIR%%/js/actions/api-configuration.js
+%%DATADIR%%/js/actions/api-pregel.js
+%%DATADIR%%/js/actions/api-simple.js
+%%DATADIR%%/js/actions/api-system.js
+%%DATADIR%%/js/actions/api-tasks.js
+%%DATADIR%%/js/actions/api-transaction.js
+%%DATADIR%%/js/actions/api-traversal.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/GruntFile.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/aardvark.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/api-docs.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/cluster.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/default-thumbnail.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/favicon.ico
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/foxxes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/aqltemplates.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/app.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/app.min.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/extra-minified.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/extra-minified.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/libs.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/libs.min.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style-minified.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style-minified.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-Logo-New-V3-1.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-community-edition-Web-UI.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-enterprise-edition-Web-UI.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/arrowDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/arrowUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/export.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/homeIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/homeIconWhite.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/minus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panLeft.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panRight.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/plus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/xIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/xIconH.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb-edition-login-optimized.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb-edition-optimized.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_alt.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_letter.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/check_radio_sheet.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_github.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_google.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_slack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_stack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/cpu.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/dark-check-green-round.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/dark-check-green.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/databaseIcon.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/default_user.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/enter_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/glyphicons-halflings-white.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/glyphicons-halflings.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_bottom.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_left.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_right.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_top.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_button_bg_reverse.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_collapse.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_edit.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_expand.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_flag.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_link.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_trash.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/icon_arango.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/icon_delete.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/jsoneditor-icons.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/logo_arangodb_transp.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/plus_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ram.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/requests.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2-spinner.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2x2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/swagger/logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/swagger/throbber.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/ansi.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/bootstrap.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/grids-responsive-min.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/highlightjs.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jquery-ui-1.9.2.custom.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jquery.contextmenu.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jsoneditor.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/nv.d3.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/select2-bootstrap.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/select2.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/tippy.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/FontAwesome.otf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSans.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansBold.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansBoldItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansLight.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansLightItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/documentation.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/end.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/head.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/redirect.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/scripts.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/start.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/arrowDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/arrowUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/export.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/homeIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/homeIconWhite.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/minus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panLeft.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panRight.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/plus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/xIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/xIconH.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_big.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_letter.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/check_radio_sheet.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_github.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_google.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_slack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_stack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/dark-check-green-round.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/dark-check-green.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/default_user.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/enter_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/glyphicons-halflings-white.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/glyphicons-halflings.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_edit.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_expand.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_flag.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_link.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_trash.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/icon_delete.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/plus_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2-spinner.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2x2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/swagger/logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/swagger/throbber.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/arango/templateEngine.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/_automaticRetryCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/_paginatedCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoClusterStatisticsCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoCollections.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDocument.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDocuments.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoLogs.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoReplication.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoStatisticsCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoStatisticsDescriptionCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoUsers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/clusterCoordinators.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/clusterServers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/coordinatorCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/foxxCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/graphCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/notificationCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/queryManagementCollectionActive.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/queryManagementCollectionSlow.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/workMonitorCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/config/dygraphConfig.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/documentation/documentation.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/backbone-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/bootstrap-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/bootstrap-pagination.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.fisheye.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.v3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/dygraph-combined.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/highlight.7.3.pack.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/joi.browser.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jqconsole.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery-2.1.0.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery-ui-1.9.2.custom.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.contextmenu.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.csv.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.form.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.hotkeys.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.noty.packaged.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.snippet.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.textfill.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.uploadfile.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jsoneditor-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/md5.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/moment.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/numeral.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/nv.d3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/pretty-bytes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/raphael.icons.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/raphael.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/select2.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.autoCurve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.curve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.dashed.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.dotted.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.curve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.curvedArrow.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.def.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.tapered.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.exporters.image.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.layout.fruchtermanReingold.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.layout.noverlap.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.animate.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.dragNodes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.filter.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.fullScreen.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.lasso.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.renderers.halo.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/strftime-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/supervisor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/tippy.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/typeahead.bundle.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/underscore-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/wheelnav.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/wheelnav.slicePath.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/worker.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoCollectionModel.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoDocument.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoQuery.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoReplication.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoSession.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoStatistics.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoStatisticsDescription.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoUsers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/clusterCoordinator.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/clusterServer.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/coordinator.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/currentDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/foxx.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/graph.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/newArangoLog.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/notification.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/queryManagement.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/userConfig.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/workMonitor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/startApp.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/versionCheck.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationListView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/arangoTabbar.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/arangoTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/collectionsItemView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/collectionsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/dashboardView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/databaseView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/dbSelectionView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/documentView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/documentsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/edgeDefinitionTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/editListEntryView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/filterSelect.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/footerView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxActiveView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxEditView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxMountView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphManagementView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphSettingsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphViewGroupByEntry.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphViewer2.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/helpUsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/indicesView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/lineChartDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loadingTableView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loggerView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loginView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalApplicationMount.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalBase.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalCollectionInfo.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalDownloadFoxx.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalGraph.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalGraphTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalHotkeys.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalTestResults.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodeInfoView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodeView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodesView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/notificationItem.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/notificationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/progressBase.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryManagementViewActive.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryManagementViewSlow.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/scaleView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/shardsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/shellView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/spotlightView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/statisticBarView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/subNavigationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/supportView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/tableView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userBarView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userManagementView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userPermissionView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/warningList.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/workMonitorView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/_paginationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/applicationDetailView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/applicationsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/clusterView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/collectionsItemView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/collectionsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/dashboardView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/databaseView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/dbSelectionView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/documentView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/documentsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/filterSelect.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/footerView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxActiveListView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxActiveView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxInstallView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphSettingsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphViewer.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/helpUsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/indicesView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/infoView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/loggerView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/loginView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/modalView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/navigationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodeInfoView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodeView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodesView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/notificationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/progressView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/scaleView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/settingsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/shardsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/showClusterView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/spotlightView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/statisticBarView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/supportView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/tableView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userBarView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userPermissions.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/workMonitorView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/.scss-lint.yml
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_abstracts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_accordion.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_alert.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_animate.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_api.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_applicationDetailView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_arangoTabbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_arangoTable.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_body.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_buttons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_checkbox.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterCharts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterStates.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterStyle.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_collection.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_colors.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_constants.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_contentTables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboard.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboardDistribution.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboardHttpGroup.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dataTables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dbSelection.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dialogs.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_documentView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_documentsView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dropdowns.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_filterSelect.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_fonts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_footer.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_general.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_graphViewer.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_graphViewer2.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_headerBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_help.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_hotkeys.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_icons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_ie.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_jsonEditor.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_logger.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_login.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_logs.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_mixins.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_modals.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_newDashboard.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_nodes.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_notification.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_pagination.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_permissions.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_plannerImages.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_progressView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_pure.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_range.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_resizing.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_screenSizes.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_searchBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shards.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shared.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shellView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shortcuts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_snippet.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_spotlightView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_state.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_statisticBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_subNavbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_subViewModal.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_support.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tabViews.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tiles.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_toolbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tooltips.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_uploadfile.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_userMenu.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/cluster.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_animated.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_bordered-pulled.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_core.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_fixed-width.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_icons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_larger.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_list.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_mixins.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_path.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_rotated-flipped.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_stacked.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_variables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/font-awesome.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/generated.css.map
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/style.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/style.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-searchbox.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-spellcheck.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-static_highlight.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-textarea.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/keybinding-emacs.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/keybinding-vim.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/mode-aql.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/mode-json.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/theme-jsoneditor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/theme-textmate.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-javascript.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-json.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-json.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/ie7/ie7.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/ie7/ie7.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/style.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/droidsans-bold.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/droidsans.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/index.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/README.md.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/dcModel.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/dcRouter.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/ecModel.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/ecRouter.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/main.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/setup.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/teardown.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/test.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/index.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/index.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/manifest.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/package.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/statistics.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/index.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/manifest.json
+%%DATADIR%%/js/apps/system/_api/foxx/APP/multipart.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/schemas.js
+%%DATADIR%%/js/apps/system/_api/gharial/APP/gharial.js
+%%DATADIR%%/js/apps/system/_api/gharial/APP/manifest.json
+%%DATADIR%%/js/client/assets/queuetest/dirname.js
+%%DATADIR%%/js/client/assets/queuetest/queuetest.js
+%%DATADIR%%/js/client/bootstrap/modules/internal.js
+%%DATADIR%%/js/client/client.js
+%%DATADIR%%/js/client/modules/@arangodb/actions.js
+%%DATADIR%%/js/client/modules/@arangodb/aql/cache.js
+%%DATADIR%%/js/client/modules/@arangodb/aql/queries.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-collection.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-database.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-query-cursor.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-statement.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-view.js
+%%DATADIR%%/js/client/modules/@arangodb/arangosh.js
+%%DATADIR%%/js/client/modules/@arangodb/configuration.js
+%%DATADIR%%/js/client/modules/@arangodb/crash-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/foxx/manager.js
+%%DATADIR%%/js/client/modules/@arangodb/index.js
+%%DATADIR%%/js/client/modules/@arangodb/pregel.js
+%%DATADIR%%/js/client/modules/@arangodb/process-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/replication.js
+%%DATADIR%%/js/client/modules/@arangodb/simple-query.js
+%%DATADIR%%/js/client/modules/@arangodb/tasks.js
+%%DATADIR%%/js/client/modules/@arangodb/test-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/testing.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/agency.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/aql.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/arangobench.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/arangosh.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/authentication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/backup.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/catch.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/config.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dfdb.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dump.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dump_authentication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/endpoints.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/export.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/fail.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/foxxmanager.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/importing.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/ldap.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/perf.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/queryCacheAuthorization.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/readOnly.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/recovery.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/replication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/resilience.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/rspec.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/single.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/stress.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/upgrade.js
+%%DATADIR%%/js/client/modules/@arangodb/tutorial.js
+%%DATADIR%%/js/client/modules/@arangodb/user-helper.js
+%%DATADIR%%/js/client/modules/@arangodb/users.js
+%%DATADIR%%/js/client/modules/@arangodb/work-monitor.js
+%%DATADIR%%/js/common/bootstrap/errors.js
+%%DATADIR%%/js/common/bootstrap/exitcodes.js
+%%DATADIR%%/js/common/bootstrap/modules.js
+%%DATADIR%%/js/common/bootstrap/modules/assert.js
+%%DATADIR%%/js/common/bootstrap/modules/buffer.js
+%%DATADIR%%/js/common/bootstrap/modules/console.js
+%%DATADIR%%/js/common/bootstrap/modules/events.js
+%%DATADIR%%/js/common/bootstrap/modules/fs.js
+%%DATADIR%%/js/common/bootstrap/modules/internal.js
+%%DATADIR%%/js/common/bootstrap/modules/path.js
+%%DATADIR%%/js/common/bootstrap/modules/process.js
+%%DATADIR%%/js/common/bootstrap/modules/vm.js
+%%DATADIR%%/js/common/bootstrap/scaffolding.js
+%%DATADIR%%/js/common/modules/@arangodb/aql/explainer.js
+%%DATADIR%%/js/common/modules/@arangodb/aql/functions.js
+%%DATADIR%%/js/common/modules/@arangodb/arango-collection-common.js
+%%DATADIR%%/js/common/modules/@arangodb/arango-statement-common.js
+%%DATADIR%%/js/common/modules/@arangodb/common.js
+%%DATADIR%%/js/common/modules/@arangodb/crypto.js
+%%DATADIR%%/js/common/modules/@arangodb/deprecated.js
+%%DATADIR%%/js/common/modules/@arangodb/examples/example-users.js
+%%DATADIR%%/js/common/modules/@arangodb/extend.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/check-args.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/manager-utils.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/store.js
+%%DATADIR%%/js/common/modules/@arangodb/general-graph.js
+%%DATADIR%%/js/common/modules/@arangodb/graph-examples/example-graph.js
+%%DATADIR%%/js/common/modules/@arangodb/graph/helpers.js
+%%DATADIR%%/js/common/modules/@arangodb/graph/traversal.js
+%%DATADIR%%/js/common/modules/@arangodb/heap.js
+%%DATADIR%%/js/common/modules/@arangodb/is.js
+%%DATADIR%%/js/common/modules/@arangodb/mocha-runner.js
+%%DATADIR%%/js/common/modules/@arangodb/mocha.js
+%%DATADIR%%/js/common/modules/@arangodb/request.js
+%%DATADIR%%/js/common/modules/@arangodb/simple-query-common.js
+%%DATADIR%%/js/common/modules/@arangodb/test-helper.js
+%%DATADIR%%/js/common/modules/@arangodb/testrunner.js
+%%DATADIR%%/js/common/modules/@arangodb/util.js
+%%DATADIR%%/js/common/modules/jslint.js
+%%DATADIR%%/js/common/modules/jsunity.js
+%%DATADIR%%/js/common/modules/jsunity/jsunity.js
+%%DATADIR%%/js/common/modules/loadtestrunner.js
+%%DATADIR%%/js/common/modules/reportgenerator.js
+%%DATADIR%%/js/contrib/CSV_export/CSVexport.js
+%%DATADIR%%/js/contrib/graph_generators/circle.js
+%%DATADIR%%/js/contrib/graph_generators/grid.js
+%%DATADIR%%/js/contrib/graph_generators/random.js
+%%DATADIR%%/js/contrib/graph_generators/tree.js
+%%DATADIR%%/js/node/GENERATE_LICENSE
+%%DATADIR%%/js/node/VERSIONS
+%%DATADIR%%/js/node/_stream_duplex.js
+%%DATADIR%%/js/node/_stream_passthrough.js
+%%DATADIR%%/js/node/_stream_readable.js
+%%DATADIR%%/js/node/_stream_transform.js
+%%DATADIR%%/js/node/_stream_writable.js
+%%DATADIR%%/js/node/child_process.js
+%%DATADIR%%/js/node/cluster.js
+%%DATADIR%%/js/node/constants.js
+%%DATADIR%%/js/node/crypto.js
+%%DATADIR%%/js/node/dgram.js
+%%DATADIR%%/js/node/dns.js
+%%DATADIR%%/js/node/domain.js
+%%DATADIR%%/js/node/http.js
+%%DATADIR%%/js/node/https.js
+%%DATADIR%%/js/node/net.js
+%%DATADIR%%/js/node/node_modules/accepts/HISTORY.md
+%%DATADIR%%/js/node/node_modules/accepts/LICENSE
+%%DATADIR%%/js/node/node_modules/accepts/README.md
+%%DATADIR%%/js/node/node_modules/accepts/index.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/HISTORY.md
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/LICENSE
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/README.md
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/index.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/charset.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/encoding.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/language.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/mediaType.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/package.json
+%%DATADIR%%/js/node/node_modules/accepts/package.json
+%%DATADIR%%/js/node/node_modules/ansi-html/LICENSE
+%%DATADIR%%/js/node/node_modules/ansi-html/README.md
+%%DATADIR%%/js/node/node_modules/ansi-html/index.js
+%%DATADIR%%/js/node/node_modules/ansi-html/package.json
+%%DATADIR%%/js/node/node_modules/aqb/LICENSE
+%%DATADIR%%/js/node/node_modules/aqb/README.md
+%%DATADIR%%/js/node/node_modules/aqb/assumptions.js
+%%DATADIR%%/js/node/node_modules/aqb/errors.js
+%%DATADIR%%/js/node/node_modules/aqb/index.js
+%%DATADIR%%/js/node/node_modules/aqb/package.json
+%%DATADIR%%/js/node/node_modules/aqb/types.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/lib/index.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/LICENSE.BSD
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/ast.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/code.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/keyword.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/utils.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/package.json
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/LICENSE
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/index.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/package.json
+%%DATADIR%%/js/node/node_modules/babel-code-frame/package.json
+%%DATADIR%%/js/node/node_modules/chai/CODE_OF_CONDUCT.md
+%%DATADIR%%/js/node/node_modules/chai/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/chai/History.md
+%%DATADIR%%/js/node/node_modules/chai/README.md
+%%DATADIR%%/js/node/node_modules/chai/ReleaseNotes.md
+%%DATADIR%%/js/node/node_modules/chai/bower.json
+%%DATADIR%%/js/node/node_modules/chai/chai.js
+%%DATADIR%%/js/node/node_modules/chai/index.js
+%%DATADIR%%/js/node/node_modules/chai/karma.conf.js
+%%DATADIR%%/js/node/node_modules/chai/karma.sauce.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/assertion.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/config.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/core/assertions.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/assert.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/expect.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/should.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addChainableMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/expectTypes.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/flag.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getActual.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getEnumerableProperties.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getMessage.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getName.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getPathInfo.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getPathValue.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getProperties.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/hasProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/index.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/inspect.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/objDisplay.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/test.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/transferFlags.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/karma.conf.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/lib/eql.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/lib/type.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/ReleaseNotes.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/lib/type.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/package.json
+%%DATADIR%%/js/node/node_modules/chai/package.json
+%%DATADIR%%/js/node/node_modules/chai/sauce.browsers.js
+%%DATADIR%%/js/node/node_modules/chalk/index.js
+%%DATADIR%%/js/node/node_modules/chalk/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/package.json
+%%DATADIR%%/js/node/node_modules/chalk/readme.md
+%%DATADIR%%/js/node/node_modules/content-disposition/HISTORY.md
+%%DATADIR%%/js/node/node_modules/content-disposition/LICENSE
+%%DATADIR%%/js/node/node_modules/content-disposition/README.md
+%%DATADIR%%/js/node/node_modules/content-disposition/index.js
+%%DATADIR%%/js/node/node_modules/content-disposition/package.json
+%%DATADIR%%/js/node/node_modules/dedent/LICENSE
+%%DATADIR%%/js/node/node_modules/dedent/README.md
+%%DATADIR%%/js/node/node_modules/dedent/dist/dedent.js
+%%DATADIR%%/js/node/node_modules/dedent/package.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/LICENSE
+%%DATADIR%%/js/node/node_modules/error-stack-parser/README.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/ErrorStackParser.tgz
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js.map
+%%DATADIR%%/js/node/node_modules/error-stack-parser/error-stack-parser.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js.map
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/gulpfile.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/package.json
+%%DATADIR%%/js/node/node_modules/expect.js/History.md
+%%DATADIR%%/js/node/node_modules/expect.js/README.md
+%%DATADIR%%/js/node/node_modules/expect.js/index.js
+%%DATADIR%%/js/node/node_modules/expect.js/package.json
+%%DATADIR%%/js/node/node_modules/extendible/.travis.yml
+%%DATADIR%%/js/node/node_modules/extendible/README.md
+%%DATADIR%%/js/node/node_modules/extendible/example/index.js
+%%DATADIR%%/js/node/node_modules/extendible/index.js
+%%DATADIR%%/js/node/node_modules/extendible/package.json
+%%DATADIR%%/js/node/node_modules/extendible/test.js
+%%DATADIR%%/js/node/node_modules/glob/index.js
+%%DATADIR%%/js/node/node_modules/glob/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/README.md
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/execute.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/values.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/graphql.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/utilities.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/PATENTS
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/README.md
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/GraphQLError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/formatError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/locatedError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/syntaxError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/execute.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/values.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/graphql.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/find.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/invariant.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/isNullish.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/keyMap.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/keyValMap.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/quotedOrList.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/suggestionList.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/ast.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/kinds.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/lexer.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/location.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/parser.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/printer.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/source.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/visitor.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/definition.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/directives.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/introspection.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/scalars.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/schema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/TypeInfo.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/assertValidName.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/astFromValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/buildASTSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/buildClientSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/concatAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/extendSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/getOperationAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/introspectionQuery.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/isValidJSValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/isValidLiteralValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/schemaPrinter.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/typeComparators.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/typeFromAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/valueFromAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ArgumentsOfCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/DefaultValuesOfCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/FieldsOnCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/FragmentsOnCompositeTypes.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownArgumentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownDirectives.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownFragmentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownTypeNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/LoneAnonymousOperation.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoFragmentCycles.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUndefinedVariables.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUnusedFragments.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUnusedVariables.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/PossibleFragmentSpreads.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ProvidedNonNullArguments.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ScalarLeafs.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueArgumentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueFragmentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueInputFieldNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueOperationNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueVariableNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/VariablesAreInputTypes.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/VariablesInAllowedPosition.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/specifiedRules.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/validate.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.d.ts
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.js.flow
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/package.json
+%%DATADIR%%/js/node/node_modules/highlightjs/LICENSE
+%%DATADIR%%/js/node/node_modules/highlightjs/README.md
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/api.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/building-testing.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/css-classes-reference.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/index.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-contribution.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-guide.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-requests.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/line-numbers.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/reference.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/%%CMAKE_BUILD_TYPE%%-process.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/style-guide.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/highlight.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/index.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/1c.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/abnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/accesslog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/actionscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ada.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/apache.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/applescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/arduino.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/armasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/asciidoc.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/aspectj.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/autohotkey.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/autoit.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/avrasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/awk.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/axapta.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/bash.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/basic.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/bnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/brainfuck.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cal.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/capnproto.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ceylon.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clean.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clojure-repl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clojure.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cmake.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/coffeescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/coq.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cos.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cpp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/crmsh.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/crystal.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cs.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/csp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/css.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/d.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dart.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/delphi.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/diff.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/django.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dns.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dockerfile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dos.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dsconfig.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dts.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dust.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ebnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/elixir.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/elm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erb.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erlang-repl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erlang.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/excel.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/flix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fortran.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fsharp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gams.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gauss.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gcode.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gherkin.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/glsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/go.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/golo.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gradle.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/groovy.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/handlebars.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haskell.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haxe.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/hsp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/htmlbars.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/http.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/inform7.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ini.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/irpf90.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/java.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/javascript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/json.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/julia.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/kotlin.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lasso.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ldif.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/less.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lisp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/livecodeserver.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/livescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lua.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/makefile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/markdown.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mathematica.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/matlab.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/maxima.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mel.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mercury.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mipsasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mizar.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mojolicious.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/monkey.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/moonscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nginx.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nimrod.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nsis.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/objectivec.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ocaml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/openscad.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/oxygene.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/parser3.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/perl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/pf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/php.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/pony.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/powershell.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/processing.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/profile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/prolog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/protobuf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/puppet.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/purebasic.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/python.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/q.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/qml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/r.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rib.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/roboconf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ruby.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ruleslanguage.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rust.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scala.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scheme.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scilab.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scss.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/smali.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/smalltalk.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sqf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sql.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stan.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stata.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/step21.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stylus.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/subunit.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/swift.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/taggerscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tap.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tcl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tex.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/thrift.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/twig.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/typescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vala.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbnet.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbscript-html.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/verilog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vhdl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vim.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/x86asm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xquery.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/yaml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/zephir.js
+%%DATADIR%%/js/node/node_modules/highlightjs/package.json
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/agate.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/androidstudio.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/arduino-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/arta.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ascetic.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-cave-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-cave-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-dune-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-dune-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-estuary-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-estuary-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-forest-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-forest-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-heath-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-heath-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-lakeside-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-lakeside-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-plateau-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-plateau-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-savanna-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-savanna-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-seaside-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-seaside-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-sulphurpool-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-sulphurpool-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atom-one-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atom-one-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/brown-paper.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/brown-papersq.png
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/codepen-embed.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/color-brewer.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/darcula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/darkula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/default.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/docco.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/dracula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/far.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/foundation.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/github-gist.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/github.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/googlecode.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/grayscale.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/gruvbox-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/gruvbox-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/hopscotch.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/hybrid.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/idea.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ir-black.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/kimbie.dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/kimbie.light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/magula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/mono-blue.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/monokai-sublime.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/monokai.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/obsidian.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ocean.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/paraiso-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/paraiso-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/pojoaque.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/pojoaque.jpg
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/purebasic.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/qtcreator_dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/qtcreator_light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/railscasts.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/rainbow.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/school-book.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/school-book.png
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/solarized-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/solarized-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/sunburst.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-blue.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-bright.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-eighties.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/vs.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/xcode.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/xt256.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/zenburn.css
+%%DATADIR%%/js/node/node_modules/http-errors/HISTORY.md
+%%DATADIR%%/js/node/node_modules/http-errors/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/index.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/inherits.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/package.json
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/test.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/index.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/package.json
+%%DATADIR%%/js/node/node_modules/http-errors/package.json
+%%DATADIR%%/js/node/node_modules/i/.travis.yml
+%%DATADIR%%/js/node/node_modules/i/LICENSE
+%%DATADIR%%/js/node/node_modules/i/README.md
+%%DATADIR%%/js/node/node_modules/i/lib/defaults.js
+%%DATADIR%%/js/node/node_modules/i/lib/inflect.js
+%%DATADIR%%/js/node/node_modules/i/lib/inflections.js
+%%DATADIR%%/js/node/node_modules/i/lib/methods.js
+%%DATADIR%%/js/node/node_modules/i/lib/native.js
+%%DATADIR%%/js/node/node_modules/i/lib/util.js
+%%DATADIR%%/js/node/node_modules/i/package.json
+%%DATADIR%%/js/node/node_modules/i/test/inflector/cases.js
+%%DATADIR%%/js/node/node_modules/i/test/inflector/inflections-test.js
+%%DATADIR%%/js/node/node_modules/i/test/inflector/methods-test.js
+%%DATADIR%%/js/node/node_modules/i/test/utils/array-test.js
+%%DATADIR%%/js/node/node_modules/i/test/utils/string-test.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/.travis.yml
+%%DATADIR%%/js/node/node_modules/iconv-lite/Changelog.md
+%%DATADIR%%/js/node/node_modules/iconv-lite/LICENSE
+%%DATADIR%%/js/node/node_modules/iconv-lite/README.md
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/dbcs-codec.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/dbcs-data.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/index.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/internal.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-codec.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-data.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/big5-added.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp936.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp949.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp950.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/eucjp.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/gbk-added.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/shiftjis.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/utf16.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/utf7.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/bom-handling.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/extend-node.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/index.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/streams.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/build/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/build/index.js.map
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/images/hoek.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/lib/escape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/escaper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/ignore.txt
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test1.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test2.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test3.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/Makefile
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/lib/isemail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/isemail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/mocha.opts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/tests.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/.eslintignore
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/API.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/conditionalRequire.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/customMessage.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/multipleWhen.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/generate-readme-toc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/images/joi.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/images/validation.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/binary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/boolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/cast.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/errors.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/language.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/ref.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/ip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/rfc3986.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/uri.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/binary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/boolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/errors.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/helper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/ref.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/chunk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/compact.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/difference.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/drop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/fill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/findIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/first.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/flatten.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/head.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/indexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/initial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/intersection.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/last.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/pull.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/pullAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/remove.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/rest.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/slice.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/tail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/take.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/union.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/uniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unique.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unzip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unzipWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/without.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/xor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zipObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zipWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/chain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/commit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/concat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/lodash.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/plant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/reverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/run.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/tap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/thru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/toJSON.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/toString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/value.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/valueOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperCommit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperConcat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperPlant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperToString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/all.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/collect.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/contains.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/countBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/detect.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/each.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/eachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/every.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/filter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/find.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/findLast.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/findWhere.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/foldl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/foldr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/forEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/forEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/groupBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/include.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/includes.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/indexBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/inject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/invoke.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/map.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/partition.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/pluck.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reduceRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sample.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/select.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/shuffle.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/size.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/some.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortByAll.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortByOrder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/where.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/date/now.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/after.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/ary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/backflow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/before.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bindAll.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bindKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/compose.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/curry.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/curryRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/debounce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/defer.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/delay.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/flow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/flowRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/memoize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/modArgs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/negate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/once.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/partial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/partialRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/rearg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/restParam.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/spread.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/throttle.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/wrap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/LazyWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/LodashWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/MapCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/SetCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayConcat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayCopy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEvery.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayFilter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayPush.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayReduceRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arraySome.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arraySum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignOwnDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseAssign.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCompareAscending.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCopy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCreate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseDelay.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseDifference.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEvery.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFilter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFindIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFlatten.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForOwnRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFunctions.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseGet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsEqual.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsEqualDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsFunction.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsMatch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseLodash.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMatches.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMatchesProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMerge.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMergeDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/basePropertyDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/basePullAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseRandom.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSetData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSlice.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSome.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSortBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSortByOrder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseToString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseUniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseValues.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseWrapperValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/binaryIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/binaryIndexBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/bindCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/bufferClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/cacheIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/cachePush.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/charsLeftIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/charsRightIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/compareAscending.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/compareMultiple.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/composeArgs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/composeArgsRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createAggregator.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createAssigner.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBaseEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBaseFor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBindWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCompounder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCtorWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCurry.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFindIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFindKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFlow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createHybridWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createObjectMapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPadDir.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPadding.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPartial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPartialWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createRound.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createSortedIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/deburrLetter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalArrays.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalByTag.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalObjects.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeRegExpChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeStringChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getFuncName.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getLength.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getMatchData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getNative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getView.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/indexOfNaN.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneByTag.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/invokePath.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isIterateeCall.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isLaziable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isLength.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isSpace.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isStrictComparable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyReverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapDelete.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapGet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapHas.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapSet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mergeData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mergeDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/metaMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/pickByArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/pickByCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reEscape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reEvaluate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reInterpolate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/realNames.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reorder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/replaceHolders.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/setData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/shimKeys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toIterable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toPath.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/trimmedLeftIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/trimmedRightIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/unescapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/wrapperClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/clone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/eq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/gt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/gte.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isArguments.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isBoolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isDate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isElement.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isEmpty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isEqual.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isError.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isFinite.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isFunction.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isMatch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNaN.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNull.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNumber.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isRegExp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isUndefined.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/lte.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/toArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/add.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/ceil.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/floor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/round.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/sum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number/inRange.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number/random.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/assign.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/create.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/defaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/extend.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/findKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/findLastKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forInRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/functions.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/get.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/has.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/invert.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/keys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/keysIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/mapKeys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/mapValues.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/merge.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/methods.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/omit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/pairs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/pick.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/result.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/transform.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/values.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/valuesIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/camelCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/capitalize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/deburr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/endsWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/escape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/kebabCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/pad.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/padLeft.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/padRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/parseInt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/repeat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/snakeCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/startCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/startsWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/template.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/templateSettings.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trim.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trimLeft.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trimRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trunc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/unescape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/words.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/support.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/attempt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/callback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/constant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/identity.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/iteratee.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/matches.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/method.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/methodOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/mixin.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/noop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/property.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/propertyOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/range.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/times.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/uniqueId.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/ender.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/locales.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment-with-locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment-with-locales.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/moment.d.ts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/package.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/check-overflow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/date-from-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-anything.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string-and-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string-and-format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/local.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/parsing-flags.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/utc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/valid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/abs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/as.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/bubble.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/create.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/duration.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/get.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/humanize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/iso-string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/format/format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/base-config.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/calendar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/en.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/formats.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/invalid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/lists.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/locale.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/ordinal.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/pre-post-format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/relative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/calendar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/clone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/compare.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/creation-data.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/diff.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/from.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/get-set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/locale.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/min-max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/now.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/start-end-of.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/to-type.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/to.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/valid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/parse/regex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/parse/token.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/aliases.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/constants.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-month.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-week.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/hour.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/millisecond.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/minute.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/month.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/offset.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/priorities.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/quarter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/second.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/timestamp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/timezone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/units.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week-calendar-utils.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week-year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-ceil.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-floor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-round.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/compare-arrays.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/defaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/deprecate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/extend.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/has-own-prop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/hooks.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/index-of.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-object-empty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-undefined.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/keys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/map.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/some.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/to-int.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/zero-fill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/API.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/src/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/convert_test.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/fixtures/complicated.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/fixtures/transform.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/mocha.opts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/setup.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/transformer_test.js
+%%DATADIR%%/js/node/node_modules/joi/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/README.md
+%%DATADIR%%/js/node/node_modules/joi/lib/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi/lib/any.js
+%%DATADIR%%/js/node/node_modules/joi/lib/array.js
+%%DATADIR%%/js/node/node_modules/joi/lib/binary.js
+%%DATADIR%%/js/node/node_modules/joi/lib/boolean.js
+%%DATADIR%%/js/node/node_modules/joi/lib/cast.js
+%%DATADIR%%/js/node/node_modules/joi/lib/date.js
+%%DATADIR%%/js/node/node_modules/joi/lib/errors.js
+%%DATADIR%%/js/node/node_modules/joi/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/lib/language.js
+%%DATADIR%%/js/node/node_modules/joi/lib/lazy.js
+%%DATADIR%%/js/node/node_modules/joi/lib/number.js
+%%DATADIR%%/js/node/node_modules/joi/lib/object.js
+%%DATADIR%%/js/node/node_modules/joi/lib/ref.js
+%%DATADIR%%/js/node/node_modules/joi/lib/schemas.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/ip.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/rfc3986.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/uri.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/lib/escape.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/ender.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/locales.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment-with-locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment-with-locales.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/moment.d.ts
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/package.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/check-overflow.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/date-from-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-anything.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-object.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string-and-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string-and-format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/local.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/parsing-flags.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/utc.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/valid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/abs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/as.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/bubble.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/create.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/duration.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/get.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/humanize.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/iso-string.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/format/format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/base-config.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/calendar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/en.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/formats.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/invalid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/lists.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/locale.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/ordinal.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/pre-post-format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/relative.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/set.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/calendar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/clone.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/compare.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/creation-data.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/diff.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/from.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/get-set.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/locale.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/min-max.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/now.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/start-end-of.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/to-type.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/to.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/valid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/parse/regex.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/parse/token.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/aliases.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/constants.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-month.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-week.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/hour.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/millisecond.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/minute.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/month.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/offset.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/priorities.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/quarter.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/second.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/timestamp.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/timezone.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/units.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week-calendar-utils.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week-year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-ceil.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-floor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-round.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/compare-arrays.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/defaults.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/deprecate.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/extend.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/has-own-prop.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/hooks.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/index-of.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-date.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-function.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-object-empty.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-object.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-undefined.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/keys.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/map.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/some.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/to-int.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/zero-fill.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/package.json
+%%DATADIR%%/js/node/node_modules/joi/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/js-yaml/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/dist/js-yaml.js
+%%DATADIR%%/js/node/node_modules/js-yaml/dist/js-yaml.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/index.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/common.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/dumper.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/exception.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/loader.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/mark.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/core.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/default_full.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/json.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/binary.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/bool.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/float.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/int.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/function.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/map.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/merge.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/null.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/omap.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/pairs.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/seq.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/set.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/str.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/timestamp.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/index.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/append.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/count.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/help.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/version.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action_container.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argparse.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/const.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/namespace.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/utils.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/ChangeLog
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/esprima.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/bower.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/demo/angular.html
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.js.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.js.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/gruntfile.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/src/angular-sprintf.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/src/sprintf.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/test/test.js
+%%DATADIR%%/js/node/node_modules/js-yaml/package.json
+%%DATADIR%%/js/node/node_modules/lodash/LICENSE
+%%DATADIR%%/js/node/node_modules/lodash/README.md
+%%DATADIR%%/js/node/node_modules/lodash/_DataView.js
+%%DATADIR%%/js/node/node_modules/lodash/_Hash.js
+%%DATADIR%%/js/node/node_modules/lodash/_LazyWrapper.js
+%%DATADIR%%/js/node/node_modules/lodash/_ListCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_LodashWrapper.js
+%%DATADIR%%/js/node/node_modules/lodash/_Map.js
+%%DATADIR%%/js/node/node_modules/lodash/_MapCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_Promise.js
+%%DATADIR%%/js/node/node_modules/lodash/_Set.js
+%%DATADIR%%/js/node/node_modules/lodash/_SetCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_Stack.js
+%%DATADIR%%/js/node/node_modules/lodash/_Symbol.js
+%%DATADIR%%/js/node/node_modules/lodash/_Uint8Array.js
+%%DATADIR%%/js/node/node_modules/lodash/_WeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_addMapEntry.js
+%%DATADIR%%/js/node/node_modules/lodash/_addSetEntry.js
+%%DATADIR%%/js/node/node_modules/lodash/_apply.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayFilter.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayIncludes.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayIncludesWith.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayLikeKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayPush.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayReduce.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayReduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySample.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayShuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySome.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiWords.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignInDefaults.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignMergeValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_assocIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAssign.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAssignValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseClamp.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseClone.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseConforms.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseConformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseCreate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseDelay.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseDifference.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseExtremum.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFill.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFilter.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFindIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFlatten.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFor.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFunctions.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGetAllKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGetTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseHasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIndexOfWith.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIntersection.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInverter.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInvoke.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsDate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsEqualDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsNative.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseLt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMatches.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMatchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMean.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMerge.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMergeDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseNth.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseOrderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePick.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePropertyDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePropertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRandom.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseReduce.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRepeat.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSample.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSetData.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSetToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseShuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSlice.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSome.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSum.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseTimes.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUnary.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUnset.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUpdate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseValues.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseWrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseXor.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseZipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_cacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_castArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_castFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/_castPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_castRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_castSlice.js
+%%DATADIR%%/js/node/node_modules/lodash/_charsEndIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_charsStartIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneDataView.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_compareAscending.js
+%%DATADIR%%/js/node/node_modules/lodash/_compareMultiple.js
+%%DATADIR%%/js/node/node_modules/lodash/_composeArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/_composeArgsRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_copyArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_copyObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_copySymbols.js
+%%DATADIR%%/js/node/node_modules/lodash/_coreJsData.js
+%%DATADIR%%/js/node/node_modules/lodash/_countHolders.js
+%%DATADIR%%/js/node/node_modules/lodash/_createAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_createAssigner.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBaseEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBaseFor.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBind.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCaseFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCompounder.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCtor.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCurry.js
+%%DATADIR%%/js/node/node_modules/lodash/_createFind.js
+%%DATADIR%%/js/node/node_modules/lodash/_createFlow.js
+%%DATADIR%%/js/node/node_modules/lodash/_createHybrid.js
+%%DATADIR%%/js/node/node_modules/lodash/_createInverter.js
+%%DATADIR%%/js/node/node_modules/lodash/_createMathOperation.js
+%%DATADIR%%/js/node/node_modules/lodash/_createOver.js
+%%DATADIR%%/js/node/node_modules/lodash/_createPadding.js
+%%DATADIR%%/js/node/node_modules/lodash/_createPartial.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRecurry.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRelationalOperation.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRound.js
+%%DATADIR%%/js/node/node_modules/lodash/_createSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_createToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_createWrap.js
+%%DATADIR%%/js/node/node_modules/lodash/_deburrLetter.js
+%%DATADIR%%/js/node/node_modules/lodash/_defineProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalArrays.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalByTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalObjects.js
+%%DATADIR%%/js/node/node_modules/lodash/_escapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_escapeStringChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_flatRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_freeGlobal.js
+%%DATADIR%%/js/node/node_modules/lodash/_getAllKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_getAllKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_getData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getFuncName.js
+%%DATADIR%%/js/node/node_modules/lodash/_getHolder.js
+%%DATADIR%%/js/node/node_modules/lodash/_getMapData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getMatchData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getNative.js
+%%DATADIR%%/js/node/node_modules/lodash/_getPrototype.js
+%%DATADIR%%/js/node/node_modules/lodash/_getRawTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_getSymbols.js
+%%DATADIR%%/js/node/node_modules/lodash/_getSymbolsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_getTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_getValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_getView.js
+%%DATADIR%%/js/node/node_modules/lodash/_getWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasUnicode.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasUnicodeWord.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneByTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_insertWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_isFlattenable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_isIterateeCall.js
+%%DATADIR%%/js/node/node_modules/lodash/_isKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_isKeyable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isLaziable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isMaskable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isMasked.js
+%%DATADIR%%/js/node/node_modules/lodash/_isPrototype.js
+%%DATADIR%%/js/node/node_modules/lodash/_isStrictComparable.js
+%%DATADIR%%/js/node/node_modules/lodash/_iteratorToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyClone.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_matchesStrictComparable.js
+%%DATADIR%%/js/node/node_modules/lodash/_memoizeCapped.js
+%%DATADIR%%/js/node/node_modules/lodash/_mergeData.js
+%%DATADIR%%/js/node/node_modules/lodash/_mergeDefaults.js
+%%DATADIR%%/js/node/node_modules/lodash/_metaMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeCreate.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_nodeUtil.js
+%%DATADIR%%/js/node/node_modules/lodash/_objectToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_overArg.js
+%%DATADIR%%/js/node/node_modules/lodash/_overRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_parent.js
+%%DATADIR%%/js/node/node_modules/lodash/_reEscape.js
+%%DATADIR%%/js/node/node_modules/lodash/_reEvaluate.js
+%%DATADIR%%/js/node/node_modules/lodash/_reInterpolate.js
+%%DATADIR%%/js/node/node_modules/lodash/_realNames.js
+%%DATADIR%%/js/node/node_modules/lodash/_reorder.js
+%%DATADIR%%/js/node/node_modules/lodash/_replaceHolders.js
+%%DATADIR%%/js/node/node_modules/lodash/_root.js
+%%DATADIR%%/js/node/node_modules/lodash/_setCacheAdd.js
+%%DATADIR%%/js/node/node_modules/lodash/_setCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_setData.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_setWrapToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_shortOut.js
+%%DATADIR%%/js/node/node_modules/lodash/_shuffleSelf.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_strictIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_strictLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringToPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_toKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_toSource.js
+%%DATADIR%%/js/node/node_modules/lodash/_unescapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeWords.js
+%%DATADIR%%/js/node/node_modules/lodash/_updateWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_wrapperClone.js
+%%DATADIR%%/js/node/node_modules/lodash/add.js
+%%DATADIR%%/js/node/node_modules/lodash/after.js
+%%DATADIR%%/js/node/node_modules/lodash/array.js
+%%DATADIR%%/js/node/node_modules/lodash/ary.js
+%%DATADIR%%/js/node/node_modules/lodash/assign.js
+%%DATADIR%%/js/node/node_modules/lodash/assignIn.js
+%%DATADIR%%/js/node/node_modules/lodash/assignInWith.js
+%%DATADIR%%/js/node/node_modules/lodash/assignWith.js
+%%DATADIR%%/js/node/node_modules/lodash/at.js
+%%DATADIR%%/js/node/node_modules/lodash/attempt.js
+%%DATADIR%%/js/node/node_modules/lodash/before.js
+%%DATADIR%%/js/node/node_modules/lodash/bind.js
+%%DATADIR%%/js/node/node_modules/lodash/bindAll.js
+%%DATADIR%%/js/node/node_modules/lodash/bindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/camelCase.js
+%%DATADIR%%/js/node/node_modules/lodash/capitalize.js
+%%DATADIR%%/js/node/node_modules/lodash/castArray.js
+%%DATADIR%%/js/node/node_modules/lodash/ceil.js
+%%DATADIR%%/js/node/node_modules/lodash/chain.js
+%%DATADIR%%/js/node/node_modules/lodash/chunk.js
+%%DATADIR%%/js/node/node_modules/lodash/clamp.js
+%%DATADIR%%/js/node/node_modules/lodash/clone.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneDeepWith.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneWith.js
+%%DATADIR%%/js/node/node_modules/lodash/collection.js
+%%DATADIR%%/js/node/node_modules/lodash/commit.js
+%%DATADIR%%/js/node/node_modules/lodash/compact.js
+%%DATADIR%%/js/node/node_modules/lodash/concat.js
+%%DATADIR%%/js/node/node_modules/lodash/cond.js
+%%DATADIR%%/js/node/node_modules/lodash/conforms.js
+%%DATADIR%%/js/node/node_modules/lodash/conformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/constant.js
+%%DATADIR%%/js/node/node_modules/lodash/core.js
+%%DATADIR%%/js/node/node_modules/lodash/core.min.js
+%%DATADIR%%/js/node/node_modules/lodash/countBy.js
+%%DATADIR%%/js/node/node_modules/lodash/create.js
+%%DATADIR%%/js/node/node_modules/lodash/curry.js
+%%DATADIR%%/js/node/node_modules/lodash/curryRight.js
+%%DATADIR%%/js/node/node_modules/lodash/date.js
+%%DATADIR%%/js/node/node_modules/lodash/debounce.js
+%%DATADIR%%/js/node/node_modules/lodash/deburr.js
+%%DATADIR%%/js/node/node_modules/lodash/defaultTo.js
+%%DATADIR%%/js/node/node_modules/lodash/defaults.js
+%%DATADIR%%/js/node/node_modules/lodash/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/defer.js
+%%DATADIR%%/js/node/node_modules/lodash/delay.js
+%%DATADIR%%/js/node/node_modules/lodash/difference.js
+%%DATADIR%%/js/node/node_modules/lodash/differenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/differenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/divide.js
+%%DATADIR%%/js/node/node_modules/lodash/drop.js
+%%DATADIR%%/js/node/node_modules/lodash/dropRight.js
+%%DATADIR%%/js/node/node_modules/lodash/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/dropWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/each.js
+%%DATADIR%%/js/node/node_modules/lodash/eachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/endsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/entries.js
+%%DATADIR%%/js/node/node_modules/lodash/entriesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/eq.js
+%%DATADIR%%/js/node/node_modules/lodash/escape.js
+%%DATADIR%%/js/node/node_modules/lodash/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/every.js
+%%DATADIR%%/js/node/node_modules/lodash/extend.js
+%%DATADIR%%/js/node/node_modules/lodash/extendWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fill.js
+%%DATADIR%%/js/node/node_modules/lodash/filter.js
+%%DATADIR%%/js/node/node_modules/lodash/find.js
+%%DATADIR%%/js/node/node_modules/lodash/findIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/findKey.js
+%%DATADIR%%/js/node/node_modules/lodash/findLast.js
+%%DATADIR%%/js/node/node_modules/lodash/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/findLastKey.js
+%%DATADIR%%/js/node/node_modules/lodash/first.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMap.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMapDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMapDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/flatten.js
+%%DATADIR%%/js/node/node_modules/lodash/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/flattenDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/flip.js
+%%DATADIR%%/js/node/node_modules/lodash/floor.js
+%%DATADIR%%/js/node/node_modules/lodash/flow.js
+%%DATADIR%%/js/node/node_modules/lodash/flowRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forEach.js
+%%DATADIR%%/js/node/node_modules/lodash/forEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forIn.js
+%%DATADIR%%/js/node/node_modules/lodash/forInRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/F.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/T.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/__.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_baseConvert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_convertBrowser.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_falseOptions.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_mapping.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_util.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/add.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/after.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/all.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/allPass.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/always.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/any.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/anyPass.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/apply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/array.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/ary.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assign.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assoc.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assocPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/at.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/attempt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/before.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bind.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bindAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/camelCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/capitalize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/castArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/ceil.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/chain.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/chunk.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/clamp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/clone.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneDeepWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/collection.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/commit.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/compact.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/complement.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/compose.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/concat.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cond.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/conforms.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/conformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/constant.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/contains.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/convert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/countBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/create.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curry.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryRightN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/date.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/debounce.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/deburr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultTo.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaults.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsDeepAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/delay.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/difference.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/differenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/differenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dissoc.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dissocPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/divide.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/drop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropLastWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/each.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/eachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/endsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/entries.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/entriesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/eq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/equals.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/escape.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/every.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extend.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/fill.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/filter.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/find.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findIndexFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastIndexFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/first.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMapDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMapDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatten.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flattenDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/floor.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flow.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flowRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forEach.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forInRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/fromPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/function.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/functions.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/functionsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/get.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/getOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/groupBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/gt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/gte.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/has.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/hasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/head.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/identical.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/identity.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/inRange.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/includes.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/includesFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexOfFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/init.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/initial.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersection.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersectionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersectionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invertBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invertObj.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invoke.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeArgsMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isBoolean.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isDate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isElement.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEmpty.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEqualWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isError.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isLength.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMatchWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNative.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNil.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNull.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSet.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isUndefined.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isWeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isWeakSet.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/iteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/join.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/juxt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/kebabCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keyBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keys.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lang.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/last.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lastIndexOfFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lowerCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lowerFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lte.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/map.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mapKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mapValues.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/matches.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/math.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/max.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/maxBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mean.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/meanBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/memoize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/merge.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/method.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/methodOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/min.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/minBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mixin.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/multiply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nAry.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/negate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/next.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/noop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/now.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nthArg.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/number.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/object.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omit.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omitAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omitBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/once.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/orderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/over.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overSome.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pad.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padChars.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padCharsEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padCharsStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/parseInt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partial.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partialRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partition.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/path.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pathEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pathOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/paths.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pick.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pickAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pipe.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/placeholder.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/plant.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pluck.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/prop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/property.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/props.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pull.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAllBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/random.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/range.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeStep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeStepRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rearg.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reduce.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/remove.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/repeat.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/replace.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rest.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/restFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/result.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reverse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/round.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sample.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/seq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/set.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/setWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/shuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/size.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/slice.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/snakeCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/some.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedUniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/split.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/spread.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/spreadFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/startCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/startsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/string.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubFalse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubTrue.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/subtract.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sum.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sumBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifference.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifferenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifferenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/tail.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/take.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeLastWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/tap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/template.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/templateSettings.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/throttle.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/thru.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/times.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toIterator.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toJSON.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toLength.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toLower.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPairsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toUpper.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/transform.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trim.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimChars.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimCharsEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimCharsStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/truncate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unapply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unary.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unescape.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/union.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqueId.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unnest.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unset.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unzip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unzipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/update.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/updateWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/upperCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/upperFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/useWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/util.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/value.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/valueOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/values.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/valuesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/where.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/whereEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/without.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/words.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperAt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xor.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xorBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xorWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObj.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObjectDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fromPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/function.js
+%%DATADIR%%/js/node/node_modules/lodash/functions.js
+%%DATADIR%%/js/node/node_modules/lodash/functionsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/get.js
+%%DATADIR%%/js/node/node_modules/lodash/groupBy.js
+%%DATADIR%%/js/node/node_modules/lodash/gt.js
+%%DATADIR%%/js/node/node_modules/lodash/gte.js
+%%DATADIR%%/js/node/node_modules/lodash/has.js
+%%DATADIR%%/js/node/node_modules/lodash/hasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/head.js
+%%DATADIR%%/js/node/node_modules/lodash/identity.js
+%%DATADIR%%/js/node/node_modules/lodash/inRange.js
+%%DATADIR%%/js/node/node_modules/lodash/includes.js
+%%DATADIR%%/js/node/node_modules/lodash/index.js
+%%DATADIR%%/js/node/node_modules/lodash/indexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/initial.js
+%%DATADIR%%/js/node/node_modules/lodash/intersection.js
+%%DATADIR%%/js/node/node_modules/lodash/intersectionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/intersectionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/invert.js
+%%DATADIR%%/js/node/node_modules/lodash/invertBy.js
+%%DATADIR%%/js/node/node_modules/lodash/invoke.js
+%%DATADIR%%/js/node/node_modules/lodash/invokeMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/isArray.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isBoolean.js
+%%DATADIR%%/js/node/node_modules/lodash/isBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/isDate.js
+%%DATADIR%%/js/node/node_modules/lodash/isElement.js
+%%DATADIR%%/js/node/node_modules/lodash/isEmpty.js
+%%DATADIR%%/js/node/node_modules/lodash/isEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/isEqualWith.js
+%%DATADIR%%/js/node/node_modules/lodash/isError.js
+%%DATADIR%%/js/node/node_modules/lodash/isFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/isFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/isInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/isLength.js
+%%DATADIR%%/js/node/node_modules/lodash/isMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/isMatchWith.js
+%%DATADIR%%/js/node/node_modules/lodash/isNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/isNative.js
+%%DATADIR%%/js/node/node_modules/lodash/isNil.js
+%%DATADIR%%/js/node/node_modules/lodash/isNull.js
+%%DATADIR%%/js/node/node_modules/lodash/isNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/isObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/lodash/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/isSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/isSet.js
+%%DATADIR%%/js/node/node_modules/lodash/isString.js
+%%DATADIR%%/js/node/node_modules/lodash/isSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/isUndefined.js
+%%DATADIR%%/js/node/node_modules/lodash/isWeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isWeakSet.js
+%%DATADIR%%/js/node/node_modules/lodash/iteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/join.js
+%%DATADIR%%/js/node/node_modules/lodash/kebabCase.js
+%%DATADIR%%/js/node/node_modules/lodash/keyBy.js
+%%DATADIR%%/js/node/node_modules/lodash/keys.js
+%%DATADIR%%/js/node/node_modules/lodash/keysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/lang.js
+%%DATADIR%%/js/node/node_modules/lodash/last.js
+%%DATADIR%%/js/node/node_modules/lodash/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/lodash.js
+%%DATADIR%%/js/node/node_modules/lodash/lodash.min.js
+%%DATADIR%%/js/node/node_modules/lodash/lowerCase.js
+%%DATADIR%%/js/node/node_modules/lodash/lowerFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/lt.js
+%%DATADIR%%/js/node/node_modules/lodash/lte.js
+%%DATADIR%%/js/node/node_modules/lodash/map.js
+%%DATADIR%%/js/node/node_modules/lodash/mapKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/mapValues.js
+%%DATADIR%%/js/node/node_modules/lodash/matches.js
+%%DATADIR%%/js/node/node_modules/lodash/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/math.js
+%%DATADIR%%/js/node/node_modules/lodash/max.js
+%%DATADIR%%/js/node/node_modules/lodash/maxBy.js
+%%DATADIR%%/js/node/node_modules/lodash/mean.js
+%%DATADIR%%/js/node/node_modules/lodash/meanBy.js
+%%DATADIR%%/js/node/node_modules/lodash/memoize.js
+%%DATADIR%%/js/node/node_modules/lodash/merge.js
+%%DATADIR%%/js/node/node_modules/lodash/mergeWith.js
+%%DATADIR%%/js/node/node_modules/lodash/method.js
+%%DATADIR%%/js/node/node_modules/lodash/methodOf.js
+%%DATADIR%%/js/node/node_modules/lodash/min.js
+%%DATADIR%%/js/node/node_modules/lodash/minBy.js
+%%DATADIR%%/js/node/node_modules/lodash/mixin.js
+%%DATADIR%%/js/node/node_modules/lodash/multiply.js
+%%DATADIR%%/js/node/node_modules/lodash/negate.js
+%%DATADIR%%/js/node/node_modules/lodash/next.js
+%%DATADIR%%/js/node/node_modules/lodash/noop.js
+%%DATADIR%%/js/node/node_modules/lodash/now.js
+%%DATADIR%%/js/node/node_modules/lodash/nth.js
+%%DATADIR%%/js/node/node_modules/lodash/nthArg.js
+%%DATADIR%%/js/node/node_modules/lodash/number.js
+%%DATADIR%%/js/node/node_modules/lodash/object.js
+%%DATADIR%%/js/node/node_modules/lodash/omit.js
+%%DATADIR%%/js/node/node_modules/lodash/omitBy.js
+%%DATADIR%%/js/node/node_modules/lodash/once.js
+%%DATADIR%%/js/node/node_modules/lodash/orderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/over.js
+%%DATADIR%%/js/node/node_modules/lodash/overArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/overEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/overSome.js
+%%DATADIR%%/js/node/node_modules/lodash/package.json
+%%DATADIR%%/js/node/node_modules/lodash/pad.js
+%%DATADIR%%/js/node/node_modules/lodash/padEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/padStart.js
+%%DATADIR%%/js/node/node_modules/lodash/parseInt.js
+%%DATADIR%%/js/node/node_modules/lodash/partial.js
+%%DATADIR%%/js/node/node_modules/lodash/partialRight.js
+%%DATADIR%%/js/node/node_modules/lodash/partition.js
+%%DATADIR%%/js/node/node_modules/lodash/pick.js
+%%DATADIR%%/js/node/node_modules/lodash/pickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/plant.js
+%%DATADIR%%/js/node/node_modules/lodash/property.js
+%%DATADIR%%/js/node/node_modules/lodash/propertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/pull.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAllBy.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/random.js
+%%DATADIR%%/js/node/node_modules/lodash/range.js
+%%DATADIR%%/js/node/node_modules/lodash/rangeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/rearg.js
+%%DATADIR%%/js/node/node_modules/lodash/reduce.js
+%%DATADIR%%/js/node/node_modules/lodash/reduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/reject.js
+%%DATADIR%%/js/node/node_modules/lodash/remove.js
+%%DATADIR%%/js/node/node_modules/lodash/repeat.js
+%%DATADIR%%/js/node/node_modules/lodash/replace.js
+%%DATADIR%%/js/node/node_modules/lodash/rest.js
+%%DATADIR%%/js/node/node_modules/lodash/result.js
+%%DATADIR%%/js/node/node_modules/lodash/reverse.js
+%%DATADIR%%/js/node/node_modules/lodash/round.js
+%%DATADIR%%/js/node/node_modules/lodash/sample.js
+%%DATADIR%%/js/node/node_modules/lodash/sampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/seq.js
+%%DATADIR%%/js/node/node_modules/lodash/set.js
+%%DATADIR%%/js/node/node_modules/lodash/setWith.js
+%%DATADIR%%/js/node/node_modules/lodash/shuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/size.js
+%%DATADIR%%/js/node/node_modules/lodash/slice.js
+%%DATADIR%%/js/node/node_modules/lodash/snakeCase.js
+%%DATADIR%%/js/node/node_modules/lodash/some.js
+%%DATADIR%%/js/node/node_modules/lodash/sortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedUniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/split.js
+%%DATADIR%%/js/node/node_modules/lodash/spread.js
+%%DATADIR%%/js/node/node_modules/lodash/startCase.js
+%%DATADIR%%/js/node/node_modules/lodash/startsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/string.js
+%%DATADIR%%/js/node/node_modules/lodash/stubArray.js
+%%DATADIR%%/js/node/node_modules/lodash/stubFalse.js
+%%DATADIR%%/js/node/node_modules/lodash/stubObject.js
+%%DATADIR%%/js/node/node_modules/lodash/stubString.js
+%%DATADIR%%/js/node/node_modules/lodash/stubTrue.js
+%%DATADIR%%/js/node/node_modules/lodash/subtract.js
+%%DATADIR%%/js/node/node_modules/lodash/sum.js
+%%DATADIR%%/js/node/node_modules/lodash/sumBy.js
+%%DATADIR%%/js/node/node_modules/lodash/tail.js
+%%DATADIR%%/js/node/node_modules/lodash/take.js
+%%DATADIR%%/js/node/node_modules/lodash/takeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/takeWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/tap.js
+%%DATADIR%%/js/node/node_modules/lodash/template.js
+%%DATADIR%%/js/node/node_modules/lodash/templateSettings.js
+%%DATADIR%%/js/node/node_modules/lodash/throttle.js
+%%DATADIR%%/js/node/node_modules/lodash/thru.js
+%%DATADIR%%/js/node/node_modules/lodash/times.js
+%%DATADIR%%/js/node/node_modules/lodash/toArray.js
+%%DATADIR%%/js/node/node_modules/lodash/toFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/toInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/toIterator.js
+%%DATADIR%%/js/node/node_modules/lodash/toJSON.js
+%%DATADIR%%/js/node/node_modules/lodash/toLength.js
+%%DATADIR%%/js/node/node_modules/lodash/toLower.js
+%%DATADIR%%/js/node/node_modules/lodash/toNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/toPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/toPairsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/toPath.js
+%%DATADIR%%/js/node/node_modules/lodash/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/toSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/toString.js
+%%DATADIR%%/js/node/node_modules/lodash/toUpper.js
+%%DATADIR%%/js/node/node_modules/lodash/transform.js
+%%DATADIR%%/js/node/node_modules/lodash/trim.js
+%%DATADIR%%/js/node/node_modules/lodash/trimEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/trimStart.js
+%%DATADIR%%/js/node/node_modules/lodash/truncate.js
+%%DATADIR%%/js/node/node_modules/lodash/unary.js
+%%DATADIR%%/js/node/node_modules/lodash/unescape.js
+%%DATADIR%%/js/node/node_modules/lodash/union.js
+%%DATADIR%%/js/node/node_modules/lodash/unionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/unionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/uniq.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqWith.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqueId.js
+%%DATADIR%%/js/node/node_modules/lodash/unset.js
+%%DATADIR%%/js/node/node_modules/lodash/unzip.js
+%%DATADIR%%/js/node/node_modules/lodash/unzipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/update.js
+%%DATADIR%%/js/node/node_modules/lodash/updateWith.js
+%%DATADIR%%/js/node/node_modules/lodash/upperCase.js
+%%DATADIR%%/js/node/node_modules/lodash/upperFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/util.js
+%%DATADIR%%/js/node/node_modules/lodash/value.js
+%%DATADIR%%/js/node/node_modules/lodash/valueOf.js
+%%DATADIR%%/js/node/node_modules/lodash/values.js
+%%DATADIR%%/js/node/node_modules/lodash/valuesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/without.js
+%%DATADIR%%/js/node/node_modules/lodash/words.js
+%%DATADIR%%/js/node/node_modules/lodash/wrap.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperAt.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/xor.js
+%%DATADIR%%/js/node/node_modules/lodash/xorBy.js
+%%DATADIR%%/js/node/node_modules/lodash/xorWith.js
+%%DATADIR%%/js/node/node_modules/lodash/zip.js
+%%DATADIR%%/js/node/node_modules/lodash/zipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/zipObjectDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/zipWith.js
+%%DATADIR%%/js/node/node_modules/marked/.travis.yml
+%%DATADIR%%/js/node/node_modules/marked/Gulpfile.js
+%%DATADIR%%/js/node/node_modules/marked/LICENSE
+%%DATADIR%%/js/node/node_modules/marked/Makefile
+%%DATADIR%%/js/node/node_modules/marked/README.md
+%%DATADIR%%/js/node/node_modules/marked/bower.json
+%%DATADIR%%/js/node/node_modules/marked/component.json
+%%DATADIR%%/js/node/node_modules/marked/doc/broken.md
+%%DATADIR%%/js/node/node_modules/marked/doc/todo.md
+%%DATADIR%%/js/node/node_modules/marked/index.js
+%%DATADIR%%/js/node/node_modules/marked/lib/marked.js
+%%DATADIR%%/js/node/node_modules/marked/man/marked.1
+%%DATADIR%%/js/node/node_modules/marked/marked.min.js
+%%DATADIR%%/js/node/node_modules/marked/package.json
+%%DATADIR%%/js/node/node_modules/media-typer/HISTORY.md
+%%DATADIR%%/js/node/node_modules/media-typer/LICENSE
+%%DATADIR%%/js/node/node_modules/media-typer/README.md
+%%DATADIR%%/js/node/node_modules/media-typer/index.js
+%%DATADIR%%/js/node/node_modules/media-typer/package.json
+%%DATADIR%%/js/node/node_modules/mime-types/HISTORY.md
+%%DATADIR%%/js/node/node_modules/mime-types/LICENSE
+%%DATADIR%%/js/node/node_modules/mime-types/README.md
+%%DATADIR%%/js/node/node_modules/mime-types/index.js
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/HISTORY.md
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/LICENSE
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/README.md
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/db.json
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/index.js
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/package.json
+%%DATADIR%%/js/node/node_modules/mime-types/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/LICENSE
+%%DATADIR%%/js/node/node_modules/minimatch/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/minimatch.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/LICENSE.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/.travis.yml
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/LICENSE
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/README.markdown
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/example/map.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/test/map.js
+%%DATADIR%%/js/node/node_modules/minimatch/package.json
+%%DATADIR%%/js/node/node_modules/mocha/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/mocha/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/images/error.png
+%%DATADIR%%/js/node/node_modules/mocha/images/ok.png
+%%DATADIR%%/js/node/node_modules/mocha/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/debug.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/events.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/progress.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/tty.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/context.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/hook.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/bdd.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/common.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/exports.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/qunit.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/tdd.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/mocha.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/ms.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/pending.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/base.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/doc.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/dot.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/html-cov.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/html.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json-cov.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json-stream.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/landing.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/list.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/markdown.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/min.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/nyan.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/progress.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/spec.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/tap.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/coverage.jade
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/menu.jade
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/script.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/style.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/xunit.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/runnable.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/runner.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/suite.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/template.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/test.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/utils.js
+%%DATADIR%%/js/node/node_modules/mocha/mocha.css
+%%DATADIR%%/js/node/node_modules/mocha/mocha.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/.jshintrc
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/bower.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/browser.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/component.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/debug.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/node.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/README.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/diff.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/lib/growl.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/test.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.min.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/compiler.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/doctypes.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/filters.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/inline-tags.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/jade.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/lexer.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/block.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/case.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/code.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/comment.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/each.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/filter.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/literal.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/node.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/tag.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/text.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/parser.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/runtime.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/self-closing.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/utils.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/runtime.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/runtime.min.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/test.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/head.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/index.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/layout.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/user.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/user.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/example/parse.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/readme.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/dash.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/default_bool.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/dotted.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/long.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/parse.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/parse_modified.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/short.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/whitespace.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/examples/pow.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/readme.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/chmod.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/clobber.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/perm.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/race.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/rel.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/return.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/return_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/root.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/umask.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/README.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/cli.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/Makefile
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/component.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/test/index.js
+%%DATADIR%%/js/node/node_modules/mocha/package.json
+%%DATADIR%%/js/node/node_modules/netmask/README.md
+%%DATADIR%%/js/node/node_modules/netmask/example/ipcalc.coffee
+%%DATADIR%%/js/node/node_modules/netmask/lib/netmask.coffee
+%%DATADIR%%/js/node/node_modules/netmask/lib/netmask.js
+%%DATADIR%%/js/node/node_modules/netmask/package.json
+%%DATADIR%%/js/node/node_modules/netmask/test/badnets.coffee
+%%DATADIR%%/js/node/node_modules/netmask/test/netmasks.coffee
+%%DATADIR%%/js/node/node_modules/netmask/tests/netmask.js
+%%DATADIR%%/js/node/node_modules/qs/.eslintignore
+%%DATADIR%%/js/node/node_modules/qs/.eslintrc
+%%DATADIR%%/js/node/node_modules/qs/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/qs/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/qs/LICENSE
+%%DATADIR%%/js/node/node_modules/qs/README.md
+%%DATADIR%%/js/node/node_modules/qs/dist/qs.js
+%%DATADIR%%/js/node/node_modules/qs/lib/formats.js
+%%DATADIR%%/js/node/node_modules/qs/lib/index.js
+%%DATADIR%%/js/node/node_modules/qs/lib/parse.js
+%%DATADIR%%/js/node/node_modules/qs/lib/stringify.js
+%%DATADIR%%/js/node/node_modules/qs/lib/utils.js
+%%DATADIR%%/js/node/node_modules/qs/package.json
+%%DATADIR%%/js/node/node_modules/qs/test/.eslintrc
+%%DATADIR%%/js/node/node_modules/qs/test/index.js
+%%DATADIR%%/js/node/node_modules/qs/test/parse.js
+%%DATADIR%%/js/node/node_modules/qs/test/stringify.js
+%%DATADIR%%/js/node/node_modules/qs/test/utils.js
+%%DATADIR%%/js/node/node_modules/range-parser/HISTORY.md
+%%DATADIR%%/js/node/node_modules/range-parser/LICENSE
+%%DATADIR%%/js/node/node_modules/range-parser/README.md
+%%DATADIR%%/js/node/node_modules/range-parser/index.js
+%%DATADIR%%/js/node/node_modules/range-parser/package.json
+%%DATADIR%%/js/node/node_modules/semver/LICENSE
+%%DATADIR%%/js/node/node_modules/semver/README.md
+%%DATADIR%%/js/node/node_modules/semver/package.json
+%%DATADIR%%/js/node/node_modules/semver/range.bnf
+%%DATADIR%%/js/node/node_modules/semver/semver.js
+%%DATADIR%%/js/node/node_modules/sinon/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/sinon/Changelog.txt
+%%DATADIR%%/js/node/node_modules/sinon/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/README.md
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/assert.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/behavior.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/call.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/collection.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/extend.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/format.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/log_error.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/match.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/mock.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/sandbox.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/spy.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/stub.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/test.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/test_case.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/times_in_words.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/typeOf.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/core.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/event.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_server.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_timers.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/timers_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/xdr_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/xhr_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/walk.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/autolint.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/buster.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/lib/formatio.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/test/formatio-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/README.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/inherits.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.editorconfig
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.jslintrc
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.min-wd
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/lolex.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/script/ci-test.sh
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/src/lolex.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/test/lolex-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/autolint.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/jsTestDriver.conf
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/lib/samsam.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/test/samsam-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/.zuul.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/README.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/support/isBuffer.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/support/isBufferBrowser.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/browser/inspect.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/browser/is.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/debug.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/format.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/inspect.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/log.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/util.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/util.js
+%%DATADIR%%/js/node/node_modules/sinon/package.json
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-ie-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-ie.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-server-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-server.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon.js
+%%DATADIR%%/js/node/node_modules/statuses/HISTORY.md
+%%DATADIR%%/js/node/node_modules/statuses/LICENSE
+%%DATADIR%%/js/node/node_modules/statuses/README.md
+%%DATADIR%%/js/node/node_modules/statuses/codes.json
+%%DATADIR%%/js/node/node_modules/statuses/index.js
+%%DATADIR%%/js/node/node_modules/statuses/package.json
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Abidjan.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Accra.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Addis_Ababa.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Algiers.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Asmara.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Asmera.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bamako.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bangui.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Banjul.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bissau.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Blantyre.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Brazzaville.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bujumbura.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Cairo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Casablanca.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ceuta.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Conakry.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Dakar.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Dar_es_Salaam.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Djibouti.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Douala.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/El_Aaiun.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Freetown.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Gaborone.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Harare.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Johannesburg.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Juba.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kampala.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Khartoum.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kigali.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kinshasa.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Libreville.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lome.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Luanda.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lubumbashi.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lusaka.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Malabo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Maputo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Maseru.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Mbabane.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Mogadishu.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Monrovia.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Nairobi.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ndjamena.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Niamey.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Nouakchott.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ouagadougou.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Porto-Novo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Sao_Tome.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Timbuktu.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Tripoli.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Tunis.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Windhoek.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Adak.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Anchorage.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Anguilla.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Antigua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Araguaina.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Buenos_Aires.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Catamarca.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/ComodRivadavia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Cordoba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Jujuy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/La_Rioja.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Mendoza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Rio_Gallegos.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Salta.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/San_Juan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/San_Luis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Tucuman.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Ushuaia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Aruba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Asuncion.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Atikokan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Atka.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bahia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bahia_Banderas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Barbados.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Belem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Belize.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Blanc-Sablon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Boa_Vista.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bogota.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Boise.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Buenos_Aires.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cambridge_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Campo_Grande.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cancun.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Caracas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Catamarca.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cayenne.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cayman.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Chicago.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Chihuahua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Coral_Harbour.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cordoba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Costa_Rica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Creston.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cuiaba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Curacao.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Danmarkshavn.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dawson.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dawson_Creek.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Denver.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Detroit.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dominica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Edmonton.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Eirunepe.js
+%%DATADIR%%/js/node/node_modules/timezone/America/El_Salvador.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Ensenada.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fort_Nelson.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fort_Wayne.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fortaleza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Glace_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Godthab.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Goose_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Grand_Turk.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Grenada.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guadeloupe.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guatemala.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guayaquil.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guyana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Halifax.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Havana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Hermosillo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Indianapolis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Knox.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Marengo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Petersburg.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Tell_City.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Vevay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Vincennes.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Winamac.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indianapolis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Inuvik.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Iqaluit.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Jamaica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Jujuy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Juneau.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/Louisville.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/Monticello.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Knox_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kralendijk.js
+%%DATADIR%%/js/node/node_modules/timezone/America/La_Paz.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Lima.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Los_Angeles.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Louisville.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Lower_Princes.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Maceio.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Managua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Manaus.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Marigot.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Martinique.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Matamoros.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mazatlan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mendoza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Menominee.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Merida.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Metlakatla.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mexico_City.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Miquelon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Moncton.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Monterrey.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montevideo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montreal.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montserrat.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nassau.js
+%%DATADIR%%/js/node/node_modules/timezone/America/New_York.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nipigon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nome.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Noronha.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/Beulah.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/Center.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/New_Salem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Ojinaga.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Panama.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Pangnirtung.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Paramaribo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Phoenix.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Port-au-Prince.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Port_of_Spain.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Porto_Acre.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Porto_Velho.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Puerto_Rico.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rainy_River.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rankin_Inlet.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Recife.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Regina.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Resolute.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rio_Branco.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rosario.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santa_Isabel.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santarem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santiago.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santo_Domingo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Sao_Paulo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Scoresbysund.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Shiprock.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Sitka.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Barthelemy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Johns.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Kitts.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Lucia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Thomas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Vincent.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Swift_Current.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tegucigalpa.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Thule.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Thunder_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tijuana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Toronto.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tortola.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Vancouver.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Virgin.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Whitehorse.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Winnipeg.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Yakutat.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Yellowknife.js
+%%DATADIR%%/js/node/node_modules/timezone/America/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Casey.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Davis.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/DumontDUrville.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Macquarie.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Mawson.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/McMurdo.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Palmer.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Rothera.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/South_Pole.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Syowa.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Troll.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Vostok.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Arctic/Longyearbyen.js
+%%DATADIR%%/js/node/node_modules/timezone/Arctic/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aden.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Almaty.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Amman.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Anadyr.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aqtau.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aqtobe.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ashgabat.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ashkhabad.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Baghdad.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bahrain.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Baku.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bangkok.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Barnaul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Beirut.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bishkek.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Brunei.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Calcutta.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chita.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Choibalsan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chongqing.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chungking.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Colombo.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dacca.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Damascus.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dhaka.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dili.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dubai.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dushanbe.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Gaza.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Harbin.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hebron.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ho_Chi_Minh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hong_Kong.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hovd.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Irkutsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Istanbul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jakarta.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jayapura.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jerusalem.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kabul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kamchatka.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Karachi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kashgar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kathmandu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Katmandu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Khandyga.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kolkata.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Krasnoyarsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuala_Lumpur.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuching.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuwait.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Macao.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Macau.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Magadan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Makassar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Manila.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Muscat.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Nicosia.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Novokuznetsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Novosibirsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Omsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Oral.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Phnom_Penh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Pontianak.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Pyongyang.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Qatar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Qyzylorda.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Rangoon.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Riyadh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Saigon.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Sakhalin.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Samarkand.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Seoul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Shanghai.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Singapore.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Srednekolymsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Taipei.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tashkent.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tbilisi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tehran.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tel_Aviv.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Thimbu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Thimphu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tokyo.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tomsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ujung_Pandang.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ulaanbaatar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ulan_Bator.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Urumqi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ust-Nera.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Vientiane.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Vladivostok.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yakutsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yekaterinburg.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yerevan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Azores.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Bermuda.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Canary.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Cape_Verde.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Faeroe.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Faroe.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Jan_Mayen.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Madeira.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Reykjavik.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/South_Georgia.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/St_Helena.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Stanley.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/ACT.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Adelaide.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Brisbane.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Broken_Hill.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Canberra.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Currie.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Darwin.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Eucla.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Hobart.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/LHI.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Lindeman.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Lord_Howe.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Melbourne.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/NSW.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/North.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Perth.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Queensland.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/South.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Sydney.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Tasmania.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Victoria.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/West.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Yancowinna.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/Acre.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/DeNoronha.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/East.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/West.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/index.js
+%%DATADIR%%/js/node/node_modules/timezone/CET.js
+%%DATADIR%%/js/node/node_modules/timezone/CHANGELOG
+%%DATADIR%%/js/node/node_modules/timezone/CST6CDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Atlantic.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Central.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/East-Saskatchewan.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Eastern.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Mountain.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Newfoundland.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Pacific.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Saskatchewan.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Yukon.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/Continental.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/EasterIsland.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/index.js
+%%DATADIR%%/js/node/node_modules/timezone/EET.js
+%%DATADIR%%/js/node/node_modules/timezone/EST.js
+%%DATADIR%%/js/node/node_modules/timezone/EST5EDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+1.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+10.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+11.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+12.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+2.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+3.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+4.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+5.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+6.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+7.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+8.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+9.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-1.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-10.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-11.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-12.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-13.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-14.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-2.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-3.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-4.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-5.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-6.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-7.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-8.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-9.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Greenwich.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/UCT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/UTC.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Universal.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Zulu.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Amsterdam.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Andorra.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Astrakhan.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Athens.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Belfast.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Belgrade.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Berlin.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Bratislava.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Brussels.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Bucharest.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Budapest.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Busingen.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Chisinau.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Copenhagen.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Dublin.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Gibraltar.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Guernsey.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Helsinki.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Isle_of_Man.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Istanbul.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Jersey.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kaliningrad.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kiev.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kirov.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Lisbon.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Ljubljana.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/London.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Luxembourg.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Madrid.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Malta.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Mariehamn.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Minsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Monaco.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Moscow.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Nicosia.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Oslo.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Paris.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Podgorica.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Prague.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Riga.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Rome.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Samara.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/San_Marino.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Sarajevo.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Simferopol.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Skopje.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Sofia.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Stockholm.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tallinn.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tirane.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tiraspol.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Ulyanovsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Uzhgorod.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vaduz.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vatican.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vienna.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vilnius.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Volgograd.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Warsaw.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zagreb.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zaporozhye.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zurich.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/index.js
+%%DATADIR%%/js/node/node_modules/timezone/HST.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Antananarivo.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Chagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Christmas.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Cocos.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Comoro.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Kerguelen.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mahe.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Maldives.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mauritius.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mayotte.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Reunion.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/index.js
+%%DATADIR%%/js/node/node_modules/timezone/MET.js
+%%DATADIR%%/js/node/node_modules/timezone/MST.js
+%%DATADIR%%/js/node/node_modules/timezone/MST7MDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/BajaNorte.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/BajaSur.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/General.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/index.js
+%%DATADIR%%/js/node/node_modules/timezone/PST8PDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Apia.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Auckland.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Bougainville.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Chatham.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Chuuk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Easter.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Efate.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Enderbury.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Fakaofo.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Fiji.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Funafuti.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Galapagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Gambier.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Guadalcanal.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Guam.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Honolulu.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Johnston.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kiritimati.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kosrae.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kwajalein.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Majuro.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Marquesas.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Midway.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Nauru.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Niue.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Norfolk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Noumea.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pago_Pago.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Palau.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pitcairn.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pohnpei.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Ponape.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Port_Moresby.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Rarotonga.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Saipan.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Samoa.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tahiti.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tarawa.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tongatapu.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Truk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Wake.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Wallis.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Yap.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/index.js
+%%DATADIR%%/js/node/node_modules/timezone/README.md
+%%DATADIR%%/js/node/node_modules/timezone/US/Alaska.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Aleutian.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Arizona.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Central.js
+%%DATADIR%%/js/node/node_modules/timezone/US/East-Indiana.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Eastern.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Hawaii.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Indiana-Starke.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Michigan.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Mountain.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Pacific.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Samoa.js
+%%DATADIR%%/js/node/node_modules/timezone/US/index.js
+%%DATADIR%%/js/node/node_modules/timezone/WET.js
+%%DATADIR%%/js/node/node_modules/timezone/af_ZA.js
+%%DATADIR%%/js/node/node_modules/timezone/am_ET.js
+%%DATADIR%%/js/node/node_modules/timezone/ast_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/bg_BG.js
+%%DATADIR%%/js/node/node_modules/timezone/bn_BD.js
+%%DATADIR%%/js/node/node_modules/timezone/bn_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/ca_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/cs_CZ.js
+%%DATADIR%%/js/node/node_modules/timezone/de_AT.js
+%%DATADIR%%/js/node/node_modules/timezone/de_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/de_DE.js
+%%DATADIR%%/js/node/node_modules/timezone/el_GR.js
+%%DATADIR%%/js/node/node_modules/timezone/en_AU.js
+%%DATADIR%%/js/node/node_modules/timezone/en_CA.js
+%%DATADIR%%/js/node/node_modules/timezone/en_GB.js
+%%DATADIR%%/js/node/node_modules/timezone/en_HK.js
+%%DATADIR%%/js/node/node_modules/timezone/en_NZ.js
+%%DATADIR%%/js/node/node_modules/timezone/en_US.js
+%%DATADIR%%/js/node/node_modules/timezone/es_AR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CL.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CO.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_DO.js
+%%DATADIR%%/js/node/node_modules/timezone/es_EC.js
+%%DATADIR%%/js/node/node_modules/timezone/es_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/es_GT.js
+%%DATADIR%%/js/node/node_modules/timezone/es_HN.js
+%%DATADIR%%/js/node/node_modules/timezone/es_MX.js
+%%DATADIR%%/js/node/node_modules/timezone/es_NI.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PA.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PE.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_SV.js
+%%DATADIR%%/js/node/node_modules/timezone/es_UY.js
+%%DATADIR%%/js/node/node_modules/timezone/es_VE.js
+%%DATADIR%%/js/node/node_modules/timezone/eu_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/fi_FI.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_BE.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_CA.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_FR.js
+%%DATADIR%%/js/node/node_modules/timezone/gl_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/he_IL.js
+%%DATADIR%%/js/node/node_modules/timezone/hi_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/hr_HR.js
+%%DATADIR%%/js/node/node_modules/timezone/hu_HU.js
+%%DATADIR%%/js/node/node_modules/timezone/id_ID.js
+%%DATADIR%%/js/node/node_modules/timezone/index.js
+%%DATADIR%%/js/node/node_modules/timezone/it_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/it_IT.js
+%%DATADIR%%/js/node/node_modules/timezone/ja_JP.js
+%%DATADIR%%/js/node/node_modules/timezone/ko_KR.js
+%%DATADIR%%/js/node/node_modules/timezone/loaded.js
+%%DATADIR%%/js/node/node_modules/timezone/locales.js
+%%DATADIR%%/js/node/node_modules/timezone/lt_LT.js
+%%DATADIR%%/js/node/node_modules/timezone/lv_LV.js
+%%DATADIR%%/js/node/node_modules/timezone/ms_MY.js
+%%DATADIR%%/js/node/node_modules/timezone/nb_NO.js
+%%DATADIR%%/js/node/node_modules/timezone/nds_DE.js
+%%DATADIR%%/js/node/node_modules/timezone/nl_BE.js
+%%DATADIR%%/js/node/node_modules/timezone/nl_NL.js
+%%DATADIR%%/js/node/node_modules/timezone/package.json
+%%DATADIR%%/js/node/node_modules/timezone/pl_PL.js
+%%DATADIR%%/js/node/node_modules/timezone/pt_BR.js
+%%DATADIR%%/js/node/node_modules/timezone/pt_PT.js
+%%DATADIR%%/js/node/node_modules/timezone/rfc822.js
+%%DATADIR%%/js/node/node_modules/timezone/ru_RU.js
+%%DATADIR%%/js/node/node_modules/timezone/si_LK.js
+%%DATADIR%%/js/node/node_modules/timezone/sl_SI.js
+%%DATADIR%%/js/node/node_modules/timezone/sq_AL.js
+%%DATADIR%%/js/node/node_modules/timezone/sr_RS.js
+%%DATADIR%%/js/node/node_modules/timezone/sv_SE.js
+%%DATADIR%%/js/node/node_modules/timezone/synopsis.js
+%%DATADIR%%/js/node/node_modules/timezone/ta_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/uk_UA.js
+%%DATADIR%%/js/node/node_modules/timezone/ur_PK.js
+%%DATADIR%%/js/node/node_modules/timezone/vi_VN.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_CN.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_HK.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_TW.js
+%%DATADIR%%/js/node/node_modules/timezone/zones.js
+%%DATADIR%%/js/node/node_modules/type-is/HISTORY.md
+%%DATADIR%%/js/node/node_modules/type-is/LICENSE
+%%DATADIR%%/js/node/node_modules/type-is/README.md
+%%DATADIR%%/js/node/node_modules/type-is/index.js
+%%DATADIR%%/js/node/node_modules/type-is/package.json
+%%DATADIR%%/js/node/node_modules/underscore/LICENSE
+%%DATADIR%%/js/node/node_modules/underscore/README.md
+%%DATADIR%%/js/node/node_modules/underscore/package.json
+%%DATADIR%%/js/node/node_modules/underscore/underscore-min.js
+%%DATADIR%%/js/node/node_modules/underscore/underscore-min.map
+%%DATADIR%%/js/node/node_modules/underscore/underscore.js
+%%DATADIR%%/js/node/node_modules/vary/HISTORY.md
+%%DATADIR%%/js/node/node_modules/vary/LICENSE
+%%DATADIR%%/js/node/node_modules/vary/README.md
+%%DATADIR%%/js/node/node_modules/vary/index.js
+%%DATADIR%%/js/node/node_modules/vary/package.json
+%%DATADIR%%/js/node/node_modules/xmldom/.travis.yml
+%%DATADIR%%/js/node/node_modules/xmldom/LICENSE
+%%DATADIR%%/js/node/node_modules/xmldom/__package__.js
+%%DATADIR%%/js/node/node_modules/xmldom/changelog
+%%DATADIR%%/js/node/node_modules/xmldom/component.json
+%%DATADIR%%/js/node/node_modules/xmldom/dom-parser.js
+%%DATADIR%%/js/node/node_modules/xmldom/dom.js
+%%DATADIR%%/js/node/node_modules/xmldom/package.json
+%%DATADIR%%/js/node/node_modules/xmldom/readme.md
+%%DATADIR%%/js/node/node_modules/xmldom/sax.js
+%%DATADIR%%/js/node/os.js
+%%DATADIR%%/js/node/package.json
+%%DATADIR%%/js/node/punycode.js
+%%DATADIR%%/js/node/querystring.js
+%%DATADIR%%/js/node/stream.js
+%%DATADIR%%/js/node/string_decoder.js
+%%DATADIR%%/js/node/sys.js
+%%DATADIR%%/js/node/timers.js
+%%DATADIR%%/js/node/tls.js
+%%DATADIR%%/js/node/tty.js
+%%DATADIR%%/js/node/url.js
+%%DATADIR%%/js/node/util.js
+%%DATADIR%%/js/node/v8.js
+%%DATADIR%%/js/node/zlib.js
+%%DATADIR%%/js/server/arango-dfdb.js
+%%DATADIR%%/js/server/assets/swagger/css/print.css
+%%DATADIR%%/js/server/assets/swagger/css/reset.css
+%%DATADIR%%/js/server/assets/swagger/css/screen.css
+%%DATADIR%%/js/server/assets/swagger/css/style.css
+%%DATADIR%%/js/server/assets/swagger/css/typography.css
+%%DATADIR%%/js/server/assets/swagger/fonts/DroidSans-Bold.ttf
+%%DATADIR%%/js/server/assets/swagger/fonts/DroidSans.ttf
+%%DATADIR%%/js/server/assets/swagger/images/collapse.gif
+%%DATADIR%%/js/server/assets/swagger/images/expand.gif
+%%DATADIR%%/js/server/assets/swagger/images/explorer_icons.png
+%%DATADIR%%/js/server/assets/swagger/images/favicon-16x16.png
+%%DATADIR%%/js/server/assets/swagger/images/favicon-32x32.png
+%%DATADIR%%/js/server/assets/swagger/images/favicon.ico
+%%DATADIR%%/js/server/assets/swagger/images/logo_small.png
+%%DATADIR%%/js/server/assets/swagger/images/pet_store_api.png
+%%DATADIR%%/js/server/assets/swagger/images/throbber.gif
+%%DATADIR%%/js/server/assets/swagger/images/wordnik_api.png
+%%DATADIR%%/js/server/assets/swagger/index-alt.html
+%%DATADIR%%/js/server/assets/swagger/index.html
+%%DATADIR%%/js/server/assets/swagger/lang/en.js
+%%DATADIR%%/js/server/assets/swagger/lang/es.js
+%%DATADIR%%/js/server/assets/swagger/lang/fr.js
+%%DATADIR%%/js/server/assets/swagger/lang/it.js
+%%DATADIR%%/js/server/assets/swagger/lang/ja.js
+%%DATADIR%%/js/server/assets/swagger/lang/pl.js
+%%DATADIR%%/js/server/assets/swagger/lang/pt.js
+%%DATADIR%%/js/server/assets/swagger/lang/ru.js
+%%DATADIR%%/js/server/assets/swagger/lang/tr.js
+%%DATADIR%%/js/server/assets/swagger/lang/translator.js
+%%DATADIR%%/js/server/assets/swagger/lang/zh-cn.js
+%%DATADIR%%/js/server/assets/swagger/lib/backbone-min.js
+%%DATADIR%%/js/server/assets/swagger/lib/handlebars-2.0.0.js
+%%DATADIR%%/js/server/assets/swagger/lib/highlight.7.3.pack.js
+%%DATADIR%%/js/server/assets/swagger/lib/jquery-1.8.0.min.js
+%%DATADIR%%/js/server/assets/swagger/lib/jquery.ba-bbq.min.js
+%%DATADIR%%/js/server/assets/swagger/lib/jquery.slideto.min.js
+%%DATADIR%%/js/server/assets/swagger/lib/jquery.wiggle.min.js
+%%DATADIR%%/js/server/assets/swagger/lib/jsoneditor.min.js
+%%DATADIR%%/js/server/assets/swagger/lib/marked.js
+%%DATADIR%%/js/server/assets/swagger/lib/swagger-oauth.js
+%%DATADIR%%/js/server/assets/swagger/lib/underscore-min.js
+%%DATADIR%%/js/server/assets/swagger/lib/underscore-min.map
+%%DATADIR%%/js/server/assets/swagger/o2c.html
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.js
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.min.js
+%%DATADIR%%/js/server/bootstrap/autoload.js
+%%DATADIR%%/js/server/bootstrap/cluster-bootstrap.js
+%%DATADIR%%/js/server/bootstrap/coordinator-database.js
+%%DATADIR%%/js/server/bootstrap/coordinator.js
+%%DATADIR%%/js/server/bootstrap/db-server.js
+%%DATADIR%%/js/server/bootstrap/local-database.js
+%%DATADIR%%/js/server/bootstrap/modules/internal.js
+%%DATADIR%%/js/server/bootstrap/routing.js
+%%DATADIR%%/js/server/check-version.js
+%%DATADIR%%/js/server/initialize.js
+%%DATADIR%%/js/server/modules/@arangodb/actions.js
+%%DATADIR%%/js/server/modules/@arangodb/actions/echoController.js
+%%DATADIR%%/js/server/modules/@arangodb/actions/staticContentController.js
+%%DATADIR%%/js/server/modules/@arangodb/aql-helper.js
+%%DATADIR%%/js/server/modules/@arangodb/aql.js
+%%DATADIR%%/js/server/modules/@arangodb/aql/cache.js
+%%DATADIR%%/js/server/modules/@arangodb/aql/queries.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-collection.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-database.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-statement.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-view.js
+%%DATADIR%%/js/server/modules/@arangodb/cluster.js
+%%DATADIR%%/js/server/modules/@arangodb/configuration.js
+%%DATADIR%%/js/server/modules/@arangodb/database-version.js
+%%DATADIR%%/js/server/modules/@arangodb/formatter.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/auth.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/graphql.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/authentication.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/base_middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/console.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/controller.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/internals.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/model.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/query.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/repository.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/request_context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/routing.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/schema.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/sessions.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/swagger.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/swaggerDocs.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/template_middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/manager.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/manifest.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/mocha.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/oauth1.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/oauth2.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/manager.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/worker.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/request.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/response.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/route.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/router.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/swagger-context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/tokenize.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/tree.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/validation.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/routing.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/service.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/storages/collection.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/storages/jwt.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/transports/cookie.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/transports/header.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/swagger.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/test-utils.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/types.js
+%%DATADIR%%/js/server/modules/@arangodb/index.js
+%%DATADIR%%/js/server/modules/@arangodb/parser.js
+%%DATADIR%%/js/server/modules/@arangodb/replication.js
+%%DATADIR%%/js/server/modules/@arangodb/request.js
+%%DATADIR%%/js/server/modules/@arangodb/simple-query.js
+%%DATADIR%%/js/server/modules/@arangodb/statistics.js
+%%DATADIR%%/js/server/modules/@arangodb/sync-replication-debug.js
+%%DATADIR%%/js/server/modules/@arangodb/tasks.js
+%%DATADIR%%/js/server/modules/@arangodb/users.js
+%%DATADIR%%/js/server/modules/@arangodb/validator.js
+%%DATADIR%%/js/server/perftests/bigcollections.js
+%%DATADIR%%/js/server/perftests/join.js
+%%DATADIR%%/js/server/perftests/sort.js
+%%DATADIR%%/js/server/server.js
+%%DATADIR%%/js/server/upgrade-database.js
+%%DATADIR%%/js/server/worker.js
+%%PORTDOCS%%%%DOCSDIR%%/LICENSE.txt
+%%PORTDOCS%%%%DOCSDIR%%/LICENSES-OTHER-COMPONENTS.md
+%%PORTDOCS%%%%DOCSDIR%%/README.md
+%%PORTDOCS%%%%DOCSDIR%%/README.txt
diff --git a/databases/arangodb33/Makefile b/databases/arangodb33/Makefile
new file mode 100644
index 000000000000..6b7c19273067
--- /dev/null
+++ b/databases/arangodb33/Makefile
@@ -0,0 +1,49 @@
+# $FreeBSD$
+
+PORTNAME= arangodb
+DISTVERSIONPREFIX= v
+DISTVERSION= 3.3.7
+PORTREVISION= 1
+CATEGORIES= databases net
+PKGNAMESUFFIX= 33
+
+MAINTAINER= dev@dudu.ro
+COMMENT= Distributed NoSQL database with multiple data models
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS= amd64
+ONLY_FOR_ARCHS_REASON= "Only builds on amd64: https://github.com/arangodb/arangodb/issues/2334"
+
+CONFLICTS_INSTALL= arangodb32
+CONFLICTS_BUILD= v8
+
+USES= cmake:noninja compiler gmake python:2.7 ssl # ninja: error: loading 'build.ninja': No such file or directory
+USE_GITHUB= yes
+
+CMAKE_OFF= USE_JEMALLOC
+CMAKE_ON= USE_BACKTRACE
+CMAKE_ARGS= -DBASE_LD_FLAGS:STRING="-L${BUILD_WRKSRC}/3rdParty/V8/v5.7.492.77/x64.release/obj.target/src -L${BUILD_WRKSRC}/3rdParty/V8/v5.7.492.77/x64.release/obj.target/third_party/icu -L${LOCALBASE}/lib -L/usr/lib"
+
+USERS= arangodb
+GROUPS= arangodb
+USE_RC_SUBR= arangod
+
+OPTIONS_DEFINE= DOCS
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1200057
+SUB_LIST+= LEGACY_LIMITS="@comment " MODERN_LIMITS=""
+.else
+SUB_LIST+= LEGACY_LIMITS="" MODERN_LIMITS="@comment "
+.endif
+
+post-install:
+ @${REINPLACE_CMD} -e 's|/usr/local/var/lib/arangodb3|/var/db/arangodb|g' ${STAGEDIR}${PREFIX}/etc/arangodb/*.conf
+ @${REINPLACE_CMD} -e 's|/usr/local/var/log/arangodb3|/var/log/arangodb|g' ${STAGEDIR}${PREFIX}/etc/arangodb/arangod.conf
+ @${FIND} ${STAGEDIR}${PREFIX}/etc/arangodb/ -type f -name *.conf -exec ${MV} {} {}.sample \;
+ @cd ${STAGEDIR}${PREFIX} && ${RMDIR} var/lib/arangodb var/lib/arangodb-apps var/lib var/log/arangodb var/log var
+
+.include <bsd.port.mk>
diff --git a/databases/arangodb33/distinfo b/databases/arangodb33/distinfo
new file mode 100644
index 000000000000..78e058a3c72f
--- /dev/null
+++ b/databases/arangodb33/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1523536668
+SHA256 (arangodb-arangodb-v3.3.7_GH0.tar.gz) = e28128d127a8a00cc3e7ffbd9c991f6534f8924ac28d073e8204b60beff65184
+SIZE (arangodb-arangodb-v3.3.7_GH0.tar.gz) = 148263131
diff --git a/databases/arangodb33/files/arangod.in b/databases/arangodb33/files/arangod.in
new file mode 100644
index 000000000000..a71bc94b6f90
--- /dev/null
+++ b/databases/arangodb33/files/arangod.in
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+# PROVIDE: arangod
+# REQUIRE: NETWORK ldconfig
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# arangod_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable arangod.
+%%LEGACY_LIMITS%%# arangod_limits (bool): Set to "NO" by default.
+%%LEGACY_LIMITS%%# Set it to yes to run `limits -e -U arangodb`
+%%LEGACY_LIMITS%%# just before arangod starts.
+# arangod_dbpath (str): Default to "/var/db/arangodb"
+# Base database directory.
+# arangod_logpath (str): Default to "/var/log/arangodb"
+# Base logging directory
+# arangod_apppath (str): Default to "/var/db/arangodb-apps"
+# Base apps directory
+# arangod_flags (str): Custom additional arguments to be passed to arangod.
+# Default to "".
+# arangod_config (str): Default to "%%PREFIX%%/etc/arangodb/arangod.conf"
+# Path to config file
+#
+
+. /etc/rc.subr
+
+name="arangod"
+rcvar=arangod_enable
+
+load_rc_config $name
+
+: ${arangod_enable="NO"}
+%%LEGACY_LIMITS%%: ${arangod_limits="NO"}
+: ${arangod_dbpath="/var/db/arangodb"}
+: ${arangod_logpath="/var/log/arangodb"}
+: ${arangod_apppath="/var/db/arangodb-apps"}
+: ${arangod_flags=""}
+: ${arangod_user="arangodb"}
+: ${arangod_group="arangodb"}
+: ${arangod_config="%%PREFIX%%/etc/arangodb/arangod.conf"}
+
+pidfile="${arangod_dbpath}/arangod.lock"
+command=%%PREFIX%%/sbin/${name}
+command_args="--configuration $arangod_config --database.directory $arangod_dbpath --log.output ${arangod_logpath}/arangod.log --javascript.app-path ${arangod_apppath} --daemon --pid-file ${pidfile} >/dev/null 2>/dev/null"
+start_precmd="${name}_prestart"
+
+arangod_create_dbpath()
+{
+ mkdir ${arangod_dbpath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_dbpath}
+}
+
+arangod_create_logpath()
+{
+ mkdir ${arangod_logpath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_logpath}
+}
+
+arangod_create_apppath()
+{
+ mkdir ${arangod_apppath} >/dev/null 2>/dev/null
+ [ $? -eq 0 ] && chown -R ${arangod_user}:${arangod_group} ${arangod_apppath}
+}
+
+arangod_prestart()
+{
+ if [ ! -d ${arangod_dbpath} ]; then
+ arangod_create_dbpath || return 1
+ fi
+ if [ ! -d ${arangod_logpath} ]; then
+ arangod_create_logpath || return 1
+ fi
+ if [ ! -d ${arangod_apppath} ]; then
+ arangod_create_apppath || return 1
+ fi
+%%LEGACY_LIMITS%% if checkyesno arangod_limits; then
+%%LEGACY_LIMITS%% eval `/usr/bin/limits -e -U ${arangod_user}` 2>/dev/null
+%%LEGACY_LIMITS%% else
+%%LEGACY_LIMITS%% return 0
+%%LEGACY_LIMITS%% fi
+%%MODERN_LIMITS%% return 0
+}
+
+run_rc_command "$1"
diff --git a/databases/arangodb33/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h b/databases/arangodb33/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h
new file mode 100644
index 000000000000..332a42556ea4
--- /dev/null
+++ b/databases/arangodb33/files/patch-3rdParty_rocksdb_v5.6.X_util_channel.h
@@ -0,0 +1,28 @@
+In file included from rocksdb/utilities/backupable/backupable_db.cc:16:
+rocksdb/util/channel.h:35:33: error: no matching constructor for initialization of 'std::lock_guard<std::mutex>'
+ std::lock_guard<std::mutex> lk(lock_);
+ ^ ~~~~~
+/usr/include/c++/v1/__mutex_base:90:14: note: candidate constructor not viable: 1st argument ('const std::mutex') would lose const qualifier
+ explicit lock_guard(mutex_type& __m) _LIBCPP_THREAD_SAFETY_ANNOTATION(acquire_capability(__m))
+ ^
+/usr/include/c++/v1/__mutex_base:100:5: note: candidate constructor not viable: no known conversion from 'const std::mutex' to 'const std::__1::lock_guard<std::__1::mutex>' for 1st argument
+ lock_guard(lock_guard const&) _LIBCPP_EQUAL_DELETE;
+ ^
+/usr/include/c++/v1/__mutex_base:94:5: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
+ lock_guard(mutex_type& __m, adopt_lock_t) _LIBCPP_THREAD_SAFETY_ANNOTATION(requires_capability(__m))
+ ^
+1 error generated.
+
+https://github.com/facebook/rocksdb/commit/a796c06fef6a8e43d793f8e627db3f29e6f95964
+
+--- 3rdParty/rocksdb/v5.6.X/util/channel.h.orig 2018-04-13 11:22:33 UTC
++++ 3rdParty/rocksdb/v5.6.X/util/channel.h
+@@ -62,7 +62,7 @@ class channel {
+
+ private:
+ std::condition_variable cv_;
+- std::mutex lock_;
++ mutable std::mutex lock_;
+ std::queue<T> buffer_;
+ bool eof_;
+ };
diff --git a/databases/arangodb33/files/patch-CMakeLists.txt b/databases/arangodb33/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..05d422b21018
--- /dev/null
+++ b/databases/arangodb33/files/patch-CMakeLists.txt
@@ -0,0 +1,43 @@
+--- CMakeLists.txt.orig 2018-04-11 15:16:11 UTC
++++ CMakeLists.txt
+@@ -38,9 +38,9 @@ if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
+ endif ()
+
+ if (WIN32)
+- project(arangodb3 CXX C)
++ project(arangodb CXX C)
+ else ()
+- project(arangodb3 CXX C ASM)
++ project(arangodb CXX C ASM)
+ endif ()
+
+ # required for clang completion in editors
+@@ -377,7 +377,7 @@ if (CMAKE_COMPILER_IS_GNUCC OR APPLE)
+ endif ()
+
+ if (CMAKE_COMPILER_IS_CLANG)
+- if (APPLE)
++ if (APPLE OR FREEBSD)
+ set(BASE_CXX_FLAGS "${BASE_CXX_FLAGS} -stdlib=libc++")
+ add_definitions("-Wno-deprecated-declarations")
+ else ()
+@@ -483,7 +483,7 @@ else ()
+
+ include(VcMacros)
+
+- option(USE_OPTIMIZE_FOR_ARCHITECTURE "try to determine CPU architecture" ON)
++ option(USE_OPTIMIZE_FOR_ARCHITECTURE "try to determine CPU architecture" OFF)
+
+ if (USE_OPTIMIZE_FOR_ARCHITECTURE)
+ # mop: core2 (merom) is our absolute minimum!
+@@ -594,9 +594,7 @@ endif ()
+ ################################################################################
+
+ if (NOT WINDOWS)
+- set(SYS_LIBS ${SYS_LIBS} resolv)
+-
+- if (NOT DARWIN)
++ if (NOT DARWIN OR FREEBSD)
+ set(SYS_LIBS ${SYS_LIBS} rt)
+ endif ()
+ endif ()
diff --git a/databases/arangodb33/files/patch-arangod_Agency_Store.cpp b/databases/arangodb33/files/patch-arangod_Agency_Store.cpp
new file mode 100644
index 000000000000..aaf556283e4e
--- /dev/null
+++ b/databases/arangodb33/files/patch-arangod_Agency_Store.cpp
@@ -0,0 +1,11 @@
+--- arangod/Agency/Store.cpp.orig 2018-01-05 13:56:52 UTC
++++ arangod/Agency/Store.cpp
+@@ -603,7 +603,7 @@ void Store::dumpToBuilder(Builder& build
+ auto ts = std::chrono::duration_cast<std::chrono::seconds>(
+ i.first.time_since_epoch())
+ .count();
+- builder.add(i.second, VPackValue(ts));
++ builder.add(i.second, VPackValue((int64_t)ts));
+ }
+ }
+ {
diff --git a/databases/arangodb33/files/patch-arangod_RestHandler_RestAuthHandler.cpp b/databases/arangodb33/files/patch-arangod_RestHandler_RestAuthHandler.cpp
new file mode 100644
index 000000000000..df9643a70ff3
--- /dev/null
+++ b/databases/arangodb33/files/patch-arangod_RestHandler_RestAuthHandler.cpp
@@ -0,0 +1,11 @@
+--- arangod/RestHandler/RestAuthHandler.cpp.orig 2018-04-06 22:44:29 UTC
++++ arangod/RestHandler/RestAuthHandler.cpp
+@@ -54,7 +54,7 @@ std::string RestAuthHandler::generateJwt
+ VPackObjectBuilder p(&bodyBuilder);
+ bodyBuilder.add("preferred_username", VPackValue(username));
+ bodyBuilder.add("iss", VPackValue("arangodb"));
+- bodyBuilder.add("exp", VPackValue(exp.count()));
++ bodyBuilder.add("exp", VPackValue((int64_t)exp.count()));
+ }
+ AuthenticationFeature* af = AuthenticationFeature::instance();
+ TRI_ASSERT(af != nullptr);
diff --git a/databases/arangodb33/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp b/databases/arangodb33/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp
new file mode 100644
index 000000000000..1b8be3c36734
--- /dev/null
+++ b/databases/arangodb33/files/patch-arangod_RocksDBEngine_RocksDBThrottle.cpp
@@ -0,0 +1,25 @@
+--- arangod/RocksDBEngine/RocksDBThrottle.cpp.orig 2018-01-05 13:56:52 UTC
++++ arangod/RocksDBEngine/RocksDBThrottle.cpp
+@@ -515,8 +515,8 @@ void RocksDBThrottle::AdjustThreadPriori
+ pid_t tid;
+ int ret_val;
+
+- tid = syscall(SYS_gettid);
+- if (-1!=(int)tid)
++ ret_val = syscall(SYS_thr_self, &tid);
++ if (-1!=ret_val)
+ {
+ errno=0;
+ ret_val=getpriority(PRIO_PROCESS, tid);
+@@ -534,8 +534,9 @@ void RocksDBThrottle::AdjustThreadPriori
+ && (gThreadPriority._basePriority+Adjustment)!=gThreadPriority._currentPriority) {
+
+ pid_t tid;
+- tid = syscall(SYS_gettid);
+- if (-1!=(int)tid)
++ int ret_val;
++ ret_val = syscall(SYS_thr_self, &tid);
++ if (-1!=(int)ret_val)
+ {
+ gThreadPriority._currentPriority = gThreadPriority._basePriority + Adjustment;
+ setpriority(PRIO_PROCESS, tid, gThreadPriority._currentPriority);
diff --git a/databases/arangodb33/files/patch-cmake_ArangoDBInstall.cmake b/databases/arangodb33/files/patch-cmake_ArangoDBInstall.cmake
new file mode 100644
index 000000000000..91a7456014ad
--- /dev/null
+++ b/databases/arangodb33/files/patch-cmake_ArangoDBInstall.cmake
@@ -0,0 +1,11 @@
+--- cmake/ArangoDBInstall.cmake.orig 2017-11-16 20:17:40 UTC
++++ cmake/ArangoDBInstall.cmake
+@@ -100,7 +100,7 @@ endif ()
+
+ install(
+ DIRECTORY
+- ${PROJECT_BINARY_DIR}/var/log/arangodb3
++ ${PROJECT_BINARY_DIR}/var/log/arangodb
+ DESTINATION
+ ${CMAKE_INSTALL_LOCALSTATEDIR}/log
+ )
diff --git a/databases/arangodb33/files/patch-lib_Basics_ArangoGlobalContext.cpp b/databases/arangodb33/files/patch-lib_Basics_ArangoGlobalContext.cpp
new file mode 100644
index 000000000000..1e656e16fc88
--- /dev/null
+++ b/databases/arangodb33/files/patch-lib_Basics_ArangoGlobalContext.cpp
@@ -0,0 +1,14 @@
+--- lib/Basics/ArangoGlobalContext.cpp.orig 2018-04-12 13:04:01 UTC
++++ lib/Basics/ArangoGlobalContext.cpp
+@@ -145,10 +145,9 @@ ArangoGlobalContext::ArangoGlobalContext
+ #ifndef __GLIBC__
+ // Increase default stack size for libmusl:
+ pthread_attr_t a;
+- memset(&a, 0, sizeof(pthread_attr_t));
++ pthread_attr_init(&a);
+ pthread_attr_setstacksize(&a, 8*1024*1024); // 8MB as in glibc
+ pthread_attr_setguardsize(&a, 4096); // one page
+- pthread_setattr_default_np(&a);
+ #endif
+ #endif
+ #endif
diff --git a/databases/arangodb33/files/patch-lib_Basics_process-utils.cpp b/databases/arangodb33/files/patch-lib_Basics_process-utils.cpp
new file mode 100644
index 000000000000..052bc9d3ee68
--- /dev/null
+++ b/databases/arangodb33/files/patch-lib_Basics_process-utils.cpp
@@ -0,0 +1,36 @@
+--- lib/Basics/process-utils.cpp.orig 2018-01-05 13:56:52 UTC
++++ lib/Basics/process-utils.cpp
+@@ -23,7 +23,7 @@
+
+ #include "process-utils.h"
+
+-#if defined(TRI_HAVE_MACOS_MEM_STATS)
++#if defined(TRI_HAVE_MACOS_MEM_STATS) || defined(__FreeBSD__)
+ #include <sys/types.h>
+ #include <sys/sysctl.h>
+ #endif
+@@ -557,6 +557,7 @@ ProcessInfo TRI_ProcessInfoSelf() {
+ }
+
+ #else
++#ifdef _WIN32
+ /// --------------------------------------------
+ /// transform a file time to timestamp
+ /// Particularities:
+@@ -648,6 +649,7 @@ ProcessInfo TRI_ProcessInfoSelf() {
+ return result;
+ }
+ #endif
++#endif
+
+ ////////////////////////////////////////////////////////////////////////////////
+ /// @brief returns information about the process
+@@ -1435,7 +1437,7 @@ bool TRI_ContinueExternalProcess(Externa
+ /// @brief gets the physical memory
+ ////////////////////////////////////////////////////////////////////////////////
+
+-#if defined(TRI_HAVE_MACOS_MEM_STATS)
++#if defined(TRI_HAVE_MACOS_MEM_STATS) || defined(__FreeBSD__)
+
+ static uint64_t GetPhysicalMemory() {
+ int mib[2];
diff --git a/databases/arangodb33/files/patch-lib_Basics_socket-utils.h b/databases/arangodb33/files/patch-lib_Basics_socket-utils.h
new file mode 100644
index 000000000000..0bb3c0dd8b6b
--- /dev/null
+++ b/databases/arangodb33/files/patch-lib_Basics_socket-utils.h
@@ -0,0 +1,15 @@
+--- lib/Basics/socket-utils.h.orig 2017-11-15 11:23:07 UTC
++++ lib/Basics/socket-utils.h
+@@ -31,6 +31,12 @@
+ #include <WS2tcpip.h>
+ #endif
+
++#ifdef __FreeBSD__
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#endif
++
+ ////////////////////////////////////////////////////////////////////////////////
+ /// @brief socket types
+ ////////////////////////////////////////////////////////////////////////////////
diff --git a/databases/arangodb33/files/patch-lib_Logger_LogAppenderSyslog.cpp b/databases/arangodb33/files/patch-lib_Logger_LogAppenderSyslog.cpp
new file mode 100644
index 000000000000..8d31e1dd1545
--- /dev/null
+++ b/databases/arangodb33/files/patch-lib_Logger_LogAppenderSyslog.cpp
@@ -0,0 +1,11 @@
+--- lib/Logger/LogAppenderSyslog.cpp.orig 2018-04-12 15:37:36 UTC
++++ lib/Logger/LogAppenderSyslog.cpp
+@@ -62,7 +62,7 @@ LogAppenderSyslog::LogAppenderSyslog(std
+ if ('0' <= facility[0] && facility[0] <= '9') {
+ value = StringUtils::int32(facility);
+ } else {
+- CODE* ptr = reinterpret_cast<CODE*>(facilitynames);
++ const CODE* ptr = reinterpret_cast<const CODE*>(facilitynames);
+
+ while (ptr->c_name != 0) {
+ if (strcmp(ptr->c_name, facility.c_str()) == 0) {
diff --git a/databases/arangodb33/pkg-descr b/databases/arangodb33/pkg-descr
new file mode 100644
index 000000000000..9c83131f5380
--- /dev/null
+++ b/databases/arangodb33/pkg-descr
@@ -0,0 +1,5 @@
+ArangoDB is a native multi-model database with flexible data models for
+documents, graphs, and key-values. Build high performance applications
+using a convenient SQL-like query language or JavaScript extensions
+
+WWW: https://www.arangodb.com
diff --git a/databases/arangodb33/pkg-message b/databases/arangodb33/pkg-message
new file mode 100644
index 000000000000..0c88d9af080f
--- /dev/null
+++ b/databases/arangodb33/pkg-message
@@ -0,0 +1,27 @@
+[
+{ type: install
+ message: <<EOM
+You installed ArangoDB: a distributed NoSQL database.
+
+To enable the service at startup, you should execute the command:
+sysrc arangod_enable="YES"
+
+To start it as a service, you should execute the command:
+# service arangod start
+
+ArangoDB starts with the empty root password.
+
+To change the root password, run 'arangosh' as root, and execute:
+require("@arangodb/users").update("root", "new-secretpassword", true);
+
+ArangoDB has a web interface available at:
+http://localhost:8529
+
+The web interface allows you to add users, create databases, manipulate
+data.
+
+ArangoDB uses the AQL language to query and modify data, as opposed to
+the SQL language used by relational databases.
+EOM
+}
+]
diff --git a/databases/arangodb33/pkg-plist b/databases/arangodb33/pkg-plist
new file mode 100644
index 000000000000..0f09d80678c6
--- /dev/null
+++ b/databases/arangodb33/pkg-plist
@@ -0,0 +1,4798 @@
+bin/arangobench
+bin/arangodump
+bin/arangoexport
+bin/arangoimp
+bin/arangorestore
+bin/arangosh
+bin/arangovpack
+bin/foxx-manager
+@sample %%ETCDIR%%/arango-dfdb.conf.sample
+@sample %%ETCDIR%%/arango-init-database.conf.sample
+@sample %%ETCDIR%%/arango-secure-installation.conf.sample
+@sample %%ETCDIR%%/arangobench.conf.sample
+@sample %%ETCDIR%%/arangod.conf.sample
+@sample %%ETCDIR%%/arangodump.conf.sample
+@sample %%ETCDIR%%/arangoexport.conf.sample
+@sample %%ETCDIR%%/arangoimp.conf.sample
+@sample %%ETCDIR%%/arangorestore.conf.sample
+@sample %%ETCDIR%%/arangosh.conf.sample
+@sample %%ETCDIR%%/foxx-manager.conf.sample
+share/man/man1/arangobench.1.gz
+share/man/man1/arangodump.1.gz
+share/man/man1/arangoexport.1.gz
+share/man/man1/arangoimp.1.gz
+share/man/man1/arangorestore.1.gz
+share/man/man1/arangosh.1.gz
+share/man/man8/arango-dfdb.8.gz
+share/man/man8/arangod.8.gz
+share/man/man8/foxx-manager.8.gz
+share/man/man8/rcarangod.8.gz
+sbin/arango-dfdb
+sbin/arango-init-database
+sbin/arango-secure-installation
+sbin/arangod
+%%DATADIR%%/arangodb-helper
+%%DATADIR%%/arangodb-update-db
+%%DATADIR%%/exitcodes.dat
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/js/actions/_admin/app.js
+%%DATADIR%%/js/actions/_admin/database/app.js
+%%DATADIR%%/js/actions/_admin/foxx/app.js
+%%DATADIR%%/js/actions/_admin/routing/app.js
+%%DATADIR%%/js/actions/_admin/statistics/app.js
+%%DATADIR%%/js/actions/api-aqlfunction.js
+%%DATADIR%%/js/actions/api-cluster.js
+%%DATADIR%%/js/actions/api-configuration.js
+%%DATADIR%%/js/actions/api-pregel.js
+%%DATADIR%%/js/actions/api-simple.js
+%%DATADIR%%/js/actions/api-system.js
+%%DATADIR%%/js/actions/api-tasks.js
+%%DATADIR%%/js/actions/api-traversal.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/GruntFile.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/aardvark.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/api-docs.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/cluster.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/default-thumbnail.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/favicon.ico
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/foxxes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/aqltemplates.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/app.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/app.min.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/extra-minified.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/extra-minified.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/libs.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/libs.min.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style-minified.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style-minified.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/build/style.css.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-Foxx-logo-bg.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-Logo-New-V3-1.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-community-edition-Web-UI.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ArangoDB-enterprise-edition-Web-UI.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/arrowDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/arrowUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/export.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/homeIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/homeIconWhite.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/minus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panLeft.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panRight.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/panUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/plus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/xIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ammap/xIconH.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb-edition-login-optimized.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb-edition-optimized.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_alt.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_letter.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/arangodb_logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/check_radio_sheet.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_github.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_google.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_slack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/comm_stack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/cpu.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/dark-check-green-round.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/dark-check-green.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/databaseIcon.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/default_user.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/enter_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/glyphicons-halflings-white.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/glyphicons-halflings.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_bottom.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_left.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_right.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_arrow_top.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_button_bg_reverse.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_collapse.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_edit.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_expand.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_flag.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_link.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/gv_trash.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/icon_arango.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/icon_delete.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/jsoneditor-icons.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/logo_arangodb_transp.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/plus_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/ram.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/requests.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2-spinner.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/select2x2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/swagger/logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/compressed-img/swagger/throbber.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/ansi.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/bootstrap.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/grids-responsive-min.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/highlightjs.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jquery-ui-1.9.2.custom.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jquery.contextmenu.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/jsoneditor.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/nv.d3.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/select2-bootstrap.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/select2.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/css/tippy.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/FontAwesome.otf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/fontawesome/fontawesome-webfont.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSans.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansBold.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansBoldItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansLight.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/opensans/OpenSansLightItalic.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-300/Roboto-300.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-500/Roboto-500.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-700/Roboto-700.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/LICENSE.txt
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/fonts/roboto/Roboto-regular/Roboto-regular.woff2
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/body.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/documentation.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/end.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/head.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/redirect.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/scripts.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/html/start.html.part
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ArangoDB-Foxx-logo-bg.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/arrowDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/arrowUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/export.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/homeIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/homeIconWhite.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/minus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panDown.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panLeft.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panRight.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/panUp.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/plus.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/xIcon.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/ammap/xIconH.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_big.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_letter.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/arangodb_logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/check_radio_sheet.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_github.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_google.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_slack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/comm_stack.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/dark-check-green-round.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/dark-check-green.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/default_user.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/enter_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/glyphicons-halflings-white.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/glyphicons-halflings.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_edit.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_expand.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_flag.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_link.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/gv_trash.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/icon_delete.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/plus_icon.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2-spinner.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/select2x2.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/swagger/logo_small.png
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/img/swagger/throbber.gif
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/arango/templateEngine.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/_automaticRetryCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/_paginatedCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoClusterStatisticsCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoCollections.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDocument.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoDocuments.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoLogs.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoQueries.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoReplication.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoStatisticsCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoStatisticsDescriptionCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/arangoUsers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/clusterCoordinators.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/clusterServers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/coordinatorCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/foxxCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/foxxRepository.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/graphCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/notificationCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/queryManagementCollectionActive.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/queryManagementCollectionSlow.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/collections/workMonitorCollection.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/config/dygraphConfig.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/documentation/documentation.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/backbone-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/bootstrap-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/bootstrap-pagination.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.fisheye.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/d3.v3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/dygraph-combined.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/highlight.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/joi.browser.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jqconsole.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery-2.1.0.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery-ui-1.9.2.custom.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.contextmenu.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.csv.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.form.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.hotkeys.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.noty.packaged.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.snippet.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.textfill.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jquery.uploadfile.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/jsoneditor-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/marked.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/md5.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/moment.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/numeral.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/nv.d3.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/pretty-bytes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/raphael.icons.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/raphael.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/select2.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.autoCurve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.curve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.dashed.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.dotted.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.curve.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.curvedArrow.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.labels.def.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.canvas.edges.tapered.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.exporters.image.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.layout.fruchtermanReingold.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.layout.noverlap.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.animate.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.dragNodes.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.filter.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.fullScreen.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.plugins.lasso.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/sigma.renderers.halo.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/strftime-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/supervisor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/tippy.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/typeahead.bundle.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/underscore-min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/wheelnav.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/wheelnav.slicePath.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/lib/worker.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoCollectionModel.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoDocument.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoQuery.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoReplication.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoSession.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoStatistics.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoStatisticsDescription.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/arangoUsers.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/clusterCoordinator.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/clusterServer.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/coordinator.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/currentDatabase.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/foxx.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/foxxRepoModel.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/graph.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/newArangoLog.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/notification.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/queryManagement.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/userConfig.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/models/workMonitor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/startApp.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/routers/versionCheck.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationListView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/applicationsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/arangoTabbar.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/arangoTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/collectionsItemView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/collectionsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/dashboardView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/databaseView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/dbSelectionView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/documentView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/documentsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/edgeDefinitionTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/editListEntryView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/filterSelect.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/footerView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxActiveView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxEditView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxMountView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/foxxRepoView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphManagementView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphSettingsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphViewGroupByEntry.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/graphViewer2.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/helpUsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/indicesView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/lineChartDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loadingTableView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loggerView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/loginView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalApplicationMount.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalBase.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalCollectionInfo.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalDownloadFoxx.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalGraph.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalGraphTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalHotkeys.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalTable.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/modalTestResults.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodeInfoView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodeView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/nodesView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/notificationItem.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/notificationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/progressBase.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryManagementViewActive.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryManagementViewSlow.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/queryView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/scaleView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceInstallGitHubView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceInstallNewView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceInstallUploadView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceInstallUrlView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/serviceInstallView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/shardsView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/shellView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/spotlightView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/statisticBarView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/storeDetailView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/subNavigationView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/supportView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/tableView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userBarView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userManagementView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/userPermissionView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/warningList.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/templates/workMonitorView.ejs
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/.foxxInstallView.js.swo
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/_paginationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/applicationDetailView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/applicationsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/clusterView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/collectionsItemView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/collectionsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/dashboardView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/databaseView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/dbSelectionView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/documentView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/documentsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/filterSelect.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/footerView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxActiveListView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxActiveView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxInstallView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/foxxRepoView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphSettingsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/graphViewer.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/helpUsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/indicesView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/infoView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/installGitHubServiceView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/installNewServiceView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/installServiceView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/installUploadServiceView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/installUrlServiceView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/loggerView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/loginView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/modalView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/navigationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodeInfoView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodeView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/nodesView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/notificationView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/progressView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/queryView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/scaleView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/settingsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/shardsView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/showClusterView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/spotlightView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/statisticBarView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/storeDetailView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/supportView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/tableView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userBarView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userManagementView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userPermissions.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/userView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/js/views/workMonitorView.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/.scss-lint.yml
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_abstracts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_accordion.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_alert.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_animate.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_api.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_applicationDetailView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_arangoTabbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_arangoTable.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_body.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_buttons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_checkbox.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterCharts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterStates.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterStyle.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_clusterView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_collection.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_colors.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_constants.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_contentTables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboard.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboardDistribution.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dashboardHttpGroup.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dataTables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dbSelection.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dialogs.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_documentView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_documentsView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_dropdowns.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_filterSelect.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_fonts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_footer.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_foxxInstall.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_general.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_graphViewer.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_graphViewer2.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_headerBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_help.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_hotkeys.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_icons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_ie.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_jsonEditor.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_logger.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_login.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_logs.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_mixins.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_modals.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_navbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_newDashboard.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_nodes.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_notification.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_pagination.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_permissions.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_plannerImages.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_progressView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_pure.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_queryView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_range.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_resizing.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_screenSizes.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_searchBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shards.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shared.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shellView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_shortcuts.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_snippet.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_spotlightView.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_state.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_statisticBar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_subNavbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_subViewModal.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_support.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tabViews.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tiles.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_toolbar.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_tooltips.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_uploadfile.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/_userMenu.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/cluster.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_animated.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_bordered-pulled.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_core.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_fixed-width.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_icons.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_larger.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_list.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_mixins.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_path.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_rotated-flipped.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_stacked.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/_variables.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/font-awesome/font-awesome.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/generated.css.map
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/style.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/scss/style.scss
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ace.min.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-searchbox.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-spellcheck.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-static_highlight.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/ext-textarea.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/keybinding-emacs.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/keybinding-vim.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/mode-aql.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/mode-json.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/theme-jsoneditor.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/theme-textmate.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-javascript.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-json.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/src/worker-json.js.gz
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.eot
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.svg
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/fonts/arangodb.woff
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/ie7/ie7.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/ie7/ie7.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/arangofont/style.css
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/droidsans-bold.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/frontend/ttf/droidsans.ttf
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/index.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/README.md.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/dcModel.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/dcRouter.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/ecModel.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/ecRouter.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/main.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/setup.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/teardown.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/generator/templates/test.js.tmpl
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/index.html
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/index.js
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/manifest.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/package.json
+%%DATADIR%%/js/apps/system/_admin/aardvark/APP/statistics.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/index.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/manifest.json
+%%DATADIR%%/js/apps/system/_api/foxx/APP/multipart.js
+%%DATADIR%%/js/apps/system/_api/foxx/APP/schemas.js
+%%DATADIR%%/js/apps/system/_api/gharial/APP/gharial.js
+%%DATADIR%%/js/apps/system/_api/gharial/APP/manifest.json
+%%DATADIR%%/js/client/assets/queuetest/dirname.js
+%%DATADIR%%/js/client/assets/queuetest/queuetest.js
+%%DATADIR%%/js/client/bootstrap/modules/internal.js
+%%DATADIR%%/js/client/client.js
+%%DATADIR%%/js/client/modules/@arangodb/actions.js
+%%DATADIR%%/js/client/modules/@arangodb/aql/cache.js
+%%DATADIR%%/js/client/modules/@arangodb/aql/queries.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-collection.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-database.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-query-cursor.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-statement.js
+%%DATADIR%%/js/client/modules/@arangodb/arango-view.js
+%%DATADIR%%/js/client/modules/@arangodb/arangosh.js
+%%DATADIR%%/js/client/modules/@arangodb/configuration.js
+%%DATADIR%%/js/client/modules/@arangodb/crash-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/foxx/manager.js
+%%DATADIR%%/js/client/modules/@arangodb/index.js
+%%DATADIR%%/js/client/modules/@arangodb/pregel.js
+%%DATADIR%%/js/client/modules/@arangodb/process-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/replication.js
+%%DATADIR%%/js/client/modules/@arangodb/simple-query.js
+%%DATADIR%%/js/client/modules/@arangodb/tasks.js
+%%DATADIR%%/js/client/modules/@arangodb/test-utils.js
+%%DATADIR%%/js/client/modules/@arangodb/testing.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/agency.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/aql.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/arangobench.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/arangosh.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/authentication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/backup.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/catch.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/config.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dfdb.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dump.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dump_authentication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/dump_encrypted.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/endpoints.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/export.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/fail.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/foxxmanager.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/importing.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/ldap.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/perf.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/queryCacheAuthorization.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/readOnly.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/recovery.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/replication.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/resilience.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/rspec.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/single.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/stress.js
+%%DATADIR%%/js/client/modules/@arangodb/testsuites/upgrade.js
+%%DATADIR%%/js/client/modules/@arangodb/tutorial.js
+%%DATADIR%%/js/client/modules/@arangodb/user-helper.js
+%%DATADIR%%/js/client/modules/@arangodb/users.js
+%%DATADIR%%/js/client/modules/@arangodb/work-monitor.js
+%%DATADIR%%/js/common/bootstrap/errors.js
+%%DATADIR%%/js/common/bootstrap/exitcodes.js
+%%DATADIR%%/js/common/bootstrap/modules.js
+%%DATADIR%%/js/common/bootstrap/modules/assert.js
+%%DATADIR%%/js/common/bootstrap/modules/buffer.js
+%%DATADIR%%/js/common/bootstrap/modules/console.js
+%%DATADIR%%/js/common/bootstrap/modules/events.js
+%%DATADIR%%/js/common/bootstrap/modules/fs.js
+%%DATADIR%%/js/common/bootstrap/modules/internal.js
+%%DATADIR%%/js/common/bootstrap/modules/path.js
+%%DATADIR%%/js/common/bootstrap/modules/process.js
+%%DATADIR%%/js/common/bootstrap/modules/vm.js
+%%DATADIR%%/js/common/bootstrap/scaffolding.js
+%%DATADIR%%/js/common/modules/@arangodb/aql/explainer.js
+%%DATADIR%%/js/common/modules/@arangodb/aql/functions.js
+%%DATADIR%%/js/common/modules/@arangodb/arango-collection-common.js
+%%DATADIR%%/js/common/modules/@arangodb/arango-statement-common.js
+%%DATADIR%%/js/common/modules/@arangodb/common.js
+%%DATADIR%%/js/common/modules/@arangodb/crypto.js
+%%DATADIR%%/js/common/modules/@arangodb/deprecated.js
+%%DATADIR%%/js/common/modules/@arangodb/examples/example-users.js
+%%DATADIR%%/js/common/modules/@arangodb/extend.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/check-args.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/manager-utils.js
+%%DATADIR%%/js/common/modules/@arangodb/foxx/store.js
+%%DATADIR%%/js/common/modules/@arangodb/general-graph.js
+%%DATADIR%%/js/common/modules/@arangodb/graph-examples/example-graph.js
+%%DATADIR%%/js/common/modules/@arangodb/graph/helpers.js
+%%DATADIR%%/js/common/modules/@arangodb/graph/traversal.js
+%%DATADIR%%/js/common/modules/@arangodb/heap.js
+%%DATADIR%%/js/common/modules/@arangodb/is.js
+%%DATADIR%%/js/common/modules/@arangodb/mocha-runner.js
+%%DATADIR%%/js/common/modules/@arangodb/mocha.js
+%%DATADIR%%/js/common/modules/@arangodb/request.js
+%%DATADIR%%/js/common/modules/@arangodb/simple-query-common.js
+%%DATADIR%%/js/common/modules/@arangodb/test-helper.js
+%%DATADIR%%/js/common/modules/@arangodb/testrunner.js
+%%DATADIR%%/js/common/modules/@arangodb/util.js
+%%DATADIR%%/js/common/modules/jslint.js
+%%DATADIR%%/js/common/modules/jsunity.js
+%%DATADIR%%/js/common/modules/jsunity/jsunity.js
+%%DATADIR%%/js/common/modules/loadtestrunner.js
+%%DATADIR%%/js/common/modules/reportgenerator.js
+%%DATADIR%%/js/contrib/CSV_export/CSVexport.js
+%%DATADIR%%/js/contrib/flux/ansi.js
+%%DATADIR%%/js/contrib/flux/axel.js
+%%DATADIR%%/js/contrib/flux/flux.js
+%%DATADIR%%/js/contrib/graph_generators/circle.js
+%%DATADIR%%/js/contrib/graph_generators/grid.js
+%%DATADIR%%/js/contrib/graph_generators/random.js
+%%DATADIR%%/js/contrib/graph_generators/tree.js
+%%DATADIR%%/js/node/GENERATE_LICENSE
+%%DATADIR%%/js/node/VERSIONS
+%%DATADIR%%/js/node/_stream_duplex.js
+%%DATADIR%%/js/node/_stream_passthrough.js
+%%DATADIR%%/js/node/_stream_readable.js
+%%DATADIR%%/js/node/_stream_transform.js
+%%DATADIR%%/js/node/_stream_writable.js
+%%DATADIR%%/js/node/child_process.js
+%%DATADIR%%/js/node/cluster.js
+%%DATADIR%%/js/node/constants.js
+%%DATADIR%%/js/node/crypto.js
+%%DATADIR%%/js/node/dgram.js
+%%DATADIR%%/js/node/dns.js
+%%DATADIR%%/js/node/domain.js
+%%DATADIR%%/js/node/http.js
+%%DATADIR%%/js/node/https.js
+%%DATADIR%%/js/node/net.js
+%%DATADIR%%/js/node/node_modules/accepts/HISTORY.md
+%%DATADIR%%/js/node/node_modules/accepts/LICENSE
+%%DATADIR%%/js/node/node_modules/accepts/README.md
+%%DATADIR%%/js/node/node_modules/accepts/index.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/HISTORY.md
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/LICENSE
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/README.md
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/index.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/charset.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/encoding.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/language.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/lib/mediaType.js
+%%DATADIR%%/js/node/node_modules/accepts/node_modules/negotiator/package.json
+%%DATADIR%%/js/node/node_modules/accepts/package.json
+%%DATADIR%%/js/node/node_modules/ansi-html/LICENSE
+%%DATADIR%%/js/node/node_modules/ansi-html/README.md
+%%DATADIR%%/js/node/node_modules/ansi-html/index.js
+%%DATADIR%%/js/node/node_modules/ansi-html/package.json
+%%DATADIR%%/js/node/node_modules/aqb/LICENSE
+%%DATADIR%%/js/node/node_modules/aqb/README.md
+%%DATADIR%%/js/node/node_modules/aqb/assumptions.js
+%%DATADIR%%/js/node/node_modules/aqb/errors.js
+%%DATADIR%%/js/node/node_modules/aqb/index.js
+%%DATADIR%%/js/node/node_modules/aqb/package.json
+%%DATADIR%%/js/node/node_modules/aqb/types.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/lib/index.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/LICENSE.BSD
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/ast.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/code.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/keyword.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/lib/utils.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/esutils/package.json
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/LICENSE
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/README.md
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/index.js
+%%DATADIR%%/js/node/node_modules/babel-code-frame/node_modules/js-tokens/package.json
+%%DATADIR%%/js/node/node_modules/babel-code-frame/package.json
+%%DATADIR%%/js/node/node_modules/chai/CODE_OF_CONDUCT.md
+%%DATADIR%%/js/node/node_modules/chai/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/chai/History.md
+%%DATADIR%%/js/node/node_modules/chai/README.md
+%%DATADIR%%/js/node/node_modules/chai/ReleaseNotes.md
+%%DATADIR%%/js/node/node_modules/chai/bower.json
+%%DATADIR%%/js/node/node_modules/chai/chai.js
+%%DATADIR%%/js/node/node_modules/chai/index.js
+%%DATADIR%%/js/node/node_modules/chai/karma.conf.js
+%%DATADIR%%/js/node/node_modules/chai/karma.sauce.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/assertion.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/config.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/core/assertions.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/assert.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/expect.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/interface/should.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addChainableMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/addProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/expectTypes.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/flag.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getActual.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getEnumerableProperties.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getMessage.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getName.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getPathInfo.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getPathValue.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/getProperties.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/hasProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/index.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/inspect.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/objDisplay.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteChainableMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteMethod.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/overwriteProperty.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/test.js
+%%DATADIR%%/js/node/node_modules/chai/lib/chai/utils/transferFlags.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/assertion-error/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/karma.conf.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/lib/eql.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/lib/type.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/node_modules/type-detect/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/deep-eql/package.json
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/History.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/README.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/ReleaseNotes.md
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/index.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/lib/type.js
+%%DATADIR%%/js/node/node_modules/chai/node_modules/type-detect/package.json
+%%DATADIR%%/js/node/node_modules/chai/package.json
+%%DATADIR%%/js/node/node_modules/chai/sauce.browsers.js
+%%DATADIR%%/js/node/node_modules/chalk/index.js
+%%DATADIR%%/js/node/node_modules/chalk/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-regex/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/ansi-styles/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/escape-string-regexp/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/has-ansi/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/strip-ansi/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/index.js
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/license
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/package.json
+%%DATADIR%%/js/node/node_modules/chalk/node_modules/supports-color/readme.md
+%%DATADIR%%/js/node/node_modules/chalk/package.json
+%%DATADIR%%/js/node/node_modules/chalk/readme.md
+%%DATADIR%%/js/node/node_modules/content-disposition/HISTORY.md
+%%DATADIR%%/js/node/node_modules/content-disposition/LICENSE
+%%DATADIR%%/js/node/node_modules/content-disposition/README.md
+%%DATADIR%%/js/node/node_modules/content-disposition/index.js
+%%DATADIR%%/js/node/node_modules/content-disposition/package.json
+%%DATADIR%%/js/node/node_modules/dedent/LICENSE
+%%DATADIR%%/js/node/node_modules/dedent/README.md
+%%DATADIR%%/js/node/node_modules/dedent/dist/dedent.js
+%%DATADIR%%/js/node/node_modules/dedent/package.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/LICENSE
+%%DATADIR%%/js/node/node_modules/error-stack-parser/README.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/ErrorStackParser.tgz
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/dist/error-stack-parser.min.js.map
+%%DATADIR%%/js/node/node_modules/error-stack-parser/error-stack-parser.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/.jshintrc
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/.nvmrc
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/LICENSE
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/README.md
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/bower.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/dist/stackframe.min.js.map
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/gulpfile.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.ci.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/karma.conf.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/package.json
+%%DATADIR%%/js/node/node_modules/error-stack-parser/node_modules/stackframe/stackframe.js
+%%DATADIR%%/js/node/node_modules/error-stack-parser/package.json
+%%DATADIR%%/js/node/node_modules/expect.js/History.md
+%%DATADIR%%/js/node/node_modules/expect.js/README.md
+%%DATADIR%%/js/node/node_modules/expect.js/index.js
+%%DATADIR%%/js/node/node_modules/expect.js/package.json
+%%DATADIR%%/js/node/node_modules/extendible/.travis.yml
+%%DATADIR%%/js/node/node_modules/extendible/README.md
+%%DATADIR%%/js/node/node_modules/extendible/example/index.js
+%%DATADIR%%/js/node/node_modules/extendible/index.js
+%%DATADIR%%/js/node/node_modules/extendible/package.json
+%%DATADIR%%/js/node/node_modules/extendible/test.js
+%%DATADIR%%/js/node/node_modules/glob/index.js
+%%DATADIR%%/js/node/node_modules/glob/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/README.md
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/execute.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/execution/values.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/graphql.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/lib/utilities.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/PATENTS
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/README.md
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/GraphQLError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/formatError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/locatedError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/error/syntaxError.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/execute.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/execution/values.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/graphql.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/find.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/invariant.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/isNullish.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/keyMap.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/keyValMap.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/quotedOrList.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/jsutils/suggestionList.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/ast.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/kinds.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/lexer.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/location.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/parser.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/printer.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/source.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/language/visitor.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/definition.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/directives.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/introspection.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/scalars.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/type/schema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/TypeInfo.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/assertValidName.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/astFromValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/buildASTSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/buildClientSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/concatAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/extendSchema.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/getOperationAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/introspectionQuery.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/isValidJSValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/isValidLiteralValue.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/schemaPrinter.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/typeComparators.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/typeFromAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/utilities/valueFromAST.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ArgumentsOfCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/DefaultValuesOfCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/FieldsOnCorrectType.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/FragmentsOnCompositeTypes.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownArgumentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownDirectives.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownFragmentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/KnownTypeNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/LoneAnonymousOperation.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoFragmentCycles.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUndefinedVariables.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUnusedFragments.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/NoUnusedVariables.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMerged.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/PossibleFragmentSpreads.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ProvidedNonNullArguments.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/ScalarLeafs.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueArgumentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueFragmentNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueInputFieldNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueOperationNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/UniqueVariableNames.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/VariablesAreInputTypes.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/rules/VariablesInAllowedPosition.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/specifiedRules.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/graphql/validation/validate.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/LICENSE
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.d.ts
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.js
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/index.js.flow
+%%DATADIR%%/js/node/node_modules/graphql-sync/node_modules/iterall/package.json
+%%DATADIR%%/js/node/node_modules/graphql-sync/package.json
+%%DATADIR%%/js/node/node_modules/highlightjs/LICENSE
+%%DATADIR%%/js/node/node_modules/highlightjs/README.md
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/api.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/building-testing.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/css-classes-reference.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/index.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-contribution.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-guide.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/language-requests.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/line-numbers.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/reference.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/%%CMAKE_BUILD_TYPE%%-process.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/docs/style-guide.rst
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/highlight.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/index.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/1c.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/abnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/accesslog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/actionscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ada.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/apache.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/applescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/arduino.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/armasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/asciidoc.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/aspectj.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/autohotkey.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/autoit.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/avrasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/awk.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/axapta.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/bash.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/basic.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/bnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/brainfuck.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cal.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/capnproto.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ceylon.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clean.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clojure-repl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/clojure.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cmake.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/coffeescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/coq.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cos.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cpp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/crmsh.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/crystal.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/cs.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/csp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/css.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/d.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dart.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/delphi.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/diff.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/django.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dns.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dockerfile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dos.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dsconfig.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dts.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/dust.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ebnf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/elixir.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/elm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erb.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erlang-repl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/erlang.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/excel.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/flix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fortran.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/fsharp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gams.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gauss.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gcode.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gherkin.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/glsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/go.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/golo.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/gradle.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/groovy.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/handlebars.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haskell.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/haxe.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/hsp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/htmlbars.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/http.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/inform7.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ini.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/irpf90.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/java.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/javascript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/json.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/julia.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/kotlin.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lasso.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ldif.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/less.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lisp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/livecodeserver.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/livescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/lua.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/makefile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/markdown.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mathematica.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/matlab.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/maxima.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mel.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mercury.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mipsasm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mizar.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/mojolicious.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/monkey.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/moonscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nginx.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nimrod.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nix.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/nsis.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/objectivec.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ocaml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/openscad.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/oxygene.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/parser3.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/perl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/pf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/php.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/pony.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/powershell.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/processing.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/profile.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/prolog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/protobuf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/puppet.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/purebasic.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/python.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/q.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/qml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/r.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rib.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/roboconf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rsl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ruby.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/ruleslanguage.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/rust.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scala.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scheme.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scilab.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/scss.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/smali.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/smalltalk.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sqf.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/sql.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stan.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stata.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/step21.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/stylus.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/subunit.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/swift.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/taggerscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tap.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tcl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tex.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/thrift.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/tp.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/twig.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/typescript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vala.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbnet.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbscript-html.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vbscript.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/verilog.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vhdl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/vim.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/x86asm.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xl.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/xquery.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/yaml.js
+%%DATADIR%%/js/node/node_modules/highlightjs/lib/languages/zephir.js
+%%DATADIR%%/js/node/node_modules/highlightjs/package.json
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/agate.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/androidstudio.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/arduino-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/arta.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ascetic.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-cave-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-cave-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-dune-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-dune-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-estuary-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-estuary-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-forest-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-forest-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-heath-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-heath-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-lakeside-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-lakeside-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-plateau-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-plateau-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-savanna-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-savanna-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-seaside-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-seaside-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-sulphurpool-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atelier-sulphurpool-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atom-one-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/atom-one-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/brown-paper.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/brown-papersq.png
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/codepen-embed.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/color-brewer.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/darcula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/darkula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/default.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/docco.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/dracula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/far.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/foundation.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/github-gist.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/github.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/googlecode.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/grayscale.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/gruvbox-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/gruvbox-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/hopscotch.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/hybrid.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/idea.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ir-black.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/kimbie.dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/kimbie.light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/magula.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/mono-blue.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/monokai-sublime.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/monokai.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/obsidian.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/ocean.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/paraiso-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/paraiso-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/pojoaque.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/pojoaque.jpg
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/purebasic.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/qtcreator_dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/qtcreator_light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/railscasts.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/rainbow.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/school-book.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/school-book.png
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/solarized-dark.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/solarized-light.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/sunburst.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-blue.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-bright.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night-eighties.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow-night.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/tomorrow.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/vs.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/xcode.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/xt256.css
+%%DATADIR%%/js/node/node_modules/highlightjs/styles/zenburn.css
+%%DATADIR%%/js/node/node_modules/http-errors/HISTORY.md
+%%DATADIR%%/js/node/node_modules/http-errors/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/index.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/inherits.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/package.json
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/inherits/test.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/LICENSE
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/README.md
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/index.js
+%%DATADIR%%/js/node/node_modules/http-errors/node_modules/setprototypeof/package.json
+%%DATADIR%%/js/node/node_modules/http-errors/package.json
+%%DATADIR%%/js/node/node_modules/i/.travis.yml
+%%DATADIR%%/js/node/node_modules/i/LICENSE
+%%DATADIR%%/js/node/node_modules/i/README.md
+%%DATADIR%%/js/node/node_modules/i/lib/defaults.js
+%%DATADIR%%/js/node/node_modules/i/lib/inflect.js
+%%DATADIR%%/js/node/node_modules/i/lib/inflections.js
+%%DATADIR%%/js/node/node_modules/i/lib/methods.js
+%%DATADIR%%/js/node/node_modules/i/lib/native.js
+%%DATADIR%%/js/node/node_modules/i/lib/util.js
+%%DATADIR%%/js/node/node_modules/i/package.json
+%%DATADIR%%/js/node/node_modules/i/test/inflector/cases.js
+%%DATADIR%%/js/node/node_modules/i/test/inflector/inflections-test.js
+%%DATADIR%%/js/node/node_modules/i/test/inflector/methods-test.js
+%%DATADIR%%/js/node/node_modules/i/test/utils/array-test.js
+%%DATADIR%%/js/node/node_modules/i/test/utils/string-test.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/.travis.yml
+%%DATADIR%%/js/node/node_modules/iconv-lite/Changelog.md
+%%DATADIR%%/js/node/node_modules/iconv-lite/LICENSE
+%%DATADIR%%/js/node/node_modules/iconv-lite/README.md
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/dbcs-codec.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/dbcs-data.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/index.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/internal.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-codec.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-data-generated.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/sbcs-data.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/big5-added.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp936.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp949.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/cp950.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/eucjp.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/gbk-added.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/tables/shiftjis.json
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/utf16.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/encodings/utf7.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/bom-handling.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/extend-node.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/index.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/lib/streams.js
+%%DATADIR%%/js/node/node_modules/iconv-lite/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/build/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/build/index.js.map
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/images/hoek.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/lib/escape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/escaper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/ignore.txt
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test1.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test2.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/hoek/test/modules/test3.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/Makefile
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/lib/isemail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/isemail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/mocha.opts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/isemail/test/tests.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/.eslintignore
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/API.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/conditionalRequire.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/customMessage.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/examples/multipleWhen.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/generate-readme-toc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/images/joi.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/images/validation.png
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/binary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/boolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/cast.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/errors.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/language.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/ref.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/ip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/rfc3986.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/lib/string/uri.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/binary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/boolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/errors.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/helper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/ref.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/joi/test/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/chunk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/compact.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/difference.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/drop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/dropWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/fill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/findIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/first.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/flatten.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/head.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/indexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/initial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/intersection.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/last.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/pull.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/pullAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/remove.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/rest.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/slice.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/tail.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/take.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/takeWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/union.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/uniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unique.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unzip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/unzipWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/without.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/xor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zip.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zipObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/array/zipWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/chain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/commit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/concat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/lodash.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/plant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/reverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/run.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/tap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/thru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/toJSON.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/toString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/value.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/valueOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperCommit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperConcat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperPlant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperToString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/chain/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/all.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/any.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/collect.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/contains.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/countBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/detect.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/each.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/eachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/every.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/filter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/find.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/findLast.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/findWhere.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/foldl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/foldr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/forEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/forEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/groupBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/include.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/includes.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/indexBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/inject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/invoke.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/map.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/partition.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/pluck.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reduceRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/reject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sample.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/select.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/shuffle.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/size.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/some.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortByAll.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sortByOrder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/sum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/collection/where.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/date/now.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/after.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/ary.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/backflow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/before.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bindAll.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/bindKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/compose.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/curry.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/curryRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/debounce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/defer.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/delay.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/flow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/flowRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/memoize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/modArgs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/negate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/once.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/partial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/partialRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/rearg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/restParam.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/spread.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/throttle.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/function/wrap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/LazyWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/LodashWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/MapCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/SetCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayConcat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayCopy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayEvery.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayFilter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayPush.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arrayReduceRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arraySome.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/arraySum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignOwnDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/assignWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseAssign.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCompareAscending.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCopy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseCreate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseDelay.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseDifference.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEachRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseEvery.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFilter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFindIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFlatten.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForOwnRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseForRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseFunctions.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseGet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsEqual.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsEqualDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsFunction.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseIsMatch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseLodash.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMatches.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMatchesProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMerge.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseMergeDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/basePropertyDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/basePullAt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseRandom.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSetData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSlice.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSome.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSortBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSortByOrder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseSum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseToString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseUniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseValues.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseWhile.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/baseWrapperValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/binaryIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/binaryIndexBy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/bindCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/bufferClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/cacheIndexOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/cachePush.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/charsLeftIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/charsRightIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/compareAscending.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/compareMultiple.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/composeArgs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/composeArgsRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createAggregator.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createAssigner.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBaseEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBaseFor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createBindWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCache.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCompounder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCtorWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createCurry.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createExtremum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFind.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFindIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFindKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createFlow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForEach.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createForOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createHybridWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createObjectMapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPadDir.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPadding.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPartial.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createPartialWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createReduce.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createRound.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createSortedIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/createWrapper.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/deburrLetter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalArrays.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalByTag.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/equalObjects.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeRegExpChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/escapeStringChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getFuncName.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getLength.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getMatchData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getNative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/getView.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/indexOfNaN.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneByTag.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/initCloneObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/invokePath.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isIterateeCall.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isLaziable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isLength.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isSpace.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/isStrictComparable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyReverse.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/lazyValue.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapDelete.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapGet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapHas.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mapSet.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mergeData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/mergeDefaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/metaMap.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/pickByArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/pickByCallback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reEscape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reEvaluate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reInterpolate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/realNames.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/reorder.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/replaceHolders.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/setData.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/shimKeys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toIterable.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/toPath.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/trimmedLeftIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/trimmedRightIndex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/unescapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/internal/wrapperClone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/clone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/eq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/gt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/gte.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isArguments.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isBoolean.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isDate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isElement.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isEmpty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isEqual.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isError.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isFinite.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isFunction.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isMatch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNaN.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNull.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isNumber.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isRegExp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isString.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/isUndefined.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/lte.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/toArray.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/lang/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/add.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/ceil.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/floor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/round.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/math/sum.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number/inRange.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/number/random.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/assign.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/create.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/defaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/extend.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/findKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/findLastKey.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forInRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forOwn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/functions.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/get.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/has.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/invert.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/keys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/keysIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/mapKeys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/mapValues.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/merge.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/methods.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/omit.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/pairs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/pick.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/result.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/transform.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/values.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/object/valuesIn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/camelCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/capitalize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/deburr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/endsWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/escape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/kebabCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/pad.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/padLeft.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/padRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/parseInt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/repeat.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/snakeCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/startCase.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/startsWith.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/template.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/templateSettings.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trim.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trimLeft.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trimRight.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/trunc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/unescape.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/string/words.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/support.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/attempt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/callback.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/constant.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/identity.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/iteratee.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/matches.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/method.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/methodOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/mixin.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/noop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/property.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/propertyOf.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/range.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/times.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/lodash/utility/uniqueId.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/ender.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/locales.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment-with-locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment-with-locales.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/min/moment.min.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/moment.d.ts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/package.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/check-overflow.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/date-from-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-anything.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string-and-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string-and-format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/from-string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/local.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/parsing-flags.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/utc.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/create/valid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/abs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/as.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/bubble.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/create.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/duration.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/get.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/humanize.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/iso-string.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/duration/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/format/format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/base-config.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/calendar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/en.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/formats.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/invalid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/lists.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/locale.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/locales.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/ordinal.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/pre-post-format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/relative.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/locale/set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/calendar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/clone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/compare.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/constructor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/creation-data.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/diff.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/format.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/from.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/get-set.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/locale.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/min-max.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/now.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/prototype.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/start-end-of.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/to-type.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/to.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/moment/valid.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/parse/regex.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/parse/token.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/aliases.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/constants.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-month.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-week.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/day-of-year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/hour.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/millisecond.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/minute.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/month.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/offset.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/priorities.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/quarter.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/second.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/timestamp.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/timezone.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/units.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week-calendar-utils.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week-year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/week.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/units/year.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-ceil.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-floor.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/abs-round.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/compare-arrays.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/defaults.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/deprecate.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/extend.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/has-own-prop.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/hooks.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/index-of.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-array.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-date.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-function.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-object-empty.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-object.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/is-undefined.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/keys.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/map.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/some.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/to-int.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/lib/utils/zero-fill.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/moment/src/moment.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/.travis.yml
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/API.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/LICENSE
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/README.md
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/node_modules/topo/test/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/package.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/src/index.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/convert_test.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/fixtures/complicated.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/fixtures/transform.json
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/mocha.opts
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/setup.js
+%%DATADIR%%/js/node/node_modules/joi-to-json-schema/test/transformer_test.js
+%%DATADIR%%/js/node/node_modules/joi/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/README.md
+%%DATADIR%%/js/node/node_modules/joi/lib/alternatives.js
+%%DATADIR%%/js/node/node_modules/joi/lib/any.js
+%%DATADIR%%/js/node/node_modules/joi/lib/array.js
+%%DATADIR%%/js/node/node_modules/joi/lib/binary.js
+%%DATADIR%%/js/node/node_modules/joi/lib/boolean.js
+%%DATADIR%%/js/node/node_modules/joi/lib/cast.js
+%%DATADIR%%/js/node/node_modules/joi/lib/date.js
+%%DATADIR%%/js/node/node_modules/joi/lib/errors.js
+%%DATADIR%%/js/node/node_modules/joi/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/lib/language.js
+%%DATADIR%%/js/node/node_modules/joi/lib/lazy.js
+%%DATADIR%%/js/node/node_modules/joi/lib/number.js
+%%DATADIR%%/js/node/node_modules/joi/lib/object.js
+%%DATADIR%%/js/node/node_modules/joi/lib/ref.js
+%%DATADIR%%/js/node/node_modules/joi/lib/schemas.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/ip.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/rfc3986.js
+%%DATADIR%%/js/node/node_modules/joi/lib/string/uri.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/lib/escape.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/hoek/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/isemail/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/items/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/LICENSE
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/ender.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/locales.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment-with-locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment-with-locales.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/min/moment.min.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/moment.d.ts
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/package.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/package.json
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/check-overflow.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/date-from-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-anything.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-object.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string-and-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string-and-format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/from-string.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/local.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/parsing-flags.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/utc.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/create/valid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/abs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/as.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/bubble.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/create.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/duration.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/get.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/humanize.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/iso-string.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/duration/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/format/format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/base-config.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/calendar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/en.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/formats.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/invalid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/lists.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/locale.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/locales.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/ordinal.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/pre-post-format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/relative.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/locale/set.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/add-subtract.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/calendar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/clone.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/compare.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/constructor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/creation-data.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/diff.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/format.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/from.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/get-set.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/locale.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/min-max.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/now.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/prototype.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/start-end-of.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/to-type.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/to.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/moment/valid.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/parse/regex.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/parse/token.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/aliases.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/constants.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-month.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-week.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/day-of-year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/hour.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/millisecond.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/minute.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/month.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/offset.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/priorities.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/quarter.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/second.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/timestamp.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/timezone.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/units.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week-calendar-utils.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week-year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/week.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/units/year.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-ceil.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-floor.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/abs-round.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/compare-arrays.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/defaults.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/deprecate.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/extend.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/has-own-prop.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/hooks.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/index-of.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-array.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-date.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-function.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-object-empty.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-object.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/is-undefined.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/keys.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/map.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/some.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/to-int.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/lib/utils/zero-fill.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/af.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-ly.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-ma.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-sa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar-tn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ar.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/az.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/be.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bg.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/bs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cs.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/cy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/da.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/de-at.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/de.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/dv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/el.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-au.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-gb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-ie.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/en-nz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/eo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/es-do.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/es.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/et.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/eu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fa.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr-ca.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr-ch.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/fy.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/gd.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/gl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/he.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hu.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/hy-am.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/id.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/is.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/it.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ja.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/jv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ka.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/kk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/km.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ko.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ky.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/lv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/me.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ml.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/mr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ms-my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ms.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/my.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nb.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ne.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/nn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pa-in.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pt-br.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/pt.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ro.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ru.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/se.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/si.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sq.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sr-cyrl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ss.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sv.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/sw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/ta.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/te.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/th.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tl-ph.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tlh.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tr.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzl.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzm-latn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/tzm.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/uk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/uz.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/vi.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/x-pseudo.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-cn.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-hk.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/locale/zh-tw.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/moment/src/moment.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/README.md
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/lib/index.js
+%%DATADIR%%/js/node/node_modules/joi/node_modules/topo/package.json
+%%DATADIR%%/js/node/node_modules/joi/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/js-yaml/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/dist/js-yaml.js
+%%DATADIR%%/js/node/node_modules/js-yaml/dist/js-yaml.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/index.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/common.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/dumper.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/exception.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/loader.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/mark.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/core.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/default_full.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/schema/json.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/binary.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/bool.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/float.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/int.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/function.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/map.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/merge.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/null.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/omap.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/pairs.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/seq.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/set.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/str.js
+%%DATADIR%%/js/node/node_modules/js-yaml/lib/js-yaml/type/timestamp.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/index.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/append.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/count.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/help.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action/version.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/action_container.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argparse.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/const.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/namespace.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/lib/utils.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/argparse/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/ChangeLog
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/LICENSE.BSD
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/esprima.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/esprima/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/LICENSE
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/README.md
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/bower.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/demo/angular.html
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.js.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/angular-sprintf.min.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.js.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/dist/sprintf.min.map
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/gruntfile.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/package.json
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/src/angular-sprintf.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/src/sprintf.js
+%%DATADIR%%/js/node/node_modules/js-yaml/node_modules/sprintf-js/test/test.js
+%%DATADIR%%/js/node/node_modules/js-yaml/package.json
+%%DATADIR%%/js/node/node_modules/lodash/LICENSE
+%%DATADIR%%/js/node/node_modules/lodash/README.md
+%%DATADIR%%/js/node/node_modules/lodash/_DataView.js
+%%DATADIR%%/js/node/node_modules/lodash/_Hash.js
+%%DATADIR%%/js/node/node_modules/lodash/_LazyWrapper.js
+%%DATADIR%%/js/node/node_modules/lodash/_ListCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_LodashWrapper.js
+%%DATADIR%%/js/node/node_modules/lodash/_Map.js
+%%DATADIR%%/js/node/node_modules/lodash/_MapCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_Promise.js
+%%DATADIR%%/js/node/node_modules/lodash/_Set.js
+%%DATADIR%%/js/node/node_modules/lodash/_SetCache.js
+%%DATADIR%%/js/node/node_modules/lodash/_Stack.js
+%%DATADIR%%/js/node/node_modules/lodash/_Symbol.js
+%%DATADIR%%/js/node/node_modules/lodash/_Uint8Array.js
+%%DATADIR%%/js/node/node_modules/lodash/_WeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_addMapEntry.js
+%%DATADIR%%/js/node/node_modules/lodash/_addSetEntry.js
+%%DATADIR%%/js/node/node_modules/lodash/_apply.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayFilter.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayIncludes.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayIncludesWith.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayLikeKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayPush.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayReduce.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayReduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySample.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_arrayShuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/_arraySome.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_asciiWords.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignInDefaults.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignMergeValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_assignValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_assocIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAssign.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAssignValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseAt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseClamp.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseClone.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseConforms.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseConformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseCreate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseDelay.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseDifference.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseExtremum.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFill.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFilter.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFindIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFlatten.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFor.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseForRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseFunctions.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGetAllKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGetTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseGt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseHasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIndexOfWith.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIntersection.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInverter.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseInvoke.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsDate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsEqualDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsNative.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIsTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseIteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseLt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMatches.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMatchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMean.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMerge.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseMergeDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseNth.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseOrderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePick.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePropertyDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePropertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/_basePullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRandom.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseReduce.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRepeat.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSample.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSetData.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSetToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseShuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSlice.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSome.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseSum.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseTimes.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUnary.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUnset.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseUpdate.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseValues.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseWrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseXor.js
+%%DATADIR%%/js/node/node_modules/lodash/_baseZipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_cacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_castArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_castFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/_castPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_castRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_castSlice.js
+%%DATADIR%%/js/node/node_modules/lodash/_charsEndIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_charsStartIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneDataView.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/_cloneTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_compareAscending.js
+%%DATADIR%%/js/node/node_modules/lodash/_compareMultiple.js
+%%DATADIR%%/js/node/node_modules/lodash/_composeArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/_composeArgsRight.js
+%%DATADIR%%/js/node/node_modules/lodash/_copyArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_copyObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_copySymbols.js
+%%DATADIR%%/js/node/node_modules/lodash/_coreJsData.js
+%%DATADIR%%/js/node/node_modules/lodash/_countHolders.js
+%%DATADIR%%/js/node/node_modules/lodash/_createAggregator.js
+%%DATADIR%%/js/node/node_modules/lodash/_createAssigner.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBaseEach.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBaseFor.js
+%%DATADIR%%/js/node/node_modules/lodash/_createBind.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCaseFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCompounder.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCtor.js
+%%DATADIR%%/js/node/node_modules/lodash/_createCurry.js
+%%DATADIR%%/js/node/node_modules/lodash/_createFind.js
+%%DATADIR%%/js/node/node_modules/lodash/_createFlow.js
+%%DATADIR%%/js/node/node_modules/lodash/_createHybrid.js
+%%DATADIR%%/js/node/node_modules/lodash/_createInverter.js
+%%DATADIR%%/js/node/node_modules/lodash/_createMathOperation.js
+%%DATADIR%%/js/node/node_modules/lodash/_createOver.js
+%%DATADIR%%/js/node/node_modules/lodash/_createPadding.js
+%%DATADIR%%/js/node/node_modules/lodash/_createPartial.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRange.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRecurry.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRelationalOperation.js
+%%DATADIR%%/js/node/node_modules/lodash/_createRound.js
+%%DATADIR%%/js/node/node_modules/lodash/_createSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_createToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_createWrap.js
+%%DATADIR%%/js/node/node_modules/lodash/_deburrLetter.js
+%%DATADIR%%/js/node/node_modules/lodash/_defineProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalArrays.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalByTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_equalObjects.js
+%%DATADIR%%/js/node/node_modules/lodash/_escapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_escapeStringChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_flatRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_freeGlobal.js
+%%DATADIR%%/js/node/node_modules/lodash/_getAllKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_getAllKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_getData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getFuncName.js
+%%DATADIR%%/js/node/node_modules/lodash/_getHolder.js
+%%DATADIR%%/js/node/node_modules/lodash/_getMapData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getMatchData.js
+%%DATADIR%%/js/node/node_modules/lodash/_getNative.js
+%%DATADIR%%/js/node/node_modules/lodash/_getPrototype.js
+%%DATADIR%%/js/node/node_modules/lodash/_getRawTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_getSymbols.js
+%%DATADIR%%/js/node/node_modules/lodash/_getSymbolsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_getTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_getValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_getView.js
+%%DATADIR%%/js/node/node_modules/lodash/_getWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasUnicode.js
+%%DATADIR%%/js/node/node_modules/lodash/_hasUnicodeWord.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_hashSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneByTag.js
+%%DATADIR%%/js/node/node_modules/lodash/_initCloneObject.js
+%%DATADIR%%/js/node/node_modules/lodash/_insertWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_isFlattenable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/_isIterateeCall.js
+%%DATADIR%%/js/node/node_modules/lodash/_isKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_isKeyable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isLaziable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isMaskable.js
+%%DATADIR%%/js/node/node_modules/lodash/_isMasked.js
+%%DATADIR%%/js/node/node_modules/lodash/_isPrototype.js
+%%DATADIR%%/js/node/node_modules/lodash/_isStrictComparable.js
+%%DATADIR%%/js/node/node_modules/lodash/_iteratorToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyClone.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/_lazyValue.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_listCacheSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapCacheSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_mapToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_matchesStrictComparable.js
+%%DATADIR%%/js/node/node_modules/lodash/_memoizeCapped.js
+%%DATADIR%%/js/node/node_modules/lodash/_mergeData.js
+%%DATADIR%%/js/node/node_modules/lodash/_mergeDefaults.js
+%%DATADIR%%/js/node/node_modules/lodash/_metaMap.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeCreate.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/_nativeKeysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/_nodeUtil.js
+%%DATADIR%%/js/node/node_modules/lodash/_objectToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_overArg.js
+%%DATADIR%%/js/node/node_modules/lodash/_overRest.js
+%%DATADIR%%/js/node/node_modules/lodash/_parent.js
+%%DATADIR%%/js/node/node_modules/lodash/_reEscape.js
+%%DATADIR%%/js/node/node_modules/lodash/_reEvaluate.js
+%%DATADIR%%/js/node/node_modules/lodash/_reInterpolate.js
+%%DATADIR%%/js/node/node_modules/lodash/_realNames.js
+%%DATADIR%%/js/node/node_modules/lodash/_reorder.js
+%%DATADIR%%/js/node/node_modules/lodash/_replaceHolders.js
+%%DATADIR%%/js/node/node_modules/lodash/_root.js
+%%DATADIR%%/js/node/node_modules/lodash/_setCacheAdd.js
+%%DATADIR%%/js/node/node_modules/lodash/_setCacheHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_setData.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/_setToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_setWrapToString.js
+%%DATADIR%%/js/node/node_modules/lodash/_shortOut.js
+%%DATADIR%%/js/node/node_modules/lodash/_shuffleSelf.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackClear.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackDelete.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackGet.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackHas.js
+%%DATADIR%%/js/node/node_modules/lodash/_stackSet.js
+%%DATADIR%%/js/node/node_modules/lodash/_strictIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_strictLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_stringToPath.js
+%%DATADIR%%/js/node/node_modules/lodash/_toKey.js
+%%DATADIR%%/js/node/node_modules/lodash/_toSource.js
+%%DATADIR%%/js/node/node_modules/lodash/_unescapeHtmlChar.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeSize.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeToArray.js
+%%DATADIR%%/js/node/node_modules/lodash/_unicodeWords.js
+%%DATADIR%%/js/node/node_modules/lodash/_updateWrapDetails.js
+%%DATADIR%%/js/node/node_modules/lodash/_wrapperClone.js
+%%DATADIR%%/js/node/node_modules/lodash/add.js
+%%DATADIR%%/js/node/node_modules/lodash/after.js
+%%DATADIR%%/js/node/node_modules/lodash/array.js
+%%DATADIR%%/js/node/node_modules/lodash/ary.js
+%%DATADIR%%/js/node/node_modules/lodash/assign.js
+%%DATADIR%%/js/node/node_modules/lodash/assignIn.js
+%%DATADIR%%/js/node/node_modules/lodash/assignInWith.js
+%%DATADIR%%/js/node/node_modules/lodash/assignWith.js
+%%DATADIR%%/js/node/node_modules/lodash/at.js
+%%DATADIR%%/js/node/node_modules/lodash/attempt.js
+%%DATADIR%%/js/node/node_modules/lodash/before.js
+%%DATADIR%%/js/node/node_modules/lodash/bind.js
+%%DATADIR%%/js/node/node_modules/lodash/bindAll.js
+%%DATADIR%%/js/node/node_modules/lodash/bindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/camelCase.js
+%%DATADIR%%/js/node/node_modules/lodash/capitalize.js
+%%DATADIR%%/js/node/node_modules/lodash/castArray.js
+%%DATADIR%%/js/node/node_modules/lodash/ceil.js
+%%DATADIR%%/js/node/node_modules/lodash/chain.js
+%%DATADIR%%/js/node/node_modules/lodash/chunk.js
+%%DATADIR%%/js/node/node_modules/lodash/clamp.js
+%%DATADIR%%/js/node/node_modules/lodash/clone.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneDeepWith.js
+%%DATADIR%%/js/node/node_modules/lodash/cloneWith.js
+%%DATADIR%%/js/node/node_modules/lodash/collection.js
+%%DATADIR%%/js/node/node_modules/lodash/commit.js
+%%DATADIR%%/js/node/node_modules/lodash/compact.js
+%%DATADIR%%/js/node/node_modules/lodash/concat.js
+%%DATADIR%%/js/node/node_modules/lodash/cond.js
+%%DATADIR%%/js/node/node_modules/lodash/conforms.js
+%%DATADIR%%/js/node/node_modules/lodash/conformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/constant.js
+%%DATADIR%%/js/node/node_modules/lodash/core.js
+%%DATADIR%%/js/node/node_modules/lodash/core.min.js
+%%DATADIR%%/js/node/node_modules/lodash/countBy.js
+%%DATADIR%%/js/node/node_modules/lodash/create.js
+%%DATADIR%%/js/node/node_modules/lodash/curry.js
+%%DATADIR%%/js/node/node_modules/lodash/curryRight.js
+%%DATADIR%%/js/node/node_modules/lodash/date.js
+%%DATADIR%%/js/node/node_modules/lodash/debounce.js
+%%DATADIR%%/js/node/node_modules/lodash/deburr.js
+%%DATADIR%%/js/node/node_modules/lodash/defaultTo.js
+%%DATADIR%%/js/node/node_modules/lodash/defaults.js
+%%DATADIR%%/js/node/node_modules/lodash/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/defer.js
+%%DATADIR%%/js/node/node_modules/lodash/delay.js
+%%DATADIR%%/js/node/node_modules/lodash/difference.js
+%%DATADIR%%/js/node/node_modules/lodash/differenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/differenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/divide.js
+%%DATADIR%%/js/node/node_modules/lodash/drop.js
+%%DATADIR%%/js/node/node_modules/lodash/dropRight.js
+%%DATADIR%%/js/node/node_modules/lodash/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/dropWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/each.js
+%%DATADIR%%/js/node/node_modules/lodash/eachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/endsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/entries.js
+%%DATADIR%%/js/node/node_modules/lodash/entriesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/eq.js
+%%DATADIR%%/js/node/node_modules/lodash/escape.js
+%%DATADIR%%/js/node/node_modules/lodash/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/every.js
+%%DATADIR%%/js/node/node_modules/lodash/extend.js
+%%DATADIR%%/js/node/node_modules/lodash/extendWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fill.js
+%%DATADIR%%/js/node/node_modules/lodash/filter.js
+%%DATADIR%%/js/node/node_modules/lodash/find.js
+%%DATADIR%%/js/node/node_modules/lodash/findIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/findKey.js
+%%DATADIR%%/js/node/node_modules/lodash/findLast.js
+%%DATADIR%%/js/node/node_modules/lodash/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/findLastKey.js
+%%DATADIR%%/js/node/node_modules/lodash/first.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMap.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMapDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/flatMapDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/flatten.js
+%%DATADIR%%/js/node/node_modules/lodash/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/flattenDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/flip.js
+%%DATADIR%%/js/node/node_modules/lodash/floor.js
+%%DATADIR%%/js/node/node_modules/lodash/flow.js
+%%DATADIR%%/js/node/node_modules/lodash/flowRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forEach.js
+%%DATADIR%%/js/node/node_modules/lodash/forEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forIn.js
+%%DATADIR%%/js/node/node_modules/lodash/forInRight.js
+%%DATADIR%%/js/node/node_modules/lodash/forOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/F.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/T.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/__.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_baseConvert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_convertBrowser.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_falseOptions.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_mapping.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/_util.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/add.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/after.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/all.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/allPass.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/always.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/any.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/anyPass.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/apply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/array.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/ary.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assign.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignInWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assignWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assoc.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/assocPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/at.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/attempt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/before.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bind.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bindAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/bindKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/camelCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/capitalize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/castArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/ceil.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/chain.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/chunk.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/clamp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/clone.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneDeepWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cloneWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/collection.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/commit.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/compact.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/complement.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/compose.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/concat.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/cond.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/conforms.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/conformsTo.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/constant.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/contains.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/convert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/countBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/create.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curry.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/curryRightN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/date.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/debounce.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/deburr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultTo.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaults.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defaultsDeepAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/defer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/delay.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/difference.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/differenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/differenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dissoc.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dissocPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/divide.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/drop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropLastWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/dropWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/each.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/eachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/endsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/entries.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/entriesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/eq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/equals.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/escape.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/escapeRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/every.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extend.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/extendWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/fill.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/filter.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/find.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findIndexFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastIndexFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/findLastKey.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/first.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMapDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatMapDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flatten.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flattenDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flattenDepth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/floor.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flow.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/flowRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forEach.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forEachRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forInRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forOwn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/forOwnRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/fromPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/function.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/functions.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/functionsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/get.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/getOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/groupBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/gt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/gte.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/has.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/hasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/head.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/identical.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/identity.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/inRange.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/includes.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/includesFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/indexOfFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/init.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/initial.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersection.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersectionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/intersectionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invert.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invertBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invertObj.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invoke.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeArgsMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/invokeMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isBoolean.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isDate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isElement.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEmpty.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isEqualWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isError.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isLength.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isMatchWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNative.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNil.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNull.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSet.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isUndefined.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isWeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/isWeakSet.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/iteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/join.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/juxt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/kebabCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keyBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keys.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/keysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lang.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/last.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lastIndexOfFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lowerCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lowerFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/lte.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/map.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mapKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mapValues.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/matches.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/math.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/max.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/maxBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mean.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/meanBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/memoize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/merge.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mergeWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/method.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/methodOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/min.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/minBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/mixin.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/multiply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nAry.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/negate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/next.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/noop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/now.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nth.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/nthArg.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/number.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/object.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omit.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omitAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/omitBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/once.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/orderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/over.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/overSome.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pad.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padChars.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padCharsEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padCharsStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/padStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/parseInt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partial.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partialRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/partition.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/path.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pathEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pathOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/paths.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pick.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pickAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pipe.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/placeholder.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/plant.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pluck.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/prop.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propOr.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/property.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/propertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/props.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pull.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAllBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/pullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/random.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/range.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeStep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rangeStepRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rearg.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reduce.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/remove.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/repeat.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/replace.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/rest.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/restFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/result.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/reverse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/round.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sample.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/seq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/set.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/setWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/shuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/size.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/slice.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/snakeCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/some.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sortedUniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/split.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/spread.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/spreadFrom.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/startCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/startsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/string.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubFalse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/stubTrue.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/subtract.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sum.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/sumBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifference.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifferenceBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/symmetricDifferenceWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/tail.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/take.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeLast.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeLastWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/takeWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/tap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/template.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/templateSettings.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/throttle.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/thru.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/times.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toArray.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toIterator.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toJSON.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toLength.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toLower.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPairsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPath.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toString.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/toUpper.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/transform.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trim.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimChars.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimCharsEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimCharsStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/trimStart.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/truncate.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unapply.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unary.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unescape.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/union.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/uniqueId.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unnest.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unset.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unzip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/unzipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/update.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/updateWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/upperCase.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/upperFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/useWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/util.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/value.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/valueOf.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/values.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/valuesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/where.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/whereEq.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/without.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/words.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrap.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperAt.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xor.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xorBy.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/xorWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zip.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipAll.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObj.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipObjectDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/fp/zipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/fromPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/function.js
+%%DATADIR%%/js/node/node_modules/lodash/functions.js
+%%DATADIR%%/js/node/node_modules/lodash/functionsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/get.js
+%%DATADIR%%/js/node/node_modules/lodash/groupBy.js
+%%DATADIR%%/js/node/node_modules/lodash/gt.js
+%%DATADIR%%/js/node/node_modules/lodash/gte.js
+%%DATADIR%%/js/node/node_modules/lodash/has.js
+%%DATADIR%%/js/node/node_modules/lodash/hasIn.js
+%%DATADIR%%/js/node/node_modules/lodash/head.js
+%%DATADIR%%/js/node/node_modules/lodash/identity.js
+%%DATADIR%%/js/node/node_modules/lodash/inRange.js
+%%DATADIR%%/js/node/node_modules/lodash/includes.js
+%%DATADIR%%/js/node/node_modules/lodash/index.js
+%%DATADIR%%/js/node/node_modules/lodash/indexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/initial.js
+%%DATADIR%%/js/node/node_modules/lodash/intersection.js
+%%DATADIR%%/js/node/node_modules/lodash/intersectionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/intersectionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/invert.js
+%%DATADIR%%/js/node/node_modules/lodash/invertBy.js
+%%DATADIR%%/js/node/node_modules/lodash/invoke.js
+%%DATADIR%%/js/node/node_modules/lodash/invokeMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isArguments.js
+%%DATADIR%%/js/node/node_modules/lodash/isArray.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayLike.js
+%%DATADIR%%/js/node/node_modules/lodash/isArrayLikeObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isBoolean.js
+%%DATADIR%%/js/node/node_modules/lodash/isBuffer.js
+%%DATADIR%%/js/node/node_modules/lodash/isDate.js
+%%DATADIR%%/js/node/node_modules/lodash/isElement.js
+%%DATADIR%%/js/node/node_modules/lodash/isEmpty.js
+%%DATADIR%%/js/node/node_modules/lodash/isEqual.js
+%%DATADIR%%/js/node/node_modules/lodash/isEqualWith.js
+%%DATADIR%%/js/node/node_modules/lodash/isError.js
+%%DATADIR%%/js/node/node_modules/lodash/isFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/isFunction.js
+%%DATADIR%%/js/node/node_modules/lodash/isInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/isLength.js
+%%DATADIR%%/js/node/node_modules/lodash/isMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isMatch.js
+%%DATADIR%%/js/node/node_modules/lodash/isMatchWith.js
+%%DATADIR%%/js/node/node_modules/lodash/isNaN.js
+%%DATADIR%%/js/node/node_modules/lodash/isNative.js
+%%DATADIR%%/js/node/node_modules/lodash/isNil.js
+%%DATADIR%%/js/node/node_modules/lodash/isNull.js
+%%DATADIR%%/js/node/node_modules/lodash/isNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/isObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isObjectLike.js
+%%DATADIR%%/js/node/node_modules/lodash/isPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/isRegExp.js
+%%DATADIR%%/js/node/node_modules/lodash/isSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/isSet.js
+%%DATADIR%%/js/node/node_modules/lodash/isString.js
+%%DATADIR%%/js/node/node_modules/lodash/isSymbol.js
+%%DATADIR%%/js/node/node_modules/lodash/isTypedArray.js
+%%DATADIR%%/js/node/node_modules/lodash/isUndefined.js
+%%DATADIR%%/js/node/node_modules/lodash/isWeakMap.js
+%%DATADIR%%/js/node/node_modules/lodash/isWeakSet.js
+%%DATADIR%%/js/node/node_modules/lodash/iteratee.js
+%%DATADIR%%/js/node/node_modules/lodash/join.js
+%%DATADIR%%/js/node/node_modules/lodash/kebabCase.js
+%%DATADIR%%/js/node/node_modules/lodash/keyBy.js
+%%DATADIR%%/js/node/node_modules/lodash/keys.js
+%%DATADIR%%/js/node/node_modules/lodash/keysIn.js
+%%DATADIR%%/js/node/node_modules/lodash/lang.js
+%%DATADIR%%/js/node/node_modules/lodash/last.js
+%%DATADIR%%/js/node/node_modules/lodash/lastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/lodash.js
+%%DATADIR%%/js/node/node_modules/lodash/lodash.min.js
+%%DATADIR%%/js/node/node_modules/lodash/lowerCase.js
+%%DATADIR%%/js/node/node_modules/lodash/lowerFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/lt.js
+%%DATADIR%%/js/node/node_modules/lodash/lte.js
+%%DATADIR%%/js/node/node_modules/lodash/map.js
+%%DATADIR%%/js/node/node_modules/lodash/mapKeys.js
+%%DATADIR%%/js/node/node_modules/lodash/mapValues.js
+%%DATADIR%%/js/node/node_modules/lodash/matches.js
+%%DATADIR%%/js/node/node_modules/lodash/matchesProperty.js
+%%DATADIR%%/js/node/node_modules/lodash/math.js
+%%DATADIR%%/js/node/node_modules/lodash/max.js
+%%DATADIR%%/js/node/node_modules/lodash/maxBy.js
+%%DATADIR%%/js/node/node_modules/lodash/mean.js
+%%DATADIR%%/js/node/node_modules/lodash/meanBy.js
+%%DATADIR%%/js/node/node_modules/lodash/memoize.js
+%%DATADIR%%/js/node/node_modules/lodash/merge.js
+%%DATADIR%%/js/node/node_modules/lodash/mergeWith.js
+%%DATADIR%%/js/node/node_modules/lodash/method.js
+%%DATADIR%%/js/node/node_modules/lodash/methodOf.js
+%%DATADIR%%/js/node/node_modules/lodash/min.js
+%%DATADIR%%/js/node/node_modules/lodash/minBy.js
+%%DATADIR%%/js/node/node_modules/lodash/mixin.js
+%%DATADIR%%/js/node/node_modules/lodash/multiply.js
+%%DATADIR%%/js/node/node_modules/lodash/negate.js
+%%DATADIR%%/js/node/node_modules/lodash/next.js
+%%DATADIR%%/js/node/node_modules/lodash/noop.js
+%%DATADIR%%/js/node/node_modules/lodash/now.js
+%%DATADIR%%/js/node/node_modules/lodash/nth.js
+%%DATADIR%%/js/node/node_modules/lodash/nthArg.js
+%%DATADIR%%/js/node/node_modules/lodash/number.js
+%%DATADIR%%/js/node/node_modules/lodash/object.js
+%%DATADIR%%/js/node/node_modules/lodash/omit.js
+%%DATADIR%%/js/node/node_modules/lodash/omitBy.js
+%%DATADIR%%/js/node/node_modules/lodash/once.js
+%%DATADIR%%/js/node/node_modules/lodash/orderBy.js
+%%DATADIR%%/js/node/node_modules/lodash/over.js
+%%DATADIR%%/js/node/node_modules/lodash/overArgs.js
+%%DATADIR%%/js/node/node_modules/lodash/overEvery.js
+%%DATADIR%%/js/node/node_modules/lodash/overSome.js
+%%DATADIR%%/js/node/node_modules/lodash/package.json
+%%DATADIR%%/js/node/node_modules/lodash/pad.js
+%%DATADIR%%/js/node/node_modules/lodash/padEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/padStart.js
+%%DATADIR%%/js/node/node_modules/lodash/parseInt.js
+%%DATADIR%%/js/node/node_modules/lodash/partial.js
+%%DATADIR%%/js/node/node_modules/lodash/partialRight.js
+%%DATADIR%%/js/node/node_modules/lodash/partition.js
+%%DATADIR%%/js/node/node_modules/lodash/pick.js
+%%DATADIR%%/js/node/node_modules/lodash/pickBy.js
+%%DATADIR%%/js/node/node_modules/lodash/plant.js
+%%DATADIR%%/js/node/node_modules/lodash/property.js
+%%DATADIR%%/js/node/node_modules/lodash/propertyOf.js
+%%DATADIR%%/js/node/node_modules/lodash/pull.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAll.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAllBy.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAllWith.js
+%%DATADIR%%/js/node/node_modules/lodash/pullAt.js
+%%DATADIR%%/js/node/node_modules/lodash/random.js
+%%DATADIR%%/js/node/node_modules/lodash/range.js
+%%DATADIR%%/js/node/node_modules/lodash/rangeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/rearg.js
+%%DATADIR%%/js/node/node_modules/lodash/reduce.js
+%%DATADIR%%/js/node/node_modules/lodash/reduceRight.js
+%%DATADIR%%/js/node/node_modules/lodash/reject.js
+%%DATADIR%%/js/node/node_modules/lodash/remove.js
+%%DATADIR%%/js/node/node_modules/lodash/repeat.js
+%%DATADIR%%/js/node/node_modules/lodash/replace.js
+%%DATADIR%%/js/node/node_modules/lodash/rest.js
+%%DATADIR%%/js/node/node_modules/lodash/result.js
+%%DATADIR%%/js/node/node_modules/lodash/reverse.js
+%%DATADIR%%/js/node/node_modules/lodash/round.js
+%%DATADIR%%/js/node/node_modules/lodash/sample.js
+%%DATADIR%%/js/node/node_modules/lodash/sampleSize.js
+%%DATADIR%%/js/node/node_modules/lodash/seq.js
+%%DATADIR%%/js/node/node_modules/lodash/set.js
+%%DATADIR%%/js/node/node_modules/lodash/setWith.js
+%%DATADIR%%/js/node/node_modules/lodash/shuffle.js
+%%DATADIR%%/js/node/node_modules/lodash/size.js
+%%DATADIR%%/js/node/node_modules/lodash/slice.js
+%%DATADIR%%/js/node/node_modules/lodash/snakeCase.js
+%%DATADIR%%/js/node/node_modules/lodash/some.js
+%%DATADIR%%/js/node/node_modules/lodash/sortBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndex.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndexBy.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedLastIndexOf.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedUniq.js
+%%DATADIR%%/js/node/node_modules/lodash/sortedUniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/split.js
+%%DATADIR%%/js/node/node_modules/lodash/spread.js
+%%DATADIR%%/js/node/node_modules/lodash/startCase.js
+%%DATADIR%%/js/node/node_modules/lodash/startsWith.js
+%%DATADIR%%/js/node/node_modules/lodash/string.js
+%%DATADIR%%/js/node/node_modules/lodash/stubArray.js
+%%DATADIR%%/js/node/node_modules/lodash/stubFalse.js
+%%DATADIR%%/js/node/node_modules/lodash/stubObject.js
+%%DATADIR%%/js/node/node_modules/lodash/stubString.js
+%%DATADIR%%/js/node/node_modules/lodash/stubTrue.js
+%%DATADIR%%/js/node/node_modules/lodash/subtract.js
+%%DATADIR%%/js/node/node_modules/lodash/sum.js
+%%DATADIR%%/js/node/node_modules/lodash/sumBy.js
+%%DATADIR%%/js/node/node_modules/lodash/tail.js
+%%DATADIR%%/js/node/node_modules/lodash/take.js
+%%DATADIR%%/js/node/node_modules/lodash/takeRight.js
+%%DATADIR%%/js/node/node_modules/lodash/takeRightWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/takeWhile.js
+%%DATADIR%%/js/node/node_modules/lodash/tap.js
+%%DATADIR%%/js/node/node_modules/lodash/template.js
+%%DATADIR%%/js/node/node_modules/lodash/templateSettings.js
+%%DATADIR%%/js/node/node_modules/lodash/throttle.js
+%%DATADIR%%/js/node/node_modules/lodash/thru.js
+%%DATADIR%%/js/node/node_modules/lodash/times.js
+%%DATADIR%%/js/node/node_modules/lodash/toArray.js
+%%DATADIR%%/js/node/node_modules/lodash/toFinite.js
+%%DATADIR%%/js/node/node_modules/lodash/toInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/toIterator.js
+%%DATADIR%%/js/node/node_modules/lodash/toJSON.js
+%%DATADIR%%/js/node/node_modules/lodash/toLength.js
+%%DATADIR%%/js/node/node_modules/lodash/toLower.js
+%%DATADIR%%/js/node/node_modules/lodash/toNumber.js
+%%DATADIR%%/js/node/node_modules/lodash/toPairs.js
+%%DATADIR%%/js/node/node_modules/lodash/toPairsIn.js
+%%DATADIR%%/js/node/node_modules/lodash/toPath.js
+%%DATADIR%%/js/node/node_modules/lodash/toPlainObject.js
+%%DATADIR%%/js/node/node_modules/lodash/toSafeInteger.js
+%%DATADIR%%/js/node/node_modules/lodash/toString.js
+%%DATADIR%%/js/node/node_modules/lodash/toUpper.js
+%%DATADIR%%/js/node/node_modules/lodash/transform.js
+%%DATADIR%%/js/node/node_modules/lodash/trim.js
+%%DATADIR%%/js/node/node_modules/lodash/trimEnd.js
+%%DATADIR%%/js/node/node_modules/lodash/trimStart.js
+%%DATADIR%%/js/node/node_modules/lodash/truncate.js
+%%DATADIR%%/js/node/node_modules/lodash/unary.js
+%%DATADIR%%/js/node/node_modules/lodash/unescape.js
+%%DATADIR%%/js/node/node_modules/lodash/union.js
+%%DATADIR%%/js/node/node_modules/lodash/unionBy.js
+%%DATADIR%%/js/node/node_modules/lodash/unionWith.js
+%%DATADIR%%/js/node/node_modules/lodash/uniq.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqBy.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqWith.js
+%%DATADIR%%/js/node/node_modules/lodash/uniqueId.js
+%%DATADIR%%/js/node/node_modules/lodash/unset.js
+%%DATADIR%%/js/node/node_modules/lodash/unzip.js
+%%DATADIR%%/js/node/node_modules/lodash/unzipWith.js
+%%DATADIR%%/js/node/node_modules/lodash/update.js
+%%DATADIR%%/js/node/node_modules/lodash/updateWith.js
+%%DATADIR%%/js/node/node_modules/lodash/upperCase.js
+%%DATADIR%%/js/node/node_modules/lodash/upperFirst.js
+%%DATADIR%%/js/node/node_modules/lodash/util.js
+%%DATADIR%%/js/node/node_modules/lodash/value.js
+%%DATADIR%%/js/node/node_modules/lodash/valueOf.js
+%%DATADIR%%/js/node/node_modules/lodash/values.js
+%%DATADIR%%/js/node/node_modules/lodash/valuesIn.js
+%%DATADIR%%/js/node/node_modules/lodash/without.js
+%%DATADIR%%/js/node/node_modules/lodash/words.js
+%%DATADIR%%/js/node/node_modules/lodash/wrap.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperAt.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperChain.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperLodash.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperReverse.js
+%%DATADIR%%/js/node/node_modules/lodash/wrapperValue.js
+%%DATADIR%%/js/node/node_modules/lodash/xor.js
+%%DATADIR%%/js/node/node_modules/lodash/xorBy.js
+%%DATADIR%%/js/node/node_modules/lodash/xorWith.js
+%%DATADIR%%/js/node/node_modules/lodash/zip.js
+%%DATADIR%%/js/node/node_modules/lodash/zipObject.js
+%%DATADIR%%/js/node/node_modules/lodash/zipObjectDeep.js
+%%DATADIR%%/js/node/node_modules/lodash/zipWith.js
+%%DATADIR%%/js/node/node_modules/marked/.travis.yml
+%%DATADIR%%/js/node/node_modules/marked/Gulpfile.js
+%%DATADIR%%/js/node/node_modules/marked/LICENSE
+%%DATADIR%%/js/node/node_modules/marked/Makefile
+%%DATADIR%%/js/node/node_modules/marked/README.md
+%%DATADIR%%/js/node/node_modules/marked/bower.json
+%%DATADIR%%/js/node/node_modules/marked/component.json
+%%DATADIR%%/js/node/node_modules/marked/doc/broken.md
+%%DATADIR%%/js/node/node_modules/marked/doc/todo.md
+%%DATADIR%%/js/node/node_modules/marked/index.js
+%%DATADIR%%/js/node/node_modules/marked/lib/marked.js
+%%DATADIR%%/js/node/node_modules/marked/man/marked.1
+%%DATADIR%%/js/node/node_modules/marked/marked.min.js
+%%DATADIR%%/js/node/node_modules/marked/package.json
+%%DATADIR%%/js/node/node_modules/media-typer/HISTORY.md
+%%DATADIR%%/js/node/node_modules/media-typer/LICENSE
+%%DATADIR%%/js/node/node_modules/media-typer/README.md
+%%DATADIR%%/js/node/node_modules/media-typer/index.js
+%%DATADIR%%/js/node/node_modules/media-typer/package.json
+%%DATADIR%%/js/node/node_modules/mime-types/HISTORY.md
+%%DATADIR%%/js/node/node_modules/mime-types/LICENSE
+%%DATADIR%%/js/node/node_modules/mime-types/README.md
+%%DATADIR%%/js/node/node_modules/mime-types/index.js
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/HISTORY.md
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/LICENSE
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/README.md
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/db.json
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/index.js
+%%DATADIR%%/js/node/node_modules/mime-types/node_modules/mime-db/package.json
+%%DATADIR%%/js/node/node_modules/mime-types/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/LICENSE
+%%DATADIR%%/js/node/node_modules/minimatch/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/minimatch.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/LICENSE.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/balanced-match/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/README.md
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/brace-expansion/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/.travis.yml
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/LICENSE
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/README.markdown
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/example/map.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/index.js
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/package.json
+%%DATADIR%%/js/node/node_modules/minimatch/node_modules/concat-map/test/map.js
+%%DATADIR%%/js/node/node_modules/minimatch/package.json
+%%DATADIR%%/js/node/node_modules/mocha/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/mocha/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/images/error.png
+%%DATADIR%%/js/node/node_modules/mocha/images/ok.png
+%%DATADIR%%/js/node/node_modules/mocha/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/debug.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/events.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/progress.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/browser/tty.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/context.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/hook.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/bdd.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/common.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/exports.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/qunit.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/interfaces/tdd.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/mocha.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/ms.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/pending.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/base.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/doc.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/dot.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/html-cov.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/html.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/index.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json-cov.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json-stream.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/json.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/landing.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/list.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/markdown.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/min.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/nyan.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/progress.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/spec.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/tap.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/coverage.jade
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/menu.jade
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/script.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/templates/style.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/reporters/xunit.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/runnable.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/runner.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/suite.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/template.html
+%%DATADIR%%/js/node/node_modules/mocha/lib/test.js
+%%DATADIR%%/js/node/node_modules/mocha/lib/utils.js
+%%DATADIR%%/js/node/node_modules/mocha/mocha.css
+%%DATADIR%%/js/node/node_modules/mocha/mocha.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/commander/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/.jshintrc
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/bower.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/browser.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/component.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/debug.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/node.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/debug/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/README.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/diff.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/diff/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/escape-string-regexp/readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/lib/growl.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/growl/test.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/jade.min.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/compiler.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/doctypes.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/filters.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/inline-tags.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/jade.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/lexer.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/attrs.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/block-comment.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/block.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/case.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/code.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/comment.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/doctype.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/each.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/filter.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/literal.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/mixin.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/node.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/tag.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/nodes/text.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/parser.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/runtime.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/self-closing.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/lib/utils.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/lib/commander.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/commander/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/README.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/examples/pow.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/chmod.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/clobber.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/mkdirp.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/perm_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/race.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/rel.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/node_modules/mkdirp/test/umask_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/runtime.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/runtime.min.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/test.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/head.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/index.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/layout.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/user.jade
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/jade/testing/user.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/example/parse.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/readme.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/dash.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/default_bool.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/dotted.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/long.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/parse.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/parse_modified.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/short.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/minimist/test/whitespace.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/.travis.yml
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/examples/pow.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/readme.markdown
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/chmod.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/clobber.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/mkdirp.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/opts_fs.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/opts_fs_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/perm.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/perm_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/race.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/rel.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/return.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/return_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/root.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/umask.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/mkdirp/test/umask_sync.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/LICENSE
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/README.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/ms/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/cli.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/supports-color/readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/History.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/Makefile
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/Readme.md
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/component.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/index.js
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/package.json
+%%DATADIR%%/js/node/node_modules/mocha/node_modules/to-iso-string/test/index.js
+%%DATADIR%%/js/node/node_modules/mocha/package.json
+%%DATADIR%%/js/node/node_modules/netmask/README.md
+%%DATADIR%%/js/node/node_modules/netmask/example/ipcalc.coffee
+%%DATADIR%%/js/node/node_modules/netmask/lib/netmask.coffee
+%%DATADIR%%/js/node/node_modules/netmask/lib/netmask.js
+%%DATADIR%%/js/node/node_modules/netmask/package.json
+%%DATADIR%%/js/node/node_modules/netmask/test/badnets.coffee
+%%DATADIR%%/js/node/node_modules/netmask/test/netmasks.coffee
+%%DATADIR%%/js/node/node_modules/netmask/tests/netmask.js
+%%DATADIR%%/js/node/node_modules/qs/.eslintignore
+%%DATADIR%%/js/node/node_modules/qs/.eslintrc
+%%DATADIR%%/js/node/node_modules/qs/CHANGELOG.md
+%%DATADIR%%/js/node/node_modules/qs/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/qs/LICENSE
+%%DATADIR%%/js/node/node_modules/qs/README.md
+%%DATADIR%%/js/node/node_modules/qs/dist/qs.js
+%%DATADIR%%/js/node/node_modules/qs/lib/formats.js
+%%DATADIR%%/js/node/node_modules/qs/lib/index.js
+%%DATADIR%%/js/node/node_modules/qs/lib/parse.js
+%%DATADIR%%/js/node/node_modules/qs/lib/stringify.js
+%%DATADIR%%/js/node/node_modules/qs/lib/utils.js
+%%DATADIR%%/js/node/node_modules/qs/package.json
+%%DATADIR%%/js/node/node_modules/qs/test/.eslintrc
+%%DATADIR%%/js/node/node_modules/qs/test/index.js
+%%DATADIR%%/js/node/node_modules/qs/test/parse.js
+%%DATADIR%%/js/node/node_modules/qs/test/stringify.js
+%%DATADIR%%/js/node/node_modules/qs/test/utils.js
+%%DATADIR%%/js/node/node_modules/range-parser/HISTORY.md
+%%DATADIR%%/js/node/node_modules/range-parser/LICENSE
+%%DATADIR%%/js/node/node_modules/range-parser/README.md
+%%DATADIR%%/js/node/node_modules/range-parser/index.js
+%%DATADIR%%/js/node/node_modules/range-parser/package.json
+%%DATADIR%%/js/node/node_modules/semver/LICENSE
+%%DATADIR%%/js/node/node_modules/semver/README.md
+%%DATADIR%%/js/node/node_modules/semver/package.json
+%%DATADIR%%/js/node/node_modules/semver/range.bnf
+%%DATADIR%%/js/node/node_modules/semver/semver.js
+%%DATADIR%%/js/node/node_modules/sinon/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/CONTRIBUTING.md
+%%DATADIR%%/js/node/node_modules/sinon/Changelog.txt
+%%DATADIR%%/js/node/node_modules/sinon/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/README.md
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/assert.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/behavior.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/call.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/collection.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/extend.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/format.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/log_error.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/match.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/mock.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/sandbox.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/spy.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/stub.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/test.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/test_case.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/times_in_words.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/typeOf.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/core.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/event.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_server.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_server_with_clock.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_timers.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_xdomain_request.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/fake_xml_http_request.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/timers_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/xdr_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/util/xhr_ie.js
+%%DATADIR%%/js/node/node_modules/sinon/lib/sinon/walk.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/autolint.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/buster.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/lib/formatio.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/formatio/test/formatio-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/README.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/inherits.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/inherits/test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.editorconfig
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.jslintrc
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.min-wd
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/lolex.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/script/ci-test.sh
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/src/lolex.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/lolex/test/lolex-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/AUTHORS
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/Readme.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/autolint.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/jsTestDriver.conf
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/lib/samsam.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/samsam/test/samsam-test.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/.travis.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/.zuul.yml
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/LICENSE
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/README.md
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/package.json
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/support/isBuffer.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/support/isBufferBrowser.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/browser/inspect.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/browser/is.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/debug.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/format.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/inspect.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/log.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/test/node/util.js
+%%DATADIR%%/js/node/node_modules/sinon/node_modules/util/util.js
+%%DATADIR%%/js/node/node_modules/sinon/package.json
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-ie-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-ie.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-server-1.17.6.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon-server.js
+%%DATADIR%%/js/node/node_modules/sinon/pkg/sinon.js
+%%DATADIR%%/js/node/node_modules/statuses/HISTORY.md
+%%DATADIR%%/js/node/node_modules/statuses/LICENSE
+%%DATADIR%%/js/node/node_modules/statuses/README.md
+%%DATADIR%%/js/node/node_modules/statuses/codes.json
+%%DATADIR%%/js/node/node_modules/statuses/index.js
+%%DATADIR%%/js/node/node_modules/statuses/package.json
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Abidjan.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Accra.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Addis_Ababa.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Algiers.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Asmara.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Asmera.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bamako.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bangui.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Banjul.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bissau.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Blantyre.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Brazzaville.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Bujumbura.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Cairo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Casablanca.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ceuta.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Conakry.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Dakar.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Dar_es_Salaam.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Djibouti.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Douala.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/El_Aaiun.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Freetown.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Gaborone.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Harare.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Johannesburg.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Juba.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kampala.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Khartoum.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kigali.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Kinshasa.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Libreville.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lome.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Luanda.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lubumbashi.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Lusaka.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Malabo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Maputo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Maseru.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Mbabane.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Mogadishu.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Monrovia.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Nairobi.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ndjamena.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Niamey.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Nouakchott.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Ouagadougou.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Porto-Novo.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Sao_Tome.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Timbuktu.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Tripoli.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Tunis.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/Windhoek.js
+%%DATADIR%%/js/node/node_modules/timezone/Africa/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Adak.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Anchorage.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Anguilla.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Antigua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Araguaina.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Buenos_Aires.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Catamarca.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/ComodRivadavia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Cordoba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Jujuy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/La_Rioja.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Mendoza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Rio_Gallegos.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Salta.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/San_Juan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/San_Luis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Tucuman.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/Ushuaia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Argentina/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Aruba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Asuncion.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Atikokan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Atka.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bahia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bahia_Banderas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Barbados.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Belem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Belize.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Blanc-Sablon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Boa_Vista.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Bogota.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Boise.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Buenos_Aires.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cambridge_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Campo_Grande.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cancun.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Caracas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Catamarca.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cayenne.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cayman.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Chicago.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Chihuahua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Coral_Harbour.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cordoba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Costa_Rica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Creston.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Cuiaba.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Curacao.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Danmarkshavn.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dawson.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dawson_Creek.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Denver.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Detroit.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Dominica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Edmonton.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Eirunepe.js
+%%DATADIR%%/js/node/node_modules/timezone/America/El_Salvador.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Ensenada.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fort_Nelson.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fort_Wayne.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Fortaleza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Glace_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Godthab.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Goose_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Grand_Turk.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Grenada.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guadeloupe.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guatemala.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guayaquil.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Guyana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Halifax.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Havana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Hermosillo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Indianapolis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Knox.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Marengo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Petersburg.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Tell_City.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Vevay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Vincennes.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/Winamac.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indiana/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Indianapolis.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Inuvik.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Iqaluit.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Jamaica.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Jujuy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Juneau.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/Louisville.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/Monticello.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kentucky/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Knox_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Kralendijk.js
+%%DATADIR%%/js/node/node_modules/timezone/America/La_Paz.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Lima.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Los_Angeles.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Louisville.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Lower_Princes.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Maceio.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Managua.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Manaus.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Marigot.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Martinique.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Matamoros.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mazatlan.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mendoza.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Menominee.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Merida.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Metlakatla.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Mexico_City.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Miquelon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Moncton.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Monterrey.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montevideo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montreal.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Montserrat.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nassau.js
+%%DATADIR%%/js/node/node_modules/timezone/America/New_York.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nipigon.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Nome.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Noronha.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/Beulah.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/Center.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/New_Salem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/North_Dakota/index.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Ojinaga.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Panama.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Pangnirtung.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Paramaribo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Phoenix.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Port-au-Prince.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Port_of_Spain.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Porto_Acre.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Porto_Velho.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Puerto_Rico.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rainy_River.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rankin_Inlet.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Recife.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Regina.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Resolute.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rio_Branco.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Rosario.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santa_Isabel.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santarem.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santiago.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Santo_Domingo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Sao_Paulo.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Scoresbysund.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Shiprock.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Sitka.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Barthelemy.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Johns.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Kitts.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Lucia.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Thomas.js
+%%DATADIR%%/js/node/node_modules/timezone/America/St_Vincent.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Swift_Current.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tegucigalpa.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Thule.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Thunder_Bay.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tijuana.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Toronto.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Tortola.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Vancouver.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Virgin.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Whitehorse.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Winnipeg.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Yakutat.js
+%%DATADIR%%/js/node/node_modules/timezone/America/Yellowknife.js
+%%DATADIR%%/js/node/node_modules/timezone/America/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Casey.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Davis.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/DumontDUrville.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Macquarie.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Mawson.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/McMurdo.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Palmer.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Rothera.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/South_Pole.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Syowa.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Troll.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/Vostok.js
+%%DATADIR%%/js/node/node_modules/timezone/Antarctica/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Arctic/Longyearbyen.js
+%%DATADIR%%/js/node/node_modules/timezone/Arctic/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aden.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Almaty.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Amman.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Anadyr.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aqtau.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Aqtobe.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ashgabat.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ashkhabad.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Baghdad.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bahrain.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Baku.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bangkok.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Barnaul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Beirut.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Bishkek.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Brunei.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Calcutta.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chita.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Choibalsan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chongqing.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Chungking.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Colombo.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dacca.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Damascus.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dhaka.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dili.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dubai.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Dushanbe.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Gaza.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Harbin.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hebron.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ho_Chi_Minh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hong_Kong.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Hovd.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Irkutsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Istanbul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jakarta.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jayapura.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Jerusalem.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kabul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kamchatka.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Karachi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kashgar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kathmandu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Katmandu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Khandyga.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kolkata.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Krasnoyarsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuala_Lumpur.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuching.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Kuwait.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Macao.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Macau.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Magadan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Makassar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Manila.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Muscat.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Nicosia.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Novokuznetsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Novosibirsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Omsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Oral.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Phnom_Penh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Pontianak.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Pyongyang.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Qatar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Qyzylorda.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Rangoon.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Riyadh.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Saigon.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Sakhalin.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Samarkand.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Seoul.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Shanghai.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Singapore.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Srednekolymsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Taipei.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tashkent.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tbilisi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tehran.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tel_Aviv.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Thimbu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Thimphu.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tokyo.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Tomsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ujung_Pandang.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ulaanbaatar.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ulan_Bator.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Urumqi.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Ust-Nera.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Vientiane.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Vladivostok.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yakutsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yekaterinburg.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/Yerevan.js
+%%DATADIR%%/js/node/node_modules/timezone/Asia/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Azores.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Bermuda.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Canary.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Cape_Verde.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Faeroe.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Faroe.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Jan_Mayen.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Madeira.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Reykjavik.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/South_Georgia.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/St_Helena.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/Stanley.js
+%%DATADIR%%/js/node/node_modules/timezone/Atlantic/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/ACT.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Adelaide.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Brisbane.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Broken_Hill.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Canberra.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Currie.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Darwin.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Eucla.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Hobart.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/LHI.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Lindeman.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Lord_Howe.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Melbourne.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/NSW.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/North.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Perth.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Queensland.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/South.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Sydney.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Tasmania.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Victoria.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/West.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/Yancowinna.js
+%%DATADIR%%/js/node/node_modules/timezone/Australia/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/Acre.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/DeNoronha.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/East.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/West.js
+%%DATADIR%%/js/node/node_modules/timezone/Brazil/index.js
+%%DATADIR%%/js/node/node_modules/timezone/CET.js
+%%DATADIR%%/js/node/node_modules/timezone/CHANGELOG
+%%DATADIR%%/js/node/node_modules/timezone/CST6CDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Atlantic.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Central.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/East-Saskatchewan.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Eastern.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Mountain.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Newfoundland.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Pacific.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Saskatchewan.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/Yukon.js
+%%DATADIR%%/js/node/node_modules/timezone/Canada/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/Continental.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/EasterIsland.js
+%%DATADIR%%/js/node/node_modules/timezone/Chile/index.js
+%%DATADIR%%/js/node/node_modules/timezone/EET.js
+%%DATADIR%%/js/node/node_modules/timezone/EST.js
+%%DATADIR%%/js/node/node_modules/timezone/EST5EDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+1.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+10.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+11.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+12.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+2.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+3.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+4.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+5.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+6.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+7.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+8.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT+9.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-1.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-10.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-11.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-12.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-13.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-14.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-2.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-3.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-4.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-5.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-6.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-7.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-8.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT-9.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/GMT0.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Greenwich.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/UCT.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/UTC.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Universal.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/Zulu.js
+%%DATADIR%%/js/node/node_modules/timezone/Etc/index.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Amsterdam.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Andorra.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Astrakhan.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Athens.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Belfast.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Belgrade.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Berlin.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Bratislava.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Brussels.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Bucharest.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Budapest.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Busingen.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Chisinau.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Copenhagen.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Dublin.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Gibraltar.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Guernsey.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Helsinki.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Isle_of_Man.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Istanbul.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Jersey.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kaliningrad.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kiev.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Kirov.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Lisbon.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Ljubljana.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/London.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Luxembourg.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Madrid.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Malta.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Mariehamn.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Minsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Monaco.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Moscow.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Nicosia.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Oslo.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Paris.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Podgorica.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Prague.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Riga.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Rome.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Samara.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/San_Marino.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Sarajevo.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Simferopol.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Skopje.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Sofia.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Stockholm.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tallinn.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tirane.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Tiraspol.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Ulyanovsk.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Uzhgorod.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vaduz.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vatican.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vienna.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Vilnius.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Volgograd.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Warsaw.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zagreb.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zaporozhye.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/Zurich.js
+%%DATADIR%%/js/node/node_modules/timezone/Europe/index.js
+%%DATADIR%%/js/node/node_modules/timezone/HST.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Antananarivo.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Chagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Christmas.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Cocos.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Comoro.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Kerguelen.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mahe.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Maldives.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mauritius.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Mayotte.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/Reunion.js
+%%DATADIR%%/js/node/node_modules/timezone/Indian/index.js
+%%DATADIR%%/js/node/node_modules/timezone/MET.js
+%%DATADIR%%/js/node/node_modules/timezone/MST.js
+%%DATADIR%%/js/node/node_modules/timezone/MST7MDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/BajaNorte.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/BajaSur.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/General.js
+%%DATADIR%%/js/node/node_modules/timezone/Mexico/index.js
+%%DATADIR%%/js/node/node_modules/timezone/PST8PDT.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Apia.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Auckland.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Bougainville.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Chatham.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Chuuk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Easter.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Efate.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Enderbury.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Fakaofo.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Fiji.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Funafuti.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Galapagos.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Gambier.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Guadalcanal.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Guam.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Honolulu.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Johnston.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kiritimati.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kosrae.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Kwajalein.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Majuro.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Marquesas.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Midway.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Nauru.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Niue.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Norfolk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Noumea.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pago_Pago.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Palau.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pitcairn.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Pohnpei.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Ponape.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Port_Moresby.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Rarotonga.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Saipan.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Samoa.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tahiti.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tarawa.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Tongatapu.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Truk.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Wake.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Wallis.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/Yap.js
+%%DATADIR%%/js/node/node_modules/timezone/Pacific/index.js
+%%DATADIR%%/js/node/node_modules/timezone/README.md
+%%DATADIR%%/js/node/node_modules/timezone/US/Alaska.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Aleutian.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Arizona.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Central.js
+%%DATADIR%%/js/node/node_modules/timezone/US/East-Indiana.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Eastern.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Hawaii.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Indiana-Starke.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Michigan.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Mountain.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Pacific.js
+%%DATADIR%%/js/node/node_modules/timezone/US/Samoa.js
+%%DATADIR%%/js/node/node_modules/timezone/US/index.js
+%%DATADIR%%/js/node/node_modules/timezone/WET.js
+%%DATADIR%%/js/node/node_modules/timezone/af_ZA.js
+%%DATADIR%%/js/node/node_modules/timezone/am_ET.js
+%%DATADIR%%/js/node/node_modules/timezone/ast_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/bg_BG.js
+%%DATADIR%%/js/node/node_modules/timezone/bn_BD.js
+%%DATADIR%%/js/node/node_modules/timezone/bn_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/ca_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/cs_CZ.js
+%%DATADIR%%/js/node/node_modules/timezone/de_AT.js
+%%DATADIR%%/js/node/node_modules/timezone/de_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/de_DE.js
+%%DATADIR%%/js/node/node_modules/timezone/el_GR.js
+%%DATADIR%%/js/node/node_modules/timezone/en_AU.js
+%%DATADIR%%/js/node/node_modules/timezone/en_CA.js
+%%DATADIR%%/js/node/node_modules/timezone/en_GB.js
+%%DATADIR%%/js/node/node_modules/timezone/en_HK.js
+%%DATADIR%%/js/node/node_modules/timezone/en_NZ.js
+%%DATADIR%%/js/node/node_modules/timezone/en_US.js
+%%DATADIR%%/js/node/node_modules/timezone/es_AR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CL.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CO.js
+%%DATADIR%%/js/node/node_modules/timezone/es_CR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_DO.js
+%%DATADIR%%/js/node/node_modules/timezone/es_EC.js
+%%DATADIR%%/js/node/node_modules/timezone/es_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/es_GT.js
+%%DATADIR%%/js/node/node_modules/timezone/es_HN.js
+%%DATADIR%%/js/node/node_modules/timezone/es_MX.js
+%%DATADIR%%/js/node/node_modules/timezone/es_NI.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PA.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PE.js
+%%DATADIR%%/js/node/node_modules/timezone/es_PR.js
+%%DATADIR%%/js/node/node_modules/timezone/es_SV.js
+%%DATADIR%%/js/node/node_modules/timezone/es_UY.js
+%%DATADIR%%/js/node/node_modules/timezone/es_VE.js
+%%DATADIR%%/js/node/node_modules/timezone/eu_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/fi_FI.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_BE.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_CA.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/fr_FR.js
+%%DATADIR%%/js/node/node_modules/timezone/gl_ES.js
+%%DATADIR%%/js/node/node_modules/timezone/he_IL.js
+%%DATADIR%%/js/node/node_modules/timezone/hi_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/hr_HR.js
+%%DATADIR%%/js/node/node_modules/timezone/hu_HU.js
+%%DATADIR%%/js/node/node_modules/timezone/id_ID.js
+%%DATADIR%%/js/node/node_modules/timezone/index.js
+%%DATADIR%%/js/node/node_modules/timezone/it_CH.js
+%%DATADIR%%/js/node/node_modules/timezone/it_IT.js
+%%DATADIR%%/js/node/node_modules/timezone/ja_JP.js
+%%DATADIR%%/js/node/node_modules/timezone/ko_KR.js
+%%DATADIR%%/js/node/node_modules/timezone/loaded.js
+%%DATADIR%%/js/node/node_modules/timezone/locales.js
+%%DATADIR%%/js/node/node_modules/timezone/lt_LT.js
+%%DATADIR%%/js/node/node_modules/timezone/lv_LV.js
+%%DATADIR%%/js/node/node_modules/timezone/ms_MY.js
+%%DATADIR%%/js/node/node_modules/timezone/nb_NO.js
+%%DATADIR%%/js/node/node_modules/timezone/nds_DE.js
+%%DATADIR%%/js/node/node_modules/timezone/nl_BE.js
+%%DATADIR%%/js/node/node_modules/timezone/nl_NL.js
+%%DATADIR%%/js/node/node_modules/timezone/package.json
+%%DATADIR%%/js/node/node_modules/timezone/pl_PL.js
+%%DATADIR%%/js/node/node_modules/timezone/pt_BR.js
+%%DATADIR%%/js/node/node_modules/timezone/pt_PT.js
+%%DATADIR%%/js/node/node_modules/timezone/rfc822.js
+%%DATADIR%%/js/node/node_modules/timezone/ru_RU.js
+%%DATADIR%%/js/node/node_modules/timezone/si_LK.js
+%%DATADIR%%/js/node/node_modules/timezone/sl_SI.js
+%%DATADIR%%/js/node/node_modules/timezone/sq_AL.js
+%%DATADIR%%/js/node/node_modules/timezone/sr_RS.js
+%%DATADIR%%/js/node/node_modules/timezone/sv_SE.js
+%%DATADIR%%/js/node/node_modules/timezone/synopsis.js
+%%DATADIR%%/js/node/node_modules/timezone/ta_IN.js
+%%DATADIR%%/js/node/node_modules/timezone/uk_UA.js
+%%DATADIR%%/js/node/node_modules/timezone/ur_PK.js
+%%DATADIR%%/js/node/node_modules/timezone/vi_VN.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_CN.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_HK.js
+%%DATADIR%%/js/node/node_modules/timezone/zh_TW.js
+%%DATADIR%%/js/node/node_modules/timezone/zones.js
+%%DATADIR%%/js/node/node_modules/type-is/HISTORY.md
+%%DATADIR%%/js/node/node_modules/type-is/LICENSE
+%%DATADIR%%/js/node/node_modules/type-is/README.md
+%%DATADIR%%/js/node/node_modules/type-is/index.js
+%%DATADIR%%/js/node/node_modules/type-is/package.json
+%%DATADIR%%/js/node/node_modules/underscore/LICENSE
+%%DATADIR%%/js/node/node_modules/underscore/README.md
+%%DATADIR%%/js/node/node_modules/underscore/package.json
+%%DATADIR%%/js/node/node_modules/underscore/underscore-min.js
+%%DATADIR%%/js/node/node_modules/underscore/underscore-min.map
+%%DATADIR%%/js/node/node_modules/underscore/underscore.js
+%%DATADIR%%/js/node/node_modules/vary/HISTORY.md
+%%DATADIR%%/js/node/node_modules/vary/LICENSE
+%%DATADIR%%/js/node/node_modules/vary/README.md
+%%DATADIR%%/js/node/node_modules/vary/index.js
+%%DATADIR%%/js/node/node_modules/vary/package.json
+%%DATADIR%%/js/node/node_modules/xmldom/.travis.yml
+%%DATADIR%%/js/node/node_modules/xmldom/LICENSE
+%%DATADIR%%/js/node/node_modules/xmldom/__package__.js
+%%DATADIR%%/js/node/node_modules/xmldom/changelog
+%%DATADIR%%/js/node/node_modules/xmldom/component.json
+%%DATADIR%%/js/node/node_modules/xmldom/dom-parser.js
+%%DATADIR%%/js/node/node_modules/xmldom/dom.js
+%%DATADIR%%/js/node/node_modules/xmldom/package.json
+%%DATADIR%%/js/node/node_modules/xmldom/readme.md
+%%DATADIR%%/js/node/node_modules/xmldom/sax.js
+%%DATADIR%%/js/node/os.js
+%%DATADIR%%/js/node/package.json
+%%DATADIR%%/js/node/punycode.js
+%%DATADIR%%/js/node/querystring.js
+%%DATADIR%%/js/node/stream.js
+%%DATADIR%%/js/node/string_decoder.js
+%%DATADIR%%/js/node/sys.js
+%%DATADIR%%/js/node/timers.js
+%%DATADIR%%/js/node/tls.js
+%%DATADIR%%/js/node/tty.js
+%%DATADIR%%/js/node/url.js
+%%DATADIR%%/js/node/util.js
+%%DATADIR%%/js/node/v8.js
+%%DATADIR%%/js/node/zlib.js
+%%DATADIR%%/js/server/arango-dfdb.js
+%%DATADIR%%/js/server/assets/swagger/favicon-16x16.png
+%%DATADIR%%/js/server/assets/swagger/favicon-32x32.png
+%%DATADIR%%/js/server/assets/swagger/index.html
+%%DATADIR%%/js/server/assets/swagger/oauth2-redirect.html
+%%DATADIR%%/js/server/assets/swagger/swagger-ui-bundle.js
+%%DATADIR%%/js/server/assets/swagger/swagger-ui-bundle.js.map
+%%DATADIR%%/js/server/assets/swagger/swagger-ui-standalone-preset.js
+%%DATADIR%%/js/server/assets/swagger/swagger-ui-standalone-preset.js.map
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.css
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.css.map
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.js
+%%DATADIR%%/js/server/assets/swagger/swagger-ui.js.map
+%%DATADIR%%/js/server/bootstrap/autoload.js
+%%DATADIR%%/js/server/bootstrap/cluster-bootstrap.js
+%%DATADIR%%/js/server/bootstrap/coordinator-database.js
+%%DATADIR%%/js/server/bootstrap/coordinator.js
+%%DATADIR%%/js/server/bootstrap/db-server.js
+%%DATADIR%%/js/server/bootstrap/local-database.js
+%%DATADIR%%/js/server/bootstrap/modules/internal.js
+%%DATADIR%%/js/server/bootstrap/routing.js
+%%DATADIR%%/js/server/check-version.js
+%%DATADIR%%/js/server/initialize.js
+%%DATADIR%%/js/server/modules/@arangodb/actions.js
+%%DATADIR%%/js/server/modules/@arangodb/actions/echoController.js
+%%DATADIR%%/js/server/modules/@arangodb/actions/staticContentController.js
+%%DATADIR%%/js/server/modules/@arangodb/aql-helper.js
+%%DATADIR%%/js/server/modules/@arangodb/aql.js
+%%DATADIR%%/js/server/modules/@arangodb/aql/cache.js
+%%DATADIR%%/js/server/modules/@arangodb/aql/queries.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-collection.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-database.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-statement.js
+%%DATADIR%%/js/server/modules/@arangodb/arango-view.js
+%%DATADIR%%/js/server/modules/@arangodb/cluster.js
+%%DATADIR%%/js/server/modules/@arangodb/configuration.js
+%%DATADIR%%/js/server/modules/@arangodb/database-version.js
+%%DATADIR%%/js/server/modules/@arangodb/formatter.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/auth.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/graphql.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/authentication.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/base_middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/console.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/controller.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/internals.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/model.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/query.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/repository.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/request_context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/routing.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/schema.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/sessions.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/swagger.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/swaggerDocs.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/legacy/template_middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/manager.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/manifest.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/mocha.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/oauth1.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/oauth2.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/manager.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/queues/worker.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/middleware.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/request.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/response.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/route.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/router.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/swagger-context.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/tokenize.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/tree.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/router/validation.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/routing.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/service.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/index.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/storages/collection.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/storages/jwt.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/transports/cookie.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/sessions/transports/header.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/swagger.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/test-utils.js
+%%DATADIR%%/js/server/modules/@arangodb/foxx/types.js
+%%DATADIR%%/js/server/modules/@arangodb/index.js
+%%DATADIR%%/js/server/modules/@arangodb/parser.js
+%%DATADIR%%/js/server/modules/@arangodb/pregel.js
+%%DATADIR%%/js/server/modules/@arangodb/replication.js
+%%DATADIR%%/js/server/modules/@arangodb/request.js
+%%DATADIR%%/js/server/modules/@arangodb/simple-query.js
+%%DATADIR%%/js/server/modules/@arangodb/statistics.js
+%%DATADIR%%/js/server/modules/@arangodb/sync-replication-debug.js
+%%DATADIR%%/js/server/modules/@arangodb/tasks.js
+%%DATADIR%%/js/server/modules/@arangodb/users.js
+%%DATADIR%%/js/server/modules/@arangodb/validator.js
+%%DATADIR%%/js/server/perftests/bigcollections.js
+%%DATADIR%%/js/server/perftests/join.js
+%%DATADIR%%/js/server/perftests/sort.js
+%%DATADIR%%/js/server/server.js
+%%DATADIR%%/js/server/upgrade-database.js
+%%DATADIR%%/js/server/worker.js
+%%PORTDOCS%%%%DOCSDIR%%/LICENSE.txt
+%%PORTDOCS%%%%DOCSDIR%%/LICENSES-OTHER-COMPONENTS.md
+%%PORTDOCS%%%%DOCSDIR%%/README.md
+%%PORTDOCS%%%%DOCSDIR%%/README.txt
diff --git a/devel/Makefile b/devel/Makefile
index 37fa5eebe753..2f1f62c9d309 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -269,6 +269,7 @@
SUBDIR += busybee
SUBDIR += byacc
SUBDIR += byaccj
+ SUBDIR += bzr
SUBDIR += c2mdoc
SUBDIR += caf
SUBDIR += calibrator
@@ -308,6 +309,7 @@
SUBDIR += checkbashisms
SUBDIR += checkheaders
SUBDIR += chroma
+ SUBDIR += chromium-gn
SUBDIR += chrpath
SUBDIR += chruby
SUBDIR += cil
@@ -520,6 +522,10 @@
SUBDIR += efl
SUBDIR += egypt
SUBDIR += eiffelstudio
+ SUBDIR += electron4
+ SUBDIR += electron5
+ SUBDIR += electron6
+ SUBDIR += electron7
SUBDIR += elf
SUBDIR += elfio
SUBDIR += elfkickers
@@ -821,6 +827,7 @@
SUBDIR += glui
SUBDIR += gmake
SUBDIR += gn
+ SUBDIR += gnatpython
SUBDIR += gnome-builder
SUBDIR += gnome-common
SUBDIR += gnome-vfs
@@ -842,6 +849,8 @@
SUBDIR += godep
SUBDIR += godot
SUBDIR += godot-tools
+ SUBDIR += godot2
+ SUBDIR += godot2-tools
SUBDIR += goffice
SUBDIR += gogs
SUBDIR += golangci-lint
@@ -1196,6 +1205,7 @@
SUBDIR += libgudev
SUBDIR += libgutenfetch
SUBDIR += libhash
+ SUBDIR += libhid
SUBDIR += libhoard
SUBDIR += libhtp
SUBDIR += libhyve-remote
@@ -1249,6 +1259,7 @@
SUBDIR += liborcus
SUBDIR += libosinfo
SUBDIR += libosmo-abis
+ SUBDIR += libosmocore
SUBDIR += libowfat
SUBDIR += libpafe
SUBDIR += libpafe-ruby
@@ -1397,6 +1408,7 @@
SUBDIR += llvm-devel
SUBDIR += llvm10
SUBDIR += llvm11
+ SUBDIR += llvm60
SUBDIR += llvm70
SUBDIR += llvm80
SUBDIR += llvm90
@@ -1499,6 +1511,7 @@
SUBDIR += mm-common
SUBDIR += modd
SUBDIR += mongo-c-driver
+ SUBDIR += mongo-cxx-driver
SUBDIR += mono-addins
SUBDIR += monodevelop
SUBDIR += monotone
@@ -2624,6 +2637,7 @@
SUBDIR += p5-Log-Agent
SUBDIR += p5-Log-Agent-Logger
SUBDIR += p5-Log-Any
+ SUBDIR += p5-Log-Any-Adapter-Callback
SUBDIR += p5-Log-Any-Adapter-Dispatch
SUBDIR += p5-Log-Any-Adapter-Log4perl
SUBDIR += p5-Log-Any-App
@@ -4145,6 +4159,10 @@
SUBDIR += py-backcall
SUBDIR += py-backports
SUBDIR += py-backports.csv
+ SUBDIR += py-backports.functools_lru_cache
+ SUBDIR += py-backports.os
+ SUBDIR += py-backports.shutil_get_terminal_size
+ SUBDIR += py-backports_abc
SUBDIR += py-banal
SUBDIR += py-bandit
SUBDIR += py-bcdoc
@@ -4203,6 +4221,7 @@
SUBDIR += py-chainmap
SUBDIR += py-characteristic
SUBDIR += py-check-manifest
+ SUBDIR += py-cheetah
SUBDIR += py-cheetah3
SUBDIR += py-circuits
SUBDIR += py-cld
@@ -4304,6 +4323,7 @@
SUBDIR += py-diazo
SUBDIR += py-dill
SUBDIR += py-dirspec
+ SUBDIR += py-dis3
SUBDIR += py-distlib
SUBDIR += py-distributed
SUBDIR += py-dj31-django-rq
@@ -4326,6 +4346,7 @@
SUBDIR += py-enlighten
SUBDIR += py-entrypoints
SUBDIR += py-enum-compat
+ SUBDIR += py-enum34
SUBDIR += py-envisage
SUBDIR += py-epdb
SUBDIR += py-epsilon
@@ -4385,10 +4406,12 @@
SUBDIR += py-fudge
SUBDIR += py-funcparserlib
SUBDIR += py-funcsigs
+ SUBDIR += py-functools32
SUBDIR += py-funcy
SUBDIR += py-furl
SUBDIR += py-fusepy
SUBDIR += py-future
+ SUBDIR += py-futures
SUBDIR += py-futurist
SUBDIR += py-futurist1
SUBDIR += py-fuzzywuzzy
@@ -4595,6 +4618,7 @@
SUBDIR += py-monotonic
SUBDIR += py-monty
SUBDIR += py-more-itertools
+ SUBDIR += py-more-itertools5
SUBDIR += py-moto
SUBDIR += py-mox
SUBDIR += py-mox3
@@ -4714,6 +4738,7 @@
SUBDIR += py-patch
SUBDIR += py-patch-ng
SUBDIR += py-path.py
+ SUBDIR += py-pathlib
SUBDIR += py-pathlib2
SUBDIR += py-pathspec
SUBDIR += py-pathtools
@@ -5005,6 +5030,7 @@
SUBDIR += py-scikit-build
SUBDIR += py-scripttest
SUBDIR += py-selection
+ SUBDIR += py-selectors2
SUBDIR += py-semantic-version
SUBDIR += py-semver
SUBDIR += py-sentry-sdk
@@ -5021,12 +5047,14 @@
SUBDIR += py-sh
SUBDIR += py-shapely
SUBDIR += py-shellingham
+ SUBDIR += py-should_dsl
SUBDIR += py-simpleeval
SUBDIR += py-simplegeneric
SUBDIR += py-simplejson
SUBDIR += py-simpleparse
SUBDIR += py-simpletal
SUBDIR += py-simpy
+ SUBDIR += py-singledispatch
SUBDIR += py-sip
SUBDIR += py-six
SUBDIR += py-smmap
@@ -5052,6 +5080,7 @@
SUBDIR += py-stringcase
SUBDIR += py-structlog
SUBDIR += py-stsci.distutils
+ SUBDIR += py-subprocess32
SUBDIR += py-subversion
SUBDIR += py-sure
SUBDIR += py-swagger-spec-validator
@@ -5094,6 +5123,7 @@
SUBDIR += py-tooz
SUBDIR += py-tooz1
SUBDIR += py-toposort
+ SUBDIR += py-total-ordering
SUBDIR += py-tox
SUBDIR += py-traceback2
SUBDIR += py-traitlets
@@ -5113,6 +5143,7 @@
SUBDIR += py-txaio
SUBDIR += py-typechecks
SUBDIR += py-typed-ast
+ SUBDIR += py-typing
SUBDIR += py-typing-extensions
SUBDIR += py-typing-inspect
SUBDIR += py-tzlocal
@@ -5157,6 +5188,7 @@
SUBDIR += py-watchdog
SUBDIR += py-watchgod
SUBDIR += py-wcwidth
+ SUBDIR += py-weakrefmethod
SUBDIR += py-weblib
SUBDIR += py-websockets
SUBDIR += py-websockify
@@ -5327,6 +5359,7 @@
SUBDIR += rapidjson
SUBDIR += raylib
SUBDIR += rbenv
+ SUBDIR += rbtools
SUBDIR += rclint
SUBDIR += rcs
SUBDIR += rcs57
@@ -6715,6 +6748,7 @@
SUBDIR += stxxl
SUBDIR += subversion
SUBDIR += subversion-book
+ SUBDIR += subversion-lts
SUBDIR += subversive
SUBDIR += svk
SUBDIR += svn2git
@@ -6819,6 +6853,7 @@
SUBDIR += vcglib
SUBDIR += vera++
SUBDIR += vexcl
+ SUBDIR += viewvc
SUBDIR += viewvc-devel
SUBDIR += violet
SUBDIR += vitables
diff --git a/devel/bzr/Makefile b/devel/bzr/Makefile
new file mode 100644
index 000000000000..06318a137342
--- /dev/null
+++ b/devel/bzr/Makefile
@@ -0,0 +1,40 @@
+# Created by: Ulf Lilleengen
+# $FreeBSD$
+
+PORTNAME= bzr
+PORTVERSION= 2.7.0.6622
+CATEGORIES= devel
+MASTER_SITES= https://distfiles.over-yonder.net/bzr/
+
+MAINTAINER= fullermd@over-yonder.net
+COMMENT= Distributed version control system by Canonical
+
+LICENSE= GPLv2+
+LICENSE_FILE= ${WRKSRC}/COPYING.txt
+
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}testtools>=0:devel/py-testtools@${PY_FLAVOR}
+
+OPTIONS_DEFINE= SFTP CA_BUNDLE
+SFTP_DESC= Paramiko for SFTP support
+CA_BUNDLE_DESC= Include CA bundle for SSL cert validation
+OPTIONS_DEFAULT= SFTP CA_BUNDLE
+
+SFTP_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}paramiko>=0:security/py-paramiko@${PY_FLAVOR}
+CA_BUNDLE_RUN_DEPENDS= ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
+
+USES= gettext python:2.7 shebangfix tar:xz
+SHEBANG_FILES= bzr
+USE_PYTHON= distutils cython autoplist
+PYDISTUTILS_PKGNAME= bzr
+MAKE_ENV= BZR_LOG=/dev/null
+
+WRKSRC= ${WRKDIR}/bzr-2.7.1dev
+
+post-install:
+ ${INSTALL_MAN} ${WRKSRC}/bzr.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+ ${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/bzrlib/*.so
+
+do-test:
+ cd ${WRKSRC} && ./bzr selftest
+
+.include <bsd.port.mk>
diff --git a/devel/bzr/distinfo b/devel/bzr/distinfo
new file mode 100644
index 000000000000..2cf2821b7312
--- /dev/null
+++ b/devel/bzr/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1567646065
+SHA256 (bzr-2.7.0.6622.tar.xz) = 9aafabb8984c4c962526e150a2dfbf2908462df6c64ae7f0c2d26e58e3c59637
+SIZE (bzr-2.7.0.6622.tar.xz) = 5840088
diff --git a/devel/bzr/files/patch-ssh_hostname b/devel/bzr/files/patch-ssh_hostname
new file mode 100644
index 000000000000..46eb86bfcbf5
--- /dev/null
+++ b/devel/bzr/files/patch-ssh_hostname
@@ -0,0 +1,167 @@
+Source: https://launchpadlibrarian.net/370632961/24_ssh_hostnames-lp1710979
+Description: Refuse to connect to ssh hostnames starting with a dash. Fixes LP:1710979
+Author: Jelmer Vernooij <jelmer@jelmer.uk>
+Origin: commit, Revision ID: jelmer@jelmer.uk-20170819145828-qk2p7qlg5j2fbsiz
+
+* Security fix: hostnames starting with a dash in bzr+ssh URLs
+ are now filtered out when using a subprocess SSH client.
+ .
+ Thanks to Augie Fackler for reporting.
+ (Jelmer Vernooij, #1710979)
+
+
+=== modified file 'bzrlib/tests/test_ssh_transport.py'
+---
+ bzrlib/tests/test_ssh_transport.py | 38 ++++++++++++++++++++++++++++++++++++-
+ bzrlib/transport/ssh.py | 16 +++++++++++++--
+ 2 files changed, 51 insertions(+), 3 deletions(-)
+
+Index: bzrlib/tests/test_ssh_transport.py
+===================================================================
+--- bzrlib/tests/test_ssh_transport.py
++++ bzrlib/tests/test_ssh_transport.py
+@@ -22,6 +22,7 @@ from bzrlib.transport.ssh import (
+ SSHCorpSubprocessVendor,
+ LSHSubprocessVendor,
+ SSHVendorManager,
++ StrangeHostname,
+ )
+
+
+@@ -161,6 +162,19 @@ class SSHVendorManagerTests(TestCase):
+
+ class SubprocessVendorsTests(TestCase):
+
++ def test_openssh_command_tricked(self):
++ vendor = OpenSSHSubprocessVendor()
++ self.assertEqual(
++ vendor._get_vendor_specific_argv(
++ "user", "-oProxyCommand=blah", 100, command=["bzr"]),
++ ["ssh", "-oForwardX11=no", "-oForwardAgent=no",
++ "-oClearAllForwardings=yes",
++ "-oNoHostAuthenticationForLocalhost=yes",
++ "-p", "100",
++ "-l", "user",
++ "--",
++ "-oProxyCommand=blah", "bzr"])
++
+ def test_openssh_command_arguments(self):
+ vendor = OpenSSHSubprocessVendor()
+ self.assertEqual(
+@@ -171,6 +185,7 @@ class SubprocessVendorsTests(TestCase):
+ "-oNoHostAuthenticationForLocalhost=yes",
+ "-p", "100",
+ "-l", "user",
++ "--",
+ "host", "bzr"]
+ )
+
+@@ -184,9 +199,16 @@ class SubprocessVendorsTests(TestCase):
+ "-oNoHostAuthenticationForLocalhost=yes",
+ "-p", "100",
+ "-l", "user",
+- "-s", "host", "sftp"]
++ "-s", "--", "host", "sftp"]
+ )
+
++ def test_openssh_command_tricked(self):
++ vendor = SSHCorpSubprocessVendor()
++ self.assertRaises(
++ StrangeHostname,
++ vendor._get_vendor_specific_argv,
++ "user", "-oProxyCommand=host", 100, command=["bzr"])
++
+ def test_sshcorp_command_arguments(self):
+ vendor = SSHCorpSubprocessVendor()
+ self.assertEqual(
+@@ -209,6 +231,13 @@ class SubprocessVendorsTests(TestCase):
+ "-s", "sftp", "host"]
+ )
+
++ def test_lsh_command_tricked(self):
++ vendor = LSHSubprocessVendor()
++ self.assertRaises(
++ StrangeHostname,
++ vendor._get_vendor_specific_argv,
++ "user", "-oProxyCommand=host", 100, command=["bzr"])
++
+ def test_lsh_command_arguments(self):
+ vendor = LSHSubprocessVendor()
+ self.assertEqual(
+@@ -231,6 +260,13 @@ class SubprocessVendorsTests(TestCase):
+ "--subsystem", "sftp", "host"]
+ )
+
++ def test_plink_command_tricked(self):
++ vendor = PLinkSubprocessVendor()
++ self.assertRaises(
++ StrangeHostname,
++ vendor._get_vendor_specific_argv,
++ "user", "-oProxyCommand=host", 100, command=["bzr"])
++
+ def test_plink_command_arguments(self):
+ vendor = PLinkSubprocessVendor()
+ self.assertEqual(
+Index: bzrlib/transport/ssh.py
+===================================================================
+--- bzrlib/transport/ssh.py
++++ bzrlib/transport/ssh.py
+@@ -46,6 +46,10 @@ else:
+ from paramiko.sftp_client import SFTPClient
+
+
++class StrangeHostname(errors.BzrError):
++ _fmt = "Refusing to connect to strange SSH hostname %(hostname)s"
++
++
+ SYSTEM_HOSTKEYS = {}
+ BZR_HOSTKEYS = {}
+
+@@ -360,6 +364,11 @@ class SubprocessVendor(SSHVendor):
+ # tests, but beware of using PIPE which may hang due to not being read.
+ _stderr_target = None
+
++ @staticmethod
++ def _check_hostname(arg):
++ if arg.startswith('-'):
++ raise StrangeHostname(hostname=arg)
++
+ def _connect(self, argv):
+ # Attempt to make a socketpair to use as stdin/stdout for the SSH
+ # subprocess. We prefer sockets to pipes because they support
+@@ -424,9 +433,9 @@ class OpenSSHSubprocessVendor(Subprocess
+ if username is not None:
+ args.extend(['-l', username])
+ if subsystem is not None:
+- args.extend(['-s', host, subsystem])
++ args.extend(['-s', '--', host, subsystem])
+ else:
+- args.extend([host] + command)
++ args.extend(['--', host] + command)
+ return args
+
+ register_ssh_vendor('openssh', OpenSSHSubprocessVendor())
+@@ -439,6 +448,7 @@ class SSHCorpSubprocessVendor(Subprocess
+
+ def _get_vendor_specific_argv(self, username, host, port, subsystem=None,
+ command=None):
++ self._check_hostname(host)
+ args = [self.executable_path, '-x']
+ if port is not None:
+ args.extend(['-p', str(port)])
+@@ -460,6 +470,7 @@ class LSHSubprocessVendor(SubprocessVend
+
+ def _get_vendor_specific_argv(self, username, host, port, subsystem=None,
+ command=None):
++ self._check_hostname(host)
+ args = [self.executable_path]
+ if port is not None:
+ args.extend(['-p', str(port)])
+@@ -481,6 +492,7 @@ class PLinkSubprocessVendor(SubprocessVe
+
+ def _get_vendor_specific_argv(self, username, host, port, subsystem=None,
+ command=None):
++ self._check_hostname(host)
+ args = [self.executable_path, '-x', '-a', '-ssh', '-2', '-batch']
+ if port is not None:
+ args.extend(['-P', str(port)])
diff --git a/devel/bzr/pkg-descr b/devel/bzr/pkg-descr
new file mode 100644
index 000000000000..3639a9d555a1
--- /dev/null
+++ b/devel/bzr/pkg-descr
@@ -0,0 +1,7 @@
+Bazaar (bzr) is a decentralized revision control system, designed to be
+easy for developers and end users alike. Bazaar is part of the GNU
+project to develop a complete free operating systemand a project of
+Canonical. Bazaar directly supports both central version control (like
+cvs/svn) and distributed version control (like git/hg).
+
+WWW: http://bazaar.canonical.com/
diff --git a/devel/chromium-gn/Makefile b/devel/chromium-gn/Makefile
new file mode 100644
index 000000000000..32a5b13c4118
--- /dev/null
+++ b/devel/chromium-gn/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+CATEGORIES= devel www
+PKGNAMESUFFIX= -gn
+
+MAINTAINER= pizzamig@FreeBSD.org
+COMMENT= Gn meta build framework
+
+DEPRECATED= Uses deprecated version of python, use devel/gn instead
+EXPIRATION_DATE= 2020-12-31
+
+MASTERDIR= ${.CURDIR}/../../www/chromium
+
+BROKEN_FreeBSD_11_powerpc64= fails to compile: safe_math_clang_gcc_impl.h:132:45: '__builtin_subcb' was not declared in this scope
+BROKEN_FreeBSD_12_powerpc64= fails to compile: safe_math_clang_gcc_impl.h:132:45: '__builtin_subcb' was not declared in this scope
+
+BUILDTYPE= Release
+NO_BUILD= yes
+
+PLIST= ${.CURDIR}/pkg-plist
+PKGMESSAGE= ${.CURDIR}/pkg-message
+DESCR= ${.CURDIR}/pkg-descr
+PLIST_FILES= bin/gn
+
+GN_ONLY= yes
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/gn ${STAGEDIR}${PREFIX}/bin
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/chromium-gn/pkg-descr b/devel/chromium-gn/pkg-descr
new file mode 100644
index 000000000000..17c2b7485725
--- /dev/null
+++ b/devel/chromium-gn/pkg-descr
@@ -0,0 +1,4 @@
+GN is a meta-build system that generates NinjaBuild files so that you can build
+Chromium with Ninja.
+
+WWW: https://chromium.googlesource.com/chromium/src/tools/gn/
diff --git a/devel/electron4/Makefile b/devel/electron4/Makefile
new file mode 100644
index 000000000000..d776ab38c90b
--- /dev/null
+++ b/devel/electron4/Makefile
@@ -0,0 +1,287 @@
+# $FreeBSD$
+
+PORTNAME= electron
+DISTVERSIONPREFIX= v
+DISTVERSION= ${ELECTRON_VER:S/-beta./.b/}
+PORTREVISION= 4
+CATEGORIES= devel
+MASTER_SITES= https://github.com/tagattie/FreeBSD-Electron/releases/download/v4.1.0/:chromium \
+ https://commondatastorage.googleapis.com/chromium-browser-official/:chromium_official \
+ https://commondatastorage.googleapis.com/chromium-nodejs/:chromium_node \
+ https://commondatastorage.googleapis.com/chromium-fonts/:chromium_testfonts
+PKGNAMESUFFIX= ${ELECTRON_VER_MAJOR}
+DISTFILES= chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
+ chromium-${CHROMIUM_OFFICIAL_VER}${EXTRACT_SUFX}:chromium_official \
+ ${CHROMIUM_NODE_MODULES_HASH}:chromium_node \
+ ${CHROMIUM_TEST_FONTS_HASH}:chromium_testfonts \
+ electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= tagattie@FreeBSD.org
+COMMENT= Build cross-platform desktop apps with JavaScript, HTML, and CSS
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/electron/LICENSE
+
+FETCH_DEPENDS= npm-node10>0:www/npm-node10
+PATCH_DEPENDS= git:devel/git
+BUILD_DEPENDS= ${LOCALBASE}/bin/ar:devel/binutils \
+ gperf:devel/gperf \
+ yasm:devel/yasm \
+ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
+ node10>0:www/node10 \
+ npm-node10>0:www/npm-node10
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libsnappy.so:archivers/snappy \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libdbus-1.so:devel/dbus \
+ libnotify.so:devel/libnotify \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libdrm.so:graphics/libdrm \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libopenh264.so:multimedia/openh264 \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+RUN_DEPENDS= xdg-open:devel/xdg-utils
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}python-dbusmock>0:devel/py-python-dbusmock@${PY_FLAVOR} \
+ npm-node10>0:www/npm-node10
+
+USES= bison dos2unix gettext-tools gl gnome jpeg localbase:ldflags \
+ ninja pkgconfig python:2.7,build,test tar:xz xorg
+
+USE_GITHUB= yes
+GH_TAGNAME= ${DISTVERSIONPREFIX}${ELECTRON_VER}
+# See ${WRKSRC}/electron/DEPS for GH_TAGNAME_node
+GH_TUPLE= electron:node:8bc5d171a0873c0ba49f9433798bc8b67399788c:node
+
+# Official chromium version containing "gn" which is known to work
+CHROMIUM_OFFICIAL_VER= 76.0.3809.132
+# See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
+CHROMIUM_VER= 69.0.3497.128
+# See ${WRKSRC}/third_party/node/node_modules.tar.gz.sha1 for CHROMIUM_NODE_MODULES_HASH
+CHROMIUM_NODE_MODULES_HASH= 050c85d20f7cedd7f5c39533c1ba89dcdfa56a08
+# See ${WRKSRC}/third_party/test_fonts/test_fonts.tar.gz.sha1 for CHROMIUM_TEST_FONTS_HASH
+CHROMIUM_TEST_FONTS_HASH= a22de844e32a3f720d219e3911c3da3478039f89
+
+NO_WRKSUBDIR= yes
+WRKSRC_SUBDIR= src
+
+DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
+
+DOS2UNIX_FILES= third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrandr \
+ xrender xscrnsaver xtst
+USE_GL= gl glesv2
+USE_GNOME= atk cairo pango gdkpixbuf2 gtk30 libxml2 libxslt
+USE_LDCONFIG= ${DATADIR}
+
+GN_ARGS+= clang_use_chrome_plugins=false \
+ enable_hangout_services_extension=true \
+ enable_nacl=false \
+ enable_remoting=false \
+ fieldtrial_testing_like_official_build=true \
+ is_clang=true \
+ jumbo_file_merge_limit=8 \
+ toolkit_views=true \
+ treat_warnings_as_errors=false \
+ use_allocator="none" \
+ use_allocator_shim=false \
+ use_aura=true \
+ use_bundled_fontconfig=false \
+ use_custom_libcxx=false \
+ use_gnome_keyring=false \
+ use_jumbo_build=true \
+ use_lld=true \
+ use_sysroot=false \
+ use_system_freetype=true \
+ use_system_harfbuzz=true \
+ use_system_libjpeg=true \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
+
+ALL_TARGET= electron third_party/electron_node:headers
+MAKE_ARGS= -C out/${BUILDTYPE}
+MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
+ CPLUS_INCLUDE_PATH=${LOCALBASE}/include
+
+OPTIONS_DEFINE= CUPS DEBUG DIST DRIVER KERBEROS
+DIST_DESC= Build distribution zip files
+DRIVER_DESC= Install chromedriver
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO
+OPTIONS_DEFAULT= CUPS DRIVER KERBEROS ALSA
+OPTIONS_SUB= yes
+
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
+ALSA_VARS= GN_ARGS+=use_alsa=true
+ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
+
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+CUPS_VARS= GN_ARGS+=use_cups=true
+CUPS_VARS_OFF= GN_ARGS+=use_cups=false
+
+DEBUG_VARS= BUILDTYPE=Debug \
+ GN_ARGS+=is_component_build=false
+DEBUG_VARS_OFF= BUILDTYPE=Release
+
+DIST_IMPLIES= DRIVER
+
+DRIVER_ALL_TARGET= chromedriver
+
+KERBEROS_VARS= GN_ARGS+=use_kerberos=true
+KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
+PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
+
+POST_BUILD_TARGETS= licenses version
+POST_BUILD_DIST_TARGETS= electron_dist_zip electron_chromedriver_zip electron_mksnapshot_zip
+
+NPM_TIMESTAMP= 1573298347
+
+PLIST_SUB= ELECTRON_VER=${ELECTRON_VER} \
+ ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR}
+
+.include "Makefile.version"
+.include "Makefile.tests"
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "amd64"
+PLIST_SUB+= AMD64=""
+.else
+PLIST_SUB+= AMD64="@comment "
+.endif
+
+.if ${ARCH} == "i386"
+PLIST_SUB+= I386=""
+.else
+PLIST_SUB+= I386="@comment "
+.endif
+
+pre-fetch:
+ @${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
+ if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX} ]; \
+ then ${MKDIR} ${WRKDIR}/npm-cache; \
+ ${CP} ${FILESDIR}/package.json \
+ ${FILESDIR}/package-lock.json ${WRKDIR}/npm-cache; \
+ cd ${WRKDIR}/npm-cache && \
+ ${SETENV} HOME=${WRKDIR} npm ci --verbose --no-progress && \
+ ${MV} node_modules npm_modules; \
+ ${MTREE_CMD} -cbnSp npm_modules | ${MTREE_CMD} -C | ${SED} \
+ -e 's:time=[0-9.]*:time=${NPM_TIMESTAMP}.000000000:' \
+ -e 's:\([gu]id\)=[0-9]*:\1=0:g' \
+ -e 's:flags=.*:flags=none:' \
+ -e 's:^\.:./npm_modules:' > npm_modules.mtree; \
+ ${TAR} cJf ${DISTDIR}/${DIST_SUBDIR}/electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX} \
+ @npm_modules.mtree; \
+ ${RM} -r ${WRKDIR}/npm-cache; \
+ fi
+
+post-extract:
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
+ ${RM} -r ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_OFFICIAL_VER}/tools/gn \
+ ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${PORTNAME}-${ELECTRON_VER} ${WRKSRC}/electron
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_node}-${GH_TAGNAME_node} \
+ ${WRKSRC}/third_party/${GH_ACCOUNT_node}_${GH_PROJECT_node}
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/node_modules ${WRKSRC}/third_party/node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/test_fonts ${WRKSRC}/third_party/test_fonts
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/npm_modules ${WRKSRC}/electron/node_modules
+
+pre-patch:
+ ${SH} ${FILESDIR}/apply-electron-patches.sh ${WRKSRC}
+ # ${FIND} ${WRKSRC} -type f -name '*.orig' -print -delete
+ # ${FIND} ${WRKSRC} -type f -name '*~' -print -delete
+
+pre-configure:
+ # We used to remove bundled libraries to be sure that chromium uses
+ # system libraries and not shipped ones.
+ # cd ${WRKSRC} && ${PYTHON_CMD} \
+ #./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
+ ./build/linux/unbundle/replace_gn_files.py --system-libraries \
+ ffmpeg flac freetype harfbuzz-ng libdrm libusb libwebp libxml \
+ libxslt openh264 opus snappy yasm || ${FALSE}
+
+do-configure:
+ # GN generator bootstrapping and generating ninja files
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
+ READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
+ ./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn gen out/${BUILDTYPE} \
+ --args='import("//electron/build/args/${BUILDTYPE:tl}.gn") ${GN_ARGS}'
+ # Setup nodejs dependency
+ ${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin
+ ${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin/node
+
+post-build:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_TARGETS}
+
+post-build-DIST-on:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_DIST_TARGETS}
+ cd ${WRKSRC}/out/${BUILDTYPE} && \
+ ${CP} chromedriver.zip chromedriver-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} dist.zip electron-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} mksnapshot.zip mksnapshot-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | ${SED} -e 's/ / */' > SHASUMS256.txt
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+.for f in electron mksnapshot v8_context_snapshot_generator
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/swiftshader
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/swiftshader/${f} ${STAGEDIR}${DATADIR}/swiftshader
+.endfor
+.for f in LICENSE LICENSES.chromium.html icudtl.dat natives_blob.bin snapshot_blob.bin v8_context_snapshot.bin version
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/locales
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/locales/*.pak ${STAGEDIR}${DATADIR}/locales
+ ${MKDIR} ${STAGEDIR}${DATADIR}/resources
+.for f in default_app.asar electron.asar
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/resources/${f} ${STAGEDIR}${DATADIR}/resources
+.endfor
+ cd ${WRKSRC}/out/${BUILDTYPE}/gen && ${COPYTREE_SHARE} node_headers ${STAGEDIR}${DATADIR}
+ ${RLN} ${STAGEDIR}${DATADIR}/electron ${STAGEDIR}${PREFIX}/bin/electron${PKGNAMESUFFIX}
+
+post-install-DIST-on:
+ ${MKDIR} ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/SHASUMS256.txt ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*-v${ELECTRON_VER}-freebsd-*.zip ${STAGEDIR}${DATADIR}/releases
+
+post-install-DRIVER-on:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chromedriver ${STAGEDIR}${DATADIR}
+
+do-test:
+ # Note 1: "npm install" will run before actual tests are executed
+ # Note 2: Xvfb or something similar is necessary for headless testing
+.for t in ${TEST_MODULES}
+ cd ${WRKSRC}/electron && \
+ ${SETENV} ${TEST_ENV} ELECTRON_OUT_DIR=${BUILDTYPE} \
+ npm run test -- --ci -g '${t}' || ${TRUE}
+.endfor
+
+.include <bsd.port.post.mk>
diff --git a/devel/electron4/Makefile.tests b/devel/electron4/Makefile.tests
new file mode 100644
index 000000000000..1fab96da0380
--- /dev/null
+++ b/devel/electron4/Makefile.tests
@@ -0,0 +1,49 @@
+# $FreeBSD$
+
+TEST_MODULES= electron\ module \
+ app\ module \
+ autoUpdater\ module \
+ BrowserView\ module \
+ BrowserWindow\ with\ affinity\ module \
+ BrowserWindow\ module \
+ CallbacksRegistry\ module \
+ clipboard\ module \
+ contentTracing \
+ debugger\ module \
+ deprecations \
+ desktopCapturer \
+ dialog\ module \
+ globalShortcut\ module \
+ ipc\ main\ module \
+ ipc\ renderer\ module \
+ MenuItems \
+ Menu\ module \
+ nativeImage\ module \
+ netLog\ module \
+ net\ module \
+ Notification\ module \
+ powerMonitor \
+ powerSaveBlocker\ module \
+ process\ module \
+ protocol\ module \
+ remote\ module \
+ screen\ module \
+ session\ module \
+ shell\ module \
+ systemPreferences\ module \
+ TouchBar\ module \
+ tray\ module \
+ View \
+ webContents\ module \
+ WebContentsView \
+ webFrame\ module \
+ webRequest\ module \
+ asar\ package \
+ chromium\ feature \
+ modules\ support \
+ node\ feature \
+ security\ warnings \
+ <webview>\ tag
+
+# crashReporter\ module \
+# inAppPurchase\ module \
diff --git a/devel/electron4/Makefile.version b/devel/electron4/Makefile.version
new file mode 100644
index 000000000000..71adc1e98875
--- /dev/null
+++ b/devel/electron4/Makefile.version
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+ELECTRON_VER= 4.2.12
+ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron4/distinfo b/devel/electron4/distinfo
new file mode 100644
index 000000000000..093dd4f754ac
--- /dev/null
+++ b/devel/electron4/distinfo
@@ -0,0 +1,15 @@
+TIMESTAMP = 1573298479
+SHA256 (electron/chromium-69.0.3497.128.tar.xz) = af2b0ee2d16255fd28c3ef23a1481eebe58d6604f238b154594072e17ac643ed
+SIZE (electron/chromium-69.0.3497.128.tar.xz) = 1363607512
+SHA256 (electron/chromium-76.0.3809.132.tar.xz) = d54e4640b5e399d170dffbc5bcff65157eb1b29314b94b5d808f727d9ce45241
+SIZE (electron/chromium-76.0.3809.132.tar.xz) = 728899912
+SHA256 (electron/050c85d20f7cedd7f5c39533c1ba89dcdfa56a08) = d2e12fe5e144628f70536d1fea30fa817b7639f067e69f6a9e926f7311c9ec00
+SIZE (electron/050c85d20f7cedd7f5c39533c1ba89dcdfa56a08) = 4535767
+SHA256 (electron/electron-npm-modules-4.2.12.tar.xz) = b738e5394f47902a5a3f37303c32e838541707b38e4cdb8d29691c582280b809
+SIZE (electron/electron-npm-modules-4.2.12.tar.xz) = 15031340
+SHA256 (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 6e331676d098a57c53c1250821dc47ed84c47f823901bf30c4704df90d8a34be
+SIZE (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 17469927
+SHA256 (electron/electron-electron-v4.2.12_GH0.tar.gz) = cb8f69579f0db819756d931f2d1dc4fedc6469a5496ff7684d1bd699534618a9
+SIZE (electron/electron-electron-v4.2.12_GH0.tar.gz) = 6531419
+SHA256 (electron/electron-node-8bc5d171a0873c0ba49f9433798bc8b67399788c_GH0.tar.gz) = bc94083d3904643f17181c83db83a1c7d6557044e957185d0d73d88e82472b90
+SIZE (electron/electron-node-8bc5d171a0873c0ba49f9433798bc8b67399788c_GH0.tar.gz) = 56885474
diff --git a/devel/electron4/files/apply-electron-patches.sh b/devel/electron4/files/apply-electron-patches.sh
new file mode 100644
index 000000000000..300c8166f223
--- /dev/null
+++ b/devel/electron4/files/apply-electron-patches.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+PATH=/bin:/usr/bin:/usr/local/bin
+
+PATCH_CMD="git apply"
+#PATCH_FLAGS="--numstat --check" # for debugging
+PATCH_FLAGS="--verbose --reject"
+
+WRKSRC=$1
+PATCH_CONF=${WRKSRC}/electron/patches/common/config.json
+
+PATCHD_REPOD_PAIRS=$(sed -e '1d; $d; /^$/d; s/[",]//g; s/: */:/' "${PATCH_CONF}")
+for prp in ${PATCHD_REPOD_PAIRS}; do
+ pd=$(echo "${prp}" | awk -F: '{print $1}' | sed -e 's/src/./')
+ rd=$(echo "${prp}" | awk -F: '{print $2}' | sed -e 's/src/./')
+ (cd "${WRKSRC}/${rd}" && \
+ while read -r p; do
+ ${PATCH_CMD} ${PATCH_FLAGS} "${WRKSRC}/${pd}/${p}"
+ done < "${WRKSRC}/${pd}/.patches")
+done
diff --git a/devel/electron4/files/package-lock.json b/devel/electron4/files/package-lock.json
new file mode 100644
index 000000000000..56b3f51b7254
--- /dev/null
+++ b/devel/electron4/files/package-lock.json
@@ -0,0 +1,12235 @@
+{
+ "name": "electron",
+ "version": "4.2.12",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz",
+ "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "7.0.70",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.70.tgz",
+ "integrity": "sha512-bAcW/1aM8/s5iFKhRpu/YJiQf/b1ZwnMRqqsWRCmAqEDQF2zY8Ez3Iu9AcZKFKc3vCJc8KJVpJ6Pn54sJ1BvXQ==",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "abab": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
+ "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
+ "dev": true,
+ "optional": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
+ "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "acorn": "^2.1.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
+ "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-node": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
+ "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.4.1",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ }
+ }
+ },
+ "add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+ "dev": true
+ },
+ "address": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
+ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "requires": {
+ "extend": "~3.0.0",
+ "semver": "~5.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "dev": true
+ },
+ "aliasify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/aliasify/-/aliasify-2.1.0.tgz",
+ "integrity": "sha1-fDCCW5RQueYYW6J1M+r24gZ9S0I=",
+ "dev": true,
+ "requires": {
+ "browserify-transform-tools": "~1.7.0"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
+ "dev": true,
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
+ },
+ "arch": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+ "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+ "dev": true
+ },
+ "arg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
+ "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "args": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/args/-/args-4.0.0.tgz",
+ "integrity": "sha512-4b7lVF58nlo7sNtq8s2OueroOY/UHn0Nt/NVjsx9zn28u6yDVb9bQ/uy/5jKtHCbUDil4MlMyDLF5+OHEgnTug==",
+ "dev": true,
+ "requires": {
+ "camelcase": "5.0.0",
+ "chalk": "2.3.2",
+ "leven": "2.1.0",
+ "mri": "1.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "array-iterate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz",
+ "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asar": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz",
+ "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=",
+ "dev": true,
+ "requires": {
+ "chromium-pickle-js": "^0.1.0",
+ "commander": "^2.9.0",
+ "cuint": "^0.2.1",
+ "glob": "^6.0.4",
+ "minimatch": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "mksnapshot": "^0.3.0"
+ }
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astw": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
+ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
+ "dev": true,
+ "requires": {
+ "acorn": "^4.0.3"
+ }
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "bail": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz",
+ "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "basic-auth": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
+ "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ }
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "dev": true,
+ "requires": {
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz",
+ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.1.2",
+ "buffer": "^4.1.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "~1.1.0",
+ "duplexer2": "~0.1.2",
+ "events": "~1.1.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "~0.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "module-deps": "^4.0.8",
+ "os-browserify": "~0.1.1",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "~0.10.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "~0.0.0",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "~0.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
+ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-transform-tools": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz",
+ "integrity": "sha1-g+J3Ih9jJZvtLn6yooOpcKUB9MQ=",
+ "dev": true,
+ "requires": {
+ "falafel": "^2.0.0",
+ "through": "^2.3.7"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
+ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
+ "dev": true
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true,
+ "optional": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "ccount": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz",
+ "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "dev": true,
+ "requires": {
+ "traverse": ">=0.3.0 <0.4"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "character-entities": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz",
+ "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==",
+ "dev": true
+ },
+ "character-entities-html4": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz",
+ "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==",
+ "dev": true
+ },
+ "character-entities-legacy": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz",
+ "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==",
+ "dev": true
+ },
+ "character-reference-invalid": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz",
+ "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==",
+ "dev": true
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "check-for-leaks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/check-for-leaks/-/check-for-leaks-1.2.0.tgz",
+ "integrity": "sha1-6jtQFk6XV3kzLGKBMZX/jGr4Jsw=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "minimist": "^1.2.0",
+ "parse-gitignore": "^0.4.0",
+ "walk-sync": "^0.3.2"
+ }
+ },
+ "checksum": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/checksum/-/checksum-0.1.1.tgz",
+ "integrity": "sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=",
+ "dev": true,
+ "requires": {
+ "optimist": "~0.3.5"
+ }
+ },
+ "cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.0",
+ "entities": "~1.1.1",
+ "htmlparser2": "^3.9.1",
+ "lodash.assignin": "^4.0.9",
+ "lodash.bind": "^4.1.4",
+ "lodash.defaults": "^4.0.1",
+ "lodash.filter": "^4.4.0",
+ "lodash.flatten": "^4.2.0",
+ "lodash.foreach": "^4.3.0",
+ "lodash.map": "^4.4.0",
+ "lodash.merge": "^4.4.0",
+ "lodash.pick": "^4.2.1",
+ "lodash.reduce": "^4.4.0",
+ "lodash.reject": "^4.4.0",
+ "lodash.some": "^4.4.0"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "chromium-pickle-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz",
+ "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
+ "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=",
+ "dev": true
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "glob": "^7.0.0",
+ "resolve": "^1.1.6"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "clean-deep": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-2.0.2.tgz",
+ "integrity": "sha1-d83ZTmsmZkTw95Cy9XbL7wOOJ8E=",
+ "dev": true,
+ "requires": {
+ "lodash.isempty": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.transform": "^4.6.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^1.0.1"
+ }
+ },
+ "cli-spinners": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
+ "dev": true
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clipboardy": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz",
+ "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.0",
+ "execa": "^0.8.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collapse-white-space": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
+ "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz",
+ "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "dev": true
+ },
+ "compare-func": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
+ "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.34.0 < 2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.35.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+ "dev": true
+ }
+ }
+ },
+ "compression": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.14",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.1",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "conventional-changelog": {
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+ "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^1.6.6",
+ "conventional-changelog-atom": "^0.2.8",
+ "conventional-changelog-codemirror": "^0.3.8",
+ "conventional-changelog-core": "^2.0.11",
+ "conventional-changelog-ember": "^0.3.12",
+ "conventional-changelog-eslint": "^1.0.9",
+ "conventional-changelog-express": "^0.3.6",
+ "conventional-changelog-jquery": "^0.1.0",
+ "conventional-changelog-jscs": "^0.1.0",
+ "conventional-changelog-jshint": "^0.3.8",
+ "conventional-changelog-preset-loader": "^1.1.8"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+ "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+ "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "1.3.22",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
+ "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog": "^1.1.24",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "tempfile": "^1.1.1"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+ "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+ "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "^3.0.9",
+ "conventional-commits-parser": "^2.1.7",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^1.0.0",
+ "git-raw-commits": "^1.3.6",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^1.3.6",
+ "lodash": "^4.2.1",
+ "normalize-package-data": "^2.3.5",
+ "q": "^1.5.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+ "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+ "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+ "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+ "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+ "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+ "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^1.1.6",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.0.2",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "semver": "^5.5.0",
+ "split": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+ "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "dev": true,
+ "requires": {
+ "is-subset": "^0.1.1",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+ "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.4",
+ "is-text-path": "^1.0.0",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0",
+ "trim-off-newlines": "^1.0.0"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
+ "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
+ "dev": true,
+ "optional": true
+ },
+ "cssstyle": {
+ "version": "0.2.37",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-log": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
+ "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress-zip": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.0.tgz",
+ "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=",
+ "dev": true,
+ "requires": {
+ "binary": "^0.3.0",
+ "graceful-fs": "^4.1.3",
+ "mkpath": "^0.1.0",
+ "nopt": "^3.0.1",
+ "q": "^1.1.2",
+ "readable-stream": "^1.1.8",
+ "touch": "0.0.3"
+ }
+ },
+ "dedent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
+ "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ }
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "deglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
+ "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
+ "dev": true,
+ "requires": {
+ "find-root": "^1.0.0",
+ "glob": "^7.0.5",
+ "ignore": "^3.0.9",
+ "pkg-config": "^1.1.0",
+ "run-parallel": "^1.1.2",
+ "uniq": "^1.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-port": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.2.3.tgz",
+ "integrity": "sha512-IDbrX6PxqnYy8jV4wSHBaJlErYKTJvW8OQb9F7xivl1iQLqiUYHGa+nZ61Do6+N5uuOn/pReXKNqI9rUn04vug==",
+ "dev": true,
+ "requires": {
+ "address": "^1.0.1",
+ "debug": "^2.6.0"
+ }
+ },
+ "detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dir-glob": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "path-type": "^3.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
+ "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=",
+ "dev": true
+ },
+ "dotenv-safe": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-4.0.4.tgz",
+ "integrity": "sha1-iw587Y5wsdPF2HTvlCDkBvOUJbM=",
+ "dev": true,
+ "requires": {
+ "dotenv": "^4.0.0"
+ }
+ },
+ "dugite": {
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/dugite/-/dugite-1.63.0.tgz",
+ "integrity": "sha512-CFd0sWTB2oouat0kJA4/rEQAeh6ZUvCDL9uFOaSBhLX+2CM/YL+ebKJXd8dYVIe8iVXmK5R9P31NVbRw4Ccoxw==",
+ "dev": true,
+ "requires": {
+ "checksum": "^0.1.1",
+ "mkdirp": "^0.5.1",
+ "progress": "^2.0.0",
+ "request": "^2.85.0",
+ "rimraf": "^2.5.4",
+ "tar": "^4.0.2"
+ }
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
+ "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electabul": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/electabul/-/electabul-0.0.4.tgz",
+ "integrity": "sha1-aBO+LTdwciKVrFXxM0/mu5iymsI=",
+ "dev": true,
+ "requires": {
+ "asar": "^0.12.1",
+ "glob": "^7.0.5",
+ "istanbul": "^0.4.4",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "temp": "^0.8.3",
+ "yargs": "^4.8.1"
+ },
+ "dependencies": {
+ "asar": {
+ "version": "0.12.4",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-0.12.4.tgz",
+ "integrity": "sha1-LdPxFoguq4wPI7dUeSqCp9n84XE=",
+ "dev": true,
+ "requires": {
+ "chromium-pickle-js": "^0.2.0",
+ "commander": "^2.9.0",
+ "cuint": "^0.2.1",
+ "glob": "^6.0.4",
+ "minimatch": "^3.0.3",
+ "mkdirp": "^0.5.0",
+ "mksnapshot": "^0.3.0",
+ "tmp": "0.0.28"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "chromium-pickle-js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
+ "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "electron-docs": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-2.0.1.tgz",
+ "integrity": "sha1-ARI6T8y2vieswSgAJ7/LJAxUsdI=",
+ "dev": true,
+ "requires": {
+ "got": "^6.3.0",
+ "gunzip-maybe": "^1.3.1",
+ "node-dir": "^0.1.12",
+ "ora": "^0.2.3",
+ "path-exists": "^3.0.0",
+ "pify": "^2.3.0",
+ "semver": "^5.1.0",
+ "tar-fs": "^1.13.0"
+ },
+ "dependencies": {
+ "ora": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "cli-cursor": "^1.0.2",
+ "cli-spinners": "^0.1.2",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "electron-docs-linter": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/electron-docs-linter/-/electron-docs-linter-2.4.0.tgz",
+ "integrity": "sha512-WvxXsk6kl4x0nrQOqMYAXsMMbSouSwa8VeNd+Bps9HM7QXuNNNVPFB1UEdykq06HWS60lUt4VUiAjQjAJJpcSg==",
+ "dev": true,
+ "requires": {
+ "cheerio": "^0.22.0",
+ "clean-deep": "^2.0.1",
+ "decamelize": "^1.2.0",
+ "dedent": "^0.6.0",
+ "electron-docs": "^2.0.1",
+ "entities": "^1.1.1",
+ "keyed-array": "^2.1.2",
+ "lodash.merge": "^4.6.0",
+ "lodash.pick": "^4.2.1",
+ "marky-markdown-lite": "^1.2.0",
+ "minimist": "^1.2.0",
+ "ora": "^0.3.0",
+ "path-exists": "^3.0.0",
+ "pify": "^2.3.0",
+ "revalidator": "^0.3.1",
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "electron-typescript-definitions": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/electron-typescript-definitions/-/electron-typescript-definitions-2.1.1.tgz",
+ "integrity": "sha512-vrEhi3hhPzUEDLwPGOqScYBLefNKH5r9odp3dy/lqE0nhAmUHBkrwnU5jVga3A2pJW22wzCCB1kwkEoPV7Rq4w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^7.0.18",
+ "colors": "^1.1.2",
+ "debug": "^2.6.3",
+ "electron-docs": "^2.0.0",
+ "electron-docs-linter": "^2.4.0",
+ "lodash": "^4.17.11",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "tslint": "^4.5.1",
+ "typescript": "^2.2.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
+ }
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "ensure-posix-path": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz",
+ "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.1",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "requires": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.2.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz",
+ "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.5.3",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.1.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^4.0.3",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
+ "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
+ "dev": true
+ },
+ "eslint-config-standard-jsx": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz",
+ "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
+ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.8",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz",
+ "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^1.3.0",
+ "regexpp": "^2.0.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
+ "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
+ "dev": true,
+ "requires": {
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.2.0",
+ "has": "^1.0.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.6.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.2.0.tgz",
+ "integrity": "sha512-4VTX/qIoxUFRnXLNm6bEhEJyfGnGagmQzV4TWXKzkZgIYyP2FSubEdCjEFTyS/dGwSVRWCWGX7jO7BK8R0kppg==",
+ "dev": true,
+ "requires": {
+ "ramda": "^0.25.0"
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz",
+ "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^1.3.1",
+ "eslint-utils": "^1.3.1",
+ "ignore": "^4.0.2",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz",
+ "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
+ "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "prop-types": "^15.6.2"
+ },
+ "dependencies": {
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz",
+ "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
+ "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.6.0",
+ "acorn-jsx": "^4.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "^1.0.6"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz",
+ "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.0.1",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.1",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fault": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz",
+ "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==",
+ "dev": true,
+ "requires": {
+ "format": "^0.2.2"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
+ }
+ },
+ "fn-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz",
+ "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=",
+ "dev": true
+ },
+ "folder-hash": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-2.1.1.tgz",
+ "integrity": "sha512-owr5AVhj+nxnzsyDLOiwSUC6S3mqcxJSfZneFgOYoaScMBwPGt3cz0XiBPRrCIUk2Hs1ucQXFGwfB40JxBqb4w==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "graceful-fs": "~4.1.11",
+ "minimatch": "~3.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "follow-redirects": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz",
+ "integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0",
+ "stream-consume": "^0.1.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "0.26.7",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
+ "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "dev": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "meow": "^3.3.0",
+ "normalize-package-data": "^2.3.0",
+ "parse-github-repo-url": "^1.3.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "git-raw-commits": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+ "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "dev": true,
+ "requires": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ }
+ },
+ "git-semver-tags": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+ "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "dev": true,
+ "requires": {
+ "meow": "^4.0.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ }
+ },
+ "github": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/github/-/github-9.3.1.tgz",
+ "integrity": "sha1-ajxanMKhzQtdCXpHuu+50Ryu+J4=",
+ "dev": true,
+ "requires": {
+ "follow-redirects": "0.0.7",
+ "https-proxy-agent": "^1.0.0",
+ "mime": "^1.2.11",
+ "netrc": "^0.1.4"
+ }
+ },
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "globals": {
+ "version": "11.7.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
+ "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "gunzip-maybe": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz",
+ "integrity": "sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==",
+ "dev": true,
+ "requires": {
+ "browserify-zlib": "^0.1.4",
+ "is-deflate": "^1.0.0",
+ "is-gzip": "^1.0.0",
+ "peek-stream": "^1.1.0",
+ "pumpify": "^1.3.3",
+ "through2": "^2.0.3"
+ }
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "^1.4.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.4.4",
+ "uglify-js": "^2.6"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.0.2"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
+ "dev": true
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": ">= 1.3.1 < 2"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true,
+ "requires": {
+ "agent-base": "2",
+ "debug": "2",
+ "extend": "3"
+ }
+ },
+ "husky": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
+ "integrity": "sha1-xp7XTi0neXaaF7qDmbVM4LY8EsM=",
+ "dev": true,
+ "requires": {
+ "is-ci": "^1.0.10",
+ "normalize-path": "^1.0.0",
+ "strip-indent": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+ "dev": true
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
+ "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz",
+ "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "inquirer": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
+ "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.10",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.1.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz",
+ "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "lexical-scope": "^1.2.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz",
+ "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==",
+ "dev": true
+ },
+ "is-alphanumeric": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
+ "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
+ "dev": true
+ },
+ "is-alphanumerical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz",
+ "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
+ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-decimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz",
+ "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==",
+ "dev": true
+ },
+ "is-deflate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
+ "integrity": "sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-empty": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
+ "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz",
+ "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-gzip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+ "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
+ "dev": true
+ },
+ "is-hexadecimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz",
+ "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==",
+ "dev": true
+ },
+ "is-hidden": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.1.tgz",
+ "integrity": "sha512-175UKecS8+U4hh2PSY0j4xnm2GKYzvSKnbh+naC93JjuBA7LgIo6YxlbcsSo6seFBdQO3RuIcH980yvqqD/2cA==",
+ "dev": true
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-whitespace-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz",
+ "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-word-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz",
+ "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.x",
+ "async": "1.x",
+ "escodegen": "1.8.x",
+ "esprima": "2.7.x",
+ "glob": "^5.0.15",
+ "handlebars": "^4.0.1",
+ "js-yaml": "3.x",
+ "mkdirp": "0.5.x",
+ "nopt": "3.x",
+ "once": "1.x",
+ "resolve": "1.1.x",
+ "supports-color": "^3.1.0",
+ "which": "^1.1.1",
+ "wordwrap": "^1.0.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+ "dev": true
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=",
+ "dev": true
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsdom": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
+ "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abab": "^1.0.0",
+ "acorn": "^2.4.0",
+ "acorn-globals": "^1.0.4",
+ "cssom": ">= 0.3.0 < 0.4.0",
+ "cssstyle": ">= 0.2.29 < 0.3.0",
+ "escodegen": "^1.6.1",
+ "nwmatcher": ">= 1.3.7 < 2.0.0",
+ "parse5": "^1.5.1",
+ "request": "^2.55.0",
+ "sax": "^1.1.4",
+ "symbol-tree": ">= 3.1.0 < 4.0.0",
+ "tough-cookie": "^2.2.0",
+ "webidl-conversions": "^2.0.0",
+ "whatwg-url-compat": "~0.6.5",
+ "xml-name-validator": ">= 2.0.1 < 3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3"
+ }
+ },
+ "keyed-array": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/keyed-array/-/keyed-array-2.1.2.tgz",
+ "integrity": "sha1-isE3thMi7V7Rx7Qbn5zQZmMcrOA=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true,
+ "optional": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lexical-scope": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
+ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "dev": true,
+ "requires": {
+ "astw": "^2.0.0"
+ }
+ },
+ "linkify-it": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz",
+ "integrity": "sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo=",
+ "dev": true,
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "lint": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/lint/-/lint-1.1.2.tgz",
+ "integrity": "sha1-Ne0GTzIlR8MxNY2JmGhmSWi6Nx8=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "load-plugin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-2.2.2.tgz",
+ "integrity": "sha512-FYzamtURIJefQykZGtiClYuZkJBUKzmx8Tc74y8JGAulDzbzVm/C+w/MbAljHRr+REL0cRzy3WgnHE+T8gce5g==",
+ "dev": true,
+ "requires": {
+ "npm-prefix": "^1.2.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.isempty": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+ "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.map": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.range": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.range/-/lodash.range-3.2.0.tgz",
+ "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0"
+ }
+ },
+ "lodash.transform": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+ "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true,
+ "optional": true
+ },
+ "longest-streak": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz",
+ "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-escapes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz",
+ "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==",
+ "dev": true
+ },
+ "markdown-extensions": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz",
+ "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==",
+ "dev": true
+ },
+ "markdown-it": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-6.1.1.tgz",
+ "integrity": "sha1-ztA39Ec+6fUVOsQU933IPJG6knw=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "entities": "~1.1.1",
+ "linkify-it": "~1.2.2",
+ "mdurl": "~1.0.1",
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "markdown-it-named-headers": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz",
+ "integrity": "sha1-gu/CgyQkCmsed7mq5QF3HV81HB8=",
+ "dev": true,
+ "requires": {
+ "string": "^3.0.1"
+ }
+ },
+ "markdown-table": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz",
+ "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==",
+ "dev": true
+ },
+ "marky-markdown-lite": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/marky-markdown-lite/-/marky-markdown-lite-1.2.0.tgz",
+ "integrity": "sha1-dO2phLgTZVfe4QZO/RXkBhdAaZc=",
+ "dev": true,
+ "requires": {
+ "cheerio": "^0.20.0",
+ "conventional-changelog-cli": "^1.2.0",
+ "is-file": "^1.0.0",
+ "markdown-it": "^6.0.1",
+ "markdown-it-named-headers": "0.0.4"
+ },
+ "dependencies": {
+ "cheerio": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz",
+ "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
+ "dev": true,
+ "requires": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.0",
+ "entities": "~1.1.1",
+ "htmlparser2": "~3.8.1",
+ "jsdom": "^7.0.2",
+ "lodash": "^4.1.0"
+ }
+ },
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1",
+ "domhandler": "2.3",
+ "domutils": "1.5",
+ "entities": "1.0",
+ "readable-stream": "1.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "matcher-collection": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.5.tgz",
+ "integrity": "sha1-LuCVQ4Nyy4iE8FgjQTjAXGROwzk=",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.2"
+ }
+ },
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "mdast-comment-marker": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.0.2.tgz",
+ "integrity": "sha1-Hd8O+BH7UkOQF8jSwLkiA18rp0o=",
+ "dev": true
+ },
+ "mdast-util-compact": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz",
+ "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=",
+ "dev": true,
+ "requires": {
+ "unist-util-modify-children": "^1.0.0",
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "mdast-util-heading-style": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.3.tgz",
+ "integrity": "sha1-77OQ28iqAWw89XegNJANsn7nJHw=",
+ "dev": true
+ },
+ "mdast-util-to-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz",
+ "integrity": "sha1-XEVch4yTVfDB5/PotxnPWDaRrPs=",
+ "dev": true
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+ "dev": true
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz",
+ "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==",
+ "dev": true
+ },
+ "micro": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.1.tgz",
+ "integrity": "sha512-83uimpPJqfwkfKvJl2WWontBlV3hmzrIgyJ+L2uhDXKNk7Ll+/ezK3zBz7TljubpKPqjM0JdT2Ker4MTPmhjgA==",
+ "dev": true,
+ "requires": {
+ "arg": "2.0.0",
+ "chalk": "2.4.0",
+ "content-type": "1.0.4",
+ "is-stream": "1.1.0",
+ "raw-body": "2.3.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz",
+ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "micro-compress": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micro-compress/-/micro-compress-1.0.0.tgz",
+ "integrity": "sha1-U/WoC0rQMgyhZaVZtuPfFF1PcE8=",
+ "dev": true,
+ "requires": {
+ "compression": "^1.6.2"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "minipass": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.0.tgz",
+ "integrity": "sha512-jWC2Eg+Np4bxah7llu1IrUNSJQxtLz/J+pOjTM0nFpJXGAaV18XBWhUn031Q1tAA/TJtA1jgwnOe9S2PQa4Lbg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "mkpath": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz",
+ "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=",
+ "dev": true
+ },
+ "mksnapshot": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.1.tgz",
+ "integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=",
+ "dev": true,
+ "requires": {
+ "decompress-zip": "0.3.0",
+ "fs-extra": "0.26.7",
+ "request": "^2.79.0"
+ }
+ },
+ "modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
+ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.0",
+ "defined": "^1.0.0",
+ "detective": "^4.0.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.3",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "mri": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.0.tgz",
+ "integrity": "sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "netrc": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz",
+ "integrity": "sha1-a+lPysqNd63gqWcNxGCRTJRHJEQ=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.2"
+ }
+ },
+ "node-fetch": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
+ "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=",
+ "dev": true
+ },
+ "node-version": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz",
+ "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-prefix": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz",
+ "integrity": "sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.0",
+ "shellsubstitute": "^1.1.0",
+ "untildify": "^2.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "nugget": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "minimist": "^1.1.0",
+ "pretty-bytes": "^1.0.2",
+ "progress-stream": "^1.1.0",
+ "request": "^2.45.0",
+ "single-line-log": "^1.1.2",
+ "throttleit": "0.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwmatcher": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
+ "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==",
+ "dev": true,
+ "optional": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "octicons": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/octicons/-/octicons-7.3.0.tgz",
+ "integrity": "sha512-UVjlkmUL15Ef/7Rd72Io634Bdl61QgSMasAZpvXPoR2XNFj1RelAyhl4QJuR1hBGlPWFDR7KFj2jEzsFax2IUg==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "openssl-self-signed-certificate": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/openssl-self-signed-certificate/-/openssl-self-signed-certificate-1.1.6.tgz",
+ "integrity": "sha1-nTpHdrGlfphHNQOSEUrS+RWoPdQ=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "dev": true,
+ "requires": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "ora": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz",
+ "integrity": "sha1-NnoHitJc+wltpQERXrW0AeB9dJU=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "cli-cursor": "^1.0.2",
+ "cli-spinners": "^0.2.0",
+ "log-symbols": "^1.0.2"
+ },
+ "dependencies": {
+ "cli-spinners": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz",
+ "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=",
+ "dev": true
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
+ "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
+ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "parse-entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz",
+ "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==",
+ "dev": true,
+ "requires": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-gitignore": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-0.4.0.tgz",
+ "integrity": "sha1-q/cC5LkAUk//eQK2g4YoV7Y/k/4=",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "is-glob": "^3.1.0"
+ },
+ "dependencies": {
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true,
+ "optional": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.16",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
+ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "peek-stream": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
+ "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "duplexify": "^3.5.0",
+ "through2": "^2.0.3"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-conf": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
+ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "load-json-file": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "pkg-config": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
+ "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
+ "dev": true,
+ "requires": {
+ "debug-log": "^1.0.0",
+ "find-root": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+ "dev": true,
+ "requires": {
+ "irregular-plurals": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "progress-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+ "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "dev": true,
+ "requires": {
+ "speedometer": "~0.1.2",
+ "through2": "~0.2.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+ "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "xtend": "~2.1.1"
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
+ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
+ "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
+ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
+ "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "recursive-readdir": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
+ "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz",
+ "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==",
+ "dev": true
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "remark": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz",
+ "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==",
+ "dev": true,
+ "requires": {
+ "remark-parse": "^4.0.0",
+ "remark-stringify": "^4.0.0",
+ "unified": "^6.0.0"
+ }
+ },
+ "remark-cli": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-4.0.0.tgz",
+ "integrity": "sha512-q5GMjGypUS4rTZb3WfMQcGpClSC38A9Ogg1h/HB2GLsqypDetmAfy0X+tuJ6JeyCPVOXXCDgsDCQq4QPqKmxBA==",
+ "dev": true,
+ "requires": {
+ "markdown-extensions": "^1.1.0",
+ "remark": "^8.0.0",
+ "unified-args": "^4.0.0"
+ }
+ },
+ "remark-lint": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.1.tgz",
+ "integrity": "sha512-wvTTuB5O5pF8SxqahQjjrU3dtuhygYjaGcOZTw+4ACgSE4RBINDlNqN46HjcV3X0ib5GmObJUt5a2mmhtmuTqw==",
+ "dev": true,
+ "requires": {
+ "remark-message-control": "^4.0.0"
+ }
+ },
+ "remark-lint-blockquote-indentation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.1.tgz",
+ "integrity": "sha512-YrP99MJ3+dQ5JXzq39fUOcYzwcumva/xEM1eFtD2TrQcSdlMLoqYa7gj+aEEhZCjlA5BssTiVoWWW0RjyPPGZw==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-code-block-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.1.tgz",
+ "integrity": "sha512-FRUMhhKwCruH4vkatdMhVO4WlYpysV1NmMILVoK/k+/7uFLSfgvlqo66nzhpMdWL8TQHqdo0LhiXuetGC2WjsQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-definition-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-1.0.1.tgz",
+ "integrity": "sha512-TxLye5KF4o/rKVTvmPRX5jS9itamFS02yy1IG8bIYcIAJvWsW3GlJaXq4ohK3hKwSQOhtCherEfD6XF9BHLNYQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-definition-spacing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.1.tgz",
+ "integrity": "sha512-ewzdlFfpTSP11ZuiOln0yfz6Y03aWtgJmLVQNfF1spaT1gURaShjs8Hiilbo719bz96DgvXSZLP6UnkSiZL1vg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-emphasis-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.1.tgz",
+ "integrity": "sha512-QyNsD6y8EZQqhechw0XFGybYMlxn6PFLSlFUO50KSQlJEOgkImN2yJfrNrET2GY4t/fc/uYmeI/q7auUIkLX2w==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-fenced-code-flag": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.1.tgz",
+ "integrity": "sha512-P24T9DRe/nnywPFRpE1UAXAVzN1CX6HmINr15UHbQZo1Cy8KYt7uV9YOR0/XzphtnO/AFenAqZyf7tchW5AUNQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-fenced-code-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.1.tgz",
+ "integrity": "sha512-mX7xAMl5m7xGX+YtOtyXIyv+egD4IQAm6DPGdfunI734QwODwcoBydtpTD56jrY+48nVcQ/anFYT1Blg3Xk3sQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-file-extension": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-1.0.1.tgz",
+ "integrity": "sha512-K1Pf5oviaFyCs0FhZqaNZ2odgd5KoV6AlA4nNAMxyylB0Y6t0mYpzECoLSS5Bgxf6f8Op9YbuM2cbjBAsv0dIA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-final-definition": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-1.0.1.tgz",
+ "integrity": "sha512-DK6bphJdQ0xSOQAn+8wOyLIVc3SZW2+ZzCMCLkQnVtHiQ9GHMzFiCkeE3Cq+OClsMI5Yn8wFTHZHPUn58VhNEQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-hard-break-spaces": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.2.tgz",
+ "integrity": "sha512-uh7LqHgRPCphiCvRzBVA4D0Ml2IqPaw89lWJdQ6HvYiV8ChB/OFLBapHi6OKW7NVVVPPJsElPMB/UPUsKFaPTg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-heading-increment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.1.tgz",
+ "integrity": "sha512-jBAJacXAU5drUpvmymOoFmrdCCNDiz8bzGgJIMjpT0Vyjd0+qdXu2iyFMl/4RkkUli25rpUDXkTHTcxmNbh7Zw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-heading-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-1.0.1.tgz",
+ "integrity": "sha512-m9Gqr091YdxUtG69xdXYH8fSd3+nsrsMamB/qSWpVSZuWQKZ1mRotr1LO9NphJh6vhw8IfBtG07wgEDn6b40sQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-heading-style": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-link-title-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.1.tgz",
+ "integrity": "sha512-91MyqmZjokSzRbgvlKq5sLCJEFkM/MNKT1PDaWa3+GDLBGu7D4eMQGd2x49xX8IdJDEoWy5D8W+2Gb8XKWMUyw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1",
+ "vfile-location": "^2.0.1"
+ }
+ },
+ "remark-lint-list-item-content-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.1.tgz",
+ "integrity": "sha512-R5cdXFFywoBcg+2UUcF9OJ/vt9oqJv+KmTKIQV9CFHWeAfMFiZbxazsSPNaCcO1fW9622hxPCawN/AofDTbP7Q==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-list-item-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.1.tgz",
+ "integrity": "sha512-dSUFGQYtduuaos+5oXH89RTk0rGUe6DFf04q+rxQ7Z3YRbuXhAU2nYeY0/HENYiWJU1xFLteZkDvKMj0NfS3DQ==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-list-item-spacing": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.1.tgz",
+ "integrity": "sha512-HlPEzRq4LJB6tQ72zgIZ42mOaOSX92O268BLolys/H1x6N29/JNMLfurWqLsrxZrxxHH3H7EUP4dNM2P1kDGBw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-maximum-heading-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.1.tgz",
+ "integrity": "sha512-f8ChV9U238gncyvTqmzJ+UpCMj+hFyluWBjVYr2K8CNh+MdSivIxS4zw4170sBRoqNuS3gBxRHG9f4rmdqotJA==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-maximum-line-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.0.2.tgz",
+ "integrity": "sha512-M4UIXAAbtLgoQbTDVwdKOEFbTKtJSZ+pCW7ZqMFs+cbIN0Svm32LM9+xpVfVU0hLYt3Ypl++EAPfguBNe1PZEw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-auto-link-without-protocol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.1.tgz",
+ "integrity": "sha512-MHl0hNtF8Rc0lg6iuVP7/0rnp4uZadm3S07/1TiFeqzU22KFxxzcC8980Q4+I8oPZE0d1x80h9DmkNAVFwhDjQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-blockquote-without-marker": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.1.tgz",
+ "integrity": "sha512-8VTQ/MP3flvG4U0tFSD+DMVT7F/4u9SnQLb/jjeRC3DzgbsIagIUqpWYAKkc+yBz9S/lgftA92lLP5PrlOa5DA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1",
+ "vfile-location": "^2.0.1"
+ }
+ },
+ "remark-lint-no-consecutive-blank-lines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.1.tgz",
+ "integrity": "sha512-IhyUiGTpb/hjtusIVg10q963KeL5CyNfbWOfDZ1KtY2tvdoSPRGrrCuTKo6OG8r1qavM6bU0mtRuIBqNh4lIzA==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-duplicate-headings": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.1.tgz",
+ "integrity": "sha512-iZZxyZgwnjvDkydKZzqHBueJvIpGbxnITmgd8xN8TOLZoAg9/KGTQRAkotL1HXNRdkzwggfgB9ONxv/rWtYBmg==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-emphasis-as-heading": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.1.tgz",
+ "integrity": "sha512-+x17Hrjwne4Mhk2x/Zolnuv/sOclF1oYMDBSEYhBUpn/UAwxhXEXYKkeo0KkWA7Q3+UCLELJvzsk4cGNP6Sgow==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-file-name-articles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.1.tgz",
+ "integrity": "sha512-SzebnFnilrsINA6QZP1YqPa3SrfSotrLkRWl5FUCoVshBvEFNKJFWXj6Xyt4NjWQ5tJWFtOMysAuHdGT+Odhjg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-consecutive-dashes": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.1.tgz",
+ "integrity": "sha512-YP2HBwA00yeD7phvxp4ftiqbfBPfYHPgPfcEcb8oNa1WlUh/58cs9DbSHWKsZG+XLkvEaheC6qUQG02jEKZHPA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-irregular-characters": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.1.tgz",
+ "integrity": "sha512-+ks/V6OVMGOPZKw+fe2E4DPvLoslGxvdgtqXq2Nyz0cEdYX8RP45kI79V4w95H7UCJAeOFM9mZzVLvmCY1sEbg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-mixed-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.1.tgz",
+ "integrity": "sha512-bcqPsow1C0LrsKII1YehUO7VPOER7nze6FzsZZ8/NP+d200OL7Y7VMCqN1kscAvG+PTJgjznyXuLEpy7KQnVFg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-outer-dashes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.2.tgz",
+ "integrity": "sha512-BVEwLrA4kipalgKrxhncpgtmh6eUmHBH1ggC+X3csYR4X5vXv4vHQqpov4I1vMyWxMLMBnq7lTL3Iqp0CS4vwg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-heading-punctuation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.1.tgz",
+ "integrity": "sha512-/7kGRmPT+JLxEME1Z/rQn99mP8yr4qXFwcniKYsefR1jl8pCZciwCIp2Tq92Nn+FPELVrpk9sloRBb2JP3UB0A==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-inline-padding": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.1.tgz",
+ "integrity": "sha512-nRl6vA45ZPdMz3/rVMZw7WRRqLFuMrzhdkrbrGLjwBovdIeD/IGCEbDA5NR60g2xT9V5dAmKogvHEH1bIr8SdQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-literal-urls": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.1.tgz",
+ "integrity": "sha512-YMsZFVYQDt9gvpc6THL76GzyhCR+cK79vjyEOEmX+O3tOjxQstbi0oW6Lngbl1WbpkCW5TWEzSKOorQowYI2wg==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-multiple-toplevel-headings": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.1.tgz",
+ "integrity": "sha512-LFfgjF3NKFkt0tGNnJ8Exf8+DrVcMRwek5qu5mvh2KrZnmSpm5flYWzUy2UnnIyicDL3CZYC/r3Fjz6CeBYgZA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shell-dollars": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.1.tgz",
+ "integrity": "sha512-YryHem73PTxjCkuC4HONJWHsmrLyXmF7r+cCH36Ys3vuWsfAbwkbOwpyuPB4KXn+6fHaTUfz/B5BPp3iwzJwyA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shortcut-reference-image": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.1.tgz",
+ "integrity": "sha512-nUQ+4xB5hKZTCl9gvg7c+W1T3ddsnjgu4zwRza2Bn+21cKmUzx+z9dvlZ4aVuNGmxuWHbKI8/ZkKuB8Eu27vJw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shortcut-reference-link": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.2.tgz",
+ "integrity": "sha512-A6ZexZ6XyQ7fXebrj5WgW5FkSJ81GobjWyMFVmBxgxPd9GH2BkRsZ10aFSkQQvfKSrqbnOL2vrigGMgbiERRxA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-table-indentation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.1.tgz",
+ "integrity": "sha512-QrtT1GvJmAoNsWh+gmHFajFlM+ubm9rd3Cbz2OYPix8ZM6g907aIfG2NusJFXL9D8/CExQWYhlBvelFBbHgqbQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-ordered-list-marker-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.1.tgz",
+ "integrity": "sha512-LJICUZIxqHHi360EP90zbDP+2QQIVVgPGlz0AatuR9ifd7xqAzraQKxsQajAZpuOepZgjBMTOz9L9W0Znx7ujA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-ordered-list-marker-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.1.tgz",
+ "integrity": "sha512-P6fYui3MvuB21+6AYH8Lbe7SVZ2VQL+FVJUuDCBhe01bgx6SajGmQ/f4Iqt0gCHEAaKw7e2B7tdwd36ifbs1EA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-rule-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-1.0.1.tgz",
+ "integrity": "sha512-dzH+K6DcPIIMBq6LUQgE4dR9TiQGZrQOoULD7m0Y0lIb2EoR2FK5Zd4TgZg/LnvTs6fid37t0xFoaY4/lXV/5Q==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-strong-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.1.tgz",
+ "integrity": "sha512-+bwWKWAqDwqd21Vw+ndqVFh5V27Dp4MKhk9AUlKmcvgJYHuvQ8UfWQdpZcP218ps/4EbwTfyi33TaPyXqOTlXA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-cell-padding": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.1.tgz",
+ "integrity": "sha512-o3WwC9YysXbQKf0D5nvhhJPcLagqedLwGdifukdgyaKvuIQVbtWbNv1/UOdB3LL+D+2fUrwrCmnQ8J3E1r0lBw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-pipe-alignment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.1.tgz",
+ "integrity": "sha512-lYfK2gWGN45hYfAOZw5gscQ4uDaO9bJLp+H64jvrTQzBV+OCvB9kRQwI0oIrJAa4XMmipAZR+2XhjNSCfQ0fRA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-pipes": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.1.tgz",
+ "integrity": "sha512-VHfDRvcovLBl/cvSjwDoA0xRizdZU33A6F2qFD9A5hu1sDWgGxMLg5m2MOvFlRkUVxSwUv47cuD0/yxB4THYXQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-unordered-list-marker-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.1.tgz",
+ "integrity": "sha512-dHYD9cHM9ZJ7BKUZ1nEPGfLAHgUmYxccXtms1GSEM/uyUtR2SU/ao1RwZZ+LvacZFCNZ1yG2yKCJhGI/5U/GrA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-message-control": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-4.1.0.tgz",
+ "integrity": "sha512-e1dszks4YKY7hLAkhS2367jBjBpAfvi+kVgSN/tOFrdp3qxITjiNR5fOFnyYF8vvorkQ9uxlKJoZUOW8T7rKDg==",
+ "dev": true,
+ "requires": {
+ "mdast-comment-marker": "^1.0.0",
+ "unified-message-control": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remark-parse": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz",
+ "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==",
+ "dev": true,
+ "requires": {
+ "collapse-white-space": "^1.0.2",
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "is-word-character": "^1.0.0",
+ "markdown-escapes": "^1.0.0",
+ "parse-entities": "^1.0.2",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "trim": "0.0.1",
+ "trim-trailing-lines": "^1.0.0",
+ "unherit": "^1.0.4",
+ "unist-util-remove-position": "^1.0.0",
+ "vfile-location": "^2.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remark-preset-lint-markdown-style-guide": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.1.tgz",
+ "integrity": "sha512-Ao6fB63WuGtz1fa4rjoI+u1EOu21rWVGPmJlUKZlCICPPB6I815nJ52V0sLYjaw2cs+ZiXsXhdVinN7UpVgXcQ==",
+ "dev": true,
+ "requires": {
+ "remark-lint": "^6.0.0",
+ "remark-lint-blockquote-indentation": "^1.0.0",
+ "remark-lint-code-block-style": "^1.0.0",
+ "remark-lint-definition-case": "^1.0.0",
+ "remark-lint-definition-spacing": "^1.0.0",
+ "remark-lint-emphasis-marker": "^1.0.0",
+ "remark-lint-fenced-code-flag": "^1.0.0",
+ "remark-lint-fenced-code-marker": "^1.0.0",
+ "remark-lint-file-extension": "^1.0.0",
+ "remark-lint-final-definition": "^1.0.0",
+ "remark-lint-hard-break-spaces": "^1.0.0",
+ "remark-lint-heading-increment": "^1.0.0",
+ "remark-lint-heading-style": "^1.0.0",
+ "remark-lint-link-title-style": "^1.0.0",
+ "remark-lint-list-item-content-indent": "^1.0.0",
+ "remark-lint-list-item-indent": "^1.0.0",
+ "remark-lint-list-item-spacing": "^1.0.0",
+ "remark-lint-maximum-heading-length": "^1.0.0",
+ "remark-lint-maximum-line-length": "^1.0.0",
+ "remark-lint-no-auto-link-without-protocol": "^1.0.0",
+ "remark-lint-no-blockquote-without-marker": "^2.0.0",
+ "remark-lint-no-consecutive-blank-lines": "^1.0.0",
+ "remark-lint-no-duplicate-headings": "^1.0.0",
+ "remark-lint-no-emphasis-as-heading": "^1.0.0",
+ "remark-lint-no-file-name-articles": "^1.0.0",
+ "remark-lint-no-file-name-consecutive-dashes": "^1.0.0",
+ "remark-lint-no-file-name-irregular-characters": "^1.0.0",
+ "remark-lint-no-file-name-mixed-case": "^1.0.0",
+ "remark-lint-no-file-name-outer-dashes": "^1.0.0",
+ "remark-lint-no-heading-punctuation": "^1.0.0",
+ "remark-lint-no-inline-padding": "^1.0.0",
+ "remark-lint-no-literal-urls": "^1.0.0",
+ "remark-lint-no-multiple-toplevel-headings": "^1.0.0",
+ "remark-lint-no-shell-dollars": "^1.0.0",
+ "remark-lint-no-shortcut-reference-image": "^1.0.0",
+ "remark-lint-no-shortcut-reference-link": "^1.0.0",
+ "remark-lint-no-table-indentation": "^1.0.0",
+ "remark-lint-ordered-list-marker-style": "^1.0.0",
+ "remark-lint-ordered-list-marker-value": "^1.0.0",
+ "remark-lint-rule-style": "^1.0.0",
+ "remark-lint-strong-marker": "^1.0.0",
+ "remark-lint-table-cell-padding": "^1.0.0",
+ "remark-lint-table-pipe-alignment": "^1.0.0",
+ "remark-lint-table-pipes": "^1.0.0",
+ "remark-lint-unordered-list-marker-style": "^1.0.0"
+ }
+ },
+ "remark-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz",
+ "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==",
+ "dev": true,
+ "requires": {
+ "ccount": "^1.0.0",
+ "is-alphanumeric": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "longest-streak": "^2.0.1",
+ "markdown-escapes": "^1.0.0",
+ "markdown-table": "^1.1.0",
+ "mdast-util-compact": "^1.0.0",
+ "parse-entities": "^1.0.2",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "stringify-entities": "^1.0.1",
+ "unherit": "^1.0.4",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
+ "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
+ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.36.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
+ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "^1.0.0",
+ "onetime": "^1.0.0"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "revalidator": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz",
+ "integrity": "sha1-/yzEz3zHxjhaxxAXgnbm280Ddi8=",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz",
+ "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ }
+ }
+ },
+ "serve": {
+ "version": "6.5.8",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-6.5.8.tgz",
+ "integrity": "sha512-GZYlJz7f6E7Xq6xbg1rTSvQQV9x4v/yYB/sum6egzSBLa/mdk1PViDSX2JvL0Me83sxu3JpEpQELfakDKbGcrw==",
+ "dev": true,
+ "requires": {
+ "args": "4.0.0",
+ "basic-auth": "2.0.0",
+ "bluebird": "3.5.1",
+ "boxen": "1.3.0",
+ "chalk": "2.4.1",
+ "clipboardy": "1.2.3",
+ "dargs": "5.1.0",
+ "detect-port": "1.2.3",
+ "filesize": "3.6.1",
+ "fs-extra": "6.0.1",
+ "handlebars": "4.0.11",
+ "ip": "1.1.5",
+ "micro": "9.3.1",
+ "micro-compress": "1.0.0",
+ "mime-types": "2.1.18",
+ "node-version": "1.1.3",
+ "openssl-self-signed-certificate": "1.1.6",
+ "opn": "5.3.0",
+ "path-is-inside": "1.0.2",
+ "path-type": "3.0.0",
+ "send": "0.16.2",
+ "update-check": "1.5.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "dargs": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz",
+ "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
+ "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "shellsubstitute": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shellsubstitute/-/shellsubstitute-1.2.0.tgz",
+ "integrity": "sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
+ "dev": true
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "standard": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz",
+ "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==",
+ "dev": true,
+ "requires": {
+ "eslint": "~5.4.0",
+ "eslint-config-standard": "12.0.0",
+ "eslint-config-standard-jsx": "6.0.2",
+ "eslint-plugin-import": "~2.14.0",
+ "eslint-plugin-node": "~7.0.1",
+ "eslint-plugin-promise": "~4.0.0",
+ "eslint-plugin-react": "~7.11.1",
+ "eslint-plugin-standard": "~4.0.0",
+ "standard-engine": "~9.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "eslint": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz",
+ "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.0",
+ "babel-code-frame": "^6.26.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.2",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^5.2.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.11.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^4.0.3",
+ "text-table": "^0.2.0"
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "5.2.0",
+ "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
+ "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.1.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^5.5.2",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rxjs": {
+ "version": "5.5.12",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
+ "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ }
+ }
+ },
+ "standard-engine": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz",
+ "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==",
+ "dev": true,
+ "requires": {
+ "deglob": "^2.1.0",
+ "get-stdin": "^6.0.0",
+ "minimist": "^1.1.0",
+ "pkg-conf": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ }
+ }
+ },
+ "standard-markdown": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/standard-markdown/-/standard-markdown-5.0.0.tgz",
+ "integrity": "sha512-jgGyyMmZqOIYYAHs/ksEkGUa+bngJce2P4FygFIrb1WMkKmQL/RPgsI2njl02r6kiDzHPProOG9y4ABe20joCA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.1",
+ "commander": "^2.18.0",
+ "globby": "^8.0.1",
+ "lodash.flatten": "^4.4.0",
+ "lodash.range": "^3.2.0",
+ "ora": "^3.0.0",
+ "standard": "^12.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz",
+ "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globby": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+ "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "fast-glob": "^2.0.2",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "ora": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz",
+ "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "state-toggle": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz",
+ "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz",
+ "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "stream-splicer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "string": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz",
+ "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringify-entities": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
+ "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
+ "dev": true,
+ "requires": {
+ "character-entities-html4": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "sumchecker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
+ "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
+ "dev": true
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true,
+ "optional": true
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "table": {
+ "version": "4.0.3",
+ "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz",
+ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.0.1",
+ "ajv-keywords": "^3.0.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "tar": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.2.tgz",
+ "integrity": "sha512-BfkE9CciGGgDsATqkikUHrQrraBCO+ke/1f6SFAEMnxyyfN9lxC+nW1NFWMpqH865DhHIy9vQi682gk1X7friw==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "tar-fs": {
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
+ "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pump": "^1.0.0",
+ "tar-stream": "^1.1.2"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
+ "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
+ "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
+ "dev": true,
+ "requires": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.1.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "rimraf": "~2.2.6"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true
+ }
+ }
+ },
+ "tempfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+ "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "uuid": "^2.0.1"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "text-extensions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz",
+ "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.28",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
+ "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.1"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "to-vfile": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz",
+ "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "vfile": "^2.0.0",
+ "x-is-function": "^1.0.4"
+ }
+ },
+ "touch": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz",
+ "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=",
+ "dev": true,
+ "requires": {
+ "nopt": "~1.0.10"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true,
+ "optional": true
+ },
+ "traverse": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+ "dev": true
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "trim-off-newlines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+ "dev": true
+ },
+ "trim-trailing-lines": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz",
+ "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==",
+ "dev": true
+ },
+ "trough": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz",
+ "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "tslint": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz",
+ "integrity": "sha1-BTVocb7yOkNJBnNABvwYgza6gks=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.20.0",
+ "colors": "^1.1.2",
+ "diff": "^3.0.1",
+ "findup-sync": "~0.3.0",
+ "glob": "^7.1.1",
+ "optimist": "~0.6.0",
+ "resolve": "^1.1.7",
+ "tsutils": "^1.1.0",
+ "update-notifier": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ }
+ }
+ },
+ "tsutils": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz",
+ "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
+ "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz",
+ "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "unherit": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz",
+ "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unified": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+ "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
+ "dev": true,
+ "requires": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "trough": "^1.0.0",
+ "vfile": "^2.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "unified-args": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-4.0.0.tgz",
+ "integrity": "sha1-jZubitNHvrN/QwVipixNNhtCIg8=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.0",
+ "chokidar": "^1.5.1",
+ "minimist": "^1.2.0",
+ "text-table": "^0.2.0",
+ "unified-engine": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "unified-engine": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-4.0.1.tgz",
+ "integrity": "sha1-lpKql/1cTsNoiXeeElFL746GP8M=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.1",
+ "debug": "^2.2.0",
+ "fault": "^1.0.0",
+ "fn-name": "^2.0.1",
+ "glob": "^7.0.3",
+ "ignore": "^3.2.0",
+ "is-empty": "^1.0.0",
+ "is-hidden": "^1.0.1",
+ "is-object": "^1.0.1",
+ "js-yaml": "^3.6.1",
+ "load-plugin": "^2.0.0",
+ "parse-json": "^2.2.0",
+ "to-vfile": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile-reporter": "^4.0.0",
+ "vfile-statistics": "^1.1.0",
+ "x-is-function": "^1.0.4",
+ "x-is-string": "^0.1.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "unified-lint-rule": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.2.tgz",
+ "integrity": "sha512-WkqwMC1aijHE17W3Z1co7aTI+Dzo1jHdwhI66fTClU1yOTbzAsTqlOD6eeR/MI9235Y3nu2jMDcm8GCeq4gaLg==",
+ "dev": true,
+ "requires": {
+ "wrapped": "^1.0.1"
+ }
+ },
+ "unified-message-control": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-1.0.4.tgz",
+ "integrity": "sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==",
+ "dev": true,
+ "requires": {
+ "trim": "0.0.1",
+ "unist-util-visit": "^1.0.0",
+ "vfile-location": "^2.0.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "unist-util-generated": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.2.tgz",
+ "integrity": "sha512-1HcwiEO62dr0XWGT+abVK4f0aAm8Ik8N08c5nAYVmuSxfvpA9rCcNyX/le8xXj1pJK5nBrGlZefeWB6bN8Pstw==",
+ "dev": true
+ },
+ "unist-util-is": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz",
+ "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==",
+ "dev": true
+ },
+ "unist-util-modify-children": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz",
+ "integrity": "sha512-GRi04yhng1WqBf5RBzPkOtWAadcZS2gvuOgNn/cyJBYNxtTuyYqTKN0eg4rC1YJwGnzrqfRB3dSKm8cNCjNirg==",
+ "dev": true,
+ "requires": {
+ "array-iterate": "^1.0.0"
+ }
+ },
+ "unist-util-position": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.1.tgz",
+ "integrity": "sha512-05QfJDPI7PE1BIUtAxeSV+cDx21xP7+tUZgSval5CA7tr0pHBwybF7OnEa1dOFqg6BfYH/qiMUnWwWj+Frhlww==",
+ "dev": true
+ },
+ "unist-util-remove-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz",
+ "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==",
+ "dev": true,
+ "requires": {
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
+ "dev": true
+ },
+ "unist-util-visit": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.1.tgz",
+ "integrity": "sha512-0fdB9EQJU0tho5tK0VzOJzAQpPv2LyLZ030b10GxuzAWEfvd54mpY7BMjQ1L69k2YNvL+SvxRzH0yUIehOO8aA==",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^2.1.1"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "untildify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz",
+ "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "update-check": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.1.tgz",
+ "integrity": "sha512-M3rjq5KwSrWZrm2GVPIQIF+NXpIn5I9mIV67gGoydptQvzRjLp9ZbM6ctFJeNuaWSm5+mNP7aInELjSiLcIw6A==",
+ "dev": true,
+ "requires": {
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0"
+ }
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+ "dev": true,
+ "requires": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vfile": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
+ "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-message": "^1.0.0"
+ }
+ },
+ "vfile-location": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz",
+ "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==",
+ "dev": true
+ },
+ "vfile-message": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz",
+ "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==",
+ "dev": true,
+ "requires": {
+ "unist-util-stringify-position": "^1.1.1"
+ }
+ },
+ "vfile-reporter": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz",
+ "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=",
+ "dev": true,
+ "requires": {
+ "repeat-string": "^1.5.0",
+ "string-width": "^1.0.0",
+ "supports-color": "^4.1.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-statistics": "^1.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^2.0.0"
+ }
+ }
+ }
+ },
+ "vfile-statistics": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.1.tgz",
+ "integrity": "sha512-dxUM6IYvGChHuwMT3dseyU5BHprNRXzAV0OHx1A769lVGsTiT50kU7BbpRFV+IE6oWmU+PwHdsTKfXhnDIRIgQ==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "walk-sync": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz",
+ "integrity": "sha1-SCcoCvxC0OA1NnxKTjHurA0Tb3U=",
+ "dev": true,
+ "requires": {
+ "ensure-posix-path": "^1.0.0",
+ "matcher-collection": "^1.0.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webidl-conversions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz",
+ "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
+ "dev": true,
+ "optional": true
+ },
+ "whatwg-url-compat": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz",
+ "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tr46": "~0.0.1"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrapped": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz",
+ "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=",
+ "dev": true,
+ "requires": {
+ "co": "3.1.0",
+ "sliced": "^1.0.1"
+ },
+ "dependencies": {
+ "co": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
+ "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "x-is-function": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz",
+ "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=",
+ "dev": true
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
+ "dev": true
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ },
+ "xml-name-validator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+ "dev": true,
+ "optional": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
+ "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
+ "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
+ "dev": true,
+ "requires": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "lodash.assign": "^4.0.3",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.1",
+ "which-module": "^1.0.0",
+ "window-size": "^0.2.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^2.4.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
+ "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "lodash.assign": "^4.0.6"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/devel/electron4/files/package.json b/devel/electron4/files/package.json
new file mode 100644
index 000000000000..d5310212e388
--- /dev/null
+++ b/devel/electron4/files/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "electron",
+ "version": "4.2.12",
+ "repository": "https://github.com/electron/electron",
+ "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
+ "devDependencies": {
+ "aliasify": "^2.1.0",
+ "asar": "^0.11.0",
+ "browserify": "^13.1.0",
+ "check-for-leaks": "^1.0.2",
+ "clang-format": "^1.2.3",
+ "colors": "^1.1.2",
+ "dotenv-safe": "^4.0.4",
+ "dugite": "^1.45.0",
+ "electabul": "~0.0.4",
+ "electron-docs-linter": "^2.4.0",
+ "electron-typescript-definitions": "^2.1.1",
+ "eslint": "^5.6.0",
+ "eslint-config-standard": "^12.0.0",
+ "eslint-plugin-mocha": "^5.2.0",
+ "folder-hash": "^2.1.1",
+ "github": "^9.2.0",
+ "html-entities": "^1.2.1",
+ "husky": "^0.14.3",
+ "lint": "^1.1.2",
+ "minimist": "^1.2.0",
+ "node-fetch": "^2.1.2",
+ "nugget": "^2.0.1",
+ "octicons": "^7.3.0",
+ "recursive-readdir": "^2.2.2",
+ "remark-cli": "^4.0.0",
+ "remark-preset-lint-markdown-style-guide": "^2.1.1",
+ "request": "^2.88.0",
+ "semver": "^5.5.0",
+ "serve": "^6.5.8",
+ "standard-markdown": "^5.0.0",
+ "sumchecker": "^2.0.2",
+ "temp": "^0.8.3"
+ },
+ "private": true,
+ "scripts": {
+ "asar": "asar",
+ "browserify": "browserify",
+ "bump-version": "./script/bump-version.py",
+ "check-tls": "python ./script/tls.py",
+ "clang-format": "find atom/ brightray/ chromium_src/ -iname *.h -o -iname *.cc -o -iname *.mm | xargs clang-format -i",
+ "lint": "node ./script/lint.js && npm run lint:clang-format && npm run lint:docs",
+ "lint:js": "node ./script/lint.js --js",
+ "lint:clang-format": "python script/run-clang-format.py -r -c atom/ chromium_src/ brightray/ || (echo \"\\nCode not formatted correctly.\" && exit 1)",
+ "lint:cpp": "node ./script/lint.js --cc",
+ "lint:py": "node ./script/lint.js --py",
+ "lint:gn": "node ./script/lint.js --gn",
+ "lint:docs": "remark docs -qf && npm run lint:js-in-markdown && npm run create-typescript-definitions && npm run lint:docs-relative-links",
+ "lint:docs-relative-links": "python ./script/check-relative-doc-links.py",
+ "lint:js-in-markdown": "standard-markdown docs",
+ "create-api-json": "electron-docs-linter docs --outfile=electron-api.json",
+ "create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --in=electron-api.json --out=electron.d.ts",
+ "preinstall": "node -e 'process.exit(0)'",
+ "precommit": "python script/run-clang-format.py -r -c atom/ chromium_src/ brightray/ && node ./script/lint.js -c && remark docs -qf || (echo \"Code not formatted correctly.\" && exit 1)",
+ "prepack": "check-for-leaks",
+ "prepush": "check-for-leaks",
+ "repl": "node ./script/start.js --interactive",
+ "start": "node ./script/start.js",
+ "test": "node ./script/spec-runner.js electron/spec"
+ },
+ "license": "MIT",
+ "author": "Electron Community",
+ "keywords": [
+ "electron"
+ ],
+ "aliasify": {
+ "replacements": {
+ "@electron/internal/(.+)": "./lib/$1"
+ }
+ }
+}
diff --git a/devel/electron4/files/patch-BUILD.gn b/devel/electron4/files/patch-BUILD.gn
new file mode 100644
index 000000000000..4d7aaf7a0f36
--- /dev/null
+++ b/devel/electron4/files/patch-BUILD.gn
@@ -0,0 +1,87 @@
+--- BUILD.gn.orig 2019-03-15 06:36:52 UTC
++++ BUILD.gn
+@@ -354,7 +354,7 @@ group("gn_all") {
+ [ "//third_party/android_crazy_linker:android_crazy_linker_zip_fuzzer" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ deps += [
+ "//third_party/breakpad:breakpad_unittests",
+ "//third_party/breakpad:core-2-minidump",
+@@ -396,8 +396,6 @@ group("gn_all") {
+ "//net:disk_cache_memory_test",
+ "//net:quic_client",
+ "//net:quic_server",
+- "//sandbox/linux:chrome_sandbox",
+- "//sandbox/linux:sandbox_linux_unittests",
+ "//testing:empty_main",
+ ]
+
+@@ -454,10 +452,6 @@ group("gn_all") {
+ "//chrome/test/chromedriver:chromedriver",
+ "//chrome/test/chromedriver:chromedriver_tests",
+ "//components/sync:run_sync_testserver",
+- "//courgette:courgette",
+- "//courgette:courgette_fuzz",
+- "//courgette:courgette_minimal_tool",
+- "//courgette:courgette_unittests",
+ "//media/cast:generate_barcode_video",
+ "//media/cast:generate_timecode_audio",
+ "//net:crash_cache",
+@@ -513,10 +507,6 @@ group("gn_all") {
+ "//mojo:mojo_perftests",
+ "//services/service_manager/public/cpp",
+ "//testing/gmock:gmock_main",
+- "//third_party/breakpad:dump_syms($host_toolchain)",
+- "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+- "//third_party/breakpad:minidump_dump($host_toolchain)",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+
+ if (!is_android) {
+@@ -593,7 +583,7 @@ group("gn_all") {
+ host_os == "win") {
+ deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
+ }
+- } else if (!is_android && !is_ios && !is_fuchsia) {
++ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
+ deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+ }
+
+@@ -819,7 +809,6 @@ if (is_chromeos) {
+ "//ppapi/examples/video_decode",
+ "//sandbox/linux:chrome_sandbox",
+ "//sandbox/linux:sandbox_linux_unittests",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+
+ # Blocked on https://github.com/catapult-project/catapult/issues/2297
+ #"//third_party/catapult/telemetry:bitmaptools",
+@@ -942,7 +931,7 @@ if (!is_ios) {
+ ]
+ }
+
+- if (!is_win && !is_android) {
++ if (!is_win && !is_android && !is_bsd) {
+ data_deps +=
+ [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+@@ -951,7 +940,7 @@ if (!is_ios) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+@@ -1076,9 +1065,6 @@ group("chromium_builder_perf") {
+
+ if (is_win) {
+ data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
+- } else {
+- data_deps +=
+- [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+ if (is_win || is_android) {
+ data_deps += [
diff --git a/devel/electron4/files/patch-apps_ui_views_app__window__frame__view.cc b/devel/electron4/files/patch-apps_ui_views_app__window__frame__view.cc
new file mode 100644
index 000000000000..5807afb7f09c
--- /dev/null
+++ b/devel/electron4/files/patch-apps_ui_views_app__window__frame__view.cc
@@ -0,0 +1,11 @@
+--- apps/ui/views/app_window_frame_view.cc.orig 2019-03-15 06:36:53 UTC
++++ apps/ui/views/app_window_frame_view.cc
+@@ -132,7 +132,7 @@ gfx::Rect AppWindowFrameView::GetBoundsForClientView()
+ gfx::Rect AppWindowFrameView::GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ gfx::Rect window_bounds = client_bounds;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Get the difference between the widget's client area bounds and window
+ // bounds, and grow |window_bounds| by that amount.
+ gfx::Insets native_frame_insets =
diff --git a/devel/electron4/files/patch-ash_display_mirror__window__controller.cc b/devel/electron4/files/patch-ash_display_mirror__window__controller.cc
new file mode 100644
index 000000000000..eb173dbb11c9
--- /dev/null
+++ b/devel/electron4/files/patch-ash_display_mirror__window__controller.cc
@@ -0,0 +1,14 @@
+--- ash/display/mirror_window_controller.cc.orig 2019-03-15 06:36:54 UTC
++++ ash/display/mirror_window_controller.cc
+@@ -255,7 +255,11 @@ void MirrorWindowController::UpdateWindow(
+ return info.id() == iter->first;
+ }) == display_info_list.end()) {
+ CloseAndDeleteHost(iter->second, true);
++#if defined(__llvm__)
++ mirroring_host_info_map_.erase(iter++);
++#else
+ iter = mirroring_host_info_map_.erase(iter);
++#endif
+ } else {
+ ++iter;
+ }
diff --git a/devel/electron4/files/patch-base_BUILD.gn b/devel/electron4/files/patch-base_BUILD.gn
new file mode 100644
index 000000000000..0c88c218b6d1
--- /dev/null
+++ b/devel/electron4/files/patch-base_BUILD.gn
@@ -0,0 +1,67 @@
+--- base/BUILD.gn.orig 2019-03-16 09:15:20 UTC
++++ base/BUILD.gn
+@@ -1248,7 +1248,7 @@ jumbo_component("base") {
+ # Needed for <atomic> if using newer C++ library than sysroot, except if
+ # building inside the cros_sdk environment - use host_toolchain as a
+ # more robust check for this.
+- if ((is_android || (is_linux && !is_chromecast)) &&
++ if ((is_android || (is_linux && !is_chromecast) && !is_clang) &&
+ host_toolchain != "//build/toolchain/cros:host") {
+ libs += [ "atomic" ]
+ }
+@@ -1274,7 +1274,7 @@ jumbo_component("base") {
+ "allocator/allocator_shim_override_glibc_weak_symbols.h",
+ ]
+ deps += [ "//base/allocator:tcmalloc" ]
+- } else if (is_linux && use_allocator == "none") {
++ } else if ((is_linux && !is_bsd) && use_allocator == "none") {
+ sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
+ } else if (is_android && use_allocator == "none") {
+ sources += [
+@@ -1704,6 +1704,33 @@ jumbo_component("base") {
+ }
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "files/file_path_watcher_linux.cc",
++ "files/file_util_linux.cc",
++ "process/memory_linux.cc",
++ "process/process_linux.cc",
++ "process/process_handle_linux.cc",
++ "process/process_iterator_linux.cc",
++ "process/process_metrics_linux.cc",
++ "sys_info_linux.cc"
++ ]
++ sources += [
++ "files/file_path_watcher_kqueue.cc",
++ "files/file_path_watcher_kqueue.h",
++ "files/file_path_watcher_stub.cc",
++ "process/memory_stubs.cc",
++ "process/process_handle_freebsd.cc",
++ "process/process_iterator_freebsd.cc",
++ "process/process_metrics_freebsd.cc",
++ "sys_info_freebsd.cc",
++ ]
++ libs = [
++ "execinfo", # logging.cc
++ "kvm" # process_metrics_freebsd
++ ]
++ }
++
+ # iOS
+ if (is_ios) {
+ set_sources_assignment_filter([])
+@@ -2692,6 +2719,12 @@ test("base_unittests") {
+ "trace_event/trace_event_android_unittest.cc",
+ ]
+ set_sources_assignment_filter(sources_assignment_filter)
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "debug/proc_maps_linux_unittest.cc",
++ ]
+ }
+
+ if (is_win) {
diff --git a/devel/electron4/files/patch-base_allocator_allocator__shim.cc b/devel/electron4/files/patch-base_allocator_allocator__shim.cc
new file mode 100644
index 000000000000..e29579ece684
--- /dev/null
+++ b/devel/electron4/files/patch-base_allocator_allocator__shim.cc
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim.cc.orig 2019-03-15 06:36:56 UTC
++++ base/allocator/allocator_shim.cc
+@@ -69,7 +69,7 @@ inline const allocator::AllocatorDispatch* GetChainHea
+ // Unfortunately due to that bug NoBarrier_Load() is mistakenly fully
+ // barriered on Linux+Clang, and that causes visible perf regressons.
+ return reinterpret_cast<const allocator::AllocatorDispatch*>(
+-#if defined(OS_LINUX) && defined(__clang__)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(__clang__)
+ *static_cast<const volatile subtle::AtomicWord*>(&g_chain_head)
+ #else
+ subtle::NoBarrier_Load(&g_chain_head)
diff --git a/devel/electron4/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc b/devel/electron4/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
new file mode 100644
index 000000000000..ce0f933ab779
--- /dev/null
+++ b/devel/electron4/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
@@ -0,0 +1,77 @@
+--- base/allocator/allocator_shim_default_dispatch_to_glibc.cc.orig 2019-03-15 06:36:56 UTC
++++ base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+@@ -3,19 +3,28 @@
+ // found in the LICENSE file.
+
+ #include "base/allocator/allocator_shim.h"
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc_np.h>
+
+-#include <malloc.h>
+-
+ // This translation unit defines a default dispatch for the allocator shim which
+ // routes allocations to libc functions.
+-// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
++// The code here is strongly inspired from tcmalloc's override_glibc.h.
+
+ extern "C" {
+-void* __libc_malloc(size_t size);
+-void* __libc_calloc(size_t n, size_t size);
+-void* __libc_realloc(void* address, size_t size);
+-void* __libc_memalign(size_t alignment, size_t size);
+-void __libc_free(void* ptr);
++void* __malloc(size_t size);
++void* __calloc(size_t n, size_t size);
++void* __realloc(void* address, size_t size);
++void* __memalign(size_t alignment, size_t size) {
++ void *ret;
++ if (__posix_memalign(&ret, alignment, size) != 0) {
++ return nullptr;
++ } else {
++ return ret;
++ }
++}
++int __posix_memalign(void **ptr, size_t alignment, size_t size);
++void __free(void* ptr);
+ } // extern "C"
+
+ namespace {
+@@ -23,32 +32,32 @@ namespace {
+ using base::allocator::AllocatorDispatch;
+
+ void* GlibcMalloc(const AllocatorDispatch*, size_t size, void* context) {
+- return __libc_malloc(size);
++ return __malloc(size);
+ }
+
+ void* GlibcCalloc(const AllocatorDispatch*,
+ size_t n,
+ size_t size,
+ void* context) {
+- return __libc_calloc(n, size);
++ return __calloc(n, size);
+ }
+
+ void* GlibcRealloc(const AllocatorDispatch*,
+ void* address,
+ size_t size,
+ void* context) {
+- return __libc_realloc(address, size);
++ return __realloc(address, size);
+ }
+
+ void* GlibcMemalign(const AllocatorDispatch*,
+ size_t alignment,
+ size_t size,
+ void* context) {
+- return __libc_memalign(alignment, size);
++ return __memalign(alignment, size);
+ }
+
+ void GlibcFree(const AllocatorDispatch*, void* address, void* context) {
+- __libc_free(address);
++ __free(address);
+ }
+
+ size_t GlibcGetSizeEstimate(const AllocatorDispatch*,
diff --git a/devel/electron4/files/patch-base_allocator_allocator__shim__override__libc__symbols.h b/devel/electron4/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
new file mode 100644
index 000000000000..a5372f0f8258
--- /dev/null
+++ b/devel/electron4/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim_override_libc_symbols.h.orig 2019-03-15 06:25:27 UTC
++++ base/allocator/allocator_shim_override_libc_symbols.h
+@@ -10,7 +10,7 @@
+ #endif
+ #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_LIBC_SYMBOLS_H_
+
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "base/allocator/allocator_shim_internals.h"
+
diff --git a/devel/electron4/files/patch-base_allocator_allocator__shim__unittest.cc b/devel/electron4/files/patch-base_allocator_allocator__shim__unittest.cc
new file mode 100644
index 000000000000..2ffbbaff5675
--- /dev/null
+++ b/devel/electron4/files/patch-base_allocator_allocator__shim__unittest.cc
@@ -0,0 +1,36 @@
+--- base/allocator/allocator_shim_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/allocator/allocator_shim_unittest.cc
+@@ -294,7 +294,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_size[61], 1u);
+ #endif // !OS_WIN
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void* memalign_ptr = memalign(128, 53);
+ ASSERT_NE(nullptr, memalign_ptr);
+ ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(memalign_ptr) % 128);
+@@ -307,7 +307,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_alignment[kPageSize], 1u);
+ // pvalloc rounds the size up to the next page.
+ ASSERT_GE(aligned_allocs_intercepted_by_size[kPageSize], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ char* realloc_ptr = static_cast<char*>(malloc(10));
+ strcpy(realloc_ptr, "foobar");
+@@ -323,13 +323,13 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ free(zero_alloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(zero_alloc_ptr)], 1u);
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ free(memalign_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
+
+ free(pvalloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ #if !defined(OS_WIN)
+ free(posix_memalign_ptr);
diff --git a/devel/electron4/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc b/devel/electron4/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc
new file mode 100644
index 000000000000..51053e2ba725
--- /dev/null
+++ b/devel/electron4/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc
@@ -0,0 +1,11 @@
+--- base/allocator/partition_allocator/partition_alloc_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/allocator/partition_allocator/partition_alloc_unittest.cc
+@@ -1305,7 +1305,7 @@ TEST_F(PartitionAllocTest, LostFreePagesBug) {
+ #if !defined(OS_WIN) && \
+ (!defined(ARCH_CPU_64_BITS) || \
+ (defined(OS_POSIX) && \
+- !(defined(OS_FUCHSIA) || defined(OS_MACOSX) || defined(OS_ANDROID))))
++ !(defined(OS_FUCHSIA) || defined(OS_MACOSX) || defined(OS_ANDROID) || defined(OS_BSD))))
+
+ // The following four tests wrap a called function in an expect death statement
+ // to perform their test, because they are non-hermetic. Specifically they are
diff --git a/devel/electron4/files/patch-base_debug_debugger__posix.cc b/devel/electron4/files/patch-base_debug_debugger__posix.cc
new file mode 100644
index 000000000000..c54dbd19e7b0
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_debugger__posix.cc
@@ -0,0 +1,57 @@
+--- base/debug/debugger_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/debug/debugger_posix.cc
+@@ -84,7 +84,7 @@ bool BeingDebugged() {
+ KERN_PROC,
+ KERN_PROC_PID,
+ getpid()
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ , sizeof(struct kinfo_proc),
+ 0
+ #endif
+@@ -92,33 +92,36 @@ bool BeingDebugged() {
+
+ // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
+ // binary interfaces may change.
+- struct kinfo_proc info;
+- size_t info_size = sizeof(info);
++ struct kinfo_proc *info;
++ size_t info_size;
+
+-#if defined(OS_OPENBSD)
+ if (sysctl(mib, arraysize(mib), NULL, &info_size, NULL, 0) < 0)
+ return -1;
+
++ info = (struct kinfo_proc *)malloc(info_size);
++
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+-#endif
+
+- int sysctl_result = sysctl(mib, arraysize(mib), &info, &info_size, NULL, 0);
++ int sysctl_result = sysctl(mib, arraysize(mib), info, &info_size, NULL, 0);
+ DCHECK_EQ(sysctl_result, 0);
+ if (sysctl_result != 0) {
+ is_set = true;
+ being_debugged = false;
+- return being_debugged;
++ goto out;
+ }
+
+ // This process is being debugged if the P_TRACED flag is set.
+ is_set = true;
+ #if defined(OS_FREEBSD)
+- being_debugged = (info.ki_flag & P_TRACED) != 0;
++ being_debugged = (info->ki_flag & P_TRACED) != 0;
+ #elif defined(OS_BSD)
+- being_debugged = (info.p_flag & P_TRACED) != 0;
++ being_debugged = (info->p_flag & P_TRACED) != 0;
+ #else
+- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
++ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0;
+ #endif
++
++out:
++ free(info);
+ return being_debugged;
+ }
+
diff --git a/devel/electron4/files/patch-base_debug_elf__reader__linux.cc b/devel/electron4/files/patch-base_debug_elf__reader__linux.cc
new file mode 100644
index 000000000000..6bffb4a0c249
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_elf__reader__linux.cc
@@ -0,0 +1,13 @@
+--- base/debug/elf_reader_linux.cc.orig 2019-03-15 06:36:56 UTC
++++ base/debug/elf_reader_linux.cc
+@@ -41,8 +41,10 @@ Optional<std::string> ElfSegmentBuildIDNoteAsString(co
+ const void* section_end = segment.data() + segment.size_bytes();
+ const Nhdr* note_header = reinterpret_cast<const Nhdr*>(segment.data());
+ while (note_header < section_end) {
++#if !defined(OS_BSD)
+ if (note_header->n_type == NT_GNU_BUILD_ID)
+ break;
++#endif
+ note_header = reinterpret_cast<const Nhdr*>(
+ reinterpret_cast<const char*>(note_header) + sizeof(Nhdr) +
+ bits::Align(note_header->n_namesz, 4) +
diff --git a/devel/electron4/files/patch-base_debug_proc__maps__linux.cc b/devel/electron4/files/patch-base_debug_proc__maps__linux.cc
new file mode 100644
index 000000000000..146cc0a07cc0
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_proc__maps__linux.cc
@@ -0,0 +1,11 @@
+--- base/debug/proc_maps_linux.cc.orig 2019-03-15 06:25:27 UTC
++++ base/debug/proc_maps_linux.cc
+@@ -12,7 +12,7 @@
+ #include "base/strings/string_split.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_ANDROID)
+ #include <inttypes.h>
+ #endif
+
diff --git a/devel/electron4/files/patch-base_debug_stack__trace.h b/devel/electron4/files/patch-base_debug_stack__trace.h
new file mode 100644
index 000000000000..6caa0f79f328
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_stack__trace.h
@@ -0,0 +1,10 @@
+--- base/debug/stack_trace.h.orig 2019-03-15 06:36:56 UTC
++++ base/debug/stack_trace.h
+@@ -16,6 +16,7 @@
+ #include "build/build_config.h"
+
+ #if defined(OS_POSIX)
++#include <sys/stdint.h>
+ #include <unistd.h>
+ #endif
+
diff --git a/devel/electron4/files/patch-base_debug_stack__trace__posix.cc b/devel/electron4/files/patch-base_debug_stack__trace__posix.cc
new file mode 100644
index 000000000000..802a2f70a991
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_stack__trace__posix.cc
@@ -0,0 +1,40 @@
+--- base/debug/stack_trace_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/debug/stack_trace_posix.cc
+@@ -35,7 +35,7 @@
+ #include <AvailabilityMacros.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/debug/proc_maps_linux.h"
+ #endif
+
+@@ -646,6 +646,11 @@ class SandboxSymbolizeHelper {
+ // for the modules that are loaded in the current process.
+ // Returns true on success.
+ bool CacheMemoryRegions() {
++#if defined(OS_BSD)
++ // TODO (rene) avoid link error, implement something?
++ NOTIMPLEMENTED();
++ return false;
++#else
+ // Reads /proc/self/maps.
+ std::string contents;
+ if (!ReadProcMaps(&contents)) {
+@@ -663,6 +668,7 @@ class SandboxSymbolizeHelper {
+
+ is_initialized_ = true;
+ return true;
++#endif
+ }
+
+ // Opens all object files and caches their file descriptors.
+@@ -800,7 +806,7 @@ StackTrace::StackTrace(size_t count) {
+ // NOTE: This code MUST be async-signal safe (it's used by in-process
+ // stack dumping signal handler). NO malloc or stdio is allowed here.
+
+-#if !defined(__UCLIBC__) && !defined(_AIX)
++#if !defined(__UCLIBC__) && !defined(_AIX) && !defined(OS_BSD)
+ count = std::min(arraysize(trace_), count);
+
+ // Though the backtrace API man page does not list any possible negative
diff --git a/devel/electron4/files/patch-base_debug_thread__heap__usage__tracker.cc b/devel/electron4/files/patch-base_debug_thread__heap__usage__tracker.cc
new file mode 100644
index 000000000000..cb6de6913b80
--- /dev/null
+++ b/devel/electron4/files/patch-base_debug_thread__heap__usage__tracker.cc
@@ -0,0 +1,15 @@
+--- base/debug/thread_heap_usage_tracker.cc.orig 2019-03-15 06:36:56 UTC
++++ base/debug/thread_heap_usage_tracker.cc
+@@ -17,10 +17,12 @@
+ #include "base/threading/thread_local_storage.h"
+ #include "build/build_config.h"
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX) || defined(OS_IOS)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
++#endif
+ #endif
+
+ namespace base {
diff --git a/devel/electron4/files/patch-base_files_file__path__unittest.cc b/devel/electron4/files/patch-base_files_file__path__unittest.cc
new file mode 100644
index 000000000000..69caeee666b7
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_file__path__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/files/file_path_unittest.cc
+@@ -1136,7 +1136,7 @@ TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe)
+ "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
+ };
+
+-#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX)
++#if !defined(SYSTEM_NATIVE_UTF8) && (defined(OS_LINUX) || defined(OS_BSD))
+ ScopedLocale locale("en_US.UTF-8");
+ #endif
+
diff --git a/devel/electron4/files/patch-base_files_file__path__watcher__kqueue.h b/devel/electron4/files/patch-base_files_file__path__watcher__kqueue.h
new file mode 100644
index 000000000000..ae6e9f89fd84
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_file__path__watcher__kqueue.h
@@ -0,0 +1,13 @@
+--- base/files/file_path_watcher_kqueue.h.orig 2019-03-15 06:25:27 UTC
++++ base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,10 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
+ #include <sys/event.h>
+
+ #include <memory>
diff --git a/devel/electron4/files/patch-base_files_file__path__watcher__stub.cc b/devel/electron4/files/patch-base_files_file__path__watcher__stub.cc
new file mode 100644
index 000000000000..f07d136744eb
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_file__path__watcher__stub.cc
@@ -0,0 +1,51 @@
+--- base/files/file_path_watcher_stub.cc.orig 2019-03-15 06:25:27 UTC
++++ base/files/file_path_watcher_stub.cc
+@@ -1,14 +1,15 @@
+-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
++// Copyright 2014 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-// This file exists for Unix systems which don't have the inotify headers, and
+-// thus cannot build file_watcher_inotify.cc
+
+-#include "base/files/file_path_watcher.h"
++#include <memory>
+
++#include "base/files/file_path_watcher.h"
++#include "base/files/file_path_watcher_kqueue.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
++#include "build/build_config.h"
+
+ namespace base {
+
+@@ -22,12 +23,26 @@ class FilePathWatcherImpl : public FilePathWatcher::Pl
+ bool Watch(const FilePath& path,
+ bool recursive,
+ const FilePathWatcher::Callback& callback) override {
+- return false;
++ DCHECK(!impl_.get());
++ if (recursive) {
++ if (!FilePathWatcher::RecursiveWatchAvailable())
++ return false;
++ } else {
++ impl_ = std::make_unique<FilePathWatcherKQueue>();
++ }
++ DCHECK(impl_.get());
++ return impl_->Watch(path, recursive, callback);
+ }
+
+- void Cancel() override {}
++ void Cancel() override {
++ if (impl_.get())
++ impl_->Cancel();
++ set_cancelled();
++ }
+
+ private:
++ std::unique_ptr<PlatformDelegate> impl_;
++
+ DISALLOW_COPY_AND_ASSIGN(FilePathWatcherImpl);
+ };
+
diff --git a/devel/electron4/files/patch-base_files_file__path__watcher__unittest.cc b/devel/electron4/files/patch-base_files_file__path__watcher__unittest.cc
new file mode 100644
index 000000000000..a8284c603a85
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_file__path__watcher__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/files/file_path_watcher_unittest.cc
+@@ -438,7 +438,7 @@ TEST_F(FilePathWatcherTest, WatchDirectory) {
+ VLOG(1) << "Waiting for file1 creation";
+ ASSERT_TRUE(WaitForEvents());
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Mac implementation does not detect files modified in a directory.
+ ASSERT_TRUE(WriteFile(file1, "content v2"));
+ VLOG(1) << "Waiting for file1 modification";
diff --git a/devel/electron4/files/patch-base_files_file__util.h b/devel/electron4/files/patch-base_files_file__util.h
new file mode 100644
index 000000000000..77b900b289a8
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_file__util.h
@@ -0,0 +1,11 @@
+--- base/files/file_util.h.orig 2019-03-15 06:36:56 UTC
++++ base/files/file_util.h
+@@ -445,7 +445,7 @@ BASE_EXPORT bool VerifyPathControlledByAdmin(const bas
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ BASE_EXPORT int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron4/files/patch-base_files_memory__mapped__file__posix.cc b/devel/electron4/files/patch-base_files_memory__mapped__file__posix.cc
new file mode 100644
index 000000000000..50b78a85ece7
--- /dev/null
+++ b/devel/electron4/files/patch-base_files_memory__mapped__file__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/memory_mapped_file_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/files/memory_mapped_file_posix.cc
+@@ -110,6 +110,8 @@ bool MemoryMappedFile::MapFileRegionToMemory(
+ // Only Android API>=21 supports the fallocate call. Older versions need
+ // to manually extend the file by writing zeros at block intervals.
+ do_manual_extension = true;
++#elif defined(OS_BSD)
++ do_manual_extension = true;
+ #elif defined(OS_MACOSX)
+ // MacOS doesn't support fallocate even though their new APFS filesystem
+ // does support sparse files. It does, however, have the functionality
diff --git a/devel/electron4/files/patch-base_i18n_icu__util.cc b/devel/electron4/files/patch-base_i18n_icu__util.cc
new file mode 100644
index 000000000000..8182486e67e6
--- /dev/null
+++ b/devel/electron4/files/patch-base_i18n_icu__util.cc
@@ -0,0 +1,20 @@
+--- base/i18n/icu_util.cc.orig 2019-03-15 06:36:56 UTC
++++ base/i18n/icu_util.cc
+@@ -20,7 +20,7 @@
+ #include "build/build_config.h"
+ #include "third_party/icu/source/common/unicode/putil.h"
+ #include "third_party/icu/source/common/unicode/udata.h"
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
++#if (defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
+ #include "third_party/icu/source/i18n/unicode/timezone.h"
+ #endif
+
+@@ -315,7 +315,7 @@ bool InitializeICU() {
+ // TODO(jungshik): Some callers do not care about tz at all. If necessary,
+ // add a boolean argument to this function to init'd the default tz only
+ // when requested.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (result)
+ std::unique_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
+ #endif
diff --git a/devel/electron4/files/patch-base_linux__util.cc b/devel/electron4/files/patch-base_linux__util.cc
new file mode 100644
index 000000000000..5f24914ba132
--- /dev/null
+++ b/devel/electron4/files/patch-base_linux__util.cc
@@ -0,0 +1,18 @@
+--- base/linux_util.cc.orig 2019-03-15 06:36:56 UTC
++++ base/linux_util.cc
+@@ -111,12 +111,14 @@ char g_linux_distro[kDistroSize] =
+ "CrOS";
+ #elif defined(OS_ANDROID)
+ "Android";
++#elif defined(OS_BSD)
++ "BSD";
+ #else // if defined(OS_LINUX)
+ "Unknown";
+ #endif
+
+ std::string GetLinuxDistro() {
+-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ return g_linux_distro;
+ #elif defined(OS_LINUX)
+ LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
diff --git a/devel/electron4/files/patch-base_logging__unittest.cc b/devel/electron4/files/patch-base_logging__unittest.cc
new file mode 100644
index 000000000000..e7361e177307
--- /dev/null
+++ b/devel/electron4/files/patch-base_logging__unittest.cc
@@ -0,0 +1,11 @@
+--- base/logging_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/logging_unittest.cc
+@@ -420,7 +420,7 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
+ // need the arch-specific boilerplate below, which is inspired by breakpad.
+ // At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
+ uintptr_t crash_addr = 0;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
+ #else // OS_POSIX && !OS_MACOSX
+ ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
diff --git a/devel/electron4/files/patch-base_native__library__posix.cc b/devel/electron4/files/patch-base_native__library__posix.cc
new file mode 100644
index 000000000000..97c5380af358
--- /dev/null
+++ b/devel/electron4/files/patch-base_native__library__posix.cc
@@ -0,0 +1,11 @@
+--- base/native_library_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/native_library_posix.cc
+@@ -29,7 +29,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
+ // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
+ // and http://crbug.com/40794.
+ int flags = RTLD_LAZY;
+-#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND)
++#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND) || defined(OS_BSD)
+ // Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
+ // further investigation, as it might vary across versions. Crash here to
+ // warn developers that they're trying to rely on uncertain behavior.
diff --git a/devel/electron4/files/patch-base_native__library__unittest.cc b/devel/electron4/files/patch-base_native__library__unittest.cc
new file mode 100644
index 000000000000..6cca3ee8f911
--- /dev/null
+++ b/devel/electron4/files/patch-base_native__library__unittest.cc
@@ -0,0 +1,11 @@
+--- base/native_library_unittest.cc.orig 2019-03-15 06:25:27 UTC
++++ base/native_library_unittest.cc
+@@ -120,7 +120,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
+ // Android dlopen() requires further investigation, as it might vary across
+ // versions with respect to symbol resolution scope.
+ // TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
+-#if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
++#if !defined(OS_ANDROID) && !defined(OS_BSD) && !defined(THREAD_SANITIZER) && \
+ !defined(MEMORY_SANITIZER)
+
+ // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
diff --git a/devel/electron4/files/patch-base_posix_unix__domain__socket.cc b/devel/electron4/files/patch-base_posix_unix__domain__socket.cc
new file mode 100644
index 000000000000..68b77e9b98a7
--- /dev/null
+++ b/devel/electron4/files/patch-base_posix_unix__domain__socket.cc
@@ -0,0 +1,49 @@
+--- base/posix/unix_domain_socket.cc.orig 2019-03-15 06:25:27 UTC
++++ base/posix/unix_domain_socket.cc
+@@ -5,7 +5,10 @@
+ #include "base/posix/unix_domain_socket.h"
+
+ #include <errno.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/ucred.h>
+ #if !defined(OS_NACL_NONSFI)
+ #include <sys/un.h>
+ #endif
+@@ -28,6 +31,14 @@ namespace base {
+
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+
++#ifndef SCM_CREDENTIALS
++# define SCM_CREDENTIALS 0x9001
++#endif
++
++#ifndef SO_PASSCRED
++# define SO_PASSCRED 0x9002
++#endif
++
+ #if !defined(OS_NACL_NONSFI)
+ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+ int raw_socks[2];
+@@ -150,7 +161,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ #if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ // The PNaCl toolchain for Non-SFI binary build and macOS do not support
+ // ucred. macOS supports xucred, but this structure is insufficient.
+- + CMSG_SPACE(sizeof(struct ucred))
++ + CMSG_SPACE(sizeof(struct cmsgcred))
+ #endif // OS_NACL_NONSFI or OS_MACOSX
+ ;
+ char control_buffer[kControlBufferSize];
+@@ -180,9 +191,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ // SCM_CREDENTIALS.
+ if (cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
+- DCHECK_EQ(payload_len, sizeof(struct ucred));
++ DCHECK_EQ(payload_len, sizeof(struct cmsgcred));
+ DCHECK_EQ(pid, -1);
+- pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
++ pid = getpid();
+ }
+ #endif // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ }
diff --git a/devel/electron4/files/patch-base_posix_unix__domain__socket__unittest.cc b/devel/electron4/files/patch-base_posix_unix__domain__socket__unittest.cc
new file mode 100644
index 000000000000..c5c160fb4aaa
--- /dev/null
+++ b/devel/electron4/files/patch-base_posix_unix__domain__socket__unittest.cc
@@ -0,0 +1,12 @@
+--- base/posix/unix_domain_socket_unittest.cc.orig 2019-03-15 06:25:27 UTC
++++ base/posix/unix_domain_socket_unittest.cc
+@@ -8,6 +8,9 @@
+ #include <stdint.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
+ #include <unistd.h>
+
+ #include "base/bind.h"
diff --git a/devel/electron4/files/patch-base_process_internal__linux.cc b/devel/electron4/files/patch-base_process_internal__linux.cc
new file mode 100644
index 000000000000..6e94da56120c
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_internal__linux.cc
@@ -0,0 +1,16 @@
+--- base/process/internal_linux.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/internal_linux.cc
+@@ -60,10 +60,13 @@ bool ReadProcFile(const FilePath& file, std::string* b
+ // Synchronously reading files in /proc is safe.
+ ThreadRestrictions::ScopedAllowIO allow_io;
+
++#if !defined(OS_BSD)
+ if (!ReadFileToString(file, buffer)) {
+ DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
+ return false;
+ }
++#endif
++
+ return !buffer->empty();
+ }
+
diff --git a/devel/electron4/files/patch-base_process_internal__linux.h b/devel/electron4/files/patch-base_process_internal__linux.h
new file mode 100644
index 000000000000..ef05a5c8cceb
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_internal__linux.h
@@ -0,0 +1,11 @@
+--- base/process/internal_linux.h.orig 2019-03-15 06:25:27 UTC
++++ base/process/internal_linux.h
+@@ -14,6 +14,8 @@
+
+ #include "base/files/file_path.h"
+
++#include <unistd.h> /* pid_t */
++
+ namespace base {
+
+ class Time;
diff --git a/devel/electron4/files/patch-base_process_kill.h b/devel/electron4/files/patch-base_process_kill.h
new file mode 100644
index 000000000000..8997d5f538c9
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_kill.h
@@ -0,0 +1,11 @@
+--- base/process/kill.h.orig 2019-03-15 06:25:27 UTC
++++ base/process/kill.h
+@@ -111,7 +111,7 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
+ BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
+ ProcessHandle handle, int* exit_code);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Spawns a thread to wait asynchronously for the child |process| to exit
+ // and then reaps it.
+ BASE_EXPORT void EnsureProcessGetsReaped(Process process);
diff --git a/devel/electron4/files/patch-base_process_kill__posix.cc b/devel/electron4/files/patch-base_process_kill__posix.cc
new file mode 100644
index 000000000000..b1cdcc21fc3e
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_kill__posix.cc
@@ -0,0 +1,11 @@
+--- base/process/kill_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/kill_posix.cc
+@@ -167,7 +167,7 @@ void EnsureProcessTerminated(Process process) {
+ 0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void EnsureProcessGetsReaped(Process process) {
+ DCHECK(!process.is_current());
+
diff --git a/devel/electron4/files/patch-base_process_launch.cc b/devel/electron4/files/patch-base_process_launch.cc
new file mode 100644
index 000000000000..81924414c9a3
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_launch.cc
@@ -0,0 +1,11 @@
+--- base/process/launch.cc.orig 2019-03-15 06:25:27 UTC
++++ base/process/launch.cc
+@@ -15,7 +15,7 @@ LaunchOptions::~LaunchOptions() = default;
+
+ LaunchOptions LaunchOptionsForTest() {
+ LaunchOptions options;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // To prevent accidental privilege sharing to an untrusted child, processes
+ // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
+ // new child will be used for testing only.
diff --git a/devel/electron4/files/patch-base_process_launch.h b/devel/electron4/files/patch-base_process_launch.h
new file mode 100644
index 000000000000..af0e894b664a
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_launch.h
@@ -0,0 +1,20 @@
+--- base/process/launch.h.orig 2019-03-16 09:15:20 UTC
++++ base/process/launch.h
+@@ -171,7 +171,7 @@ struct BASE_EXPORT LaunchOptions {
+ FileHandleMappingVector fds_to_remap;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If non-zero, start the process using clone(), using flags as provided.
+ // Unlike in clone, clone_flags may not contain a custom termination signal
+ // that is sent to the parent when the child dies. The termination signal will
+@@ -184,7 +184,7 @@ struct BASE_EXPORT LaunchOptions {
+
+ // Sets parent process death signal to SIGKILL.
+ bool kill_on_parent_death = false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ // If valid, launches the application in that job object.
diff --git a/devel/electron4/files/patch-base_process_launch__posix.cc b/devel/electron4/files/patch-base_process_launch__posix.cc
new file mode 100644
index 000000000000..b0e4edf20c92
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_launch__posix.cc
@@ -0,0 +1,10 @@
+--- base/process/launch_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/launch_posix.cc
+@@ -65,6 +65,7 @@
+ #include "base/feature_list.h"
+ #else
+ extern char** environ;
++#pragma weak environ
+ #endif
+
+ namespace base {
diff --git a/devel/electron4/files/patch-base_process_memory.cc b/devel/electron4/files/patch-base_process_memory.cc
new file mode 100644
index 000000000000..5bab682d55c1
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_memory.cc
@@ -0,0 +1,20 @@
+--- base/process/memory.cc.orig 2019-03-15 06:25:27 UTC
++++ base/process/memory.cc
+@@ -10,7 +10,7 @@
+ namespace base {
+
+ // Defined in memory_win.cc for Windows.
+-#if !defined(OS_WIN)
++#if !defined(OS_WIN) && !defined(OS_BSD)
+
+ namespace {
+
+@@ -31,7 +31,7 @@ void TerminateBecauseOutOfMemory(size_t size) {
+ #endif
+
+ // Defined in memory_mac.mm for Mac.
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+ const size_t alloc_size = num_items * size;
diff --git a/devel/electron4/files/patch-base_process_memory.h b/devel/electron4/files/patch-base_process_memory.h
new file mode 100644
index 000000000000..803a731c3231
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_memory.h
@@ -0,0 +1,11 @@
+--- base/process/memory.h.orig 2019-03-15 06:25:27 UTC
++++ base/process/memory.h
+@@ -32,7 +32,7 @@ BASE_EXPORT void EnableTerminationOnOutOfMemory();
+ // Crash reporting classifies such crashes as OOM.
+ BASE_EXPORT void TerminateBecauseOutOfMemory(size_t size);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ BASE_EXPORT extern size_t g_oom_size;
+
+ // The maximum allowed value for the OOM score.
diff --git a/devel/electron4/files/patch-base_process_memory__unittest.cc b/devel/electron4/files/patch-base_process_memory__unittest.cc
new file mode 100644
index 000000000000..ee68a2c14619
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_memory__unittest.cc
@@ -0,0 +1,18 @@
+--- base/process/memory_unittest.cc.orig 2019-03-15 06:25:27 UTC
++++ base/process/memory_unittest.cc
+@@ -104,7 +104,7 @@ TEST(MemoryTest, AllocatorShimWorking) {
+ // OpenBSD does not support these tests. Don't test these on ASan/TSan/MSan
+ // configurations: only test the real allocator.
+ // Windows only supports these tests with the allocator shim in place.
+-#if !defined(OS_OPENBSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
++#if !defined(OS_BSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
+ !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+
+ namespace {
+@@ -529,5 +529,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
+ EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
+ EXPECT_TRUE(value_ == nullptr);
+ }
+-#endif // !defined(OS_OPENBSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
++#endif // !defined(OS_BSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
+ // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/devel/electron4/files/patch-base_process_process__handle.cc b/devel/electron4/files/patch-base_process_process__handle.cc
new file mode 100644
index 000000000000..03dace3a6deb
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__handle.cc
@@ -0,0 +1,11 @@
+--- base/process/process_handle.cc.orig 2019-03-15 06:25:28 UTC
++++ base/process/process_handle.cc
+@@ -39,7 +39,7 @@ uint32_t GetUniqueIdForProcess() {
+ return g_unique_id;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
+ g_unique_id = MangleProcessId(pid_outside_of_namespace);
diff --git a/devel/electron4/files/patch-base_process_process__handle.h b/devel/electron4/files/patch-base_process_process__handle.h
new file mode 100644
index 000000000000..48af332eace5
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__handle.h
@@ -0,0 +1,11 @@
+--- base/process/process_handle.h.orig 2019-03-15 06:25:28 UTC
++++ base/process/process_handle.h
+@@ -64,7 +64,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
+ // a process's PID.
+ BASE_EXPORT uint32_t GetUniqueIdForProcess();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // When a process is started in a different PID namespace from the browser
+ // process, this function must be called with the process's PID in the browser's
+ // PID namespace in order to initialize its unique ID. Not thread safe.
diff --git a/devel/electron4/files/patch-base_process_process__handle__freebsd.cc b/devel/electron4/files/patch-base_process_process__handle__freebsd.cc
new file mode 100644
index 000000000000..28fa6621f166
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__handle__freebsd.cc
@@ -0,0 +1,17 @@
+--- base/process/process_handle_freebsd.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/process_handle_freebsd.cc
+@@ -16,10 +16,13 @@ namespace base {
+
+ ProcessId GetParentProcessId(ProcessHandle process) {
+ struct kinfo_proc info;
+- size_t length;
++ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
+
+ if (sysctl(mib, arraysize(mib), &info, &length, NULL, 0) < 0)
++ return -1;
++
++ if (length < sizeof(struct kinfo_proc))
+ return -1;
+
+ return info.ki_ppid;
diff --git a/devel/electron4/files/patch-base_process_process__info__linux.cc b/devel/electron4/files/patch-base_process_process__info__linux.cc
new file mode 100644
index 000000000000..c034a20bd2ea
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__info__linux.cc
@@ -0,0 +1,39 @@
+--- base/process/process_info_linux.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/process_info_linux.cc
+@@ -11,10 +11,28 @@
+ #include "base/process/process_handle.h"
+ #include "base/time/time.h"
+
++#if defined(__FreeBSD__) || defined(__DragonFly__)
++#include <sys/types.h>
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ namespace base {
+
+ // static
+ const Time CurrentProcessInfo::CreationTime() {
++#if defined(__FreeBSD__) || defined(__DragonFly__)
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() };
++ struct kinfo_proc proc;
++ size_t len = sizeof(struct kinfo_proc);
++ if (sysctl(mib, arraysize(mib), &proc, &len, NULL, 0) < 0)
++ return Time();
++#if defined(__DragonFly__)
++ return Time::FromTimeVal(proc.kp_start);
++#else
++ return Time::FromTimeVal(proc.ki_start);
++#endif
++#else
+ int64_t start_ticks =
+ internal::ReadProcSelfStatsAndGetFieldAsInt64(internal::VM_STARTTIME);
+ if (!start_ticks)
+@@ -24,6 +42,7 @@ const Time CurrentProcessInfo::CreationTime() {
+ if (boot_time.is_null())
+ return Time();
+ return Time(boot_time + start_offset);
++#endif
+ }
+
+ } // namespace base
diff --git a/devel/electron4/files/patch-base_process_process__iterator__freebsd.cc b/devel/electron4/files/patch-base_process_process__iterator__freebsd.cc
new file mode 100644
index 000000000000..4c973defafc1
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__iterator__freebsd.cc
@@ -0,0 +1,45 @@
+--- base/process/process_iterator_freebsd.cc.orig 2019-03-15 06:36:56 UTC
++++ base/process/process_iterator_freebsd.cc
+@@ -10,6 +10,10 @@
+ #include <sys/sysctl.h>
+ #include <unistd.h>
+
++/* getuid() */
++#include <unistd.h>
++#include <sys/types.h>
++
+ #include "base/logging.h"
+ #include "base/macros.h"
+ #include "base/strings/string_split.h"
+@@ -40,7 +44,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
+ num_of_kinfo_proc += 16;
+ kinfo_procs_.resize(num_of_kinfo_proc);
+ len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
+- if (sysctl(mib, arraysize(mib), &kinfo_procs_[0], &len, NULL, 0) <0) {
++ if (sysctl(mib, arraysize(mib), kinfo_procs_.data(), &len, NULL, 0) <0) {
+ // If we get a mem error, it just means we need a bigger buffer, so
+ // loop around again. Anything else is a real error and give up.
+ if (errno != ENOMEM) {
+@@ -72,19 +76,13 @@ bool ProcessIterator::CheckForNextProcess() {
+ for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
+ size_t length;
+ struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
+- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
+
+ if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
+ continue;
+
+- length = 0;
+- if (sysctl(mib, arraysize(mib), NULL, &length, NULL, 0) < 0) {
+- LOG(ERROR) << "failed to figure out the buffer size for a command line";
+- continue;
+- }
+-
+- data.resize(length);
+-
++ data.resize(ARG_MAX);
++ length = ARG_MAX;
+ if (sysctl(mib, arraysize(mib), &data[0], &length, NULL, 0) < 0) {
+ LOG(ERROR) << "failed to fetch a commandline";
+ continue;
diff --git a/devel/electron4/files/patch-base_process_process__metrics.h b/devel/electron4/files/patch-base_process_process__metrics.h
new file mode 100644
index 000000000000..430018bba160
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__metrics.h
@@ -0,0 +1,112 @@
+--- base/process/process_metrics.h.orig 2019-03-15 06:36:56 UTC
++++ base/process/process_metrics.h
+@@ -41,7 +41,7 @@ namespace base {
+ // Full declaration is in process_metrics_iocounters.h.
+ struct IoCounters;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Minor and major page fault counts since the process creation.
+ // Both counts are process-wide, and exclude child processes.
+ //
+@@ -51,7 +51,7 @@ struct PageFaultCounts {
+ int64_t minor;
+ int64_t major;
+ };
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Convert a POSIX timeval to microseconds.
+ BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv);
+@@ -177,7 +177,7 @@ class BASE_EXPORT ProcessMetrics {
+ // otherwise.
+ bool GetIOCounters(IoCounters* io_counters) const;
+
+-#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Returns the number of file descriptors currently open by the process, or
+ // -1 on error.
+ int GetOpenFdCount() const;
+@@ -185,16 +185,16 @@ class BASE_EXPORT ProcessMetrics {
+ // Returns the soft limit of file descriptors that can be opened by the
+ // process, or -1 on error.
+ int GetOpenFdSoftLimit() const;
+-#endif // defined(OS_LINUX) || defined(OS_AIX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_AIX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Bytes of swap as reported by /proc/[pid]/status.
+ uint64_t GetVmSwapBytes() const;
+
+ // Minor and major page fault count as reported by /proc/[pid]/stat.
+ // Returns true for success.
+ bool GetPageFaultCounts(PageFaultCounts* counts) const;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns total memory usage of malloc.
+ size_t GetMallocUsage();
+@@ -206,7 +206,7 @@ class BASE_EXPORT ProcessMetrics {
+ ProcessMetrics(ProcessHandle process, PortProvider* port_provider);
+ #endif // !defined(OS_MACOSX) || defined(OS_IOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -229,7 +229,7 @@ class BASE_EXPORT ProcessMetrics {
+ TimeDelta last_cumulative_cpu_;
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Same thing for idle wakeups.
+ TimeTicks last_idle_wakeups_time_;
+ uint64_t last_absolute_idle_wakeups_;
+@@ -275,7 +275,7 @@ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_de
+ #endif // defined(OS_POSIX)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
++ defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Data about system-wide memory consumption. Values are in KB. Available on
+ // Windows, Mac, Linux, Android and Chrome OS.
+ //
+@@ -308,7 +308,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int avail_phys = 0;
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // This provides an estimate of available memory as described here:
+ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
+ // NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
+@@ -323,7 +323,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ #endif
+
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ int buffers = 0;
+ int cached = 0;
+ int active_anon = 0;
+@@ -333,7 +333,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int dirty = 0;
+ int reclaimable = 0;
+ #endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) ||
+- // defined(OS_FUCHSIA)
++ // defined(OS_FUCHSIA) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ int shmem = 0;
+@@ -361,7 +361,7 @@ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoK
+ #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
+ // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // Parse the data found in /proc/<pid>/stat and return the sum of the
+ // CPU-related ticks. Returns -1 on parse error.
+ // Exposed for testing.
diff --git a/devel/electron4/files/patch-base_process_process__metrics__freebsd.cc b/devel/electron4/files/patch-base_process_process__metrics__freebsd.cc
new file mode 100644
index 000000000000..3894b96d08d9
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__metrics__freebsd.cc
@@ -0,0 +1,85 @@
+--- base/process/process_metrics_freebsd.cc.orig 2019-03-15 06:25:28 UTC
++++ base/process/process_metrics_freebsd.cc
+@@ -14,11 +14,14 @@
+ #include "base/process/process_metrics_iocounters.h"
+ #include "base/stl_util.h"
+
++#include <unistd.h> /* getpagesize() */
++#include <fcntl.h> /* O_RDONLY */
++#include <kvm.h>
++
+ namespace base {
+
+ ProcessMetrics::ProcessMetrics(ProcessHandle process)
+- : process_(process),
+- last_cpu_(0) {}
++ : process_(process) {}
+
+ // static
+ std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
+@@ -67,6 +70,65 @@ size_t GetSystemCommitCharge() {
+ pagesize = getpagesize();
+
+ return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
++}
++
++int GetNumberOfThreads(ProcessHandle process) {
++ // Taken from FreeBSD top (usr.bin/top/machine.c)
++
++ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
++ if (kd == NULL)
++ return 0;
++
++ struct kinfo_proc* pbase;
++ int nproc;
++ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
++ if (pbase == NULL)
++ return 0;
++
++ if (kvm_close(kd) == -1)
++ return 0;
++
++ return nproc;
++}
++
++bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
++ unsigned int mem_total, mem_free, swap_total, swap_used;
++ size_t length;
++ int pagesizeKB;
++
++ pagesizeKB = getpagesize() / 1024;
++
++ length = sizeof(mem_total);
++ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
++ &length, NULL, 0) != 0 || length != sizeof(mem_total))
++ return false;
++
++ length = sizeof(mem_free);
++ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
++ != 0 || length != sizeof(mem_free))
++ return false;
++
++ length = sizeof(swap_total);
++ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
++ != 0 || length != sizeof(swap_total))
++ return false;
++
++ length = sizeof(swap_used);
++ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
++ != 0 || length != sizeof(swap_used))
++ return false;
++
++ meminfo->total = mem_total * pagesizeKB;
++ meminfo->free = mem_free * pagesizeKB;
++ meminfo->swap_total = swap_total * pagesizeKB;
++ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
++
++ return true;
++}
++
++uint64_t ProcessMetrics::GetVmSwapBytes() const {
++ NOTIMPLEMENTED();
++ return 0;
+ }
+
+ } // namespace base
diff --git a/devel/electron4/files/patch-base_process_process__metrics__posix.cc b/devel/electron4/files/patch-base_process_process__metrics__posix.cc
new file mode 100644
index 000000000000..2087bc29e98b
--- /dev/null
+++ b/devel/electron4/files/patch-base_process_process__metrics__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics_posix.cc.orig 2019-03-15 06:25:28 UTC
++++ base/process/process_metrics_posix.cc
+@@ -19,6 +19,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_FREEBSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -107,7 +109,7 @@ size_t ProcessMetrics::GetMallocUsage() {
+ #else
+ return minfo.hblkhd + minfo.arena;
+ #endif
+-#elif defined(OS_FUCHSIA)
++#elif defined(OS_FUCHSIA) || defined(OS_BSD)
+ // TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
+ return 0;
+ #endif
diff --git a/devel/electron4/files/patch-base_profiler_stack__sampling__profiler__unittest.cc b/devel/electron4/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
new file mode 100644
index 000000000000..52dc41127106
--- /dev/null
+++ b/devel/electron4/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
@@ -0,0 +1,11 @@
+--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/profiler/stack_sampling_profiler_unittest.cc
+@@ -39,7 +39,7 @@
+ #include <intrin.h>
+ #include <malloc.h>
+ #include <windows.h>
+-#else
++#elif !defined(OS_BSD)
+ #include <alloca.h>
+ #endif
+
diff --git a/devel/electron4/files/patch-base_security__unittest.cc b/devel/electron4/files/patch-base_security__unittest.cc
new file mode 100644
index 000000000000..61247d3901a4
--- /dev/null
+++ b/devel/electron4/files/patch-base_security__unittest.cc
@@ -0,0 +1,11 @@
+--- base/security_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/security_unittest.cc
+@@ -59,7 +59,7 @@ NOINLINE Type HideValueFromCompiler(volatile Type valu
+ // FAILS_ is too clunky.
+ void OverflowTestsSoftExpectTrue(bool overflow_detected) {
+ if (!overflow_detected) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_NACL)
+ // Sadly, on Linux, Android, and OSX we don't have a good story yet. Don't
+ // fail the test, but report.
+ printf("Platform has overflow: %s\n",
diff --git a/devel/electron4/files/patch-base_strings_safe__sprintf__unittest.cc b/devel/electron4/files/patch-base_strings_safe__sprintf__unittest.cc
new file mode 100644
index 000000000000..cb82544403c3
--- /dev/null
+++ b/devel/electron4/files/patch-base_strings_safe__sprintf__unittest.cc
@@ -0,0 +1,18 @@
+--- base/strings/safe_sprintf_unittest.cc.orig 2019-03-15 06:25:28 UTC
++++ base/strings/safe_sprintf_unittest.cc
+@@ -730,6 +730,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
+ }
+
+ TEST(SafeSPrintfTest, EmitNULL) {
++/* Avoid compiler error: http://pastebin.com/1edWUE84
+ char buf[40];
+ #if defined(__GNUC__)
+ #pragma GCC diagnostic push
+@@ -741,6 +742,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
+ EXPECT_EQ("0x0", std::string(buf));
+ EXPECT_EQ(6, SafeSPrintf(buf, "%s", NULL));
+ EXPECT_EQ("<NULL>", std::string(buf));
++*/
+ #if defined(__GCC__)
+ #pragma GCC diagnostic pop
+ #endif
diff --git a/devel/electron4/files/patch-base_sys__info__freebsd.cc b/devel/electron4/files/patch-base_sys__info__freebsd.cc
new file mode 100644
index 000000000000..0817663ccff2
--- /dev/null
+++ b/devel/electron4/files/patch-base_sys__info__freebsd.cc
@@ -0,0 +1,71 @@
+--- base/sys_info_freebsd.cc.orig 2019-03-15 06:36:56 UTC
++++ base/sys_info_freebsd.cc
+@@ -13,26 +13,58 @@
+ namespace base {
+
+ int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
+- int pages, page_size;
++ int pages, page_size, r = 0;
+ size_t size = sizeof(pages);
+- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+- if (pages == -1 || page_size == -1) {
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
++ if(r == 0)
++ r =sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+ }
+
+-// static
+-uint64_t SysInfo::MaxSharedMemorySize() {
+- size_t limit;
+- size_t size = sizeof(limit);
+- if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
++int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
++ int page_size, r = 0;
++ unsigned pgfree, pginact, pgcache;
++ size_t size = sizeof(page_size);
++ size_t szpg = sizeof(pgfree);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+- return static_cast<uint64_t>(limit);
++ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
++}
++
++// static
++std::string SysInfo::CPUModelName() {
++ int mib[] = { CTL_HW, HW_MODEL };
++ char name[256];
++ size_t size = arraysize(name);
++ if (sysctl(mib, arraysize(mib), &name, &size, NULL, 0) == 0)
++ return name;
++ return std::string();
++}
++
++int SysInfo::NumberOfProcessors() {
++ int mib[] = { CTL_HW, HW_NCPU };
++ int ncpu;
++ size_t size = sizeof(ncpu);
++ if (sysctl(mib, arraysize(mib), &ncpu, &size, NULL, 0) == -1) {
++ NOTREACHED();
++ return 1;
++ }
++ return ncpu;
+ }
+
+ } // namespace base
diff --git a/devel/electron4/files/patch-base_sys__info__posix.cc b/devel/electron4/files/patch-base_sys__info__posix.cc
new file mode 100644
index 000000000000..bd5c2dac20c2
--- /dev/null
+++ b/devel/electron4/files/patch-base_sys__info__posix.cc
@@ -0,0 +1,38 @@
+--- base/sys_info_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/sys_info_posix.cc
+@@ -38,7 +38,7 @@
+
+ namespace {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ int NumberOfProcessors() {
+ // sysconf returns the number of "logical" (not "physical") processors on both
+ // Mac and Linux. So we get the number of max available "logical" processors.
+@@ -65,7 +65,7 @@ int NumberOfProcessors() {
+ base::LazyInstance<
+ base::internal::LazySysInfoValue<int, NumberOfProcessors> >::Leaky
+ g_lazy_number_of_processors = LAZY_INSTANCE_INITIALIZER;
+-#endif // !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#endif // !defined(OS_BSD) && !defined(OS_FUCHSIA)
+
+ #if !defined(OS_FUCHSIA)
+ int64_t AmountOfVirtualMemory() {
+@@ -133,7 +133,7 @@ bool GetDiskSpaceInfo(const base::FilePath& path,
+
+ namespace base {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ int SysInfo::NumberOfProcessors() {
+ return g_lazy_number_of_processors.Get().value();
+ }
+@@ -226,6 +226,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron4/files/patch-base_test_launcher_test__launcher.cc b/devel/electron4/files/patch-base_test_launcher_test__launcher.cc
new file mode 100644
index 000000000000..282354de80eb
--- /dev/null
+++ b/devel/electron4/files/patch-base_test_launcher_test__launcher.cc
@@ -0,0 +1,10 @@
+--- base/test/launcher/test_launcher.cc.orig 2019-03-15 06:36:56 UTC
++++ base/test/launcher/test_launcher.cc
+@@ -53,6 +53,7 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+
+ #if defined(OS_POSIX)
++#include <signal.h>
+ #include <fcntl.h>
+
+ #include "base/files/file_descriptor_watcher_posix.h"
diff --git a/devel/electron4/files/patch-base_test_test__file__util__linux.cc b/devel/electron4/files/patch-base_test_test__file__util__linux.cc
new file mode 100644
index 000000000000..21affbd2bd60
--- /dev/null
+++ b/devel/electron4/files/patch-base_test_test__file__util__linux.cc
@@ -0,0 +1,13 @@
+--- base/test/test_file_util_linux.cc.orig 2019-03-15 06:25:28 UTC
++++ base/test/test_file_util_linux.cc
+@@ -51,8 +51,10 @@ bool EvictFileFromSystemCache(const FilePath& file) {
+ return false;
+ if (fdatasync(fd.get()) != 0)
+ return false;
++#if !defined(OS_BSD)
+ if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
+ return false;
++#endif
+ return true;
+ }
+
diff --git a/devel/electron4/files/patch-base_test_test__file__util__posix.cc b/devel/electron4/files/patch-base_test_test__file__util__posix.cc
new file mode 100644
index 000000000000..176b743e757b
--- /dev/null
+++ b/devel/electron4/files/patch-base_test_test__file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/test/test_file_util_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/test/test_file_util_posix.cc
+@@ -79,7 +79,7 @@ bool DieFileDie(const FilePath& file, bool recurse) {
+ return DeleteFile(file, recurse);
+ }
+
+-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ bool EvictFileFromSystemCache(const FilePath& file) {
+ // There doesn't seem to be a POSIX way to cool the disk cache.
+ NOTIMPLEMENTED();
diff --git a/devel/electron4/files/patch-base_third__party_libevent_BUILD.gn b/devel/electron4/files/patch-base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..b0d5b4b71fb5
--- /dev/null
+++ b/devel/electron4/files/patch-base_third__party_libevent_BUILD.gn
@@ -0,0 +1,24 @@
+--- base/third_party/libevent/BUILD.gn.orig 2019-03-15 06:25:28 UTC
++++ base/third_party/libevent/BUILD.gn
+@@ -43,13 +43,20 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
+- } else if (is_linux) {
++ } else if (is_linux && !is_bsd) {
+ sources += [
+ "epoll.c",
+ "linux/config.h",
+ "linux/event-config.h",
+ ]
+ include_dirs = [ "linux" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_android) {
+ sources += [
+ "android/config.h",
diff --git a/devel/electron4/files/patch-base_threading_platform__thread.h b/devel/electron4/files/patch-base_threading_platform__thread.h
new file mode 100644
index 000000000000..255e3d75b760
--- /dev/null
+++ b/devel/electron4/files/patch-base_threading_platform__thread.h
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread.h.orig 2019-03-15 06:36:56 UTC
++++ base/threading/platform_thread.h
+@@ -217,7 +217,7 @@ class BASE_EXPORT PlatformThread {
+
+ static ThreadPriority GetCurrentThreadPriority();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Toggles a specific thread's priority at runtime. This can be used to
+ // change the priority of a thread in a different process and will fail
+ // if the calling process does not have proper permissions. The
diff --git a/devel/electron4/files/patch-base_threading_platform__thread__linux.cc b/devel/electron4/files/patch-base_threading_platform__thread__linux.cc
new file mode 100644
index 000000000000..d6c093fb556d
--- /dev/null
+++ b/devel/electron4/files/patch-base_threading_platform__thread__linux.cc
@@ -0,0 +1,21 @@
+--- base/threading/platform_thread_linux.cc.orig 2019-03-15 06:36:56 UTC
++++ base/threading/platform_thread_linux.cc
+@@ -18,7 +18,9 @@
+
+ #if !defined(OS_NACL) && !defined(OS_AIX)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -128,7 +130,7 @@ bool GetCurrentThreadPriorityForPlatform(ThreadPriorit
+ void PlatformThread::SetName(const std::string& name) {
+ ThreadIdNameManager::GetInstance()->SetName(name);
+
+-#if !defined(OS_NACL) && !defined(OS_AIX)
++#if !defined(OS_NACL) && !defined(OS_AIX) && !defined(OS_BSD)
+ // On linux we can get the thread names to show up in the debugger by setting
+ // the process name for the LWP. We don't want to do this for the main
+ // thread because that would rename the process, causing tools like killall
diff --git a/devel/electron4/files/patch-base_threading_platform__thread__posix.cc b/devel/electron4/files/patch-base_threading_platform__thread__posix.cc
new file mode 100644
index 000000000000..cc1ae6a871c3
--- /dev/null
+++ b/devel/electron4/files/patch-base_threading_platform__thread__posix.cc
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread_posix.cc.orig 2019-03-15 06:36:56 UTC
++++ base/threading/platform_thread_posix.cc
+@@ -61,7 +61,7 @@ void* ThreadFunc(void* params) {
+ if (!thread_params->joinable)
+ base::ThreadRestrictions::SetSingletonAllowed(false);
+
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // Threads on linux/android may inherit their priority from the thread
+ // where they were created. This explicitly sets the priority of all new
+ // threads.
diff --git a/devel/electron4/files/patch-base_threading_thread__local__storage__unittest.cc b/devel/electron4/files/patch-base_threading_thread__local__storage__unittest.cc
new file mode 100644
index 000000000000..741a4b21fae9
--- /dev/null
+++ b/devel/electron4/files/patch-base_threading_thread__local__storage__unittest.cc
@@ -0,0 +1,11 @@
+--- base/threading/thread_local_storage_unittest.cc.orig 2019-03-15 06:36:56 UTC
++++ base/threading/thread_local_storage_unittest.cc
+@@ -86,7 +86,7 @@ class ThreadLocalStorageRunner : public DelegateSimple
+ void ThreadLocalStorageCleanup(void *value) {
+ int *ptr = reinterpret_cast<int*>(value);
+ // Destructors should never be called with a NULL.
+- ASSERT_NE(reinterpret_cast<int*>(NULL), ptr);
++ ASSERT_NE(static_cast<int*>(NULL), ptr);
+ if (*ptr == kFinalTlsValue)
+ return; // We've been called enough times.
+ ASSERT_LT(kFinalTlsValue, *ptr);
diff --git a/devel/electron4/files/patch-base_threading_thread__task__runner__handle.cc b/devel/electron4/files/patch-base_threading_thread__task__runner__handle.cc
new file mode 100644
index 000000000000..3b2e4911f2cb
--- /dev/null
+++ b/devel/electron4/files/patch-base_threading_thread__task__runner__handle.cc
@@ -0,0 +1,26 @@
+--- base/threading/thread_task_runner_handle.cc.orig 2019-03-15 06:36:56 UTC
++++ base/threading/thread_task_runner_handle.cc
+@@ -7,6 +7,7 @@
+ #include <utility>
+
+ #include "base/bind.h"
++#include "base/callback_helpers.h"
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/memory/ptr_util.h"
+@@ -37,6 +38,7 @@ bool ThreadTaskRunnerHandle::IsSet() {
+ return !!thread_task_runner_tls.Pointer()->Get();
+ }
+
++#if defined(OS_BSD)
+ // static
+ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideForTesting(
+ scoped_refptr<SingleThreadTaskRunner> overriding_task_runner) {
+@@ -86,6 +88,7 @@ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideFo
+ base::Unretained(ttrh->task_runner_.get()),
+ std::move(no_running_during_override)));
+ }
++#endif
+
+ ThreadTaskRunnerHandle::ThreadTaskRunnerHandle(
+ scoped_refptr<SingleThreadTaskRunner> task_runner)
diff --git a/devel/electron4/files/patch-base_trace__event_malloc__dump__provider.cc b/devel/electron4/files/patch-base_trace__event_malloc__dump__provider.cc
new file mode 100644
index 000000000000..e172b1705c5c
--- /dev/null
+++ b/devel/electron4/files/patch-base_trace__event_malloc__dump__provider.cc
@@ -0,0 +1,21 @@
+--- base/trace_event/malloc_dump_provider.cc.orig 2019-03-15 06:36:56 UTC
++++ base/trace_event/malloc_dump_provider.cc
+@@ -17,6 +17,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_BSD)
++#include "stdlib.h"
+ #else
+ #include <malloc.h>
+ #endif
+@@ -132,6 +134,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
+ }
+ #elif defined(OS_FUCHSIA)
+ // TODO(fuchsia): Port, see https://crbug.com/706592.
++#elif defined(OS_BSD)
++ total_virtual_size = 0;
++ allocated_objects_size = 0;
+ #else
+ struct mallinfo info = mallinfo();
+ DCHECK_GE(info.arena + info.hblkhd, info.uordblks);
diff --git a/devel/electron4/files/patch-base_trace__event_process__memory__dump.cc b/devel/electron4/files/patch-base_trace__event_process__memory__dump.cc
new file mode 100644
index 000000000000..60c7ba4a90a1
--- /dev/null
+++ b/devel/electron4/files/patch-base_trace__event_process__memory__dump.cc
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.cc.orig 2019-03-15 06:36:56 UTC
++++ base/trace_event/process_memory_dump.cc
+@@ -93,7 +93,7 @@ size_t ProcessMemoryDump::CountResidentBytes(void* sta
+ #if defined(OS_WIN)
+ std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
+ new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<char[]> vec(new char[max_vec_size]);
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
diff --git a/devel/electron4/files/patch-base_trace__event_process__memory__dump.h b/devel/electron4/files/patch-base_trace__event_process__memory__dump.h
new file mode 100644
index 000000000000..9645d8c2aa5d
--- /dev/null
+++ b/devel/electron4/files/patch-base_trace__event_process__memory__dump.h
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.h.orig 2019-03-15 06:36:56 UTC
++++ base/trace_event/process_memory_dump.h
+@@ -22,7 +22,7 @@
+
+ // Define COUNT_RESIDENT_BYTES_SUPPORTED if platform supports counting of the
+ // resident memory.
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ #define COUNT_RESIDENT_BYTES_SUPPORTED
+ #endif
+
diff --git a/devel/electron4/files/patch-build_config_BUILD.gn b/devel/electron4/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..d09e5e6561bd
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig 2019-03-15 06:36:56 UTC
++++ build/config/BUILD.gn
+@@ -167,7 +167,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
++ } else if ((is_linux || is_bsd) && current_cpu == "x64" && enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+ # TODO(phajdan.jr): Should we enable this for all of POSIX?
+@@ -269,9 +269,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -327,7 +325,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_ldconfig" ]
+ if (is_android) {
+ configs += [ "//build/config/android:executable_config" ]
diff --git a/devel/electron4/files/patch-build_config_BUILDCONFIG.gn b/devel/electron4/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..2dd8598ea826
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,119 @@
+--- build/config/BUILDCONFIG.gn.orig 2019-03-16 09:15:20 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -134,10 +134,10 @@ declare_args() {
+ is_official_build = false
+
+ # Whether we're a traditional desktop unix.
+- is_desktop_linux = current_os == "linux"
++ is_desktop_linux = current_os == "linux" || current_os == "freebsd"
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64")
+@@ -189,8 +189,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" || target_os != "freebsd") {
+ # TODO(dpranke) - is_clang normally applies only to the target
+ # build, and there is no way to indicate that you want to override
+ # it for both the target build *and* the host build. Do we need to
+@@ -230,7 +230,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -304,6 +304,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = false
+ is_win = true
++ is_bsd = false
+ } else if (current_os == "mac") {
+ is_aix = false
+ is_android = false
+@@ -315,6 +316,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "android") {
+ is_aix = false
+ is_android = true
+@@ -326,6 +328,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "chromeos") {
+ is_aix = false
+ is_android = false
+@@ -337,6 +340,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "nacl") {
+ # current_os == "nacl" will be passed by the nacl toolchain definition.
+ # It is not set by default or on the command line. We treat is as a
+@@ -351,6 +355,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = true
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "fuchsia") {
+ is_aix = false
+ is_android = false
+@@ -362,6 +367,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = false
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "ios") {
+ is_aix = false
+ is_android = false
+@@ -373,6 +379,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "linux") {
+ is_aix = false
+ is_android = false
+@@ -384,6 +391,7 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
+ } else if (current_os == "aix") {
+ is_aix = true
+ is_android = false
+@@ -395,6 +403,19 @@ if (current_os == "win" || current_os == "winuwp") {
+ is_nacl = false
+ is_posix = true
+ is_win = false
++ is_bsd = false
++} else if (current_os == "freebsd") {
++ is_aix = false
++ is_android = false
++ is_chromeos = false
++ is_fuchsia = false
++ is_ios = false
++ is_linux = true
++ is_mac = false
++ is_nacl = false
++ is_posix = true
++ is_win = false
++ is_bsd = true
+ }
+
+ # =============================================================================
diff --git a/devel/electron4/files/patch-build_config_allocator.gni b/devel/electron4/files/patch-build_config_allocator.gni
new file mode 100644
index 000000000000..b4c56f854e44
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_allocator.gni
@@ -0,0 +1,20 @@
+--- build/config/allocator.gni.orig 2019-03-15 06:36:56 UTC
++++ build/config/allocator.gni
+@@ -6,7 +6,7 @@ import("//build/config/sanitizers/sanitizers.gni")
+
+ # Temporarily disable tcmalloc on arm64 linux to get rid of compilation errors.
+ if (is_android || is_mac || is_ios || is_asan || is_lsan || is_tsan ||
+- is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64")) {
++ is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64") || is_bsd) {
+ _default_allocator = "none"
+ } else {
+ _default_allocator = "tcmalloc"
+@@ -17,7 +17,7 @@ if (is_android || is_mac || is_ios || is_asan || is_ls
+ # against the debug CRT with "is_nacl=false".
+ if ((is_linux || is_android || is_mac ||
+ (is_win && !is_component_build && !is_debug)) && !is_asan && !is_lsan &&
+- !is_tsan && !is_msan) {
++ !is_tsan && !is_msan && !is_bsd) {
+ _default_use_allocator_shim = true
+ } else {
+ _default_use_allocator_shim = false
diff --git a/devel/electron4/files/patch-build_config_compiler_BUILD.gn b/devel/electron4/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..505659656f2e
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,89 @@
+--- build/config/compiler/BUILD.gn.orig 2019-03-16 09:15:20 UTC
++++ build/config/compiler/BUILD.gn
+@@ -52,7 +52,7 @@ declare_args() {
+ # only two architectures that are currently checked in). Turn this off when
+ # you are using a custom toolchain and need to control -B in cflags.
+ linux_use_bundled_binutils =
+- linux_use_bundled_binutils_override && is_linux &&
++ linux_use_bundled_binutils_override && (is_linux && !is_bsd) &&
+ (current_cpu == "x64" || current_cpu == "x86")
+ binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
+ root_build_dir)
+@@ -263,7 +263,7 @@ config("compiler") {
+ # Linker warnings.
+ if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
+ !(is_android && use_order_profiling) && !is_mac && !is_ios &&
+- current_os != "aix") {
++ current_os != "aix" && !is_bsd) {
+ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
+ # TODO(lizeb,pasko): Fix link errors when linking with order_profiling=1
+ # crbug.com/485542
+@@ -380,12 +380,6 @@ config("compiler") {
+ "-Wl,-z,now",
+ "-Wl,-z,relro",
+ ]
+- if (!using_sanitizer) {
+- ldflags += [
+- "-Wl,-z,defs",
+- "-Wl,--as-needed",
+- ]
+- }
+ }
+
+ # Linux-specific compiler flags setup.
+@@ -489,7 +483,7 @@ config("compiler") {
+ }
+
+ if (is_clang && !is_nacl && current_toolchain == host_toolchain &&
+- target_os != "chromeos") {
++ target_os != "chromeos" && !is_bsd) {
+ cflags += [
+ # TODO(hans): Remove this once Clang generates better optimized debug info
+ # by default. https://crbug.com/765793
+@@ -742,7 +736,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1477,10 +1471,6 @@ config("default_warnings") {
+ cflags += [
+ # TODO(thakis): https://crbug.com/753973
+ "-Wno-enum-compare-switch",
+-
+- # Ignore warnings about MSVC optimization pragmas.
+- # TODO(thakis): Only for no_chromium_code? http://crbug.com/505314
+- "-Wno-ignored-pragma-optimize",
+ ]
+ }
+ }
+@@ -1654,7 +1644,7 @@ config("thin_archive") {
+ # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
+ # have a "thin archive" mode (it does accept -T, but it means truncating
+ # archive names to 16 characters, which is not what we want).
+- if ((is_posix && !is_nacl && !is_mac && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_mac && !is_ios && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ }
+ }
+@@ -2181,7 +2171,7 @@ config("symbols") {
+ # [1] crrev.com/a81d5ade0b043208e06ad71a38bcf9c348a1a52f
+ cflags += [ "-gdwarf-3" ]
+ }
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+ if (use_debug_fission && !is_nacl && !is_android) {
+ # NOTE: Some Chrome OS builds globally set |use_debug_fission| to true,
+@@ -2201,7 +2191,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ if (!is_mac && !is_ios && !is_nacl && target_cpu != "x86" &&
+- (use_gold || use_lld)) {
++ (use_gold || use_lld) && !is_bsd) {
+ if (is_clang) {
+ # This flag enables the GNU-format pubnames and pubtypes sections,
+ # which lld needs in order to generate a correct GDB index.
diff --git a/devel/electron4/files/patch-build_config_compiler_compiler.gni b/devel/electron4/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..63bab0381575
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- build/config/compiler/compiler.gni.orig 2019-03-15 06:36:56 UTC
++++ build/config/compiler/compiler.gni
+@@ -172,7 +172,7 @@ declare_args() {
+
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+- use_gold = !use_lld && !(is_chromecast && is_linux &&
++ use_gold = !is_bsd && !use_lld && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ ((is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
+ current_cpu == "arm" || current_cpu == "mipsel" ||
diff --git a/devel/electron4/files/patch-build_config_features.gni b/devel/electron4/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..2e74393a4a7a
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig 2019-03-15 06:36:56 UTC
++++ build/config/features.gni
+@@ -46,7 +46,7 @@ declare_args() {
+ fieldtrial_testing_like_official_build = is_chrome_branded
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = is_linux && !is_chromecast
++ use_udev = is_linux && !is_chromecast && !is_bsd
+
+ use_dbus = is_linux && !is_chromecast
+
diff --git a/devel/electron4/files/patch-build_config_linux_BUILD.gn b/devel/electron4/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..6db1b6fea181
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig 2019-03-15 06:25:28 UTC
++++ build/config/linux/BUILD.gn
+@@ -28,7 +28,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/devel/electron4/files/patch-build_config_linux_pkg-config.py b/devel/electron4/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..e229b0490f02
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig 2019-03-15 06:36:56 UTC
++++ build/config/linux/pkg-config.py
+@@ -57,8 +57,12 @@ def SetConfigPath(options):
+ print "You must specify an architecture via -a if using a sysroot."
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -107,7 +111,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print "[[],[],[],[],[]]"
+ return 0
+
diff --git a/devel/electron4/files/patch-build_config_sysroot.gni b/devel/electron4/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..e2d5821ec120
--- /dev/null
+++ b/devel/electron4/files/patch-build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- build/config/sysroot.gni.orig 2019-03-15 06:36:56 UTC
++++ build/config/sysroot.gni
+@@ -15,9 +15,10 @@ declare_args() {
+ # The absolute path to directory containing linux sysroot images
+ target_sysroot_dir = "//build/linux"
+
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (
++ current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (current_os == target_os && current_cpu == target_cpu &&
diff --git a/devel/electron4/files/patch-build_gn__run__binary.py b/devel/electron4/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..d36affd55755
--- /dev/null
+++ b/devel/electron4/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig 2019-03-15 06:36:56 UTC
++++ build/gn_run_binary.py
+@@ -19,7 +19,7 @@ path = './' + sys.argv[1]
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/devel/electron4/files/patch-build_linux_chrome.map b/devel/electron4/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..3e20c778bbd3
--- /dev/null
+++ b/devel/electron4/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig 2019-03-15 06:25:28 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -81,7 +88,4 @@ global:
+ localtime64;
+ localtime64_r;
+ localtime_r;
+-
+-local:
+- *;
+ };
diff --git a/devel/electron4/files/patch-build_linux_libpci_BUILD.gn b/devel/electron4/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..dcb372f6e756
--- /dev/null
+++ b/devel/electron4/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig 2019-03-15 06:25:28 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/devel/electron4/files/patch-build_linux_unbundle_libusb.gn b/devel/electron4/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..883f60806f3b
--- /dev/null
+++ b/devel/electron4/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig 2019-03-16 09:16:25 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/devel/electron4/files/patch-build_linux_unbundle_replace__gn__files.py b/devel/electron4/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..241ee6cbe685
--- /dev/null
+++ b/devel/electron4/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig 2019-03-15 06:25:28 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/devel/electron4/files/patch-build_toolchain_gcc__toolchain.gni b/devel/electron4/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..ea85201b29ad
--- /dev/null
+++ b/devel/electron4/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig 2019-03-15 06:36:56 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -25,6 +25,11 @@ analyzer_wrapper =
+ rebase_path("//build/toolchain/clang_static_analyzer_wrapper.py",
+ root_build_dir) + " --mode=clang"
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -604,13 +609,23 @@ template("clang_toolchain") {
+ }
+
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "$prefix/clang"
+- cxx = "$prefix/clang++"
+- ld = cxx
+- readelf = "${toolprefix}readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${toolprefix}nm"
++ if (is_bsd) {
++ prefix = "/usr/local/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ readelf = "readelf"
++ ar = "${prefix}/ar"
++ nm = "${toolprefix}nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${toolprefix}readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${toolprefix}nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/devel/electron4/files/patch-build_toolchain_get__concurrent__links.py b/devel/electron4/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..9463eb0e85f0
--- /dev/null
+++ b/devel/electron4/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig 2019-03-15 06:25:28 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -46,6 +46,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/devel/electron4/files/patch-build_toolchain_linux_BUILD.gn b/devel/electron4/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..9b5fc7d5b387
--- /dev/null
+++ b/devel/electron4/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig 2019-03-15 06:36:56 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -14,7 +14,6 @@ clang_toolchain("clang_arm") {
+ }
+
+ clang_toolchain("clang_arm64") {
+- toolprefix = "aarch64-linux-gnu-"
+ toolchain_args = {
+ current_cpu = "arm64"
+ current_os = "linux"
diff --git a/devel/electron4/files/patch-cc_BUILD.gn b/devel/electron4/files/patch-cc_BUILD.gn
new file mode 100644
index 000000000000..54de06a44294
--- /dev/null
+++ b/devel/electron4/files/patch-cc_BUILD.gn
@@ -0,0 +1,11 @@
+--- cc/BUILD.gn.orig 2019-03-15 06:36:56 UTC
++++ cc/BUILD.gn
+@@ -550,7 +550,7 @@ cc_static_library("test_support") {
+ "//ui/gl:test_support",
+ "//ui/latency",
+ ]
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ data_deps = [
+ "//third_party/mesa:osmesa",
+ ]
diff --git a/devel/electron4/files/patch-cc_layers_scrollbar__layer__impl__base.cc b/devel/electron4/files/patch-cc_layers_scrollbar__layer__impl__base.cc
new file mode 100644
index 000000000000..2fb97afbb3e2
--- /dev/null
+++ b/devel/electron4/files/patch-cc_layers_scrollbar__layer__impl__base.cc
@@ -0,0 +1,13 @@
+--- cc/layers/scrollbar_layer_impl_base.cc.orig 2019-03-15 06:36:56 UTC
++++ cc/layers/scrollbar_layer_impl_base.cc
+@@ -210,8 +210,8 @@ gfx::Rect ScrollbarLayerImplBase::ComputeThumbQuadRect
+ int thumb_offset = TrackStart();
+ if (maximum > 0) {
+ float ratio = clamped_current_pos / maximum;
+- float max_offset = track_length - thumb_length;
+- thumb_offset += static_cast<int>(ratio * max_offset);
++ float _max_offset = track_length - thumb_length;
++ thumb_offset += static_cast<int>(ratio * _max_offset);
+ }
+
+ float thumb_thickness_adjustment =
diff --git a/devel/electron4/files/patch-cc_trees_property__tree.cc b/devel/electron4/files/patch-cc_trees_property__tree.cc
new file mode 100644
index 000000000000..c96f9634f53e
--- /dev/null
+++ b/devel/electron4/files/patch-cc_trees_property__tree.cc
@@ -0,0 +1,20 @@
+--- cc/trees/property_tree.cc.orig 2019-03-15 06:36:57 UTC
++++ cc/trees/property_tree.cc
+@@ -1295,13 +1295,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scro
+
+ gfx::Size clip_layer_bounds = container_bounds(scroll_node->id);
+
+- gfx::ScrollOffset max_offset(
++ gfx::ScrollOffset _max_offset(
+ scaled_scroll_bounds.width() - clip_layer_bounds.width(),
+ scaled_scroll_bounds.height() - clip_layer_bounds.height());
+
+- max_offset.Scale(1 / scale_factor);
+- max_offset.SetToMax(gfx::ScrollOffset());
+- return max_offset;
++ _max_offset.Scale(1 / scale_factor);
++ _max_offset.SetToMax(gfx::ScrollOffset());
++ return _max_offset;
+ }
+
+ void ScrollTree::OnScrollOffsetAnimated(ElementId id,
diff --git a/devel/electron4/files/patch-chrome_app_chrome__command__ids.h b/devel/electron4/files/patch-chrome_app_chrome__command__ids.h
new file mode 100644
index 000000000000..9ded92e3af42
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_chrome__command__ids.h
@@ -0,0 +1,11 @@
+--- chrome/app/chrome_command_ids.h.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/chrome_command_ids.h
+@@ -67,7 +67,7 @@
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_2 34049
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_3 34050
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #define IDC_USE_SYSTEM_TITLE_BAR 34051
+ #define IDC_RESTORE_WINDOW 34052
+ #endif
diff --git a/devel/electron4/files/patch-chrome_app_chrome__main.cc b/devel/electron4/files/patch-chrome_app_chrome__main.cc
new file mode 100644
index 000000000000..f4563d1c5f78
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_chrome__main.cc
@@ -0,0 +1,19 @@
+--- chrome/app/chrome_main.cc.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/chrome_main.cc
+@@ -89,14 +89,14 @@ int ChromeMain(int argc, const char** argv) {
+ ALLOW_UNUSED_LOCAL(command_line);
+
+ // Chrome-specific process modes.
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ if (command_line->HasSwitch(switches::kHeadless)) {
+ #if defined(OS_MACOSX)
+ SetUpBundleOverrides();
+ #endif
+ return headless::HeadlessShellMain(params);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ int rv = content::ContentMain(params);
+
diff --git a/devel/electron4/files/patch-chrome_app_chrome__main__delegate.cc b/devel/electron4/files/patch-chrome_app_chrome__main__delegate.cc
new file mode 100644
index 000000000000..357c75eef4a7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_chrome__main__delegate.cc
@@ -0,0 +1,74 @@
+--- chrome/app/chrome_main_delegate.cc.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/chrome_main_delegate.cc
+@@ -98,7 +98,7 @@
+ #include "chrome/app/shutdown_signal_handlers_posix.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ #include "components/nacl/common/nacl_paths.h"
+ #include "components/nacl/zygote/nacl_fork_delegate_linux.h"
+ #endif
+@@ -133,7 +133,7 @@
+ #include "v8/include/v8.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #endif
+
+@@ -233,7 +233,7 @@ bool UseHooks() {
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ void AdjustLinuxOOMScore(const std::string& process_type) {
+ // Browsers and zygotes should still be killable, but killed last.
+ const int kZygoteScore = 0;
+@@ -401,7 +401,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, Chrome does not support running multiple copies under different
+ // DISPLAYs, so the profile directory can be specified in the environment to
+ // support the virtual desktop use-case.
+@@ -574,7 +574,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ #if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+ #endif
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ nacl::RegisterPathProvider();
+ #endif
+
+@@ -885,7 +885,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ InitializePDF();
+ #endif
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Zygote needs to call InitCrashReporter() in RunZygote().
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ #if defined(OS_ANDROID)
+@@ -901,7 +901,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ breakpad::InitCrashReporter(process_type);
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // After all the platform Breakpads have been initialized, store the command
+ // line for crash reporting.
+@@ -911,7 +911,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
+ // Note: If you are adding a new process type below, be sure to adjust the
+ // AdjustLinuxOOMScore function too.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ AdjustLinuxOOMScore(process_type);
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron4/files/patch-chrome_app_chromium__strings.grd b/devel/electron4/files/patch-chrome_app_chromium__strings.grd
new file mode 100644
index 000000000000..d91e57b0fea5
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_chromium__strings.grd
@@ -0,0 +1,11 @@
+--- chrome/app/chromium_strings.grd.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/chromium_strings.grd
+@@ -814,7 +814,7 @@ Signing in anyway will merge Chromium information like
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Chromium process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
+ </message>
diff --git a/devel/electron4/files/patch-chrome_app_generated__resources.grd b/devel/electron4/files/patch-chrome_app_generated__resources.grd
new file mode 100644
index 000000000000..3b78a51859e9
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_generated__resources.grd
@@ -0,0 +1,20 @@
+--- chrome/app/generated_resources.grd.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/generated_resources.grd
+@@ -6064,7 +6064,7 @@ the Bookmarks menu.">
+ Google Pay
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+ Use system title bar and borders
+ </message>
+@@ -6895,7 +6895,7 @@ Please help our engineers fix this problem. Tell us wh
+ Set as default
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_MINIMIZE_WINDOW_MENU" desc="The Linux browser window menu item text for minimizing the window.">
+ Minimize
+ </message>
diff --git a/devel/electron4/files/patch-chrome_app_google__chrome__strings.grd b/devel/electron4/files/patch-chrome_app_google__chrome__strings.grd
new file mode 100644
index 000000000000..50079ff00d4c
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_google__chrome__strings.grd
@@ -0,0 +1,11 @@
+--- chrome/app/google_chrome_strings.grd.orig 2019-03-15 06:36:59 UTC
++++ chrome/app/google_chrome_strings.grd
+@@ -825,7 +825,7 @@ Signing in anyway will merge Chrome information like b
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Google Chrome process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chrome has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chrome.
+ </message>
diff --git a/devel/electron4/files/patch-chrome_app_settings__strings.grdp b/devel/electron4/files/patch-chrome_app_settings__strings.grdp
new file mode 100644
index 000000000000..c80fc4652bc8
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_settings__strings.grdp
@@ -0,0 +1,20 @@
+--- chrome/app/settings_strings.grdp.orig 2019-03-15 06:37:00 UTC
++++ chrome/app/settings_strings.grdp
+@@ -508,7 +508,7 @@
+ Themes
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SETTINGS_SYSTEM_THEME" desc="Text of the label describing the system (GTK+) browser theme on Linux">
+ GTK+
+ </message>
+@@ -522,7 +522,7 @@
+ Use Classic
+ </message>
+ </if>
+- <if expr="not is_linux or chromeos">
++ <if expr="not is_posix or chromeos">
+ <message name="IDS_SETTINGS_RESET_TO_DEFAULT_THEME" desc="Name of the control which resets the browser theme back to the default theme.">
+ Reset to default
+ </message>
diff --git a/devel/electron4/files/patch-chrome_app_shutdown__signal__handlers__posix.cc b/devel/electron4/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
new file mode 100644
index 000000000000..5d876581df7f
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
@@ -0,0 +1,15 @@
+--- chrome/app/shutdown_signal_handlers_posix.cc.orig 2019-03-15 06:37:00 UTC
++++ chrome/app/shutdown_signal_handlers_posix.cc
+@@ -183,7 +183,11 @@ void InstallShutdownSignalHandlers(
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
+-#if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
++#if defined(OS_BSD)
++ // PTHREAD_STACK_MIN causes chromium to crash under FreeBSD,
++ // we request the default pthread stack size by specifying 0 here.
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#elif !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+ // ASan instrumentation and -finstrument-functions (used for keeping the
diff --git a/devel/electron4/files/patch-chrome_app_theme_chrome__unscaled__resources.grd b/devel/electron4/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
new file mode 100644
index 000000000000..1108956b9734
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/app/theme/chrome_unscaled_resources.grd.orig 2019-03-15 06:37:00 UTC
++++ chrome/app/theme/chrome_unscaled_resources.grd
+@@ -88,7 +88,7 @@
+ <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/common/profile_avatar_sun_cloud.png" type="BINDATA" />
+ <include name="IDR_PROFILE_AVATAR_2X_26" file="default_200_percent/common/profile_avatar_placeholder.png" type="BINDATA" />
+ </if>
+- <if expr="is_linux and enable_app_list">
++ <if expr="is_posix and enable_app_list">
+ <!-- App Launcher icons for desktop icon. -->
+ <if expr="_google_chrome">
+ <then>
diff --git a/devel/electron4/files/patch-chrome_browser_about__flags.cc b/devel/electron4/files/patch-chrome_browser_about__flags.cc
new file mode 100644
index 000000000000..9534385a24a6
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_about__flags.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/about_flags.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/about_flags.cc
+@@ -2436,7 +2436,7 @@ const FeatureEntry kFeatureEntries[] = {
+ {"force-text-direction", flag_descriptions::kForceTextDirectionName,
+ flag_descriptions::kForceTextDirectionDescription, kOsAll,
+ MULTI_VALUE_TYPE(kForceTextDirectionChoices)},
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-input-ime-api", flag_descriptions::kEnableInputImeApiName,
+ flag_descriptions::kEnableInputImeApiDescription, kOsWin | kOsLinux,
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableInputImeAPI,
+@@ -2446,7 +2446,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kWarnBeforeQuittingFlagDescription, kOsWin | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kWarnBeforeQuitting)},
+ #endif // OS_CHROMEOS
+-#endif // OS_WIN || OS_LINUX
++#endif // OS_WIN || OS_LINUX || OS_BSD
+ {"enable-origin-trials", flag_descriptions::kOriginTrialsName,
+ flag_descriptions::kOriginTrialsDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kOriginTrials)},
+@@ -3059,7 +3059,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kLeftToRightUrlsDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kLeftToRightUrls)},
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ {"omnibox-new-answer-layout",
+ flag_descriptions::kOmniboxNewAnswerLayoutName,
+ flag_descriptions::kOmniboxNewAnswerLayoutDescription, kOsDesktop,
+@@ -3081,7 +3081,7 @@ const FeatureEntry kFeatureEntries[] = {
+ {"enable-new-app-menu-icon", flag_descriptions::kEnableNewAppMenuIconName,
+ flag_descriptions::kEnableNewAppMenuIconDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kAnimatedAppMenuIcon)},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ {"enable-custom-feedback-ui",
+@@ -3415,13 +3415,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kClickToOpenPDFDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"direct-manipulation-stylus",
+ flag_descriptions::kDirectManipulationStylusName,
+ flag_descriptions::kDirectManipulationStylusDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kDirectManipulationStylus)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if !defined(OS_ANDROID)
+ {"remove-deprecared-gaia-signin-endpoint",
+@@ -3913,7 +3913,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(ash::features::kOverviewSwipeToClose)},
+ #endif // OS_CHROMEOS
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"ntp-backgrounds", flag_descriptions::kNtpBackgroundsName,
+ flag_descriptions::kNtpBackgroundsDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kNtpBackgrounds)},
+@@ -3929,7 +3929,7 @@ const FeatureEntry kFeatureEntries[] = {
+ {"ntp-ui-md", flag_descriptions::kNtpUIMdName,
+ flag_descriptions::kNtpUIMdDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kNtpUIMd)},
+-#endif // OS_WIN || OS_MACOSX || OS_LINUX
++#endif // OS_WIN || OS_MACOSX || OS_LINUX || OS_BSD
+
+ #if defined(OS_ANDROID)
+ {"enable-display-cutout-api", flag_descriptions::kDisplayCutoutAPIName,
diff --git a/devel/electron4/files/patch-chrome_browser_after__startup__task__utils.cc b/devel/electron4/files/patch-chrome_browser_after__startup__task__utils.cc
new file mode 100644
index 000000000000..39d31800fc01
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_after__startup__task__utils.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/after_startup_task_utils.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/after_startup_task_utils.cc
+@@ -105,7 +105,7 @@ void QueueTask(std::unique_ptr<AfterStartupTask> queue
+
+ void SetBrowserStartupIsComplete() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // CurrentProcessInfo::CreationTime() is not available on all platforms.
+ const base::Time process_creation_time =
+ base::CurrentProcessInfo::CreationTime();
diff --git a/devel/electron4/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc b/devel/electron4/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
new file mode 100644
index 000000000000..114dd80096a2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.orig 2019-03-15 06:25:31 UTC
++++ chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+@@ -59,7 +59,7 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForSch
+ return metrics::OmniboxInputType::QUERY;
+
+ case ExternalProtocolHandler::UNKNOWN: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Linux impl of GetApplicationNameForProtocol doesn't distinguish
+ // between URL schemes with handers and those without. This will
+ // make the default behaviour be search on Linux.
diff --git a/devel/electron4/files/patch-chrome_browser_background_background__mode__optimizer.cc b/devel/electron4/files/patch-chrome_browser_background_background__mode__optimizer.cc
new file mode 100644
index 000000000000..e1e880dcc8ce
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_background_background__mode__optimizer.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/background/background_mode_optimizer.cc.orig 2019-03-15 06:25:31 UTC
++++ chrome/browser/background/background_mode_optimizer.cc
+@@ -30,10 +30,10 @@ std::unique_ptr<BackgroundModeOptimizer> BackgroundMod
+ switches::kKeepAliveForTest))
+ return nullptr;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kBackgroundModeAllowRestart))
+ return base::WrapUnique(new BackgroundModeOptimizer());
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ return nullptr;
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_browser__resources.grd b/devel/electron4/files/patch-chrome_browser_browser__resources.grd
new file mode 100644
index 000000000000..43f8656579c0
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_browser__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/browser/browser_resources.grd.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/browser_resources.grd
+@@ -643,7 +643,7 @@
+ <include name="IDR_WELCOME_WIN10_PIN_WEBP" file="resources\welcome\pin.webp" type="BINDATA" />
+ </if>
+ <include name="IDR_SSL_ERROR_ASSISTANT_PB" file="${root_gen_dir}/chrome/browser/resources/ssl/ssl_error_assistant/ssl_error_assistant.pb" use_base_dir="false" type="BINDATA" />
+- <if expr="is_android or is_linux">
++ <if expr="is_android or is_posix">
+ <include name="IDR_SANDBOX_INTERNALS_HTML" file="resources\sandbox_internals\sandbox_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_SANDBOX_INTERNALS_JS" file="resources\sandbox_internals\sandbox_internals.js" type="BINDATA" compress="gzip" />
+ </if>
diff --git a/devel/electron4/files/patch-chrome_browser_chrome__browser__main.cc b/devel/electron4/files/patch-chrome_browser_chrome__browser__main.cc
new file mode 100644
index 000000000000..bebb15a6cc45
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_chrome__browser__main.cc
@@ -0,0 +1,42 @@
+--- chrome/browser/chrome_browser_main.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/chrome_browser_main.cc
+@@ -216,7 +216,7 @@
+ #include "chromeos/settings/cros_settings_names.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/first_run/upgrade_util_linux.h"
+ #endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
+
+@@ -257,7 +257,7 @@
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+ #endif
+
+@@ -1287,10 +1287,10 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ // Set the product channel for crash reports.
+ breakpad::SetChannelCrashKey(chrome::GetChannelName());
+-#endif // defined(OS_LINUX) || defined(OS_OPENBSD)
++#endif // defined(OS_LINUX)
+
+ #if defined(OS_MACOSX)
+ // Get the Keychain API to register for distributed notifications on the main
+@@ -1314,7 +1314,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ metrics::DesktopSessionDurationTracker::Initialize();
+ #endif
+ metrics::RendererUptimeTracker::Initialize();
diff --git a/devel/electron4/files/patch-chrome_browser_chrome__browser__main__linux.cc b/devel/electron4/files/patch-chrome_browser_chrome__browser__main__linux.cc
new file mode 100644
index 000000000000..24942d687e92
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_chrome__browser__main__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/chrome_browser_main_linux.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/chrome_browser_main_linux.cc
+@@ -88,12 +88,14 @@ void ChromeBrowserMainPartsLinux::PreProfileInit() {
+ void ChromeBrowserMainPartsLinux::PostProfileInit() {
+ ChromeBrowserMainPartsPosix::PostProfileInit();
+
++#if !defined(OS_BSD)
+ g_browser_process->metrics_service()->RecordBreakpadRegistration(
+ breakpad::IsCrashReporterEnabled());
++#endif
+ }
+
+ void ChromeBrowserMainPartsLinux::PostMainMessageLoopStart() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::DBusThreadManagerLinux::Initialize();
+ bluez::BluezDBusManager::Initialize(
+ bluez::DBusThreadManagerLinux::Get()->GetSystemBus(), false);
+@@ -103,7 +105,7 @@ void ChromeBrowserMainPartsLinux::PostMainMessageLoopS
+ }
+
+ void ChromeBrowserMainPartsLinux::PostDestroyThreads() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Shutdown();
+ bluez::DBusThreadManagerLinux::Shutdown();
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_chrome__browser__main__posix.cc b/devel/electron4/files/patch-chrome_browser_chrome__browser__main__posix.cc
new file mode 100644
index 000000000000..f8af65e24a39
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_chrome__browser__main__posix.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/chrome_browser_main_posix.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/chrome_browser_main_posix.cc
+@@ -139,7 +139,7 @@ void ChromeBrowserMainPartsPosix::PostMainMessageLoopS
+ void ChromeBrowserMainPartsPosix::ShowMissingLocaleMessageBox() {
+ #if defined(OS_CHROMEOS)
+ NOTREACHED(); // Should not ever happen on ChromeOS.
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+ #elif defined(USE_AURA)
diff --git a/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.cc b/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.cc
new file mode 100644
index 000000000000..868ebc9e08f3
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.cc
@@ -0,0 +1,83 @@
+--- chrome/browser/chrome_content_browser_client.cc.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/chrome_content_browser_client.cc
+@@ -334,7 +334,7 @@
+ #include "chromeos/services/secure_channel/secure_channel_service.h"
+ #include "components/user_manager/user_manager.h"
+ #include "services/service_manager/public/mojom/interface_provider_spec.mojom.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/chrome_browser_main_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "base/android/application_status_listener.h"
+@@ -373,7 +373,7 @@
+ #include "chrome/common/importer/profile_import.mojom.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/webshare/share_service_impl.h"
+ #endif
+
+@@ -387,7 +387,7 @@
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.h"
+ #endif
+
+@@ -1099,7 +1099,7 @@ content::BrowserMainParts* ChromeContentBrowserClient:
+ #elif defined(OS_CHROMEOS)
+ main_parts = new chromeos::ChromeBrowserMainPartsChromeos(
+ parameters, std::move(service_manifest_data_pack_));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ main_parts = new ChromeBrowserMainPartsLinux(
+ parameters, std::move(service_manifest_data_pack_));
+ #elif defined(OS_ANDROID)
+@@ -1119,7 +1119,7 @@ content::BrowserMainParts* ChromeContentBrowserClient:
+ // Construct additional browser parts. Stages are called in the order in
+ // which they are added.
+ #if defined(TOOLKIT_VIEWS)
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViewsLinux());
+ #else
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViews());
+@@ -1886,7 +1886,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ command_line->AppendSwitchASCII(switches::kMetricsClientID,
+ client_info->client_id);
+ }
+-#elif defined(OS_POSIX)
++#elif defined(OS_POSIX) && !defined(OS_BSD)
+ if (breakpad::IsCrashReporterEnabled()) {
+ std::string switch_value;
+ std::unique_ptr<metrics::ClientInfo> client_info =
+@@ -3335,7 +3335,7 @@ void ChromeContentBrowserClient::GetAdditionalFileSyst
+ }
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -4097,7 +4097,7 @@ void ChromeContentBrowserClient::InitWebContextInterfa
+ #if defined(OS_ANDROID)
+ frame_interfaces_parameterized_->AddInterface(base::Bind(
+ &ForwardToJavaWebContentsRegistry<blink::mojom::ShareService>));
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ frame_interfaces_->AddInterface(base::Bind(&ShareServiceImpl::Create));
+ #endif
+
+@@ -4609,7 +4609,7 @@ std::unique_ptr<content::OverlayWindow>
+ ChromeContentBrowserClient::CreateWindowForPictureInPicture(
+ content::PictureInPictureWindowController* controller) {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_CHROMEOS)
++ defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Note: content::OverlayWindow::Create() is defined by platform-specific
+ // implementation in chrome/browser/ui/views. This layering hack, which goes
+ // through //content and ContentBrowserClient, allows us to work around the
diff --git a/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.h b/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.h
new file mode 100644
index 000000000000..0c949eeb1dd7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_chrome__content__browser__client.h
@@ -0,0 +1,17 @@
+--- chrome/browser/chrome_content_browser_client.h.orig 2019-03-15 06:37:01 UTC
++++ chrome/browser/chrome_content_browser_client.h
+@@ -326,12 +326,12 @@ class ChromeContentBrowserClient : public content::Con
+ void OverridePageVisibilityState(
+ content::RenderFrameHost* render_frame_host,
+ blink::mojom::PageVisibilityState* visibility_state) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #if defined(OS_WIN)
+ bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override;
+ base::string16 GetAppContainerSidForSandboxType(
diff --git a/devel/electron4/files/patch-chrome_browser_defaults.cc b/devel/electron4/files/patch-chrome_browser_defaults.cc
new file mode 100644
index 000000000000..9ea4cc448f4b
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_defaults.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/defaults.cc.orig 2019-03-15 06:37:02 UTC
++++ chrome/browser/defaults.cc
+@@ -44,7 +44,7 @@ const bool kSyncAutoStarts = true;
+ const bool kSyncAutoStarts = false;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const bool kScrollEventChangesTab = true;
+ #else
+ const bool kScrollEventChangesTab = false;
diff --git a/devel/electron4/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc b/devel/electron4/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
new file mode 100644
index 000000000000..8e79fc5080ec
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/devtools/devtools_eye_dropper.cc.orig 2019-03-15 06:37:02 UTC
++++ chrome/browser/devtools/devtools_eye_dropper.cc
+@@ -211,7 +211,7 @@ void DevToolsEyeDropper::UpdateCursor() {
+ // magnified projection only with centered hotspot.
+ // Mac Retina requires cursor to be > 120px in order to render smoothly.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const float kCursorSize = 63;
+ const float kDiameter = 63;
+ const float kHotspotOffset = 32;
diff --git a/devel/electron4/files/patch-chrome_browser_diagnostics_diagnostics__writer.h b/devel/electron4/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
new file mode 100644
index 000000000000..2900fce0bf3c
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
@@ -0,0 +1,11 @@
+--- chrome/browser/diagnostics/diagnostics_writer.h.orig 2019-03-15 06:25:32 UTC
++++ chrome/browser/diagnostics/diagnostics_writer.h
+@@ -15,6 +15,8 @@ namespace diagnostics {
+ // Console base class used internally.
+ class SimpleConsole;
+
++#undef MACHINE
++
+ class DiagnosticsWriter : public DiagnosticsModel::Observer {
+ public:
+ // The type of formatting done by this writer.
diff --git a/devel/electron4/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc b/devel/electron4/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
new file mode 100644
index 000000000000..920ab89a7927
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/chrome_download_manager_delegate.cc.orig 2019-03-15 06:37:02 UTC
++++ chrome/browser/download/chrome_download_manager_delegate.cc
+@@ -1157,7 +1157,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+ target_info->is_filetype_handled_safely)
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (item->GetOriginalMimeType() == "application/x-x509-user-cert")
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+ #endif
+@@ -1177,7 +1177,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+
+ bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile(
+ const base::FilePath& path) {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) {
+ return !download_prefs_->ShouldOpenPdfInSystemReader();
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__commands.cc b/devel/electron4/files/patch-chrome_browser_download_download__commands.cc
new file mode 100644
index 000000000000..be854b235511
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__commands.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_commands.cc.orig 2019-03-15 06:37:02 UTC
++++ chrome/browser/download/download_commands.cc
+@@ -408,7 +408,7 @@ Browser* DownloadCommands::GetBrowser() const {
+ return browser_displayer.browser();
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ bool DownloadCommands::IsDownloadPdf() const {
+ base::FilePath path = download_item_->GetTargetFilePath();
+ return path.MatchesExtension(FILE_PATH_LITERAL(".pdf"));
+@@ -425,7 +425,7 @@ bool DownloadCommands::CanOpenPdfInSystemViewer() cons
+ return IsDownloadPdf() &&
+ (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date
+ : true);
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return IsDownloadPdf();
+ #endif
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__commands.h b/devel/electron4/files/patch-chrome_browser_download_download__commands.h
new file mode 100644
index 000000000000..d0069bff9595
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__commands.h
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_commands.h.orig 2019-03-15 06:37:02 UTC
++++ chrome/browser/download/download_commands.h
+@@ -42,7 +42,7 @@ class DownloadCommands {
+ bool IsCommandVisible(Command command) const;
+ void ExecuteCommand(Command command);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool IsDownloadPdf() const;
+ bool CanOpenPdfInSystemViewer() const;
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__prefs.cc b/devel/electron4/files/patch-chrome_browser_download_download__prefs.cc
new file mode 100644
index 000000000000..95d004f75f9c
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__prefs.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/download/download_prefs.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/download/download_prefs.cc
+@@ -62,7 +62,7 @@ namespace {
+ // Consider downloads 'dangerous' if they go to the home directory on Linux and
+ // to the desktop on any platform.
+ bool DownloadPathIsDangerous(const base::FilePath& download_path) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath home_dir = base::GetHomeDir();
+ if (download_path == home_dir) {
+ return true;
+@@ -141,7 +141,7 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profi
+ GetDefaultDownloadDirectoryForProfile()));
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ should_open_pdf_in_system_reader_ =
+ prefs->GetBoolean(prefs::kOpenPdfDownloadInSystemReader);
+ #endif
+@@ -238,7 +238,7 @@ void DownloadPrefs::RegisterProfilePrefs(
+ default_download_path);
+ registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ default_download_path);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
+ #endif
+ #if defined(OS_ANDROID)
+@@ -346,7 +346,7 @@ bool DownloadPrefs::IsDownloadPathManaged() const {
+ }
+
+ bool DownloadPrefs::IsAutoOpenUsed() const {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (ShouldOpenPdfInSystemReader())
+ return true;
+ #endif
+@@ -360,7 +360,7 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension(
+ return false;
+ DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
+ extension.erase(0, 1);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (base::FilePath::CompareEqualIgnoreCase(extension,
+ FILE_PATH_LITERAL("pdf")) &&
+ ShouldOpenPdfInSystemReader())
+@@ -397,7 +397,7 @@ void DownloadPrefs::DisableAutoOpenBasedOnExtension(
+ SaveAutoOpenState();
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void DownloadPrefs::SetShouldOpenPdfInSystemReader(bool should_open) {
+ if (should_open_pdf_in_system_reader_ == should_open)
+ return;
+@@ -418,7 +418,7 @@ bool DownloadPrefs::ShouldOpenPdfInSystemReader() cons
+ #endif
+
+ void DownloadPrefs::ResetAutoOpen() {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ SetShouldOpenPdfInSystemReader(false);
+ #endif
+ auto_open_.clear();
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__prefs.h b/devel/electron4/files/patch-chrome_browser_download_download__prefs.h
new file mode 100644
index 000000000000..5717555784b0
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__prefs.h
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_prefs.h.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/download/download_prefs.h
+@@ -99,7 +99,7 @@ class DownloadPrefs {
+ // Disables auto-open based on file extension.
+ void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Store the user preference to disk. If |should_open| is true, also disable
+ // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
+ void SetShouldOpenPdfInSystemReader(bool should_open);
+@@ -143,7 +143,7 @@ class DownloadPrefs {
+ AutoOpenCompareFunctor> AutoOpenSet;
+ AutoOpenSet auto_open_;
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool should_open_pdf_in_system_reader_;
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__query.cc b/devel/electron4/files/patch-chrome_browser_download_download__query.cc
new file mode 100644
index 000000000000..0ad35eb0e5a7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__query.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/download/download_query.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/download/download_query.cc
+@@ -27,7 +27,11 @@
+ #include "components/download/public/common/download_item.h"
+ #include "components/url_formatter/url_formatter.h"
+ #include "content/public/browser/content_browser_client.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using download::DownloadDangerType;
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__shelf__context__menu.cc b/devel/electron4/files/patch-chrome_browser_download_download__shelf__context__menu.cc
new file mode 100644
index 000000000000..211d19223467
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__shelf__context__menu.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_shelf_context_menu.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/download/download_shelf_context_menu.cc
+@@ -131,7 +131,7 @@ base::string16 DownloadShelfContextMenu::GetLabelForCo
+ : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
+ }
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (can_open_pdf_in_system_viewer) {
+ id = IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
diff --git a/devel/electron4/files/patch-chrome_browser_download_download__status__updater.cc b/devel/electron4/files/patch-chrome_browser_download_download__status__updater.cc
new file mode 100644
index 000000000000..c9ade82b8d78
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_download_download__status__updater.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_status_updater.cc.orig 2019-03-15 06:25:32 UTC
++++ chrome/browser/download/download_status_updater.cc
+@@ -13,7 +13,7 @@
+ #include "base/memory/ptr_util.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -136,7 +136,7 @@ void DownloadStatusUpdater::OnDownloadUpdated(content:
+ #if defined(OS_ANDROID) || (defined(USE_AURA) && !defined(OS_WIN))
+ void DownloadStatusUpdater::UpdateAppIconDownloadProgress(
+ download::DownloadItem* download) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ float progress = 0;
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_BUILD.gn b/devel/electron4/files/patch-chrome_browser_extensions_BUILD.gn
new file mode 100644
index 000000000000..4309728ca481
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_BUILD.gn
@@ -0,0 +1,15 @@
+--- chrome/browser/extensions/BUILD.gn.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/BUILD.gn
+@@ -1133,6 +1133,12 @@ jumbo_static_library("extensions") {
+ deps += [ "//chrome/common:service_process_mojom" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "api/image_writer_private/removable_storage_provider_linux.cc",
++ ]
++ }
++
+ if (enable_service_discovery) {
+ sources += [
+ "api/mdns/mdns_api.cc",
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_activity__log_activity__log.cc b/devel/electron4/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
new file mode 100644
index 000000000000..12e99def1055
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/extensions/activity_log/activity_log.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/activity_log/activity_log.cc
+@@ -50,7 +50,11 @@
+ #include "extensions/common/extension.h"
+ #include "extensions/common/extension_messages.h"
+ #include "extensions/common/one_shot_event.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ namespace constants = activity_log_constants;
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc b/devel/electron4/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
new file mode 100644
index 000000000000..7d3c7be34433
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc
+@@ -20,6 +20,7 @@ static base::LazyInstance<scoped_refptr<StorageDeviceL
+
+ void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
++#if !defined(OS_BSD)
+ if (g_test_device_list.Get().get() != nullptr) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+@@ -33,6 +34,9 @@ void RemovableStorageProvider::GetAllDevices(DeviceLis
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+ base::BindOnce(&RemovableStorageProvider::PopulateDeviceList),
+ std::move(callback));
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ // static
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h b/devel/electron4/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
new file mode 100644
index 000000000000..a3c6bd79d4f1
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/input_ime/input_ime_api.h.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/api/input_ime/input_ime_api.h
+@@ -31,7 +31,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_nonchromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc b/devel/electron4/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
new file mode 100644
index 000000000000..3bc5cf16b73d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+@@ -271,6 +271,8 @@ bool ChromeRuntimeAPIDelegate::GetPlatformInfo(Platfor
+ info->os = extensions::api::runtime::PLATFORM_OS_CROS;
+ } else if (strcmp(os, "linux") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_LINUX;
++ } else if (strcmp(os, "freebsd") == 0) {
++ info->os = extensions::api::runtime::PLATFORM_OS_FREEBSD;
+ } else if (strcmp(os, "openbsd") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_OPENBSD;
+ } else {
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc b/devel/electron4/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
new file mode 100644
index 000000000000..e55c9a16372d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/settings_private/prefs_util.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -127,7 +127,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUseCustomChromeFrame] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
+@@ -137,7 +137,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ // Appearance settings.
+ (*s_whitelist)[::prefs::kCurrentThemeID] =
+ settings_api::PrefType::PREF_TYPE_STRING;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUsesSystemTheme] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_bookmark__app__helper.cc b/devel/electron4/files/patch-chrome_browser_extensions_bookmark__app__helper.cc
new file mode 100644
index 000000000000..bd22e8d3769e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_bookmark__app__helper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/bookmark_app_helper.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/bookmark_app_helper.cc
+@@ -784,7 +784,7 @@ void BookmarkAppHelper::FinishInstallation(const Exten
+ #if !defined(OS_MACOSX)
+ #if !defined(OS_CHROMEOS)
+ web_app::ShortcutLocations creation_locations;
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ creation_locations.on_desktop = true;
+ #else
+ creation_locations.on_desktop = false;
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc b/devel/electron4/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..43c073c63006
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/browser_context_keyed_service_factories.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/browser_context_keyed_service_factories.cc
+@@ -57,7 +57,7 @@
+ #include "chrome/browser/chromeos/extensions/media_player_api.h"
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #include "chrome/browser/extensions/api/screenlock_private/screenlock_private_api.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #endif
+
+@@ -99,7 +99,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ extensions::InputImeAPI::GetFactoryInstance();
+ extensions::InputMethodAPI::GetFactoryInstance();
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ extensions::InputImeAPI::GetFactoryInstance();
+ #endif
+ extensions::LanguageSettingsPrivateDelegateFactory::GetInstance();
diff --git a/devel/electron4/files/patch-chrome_browser_extensions_external__provider__impl.cc b/devel/electron4/files/patch-chrome_browser_extensions_external__provider__impl.cc
new file mode 100644
index 000000000000..75705aeba174
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_extensions_external__provider__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/external_provider_impl.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/extensions/external_provider_impl.cc
+@@ -689,7 +689,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD,
+ oem_extension_creation_flags));
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ if (!profile->IsLegacySupervised()) {
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+@@ -717,7 +717,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ bundled_extension_creation_flags));
+
+ // Define a per-user source of external extensions.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD))
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS,
diff --git a/devel/electron4/files/patch-chrome_browser_first__run_first__run__internal__posix.cc b/devel/electron4/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
new file mode 100644
index 000000000000..07937c76de0d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/first_run/first_run_internal_posix.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/first_run/first_run_internal_posix.cc
+@@ -34,7 +34,7 @@ base::OnceClosure& GetBeforeShowFirstRunDialogHookForT
+ namespace internal {
+ namespace {
+
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ // Returns whether the first run dialog should be shown. This is only true for
+ // certain builds, and only if the user has not already set preferences. In a
+ // real, official-build first run, initializes the default metrics reporting if
+@@ -80,7 +80,7 @@ bool ShouldShowFirstRunDialog() {
+ } // namespace
+
+ void DoPostImportPlatformSpecificTasks(Profile* profile) {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (!ShouldShowFirstRunDialog())
+ return;
+
diff --git a/devel/electron4/files/patch-chrome_browser_flag__descriptions.cc b/devel/electron4/files/patch-chrome_browser_flag__descriptions.cc
new file mode 100644
index 000000000000..6af013954e73
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_flag__descriptions.cc
@@ -0,0 +1,36 @@
+--- chrome/browser/flag_descriptions.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/flag_descriptions.cc
+@@ -3411,7 +3411,7 @@ extern const char kEnableContinueReadingDescription[]
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kEnableInputImeApiName[] = "Enable Input IME API";
+ const char kEnableInputImeApiDescription[] =
+@@ -3425,7 +3425,7 @@ const char kWarnBeforeQuittingFlagDescription[] =
+
+ #endif // !defined(OS_CHROMEOS)
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+
+@@ -3438,13 +3438,13 @@ const char kAutomaticTabDiscardingDescription[] =
+
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kDirectManipulationStylusName[] = "Direct Manipulation Stylus";
+ const char kDirectManipulationStylusDescription[] =
+ "If enabled, Chrome will scroll web pages on stylus drag.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kExperimentalUiName[] = "Use all upcoming UI features";
+ const char kExperimentalUiDescription[] = "Use all upcoming UI features.";
diff --git a/devel/electron4/files/patch-chrome_browser_flag__descriptions.h b/devel/electron4/files/patch-chrome_browser_flag__descriptions.h
new file mode 100644
index 000000000000..c577865cbecf
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_flag__descriptions.h
@@ -0,0 +1,35 @@
+--- chrome/browser/flag_descriptions.h.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/flag_descriptions.h
+@@ -2087,7 +2087,7 @@ extern const char kEnableContinueReadingDescription[];
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kEnableInputImeApiName[];
+ extern const char kEnableInputImeApiDescription[];
+@@ -2099,7 +2099,7 @@ extern const char kWarnBeforeQuittingFlagDescription[]
+
+ #endif // !defined(OS_CHROMEOS)
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kExperimentalUiName[];
+ extern const char kExperimentalUiDescription[];
+@@ -2111,12 +2111,12 @@ extern const char kAutomaticTabDiscardingDescription[]
+
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kDirectManipulationStylusName[];
+ extern const char kDirectManipulationStylusDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Feature flags --------------------------------------------------------------
+
diff --git a/devel/electron4/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc b/devel/electron4/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
new file mode 100644
index 000000000000..76f0311801ac
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc
+@@ -38,10 +38,12 @@ void MTPDeviceMapService::RegisterMTPFileSystem(
+ // Note that this initializes the delegate asynchronously, but since
+ // the delegate will only be used from the IO thread, it is guaranteed
+ // to be created before use of it expects it to be there.
++#if !defined(OS_FREEBSD)
+ CreateMTPDeviceAsyncDelegate(
+ device_location, read_only,
+ base::Bind(&MTPDeviceMapService::AddAsyncDelegate,
+ base::Unretained(this), device_location, read_only));
++#endif
+ mtp_device_usage_map_[key] = 0;
+ }
+
diff --git a/devel/electron4/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc b/devel/electron4/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
new file mode 100644
index 000000000000..2d4468f1fdb6
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/media_galleries/media_file_system_registry.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/media_galleries/media_file_system_registry.cc
+@@ -739,7 +739,10 @@ class MediaFileSystemRegistry::MediaFileSystemContextI
+ // Constructor in 'private' section because depends on private class definition.
+ MediaFileSystemRegistry::MediaFileSystemRegistry()
+ : file_system_context_(new MediaFileSystemContextImpl) {
+- StorageMonitor::GetInstance()->AddObserver(this);
++ // This conditional is needed for shutdown. Destructors
++ // try to get the media file system registry.
++ if (StorageMonitor::GetInstance())
++ StorageMonitor::GetInstance()->AddObserver(this);
+ }
+
+ MediaFileSystemRegistry::~MediaFileSystemRegistry() {
diff --git a/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc b/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
new file mode 100644
index 000000000000..98e275669535
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_posix.cc.orig 2019-03-15 06:25:32 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_posix.cc
+@@ -10,6 +10,7 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <sys/time.h>
+
+ #include <algorithm>
+
+@@ -19,7 +20,7 @@
+ #include "chrome/browser/media/router/discovery/discovery_network_list_wifi.h"
+ #include "net/base/net_errors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include <netpacket/packet.h>
+ #else
+ #include <net/if_dl.h>
+@@ -28,7 +29,7 @@
+ namespace media_router {
+ namespace {
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ using sll = struct sockaddr_ll;
+ #define SOCKET_ARP_TYPE(s) ((s)->sll_hatype)
+ #define SOCKET_ADDRESS_LEN(s) ((s)->sll_halen)
diff --git a/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc b/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
new file mode 100644
index 000000000000..b7ce3914c722
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc.orig 2019-03-15 06:25:32 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc
+@@ -9,8 +9,6 @@
+ #include <sys/socket.h>
+ #include <sys/types.h>
+
+-#include <linux/wireless.h>
+-
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"
+ #include "net/base/network_interfaces_linux.h"
+@@ -20,6 +18,7 @@ namespace media_router {
+ bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) {
+ DCHECK(ssid_out);
+
++#if !defined(OS_BSD)
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+ if (!ioctl_socket.is_valid()) {
+ // AF_INET is for IPv4, so it may fail for IPv6-only hosts even when there
+@@ -41,6 +40,7 @@ bool MaybeGetWifiSSID(const std::string& if_name, std:
+ ssid_out->assign(ssid);
+ return true;
+ }
++#endif
+ return false;
+ }
+
diff --git a/devel/electron4/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc b/devel/electron4/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
new file mode 100644
index 000000000000..0165e42a8bd6
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
@@ -0,0 +1,23 @@
+--- chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc
+@@ -111,6 +111,12 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ bool incognito,
+ CreateRouteCallback callback) {
+ DCHECK(!base::ContainsKey(presentations_, presentation_id));
++#if defined(OS_BSD) // XXX
++ std::move(callback).Run(base::nullopt, nullptr,
++ std::string("Not implemented"),
++ RouteRequestResult::UNKNOWN_ERROR);
++ return;
++#else
+ base::Optional<Display> display = GetDisplayBySinkId(sink_id);
+ if (!display) {
+ std::move(callback).Run(base::nullopt, std::string("Display not found"),
+@@ -135,6 +141,7 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ presentation.receiver()->Start(presentation_id, GURL(media_source));
+ std::move(callback).Run(route, base::nullopt, RouteRequestResult::OK);
+ NotifyRouteObservers();
++#endif
+ }
+
+ void WiredDisplayMediaRouteProvider::JoinRoute(
diff --git a/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc b/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
new file mode 100644
index 000000000000..9e9f297ff3f3
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_event_log_uploader.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+@@ -29,7 +29,7 @@ constexpr size_t kExpectedMimeOverheadBytes = 1000; /
+ const char kProduct[] = "Chrome";
+ #elif defined(OS_MACOSX)
+ const char kProduct[] = "Chrome_Mac";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kProduct[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char kProduct[] = "Chrome_Android";
diff --git a/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc b/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
new file mode 100644
index 000000000000..7e8c0342f064
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_log_uploader.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/media/webrtc/webrtc_log_uploader.cc
+@@ -346,6 +346,8 @@ void WebRtcLogUploader::SetupMultipart(
+ const char product[] = "Chrome_Android";
+ #elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_memory__details.cc b/devel/electron4/files/patch-chrome_browser_memory__details.cc
new file mode 100644
index 000000000000..c6a7ff2081c3
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_memory__details.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/memory_details.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/memory_details.cc
+@@ -36,7 +36,7 @@
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/zygote_host_linux.h"
+ #endif
+
+@@ -341,7 +341,7 @@ void MemoryDetails::CollectChildInfoOnUIThread() {
+ process.titles.push_back(title);
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ if (service_manager::ZygoteHost::GetInstance()->IsZygotePid(process.pid)) {
+ process.process_type = content::PROCESS_TYPE_ZYGOTE;
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_memory__details__linux.cc b/devel/electron4/files/patch-chrome_browser_memory__details__linux.cc
new file mode 100644
index 000000000000..6a077d2a6054
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_memory__details__linux.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/memory_details_linux.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/memory_details_linux.cc
+@@ -70,8 +70,10 @@ ProcessData GetProcessDataMemoryInformation(
+
+ std::unique_ptr<base::ProcessMetrics> metrics(
+ base::ProcessMetrics::CreateProcessMetrics(pid));
++#if !defined(OS_BSD)
+ pmi.num_open_fds = metrics->GetOpenFdCount();
+ pmi.open_fds_soft_limit = metrics->GetOpenFdSoftLimit();
++#endif
+
+ process_data.processes.push_back(pmi);
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc b/devel/electron4/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
new file mode 100644
index 000000000000..e6500dd8bd28
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
@@ -0,0 +1,21 @@
+--- chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+@@ -44,7 +44,9 @@
+
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include <gnu/libc-version.h>
++#endif
+
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+@@ -52,7 +54,7 @@
+ #if defined(USE_X11)
+ #include "ui/base/x/x11_util.h"
+ #endif
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(USE_OZONE) || defined(USE_X11)
+ #include "ui/events/devices/input_device_event_observer.h"
diff --git a/devel/electron4/files/patch-chrome_browser_net_system__network__context__manager.cc b/devel/electron4/files/patch-chrome_browser_net_system__network__context__manager.cc
new file mode 100644
index 000000000000..6e1168cb74ea
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_net_system__network__context__manager.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/net/system_network_context_manager.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/net/system_network_context_manager.cc
+@@ -49,7 +49,7 @@
+ #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/chrome_paths_internal.h"
+ #include "chrome/common/chrome_switches.h"
+ #include "chrome/grit/chromium_strings.h"
+@@ -440,7 +440,7 @@ void SystemNetworkContextManager::OnNetworkServiceCrea
+ content::GetNetworkService()->ConfigureStubHostResolver(
+ stub_resolver_enabled, std::move(dns_over_https_servers));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ const base::CommandLine& command_line =
+ *base::CommandLine::ForCurrentProcess();
+
diff --git a/devel/electron4/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc b/devel/electron4/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
new file mode 100644
index 000000000000..846e2e575b29
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/password_manager/chrome_password_manager_client.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -76,7 +76,11 @@
+ #include "net/base/url_util.h"
+ #include "net/cert/cert_status_flags.h"
+ #include "services/metrics/public/cpp/ukm_recorder.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/url_constants.h"
+
+ #if defined(SAFE_BROWSING_DB_LOCAL)
diff --git a/devel/electron4/files/patch-chrome_browser_password__manager_password__store__factory.cc b/devel/electron4/files/patch-chrome_browser_password__manager_password__store__factory.cc
new file mode 100644
index 000000000000..e959a2b29cd3
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_password__manager_password__store__factory.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/password_manager/password_store_factory.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/password_manager/password_store_factory.cc
+@@ -283,7 +283,7 @@ PasswordStoreFactory::BuildServiceInstanceFor(
+ password_manager_util::CleanUserDataInBlacklistedCredentials(
+ ps.get(), profile->GetPrefs(), 60);
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ std::unique_ptr<password_manager::PasswordStoreSigninNotifier> notifier =
+ std::make_unique<password_manager::PasswordStoreSigninNotifierImpl>(
diff --git a/devel/electron4/files/patch-chrome_browser_platform__util.h b/devel/electron4/files/patch-chrome_browser_platform__util.h
new file mode 100644
index 000000000000..74227b410d94
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_platform__util.h
@@ -0,0 +1,11 @@
+--- chrome/browser/platform_util.h.orig 2019-03-15 06:25:33 UTC
++++ chrome/browser/platform_util.h
+@@ -40,7 +40,7 @@ enum OpenOperationResult {
+ enum OpenItemType {
+ OPEN_FILE,
+ OPEN_FOLDER,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SHOW_ITEM_IN_FOLDER
+ #endif
+ };
diff --git a/devel/electron4/files/patch-chrome_browser_plugins_plugins__resource__service.cc b/devel/electron4/files/patch-chrome_browser_plugins_plugins__resource__service.cc
new file mode 100644
index 000000000000..c209295e680e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_plugins_plugins__resource__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugins_resource_service.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/plugins/plugins_resource_service.cc
+@@ -62,7 +62,7 @@ GURL GetPluginsServerURL() {
+ filename = "plugins_win.json";
+ #elif defined(OS_CHROMEOS)
+ filename = "plugins_chromeos.json";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ filename = "plugins_linux.json";
+ #elif defined(OS_MACOSX)
+ filename = "plugins_mac.json";
diff --git a/devel/electron4/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc b/devel/electron4/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
new file mode 100644
index 000000000000..843b4b9b9d70
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/policy_prefs_browsertest.cc.orig 2019-03-15 06:37:03 UTC
++++ chrome/browser/policy/policy_prefs_browsertest.cc
+@@ -185,6 +185,8 @@ class PolicyTestCase {
+ const std::string os("chromeos");
+ #elif defined(OS_LINUX)
+ const std::string os("linux");
++#elif defined(OS_FREEBSD)
++ const std::string os("freebsd");
+ #else
+ #error "Unknown platform"
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_process__singleton__posix.cc b/devel/electron4/files/patch-chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..3a1240569215
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/process_singleton_posix.cc.orig 2019-03-15 06:37:04 UTC
++++ chrome/browser/process_singleton_posix.cc
+@@ -91,11 +91,11 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/process_singleton_dialog_linux.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -323,7 +323,7 @@ bool DisplayProfileInUseError(const base::FilePath& lo
+ if (g_disable_prompt)
+ return g_user_opted_unlock_in_use_profile;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::string16 relaunch_button_text = l10n_util::GetStringUTF16(
+ IDS_PROFILE_IN_USE_LINUX_RELAUNCH);
+ return ShowProcessSingletonDialog(error, relaunch_button_text);
+@@ -903,7 +903,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ SendRemoteProcessInteractionResultHistogram(REMOTE_PROCESS_SHUTTING_DOWN);
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, arraysize(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron4/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc b/devel/electron4/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
new file mode 100644
index 000000000000..b27db1832df7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc.orig 2019-03-15 06:37:04 UTC
++++ chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+@@ -305,7 +305,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ #if !defined(OS_ANDROID)
+ MediaGalleriesPreferencesFactory::GetInstance();
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetInstance();
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc b/devel/electron4/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
new file mode 100644
index 000000000000..991d0097d90d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_context_menu/render_view_context_menu.cc.orig 2019-03-15 06:37:04 UTC
++++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
+@@ -1471,7 +1471,7 @@ void RenderViewContextMenu::AppendEditableItems() {
+ // 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+ // We make an exception for OS X as context clicking will select the closest
+ // word. In this case both items are always shown.
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
+ IDS_CONTENT_CONTEXT_UNDO);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
+@@ -1513,7 +1513,7 @@ void RenderViewContextMenu::AppendLanguageSettings() {
+ if (!use_spelling)
+ return;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS,
+ IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS);
+ #else
+@@ -1777,7 +1777,7 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id)
+ case IDC_CHECK_SPELLING_WHILE_TYPING:
+ return prefs->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
+
+-#if !defined(OS_MACOSX) && defined(OS_POSIX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD) && defined(OS_POSIX)
+ // TODO(suzhe): this should not be enabled for password fields.
+ case IDC_INPUT_METHODS_MENU:
+ return true;
diff --git a/devel/electron4/files/patch-chrome_browser_renderer__preferences__util.cc b/devel/electron4/files/patch-chrome_browser_renderer__preferences__util.cc
new file mode 100644
index 000000000000..59b92a104338
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_renderer__preferences__util.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/renderer_preferences_util.cc.orig 2019-03-15 06:37:04 UTC
++++ chrome/browser/renderer_preferences_util.cc
+@@ -19,7 +19,7 @@
+ #include "third_party/blink/public/public_buildflags.h"
+ #include "third_party/skia/include/core/SkColor.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "ui/gfx/font_render_params.h"
+ #endif
+
+@@ -31,7 +31,7 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/themes/theme_service.h"
+ #include "chrome/browser/themes/theme_service_factory.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -130,7 +130,7 @@ void UpdateFromSystemSettings(content::RendererPrefere
+ prefs->caret_blink_interval = interval;
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
+@@ -152,7 +152,7 @@ void UpdateFromSystemSettings(content::RendererPrefere
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_BSD)
+ CR_DEFINE_STATIC_LOCAL(const gfx::FontRenderParams, params,
+ (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), NULL)));
+ prefs->should_antialias_text = params.antialiasing;
diff --git a/devel/electron4/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py b/devel/electron4/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
new file mode 100644
index 000000000000..2ac3cc6503c1
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
@@ -0,0 +1,19 @@
+--- chrome/browser/resources/safe_browsing/gen_file_type_proto.py.orig 2019-03-15 06:37:05 UTC
++++ chrome/browser/resources/safe_browsing/gen_file_type_proto.py
+@@ -31,6 +31,7 @@ def PlatformTypes():
+ "android": download_file_types_pb2.DownloadFileType.PLATFORM_ANDROID,
+ "chromeos": download_file_types_pb2.DownloadFileType.PLATFORM_CHROME_OS,
+ "linux": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
++ "bsd": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
+ "mac": download_file_types_pb2.DownloadFileType.PLATFORM_MAC,
+ "win": download_file_types_pb2.DownloadFileType.PLATFORM_WINDOWS,
+ }
+@@ -169,7 +170,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenera
+ 'Outfile must have a %d for version and %s for platform.')
+ parser.add_option('-t', '--type',
+ help='The platform type. One of android, chromeos, ' +
+- 'linux, mac, win')
++ 'linux, bsd, mac, win')
+
+ def AddExtraCommandLineArgsForVirtualEnvRun(self, opts, command):
+ if opts.type is not None:
diff --git a/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
new file mode 100644
index 000000000000..e458972839d7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
@@ -0,0 +1,20 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js.orig 2019-03-15 06:25:33 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js
+@@ -35,7 +35,7 @@ cr.define('settings', function() {
+
+ useDefaultTheme() {}
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ useSystemTheme() {}
+
+ // </if>
+@@ -93,7 +93,7 @@ cr.define('settings', function() {
+ chrome.send('useDefaultTheme');
+ }
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /** @override */
+ useSystemTheme() {
+ chrome.send('useSystemTheme');
diff --git a/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
new file mode 100644
index 000000000000..825d647d6af5
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
@@ -0,0 +1,29 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.html.orig 2019-03-15 06:37:05 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.html
+@@ -70,7 +70,7 @@
+ hidden="[[!pageVisibility.setTheme]]"
+ label="$i18n{themes}" sub-label="[[themeSublabel_]]"
+ on-click="openThemeUrl_"></cr-link-row>
+-<if expr="not is_linux or chromeos">
++<if expr="not is_posix or chromeos">
+ <template is="dom-if" if="[[prefs.extensions.theme.id.value]]">
+ <div class="separator"></div>
+ <paper-button id="useDefault" on-click="onUseDefaultTap_"
+@@ -79,7 +79,7 @@
+ </paper-button>
+ </template>
+ </if>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <div class="settings-row continuation"
+ hidden="[[!showThemesSecondary_(
+ prefs.extensions.theme.id.value, useSystemTheme_)]]"
+@@ -144,7 +144,7 @@
+ pref="{{prefs.bookmark_bar.show_on_all_tabs}}"
+ label="$i18n{showBookmarksBar}">
+ </settings-toggle-button>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <settings-toggle-button
+ class$="[[getFirst_(pageVisibility.bookmarksBar)]]"
+ pref="{{prefs.browser.custom_chrome_frame}}"
diff --git a/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
new file mode 100644
index 000000000000..4e517b41072b
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
@@ -0,0 +1,33 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.js.orig 2019-03-15 06:37:05 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.js
+@@ -120,7 +120,7 @@ Polymer({
+ 'defaultFontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
+ 'themeChanged_(prefs.extensions.theme.id.value, useSystemTheme_)',
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ // NOTE: this pref only exists on Linux.
+ 'useSystemThemePrefChanged_(prefs.extensions.theme.use_system.value)',
+ // </if>
+@@ -221,7 +221,7 @@ Polymer({
+ this.browserProxy_.useDefaultTheme();
+ },
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /**
+ * @param {boolean} useSystemTheme
+ * @private
+@@ -289,10 +289,10 @@ Polymer({
+ }
+
+ let i18nId;
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ i18nId = useSystemTheme ? 'systemTheme' : 'classicTheme';
+ // </if>
+- // <if expr="not is_linux or chromeos">
++ // <if expr="not is_bsd or chromeos">
+ i18nId = 'chooseFromWebStore';
+ // </if>
+ this.themeSublabel_ = this.i18n(i18nId);
diff --git a/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc b/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
new file mode 100644
index 000000000000..914efa8bcf54
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc.orig 2019-03-15 06:25:33 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc
+@@ -8,7 +8,12 @@
+
+ #include "base/hash.h"
+ #include "base/logging.h"
++//XXX(rene) needs shim headers?
++#if defined(USE_SYSTEM_PROTOBUF)
++#include <google/protobuf/message_lite.h>
++#else
+ #include "third_party/protobuf/src/google/protobuf/message_lite.h"
++#endif
+
+ namespace safe_browsing {
+
diff --git a/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc b/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
new file mode 100644
index 000000000000..08fbeae3f9fa
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc.orig 2019-03-15 06:37:05 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+@@ -715,7 +715,7 @@ void IncidentReportingService::OnEnvironmentDataCollec
+ environment_collection_pending_ = false;
+
+ // CurrentProcessInfo::CreationTime() is missing on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeDelta uptime =
+ first_incident_time_ - base::CurrentProcessInfo::CreationTime();
+ environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/devel/electron4/files/patch-chrome_browser_search_local__files__ntp__source.cc b/devel/electron4/files/patch-chrome_browser_search_local__files__ntp__source.cc
new file mode 100644
index 000000000000..eefe27620b10
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_search_local__files__ntp__source.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/search/local_files_ntp_source.cc.orig 2019-03-15 06:37:05 UTC
++++ chrome/browser/search/local_files_ntp_source.cc
+@@ -20,8 +20,13 @@
+ #include "build/build_config.h"
+ #include "chrome/common/url_constants.h"
+ #include "content/public/browser/url_data_source.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#include <re2/stringpiece.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
+ #include "third_party/re2/src/re2/stringpiece.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron4/files/patch-chrome_browser_speech_tts__controller__impl.cc b/devel/electron4/files/patch-chrome_browser_speech_tts__controller__impl.cc
new file mode 100644
index 000000000000..7856441802b2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_speech_tts__controller__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/speech/tts_controller_impl.cc.orig 2019-03-16 09:15:21 UTC
++++ chrome/browser/speech/tts_controller_impl.cc
+@@ -449,9 +449,13 @@ int TtsControllerImpl::QueueSize() {
+ }
+
+ TtsPlatformImpl* TtsControllerImpl::GetPlatformImpl() {
++#if defined(OS_BSD)
++ return NULL;
++#else
+ if (!platform_impl_)
+ platform_impl_ = TtsPlatformImpl::GetInstance();
+ return platform_impl_;
++#endif
+ }
+
+ int TtsControllerImpl::GetMatchingVoice(
diff --git a/devel/electron4/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc b/devel/electron4/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
new file mode 100644
index 000000000000..93a94c89453e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ssl/ssl_error_controller_client.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ssl/ssl_error_controller_client.cc
+@@ -77,7 +77,7 @@ void LaunchDateAndTimeSettingsImpl() {
+ #if defined(OS_ANDROID)
+ chrome::android::OpenDateAndTimeSettings();
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ struct ClockCommand {
+ const char* const pathname;
+ const char* const argument;
+@@ -219,7 +219,7 @@ void SSLErrorControllerClient::Proceed() {
+
+ bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
+- defined(OS_WIN)
++ defined(OS_WIN) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron4/files/patch-chrome_browser_sync_chrome__sync__client.cc b/devel/electron4/files/patch-chrome_browser_sync_chrome__sync__client.cc
new file mode 100644
index 000000000000..e6b2240632b0
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_sync_chrome__sync__client.cc
@@ -0,0 +1,19 @@
+--- chrome/browser/sync/chrome_sync_client.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/sync/chrome_sync_client.cc
+@@ -389,14 +389,14 @@ ChromeSyncClient::CreateDataTypeControllers(
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)));
+ #endif // BUILDFLAG(ENABLE_APP_LIST)
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Dictionary sync is enabled by default.
+ if (!disabled_types.Has(syncer::DICTIONARY)) {
+ controllers.push_back(std::make_unique<AsyncDirectoryTypeController>(
+ syncer::DICTIONARY, error_callback, this, syncer::GROUP_UI,
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::UI)));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.cc b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.cc
new file mode 100644
index 000000000000..0a3b8c4191c2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.cc
@@ -0,0 +1,56 @@
+--- chrome/browser/task_manager/sampling/task_group.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/sampling/task_group.cc
+@@ -32,9 +32,9 @@ const int kBackgroundRefreshTypesMask =
+ #if defined(OS_WIN)
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME |
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if BUILDFLAG(ENABLE_NACL)
+ REFRESH_TYPE_NACL |
+ #endif // BUILDFLAG(ENABLE_NACL)
+@@ -109,9 +109,9 @@ TaskGroup::TaskGroup(
+ #if BUILDFLAG(ENABLE_NACL)
+ nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown),
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ open_fd_count_(-1),
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ idle_wakeups_per_second_(-1),
+ gpu_memory_has_duplicates_(false),
+ is_backgrounded_(false),
+@@ -125,10 +125,10 @@ TaskGroup::TaskGroup(
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnOpenFdCountRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnProcessPriorityDone,
+ weak_ptr_factory_.GetWeakPtr()));
+
+@@ -288,14 +288,14 @@ void TaskGroup::OnRefreshNaClDebugStubPortDone(int nac
+ }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void TaskGroup::OnOpenFdCountRefreshDone(int open_fd_count) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ open_fd_count_ = open_fd_count;
+ OnBackgroundRefreshTypeFinished(REFRESH_TYPE_FD_COUNT);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ void TaskGroup::OnCpuRefreshDone(double cpu_usage) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.h b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.h
new file mode 100644
index 000000000000..ea7140bf7b1d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group.h
@@ -0,0 +1,39 @@
+--- chrome/browser/task_manager/sampling/task_group.h.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/sampling/task_group.h
+@@ -103,9 +103,9 @@ class TaskGroup {
+ int nacl_debug_stub_port() const { return nacl_debug_stub_port_; }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int open_fd_count() const { return open_fd_count_; }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ int idle_wakeups_per_second() const { return idle_wakeups_per_second_; }
+
+@@ -119,9 +119,9 @@ class TaskGroup {
+ void RefreshNaClDebugStubPort(int child_process_unique_id);
+ void OnRefreshNaClDebugStubPortDone(int port);
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void OnOpenFdCountRefreshDone(int open_fd_count);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ void OnCpuRefreshDone(double cpu_usage);
+ void OnSwappedMemRefreshDone(int64_t swapped_mem_bytes);
+@@ -181,10 +181,10 @@ class TaskGroup {
+ #if BUILDFLAG(ENABLE_NACL)
+ int nacl_debug_stub_port_;
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The number of file descriptors currently open by the process.
+ int open_fd_count_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ int idle_wakeups_per_second_;
+ bool gpu_memory_has_duplicates_;
+ bool is_backgrounded_;
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
new file mode 100644
index 000000000000..6dbd4d16c0c2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
@@ -0,0 +1,44 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.cc
+@@ -42,9 +42,9 @@ TaskGroupSampler::TaskGroupSampler(
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_swapped_mem_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority)
+ : process_(std::move(process)),
+ process_metrics_(CreateProcessMetrics(process_.Handle())),
+@@ -52,9 +52,9 @@ TaskGroupSampler::TaskGroupSampler(
+ on_cpu_refresh_callback_(on_cpu_refresh),
+ on_swapped_mem_refresh_callback_(on_swapped_mem_refresh),
+ on_idle_wakeups_callback_(on_idle_wakeups),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ on_open_fd_count_callback_(on_open_fd_count),
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ on_process_priority_callback_(on_process_priority) {
+ DCHECK(blocking_pool_runner.get());
+
+@@ -85,7 +85,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ on_swapped_mem_refresh_callback_);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_IDLE_WAKEUPS,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -94,7 +94,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshIdleWakeupsPerSecond, this),
+ on_idle_wakeups_callback_);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_LINUX)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_FD_COUNT,
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
new file mode 100644
index 000000000000..491defc3c900
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
@@ -0,0 +1,50 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.h.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.h
+@@ -32,9 +32,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ using OnCpuRefreshCallback = base::Callback<void(double)>;
+ using OnSwappedMemRefreshCallback = base::Callback<void(int64_t)>;
+ using OnIdleWakeupsCallback = base::Callback<void(int)>;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ using OnOpenFdCountCallback = base::Callback<void(int)>;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ using OnProcessPriorityCallback = base::Callback<void(bool)>;
+
+ TaskGroupSampler(
+@@ -43,9 +43,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_memory_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority);
+
+ // Refreshes the expensive process' stats (CPU usage, memory usage, and idle
+@@ -60,9 +60,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ double RefreshCpuUsage();
+ int64_t RefreshSwappedMem();
+ int RefreshIdleWakeupsPerSecond();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int RefreshOpenFdCount();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ bool RefreshProcessPriority();
+
+ // The process that holds the handle that we own so that we can use it for
+@@ -80,9 +80,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback on_cpu_refresh_callback_;
+ const OnSwappedMemRefreshCallback on_swapped_mem_refresh_callback_;
+ const OnIdleWakeupsCallback on_idle_wakeups_callback_;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const OnOpenFdCountCallback on_open_fd_count_callback_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ const OnProcessPriorityCallback on_process_priority_callback_;
+
+ // To assert we're running on the correct thread.
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
new file mode 100644
index 000000000000..59c2d87c6034
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/sampling/task_manager_impl.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/sampling/task_manager_impl.cc
+@@ -205,11 +205,11 @@ void TaskManagerImpl::GetUSERHandles(TaskId task_id,
+ }
+
+ int TaskManagerImpl::GetOpenFdCount(TaskId task_id) const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return GetTaskGroupByTaskId(task_id)->open_fd_count();
+ #else
+ return -1;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool TaskManagerImpl::IsTaskOnBackgroundedProcess(TaskId task_id) const {
diff --git a/devel/electron4/files/patch-chrome_browser_task__manager_task__manager__observer.h b/devel/electron4/files/patch-chrome_browser_task__manager_task__manager__observer.h
new file mode 100644
index 000000000000..8c186996133e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_task__manager_task__manager__observer.h
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/task_manager_observer.h.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/task_manager/task_manager_observer.h
+@@ -43,11 +43,11 @@ enum RefreshType {
+ // or backgrounded.
+ REFRESH_TYPE_PRIORITY = 1 << 13,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // For observers interested in getting the number of open file descriptors of
+ // processes.
+ REFRESH_TYPE_FD_COUNT = 1 << 14,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ REFRESH_TYPE_MEMORY_STATE = 1 << 15,
+ REFRESH_TYPE_KEEPALIVE_COUNT = 1 << 16,
diff --git a/devel/electron4/files/patch-chrome_browser_tracing_crash__service__uploader.cc b/devel/electron4/files/patch-chrome_browser_tracing_crash__service__uploader.cc
new file mode 100644
index 000000000000..54697c6f92f2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_tracing_crash__service__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/tracing/crash_service_uploader.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/tracing/crash_service_uploader.cc
+@@ -158,6 +158,8 @@ void TraceCrashServiceUploader::DoCompressOnBackground
+ const char product[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_browser__command__controller.cc b/devel/electron4/files/patch-chrome_browser_ui_browser__command__controller.cc
new file mode 100644
index 000000000000..aff726887f56
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_browser__command__controller.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/browser_command_controller.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/browser_command_controller.cc
+@@ -77,7 +77,7 @@
+ #include "chrome/browser/ui/browser_commands_chromeos.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+
+@@ -210,7 +210,7 @@ bool BrowserCommandController::IsReservedCommandOrKey(
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // If this key was registered by the user as a content editing hotkey, then
+ // it is not reserved.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+@@ -415,7 +415,7 @@ bool BrowserCommandController::ExecuteCommandWithDispo
+ break;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case IDC_MINIMIZE_WINDOW:
+ browser_->window()->Minimize();
+ break;
+@@ -840,7 +840,7 @@ void BrowserCommandController::InitCommandState() {
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_2, true);
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_3, true);
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ command_updater_.UpdateCommandEnabled(IDC_MINIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_MAXIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_RESTORE_WINDOW, true);
diff --git a/devel/electron4/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc b/devel/electron4/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
new file mode 100644
index 000000000000..9a8cdc88b4e1
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc.orig 2019-03-15 06:25:34 UTC
++++ chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc
+@@ -16,7 +16,7 @@
+
+ // NOTE(koz): Linux doesn't use the thick shadowed border, so we add padding
+ // here.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const int ExclusiveAccessBubble::kPaddingPx = 8;
+ #else
+ const int ExclusiveAccessBubble::kPaddingPx = 15;
diff --git a/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine.h b/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine.h
new file mode 100644
index 000000000000..fc56cc3e5dd1
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine.h.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/input_method/input_method_engine.h
+@@ -27,7 +27,7 @@ class InputMethodEngine : public InputMethodEngineBase
+
+ // ui::IMEEngineHandlerInterface:
+ bool IsActive() const override;
+- std::string GetExtensionId() const override;
++ std::string GetExtensionId() const;
+
+ // Creates and shows the IME window.
+ // Returns 0 for errors and |error| will contains the error message.
diff --git a/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc b/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
new file mode 100644
index 000000000000..bcac258b0186
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine_base.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/input_method/input_method_engine_base.cc
+@@ -31,7 +31,7 @@
+ #include "ui/base/ime/chromeos/ime_keymap.h"
+ #elif defined(OS_WIN)
+ #include "ui/events/keycodes/keyboard_codes_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/keycodes/keyboard_codes_posix.h"
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc b/devel/electron4/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
new file mode 100644
index 000000000000..c63c49612184
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
@@ -0,0 +1,10 @@
+--- chrome/browser/ui/libgtkui/print_dialog_gtk.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/libgtkui/print_dialog_gtk.cc
+@@ -350,6 +350,7 @@ void PrintDialogGtk2::ShowDialog(
+ // Since we only generate PDF, only show printers that support PDF.
+ // TODO(thestig) Add more capabilities to support?
+ GtkPrintCapabilities cap = static_cast<GtkPrintCapabilities>(
++ GTK_PRINT_CAPABILITY_GENERATE_PS |
+ GTK_PRINT_CAPABILITY_GENERATE_PDF |
+ GTK_PRINT_CAPABILITY_PAGE_SET |
+ GTK_PRINT_CAPABILITY_COPIES |
diff --git a/devel/electron4/files/patch-chrome_browser_ui_sad__tab.cc b/devel/electron4/files/patch-chrome_browser_ui_sad__tab.cc
new file mode 100644
index 000000000000..3bebb0c90bb0
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_sad__tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/sad_tab.cc.orig 2019-03-15 06:25:34 UTC
++++ chrome/browser/ui/sad_tab.cc
+@@ -180,7 +180,7 @@ std::vector<int> SadTab::GetSubMessages() {
+ // Only show incognito suggestion if not already in Incognito mode.
+ if (!web_contents_->GetBrowserContext()->IsOffTheRecord())
+ message_ids.insert(message_ids.begin(), IDS_SAD_TAB_RELOAD_INCOGNITO);
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Note: on macOS, Linux and ChromeOS, the first bullet is either one of
+ // IDS_SAD_TAB_RELOAD_CLOSE_TABS or IDS_SAD_TAB_RELOAD_CLOSE_NOTABS
+ // followed by one of the above suggestions.
diff --git a/devel/electron4/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc b/devel/electron4/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
new file mode 100644
index 000000000000..6fcff97a10b7
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/startup/bad_flags_prompt.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/startup/bad_flags_prompt.cc
+@@ -82,7 +82,7 @@ static const char* kBadFlags[] = {
+ extensions::switches::kExtensionsOnChromeURLs,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
+ // http://crbug.com/327295
+ switches::kEnableSpeechDispatcher,
diff --git a/devel/electron4/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc b/devel/electron4/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
new file mode 100644
index 000000000000..c9967ce7d047
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
@@ -0,0 +1,22 @@
+--- chrome/browser/ui/startup/startup_browser_creator.cc.orig 2019-04-06 12:09:25 UTC
++++ chrome/browser/ui/startup/startup_browser_creator.cc
+@@ -79,7 +79,7 @@
+ #include "chrome/browser/ui/user_manager.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+
+@@ -630,8 +630,10 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
+ }
+ #endif // OS_CHROMEOS
+
++#if 0 /* XXX */
+ #if defined(TOOLKIT_VIEWS) && defined(USE_X11)
+ ui::TouchFactory::SetTouchDeviceListFromCommandLine();
++#endif
+ #endif
+
+ #if defined(OS_MACOSX)
diff --git a/devel/electron4/files/patch-chrome_browser_ui_tab__helpers.cc b/devel/electron4/files/patch-chrome_browser_ui_tab__helpers.cc
new file mode 100644
index 000000000000..ab2fe9b7316f
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_tab__helpers.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/tab_helpers.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/tab_helpers.cc
+@@ -306,7 +306,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_con
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopSessionDurationObserver::CreateForWebContents(web_contents);
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc b/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
new file mode 100644
index 000000000000..90711ca1c235
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/ui/task_manager/task_manager_columns.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/task_manager/task_manager_columns.cc
+@@ -93,10 +93,10 @@ const TableColumnData kColumns[] = {
+ arraysize("100000") * kCharWidth, -1, true, false, false},
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
+ arraysize("999") * kCharWidth, -1, true, false, false},
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN, ui::TableColumn::LEFT, -1, 0,
+ arraysize("background") * kCharWidth, -1, true, true, false},
+ {IDS_TASK_MANAGER_MEMORY_STATE_COLUMN, ui::TableColumn::LEFT, -1, 0,
diff --git a/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc b/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
new file mode 100644
index 000000000000..6cc5d9e0db9d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
@@ -0,0 +1,50 @@
+--- chrome/browser/ui/task_manager/task_manager_table_model.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/task_manager/task_manager_table_model.cc
+@@ -457,13 +457,13 @@ base::string16 TaskManagerTableModel::GetText(int row,
+ ? stringifier_->backgrounded_string()
+ : stringifier_->foregrounded_string();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
+ return fd_count >= 0 ? base::FormatNumber(fd_count)
+ : stringifier_->n_a_string();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ case IDS_TASK_MANAGER_MEMORY_STATE_COLUMN: {
+ return stringifier_->GetMemoryStateText(
+@@ -623,7 +623,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ return BooleanCompare(is_proc1_bg, is_proc2_bg);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int proc1_fd_count =
+ observed_task_manager()->GetOpenFdCount(tasks_[row1]);
+@@ -631,7 +631,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ observed_task_manager()->GetOpenFdCount(tasks_[row2]);
+ return ValueCompare(proc1_fd_count, proc2_fd_count);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
+@@ -797,11 +797,11 @@ void TaskManagerTableModel::UpdateRefreshTypes(int col
+ type = REFRESH_TYPE_KEEPALIVE_COUNT;
+ break;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
+ type = REFRESH_TYPE_FD_COUNT;
+ break;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
diff --git a/devel/electron4/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc b/devel/electron4/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
new file mode 100644
index 000000000000..e9018ba99f40
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/toolbar/app_menu_model.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/toolbar/app_menu_model.cc
+@@ -664,7 +664,7 @@ bool AppMenuModel::IsCommandIdVisible(int command_id)
+ case IDC_UPGRADE_DIALOG:
+ return browser_defaults::kShowUpgradeMenuItem &&
+ UpgradeDetector::GetInstance()->notify_upgrade();
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ case IDC_BOOKMARK_PAGE:
+ return !chrome::ShouldRemoveBookmarkThisPageUI(browser_->profile());
+ case IDC_BOOKMARK_ALL_TABS:
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_accelerator__table.cc b/devel/electron4/files/patch-chrome_browser_ui_views_accelerator__table.cc
new file mode 100644
index 000000000000..96f5c5e0c33c
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_accelerator__table.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/accelerator_table.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/accelerator_table.cc
+@@ -49,7 +49,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR, IDC_SAVE_PAGE},
+ {ui::VKEY_9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT},
+@@ -79,7 +79,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_NUMPAD7, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_6},
+ {ui::VKEY_8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1},
+@@ -121,7 +121,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_F11, ui::EF_NONE, IDC_FULLSCREEN},
+
+ // Platform-specific key maps.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK},
+ {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD},
+ {ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME},
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc b/devel/electron4/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
new file mode 100644
index 000000000000..9979195f9e1a
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
+@@ -38,7 +38,7 @@
+ #include "ui/wm/core/wm_state.h"
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -48,7 +48,7 @@
+ #include "chrome/grit/generated_resources.h"
+ #include "content/public/common/content_switches.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ #if defined(OS_CHROMEOS)
+ #include "ash/public/interfaces/constants.mojom.h"
+@@ -119,7 +119,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ }
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // On the Linux desktop, we want to prevent the user from logging in as root,
+ // so that we don't destroy the profile. Now that we have some minimal ui
+ // initialized, check to see if we're running as root and bail if we are.
+@@ -150,7 +150,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ base::RunLoop().RunUntilIdle();
+
+ exit(EXIT_FAILURE);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ }
+
+ void ChromeBrowserMainExtraPartsViews::ServiceManagerConnectionStarted(
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_chrome__views__delegate.h b/devel/electron4/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
new file mode 100644
index 000000000000..8cf88d9a305a
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/chrome_views_delegate.h.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/chrome_views_delegate.h
+@@ -43,7 +43,7 @@ class ChromeViewsDelegate : public views::ViewsDelegat
+ HICON GetSmallWindowIcon() const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ const base::Closure& callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ bool WindowManagerProvidesTitleBar(bool maximized) override;
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_first__run__dialog.cc b/devel/electron4/files/patch-chrome_browser_ui_views_first__run__dialog.cc
new file mode 100644
index 000000000000..39f6c785ac65
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_first__run__dialog.cc
@@ -0,0 +1,24 @@
+--- chrome/browser/ui/views/first_run_dialog.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/first_run_dialog.cc
+@@ -37,8 +37,10 @@
+ namespace {
+
+ void InitCrashReporterIfEnabled(bool enabled) {
++#if !defined(OS_BSD)
+ if (enabled)
+ breakpad::InitCrashReporter(std::string());
++#endif
+ }
+
+ } // namespace
+@@ -111,8 +113,10 @@ views::View* FirstRunDialog::CreateExtraView() {
+ bool FirstRunDialog::Accept() {
+ GetWidget()->Hide();
+
++#if !defined(OS_BSD)
+ ChangeMetricsReportingStateWithReply(report_crashes_->checked(),
+ base::Bind(&InitCrashReporterIfEnabled));
++#endif
+
+ if (make_default_->checked())
+ shell_integration::SetAsDefaultBrowser();
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__frame.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
new file mode 100644
index 000000000000..13879e56699e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_frame.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/frame/browser_frame.cc
+@@ -36,7 +36,7 @@
+ #include "components/user_manager/user_manager.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/views/frame/browser_command_handler_linux.h"
+ #endif
+
+@@ -90,7 +90,7 @@ void BrowserFrame::InitBrowserFrame() {
+ non_client_view()->set_context_menu_controller(this);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ browser_command_handler_.reset(new BrowserCommandHandlerLinux(browser_view_));
+ #endif
+ }
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
new file mode 100644
index 000000000000..12984936491c
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc.orig 2019-03-15 06:37:06 UTC
++++ chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+@@ -13,7 +13,7 @@
+ #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
new file mode 100644
index 000000000000..1146aac1b835
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+@@ -41,7 +41,7 @@
+ #include "ui/views/window/frame_background.h"
+ #include "ui/views/window/window_shape.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/controls/menu/menu_runner.h"
+ #endif
+
+@@ -326,7 +326,7 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Butt
+ void OpaqueBrowserFrameView::OnMenuButtonClicked(views::MenuButton* source,
+ const gfx::Point& point,
+ const ui::Event* event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ views::MenuRunner menu_runner(frame()->GetSystemMenuModel(),
+ views::MenuRunner::HAS_MNEMONICS);
+ menu_runner.RunMenuAt(browser_view()->GetWidget(), window_icon_,
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__layout.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__layout.cc
new file mode 100644
index 000000000000..75b8b5d11701
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__layout.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc
+@@ -20,7 +20,7 @@ namespace {
+
+ constexpr int kCaptionButtonHeight = 18;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Default spacing around window caption buttons.
+ constexpr int kCaptionButtonSpacing = 2;
+ #else
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
new file mode 100644
index 000000000000..764b5983f1e3
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc
+@@ -10,7 +10,7 @@ bool OpaqueBrowserFrameViewPlatformSpecific::IsUsingSy
+ return false;
+ }
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_FREEBSD)
+
+ // static
+ OpaqueBrowserFrameViewPlatformSpecific*
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
new file mode 100644
index 000000000000..11d8e2ee4a7a
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/system_menu_model_builder.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_builder.cc
+@@ -89,7 +89,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForBrowser
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddCheckItemWithStringId(IDC_USE_SYSTEM_TITLE_BAR,
+ IDS_SHOW_WINDOW_DECORATIONS_MENU);
+@@ -125,7 +125,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForAppOrPo
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_CLOSE_WINDOW, IDS_CLOSE);
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc b/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
new file mode 100644
index 000000000000..1f9e0d69a14d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/system_menu_model_delegate.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_delegate.cc
+@@ -15,7 +15,7 @@
+ #include "components/sessions/core/tab_restore_service.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/pref_names.h"
+ #include "components/prefs/pref_service.h"
+ #endif
+@@ -30,7 +30,7 @@ SystemMenuModelDelegate::SystemMenuModelDelegate(
+ SystemMenuModelDelegate::~SystemMenuModelDelegate() {}
+
+ bool SystemMenuModelDelegate::IsCommandIdChecked(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (command_id == IDC_USE_SYSTEM_TITLE_BAR) {
+ PrefService* prefs = browser_->profile()->GetPrefs();
+ return !prefs->GetBoolean(prefs::kUseCustomChromeFrame);
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc b/devel/electron4/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
new file mode 100644
index 000000000000..2e3abc4654c4
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/new_tab_button.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/tabs/new_tab_button.cc
+@@ -94,7 +94,7 @@ NewTabButton::NewTabButton(TabStrip* tab_strip, views:
+ tab_strip_(tab_strip),
+ is_incognito_(tab_strip->IsIncognito()) {
+ set_animate_on_state_change(true);
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_triggerable_event_flags(triggerable_event_flags() |
+ ui::EF_MIDDLE_MOUSE_BUTTON);
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc b/devel/electron4/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
new file mode 100644
index 000000000000..537d5166dbbd
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/tabs/tab_drag_controller.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/views/tabs/tab_drag_controller.cc
+@@ -394,7 +394,7 @@ void TabDragController::Init(TabStrip* source_tabstrip
+ // synchronous on desktop Linux, so use that.
+ // - Chrome OS
+ // Releasing capture on Ash cancels gestures so avoid it.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ can_release_capture_ = false;
+ #endif
+ start_point_in_screen_ = gfx::Point(source_tab_offset, mouse_offset.y());
+@@ -762,7 +762,7 @@ TabDragController::DragBrowserToNewTabStrip(TabStrip*
+ else
+ target_tabstrip->GetWidget()->SetCapture(attached_tabstrip_);
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) || defined(OS_BSD)
+ // EndMoveLoop is going to snap the window back to its original location.
+ // Hide it so users don't see this. Hiding a window in Linux aura causes
+ // it to lose capture so skip it.
+@@ -2043,7 +2043,7 @@ TabDragController::Liveness TabDragController::GetLoca
+ if (dragged_window)
+ exclude.insert(dragged_window);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Exclude windows which are pending deletion via Browser::TabStripEmpty().
+ // These windows can be returned in the Linux Aura port because the browser
+ // window which was used for dragging is not hidden once all of its tabs are
diff --git a/devel/electron4/files/patch-chrome_browser_ui_webui_about__ui.cc b/devel/electron4/files/patch-chrome_browser_ui_webui_about__ui.cc
new file mode 100644
index 000000000000..4a31d8074cb8
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_webui_about__ui.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/about_ui.cc.orig 2019-03-15 06:37:07 UTC
++++ chrome/browser/ui/webui/about_ui.cc
+@@ -391,7 +391,7 @@ std::string ChromeURLs() {
+ return html;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string AboutLinuxProxyConfig() {
+ std::string data;
+ AppendHeader(&data, 0,
+@@ -446,7 +446,7 @@ void AboutUIHTMLSource::StartDataRequest(
+ .GetRawDataResource(idr)
+ .as_string();
+ }
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc b/devel/electron4/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
new file mode 100644
index 000000000000..9c681861daaa
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
@@ -0,0 +1,49 @@
+--- chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig 2019-03-15 06:37:08 UTC
++++ chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -185,11 +185,11 @@
+ #include "chrome/browser/ui/webui/welcome_win10_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/sandbox_internals_ui.h"
+ #endif
+
+@@ -317,7 +317,7 @@ bool IsAboutUI(const GURL& url) {
+ #if !defined(OS_ANDROID)
+ || url.host_piece() == chrome::kChromeUITermsHost
+ #endif
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ || url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -566,7 +566,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ if (url.host_piece() == chrome::kChromeUINaClHost)
+ return &NewWebUI<NaClUI>;
+ #endif
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUITabModalConfirmDialogHost)
+ return &NewWebUI<ConstrainedWebDialogUI>;
+ #endif
+@@ -625,12 +625,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ return &NewWebUI<CastUI>;
+ }
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUISandboxHost) {
+ return &NewWebUI<SandboxInternalsUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIDiscardsHost)
+ return &NewWebUI<DiscardsUI>;
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
new file mode 100644
index 000000000000..438f21384b7b
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.cc.orig 2019-03-15 06:25:35 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.cc
+@@ -31,7 +31,7 @@ void AppearanceHandler::RegisterMessages() {
+ "useDefaultTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme,
+ base::Unretained(this)));
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ web_ui()->RegisterMessageCallback(
+ "useSystemTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme,
+@@ -59,7 +59,7 @@ void AppearanceHandler::HandleUseDefaultTheme(const ba
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
+ if (profile_->IsSupervised())
+ NOTREACHED();
diff --git a/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
new file mode 100644
index 000000000000..27797f1e5260
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.h.orig 2019-03-15 06:25:35 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.h
+@@ -36,7 +36,7 @@ class AppearanceHandler : public SettingsPageUIHandler
+ // Changes the UI theme of the browser to the default theme.
+ void HandleUseDefaultTheme(const base::ListValue* args);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Changes the UI theme of the browser to the system (GTK+) theme.
+ void HandleUseSystemTheme(const base::ListValue* args);
+ #endif
diff --git a/devel/electron4/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc
new file mode 100644
index 000000000000..3bd2c7ff234f
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc.orig 2019-03-15 06:37:08 UTC
++++ chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
+@@ -442,7 +442,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
+ {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
+ {"themes", IDS_SETTINGS_THEMES},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
+ {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
+ {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
+@@ -460,7 +460,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"openWallpaperApp", IDS_SETTINGS_OPEN_WALLPAPER_APP},
+ {"setWallpaper", IDS_SETTINGS_SET_WALLPAPER},
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron4/files/patch-chrome_common_BUILD.gn b/devel/electron4/files/patch-chrome_common_BUILD.gn
new file mode 100644
index 000000000000..438ad94c398d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_BUILD.gn
@@ -0,0 +1,13 @@
+--- chrome/common/BUILD.gn.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/BUILD.gn
+@@ -295,6 +295,10 @@ static_library("common") {
+ public_deps += [ "//ppapi/shared_impl" ]
+ }
+
++ if (is_bsd) {
++ sources -= [ "component_flash_hint_file_linux.cc" ]
++ }
++
+ if (enable_extensions) {
+ sources += [
+ "cast_messages.cc",
diff --git a/devel/electron4/files/patch-chrome_common_chrome__features.cc b/devel/electron4/files/patch-chrome_common_chrome__features.cc
new file mode 100644
index 000000000000..399a5be0b46e
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__features.cc
@@ -0,0 +1,45 @@
+--- chrome/common/chrome_features.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_features.cc
+@@ -90,13 +90,13 @@ const base::Feature kAutomaticTabDiscarding{"Automatic
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables the Restart background mode optimization. When all Chrome UI is
+ // closed and it goes in the background, allows to restart the browser to
+ // discard memory.
+ const base::Feature kBackgroundModeAllowRestart{
+ "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Enables or disables whether permission prompts are automatically blocked
+ // after the user has explicitly dismissed them too many times.
+@@ -155,7 +155,7 @@ const base::Feature kThirdPartyModulesBlocking{
+ "ThirdPartyModulesBlocking", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Enables the dual certificate verification trial feature.
+ // https://crbug.com/649026
+ const base::Feature kCertDualVerificationTrialFeature{
+@@ -365,7 +365,7 @@ const base::Feature kAcknowledgeNtpOverrideOnDeactivat
+ "AcknowledgeNtpOverrideOnDeactivate", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ const base::Feature kWarnBeforeQuitting{"WarnBeforeQuitting",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+@@ -388,7 +388,7 @@ const base::Feature kModalPermissionPrompts{"ModalPerm
+ // Center for displaying the toasts. The feature is hardcoded to enabled for
+ // Chrome OS.
+ #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
+-#if defined(OS_MACOSX) || defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Feature kNativeNotifications{"NativeNotifications",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #else
diff --git a/devel/electron4/files/patch-chrome_common_chrome__features.h b/devel/electron4/files/patch-chrome_common_chrome__features.h
new file mode 100644
index 000000000000..0b0c5ad82dcc
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__features.h
@@ -0,0 +1,20 @@
+--- chrome/common/chrome_features.h.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_features.h
+@@ -52,7 +52,7 @@ extern const base::Feature kAsyncDns;
+ extern const base::Feature kAutomaticTabDiscarding;
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const base::Feature kBackgroundModeAllowRestart;
+ #endif // defined(OS_WIN) || defined(OS_LINUX)
+
+@@ -76,7 +76,7 @@ extern const base::Feature kDialogTouchBar;
+ extern const base::Feature kTabStripKeyboardFocus;
+ #endif // defined(OS_MACOSX)
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const base::Feature kCertDualVerificationTrialFeature;
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_common_chrome__paths.cc b/devel/electron4/files/patch-chrome_common_chrome__paths.cc
new file mode 100644
index 000000000000..6047bac0e3a2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__paths.cc
@@ -0,0 +1,97 @@
+--- chrome/common/chrome_paths.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_paths.cc
+@@ -52,14 +52,14 @@ const base::FilePath::CharType kPepperFlashSystemBaseD
+ const base::FilePath::CharType kInternalNaClPluginFileName[] =
+ FILE_PATH_LITERAL("internal-nacl-plugin");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The path to the external extension <id>.json files.
+ // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
+ const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
+ #if defined(GOOGLE_CHROME_BUILD)
+ FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
+ #else
+- FILE_PATH_LITERAL("/usr/share/chromium/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/chromium/extensions");
+ #endif // defined(GOOGLE_CHROME_BUILD)
+
+ // The path to the hint file that tells the pepper plugin loader
+@@ -193,7 +193,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ break;
+ case chrome::DIR_DEFAULT_DOWNLOADS_SAFE:
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (!GetUserDownloadsDirectorySafe(&cur))
+ return false;
+ break;
+@@ -422,7 +422,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ #endif
+ #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_SUPERVISED_USERS_DEFAULT_APPS:
+ if (!base::PathService::Get(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
+ &cur)) {
+@@ -472,10 +472,12 @@ bool PathProvider(int key, base::FilePath* result) {
+ if (!base::PathExists(cur)) // We don't want to create this
+ return false;
+ break;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
++#if defined(OS_POSIX) && !defined(OS_MACOSX)
+ case chrome::DIR_POLICY_FILES: {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/opt/chrome/policies"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL("/usr/local/etc/chrome/policies"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/chromium/policies"));
+ #endif
+@@ -483,7 +485,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ #endif
+ #if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
+- defined(OS_MACOSX)
++ defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_USER_EXTERNAL_EXTENSIONS: {
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+ return false;
+@@ -491,7 +493,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ }
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
+ break;
+@@ -526,7 +528,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ #endif
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_NATIVE_MESSAGING:
+ #if defined(OS_MACOSX)
+ #if defined(GOOGLE_CHROME_BUILD)
+@@ -540,6 +542,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/opt/chrome/native-messaging-hosts"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/native-messaging-hosts"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/chromium/native-messaging-hosts"));
+@@ -552,7 +557,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ cur = cur.Append(FILE_PATH_LITERAL("NativeMessagingHosts"));
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if !defined(OS_ANDROID)
+ case chrome::DIR_GLOBAL_GCM_STORE:
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
diff --git a/devel/electron4/files/patch-chrome_common_chrome__paths.h b/devel/electron4/files/patch-chrome_common_chrome__paths.h
new file mode 100644
index 000000000000..e9691698bd06
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__paths.h
@@ -0,0 +1,29 @@
+--- chrome/common/chrome_paths.h.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_paths.h
+@@ -51,7 +51,7 @@ enum {
+ // to set policies for chrome. This directory
+ // contains subdirectories.
+ #endif
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
++#if defined(OS_CHROMEOS) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD)) || \
+ defined(OS_MACOSX)
+ DIR_USER_EXTERNAL_EXTENSIONS, // Directory for per-user external extensions
+ // on Chrome Mac and Chromium Linux.
+@@ -60,7 +60,7 @@ enum {
+ // create it.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_STANDALONE_EXTERNAL_EXTENSIONS, // Directory for 'per-extension'
+ // definition manifest files that
+ // describe extensions which are to be
+@@ -111,7 +111,7 @@ enum {
+ DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, // Directory where sanitized
+ // supervised user whitelists are
+ // installed.
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_MACOSX)
+ DIR_NATIVE_MESSAGING, // System directory where native messaging host
+ // manifest files are stored.
+ DIR_USER_NATIVE_MESSAGING, // Directory with Native Messaging Hosts
diff --git a/devel/electron4/files/patch-chrome_common_chrome__paths__internal.h b/devel/electron4/files/patch-chrome_common_chrome__paths__internal.h
new file mode 100644
index 000000000000..e12ab5f2d5d1
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__paths__internal.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_paths_internal.h.orig 2019-03-15 06:25:36 UTC
++++ chrome/common/chrome_paths_internal.h
+@@ -45,7 +45,7 @@ void GetUserCacheDirectory(const base::FilePath& profi
+ // Get the path to the user's documents directory.
+ bool GetUserDocumentsDirectory(base::FilePath* result);
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Gets the path to a safe default download directory for a user.
+ bool GetUserDownloadsDirectorySafe(base::FilePath* result);
+ #endif
diff --git a/devel/electron4/files/patch-chrome_common_chrome__switches.cc b/devel/electron4/files/patch-chrome_common_chrome__switches.cc
new file mode 100644
index 000000000000..0a8139a4b80b
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__switches.cc
@@ -0,0 +1,17 @@
+--- chrome/common/chrome_switches.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_switches.cc
+@@ -987,12 +987,12 @@ const char kAllowNaClFileHandleAPI[] = "allow-n
+ const char kAllowNaClSocketAPI[] = "allow-nacl-socket-api";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kDisableInputImeAPI[] = "disable-input-ime-api";
+ const char kEnableInputImeAPI[] = "enable-input-ime-api";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const char kEnableNewAppMenuIcon[] = "enable-new-app-menu-icon";
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_common_chrome__switches.h b/devel/electron4/files/patch-chrome_common_chrome__switches.h
new file mode 100644
index 000000000000..02340af2b7d6
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_chrome__switches.h
@@ -0,0 +1,17 @@
+--- chrome/common/chrome_switches.h.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/chrome_switches.h
+@@ -302,12 +302,12 @@ extern const char kAllowNaClFileHandleAPI[];
+ extern const char kAllowNaClSocketAPI[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kDisableInputImeAPI[];
+ extern const char kEnableInputImeAPI[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const char kEnableNewAppMenuIcon[];
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_common_extensions_api_api__sources.gni b/devel/electron4/files/patch-chrome_common_extensions_api_api__sources.gni
new file mode 100644
index 000000000000..6b5fad5bb385
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_extensions_api_api__sources.gni
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/api/api_sources.gni.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/extensions/api/api_sources.gni
+@@ -116,7 +116,7 @@ if (is_chromeos) {
+ "wallpaper.json",
+ "wallpaper_private.json",
+ ]
+-} else if (is_linux || is_win) {
++} else if (is_linux || is_bsd || is_win) {
+ schema_sources_ += [ "input_ime.json" ]
+ }
+
diff --git a/devel/electron4/files/patch-chrome_common_extensions_command.cc b/devel/electron4/files/patch-chrome_common_extensions_command.cc
new file mode 100644
index 000000000000..c8d3cca29ec2
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_extensions_command.cc
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/command.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/extensions/command.cc
+@@ -311,7 +311,7 @@ std::string Command::CommandPlatform() {
+ return values::kKeybindingPlatformMac;
+ #elif defined(OS_CHROMEOS)
+ return values::kKeybindingPlatformChromeOs;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return values::kKeybindingPlatformLinux;
+ #else
+ return "";
diff --git a/devel/electron4/files/patch-chrome_common_features.gni b/devel/electron4/files/patch-chrome_common_features.gni
new file mode 100644
index 000000000000..08918fc2e8bd
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_features.gni
@@ -0,0 +1,14 @@
+--- chrome/common/features.gni.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/features.gni
+@@ -46,9 +46,9 @@ declare_args() {
+ (is_desktop_linux && use_dbus) || is_chromeos
+
+ enable_one_click_signin =
+- is_win || is_mac || (is_linux && !is_chromeos && !is_chromecast)
++ is_win || is_mac || is_bsd || (is_linux && !is_chromeos && !is_chromecast)
+
+- enable_service_discovery = enable_mdns || is_mac
++ enable_service_discovery = enable_mdns || is_mac || is_bsd
+
+ # Enables use of the session service, which is enabled by default.
+ # Android stores them separately on the Java side.
diff --git a/devel/electron4/files/patch-chrome_common_pref__names.cc b/devel/electron4/files/patch-chrome_common_pref__names.cc
new file mode 100644
index 000000000000..205bfe265531
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_pref__names.cc
@@ -0,0 +1,29 @@
+--- chrome/common/pref_names.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/pref_names.cc
+@@ -918,7 +918,7 @@ const char kAllowedDomainsForApps[] = "settings.allowe
+ // See the SafeSitesFilterBehavior policy for details.
+ const char kSafeSitesFilterBehavior[] = "settings.safe_sites_filter_behavior";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Linux specific preference on whether we should match the system theme.
+ const char kUsesSystemTheme[] = "extensions.theme.use_system";
+ #endif
+@@ -1001,7 +1001,7 @@ const char kShowUpdatePromotionInfoBar[] =
+ "browser.show_update_promotion_info_bar";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Boolean that is false if we should show window manager decorations. If
+ // true, we draw a custom chrome frame (thicker title bar and blue border).
+ const char kUseCustomChromeFrame[] = "browser.custom_chrome_frame";
+@@ -1363,7 +1363,7 @@ const char kDownloadDefaultDirectory[] = "download.def
+ // upgrade a unsafe location to a safe location.
+ const char kDownloadDirUpgraded[] = "download.directory_upgrade";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const char kOpenPdfDownloadInSystemReader[] =
+ "download.open_pdf_in_system_reader";
+ #endif
diff --git a/devel/electron4/files/patch-chrome_common_pref__names.h b/devel/electron4/files/patch-chrome_common_pref__names.h
new file mode 100644
index 000000000000..6e1b9bd4600d
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_pref__names.h
@@ -0,0 +1,38 @@
+--- chrome/common/pref_names.h.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/pref_names.h
+@@ -166,7 +166,7 @@ extern const char kSearchSuggestEnabled[];
+ extern const char kContextualSearchEnabled[];
+ #endif // defined(OS_ANDROID)
+ #if defined(OS_MACOSX) || defined(OS_WIN) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kConfirmToQuitEnabled[];
+ #endif
+ #if defined(OS_MACOSX)
+@@ -294,7 +294,7 @@ extern const char kForceYouTubeRestrict[];
+ extern const char kForceSessionSync[];
+ extern const char kAllowedDomainsForApps[];
+ extern const char kSafeSitesFilterBehavior[];
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kUsesSystemTheme[];
+ #endif
+ extern const char kCurrentThemePackFilename[];
+@@ -327,7 +327,7 @@ extern const char kDefaultBrowserSettingEnabled[];
+ #if defined(OS_MACOSX)
+ extern const char kShowUpdatePromotionInfoBar[];
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUseCustomChromeFrame[];
+ #endif
+ #if BUILDFLAG(ENABLE_PLUGINS)
+@@ -474,7 +474,7 @@ extern const char kAppWindowPlacement[];
+ extern const char kDownloadDefaultDirectory[];
+ extern const char kDownloadExtensionsToOpen[];
+ extern const char kDownloadDirUpgraded[];
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const char kOpenPdfDownloadInSystemReader[];
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron4/files/patch-chrome_common_webui__url__constants.cc b/devel/electron4/files/patch-chrome_common_webui__url__constants.cc
new file mode 100644
index 000000000000..ababd04a9476
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_webui__url__constants.cc
@@ -0,0 +1,41 @@
+--- chrome/common/webui_url_constants.cc.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/webui_url_constants.cc
+@@ -237,7 +237,7 @@ const char kChromeUICastHost[] = "cast";
+ const char kChromeUICastURL[] = "chrome://cast/";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kChromeUIDiscardsHost[] = "discards";
+ const char kChromeUIDiscardsURL[] = "chrome://discards/";
+ #endif
+@@ -246,11 +246,11 @@ const char kChromeUIDiscardsURL[] = "chrome://discards
+ const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const char kChromeUISandboxHost[] = "sandbox";
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+ #endif
+
+@@ -398,13 +398,13 @@ const char* const kChromeHostURLs[] = {
+ kChromeUIInternetDetailDialogHost,
+ kChromeUIAssistantOptInHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ kChromeUIDiscardsHost,
+ #endif
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ kChromeUILinuxProxyConfigHost,
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ kChromeUISandboxHost,
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron4/files/patch-chrome_common_webui__url__constants.h b/devel/electron4/files/patch-chrome_common_webui__url__constants.h
new file mode 100644
index 000000000000..ec696af6d108
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_common_webui__url__constants.h
@@ -0,0 +1,25 @@
+--- chrome/common/webui_url_constants.h.orig 2019-03-15 06:37:09 UTC
++++ chrome/common/webui_url_constants.h
+@@ -232,7 +232,7 @@ extern const char kChromeUICastHost[];
+ extern const char kChromeUICastURL[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kChromeUIDiscardsHost[];
+ extern const char kChromeUIDiscardsURL[];
+ #endif
+@@ -241,11 +241,11 @@ extern const char kChromeUIDiscardsURL[];
+ extern const char kChromeUILinuxProxyConfigHost[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ extern const char kChromeUISandboxHost[];
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ extern const char kChromeUITabModalConfirmDialogHost[];
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc b/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
new file mode 100644
index 000000000000..aadc2690f688
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
@@ -0,0 +1,29 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.cc.orig 2019-03-15 06:25:37 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.cc
+@@ -15,7 +15,7 @@
+ #include "ppapi/proxy/ppapi_messages.h"
+ #include "ppapi/proxy/serialized_structs.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "content/public/common/common_sandbox_support_linux.h"
+ #elif defined(OS_WIN)
+@@ -29,7 +29,7 @@ PepperFlashFontFileHost::PepperFlashFontFileHost(
+ const ppapi::proxy::SerializedFontDescription& description,
+ PP_PrivateFontCharset charset)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The global SkFontConfigInterface is configured and initialized with a
+ // SkFontconfigInterface compatible font_service::FontLoader in
+ // RendererBlinkPlatformImpl (called from RenderThreadImpl::Init) at startup
+@@ -74,7 +74,7 @@ bool PepperFlashFontFileHost::GetFontData(uint32_t tab
+ void* buffer,
+ size_t* length) {
+ bool result = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (font_file_.IsValid()) {
+ result = content::GetFontTable(font_file_.GetPlatformFile(), table,
+ 0 /* offset */,
diff --git a/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h b/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
new file mode 100644
index 000000000000..5c4656ec10a4
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
@@ -0,0 +1,20 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.h.orig 2019-03-15 06:25:37 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.h
+@@ -14,7 +14,7 @@
+ #include "ppapi/c/private/pp_private_font_charset.h"
+ #include "ppapi/host/resource_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file.h"
+ #elif defined(OS_WIN)
+ #include "third_party/skia/include/core/SkRefCnt.h"
+@@ -50,7 +50,7 @@ class PepperFlashFontFileHost : public ppapi::host::Re
+ uint32_t table);
+ bool GetFontData(uint32_t table, void* buffer, size_t* length);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::File font_file_;
+ #elif defined(OS_WIN)
+ sk_sp<SkTypeface> typeface_;
diff --git a/devel/electron4/files/patch-chrome_service_cloud__print_print__system.cc b/devel/electron4/files/patch-chrome_service_cloud__print_print__system.cc
new file mode 100644
index 000000000000..afe7c88bcaa0
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_service_cloud__print_print__system.cc
@@ -0,0 +1,11 @@
+--- chrome/service/cloud_print/print_system.cc.orig 2019-03-15 06:25:37 UTC
++++ chrome/service/cloud_print/print_system.cc
+@@ -36,7 +36,7 @@ std::string PrintSystem::GenerateProxyId() {
+ return base::GenerateGUID();
+ }
+
+-#if defined(OS_LINUX) && !defined(USE_CUPS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(USE_CUPS)
+ scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
+ const base::DictionaryValue*) {
+ return nullptr;
diff --git a/devel/electron4/files/patch-chrome_test_base_in__process__browser__test.cc b/devel/electron4/files/patch-chrome_test_base_in__process__browser__test.cc
new file mode 100644
index 000000000000..ebaab151f50a
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_test_base_in__process__browser__test.cc
@@ -0,0 +1,22 @@
+--- chrome/test/base/in_process_browser_test.cc.orig 2019-03-15 06:37:10 UTC
++++ chrome/test/base/in_process_browser_test.cc
+@@ -72,6 +72,10 @@
+ #include "chrome/test/base/scoped_bundle_swizzler_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <signal.h>
++#endif
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -91,7 +95,7 @@
+ #include "chrome/test/base/default_ash_event_generator_delegate.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/test/test_desktop_screen_x11.h"
+ #endif
+
diff --git a/devel/electron4/files/patch-chrome_test_base_testing__browser__process.h b/devel/electron4/files/patch-chrome_test_base_testing__browser__process.h
new file mode 100644
index 000000000000..9be7b7c2ab77
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_test_base_testing__browser__process.h
@@ -0,0 +1,13 @@
+--- chrome/test/base/testing_browser_process.h.orig 2019-03-15 06:37:10 UTC
++++ chrome/test/base/testing_browser_process.h
+@@ -114,8 +114,8 @@ class TestingBrowserProcess : public BrowserProcess {
+ DownloadStatusUpdater* download_status_updater() override;
+ DownloadRequestLimiter* download_request_limiter() override;
+
+-#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+- void StartAutoupdateTimer() override {}
++#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
++ void StartAutoupdateTimer() /*override*/ {}
+ #endif
+
+ net_log::ChromeNetLog* net_log() override;
diff --git a/devel/electron4/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc b/devel/electron4/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
new file mode 100644
index 000000000000..21f5c76d2efa
--- /dev/null
+++ b/devel/electron4/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
@@ -0,0 +1,20 @@
+--- chrome/test/chromedriver/chrome/chrome_finder.cc.orig 2019-03-15 06:37:10 UTC
++++ chrome/test/chromedriver/chrome/chrome_finder.cc
+@@ -45,7 +45,7 @@ void GetApplicationDirs(std::vector<base::FilePath>* l
+ installation_locations[i].Append(L"Chromium\\Application"));
+ }
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ void GetApplicationDirs(std::vector<base::FilePath>* locations) {
+ // TODO: Respect users' PATH variables.
+ // Until then, we use an approximation of the most common defaults.
+@@ -98,7 +98,7 @@ bool FindChrome(base::FilePath* browser_exe) {
+ #elif defined(OS_MACOSX)
+ base::FilePath("Google Chrome.app/Contents/MacOS/Google Chrome"),
+ base::FilePath("Chromium.app/Contents/MacOS/Chromium")
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath("google-chrome"),
+ base::FilePath("chrome"),
+ base::FilePath("chromium"),
diff --git a/devel/electron4/files/patch-chromecast_browser_cast__browser__main__parts.cc b/devel/electron4/files/patch-chromecast_browser_cast__browser__main__parts.cc
new file mode 100644
index 000000000000..0430daf0e7de
--- /dev/null
+++ b/devel/electron4/files/patch-chromecast_browser_cast__browser__main__parts.cc
@@ -0,0 +1,29 @@
+--- chromecast/browser/cast_browser_main_parts.cc.orig 2019-03-15 06:37:10 UTC
++++ chromecast/browser/cast_browser_main_parts.cc
+@@ -68,7 +68,7 @@
+ #include "ui/compositor/compositor_switches.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include <signal.h>
+ #include <sys/prctl.h>
+@@ -241,7 +241,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {cc::switches::kDisableThreadedAnimation, ""},
+ #endif // defined(OS_ANDROID)
+ #endif // BUILDFLAG(IS_CAST_AUDIO_ONLY)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(ARCH_CPU_X86_FAMILY)
+ // This is needed for now to enable the x11 Ozone platform to work with
+ // current Linux/NVidia OpenGL drivers.
+@@ -399,7 +399,7 @@ void CastBrowserMainParts::PostMainMessageLoopStart()
+ }
+
+ void CastBrowserMainParts::ToolkitInitialized() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Without this call, the FontConfig library gets implicitly initialized
+ // on the first call to FontConfig. Since it's not safe to initialize it
+ // concurrently from multiple threads, we explicitly initialize it here
diff --git a/devel/electron4/files/patch-chromecast_browser_cast__content__browser__client.cc b/devel/electron4/files/patch-chromecast_browser_cast__content__browser__client.cc
new file mode 100644
index 000000000000..d1e737eba2e6
--- /dev/null
+++ b/devel/electron4/files/patch-chromecast_browser_cast__content__browser__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/browser/cast_content_browser_client.cc.orig 2019-03-15 06:37:10 UTC
++++ chromecast/browser/cast_content_browser_client.cc
+@@ -426,7 +426,7 @@ void CastContentBrowserClient::AppendExtraCommandLineS
+ switches::kAudioOutputChannels));
+ }
+ } else if (process_type == switches::kGpuProcess) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Necessary for accelerated 2d canvas. By default on Linux, Chromium assumes
+ // GLES2 contexts can be lost to a power-save mode, which breaks GPU canvas
+ // apps.
diff --git a/devel/electron4/files/patch-components_autofill__strings.grdp b/devel/electron4/files/patch-components_autofill__strings.grdp
new file mode 100644
index 000000000000..effefbb19f6d
--- /dev/null
+++ b/devel/electron4/files/patch-components_autofill__strings.grdp
@@ -0,0 +1,11 @@
+--- components/autofill_strings.grdp.orig 2019-03-15 06:37:13 UTC
++++ components/autofill_strings.grdp
+@@ -201,7 +201,7 @@
+ <message name="IDS_AUTOFILL_SAVE_CARD_PROMPT_UPLOAD_EXPLANATION" desc="Explanation of the effect of the Autofill save card prompt when the card is to be saved by uploading it to Google Payments and also saved locally. The prompt can be either a bubble or an infobar.">
+ Pay quickly on sites and apps across devices using cards you have saved with Google.
+ </message>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <then>
+ <message name="IDS_AUTOFILL_SAVE_CARD_PROMPT_UPLOAD_EXPLANATION_V2" desc="Explanation of the effect of the Autofill save card prompt when the card is to be saved by uploading it to Google Payments, according to June 2017 UI guidelines. The prompt will be shown in a bubble below the omnibox.">
+ To pay faster next time, save this card to your Google Account.
diff --git a/devel/electron4/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc b/devel/electron4/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
new file mode 100644
index 000000000000..1c9649b52c67
--- /dev/null
+++ b/devel/electron4/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
@@ -0,0 +1,14 @@
+--- components/autofill/content/renderer/password_form_conversion_utils.cc.orig 2019-03-15 06:37:12 UTC
++++ components/autofill/content/renderer/password_form_conversion_utils.cc
+@@ -37,7 +37,11 @@
+ #include "third_party/blink/public/web/web_form_control_element.h"
+ #include "third_party/blink/public/web/web_input_element.h"
+ #include "third_party/blink/public/web/web_local_frame.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using blink::WebFormControlElement;
diff --git a/devel/electron4/files/patch-components_autofill_core_browser_autofill__experiments.cc b/devel/electron4/files/patch-components_autofill_core_browser_autofill__experiments.cc
new file mode 100644
index 000000000000..b86bd2530134
--- /dev/null
+++ b/devel/electron4/files/patch-components_autofill_core_browser_autofill__experiments.cc
@@ -0,0 +1,20 @@
+--- components/autofill/core/browser/autofill_experiments.cc.orig 2019-03-15 06:37:12 UTC
++++ components/autofill/core/browser/autofill_experiments.cc
+@@ -109,7 +109,7 @@ bool IsAutofillCreditCardLocalCardMigrationExperimentE
+ }
+
+ bool OfferStoreUnmaskedCards() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // The checkbox can be forced on with a flag, but by default we don't store
+ // on Linux due to lack of system keychain integration. See crbug.com/162735
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
+@@ -212,7 +212,7 @@ bool IsMacViewsAutofillPopupExperimentEnabled() {
+ #endif // defined(OS_MACOSX)
+
+ bool ShouldUseNativeViews() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return base::FeatureList::IsEnabled(kAutofillExpandedPopupViews) ||
+ base::FeatureList::IsEnabled(::features::kExperimentalUi);
+ #else
diff --git a/devel/electron4/files/patch-components_autofill_core_common_autofill__util.cc b/devel/electron4/files/patch-components_autofill_core_common_autofill__util.cc
new file mode 100644
index 000000000000..c9c47209745f
--- /dev/null
+++ b/devel/electron4/files/patch-components_autofill_core_common_autofill__util.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_util.cc.orig 2019-03-15 06:37:13 UTC
++++ components/autofill/core/common/autofill_util.cc
+@@ -202,7 +202,7 @@ bool SanitizedFieldIsEmpty(const base::string16& value
+ }
+
+ bool ShouldAutoselectFirstSuggestionOnArrowDown() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron4/files/patch-components_content__settings_core_browser_website__settings__registry.cc b/devel/electron4/files/patch-components_content__settings_core_browser_website__settings__registry.cc
new file mode 100644
index 000000000000..78dc54c7e50c
--- /dev/null
+++ b/devel/electron4/files/patch-components_content__settings_core_browser_website__settings__registry.cc
@@ -0,0 +1,11 @@
+--- components/content_settings/core/browser/website_settings_registry.cc.orig 2019-03-15 06:37:13 UTC
++++ components/content_settings/core/browser/website_settings_registry.cc
+@@ -67,7 +67,7 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Re
+ #if defined(OS_WIN)
+ if (!(platform & PLATFORM_WINDOWS))
+ return nullptr;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!(platform & PLATFORM_LINUX))
+ return nullptr;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron4/files/patch-components_cookie__config_cookie__store__util.cc b/devel/electron4/files/patch-components_cookie__config_cookie__store__util.cc
new file mode 100644
index 000000000000..b100302ec53b
--- /dev/null
+++ b/devel/electron4/files/patch-components_cookie__config_cookie__store__util.cc
@@ -0,0 +1,24 @@
+--- components/cookie_config/cookie_store_util.cc.orig 2019-03-15 06:25:41 UTC
++++ components/cookie_config/cookie_store_util.cc
+@@ -11,7 +11,7 @@
+
+ namespace cookie_config {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ namespace {
+
+ // Use the operating system's mechanisms to encrypt cookies before writing
+@@ -63,10 +63,10 @@ base::LazyInstance<CookieOSCryptoDelegate>::Destructor
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return g_cookie_crypto_delegate.Pointer();
+ }
+-#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return NULL;
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace cookie_config
diff --git a/devel/electron4/files/patch-components_crash_content_app_BUILD.gn b/devel/electron4/files/patch-components_crash_content_app_BUILD.gn
new file mode 100644
index 000000000000..64ae3e401a45
--- /dev/null
+++ b/devel/electron4/files/patch-components_crash_content_app_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/crash/content/app/BUILD.gn.orig 2019-03-15 06:37:13 UTC
++++ components/crash/content/app/BUILD.gn
+@@ -36,7 +36,7 @@ static_library("app") {
+ sources += [ "crashpad.cc" ]
+ }
+
+- if (is_android || is_linux) {
++ if (is_android || is_linux && !is_bsd) {
+ # Want these files on both Linux and Android.
+ set_sources_assignment_filter([])
+ sources += [
+@@ -73,8 +73,6 @@ static_library("app") {
+ "//content/public/common:content_descriptors",
+ "//content/public/common:result_codes",
+ "//sandbox",
+- "//third_party/breakpad:client",
+- "//third_party/crashpad/crashpad/snapshot",
+ ]
+
+ # Clang's -mstackrealign doesn't work well with
diff --git a/devel/electron4/files/patch-components_crash_content_app_crashpad.cc b/devel/electron4/files/patch-components_crash_content_app_crashpad.cc
new file mode 100644
index 000000000000..7bfdc826461b
--- /dev/null
+++ b/devel/electron4/files/patch-components_crash_content_app_crashpad.cc
@@ -0,0 +1,43 @@
+--- components/crash/content/app/crashpad.cc.orig 2019-03-15 06:37:13 UTC
++++ components/crash/content/app/crashpad.cc
+@@ -101,6 +101,12 @@ void InitializeCrashpadImpl(bool initial_client,
+ const std::string& user_data_dir,
+ const base::FilePath& exe_path,
+ bool embedded_handler) {
++
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return;
++#endif
++
+ static bool initialized = false;
+ DCHECK(!initialized);
+ initialized = true;
+@@ -119,7 +125,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // as processed by the backend.
+ DCHECK(browser_process || process_type == "Chrome Installer" ||
+ process_type == "notification-helper");
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ DCHECK(browser_process);
+ #else
+ #error Port.
+@@ -184,7 +190,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // other "main, first process" to initialize things. There is no "relauncher"
+ // on Windows, so this is synonymous with initial_client.
+ const bool should_initialize_database_and_set_upload_policy = initial_client;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const bool should_initialize_database_and_set_upload_policy = browser_process;
+ #endif
+ if (should_initialize_database_and_set_upload_policy) {
+@@ -253,7 +259,9 @@ bool GetUploadsEnabled() {
+ }
+
+ void DumpWithoutCrashing() {
++#if !defined(OS_BSD)
+ CRASHPAD_SIMULATE_CRASH();
++#endif
+ }
+
+ void GetReports(std::vector<Report>* reports) {
diff --git a/devel/electron4/files/patch-components_crash_content_browser_BUILD.gn b/devel/electron4/files/patch-components_crash_content_browser_BUILD.gn
new file mode 100644
index 000000000000..df6ea2cc8d95
--- /dev/null
+++ b/devel/electron4/files/patch-components_crash_content_browser_BUILD.gn
@@ -0,0 +1,23 @@
+--- components/crash/content/browser/BUILD.gn.orig 2019-03-15 06:37:13 UTC
++++ components/crash/content/browser/BUILD.gn
+@@ -26,10 +26,9 @@ source_set("browser") {
+ "//components/crash/content/app",
+ "//content/public/browser",
+ "//content/public/common",
+- "//third_party/breakpad:client",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ set_sources_assignment_filter([])
+
+ # Want this file on both Linux and Android.
+@@ -45,7 +44,7 @@ source_set("browser") {
+
+ # This is not in the GYP build but this target includes breakpad client
+ # headers, so add the dependency here.
+- if ((is_posix && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_ios && !is_bsd) || is_fuchsia) {
+ configs += [ "//third_party/breakpad:client_config" ]
+ public_configs = [ "//third_party/breakpad:client_config" ]
+ }
diff --git a/devel/electron4/files/patch-components_crash_core_common_BUILD.gn b/devel/electron4/files/patch-components_crash_core_common_BUILD.gn
new file mode 100644
index 000000000000..53ab007587b2
--- /dev/null
+++ b/devel/electron4/files/patch-components_crash_core_common_BUILD.gn
@@ -0,0 +1,28 @@
+--- components/crash/core/common/BUILD.gn.orig 2019-03-15 06:37:13 UTC
++++ components/crash/core/common/BUILD.gn
+@@ -6,7 +6,7 @@ import("//build/buildflag_header.gni")
+
+ declare_args() {
+ # If set to true, this will stub out and disable the entire crash key system.
+- use_crash_key_stubs = is_fuchsia
++ use_crash_key_stubs = is_fuchsia || is_bsd
+ }
+
+ group("common") {
+@@ -88,7 +88,6 @@ target(crash_key_target_type, "crash_key") {
+ ]
+ }
+
+- deps += [ "//third_party/breakpad:client" ]
+ }
+ }
+
+@@ -143,7 +142,7 @@ source_set("unit_tests") {
+ sources += [ "objc_zombie_unittest.mm" ]
+ }
+
+- if (!is_mac && !is_win && !is_fuchsia) {
++ if (!is_mac && !is_win && !is_fuchsia && !is_bsd) {
+ include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
+ sources += [ "crash_key_breakpad_unittest.cc" ]
+ }
diff --git a/devel/electron4/files/patch-components_download_internal_common_base__file.cc b/devel/electron4/files/patch-components_download_internal_common_base__file.cc
new file mode 100644
index 000000000000..57871d7ab2dc
--- /dev/null
+++ b/devel/electron4/files/patch-components_download_internal_common_base__file.cc
@@ -0,0 +1,11 @@
+--- components/download/internal/common/base_file.cc.orig 2019-03-15 06:37:14 UTC
++++ components/download/internal/common/base_file.cc
+@@ -446,7 +446,7 @@ DownloadInterruptReason BaseFile::LogInterruptReason(
+ return reason;
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+
diff --git a/devel/electron4/files/patch-components_download_quarantine_quarantine__linux.cc b/devel/electron4/files/patch-components_download_quarantine_quarantine__linux.cc
new file mode 100644
index 000000000000..ee969234e47a
--- /dev/null
+++ b/devel/electron4/files/patch-components_download_quarantine_quarantine__linux.cc
@@ -0,0 +1,49 @@
+--- components/download/quarantine/quarantine_linux.cc.orig 2019-03-15 06:37:14 UTC
++++ components/download/quarantine/quarantine_linux.cc
+@@ -2,11 +2,15 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include "build/build_config.h"
++
+ #include "components/download/quarantine/quarantine.h"
+
+ #include <stddef.h>
+ #include <sys/types.h>
++#if !defined(OS_BSD)
+ #include <sys/xattr.h>
++#endif
+
+ #include "base/files/file_path.h"
+ #include "base/files/file_util.h"
+@@ -29,17 +33,20 @@ bool SetExtendedFileAttribute(const char* path,
+ size_t value_size,
+ int flags) {
+ base::AssertBlockingAllowed();
++#if !defined(OS_BSD)
+ int result = setxattr(path, name, value, value_size, flags);
+ if (result) {
+ DPLOG(ERROR) << "Could not set extended attribute " << name << " on file "
+ << path;
+ return false;
+ }
++#endif
+ return true;
+ }
+
+ std::string GetExtendedFileAttribute(const char* path, const char* name) {
+ base::AssertBlockingAllowed();
++#if !defined(OS_BSD)
+ ssize_t len = getxattr(path, name, nullptr, 0);
+ if (len <= 0)
+ return std::string();
+@@ -49,6 +56,9 @@ std::string GetExtendedFileAttribute(const char* path,
+ if (len < static_cast<ssize_t>(buffer.size()))
+ return std::string();
+ return std::string(buffer.begin(), buffer.end());
++#else
++ return std::string();
++#endif
+ }
+
+ } // namespace
diff --git a/devel/electron4/files/patch-components_feature__engagement_public_event__constants.cc b/devel/electron4/files/patch-components_feature__engagement_public_event__constants.cc
new file mode 100644
index 000000000000..3eec881cb311
--- /dev/null
+++ b/devel/electron4/files/patch-components_feature__engagement_public_event__constants.cc
@@ -0,0 +1,14 @@
+--- components/feature_engagement/public/event_constants.cc.orig 2019-03-15 06:37:14 UTC
++++ components/feature_engagement/public/event_constants.cc
+@@ -24,9 +24,9 @@ const char kIncognitoWindowSessionTimeMet[] =
+
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ const char kNewTabOpened[] = "new_tab_opened";
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ const char kChromeOpened[] = "chrome_opened";
diff --git a/devel/electron4/files/patch-components_feature__engagement_public_event__constants.h b/devel/electron4/files/patch-components_feature__engagement_public_event__constants.h
new file mode 100644
index 000000000000..cf5015e6dcfd
--- /dev/null
+++ b/devel/electron4/files/patch-components_feature__engagement_public_event__constants.h
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/event_constants.h.orig 2019-03-15 06:37:14 UTC
++++ components/feature_engagement/public/event_constants.h
+@@ -42,7 +42,7 @@ extern const char kIncognitoWindowOpened[];
+ extern const char kIncognitoWindowSessionTimeMet[];
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ // This event is included in the deferred onboarding events for the New Tab
+ // described above, but it is also used on iOS, so it must be compiled
+ // separately.
+@@ -50,7 +50,7 @@ extern const char kIncognitoWindowSessionTimeMet[];
+ // The user has explicitly opened a new tab via an entry point from inside of
+ // Chrome.
+ extern const char kNewTabOpened[];
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ // The user has opened Chrome (cold start or from background).
diff --git a/devel/electron4/files/patch-components_feedback_anonymizer__tool.cc b/devel/electron4/files/patch-components_feedback_anonymizer__tool.cc
new file mode 100644
index 000000000000..657c8de832aa
--- /dev/null
+++ b/devel/electron4/files/patch-components_feedback_anonymizer__tool.cc
@@ -0,0 +1,14 @@
+--- components/feedback/anonymizer_tool.cc.orig 2019-03-15 06:37:14 UTC
++++ components/feedback/anonymizer_tool.cc
+@@ -11,7 +11,11 @@
+ #include "base/strings/string_util.h"
+ #include "base/strings/stringprintf.h"
+ #include "content/public/browser/browser_thread.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using re2::RE2;
+
diff --git a/devel/electron4/files/patch-components_flags__ui_flags__state.cc b/devel/electron4/files/patch-components_flags__ui_flags__state.cc
new file mode 100644
index 000000000000..fa8f2acefa25
--- /dev/null
+++ b/devel/electron4/files/patch-components_flags__ui_flags__state.cc
@@ -0,0 +1,11 @@
+--- components/flags_ui/flags_state.cc.orig 2019-03-15 06:37:14 UTC
++++ components/flags_ui/flags_state.cc
+@@ -653,7 +653,7 @@ int FlagsState::GetCurrentPlatform() {
+ return kOsWin;
+ #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check.
+ return kOsCrOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_FREEBSD)
+ return kOsLinux;
+ #elif defined(OS_ANDROID)
+ return kOsAndroid;
diff --git a/devel/electron4/files/patch-components_gcm__driver_gcm__client.h b/devel/electron4/files/patch-components_gcm__driver_gcm__client.h
new file mode 100644
index 000000000000..aa2bebfdd363
--- /dev/null
+++ b/devel/electron4/files/patch-components_gcm__driver_gcm__client.h
@@ -0,0 +1,10 @@
+--- components/gcm_driver/gcm_client.h.orig 2019-03-15 06:37:14 UTC
++++ components/gcm_driver/gcm_client.h
+@@ -86,6 +86,7 @@ class GCMClient {
+ PLATFORM_CROS,
+ PLATFORM_IOS,
+ PLATFORM_ANDROID,
++ PLATFORM_BSD,
+ PLATFORM_UNSPECIFIED
+ };
+
diff --git a/devel/electron4/files/patch-components_gcm__driver_gcm__client__impl.cc b/devel/electron4/files/patch-components_gcm__driver_gcm__client__impl.cc
new file mode 100644
index 000000000000..f08ffb01cf84
--- /dev/null
+++ b/devel/electron4/files/patch-components_gcm__driver_gcm__client__impl.cc
@@ -0,0 +1,12 @@
+--- components/gcm_driver/gcm_client_impl.cc.orig 2019-03-15 06:37:14 UTC
++++ components/gcm_driver/gcm_client_impl.cc
+@@ -151,6 +151,9 @@ void ToCheckinProtoVersion(
+ case GCMClient::PLATFORM_CROS:
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS;
+ break;
++ case GCMClient::PLATFORM_BSD:
++ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
++ break;
+ case GCMClient::PLATFORM_UNSPECIFIED:
+ // For unknown platform, return as LINUX.
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
diff --git a/devel/electron4/files/patch-components_keyed__service_core_dependency__graph__unittest.cc b/devel/electron4/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
new file mode 100644
index 000000000000..076e35b26e7f
--- /dev/null
+++ b/devel/electron4/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
@@ -0,0 +1,14 @@
+--- components/keyed_service/core/dependency_graph_unittest.cc.orig 2019-03-15 06:25:41 UTC
++++ components/keyed_service/core/dependency_graph_unittest.cc
+@@ -9,7 +9,11 @@
+ #include "components/keyed_service/core/dependency_graph.h"
+ #include "components/keyed_service/core/dependency_node.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron4/files/patch-components_metrics_BUILD.gn b/devel/electron4/files/patch-components_metrics_BUILD.gn
new file mode 100644
index 000000000000..c82987bba8bb
--- /dev/null
+++ b/devel/electron4/files/patch-components_metrics_BUILD.gn
@@ -0,0 +1,14 @@
+--- components/metrics/BUILD.gn.orig 2019-03-15 06:37:14 UTC
++++ components/metrics/BUILD.gn
+@@ -142,6 +142,11 @@ static_library("metrics") {
+ if (is_fuchsia) {
+ sources += [ "drive_metrics_provider_fuchsia.cc" ]
+ }
++
++ if (is_bsd) {
++ sources -= [ "system_memory_stats_recorder_linux.cc" ]
++ }
++
+ }
+
+ # The component metrics provider is a separate target because it depends upon
diff --git a/devel/electron4/files/patch-components_metrics_drive__metrics__provider__linux.cc b/devel/electron4/files/patch-components_metrics_drive__metrics__provider__linux.cc
new file mode 100644
index 000000000000..3f700bbe8df2
--- /dev/null
+++ b/devel/electron4/files/patch-components_metrics_drive__metrics__provider__linux.cc
@@ -0,0 +1,16 @@
+--- components/metrics/drive_metrics_provider_linux.cc.orig 2019-03-15 06:25:41 UTC
++++ components/metrics/drive_metrics_provider_linux.cc
+@@ -4,7 +4,13 @@
+
+ #include "components/metrics/drive_metrics_provider.h"
+
++#if defined(OS_BSD)
++#include <sys/types.h>
++#define MAJOR(dev) major(dev)
++#define MINOR(dev) minor(dev)
++#else
+ #include <linux/kdev_t.h> // For MAJOR()/MINOR().
++#endif
+ #include <sys/stat.h>
+ #include <string>
+
diff --git a/devel/electron4/files/patch-components_metrics_system__memory__stats__recorder__linux.cc b/devel/electron4/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
new file mode 100644
index 000000000000..dd00fef551a0
--- /dev/null
+++ b/devel/electron4/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
@@ -0,0 +1,18 @@
+--- components/metrics/system_memory_stats_recorder_linux.cc.orig 2019-03-15 06:25:41 UTC
++++ components/metrics/system_memory_stats_recorder_linux.cc
+@@ -30,6 +30,7 @@ namespace metrics {
+ UMA_HISTOGRAM_LINEAR(name, sample, 2500, 50)
+
+ void RecordMemoryStats(RecordMemoryStatsType type) {
++#if !defined(OS_FREEBSD)
+ base::SystemMemoryInfoKB memory;
+ if (!base::GetSystemMemoryInfo(&memory))
+ return;
+@@ -93,6 +94,7 @@ void RecordMemoryStats(RecordMemoryStatsType type) {
+ break;
+ }
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace metrics
diff --git a/devel/electron4/files/patch-components_neterror_resources_neterror.js b/devel/electron4/files/patch-components_neterror_resources_neterror.js
new file mode 100644
index 000000000000..1029008e5837
--- /dev/null
+++ b/devel/electron4/files/patch-components_neterror_resources_neterror.js
@@ -0,0 +1,11 @@
+--- components/neterror/resources/neterror.js.orig 2019-03-15 06:37:14 UTC
++++ components/neterror/resources/neterror.js
+@@ -153,7 +153,7 @@ function setUpCachedButton(buttonStrings) {
+ }
+
+ var primaryControlOnLeft = true;
+-// <if expr="is_macosx or is_ios or is_linux or is_android">
++// <if expr="is_macosx or is_ios or is_linux or is_android or is_bsd">
+ primaryControlOnLeft = false;
+ // </if>
+
diff --git a/devel/electron4/files/patch-components_network__session__configurator_browser_network__session__configurator.cc b/devel/electron4/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
new file mode 100644
index 000000000000..95199a9d6114
--- /dev/null
+++ b/devel/electron4/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
@@ -0,0 +1,11 @@
+--- components/network_session_configurator/browser/network_session_configurator.cc.orig 2019-07-24 10:33:28 UTC
++++ components/network_session_configurator/browser/network_session_configurator.cc
+@@ -618,7 +618,7 @@ net::URLRequestContextBuilder::HttpCacheParams::Type C
+ }
+ #endif // #if !defined(OS_ANDROID)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE;
+ #else
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE;
diff --git a/devel/electron4/files/patch-components_new__or__sad__tab__strings.grdp b/devel/electron4/files/patch-components_new__or__sad__tab__strings.grdp
new file mode 100644
index 000000000000..2c06c9bb3118
--- /dev/null
+++ b/devel/electron4/files/patch-components_new__or__sad__tab__strings.grdp
@@ -0,0 +1,38 @@
+--- components/new_or_sad_tab_strings.grdp.orig 2019-03-15 06:37:14 UTC
++++ components/new_or_sad_tab_strings.grdp
+@@ -51,7 +51,7 @@
+ Open page in a new Incognito window (⇧⌘N)
+ </message>
+ </if>
+- <if expr="is_win or is_linux or chromeos">
++ <if expr="is_win or is_posix or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_INCOGNITO" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to open the web page in Chrome's Incognito mode.">
+ Open page in a new Incognito window (Ctrl-Shift-N)
+ </message>
+@@ -66,7 +66,7 @@
+ Close other tabs or apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_TABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other Chrome tabs or programs running on their computer.">
+ Close other tabs or programs
+ </message>
+@@ -76,7 +76,7 @@
+ Close other apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_NOTABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other programs running on their computer (Linux).">
+ Close other programs
+ </message>
+@@ -91,7 +91,7 @@
+ Restart Chromium
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_RESTART_DEVICE" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to restart their computer.">
+ Restart your computer
+ </message>
diff --git a/devel/electron4/files/patch-components_os__crypt_os__crypt.h b/devel/electron4/files/patch-components_os__crypt_os__crypt.h
new file mode 100644
index 000000000000..54c88bfe301d
--- /dev/null
+++ b/devel/electron4/files/patch-components_os__crypt_os__crypt.h
@@ -0,0 +1,29 @@
+--- components/os_crypt/os_crypt.h.orig 2019-03-15 06:37:14 UTC
++++ components/os_crypt/os_crypt.h
+@@ -14,7 +14,7 @@
+ #include "base/strings/string16.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(UNIT_TEST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD) && defined(UNIT_TEST)
+ class KeyStorageLinux;
+ #endif // defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(UNIT_TEST)
+
+@@ -28,7 +28,7 @@ struct Config;
+ // true for Linux, if a password management tool is available.
+ class OSCrypt {
+ public:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Set the configuration of OSCrypt.
+ static void SetConfig(std::unique_ptr<os_crypt::Config> config);
+
+@@ -67,7 +67,7 @@ class OSCrypt {
+ DISALLOW_IMPLICIT_CONSTRUCTORS(OSCrypt);
+ };
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(UNIT_TEST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD) && defined(UNIT_TEST)
+ // For unit testing purposes, inject methods to be used.
+ // |get_key_storage_mock| provides the desired |KeyStorage| implementation.
+ // If the provider returns |nullptr|, a hardcoded password will be used.
diff --git a/devel/electron4/files/patch-components_os__crypt_os__crypt__unittest.cc b/devel/electron4/files/patch-components_os__crypt_os__crypt__unittest.cc
new file mode 100644
index 000000000000..cb406f6564ca
--- /dev/null
+++ b/devel/electron4/files/patch-components_os__crypt_os__crypt__unittest.cc
@@ -0,0 +1,11 @@
+--- components/os_crypt/os_crypt_unittest.cc.orig 2019-03-15 06:37:14 UTC
++++ components/os_crypt/os_crypt_unittest.cc
+@@ -18,7 +18,7 @@
+ #include "components/os_crypt/os_crypt_mocker.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "components/os_crypt/os_crypt_mocker_linux.h"
+ #endif
+
diff --git a/devel/electron4/files/patch-components_password__manager_core_browser_import_csv__reader.cc b/devel/electron4/files/patch-components_password__manager_core_browser_import_csv__reader.cc
new file mode 100644
index 000000000000..b538fee4aafc
--- /dev/null
+++ b/devel/electron4/files/patch-components_password__manager_core_browser_import_csv__reader.cc
@@ -0,0 +1,14 @@
+--- components/password_manager/core/browser/import/csv_reader.cc.orig 2019-03-15 06:37:14 UTC
++++ components/password_manager/core/browser/import/csv_reader.cc
+@@ -9,7 +9,11 @@
+ #include "base/logging.h"
+ #include "base/macros.h"
+ #include "base/strings/string_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron4/files/patch-components_plugins_renderer_plugin__placeholder.cc b/devel/electron4/files/patch-components_plugins_renderer_plugin__placeholder.cc
new file mode 100644
index 000000000000..b38a35c6292c
--- /dev/null
+++ b/devel/electron4/files/patch-components_plugins_renderer_plugin__placeholder.cc
@@ -0,0 +1,14 @@
+--- components/plugins/renderer/plugin_placeholder.cc.orig 2019-03-15 06:37:14 UTC
++++ components/plugins/renderer/plugin_placeholder.cc
+@@ -11,7 +11,11 @@
+ #include "gin/object_template_builder.h"
+ #include "third_party/blink/public/web/web_element.h"
+ #include "third_party/blink/public/web/web_plugin_container.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace plugins {
+
diff --git a/devel/electron4/files/patch-components_policy_core_common_schema.cc b/devel/electron4/files/patch-components_policy_core_common_schema.cc
new file mode 100644
index 000000000000..c891ae36f902
--- /dev/null
+++ b/devel/electron4/files/patch-components_policy_core_common_schema.cc
@@ -0,0 +1,14 @@
+--- components/policy/core/common/schema.cc.orig 2019-03-15 06:37:14 UTC
++++ components/policy/core/common/schema.cc
+@@ -22,7 +22,11 @@
+ #include "components/json_schema/json_schema_constants.h"
+ #include "components/json_schema/json_schema_validator.h"
+ #include "components/policy/core/common/schema_internal.h"
++#if defined(OS_FREEBSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace schema = json_schema_constants;
+
diff --git a/devel/electron4/files/patch-components_policy_resources_policy__templates.json b/devel/electron4/files/patch-components_policy_resources_policy__templates.json
new file mode 100644
index 000000000000..29283289f155
--- /dev/null
+++ b/devel/electron4/files/patch-components_policy_resources_policy__templates.json
@@ -0,0 +1,83 @@
+--- components/policy/resources/policy_templates.json.orig 2019-03-15 06:37:14 UTC
++++ components/policy/resources/policy_templates.json
+@@ -646,7 +646,7 @@
+ 'name': 'HomepageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.bsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -674,7 +674,7 @@
+ 'name': 'HomepageIsNewTabPage',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.bsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -701,7 +701,7 @@
+ 'name': 'NewTabPageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
++ 'supported_on': ['chrome.*:58-', 'chrome_os:58-', 'chrome.bsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1392,7 +1392,7 @@
+ 'name': 'RemoteAccessHostMatchUsername',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
++ 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-', 'chrome.bsd:25-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -2646,7 +2646,7 @@
+ 'name': 'GSSAPILibraryName',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.linux:9-'],
++ 'supported_on': ['chrome.linux:9-', 'chrome.bsd:9-'],
+ 'features': {
+ 'dynamic_refresh': False,
+ 'per_profile': False,
+@@ -2698,7 +2698,7 @@
+ 'name': 'NtlmV2Enabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
++ 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-', 'chrome.bsd:63-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -5609,7 +5609,7 @@
+ 'name': 'RequireOnlineRevocationChecksForLocalAnchors',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
++ 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-', 'chrome.bsd:30-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -6625,7 +6625,7 @@
+ 'name': 'BackgroundModeEnabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
++ 'supported_on': ['chrome.win:19-', 'chrome.linux:19-', 'chrome.bsd:19-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -7140,7 +7140,7 @@
+ 'name': 'FullscreenAllowed',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
++ 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-', 'chrome.bsd:31-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': True,
diff --git a/devel/electron4/files/patch-components_policy_tools_generate__policy__source.py b/devel/electron4/files/patch-components_policy_tools_generate__policy__source.py
new file mode 100644
index 000000000000..442cc906648a
--- /dev/null
+++ b/devel/electron4/files/patch-components_policy_tools_generate__policy__source.py
@@ -0,0 +1,20 @@
+--- components/policy/tools/generate_policy_source.py.orig 2019-03-15 06:37:17 UTC
++++ components/policy/tools/generate_policy_source.py
+@@ -92,7 +92,7 @@ class PolicyDetails:
+ raise RuntimeError('is_device_only is only allowed for Chrome OS: "%s"'
+ % p)
+ if platform not in ['chrome_frame', 'chrome_os',
+- 'android', 'webview_android',
++ 'android', 'webview_android', 'chrome.bsd',
+ 'chrome.win', 'chrome.linux', 'chrome.mac',
+ 'chrome.fuchsia', 'chrome.*']:
+ raise RuntimeError('Platform "%s" is not supported' % platform)
+@@ -112,7 +112,7 @@ class PolicyDetails:
+ if platform.startswith('chrome.'):
+ platform_sub = platform[7:]
+ if platform_sub == '*':
+- self.platforms.extend(['win', 'mac', 'linux', 'fuchsia'])
++ self.platforms.extend(['win', 'mac', 'linux', 'fuchsia', 'freebsd'])
+ else:
+ self.platforms.append(platform_sub)
+ else:
diff --git a/devel/electron4/files/patch-components_previews_core_previews__features.cc b/devel/electron4/files/patch-components_previews_core_previews__features.cc
new file mode 100644
index 000000000000..99b9a7dc4abc
--- /dev/null
+++ b/devel/electron4/files/patch-components_previews_core_previews__features.cc
@@ -0,0 +1,11 @@
+--- components/previews/core/previews_features.cc.orig 2019-03-15 06:37:17 UTC
++++ components/previews/core/previews_features.cc
+@@ -14,7 +14,7 @@ namespace features {
+ // are enabled are controlled by other features.
+ const base::Feature kPreviews {
+ "Previews",
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Previews allowed for Android (but also allow on Linux for dev/debug).
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else // !defined(OS_ANDROID) || defined(OS_LINUX)
diff --git a/devel/electron4/files/patch-components_services_filesystem_file__system__app.cc b/devel/electron4/files/patch-components_services_filesystem_file__system__app.cc
new file mode 100644
index 000000000000..7cd6e765c19a
--- /dev/null
+++ b/devel/electron4/files/patch-components_services_filesystem_file__system__app.cc
@@ -0,0 +1,20 @@
+--- components/services/filesystem/file_system_app.cc.orig 2019-03-15 06:37:17 UTC
++++ components/services/filesystem/file_system_app.cc
+@@ -20,7 +20,7 @@
+ #elif defined(OS_ANDROID)
+ #include "base/base_paths_android.h"
+ #include "base/path_service.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+@@ -75,7 +75,7 @@ base::FilePath FileSystemApp::GetUserDataDir() {
+ CHECK(base::PathService::Get(base::DIR_APP_DATA, &path));
+ #elif defined(OS_ANDROID)
+ CHECK(base::PathService::Get(base::DIR_ANDROID_APP_DATA, &path));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ path = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron4/files/patch-components_services_font_font__service__app.cc b/devel/electron4/files/patch-components_services_font_font__service__app.cc
new file mode 100644
index 000000000000..47844fc9f181
--- /dev/null
+++ b/devel/electron4/files/patch-components_services_font_font__service__app.cc
@@ -0,0 +1,11 @@
+--- components/services/font/font_service_app.cc.orig 2019-03-15 06:37:17 UTC
++++ components/services/font/font_service_app.cc
+@@ -20,7 +20,7 @@
+ #include "components/services/font/ppapi_fontconfig_matching.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/test/fontconfig_util_linux.h"
+ #endif
+
diff --git a/devel/electron4/files/patch-components_storage__monitor_BUILD.gn b/devel/electron4/files/patch-components_storage__monitor_BUILD.gn
new file mode 100644
index 000000000000..7e99c5c2728c
--- /dev/null
+++ b/devel/electron4/files/patch-components_storage__monitor_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/storage_monitor/BUILD.gn.orig 2019-03-15 06:37:17 UTC
++++ components/storage_monitor/BUILD.gn
+@@ -65,6 +65,17 @@ static_library("storage_monitor") {
+ ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "mtab_watcher_linux.cc",
++ "mtab_watcher_linux.h",
++ ]
++ sources += [
++ "storage_monitor_freebsd.cc",
++ "storage_monitor_freebsd.h",
++ ]
++ }
++
+ if (use_udev) {
+ deps += [ "//device/udev_linux" ]
+ } else if (is_linux) {
diff --git a/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.cc b/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.cc
new file mode 100644
index 000000000000..561e2d810f31
--- /dev/null
+++ b/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.cc
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.cc.orig 2019-03-15 06:25:42 UTC
++++ components/storage_monitor/removable_device_constants.cc
+@@ -10,7 +10,7 @@ namespace storage_monitor {
+ const char kFSUniqueIdPrefix[] = "UUID:";
+ const char kVendorModelSerialPrefix[] = "VendorModelSerial:";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kVendorModelVolumeStoragePrefix[] = "VendorModelVolumeStorage:";
+ #endif
+
diff --git a/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.h b/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.h
new file mode 100644
index 000000000000..1ff748d47d15
--- /dev/null
+++ b/devel/electron4/files/patch-components_storage__monitor_removable__device__constants.h
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.h.orig 2019-03-15 06:25:42 UTC
++++ components/storage_monitor/removable_device_constants.h
+@@ -15,7 +15,7 @@ namespace storage_monitor {
+ extern const char kFSUniqueIdPrefix[];
+ extern const char kVendorModelSerialPrefix[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kVendorModelVolumeStoragePrefix[];
+ #endif
+
diff --git a/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.cc b/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
new file mode 100644
index 000000000000..809e21cf13d7
--- /dev/null
+++ b/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
@@ -0,0 +1,57 @@
+--- components/storage_monitor/storage_monitor_freebsd.cc.orig 2019-03-16 09:16:47 UTC
++++ components/storage_monitor/storage_monitor_freebsd.cc
+@@ -0,0 +1,54 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD implementation.
++
++#include "components/storage_monitor/storage_monitor_freebsd.h"
++
++#include <stdio.h>
++
++#include <list>
++
++#include "base/bind.h"
++#include "base/metrics/histogram.h"
++#include "base/process/kill.h"
++#include "base/process/launch.h"
++#include "base/stl_util.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/utf_string_conversions.h"
++#include "components/storage_monitor/media_storage_util.h"
++#include "components/storage_monitor/removable_device_constants.h"
++#include "components/storage_monitor/storage_info.h"
++
++using content::BrowserThread;
++
++namespace storage_monitor {
++
++namespace {
++
++} // namespace
++
++StorageMonitorFreeBSD::StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++StorageMonitorFreeBSD::~StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++void StorageMonitorFreeBSD::Init() {
++}
++
++bool StorageMonitorFreeBSD::GetStorageInfoForPath(
++ const base::FilePath& path,
++ StorageInfo* device_info) const {
++ return false; // TODO
++}
++
++StorageMonitor* StorageMonitor::CreateInternal() {
++ return new StorageMonitorFreeBSD();
++}
++
++} // namespace storage_monitor
diff --git a/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.h b/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.h
new file mode 100644
index 000000000000..a5607d315055
--- /dev/null
+++ b/devel/electron4/files/patch-components_storage__monitor_storage__monitor__freebsd.h
@@ -0,0 +1,48 @@
+--- components/storage_monitor/storage_monitor_freebsd.h.orig 2019-03-16 09:16:47 UTC
++++ components/storage_monitor/storage_monitor_freebsd.h
+@@ -0,0 +1,45 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD processes mount point change events, notifies listeners
++// about the addition and deletion of media devices, and answers queries about
++// mounted devices.
++// StorageMonitorFreeBSD lives on the UI thread, and uses ???
++// the FILE thread to get mount point change events.
++
++#ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++#define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++
++#include <map>
++#include <string>
++
++#include "base/compiler_specific.h"
++#include "base/files/file_path.h"
++#include "base/files/file_path_watcher.h"
++#include "base/memory/weak_ptr.h"
++#include "components/storage_monitor/storage_monitor.h"
++#include "content/public/browser/browser_thread.h"
++
++namespace storage_monitor {
++
++class StorageMonitorFreeBSD : public StorageMonitor {
++ public:
++ // Should only be called by browser start up code.
++ // Use StorageMonitor::GetInstance() instead.
++ explicit StorageMonitorFreeBSD();
++ virtual ~StorageMonitorFreeBSD();
++
++ // Must be called for StorageMonitorFreeBSD to work.
++ virtual void Init() override;
++ private:
++ // StorageMonitor implementation.
++ virtual bool GetStorageInfoForPath(const base::FilePath& path,
++ StorageInfo* device_info) const override;
++
++ DISALLOW_COPY_AND_ASSIGN(StorageMonitorFreeBSD);
++};
++
++} // namespace storage_monitor
++
++#endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
diff --git a/devel/electron4/files/patch-components_sync_base_get__session__name.cc b/devel/electron4/files/patch-components_sync_base_get__session__name.cc
new file mode 100644
index 000000000000..cdf82a872b5b
--- /dev/null
+++ b/devel/electron4/files/patch-components_sync_base_get__session__name.cc
@@ -0,0 +1,20 @@
+--- components/sync/base/get_session_name.cc.orig 2019-03-15 06:37:19 UTC
++++ components/sync/base/get_session_name.cc
+@@ -17,7 +17,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chromeos/system/devicetype.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/sync/base/get_session_name_linux.h"
+ #elif defined(OS_IOS)
+ #include "components/sync/base/get_session_name_ios.h"
+@@ -54,7 +54,7 @@ std::string GetSessionNameSynchronously() {
+ session_name = "Chromebook";
+ break;
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ session_name = internal::GetHostname();
+ #elif defined(OS_IOS)
+ session_name = internal::GetComputerName();
diff --git a/devel/electron4/files/patch-components_sync_base_get__session__name__linux.cc b/devel/electron4/files/patch-components_sync_base_get__session__name__linux.cc
new file mode 100644
index 000000000000..c7a5b3259f20
--- /dev/null
+++ b/devel/electron4/files/patch-components_sync_base_get__session__name__linux.cc
@@ -0,0 +1,14 @@
+--- components/sync/base/get_session_name_linux.cc.orig 2019-03-15 06:25:43 UTC
++++ components/sync/base/get_session_name_linux.cc
+@@ -13,8 +13,9 @@ namespace syncer {
+ namespace internal {
+
+ std::string GetHostname() {
+- char hostname[HOST_NAME_MAX];
+- if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
++ int len = sysconf(_SC_HOST_NAME_MAX);
++ char hostname[len];
++ if (gethostname(hostname, len) == 0) // Success.
+ return hostname;
+ return base::GetLinuxDistro();
+ }
diff --git a/devel/electron4/files/patch-components_update__client_update__query__params.cc b/devel/electron4/files/patch-components_update__client_update__query__params.cc
new file mode 100644
index 000000000000..a1fbde7ad4ed
--- /dev/null
+++ b/devel/electron4/files/patch-components_update__client_update__query__params.cc
@@ -0,0 +1,11 @@
+--- components/update_client/update_query_params.cc.orig 2019-03-15 06:37:19 UTC
++++ components/update_client/update_query_params.cc
+@@ -38,6 +38,8 @@ const char kOs[] =
+ "fuchsia";
+ #elif defined(OS_OPENBSD)
+ "openbsd";
++#elif defined(OS_FREEBSD)
++ "freebsd";
+ #else
+ #error "unknown os"
+ #endif
diff --git a/devel/electron4/files/patch-components_url__matcher_regex__set__matcher.cc b/devel/electron4/files/patch-components_url__matcher_regex__set__matcher.cc
new file mode 100644
index 000000000000..fc7fc6e066e5
--- /dev/null
+++ b/devel/electron4/files/patch-components_url__matcher_regex__set__matcher.cc
@@ -0,0 +1,16 @@
+--- components/url_matcher/regex_set_matcher.cc.orig 2019-03-15 06:37:19 UTC
++++ components/url_matcher/regex_set_matcher.cc
+@@ -11,8 +11,13 @@
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+ #include "components/url_matcher/substring_set_matcher.h"
++#if defined(OS_BSD)
++#include <re2/filtered_re2.h>
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/filtered_re2.h"
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron4/files/patch-components_url__matcher_url__matcher__factory.cc b/devel/electron4/files/patch-components_url__matcher_url__matcher__factory.cc
new file mode 100644
index 000000000000..1b45923d8325
--- /dev/null
+++ b/devel/electron4/files/patch-components_url__matcher_url__matcher__factory.cc
@@ -0,0 +1,14 @@
+--- components/url_matcher/url_matcher_factory.cc.orig 2019-03-15 06:37:19 UTC
++++ components/url_matcher/url_matcher_factory.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "components/url_matcher/url_matcher_constants.h"
+ #include "components/url_matcher/url_matcher_helpers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron4/files/patch-components_webcrypto_algorithms_test__helpers.cc b/devel/electron4/files/patch-components_webcrypto_algorithms_test__helpers.cc
new file mode 100644
index 000000000000..096720a219ad
--- /dev/null
+++ b/devel/electron4/files/patch-components_webcrypto_algorithms_test__helpers.cc
@@ -0,0 +1,14 @@
+--- components/webcrypto/algorithms/test_helpers.cc.orig 2019-03-15 06:37:19 UTC
++++ components/webcrypto/algorithms/test_helpers.cc
+@@ -25,7 +25,11 @@
+ #include "components/webcrypto/status.h"
+ #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
+ #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace webcrypto {
+
diff --git a/devel/electron4/files/patch-content_app_content__main__runner__impl.cc b/devel/electron4/files/patch-content_app_content__main__runner__impl.cc
new file mode 100644
index 000000000000..7cd5745d6776
--- /dev/null
+++ b/devel/electron4/files/patch-content_app_content__main__runner__impl.cc
@@ -0,0 +1,29 @@
+--- content/app/content_main_runner_impl.cc.orig 2019-03-16 09:15:21 UTC
++++ content/app/content_main_runner_impl.cc
+@@ -85,10 +85,10 @@
+ #include "base/posix/global_descriptors.h"
+ #include "content/public/common/content_descriptors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_fork_delegate_linux.h"
+ #endif
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "sandbox/linux/services/libc_interceptor.h"
+ #include "services/service_manager/zygote/zygote_main.h"
+ #endif
+@@ -688,11 +688,11 @@ int ContentMainRunnerImpl::Initialize(const ContentMai
+ base::GlobalDescriptors::kBaseDescriptor);
+ #endif // !OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ g_fds->Set(service_manager::kCrashDumpSignal,
+ service_manager::kCrashDumpSignal +
+ base::GlobalDescriptors::kBaseDescriptor);
+-#endif // OS_LINUX || OS_OPENBSD
++#endif // OS_LINUX
+
+ #endif // !OS_WIN
+
diff --git a/devel/electron4/files/patch-content_browser_BUILD.gn b/devel/electron4/files/patch-content_browser_BUILD.gn
new file mode 100644
index 000000000000..441879f3d2de
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_BUILD.gn
@@ -0,0 +1,14 @@
+--- content/browser/BUILD.gn.orig 2019-03-15 06:37:19 UTC
++++ content/browser/BUILD.gn
+@@ -1817,11 +1817,6 @@ jumbo_source_set("browser") {
+ "tracing/cros_tracing_agent.cc",
+ "tracing/cros_tracing_agent.h",
+ ]
+- } else {
+- sources += [
+- "memory/memory_monitor_linux.cc",
+- "memory/memory_monitor_linux.h",
+- ]
+ }
+
+ if (is_chromeos || is_android || is_chromecast) {
diff --git a/devel/electron4/files/patch-content_browser_browser__main__loop.cc b/devel/electron4/files/patch-content_browser_browser__main__loop.cc
new file mode 100644
index 000000000000..b9b2e2f72958
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_browser__main__loop.cc
@@ -0,0 +1,28 @@
+--- content/browser/browser_main_loop.cc.orig 2019-03-16 09:15:20 UTC
++++ content/browser/browser_main_loop.cc
+@@ -238,6 +238,13 @@
+ #include "base/mac/foundation_util.h"
+ #endif
+
++#if defined(OS_BSD)
++#include "content/browser/sandbox_host_linux.h"
++#include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#include "content/public/common/common_sandbox_support_linux.h"
++#include "services/service_manager/sandbox/sandbox.h"
++#endif
++
+ // One of the linux specific headers defines this as a macro.
+ #ifdef DestroyAll
+ #undef DestroyAll
+@@ -587,6 +594,11 @@ int BrowserMainLoop::EarlyInitialization() {
+ // by now since a thread to start the ServiceManager has been created
+ // before the browser main loop starts.
+ DCHECK(SandboxHostLinux::GetInstance()->IsInitialized());
++#elif defined(OS_BSD)
++ SandboxHostLinux::GetInstance()->Init();
++ base::FileHandleMappingVector fds_to_map;
++ const int sfd = SandboxHostLinux::GetInstance()->GetChildSocket();
++ fds_to_map.push_back(std::make_pair(sfd, service_manager::GetSandboxFD()));
+ #endif
+
+ #if defined(USE_X11)
diff --git a/devel/electron4/files/patch-content_browser_child__process__launcher__helper__linux.cc b/devel/electron4/files/patch-content_browser_child__process__launcher__helper__linux.cc
new file mode 100644
index 000000000000..3418a8f6d87e
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_child__process__launcher__helper__linux.cc
@@ -0,0 +1,76 @@
+--- content/browser/child_process_launcher_helper_linux.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/child_process_launcher_helper_linux.cc
+@@ -17,7 +17,9 @@
+ #include "content/public/common/sandboxed_process_launcher_delegate.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#if !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_handle.h"
++#endif
+ #include "services/service_manager/zygote/host/zygote_communication_linux.h"
+ #include "services/service_manager/zygote/host/zygote_host_impl_linux.h"
+
+@@ -69,6 +71,7 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ int* launch_result) {
+ *is_synchronous_launch = true;
+
++#if !defined(OS_BSD)
+ service_manager::ZygoteHandle zygote_handle =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoZygote)
+ ? nullptr
+@@ -82,7 +85,6 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ GetProcessType());
+ *launch_result = LAUNCH_RESULT_SUCCESS;
+
+-#if !defined(OS_OPENBSD)
+ if (handle) {
+ // This is just a starting score for a renderer or extension (the
+ // only types of processes that will be started this way). It will
+@@ -93,13 +95,13 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ service_manager::ZygoteHostImpl::GetInstance()->AdjustRendererOOMScore(
+ handle, kLowestRendererOomScore);
+ }
+-#endif
+
+ Process process;
+ process.process = base::Process(handle);
+ process.zygote = zygote_handle;
+ return process;
+ }
++#endif
+
+ Process process;
+ process.process = base::LaunchProcess(*command_line(), options);
+@@ -117,10 +119,14 @@ ChildProcessTerminationInfo ChildProcessLauncherHelper
+ const ChildProcessLauncherHelper::Process& process,
+ bool known_dead) {
+ ChildProcessTerminationInfo info;
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ info.status = process.zygote->GetTerminationStatus(
+ process.process.Handle(), known_dead, &info.exit_code);
+ } else if (known_dead) {
++#else
++ if (known_dead) {
++#endif
+ info.status = base::GetKnownDeadTerminationStatus(process.process.Handle(),
+ &info.exit_code);
+ } else {
+@@ -144,13 +150,17 @@ void ChildProcessLauncherHelper::ForceNormalProcessTer
+ DCHECK(CurrentlyOnProcessLauncherTaskRunner());
+ process.process.Terminate(service_manager::RESULT_CODE_NORMAL_EXIT, false);
+ // On POSIX, we must additionally reap the child.
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ // If the renderer was created via a zygote, we have to proxy the reaping
+ // through the zygote process.
+ process.zygote->EnsureProcessTerminated(process.process.Handle());
+ } else {
++#endif
+ base::EnsureProcessTerminated(std::move(process.process));
++#if !defined(OS_BSD)
+ }
++#endif
+ }
+
+ void ChildProcessLauncherHelper::SetProcessPriorityOnLauncherThread(
diff --git a/devel/electron4/files/patch-content_browser_media_media__internals.cc b/devel/electron4/files/patch-content_browser_media_media__internals.cc
new file mode 100644
index 000000000000..9f0c2dfbc6fe
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_media_media__internals.cc
@@ -0,0 +1,11 @@
+--- content/browser/media/media_internals.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/media/media_internals.cc
+@@ -724,7 +724,7 @@ void MediaInternals::UpdateVideoCaptureDeviceCapabilit
+ device_dict->SetString("name", descriptor.GetNameAndModel());
+ device_dict->Set("formats", std::move(format_list));
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_ANDROID)
++ defined(OS_ANDROID) || defined(OS_BSD)
+ device_dict->SetString("captureApi", descriptor.GetCaptureApiTypeString());
+ #endif
+ video_capture_capabilities_cached_data_.Append(std::move(device_dict));
diff --git a/devel/electron4/files/patch-content_browser_memory_memory__monitor.cc b/devel/electron4/files/patch-content_browser_memory_memory__monitor.cc
new file mode 100644
index 000000000000..02baaf048f92
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_memory_memory__monitor.cc
@@ -0,0 +1,11 @@
+--- content/browser/memory/memory_monitor.cc.orig 2019-03-15 06:25:43 UTC
++++ content/browser/memory/memory_monitor.cc
+@@ -22,7 +22,7 @@ void MemoryMonitorDelegate::GetSystemMemoryInfo(
+ base::GetSystemMemoryInfo(mem_info);
+ }
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // TODO(bashi,bcwhite): Remove when memory monitor for mac is available.
+ std::unique_ptr<MemoryMonitor> CreateMemoryMonitor() {
+ NOTREACHED();
diff --git a/devel/electron4/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc b/devel/electron4/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
new file mode 100644
index 000000000000..4e395b9bdb59
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
@@ -0,0 +1,16 @@
+--- content/browser/memory/swap_metrics_driver_impl_linux.cc.orig 2019-03-15 06:25:43 UTC
++++ content/browser/memory/swap_metrics_driver_impl_linux.cc
+@@ -44,9 +44,13 @@ SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinu
+ SwapMetricsDriver::SwapMetricsUpdateResult
+ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
+ base::VmStatInfo vmstat;
++#if !defined(OS_BSD)
+ if (!base::GetVmStatInfo(&vmstat)) {
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
+ }
++#else
++ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
++#endif
+
+ uint64_t in_counts = vmstat.pswpin - last_pswpin_;
+ uint64_t out_counts = vmstat.pswpout - last_pswpout_;
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc b/devel/electron4/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
new file mode 100644
index 000000000000..c5dd15599161
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/input/input_device_change_observer.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/input/input_device_change_observer.cc
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_WIN)
+ #include "ui/events/devices/input_device_observer_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/devices/input_device_manager.h"
+ #elif defined(OS_ANDROID)
+ #include "ui/events/devices/input_device_observer_android.h"
+@@ -21,7 +21,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ render_view_host_ = rvh;
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->AddObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
+@@ -31,7 +31,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ InputDeviceChangeObserver::~InputDeviceChangeObserver() {
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.cc b/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.cc
new file mode 100644
index 000000000000..355d6d0a0caf
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_message_filter.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/render_message_filter.cc
+@@ -73,7 +73,7 @@
+ #if defined(OS_MACOSX)
+ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/threading/platform_thread.h"
+ #endif
+@@ -165,7 +165,7 @@ void RenderMessageFilter::CreateFullscreenWidget(
+ std::move(callback).Run(route_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriorityOnFileThread(
+ base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority) {
+@@ -186,7 +186,7 @@ void RenderMessageFilter::SetThreadPriorityOnFileThrea
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) {
+ constexpr base::TaskTraits kTraits = {
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.h b/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.h
new file mode 100644
index 000000000000..5f7dd1d48d67
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__message__filter.h
@@ -0,0 +1,19 @@
+--- content/browser/renderer_host/render_message_filter.h.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/render_message_filter.h
+@@ -110,14 +110,14 @@ class CONTENT_EXPORT RenderMessageFilter
+ const url::Origin& cache_storage_origin,
+ const std::string& cache_storage_cache_name) override;
+ void HasGpuProcess(HasGpuProcessCallback callback) override;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) override;
+ #endif
+
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority);
+ #endif
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__process__host__impl.h b/devel/electron4/files/patch-content_browser_renderer__host_render__process__host__impl.h
new file mode 100644
index 000000000000..ced1b1e6a67f
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__process__host__impl.h
@@ -0,0 +1,15 @@
+--- content/browser/renderer_host/render_process_host_impl.h.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/render_process_host_impl.h
+@@ -343,10 +343,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
+ is_for_guests_only_ = is_for_guests_only;
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Launch the zygote early in the browser startup.
+ static void EarlyZygoteLaunch();
+-#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void RecomputeAndUpdateWebKitPreferences();
+
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__view__host__impl.cc b/devel/electron4/files/patch-content_browser_renderer__host_render__view__host__impl.cc
new file mode 100644
index 000000000000..671b3c0ee1ce
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__view__host__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_view_host_impl.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/render_view_host_impl.cc
+@@ -151,7 +151,7 @@ void GetPlatformSpecificPrefs(RendererPreferences* pre
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CYVSCROLL);
+ prefs->arrow_bitmap_width_horizontal_scroll_bar_in_dips =
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXHSCROLL);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ prefs->system_font_family_name = gfx::Font().GetFontName();
+ #endif
+ }
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc b/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
new file mode 100644
index 000000000000..4a9b3239fafd
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_widget_host_view_aura.cc.orig 2019-07-24 10:33:28 UTC
++++ content/browser/renderer_host/render_widget_host_view_aura.cc
+@@ -119,7 +119,7 @@
+ #include "content/browser/accessibility/browser_accessibility_auralinux.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+@@ -2081,7 +2081,7 @@ bool RenderWidgetHostViewAura::NeedsInputGrab() {
+ }
+
+ bool RenderWidgetHostViewAura::NeedsMouseCapture() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ return NeedsInputGrab();
+ #endif
+ return false;
+@@ -2281,7 +2281,7 @@ void RenderWidgetHostViewAura::ForwardKeyboardEventWit
+ if (!target_host)
+ return;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* keybinding_delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
diff --git a/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc b/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
new file mode 100644
index 000000000000..975b3dd3dfb9
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_widget_host_view_event_handler.cc.orig 2019-03-15 06:37:20 UTC
++++ content/browser/renderer_host/render_widget_host_view_event_handler.cc
+@@ -619,7 +619,7 @@ bool RenderWidgetHostViewEventHandler::CanRendererHand
+ if (event->type() == ui::ET_MOUSE_EXITED) {
+ if (mouse_locked || selection_popup)
+ return false;
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Don't forward the mouse leave message which is received when the context
+ // menu is displayed by the page. This confuses the page and causes state
+ // changes.
diff --git a/devel/electron4/files/patch-content_browser_service__worker_service__worker__fetch__dispatcher.cc b/devel/electron4/files/patch-content_browser_service__worker_service__worker__fetch__dispatcher.cc
new file mode 100644
index 000000000000..409da3bd509d
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_service__worker_service__worker__fetch__dispatcher.cc
@@ -0,0 +1,11 @@
+--- content/browser/service_worker/service_worker_fetch_dispatcher.cc.orig 2019-03-15 06:37:21 UTC
++++ content/browser/service_worker/service_worker_fetch_dispatcher.cc
+@@ -695,7 +695,7 @@ bool ServiceWorkerFetchDispatcher::MaybeStartNavigatio
+ network::ResourceRequest request;
+ request.method = original_request->method();
+ request.url = original_request->url();
+- // TODO(horo): Set site_for_cookies to support Same-site Cookies.
++ request.site_for_cookies = original_request->site_for_cookies();
+ request.request_initiator =
+ original_request->initiator().has_value()
+ ? original_request->initiator()
diff --git a/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.cc b/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.cc
new file mode 100644
index 000000000000..d1373c1f0ce9
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.cc
@@ -0,0 +1,69 @@
+--- content/browser/webui/web_ui_data_source_impl.cc.orig 2019-03-15 06:37:21 UTC
++++ content/browser/webui/web_ui_data_source_impl.cc
+@@ -120,24 +120,24 @@ WebUIDataSourceImpl::WebUIDataSourceImpl(const std::st
+ WebUIDataSourceImpl::~WebUIDataSourceImpl() {
+ }
+
+-void WebUIDataSourceImpl::AddString(base::StringPiece name,
++void WebUIDataSourceImpl::AddString(const std::string& name,
+ const base::string16& value) {
+ // TODO(dschuyler): Share only one copy of these strings.
+ localized_strings_.SetKey(name, base::Value(value));
+- replacements_[name.as_string()] = base::UTF16ToUTF8(value);
++ replacements_[name] = base::UTF16ToUTF8(value);
+ }
+
+-void WebUIDataSourceImpl::AddString(base::StringPiece name,
++void WebUIDataSourceImpl::AddString(const std::string& name,
+ const std::string& value) {
+ localized_strings_.SetKey(name, base::Value(value));
+- replacements_[name.as_string()] = value;
++ replacements_[name] = value;
+ }
+
+-void WebUIDataSourceImpl::AddLocalizedString(base::StringPiece name, int ids) {
++void WebUIDataSourceImpl::AddLocalizedString(const std::string& name, int ids) {
+ std::string utf8_str =
+ base::UTF16ToUTF8(GetContentClient()->GetLocalizedString(ids));
+ localized_strings_.SetKey(name, base::Value(utf8_str));
+- replacements_[name.as_string()] = utf8_str;
++ replacements_[name] = utf8_str;
+ }
+
+ void WebUIDataSourceImpl::AddLocalizedStrings(
+@@ -147,7 +147,7 @@ void WebUIDataSourceImpl::AddLocalizedStrings(
+ &replacements_);
+ }
+
+-void WebUIDataSourceImpl::AddBoolean(base::StringPiece name, bool value) {
++void WebUIDataSourceImpl::AddBoolean(const std::string& name, bool value) {
+ localized_strings_.SetBoolean(name, value);
+ // TODO(dschuyler): Change name of |localized_strings_| to |load_time_data_|
+ // or similar. These values haven't been found as strings for
+@@ -156,21 +156,21 @@ void WebUIDataSourceImpl::AddBoolean(base::StringPiece
+ // replacements.
+ }
+
+-void WebUIDataSourceImpl::AddInteger(base::StringPiece name, int32_t value) {
++void WebUIDataSourceImpl::AddInteger(const std::string& name, int32_t value) {
+ localized_strings_.SetInteger(name, value);
+ }
+
+-void WebUIDataSourceImpl::SetJsonPath(base::StringPiece path) {
++void WebUIDataSourceImpl::SetJsonPath(const std::string& path) {
+ DCHECK(json_path_.empty());
+ DCHECK(!path.empty());
+
+- json_path_ = path.as_string();
++ json_path_ = path;
+ excluded_paths_.insert(json_path_);
+ }
+
+-void WebUIDataSourceImpl::AddResourcePath(base::StringPiece path,
++void WebUIDataSourceImpl::AddResourcePath(const std::string& path,
+ int resource_id) {
+- path_to_idr_map_[path.as_string()] = resource_id;
++ path_to_idr_map_[path] = resource_id;
+ }
+
+ void WebUIDataSourceImpl::SetDefaultResource(int resource_id) {
diff --git a/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.h b/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.h
new file mode 100644
index 000000000000..9c1f3148bc5a
--- /dev/null
+++ b/devel/electron4/files/patch-content_browser_webui_web__ui__data__source__impl.h
@@ -0,0 +1,25 @@
+--- content/browser/webui/web_ui_data_source_impl.h.orig 2019-03-15 06:37:21 UTC
++++ content/browser/webui/web_ui_data_source_impl.h
+@@ -31,15 +31,15 @@ class CONTENT_EXPORT WebUIDataSourceImpl : public URLD
+ public WebUIDataSource {
+ public:
+ // WebUIDataSource implementation:
+- void AddString(base::StringPiece name, const base::string16& value) override;
+- void AddString(base::StringPiece name, const std::string& value) override;
+- void AddLocalizedString(base::StringPiece name, int ids) override;
++ void AddString(const std::string& name, const base::string16& value) override;
++ void AddString(const std::string& name, const std::string& value) override;
++ void AddLocalizedString(const std::string& name, int ids) override;
+ void AddLocalizedStrings(
+ const base::DictionaryValue& localized_strings) override;
+- void AddBoolean(base::StringPiece name, bool value) override;
+- void AddInteger(base::StringPiece name, int32_t value) override;
+- void SetJsonPath(base::StringPiece path) override;
+- void AddResourcePath(base::StringPiece path, int resource_id) override;
++ void AddBoolean(const std::string& name, bool value) override;
++ void AddInteger(const std::string& name, int32_t value) override;
++ void SetJsonPath(const std::string& path) override;
++ void AddResourcePath(const std::string& path, int resource_id) override;
+ void SetDefaultResource(int resource_id) override;
+ void SetRequestFilter(
+ const WebUIDataSource::HandleRequestCallback& callback) override;
diff --git a/devel/electron4/files/patch-content_common_BUILD.gn b/devel/electron4/files/patch-content_common_BUILD.gn
new file mode 100644
index 000000000000..62966fa52a10
--- /dev/null
+++ b/devel/electron4/files/patch-content_common_BUILD.gn
@@ -0,0 +1,15 @@
+--- content/common/BUILD.gn.orig 2019-03-15 06:37:21 UTC
++++ content/common/BUILD.gn
+@@ -417,6 +417,12 @@ source_set("common") {
+ libs += [ "android" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "sandbox_init_linux.cc",
++ ]
++ }
++
+ if (is_debug && !is_component_build && enable_plugins) {
+ # Content depends on the PPAPI message logging stuff; if this isn't here,
+ # some unit test binaries won't compile. This only worked in release mode
diff --git a/devel/electron4/files/patch-content_common_common__sandbox__support__linux.cc b/devel/electron4/files/patch-content_common_common__sandbox__support__linux.cc
new file mode 100644
index 000000000000..6ad4424dfcc5
--- /dev/null
+++ b/devel/electron4/files/patch-content_common_common__sandbox__support__linux.cc
@@ -0,0 +1,10 @@
+--- content/common/common_sandbox_support_linux.cc.orig 2019-03-15 06:25:44 UTC
++++ content/common/common_sandbox_support_linux.cc
+@@ -5,6 +5,7 @@
+ #include "content/public/common/common_sandbox_support_linux.h"
+
+ #include <sys/stat.h>
++#include <unistd.h>
+
+ #include <limits>
+ #include <memory>
diff --git a/devel/electron4/files/patch-content_common_user__agent.cc b/devel/electron4/files/patch-content_common_user__agent.cc
new file mode 100644
index 000000000000..79c47f9d503a
--- /dev/null
+++ b/devel/electron4/files/patch-content_common_user__agent.cc
@@ -0,0 +1,17 @@
+--- content/common/user_agent.cc.orig 2019-03-15 06:37:22 UTC
++++ content/common/user_agent.cc
+@@ -125,6 +125,14 @@ std::string BuildOSCpuInfo() {
+ #endif
+ ); // NOLINT
+
++#if defined(OS_BSD)
++#if defined(__x86_64__)
++ base::StringAppendF(&os_cpu, "; Linux x86_64");
++#else
++ base::StringAppendF(&os_cpu, "; Linux i686");
++#endif
++#endif
++
+ return os_cpu;
+ }
+
diff --git a/devel/electron4/files/patch-content_gpu_BUILD.gn b/devel/electron4/files/patch-content_gpu_BUILD.gn
new file mode 100644
index 000000000000..8a8eea1b0d4a
--- /dev/null
+++ b/devel/electron4/files/patch-content_gpu_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/gpu/BUILD.gn.orig 2019-03-15 06:37:22 UTC
++++ content/gpu/BUILD.gn
+@@ -130,7 +130,7 @@ target(link_target_type, "gpu_sources") {
+
+ # Use DRI on desktop Linux builds.
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+- (!is_chromecast || is_cast_desktop_build)) {
++ (!is_chromecast || is_cast_desktop_build) && !is_bsd) {
+ configs += [ "//build/config/linux/dri" ]
+ }
+ }
diff --git a/devel/electron4/files/patch-content_gpu_gpu__main.cc b/devel/electron4/files/patch-content_gpu_gpu__main.cc
new file mode 100644
index 000000000000..111a59379b2f
--- /dev/null
+++ b/devel/electron4/files/patch-content_gpu_gpu__main.cc
@@ -0,0 +1,47 @@
+--- content/gpu/gpu_main.cc.orig 2019-03-16 09:15:21 UTC
++++ content/gpu/gpu_main.cc
+@@ -77,7 +77,7 @@
+ #include "ui/gfx/x/x11_switches.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/gpu/gpu_sandbox_hook_linux.h"
+ #include "content/public/common/sandbox_init.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+@@ -110,7 +110,7 @@ namespace content {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread*,
+ const gpu::GPUInfo*,
+ const gpu::GpuPreferences&);
+@@ -171,7 +171,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHel
+ bool EnsureSandboxInitialized(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ return StartSandboxLinux(watchdog_thread, gpu_info, gpu_prefs);
+ #elif defined(OS_WIN)
+ return StartSandboxWindows(sandbox_info_);
+@@ -355,7 +355,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) {
+@@ -390,7 +390,7 @@ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdo
+
+ return res;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ bool StartSandboxWindows(const sandbox::SandboxInterfaceInfo* sandbox_info) {
diff --git a/devel/electron4/files/patch-content_gpu_gpu__sandbox__hook__linux.cc b/devel/electron4/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..0a987c7903c1
--- /dev/null
+++ b/devel/electron4/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
@@ -0,0 +1,11 @@
+--- content/gpu/gpu_sandbox_hook_linux.cc.orig 2019-03-15 06:37:22 UTC
++++ content/gpu/gpu_sandbox_hook_linux.cc
+@@ -68,7 +68,7 @@ inline bool UseLibV4L2() {
+ #endif
+ }
+
+-constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
++constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL;
+
+ void AddV4L2GpuWhitelist(
+ std::vector<BrokerFilePermission>* permissions,
diff --git a/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
new file mode 100644
index 000000000000..a37b064b2501
--- /dev/null
+++ b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
@@ -0,0 +1,29 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.cc.orig 2019-03-15 06:37:22 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.cc
+@@ -40,7 +40,7 @@ namespace content {
+
+ class PpapiBlinkPlatformImpl::SandboxSupport : public WebSandboxSupport {
+ public:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ explicit SandboxSupport(sk_sp<font_service::FontLoader> font_loader)
+ : font_loader_(std::move(font_loader)) {}
+ #endif
+@@ -48,7 +48,7 @@ class PpapiBlinkPlatformImpl::SandboxSupport : public
+
+ #if defined(OS_MACOSX)
+ bool LoadFont(CTFontRef srcFont, CGFontRef* out, uint32_t* fontID) override;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ SandboxSupport();
+ void GetFallbackFontForCharacter(
+ WebUChar32 character,
+@@ -129,7 +129,7 @@ void PpapiBlinkPlatformImpl::SandboxSupport::GetWebFon
+ #endif // !defined(OS_ANDROID) && !defined(OS_WIN)
+
+ PpapiBlinkPlatformImpl::PpapiBlinkPlatformImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ =
+ sk_make_sp<font_service::FontLoader>(ChildThread::Get()->GetConnector());
+ SkFontConfigInterface::SetGlobal(font_loader_);
diff --git a/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
new file mode 100644
index 000000000000..2260a2dbe158
--- /dev/null
+++ b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
@@ -0,0 +1,20 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.h.orig 2019-03-15 06:37:22 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "content/child/blink_platform_impl.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -58,7 +58,7 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImp
+ std::unique_ptr<SandboxSupport> sandbox_support_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron4/files/patch-content_ppapi__plugin_ppapi__plugin__main.cc b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__plugin__main.cc
new file mode 100644
index 000000000000..32d5adf76a24
--- /dev/null
+++ b/devel/electron4/files/patch-content_ppapi__plugin_ppapi__plugin__main.cc
@@ -0,0 +1,11 @@
+--- content/ppapi_plugin/ppapi_plugin_main.cc.orig 2019-03-15 06:37:22 UTC
++++ content/ppapi_plugin/ppapi_plugin_main.cc
+@@ -126,6 +126,8 @@ int PpapiPluginMain(const MainFunctionParams& paramete
+ service_manager::SandboxTypeFromCommandLine(command_line),
+ service_manager::SandboxLinux::PreSandboxHook(),
+ service_manager::SandboxLinux::Options());
++#elif defined(OS_BSD)
++ NOTIMPLEMENTED();
+ #endif
+
+ ChildProcess ppapi_process;
diff --git a/devel/electron4/files/patch-content_public_browser_web__ui__data__source.h b/devel/electron4/files/patch-content_public_browser_web__ui__data__source.h
new file mode 100644
index 000000000000..785d7a47071d
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_browser_web__ui__data__source.h
@@ -0,0 +1,51 @@
+--- content/public/browser/web_ui_data_source.h.orig 2019-03-15 06:37:23 UTC
++++ content/public/browser/web_ui_data_source.h
+@@ -13,7 +13,6 @@
+
+ #include "base/callback.h"
+ #include "base/strings/string16.h"
+-#include "base/strings/string_piece.h"
+ #include "content/common/content_export.h"
+
+ namespace base {
+@@ -45,33 +44,33 @@ class WebUIDataSource {
+ std::unique_ptr<base::DictionaryValue> update);
+
+ // Adds a string keyed to its name to our dictionary.
+- virtual void AddString(base::StringPiece name,
++ virtual void AddString(const std::string& name,
+ const base::string16& value) = 0;
+
+ // Adds a string keyed to its name to our dictionary.
+- virtual void AddString(base::StringPiece name, const std::string& value) = 0;
++ virtual void AddString(const std::string& name, const std::string& value) = 0;
+
+ // Adds a localized string with resource |ids| keyed to its name to our
+ // dictionary.
+- virtual void AddLocalizedString(base::StringPiece name, int ids) = 0;
++ virtual void AddLocalizedString(const std::string& name, int ids) = 0;
+
+ // Add strings from |localized_strings| to our dictionary.
+ virtual void AddLocalizedStrings(
+ const base::DictionaryValue& localized_strings) = 0;
+
+ // Adds a boolean keyed to its name to our dictionary.
+- virtual void AddBoolean(base::StringPiece name, bool value) = 0;
++ virtual void AddBoolean(const std::string& name, bool value) = 0;
+
+ // Adds a signed 32-bit integer keyed to its name to our dictionary. Larger
+ // integers may not be exactly representable in JavaScript. See
+ // MAX_SAFE_INTEGER in /v8/src/globals.h.
+- virtual void AddInteger(base::StringPiece name, int32_t value) = 0;
++ virtual void AddInteger(const std::string& name, int32_t value) = 0;
+
+ // Sets the path which will return the JSON strings.
+- virtual void SetJsonPath(base::StringPiece path) = 0;
++ virtual void SetJsonPath(const std::string& path) = 0;
+
+ // Adds a mapping between a path name and a resource to return.
+- virtual void AddResourcePath(base::StringPiece path, int resource_id) = 0;
++ virtual void AddResourcePath(const std::string& path, int resource_id) = 0;
+
+ // Sets the resource to returned when no other paths match.
+ virtual void SetDefaultResource(int resource_id) = 0;
diff --git a/devel/electron4/files/patch-content_public_common_child__process__host.h b/devel/electron4/files/patch-content_public_common_child__process__host.h
new file mode 100644
index 000000000000..30c511a7d81e
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_common_child__process__host.h
@@ -0,0 +1,20 @@
+--- content/public/common/child_process_host.h.orig 2019-03-15 06:37:23 UTC
++++ content/public/common/child_process_host.h
+@@ -45,7 +45,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // No special behavior requested.
+ CHILD_NORMAL = 0,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Indicates that the child execed after forking may be execced from
+ // /proc/self/exe rather than using the "real" app path. This prevents
+ // autoupdate from confusing us if it changes the file out from under us.
+@@ -54,7 +54,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // gdb). In this case, you'd use GetChildPath to get the real executable
+ // file name, and then prepend the GDB command to the command line.
+ CHILD_ALLOW_SELF = 1 << 0,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Returns the pathname to be used for a child process. If a subprocess
diff --git a/devel/electron4/files/patch-content_public_common_content__switches.cc b/devel/electron4/files/patch-content_public_common_content__switches.cc
new file mode 100644
index 000000000000..4ad38ad7d40f
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_common_content__switches.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.cc.orig 2019-04-06 12:09:25 UTC
++++ content/public/common/content_switches.cc
+@@ -972,7 +972,7 @@ const char kDisableAudioSupportForDesktopShare[] =
+ const char kDisablePanelFitting[] = "disable-panel-fitting";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ // Allows sending text-to-speech requests to speech-dispatcher, a common
+ // Linux speech service. Because it's buggy, the user must explicitly
+ // enable it so that visiting a random webpage can't cause instability.
diff --git a/devel/electron4/files/patch-content_public_common_content__switches.h b/devel/electron4/files/patch-content_public_common_content__switches.h
new file mode 100644
index 000000000000..2582c765fcdd
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_common_content__switches.h
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.h.orig 2019-04-06 12:09:25 UTC
++++ content/public/common/content_switches.h
+@@ -270,7 +270,7 @@ CONTENT_EXPORT extern const char kEnableOSKOverscroll[
+ CONTENT_EXPORT extern const char kDisablePanelFitting[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
+ #endif
+
diff --git a/devel/electron4/files/patch-content_public_common_renderer__preferences.h b/devel/electron4/files/patch-content_public_common_renderer__preferences.h
new file mode 100644
index 000000000000..9118d2b258c3
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_common_renderer__preferences.h
@@ -0,0 +1,11 @@
+--- content/public/common/renderer_preferences.h.orig 2019-03-15 06:37:23 UTC
++++ content/public/common/renderer_preferences.h
+@@ -137,7 +137,7 @@ struct CONTENT_EXPORT RendererPreferences {
+ // Country iso of the mobile network for content detection purpose.
+ std::string network_contry_iso;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string system_font_family_name;
+ #endif
+
diff --git a/devel/electron4/files/patch-content_public_common_use__zoom__for__dsf__policy.cc b/devel/electron4/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
new file mode 100644
index 000000000000..28a408c67484
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
@@ -0,0 +1,11 @@
+--- content/public/common/use_zoom_for_dsf_policy.cc.orig 2019-03-15 06:37:23 UTC
++++ content/public/common/use_zoom_for_dsf_policy.cc
+@@ -20,7 +20,7 @@ const base::Feature kUseZoomForDsfEnabledByDefault{
+ #endif
+
+ bool IsUseZoomForDSFEnabledByDefault() {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return true;
+ #elif defined(OS_WIN)
+ return base::FeatureList::IsEnabled(kUseZoomForDsfEnabledByDefault);
diff --git a/devel/electron4/files/patch-content_public_test_browser__test__base.cc b/devel/electron4/files/patch-content_public_test_browser__test__base.cc
new file mode 100644
index 000000000000..1c27a15035ff
--- /dev/null
+++ b/devel/electron4/files/patch-content_public_test_browser__test__base.cc
@@ -0,0 +1,13 @@
+--- content/public/test/browser_test_base.cc.orig 2019-03-15 06:37:23 UTC
++++ content/public/test/browser_test_base.cc
+@@ -52,6 +52,10 @@
+ #include "ui/gl/gl_implementation.h"
+ #include "ui/gl/gl_switches.h"
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#endif
++
+ #if defined(OS_POSIX)
+ #include "base/process/process_handle.h"
+ #endif
diff --git a/devel/electron4/files/patch-content_renderer_media_stream_processed__local__audio__source.cc b/devel/electron4/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
new file mode 100644
index 000000000000..36db1bdd67d0
--- /dev/null
+++ b/devel/electron4/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/stream/processed_local_audio_source.cc.orig 2019-03-15 06:37:23 UTC
++++ content/renderer/media/stream/processed_local_audio_source.cc
+@@ -267,7 +267,7 @@ void ProcessedLocalAudioSource::Capture(const media::A
+ bool key_pressed) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ DCHECK_LE(volume, 1.0);
+-#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_OPENBSD)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // We have a special situation on Linux where the microphone volume can be
+ // "higher than maximum". The input volume slider in the sound preference
+ // allows the user to set a scaling that is higher than 100%. It means that
diff --git a/devel/electron4/files/patch-content_renderer_render__thread__impl.cc b/devel/electron4/files/patch-content_renderer_render__thread__impl.cc
new file mode 100644
index 000000000000..0a4261ebe298
--- /dev/null
+++ b/devel/electron4/files/patch-content_renderer_render__thread__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/render_thread_impl.cc.orig 2019-04-06 12:09:25 UTC
++++ content/renderer/render_thread_impl.cc
+@@ -198,12 +198,21 @@
+ #include "mojo/public/cpp/bindings/message_dumper.h"
+ #endif
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
+ #endif
++#endif
+
++#if defined(OS_BSD)
++#include <stddef.h>
++#include <stdint.h>
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#endif
++
+ using base::ThreadRestrictions;
+ using blink::WebDocument;
+ using blink::WebFrame;
+@@ -977,7 +986,7 @@ void RenderThreadImpl::Init(
+ DCHECK(parsed_num_raster_threads) << string_value;
+ DCHECK_GT(num_raster_threads, 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ categorized_worker_pool_->SetBackgroundingCallback(
+ main_thread_scheduler_->DefaultTaskRunner(),
+ base::BindOnce(
+@@ -1018,7 +1027,7 @@ void RenderThreadImpl::Init(
+ GetConnector()->BindInterface(mojom::kBrowserServiceName,
+ mojo::MakeRequest(&storage_partition_service_));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ render_message_filter()->SetThreadPriority(
+ ChildProcess::current()->io_thread_id(), base::ThreadPriority::DISPLAY);
+ #endif
+@@ -1448,11 +1457,11 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl:
+ gpu::kGpuFeatureStatusEnabled);
+ const bool enable_gpu_memory_buffers =
+ !is_gpu_compositing_disabled_ &&
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames);
+ #else
+ cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ const bool enable_media_stream_gpu_memory_buffers =
+ enable_gpu_memory_buffers &&
+ base::FeatureList::IsEnabled(
diff --git a/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.cc b/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.cc
new file mode 100644
index 000000000000..b570c50dd10a
--- /dev/null
+++ b/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/renderer_blink_platform_impl.cc.orig 2019-03-16 09:15:21 UTC
++++ content/renderer/renderer_blink_platform_impl.cc
+@@ -123,7 +123,7 @@
+
+ #if defined(OS_POSIX)
+ #include "base/file_descriptor_posix.h"
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include <map>
+ #include <string>
+
+@@ -201,7 +201,7 @@ gpu::ContextType ToGpuContextType(blink::Platform::Con
+
+ //------------------------------------------------------------------------------
+
+-#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
++#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ class RendererBlinkPlatformImpl::SandboxSupport
+ : public blink::WebSandboxSupport {
+ public:
+@@ -274,7 +274,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ connector_ = service_manager::Connector::Create(&request);
+ }
+
+-#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
++#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ if (g_sandbox_enabled && sandboxEnabled()) {
+ #if defined(OS_MACOSX)
+ sandbox_support_.reset(new RendererBlinkPlatformImpl::SandboxSupport());
+@@ -302,7 +302,7 @@ RendererBlinkPlatformImpl::~RendererBlinkPlatformImpl(
+ }
+
+ void RendererBlinkPlatformImpl::Shutdown() {
+-#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
++#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ // SandboxSupport contains a map of WebFallbackFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -394,7 +394,7 @@ blink::BlameContext* RendererBlinkPlatformImpl::GetTop
+ }
+
+ blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_FUCHSIA)
++#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // These platforms do not require sandbox support.
+ return NULL;
+ #else
+@@ -587,7 +587,7 @@ bool RendererBlinkPlatformImpl::SandboxSupport::LoadFo
+ return content::LoadFont(src_font, out, font_id);
+ }
+
+-#elif defined(OS_POSIX) && !defined(OS_ANDROID)
++#elif defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+
+ void RendererBlinkPlatformImpl::SandboxSupport::GetFallbackFontForCharacter(
+ blink::WebUChar32 character,
diff --git a/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.h b/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.h
new file mode 100644
index 000000000000..648bb8d3fc54
--- /dev/null
+++ b/devel/electron4/files/patch-content_renderer_renderer__blink__platform__impl.h
@@ -0,0 +1,11 @@
+--- content/renderer/renderer_blink_platform_impl.h.orig 2019-03-16 09:15:21 UTC
++++ content/renderer/renderer_blink_platform_impl.h
+@@ -266,7 +266,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ std::unique_ptr<blink::WebThread> main_thread_;
+ std::unique_ptr<service_manager::Connector> connector_;
+
+-#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA)
++#if !defined(OS_ANDROID) && !defined(OS_WIN) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ class SandboxSupport;
+ std::unique_ptr<SandboxSupport> sandbox_support_;
+ #endif
diff --git a/devel/electron4/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc b/devel/electron4/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
new file mode 100644
index 000000000000..6e1e13b0e85b
--- /dev/null
+++ b/devel/electron4/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
@@ -0,0 +1,19 @@
+--- content/renderer/renderer_main_platform_delegate_linux.cc.orig 2019-03-15 06:25:44 UTC
++++ content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -30,6 +30,7 @@ void RendererMainPlatformDelegate::PlatformUninitializ
+ }
+
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if !defined(OS_BSD)
+ // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+ // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md
+ //
+@@ -65,7 +66,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
+ CHECK_EQ(errno, EPERM);
+ }
+ #endif // __x86_64__
+-
++#endif // ! OS_BSD
+ return true;
+ }
+
diff --git a/devel/electron4/files/patch-content_shell_browser_shell__browser__context.cc b/devel/electron4/files/patch-content_shell_browser_shell__browser__context.cc
new file mode 100644
index 000000000000..bc31130dfe74
--- /dev/null
+++ b/devel/electron4/files/patch-content_shell_browser_shell__browser__context.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_context.cc.orig 2019-03-15 06:37:23 UTC
++++ content/shell/browser/shell_browser_context.cc
+@@ -26,7 +26,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -108,7 +108,7 @@ void ShellBrowserContext::InitWhileIOAllowed() {
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
+ path_ = path_.Append(std::wstring(L"content_shell"));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(
+ base::nix::GetXDGDirectory(env.get(),
diff --git a/devel/electron4/files/patch-content_shell_browser_shell__browser__main__parts.cc b/devel/electron4/files/patch-content_shell_browser_shell__browser__main__parts.cc
new file mode 100644
index 000000000000..89666f2f6cfd
--- /dev/null
+++ b/devel/electron4/files/patch-content_shell_browser_shell__browser__main__parts.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_main_parts.cc.orig 2019-03-15 06:37:23 UTC
++++ content/shell/browser/shell_browser_main_parts.cc
+@@ -48,7 +48,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ #include "ui/base/ime/input_method_initializer.h"
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -128,7 +128,7 @@ int ShellBrowserMainParts::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron4/files/patch-content_test_content__test__suite.cc b/devel/electron4/files/patch-content_test_content__test__suite.cc
new file mode 100644
index 000000000000..5648c37d3b44
--- /dev/null
+++ b/devel/electron4/files/patch-content_test_content__test__suite.cc
@@ -0,0 +1,18 @@
+--- content/test/content_test_suite.cc.orig 2019-03-15 06:37:23 UTC
++++ content/test/content_test_suite.cc
+@@ -87,6 +87,7 @@ void ContentTestSuite::Initialize() {
+ // to initialize GL, so don't do it here.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_child_process = command_line->HasSwitch(switches::kTestChildProcess);
++#if !defined(OS_BSD)
+ if (!is_child_process) {
+ gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
+ gpu::GPUInfo gpu_info;
+@@ -99,6 +100,7 @@ void ContentTestSuite::Initialize() {
+ gpu_feature_info.disabled_extensions);
+ gl::init::InitializeExtensionSettingsOneOffPlatform();
+ }
++#endif
+ testing::TestEventListeners& listeners =
+ testing::UnitTest::GetInstance()->listeners();
+ listeners.Append(new TestInitializationListener);
diff --git a/devel/electron4/files/patch-content_utility_utility__main.cc b/devel/electron4/files/patch-content_utility_utility__main.cc
new file mode 100644
index 000000000000..fd2c6b5a998e
--- /dev/null
+++ b/devel/electron4/files/patch-content_utility_utility__main.cc
@@ -0,0 +1,11 @@
+--- content/utility/utility_main.cc.orig 2019-03-15 06:37:23 UTC
++++ content/utility/utility_main.cc
+@@ -64,7 +64,7 @@ int UtilityMain(const MainFunctionParams& parameters)
+ if (parameters.command_line.HasSwitch(switches::kUtilityStartupDialog))
+ WaitForDebugger("Utility");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // Initializes the sandbox before any threads are created.
+ // TODO(jorgelo): move this after GTK initialization when we enable a strict
+ // Seccomp-BPF policy.
diff --git a/devel/electron4/files/patch-device_bluetooth_BUILD.gn b/devel/electron4/files/patch-device_bluetooth_BUILD.gn
new file mode 100644
index 000000000000..7f3e235feac2
--- /dev/null
+++ b/devel/electron4/files/patch-device_bluetooth_BUILD.gn
@@ -0,0 +1,11 @@
+--- device/bluetooth/BUILD.gn.orig 2019-03-15 06:37:23 UTC
++++ device/bluetooth/BUILD.gn
+@@ -266,7 +266,7 @@ component("bluetooth") {
+ ]
+ }
+
+- if (is_chromeos || is_linux) {
++ if (is_chromeos || (is_linux && !is_bsd)) {
+ if (use_dbus) {
+ sources += [
+ "bluez/bluetooth_adapter_bluez.cc",
diff --git a/devel/electron4/files/patch-device_gamepad_gamepad__provider.cc b/devel/electron4/files/patch-device_gamepad_gamepad__provider.cc
new file mode 100644
index 000000000000..b31701d306a9
--- /dev/null
+++ b/devel/electron4/files/patch-device_gamepad_gamepad__provider.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/gamepad_provider.cc.orig 2019-03-15 06:37:23 UTC
++++ device/gamepad/gamepad_provider.cc
+@@ -187,7 +187,7 @@ void GamepadProvider::Initialize(std::unique_ptr<Gamep
+ monitor->AddDevicesChangedObserver(this);
+
+ polling_thread_.reset(new base::Thread("Gamepad polling thread"));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, the data fetcher needs to watch file descriptors, so the message
+ // loop needs to be a libevent loop.
+ const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_IO;
diff --git a/devel/electron4/files/patch-device_serial_BUILD.gn b/devel/electron4/files/patch-device_serial_BUILD.gn
new file mode 100644
index 000000000000..954438b1132c
--- /dev/null
+++ b/devel/electron4/files/patch-device_serial_BUILD.gn
@@ -0,0 +1,25 @@
+--- device/serial/BUILD.gn.orig 2019-03-15 06:37:23 UTC
++++ device/serial/BUILD.gn
+@@ -6,7 +6,7 @@ import("//build/config/features.gni")
+ import("//mojo/public/tools/bindings/mojom.gni")
+
+ # Library works only on desktop platforms.
+-if (is_win || is_linux || is_mac) {
++if (is_win || is_linux || is_mac || is_bsd) {
+ config("platform_support") {
+ visibility = [ ":serial" ]
+ if (is_win) {
+@@ -55,6 +55,13 @@ if (is_win || is_linux || is_mac) {
+ "//net",
+ "//third_party/re2",
+ ]
++
++ if (is_bsd) {
++ sources -= [
++ "serial_device_enumerator_linux.cc",
++ "serial_device_enumerator_linux.h",
++ ]
++ }
+
+ if (is_posix) {
+ sources += [
diff --git a/devel/electron4/files/patch-device_serial_serial__io__handler__posix.cc b/devel/electron4/files/patch-device_serial_serial__io__handler__posix.cc
new file mode 100644
index 000000000000..cef9cec9b84a
--- /dev/null
+++ b/devel/electron4/files/patch-device_serial_serial__io__handler__posix.cc
@@ -0,0 +1,11 @@
+--- device/serial/serial_io_handler_posix.cc.orig 2019-03-15 06:37:23 UTC
++++ device/serial/serial_io_handler_posix.cc
+@@ -62,7 +62,7 @@ bool BitrateToSpeedConstant(int bitrate, speed_t* spee
+ BITRATE_TO_SPEED_CASE(9600)
+ BITRATE_TO_SPEED_CASE(19200)
+ BITRATE_TO_SPEED_CASE(38400)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ BITRATE_TO_SPEED_CASE(57600)
+ BITRATE_TO_SPEED_CASE(115200)
+ BITRATE_TO_SPEED_CASE(230400)
diff --git a/devel/electron4/files/patch-device_usb_BUILD.gn b/devel/electron4/files/patch-device_usb_BUILD.gn
new file mode 100644
index 000000000000..24d4008019c9
--- /dev/null
+++ b/devel/electron4/files/patch-device_usb_BUILD.gn
@@ -0,0 +1,21 @@
+--- device/usb/BUILD.gn.orig 2019-03-15 06:37:23 UTC
++++ device/usb/BUILD.gn
+@@ -109,10 +109,17 @@ static_library("usb") {
+ ]
+ }
+
+- if (is_android || is_chromeos || is_linux) {
++ if (is_android || is_chromeos || (is_linux && !is_bsd)) {
+ sources += [
+ "usb_device_handle_usbfs.cc",
+ "usb_device_handle_usbfs.h",
++ ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "usb_device_linux.cc",
++ "usb_device_linux.h",
+ ]
+ }
+
diff --git a/devel/electron4/files/patch-device_usb_usb__context.cc b/devel/electron4/files/patch-device_usb_usb__context.cc
new file mode 100644
index 000000000000..a9d67671042d
--- /dev/null
+++ b/devel/electron4/files/patch-device_usb_usb__context.cc
@@ -0,0 +1,12 @@
+--- device/usb/usb_context.cc.orig 2019-03-15 06:25:44 UTC
++++ device/usb/usb_context.cc
+@@ -58,7 +58,9 @@ void UsbContext::UsbEventHandler::Run() {
+
+ void UsbContext::UsbEventHandler::Stop() {
+ base::subtle::Release_Store(&running_, 0);
++#if !defined(OS_FREEBSD) // XXX(rene) not available in base version
+ libusb_interrupt_handle_event(context_);
++#endif
+ }
+
+ UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {
diff --git a/devel/electron4/files/patch-device_usb_usb__error.cc b/devel/electron4/files/patch-device_usb_usb__error.cc
new file mode 100644
index 000000000000..9b069de570af
--- /dev/null
+++ b/devel/electron4/files/patch-device_usb_usb__error.cc
@@ -0,0 +1,11 @@
+--- device/usb/usb_error.cc.orig 2019-03-15 06:25:44 UTC
++++ device/usb/usb_error.cc
+@@ -9,7 +9,7 @@
+ namespace device {
+
+ std::string ConvertPlatformUsbErrorToString(int errcode) {
+- return libusb_strerror(static_cast<libusb_error>(errcode));
++ return "";
+ }
+
+ } // namespace device
diff --git a/devel/electron4/files/patch-device_usb_usb__service__impl.cc b/devel/electron4/files/patch-device_usb_usb__service__impl.cc
new file mode 100644
index 000000000000..0b50e818ff23
--- /dev/null
+++ b/devel/electron4/files/patch-device_usb_usb__service__impl.cc
@@ -0,0 +1,45 @@
+--- device/usb/usb_service_impl.cc.orig 2019-03-15 06:37:23 UTC
++++ device/usb/usb_service_impl.cc
+@@ -239,8 +239,10 @@ UsbServiceImpl::UsbServiceImpl()
+ }
+
+ UsbServiceImpl::~UsbServiceImpl() {
++#if !defined(OS_FREEBSD)
+ if (hotplug_enabled_)
+ libusb_hotplug_deregister_callback(context_->context(), hotplug_handle_);
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void UsbServiceImpl::GetDevices(const GetDevicesCallback& callback) {
+@@ -295,6 +297,7 @@ void UsbServiceImpl::OnUsbContext(scoped_refptr<UsbCon
+
+ context_ = std::move(context);
+
++#if !defined(OS_FREEBSD)
+ int rv = libusb_hotplug_register_callback(
+ context_->context(),
+ static_cast<libusb_hotplug_event>(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
+@@ -307,6 +310,7 @@ void UsbServiceImpl::OnUsbContext(scoped_refptr<UsbCon
+
+ // This will call any enumeration callbacks queued while initializing.
+ RefreshDevices();
++#endif // !defined(OS_FREEBSD)
+
+ #if defined(OS_WIN)
+ DeviceMonitorWin* device_monitor = DeviceMonitorWin::GetForAllInterfaces();
+@@ -503,6 +507,7 @@ void UsbServiceImpl::RemoveDevice(scoped_refptr<UsbDev
+ device->OnDisconnect();
+ }
+
++#if !defined(OS_FREEBSD)
+ // static
+ int LIBUSB_CALL UsbServiceImpl::HotplugCallback(libusb_context* context,
+ libusb_device* device_raw,
+@@ -537,6 +542,7 @@ int LIBUSB_CALL UsbServiceImpl::HotplugCallback(libusb
+
+ return 0;
+ }
++#endif // !defined(OS_FREEBSD)
+
+ void UsbServiceImpl::OnPlatformDeviceAdded(
+ ScopedLibusbDeviceRef platform_device) {
diff --git a/devel/electron4/files/patch-device_usb_usb__service__impl.h b/devel/electron4/files/patch-device_usb_usb__service__impl.h
new file mode 100644
index 000000000000..27890e5e3869
--- /dev/null
+++ b/devel/electron4/files/patch-device_usb_usb__service__impl.h
@@ -0,0 +1,26 @@
+--- device/usb/usb_service_impl.h.orig 2019-03-15 06:37:23 UTC
++++ device/usb/usb_service_impl.h
+@@ -73,11 +73,13 @@ class UsbServiceImpl :
+ scoped_refptr<UsbDeviceImpl> device);
+ void RemoveDevice(scoped_refptr<UsbDeviceImpl> device);
+
++#if !defined(OS_FREEBSD)
+ // Handle hotplug events from libusb.
+ static int LIBUSB_CALL HotplugCallback(libusb_context* context,
+ libusb_device* device,
+ libusb_hotplug_event event,
+ void* user_data);
++#endif
+ // These functions release a reference to the provided platform device.
+ void OnPlatformDeviceAdded(ScopedLibusbDeviceRef platform_device);
+ void OnPlatformDeviceRemoved(ScopedLibusbDeviceRef platform_device);
+@@ -95,7 +97,9 @@ class UsbServiceImpl :
+ // connected instead of only when a full enumeration is requested.
+ // TODO(reillyg): Support this on all platforms. crbug.com/411715
+ bool hotplug_enabled_ = false;
++#if !defined(OS_FREEBSD)
+ libusb_hotplug_callback_handle hotplug_handle_;
++#endif
+
+ // Enumeration callbacks are queued until an enumeration completes.
+ bool enumeration_ready_ = false;
diff --git a/devel/electron4/files/patch-electron_BUILD.gn b/devel/electron4/files/patch-electron_BUILD.gn
new file mode 100644
index 000000000000..d0b9a40cf62a
--- /dev/null
+++ b/devel/electron4/files/patch-electron_BUILD.gn
@@ -0,0 +1,27 @@
+--- electron/BUILD.gn.orig 2019-07-19 22:22:11 UTC
++++ electron/BUILD.gn
+@@ -308,6 +308,15 @@ static_library("electron_lib") {
+ "//extensions/common/url_pattern.h",
+ ]
+
++ if (is_bsd) {
++ sources -= [
++ "atom/common/crash_reporter/crash_reporter_linux.cc",
++ "atom/common/crash_reporter/crash_reporter_linux.h",
++ "atom/common/crash_reporter/linux/crash_dump_handler.cc",
++ "atom/common/crash_reporter/linux/crash_dump_handler.h",
++ ]
++ }
++
+ if (is_component_build) {
+ defines += [ "NODE_SHARED_MODE" ]
+ }
+@@ -377,7 +386,7 @@ static_library("electron_lib") {
+ sources += filenames.lib_sources_win
+ libs += [ "dwmapi.lib" ]
+ }
+- if (is_linux || is_win) {
++ if ((is_linux && !is_bsd) || is_win) {
+ deps += [ "//third_party/breakpad:client" ]
+ include_dirs += [ "//third_party/breakpad" ]
+ }
diff --git a/devel/electron4/files/patch-electron_atom_app_atom__main.cc b/devel/electron4/files/patch-electron_atom_app_atom__main.cc
new file mode 100644
index 000000000000..61e4f08d0d12
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_app_atom__main.cc
@@ -0,0 +1,35 @@
+--- electron/atom/app/atom_main.cc.orig 2019-03-16 12:31:37 UTC
++++ electron/atom/app/atom_main.cc
+@@ -24,12 +24,12 @@
+ #include "base/win/windows_version.h"
+ #include "content/public/app/sandbox_helper_win.h"
+ #include "sandbox/win/src/sandbox_types.h"
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+ #include <unistd.h>
+ #include <cstdio>
+ #include "atom/app/atom_main_delegate.h" // NOLINT
+ #include "content/public/app/content_main.h"
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+ #include <unistd.h>
+ #include <cstdio>
+ #include "atom/app/atom_library_main.h"
+@@ -175,7 +175,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, w
+ return content::ContentMain(params);
+ }
+
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
+@@ -196,7 +196,7 @@ int main(int argc, char* argv[]) {
+ return content::ContentMain(params);
+ }
+
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
diff --git a/devel/electron4/files/patch-electron_atom_app_atom__main__delegate.cc b/devel/electron4/files/patch-electron_atom_app_atom__main__delegate.cc
new file mode 100644
index 000000000000..116e78d607c9
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_app_atom__main__delegate.cc
@@ -0,0 +1,11 @@
+--- electron/atom/app/atom_main_delegate.cc.orig 2019-03-16 12:34:08 UTC
++++ electron/atom/app/atom_main_delegate.cc
+@@ -102,7 +102,7 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_
+ logging::SetLogItems(true, false, true, false);
+
+ // Enable convient stack printing.
+-#if defined(DEBUG) && defined(OS_LINUX)
++#if defined(DEBUG) && (defined(OS_LINUX) || defined(OS_BSD))
+ bool enable_stack_dumping = true;
+ #else
+ bool enable_stack_dumping = env->HasVar("ELECTRON_ENABLE_STACK_DUMPING");
diff --git a/devel/electron4/files/patch-electron_atom_browser_api_atom__api__app.cc b/devel/electron4/files/patch-electron_atom_browser_api_atom__api__app.cc
new file mode 100644
index 000000000000..388f309c9413
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_api_atom__api__app.cc
@@ -0,0 +1,29 @@
+--- electron/atom/browser/api/atom_api_app.cc.orig 2019-05-02 21:34:52 UTC
++++ electron/atom/browser/api/atom_api_app.cc
+@@ -619,7 +619,7 @@ void App::OnWillFinishLaunching() {
+ }
+
+ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Set the application name for audio streams shown in external
+ // applications. Only affects pulseaudio currently.
+ media::AudioManager::SetGlobalAppName(Browser::Get()->GetName());
+@@ -871,7 +871,7 @@ void App::SetPath(mate::Arguments* args,
+ }
+
+ void App::SetDesktopName(const std::string& desktop_name) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ env->SetVar("CHROME_DESKTOP", desktop_name);
+ #endif
+@@ -1318,7 +1318,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("getJumpListSettings", &App::GetJumpListSettings)
+ .SetMethod("setJumpList", &App::SetJumpList)
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("isUnityRunning",
+ base::Bind(&Browser::IsUnityRunning, browser))
+ #endif
diff --git a/devel/electron4/files/patch-electron_atom_browser_api_atom__api__web__contents.cc b/devel/electron4/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
new file mode 100644
index 000000000000..f6b6451684b4
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
@@ -0,0 +1,20 @@
+--- electron/atom/browser/api/atom_api_web_contents.cc.orig 2019-06-19 18:06:58 UTC
++++ electron/atom/browser/api/atom_api_web_contents.cc
+@@ -95,7 +95,7 @@
+ #include "ui/aura/window.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "content/public/common/renderer_preferences.h"
+ #include "ui/gfx/font_render_params.h"
+ #endif
+@@ -413,7 +413,7 @@ void WebContents::InitWithSessionAndOptions(v8::Isolat
+ auto* prefs = web_contents->GetMutableRendererPrefs();
+ prefs->accept_languages = g_browser_process->GetApplicationLocale();
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Update font settings.
+ CR_DEFINE_STATIC_LOCAL(
+ const gfx::FontRenderParams, params,
diff --git a/devel/electron4/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc b/devel/electron4/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
new file mode 100644
index 000000000000..32f4e34676dd
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
@@ -0,0 +1,20 @@
+--- electron/atom/browser/atom_browser_main_parts_posix.cc.orig 2019-03-16 12:41:31 UTC
++++ electron/atom/browser/atom_browser_main_parts_posix.cc
+@@ -180,6 +180,9 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+@@ -187,6 +190,7 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ // shadow stacks) bloat the stack frames, so we need to increase the stack
+ // size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ // TODO(viettrungluu,willchan): crbug.com/29675 - This currently leaks, so
+ // if you change this, you'll probably need to change the suppression.
diff --git a/devel/electron4/files/patch-electron_atom_browser_browser.h b/devel/electron4/files/patch-electron_atom_browser_browser.h
new file mode 100644
index 000000000000..ebb0cab1cf7e
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_browser.h
@@ -0,0 +1,15 @@
+--- electron/atom/browser/browser.h.orig 2019-03-16 12:10:27 UTC
++++ electron/atom/browser/browser.h
+@@ -207,10 +207,10 @@ class Browser : public WindowListObserver {
+ PCWSTR GetAppUserModelID();
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Whether Unity launcher is running.
+ bool IsUnityRunning();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Tell the application to open a file.
+ bool OpenFile(const std::string& file_path);
diff --git a/devel/electron4/files/patch-electron_atom_browser_io__thread.cc b/devel/electron4/files/patch-electron_atom_browser_io__thread.cc
new file mode 100644
index 000000000000..e218e38a2bee
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_io__thread.cc
@@ -0,0 +1,29 @@
+--- electron/atom/browser/io_thread.cc.orig 2019-05-23 00:43:26 UTC
++++ electron/atom/browser/io_thread.cc
+@@ -18,7 +18,7 @@
+ #include "net/cert_net/nss_ocsp.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "net/cert/cert_net_fetcher.h"
+ #include "net/cert_net/cert_net_fetcher_impl.h"
+ #endif
+@@ -96,7 +96,7 @@ void IOThread::Init() {
+ #if defined(USE_NSS_CERTS)
+ net::SetURLRequestContextForNSSHttpIO(url_request_context_.get());
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ net::SetGlobalCertNetFetcher(
+ net::CreateCertNetFetcher(url_request_context_.get()));
+ #endif
+@@ -106,7 +106,7 @@ void IOThread::CleanUp() {
+ #if defined(USE_NSS_CERTS)
+ net::SetURLRequestContextForNSSHttpIO(nullptr);
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ net::ShutdownGlobalCertNetFetcher();
+ #endif
+ // Explicitly release before the IO thread gets destroyed.
diff --git a/devel/electron4/files/patch-electron_atom_browser_relauncher__linux.cc b/devel/electron4/files/patch-electron_atom_browser_relauncher__linux.cc
new file mode 100644
index 000000000000..e94367e89b14
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_relauncher__linux.cc
@@ -0,0 +1,32 @@
+--- electron/atom/browser/relauncher_linux.cc.orig 2019-03-16 12:14:15 UTC
++++ electron/atom/browser/relauncher_linux.cc
+@@ -6,8 +6,10 @@
+
+ #include <fcntl.h>
+ #include <signal.h>
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
+ #include <sys/signalfd.h>
++#endif
+
+ #include "base/files/file_util.h"
+ #include "base/files/scoped_file.h"
+@@ -26,6 +28,10 @@ void RelauncherSynchronizeWithParent() {
+ base::ScopedFD relauncher_sync_fd(kRelauncherSyncFD);
+ static const auto signum = SIGUSR2;
+
++#if defined(__FreeBSD__)
++ PLOG(ERROR) << "signalfd & prctl";
++ fprintf(stderr, "Not Implemented signalfd & prctl in atom/browser/relauncher_linux.cc");
++#else
+ // send signum to current process when parent process ends.
+ if (HANDLE_EINTR(prctl(PR_SET_PDEATHSIG, signum)) != 0) {
+ PLOG(ERROR) << "prctl";
+@@ -50,6 +56,7 @@ void RelauncherSynchronizeWithParent() {
+
+ // Wait for the parent to exit
+ parentWaiter.Wait();
++#endif
+ }
+
+ int LaunchProgram(const StringVector& relauncher_args,
diff --git a/devel/electron4/files/patch-electron_atom_browser_ui_views_submenu__button.cc b/devel/electron4/files/patch-electron_atom_browser_ui_views_submenu__button.cc
new file mode 100644
index 000000000000..f58585c31795
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_browser_ui_views_submenu__button.cc
@@ -0,0 +1,11 @@
+--- electron/atom/browser/ui/views/submenu_button.cc.orig 2019-03-16 12:44:12 UTC
++++ electron/atom/browser/ui/views/submenu_button.cc
+@@ -26,7 +26,7 @@ SubmenuButton::SubmenuButton(const base::string16& tit
+ menu_button_listener,
+ false),
+ background_color_(background_color) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dont' use native style border.
+ SetBorder(CreateDefaultBorder());
+ #endif
diff --git a/devel/electron4/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc b/devel/electron4/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
new file mode 100644
index 000000000000..d001f3b004b1
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
@@ -0,0 +1,42 @@
+--- electron/atom/common/api/atom_api_crash_reporter.cc.orig 2019-03-16 12:35:09 UTC
++++ electron/atom/common/api/atom_api_crash_reporter.cc
+@@ -33,15 +33,23 @@ struct Converter<CrashReporter::UploadReportResult> {
+ namespace {
+
+ void AddExtraParameter(const std::string& key, const std::string& value) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->AddExtraParameter(key, value);
++#endif
+ }
+
+ void RemoveExtraParameter(const std::string& key) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->RemoveExtraParameter(key);
++#endif
+ }
+
+ std::map<std::string, std::string> GetParameters() {
++#if !defined(OS_BSD)
+ return CrashReporter::GetInstance()->GetParameters();
++#else
++ return std::map<std::string, std::string>();
++#endif
+ }
+
+ void Initialize(v8::Local<v8::Object> exports,
+@@ -49,6 +57,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ v8::Local<v8::Context> context,
+ void* priv) {
+ mate::Dictionary dict(context->GetIsolate(), exports);
++#if !defined(OS_BSD)
+ auto reporter = base::Unretained(CrashReporter::GetInstance());
+ dict.SetMethod("start", base::Bind(&CrashReporter::Start, reporter));
+ dict.SetMethod("addExtraParameter", &AddExtraParameter);
+@@ -60,6 +69,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ base::Bind(&CrashReporter::SetUploadToServer, reporter));
+ dict.SetMethod("getUploadToServer",
+ base::Bind(&CrashReporter::GetUploadToServer, reporter));
++#endif
+ }
+
+ } // namespace
diff --git a/devel/electron4/files/patch-electron_atom_common_atom__command__line.cc b/devel/electron4/files/patch-electron_atom_common_atom__command__line.cc
new file mode 100644
index 000000000000..b3f3947e2171
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_atom__command__line.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.cc.orig 2019-03-16 12:50:29 UTC
++++ electron/atom/common/atom_command_line.cc
+@@ -26,7 +26,7 @@ void AtomCommandLine::Init(int argc, base::CommandLine
+ argv_.assign(argv, argv + argc);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AtomCommandLine::InitializeFromCommandLine() {
+ argv_ = base::CommandLine::ForCurrentProcess()->argv();
diff --git a/devel/electron4/files/patch-electron_atom_common_atom__command__line.h b/devel/electron4/files/patch-electron_atom_common_atom__command__line.h
new file mode 100644
index 000000000000..5895823c85b0
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_atom__command__line.h
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.h.orig 2019-03-16 12:51:16 UTC
++++ electron/atom/common/atom_command_line.h
+@@ -21,7 +21,7 @@ class AtomCommandLine {
+
+ static void Init(int argc, base::CommandLine::CharType** argv);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux the command line has to be read from base::CommandLine since
+ // it is using zygote.
+ static void InitializeFromCommandLine();
diff --git a/devel/electron4/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc b/devel/electron4/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
new file mode 100644
index 000000000000..23bf573a5f6f
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
@@ -0,0 +1,14 @@
+--- electron/atom/common/crash_reporter/crash_reporter.cc.orig 2019-03-16 13:12:45 UTC
++++ electron/atom/common/crash_reporter/crash_reporter.cc
+@@ -102,7 +102,11 @@ CrashReporter* CrashReporter::GetInstance() {
+ #endif
+
+ void CrashReporter::StartInstance(const mate::Dictionary& options) {
++#if !defined(OS_BSD)
+ auto* reporter = GetInstance();
++#else
++ CrashReporter *reporter = NULL;
++#endif
+ if (!reporter)
+ return;
+
diff --git a/devel/electron4/files/patch-electron_atom_common_node__bindings.cc b/devel/electron4/files/patch-electron_atom_common_node__bindings.cc
new file mode 100644
index 000000000000..344906b653f4
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_node__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/node_bindings.cc.orig 2019-03-16 12:52:04 UTC
++++ electron/atom/common/node_bindings.cc
+@@ -207,7 +207,7 @@ void NodeBindings::Initialize() {
+ node::g_standalone_mode = browser_env_ == BROWSER;
+ node::g_upstream_node_mode = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Get real command line in renderer process forked by zygote.
+ if (browser_env_ != BROWSER)
+ AtomCommandLine::InitializeFromCommandLine();
diff --git a/devel/electron4/files/patch-electron_atom_common_node__bindings__linux.cc b/devel/electron4/files/patch-electron_atom_common_node__bindings__linux.cc
new file mode 100644
index 000000000000..3d45d650eafb
--- /dev/null
+++ b/devel/electron4/files/patch-electron_atom_common_node__bindings__linux.cc
@@ -0,0 +1,69 @@
+--- electron/atom/common/node_bindings_linux.cc.orig 2019-03-16 12:52:40 UTC
++++ electron/atom/common/node_bindings_linux.cc
+@@ -4,17 +4,31 @@
+
+ #include "atom/common/node_bindings_linux.h"
+
++#if !defined(OS_BSD)
+ #include <sys/epoll.h>
++#else
++#include <errno.h>
++#include <sys/select.h>
++#include <sys/sysctl.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#endif
+
+ namespace atom {
+
+ NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironment browser_env)
++#if !defined(OS_BSD)
+ : NodeBindings(browser_env), epoll_(epoll_create(1)) {
++#else
++ : NodeBindings(browser_env) {
++#endif
++#if !defined(OS_BSD)
+ int backend_fd = uv_backend_fd(uv_loop_);
+ struct epoll_event ev = {0};
+ ev.events = EPOLLIN;
+ ev.data.fd = backend_fd;
+ epoll_ctl(epoll_, EPOLL_CTL_ADD, backend_fd, &ev);
++#endif
+ }
+
+ NodeBindingsLinux::~NodeBindingsLinux() {}
+@@ -37,6 +51,7 @@ void NodeBindingsLinux::OnWatcherQueueChanged(uv_loop_
+ }
+
+ void NodeBindingsLinux::PollEvents() {
++#if !defined(OS_BSD)
+ int timeout = uv_backend_timeout(uv_loop_);
+
+ // Wait for new libuv events.
+@@ -45,6 +60,26 @@ void NodeBindingsLinux::PollEvents() {
+ struct epoll_event ev;
+ r = epoll_wait(epoll_, &ev, 1, timeout);
+ } while (r == -1 && errno == EINTR);
++#else
++ struct timeval tv;
++ int timeout = uv_backend_timeout(uv_loop_);
++ if (timeout != -1) {
++ tv.tv_sec = timeout / 1000;
++ tv.tv_usec = (timeout % 1000) * 1000;
++ }
++
++ fd_set readset;
++ int fd = uv_backend_fd(uv_loop_);
++ FD_ZERO(&readset);
++ FD_SET(fd, &readset);
++
++ // Wait for new libuv events.
++ int r;
++ do {
++ r = select(fd + 1, &readset, nullptr, nullptr,
++ timeout == -1 ? nullptr : &tv);
++ } while (r == -1 && errno == EINTR);
++#endif
+ }
+
+ // static
diff --git a/devel/electron4/files/patch-electron_brightray_browser_brightray__paths.h b/devel/electron4/files/patch-electron_brightray_browser_brightray__paths.h
new file mode 100644
index 000000000000..d7961f9e1a34
--- /dev/null
+++ b/devel/electron4/files/patch-electron_brightray_browser_brightray__paths.h
@@ -0,0 +1,11 @@
+--- electron/brightray/browser/brightray_paths.h.orig 2019-03-16 11:54:53 UTC
++++ electron/brightray/browser/brightray_paths.h
+@@ -24,7 +24,7 @@ enum {
+ DIR_USER_CACHE, // Directory where user cache can be written.
+ DIR_APP_LOGS, // Directory where app logs live
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_APP_DATA, // Application Data directory under the user profile.
+ #else
+ DIR_APP_DATA = base::DIR_APP_DATA,
diff --git a/devel/electron4/files/patch-electron_brightray_browser_browser__main__parts.cc b/devel/electron4/files/patch-electron_brightray_browser_browser__main__parts.cc
new file mode 100644
index 000000000000..403b28a1440c
--- /dev/null
+++ b/devel/electron4/files/patch-electron_brightray_browser_browser__main__parts.cc
@@ -0,0 +1,29 @@
+--- electron/brightray/browser/browser_main_parts.cc.orig 2019-03-16 13:00:11 UTC
++++ electron/brightray/browser/browser_main_parts.cc
+@@ -12,7 +12,7 @@
+ #include <string>
+ #include <utility>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
+@@ -169,7 +169,7 @@ BrowserMainParts::BrowserMainParts() {}
+
+ BrowserMainParts::~BrowserMainParts() {}
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ void OverrideAppLogsPath() {
+ base::FilePath path;
+ if (base::PathService::Get(brightray::DIR_APP_DATA, &path)) {
+@@ -256,7 +256,7 @@ void BrowserMainParts::PreMainMessageLoopStart() {
+ ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
+ if (!locale_file_path.empty()) {
+ custom_locale_ = locale;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
+ * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
+ g_setenv("LC_ALL", custom_locale_.c_str(), TRUE);
diff --git a/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.cc b/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.cc
new file mode 100644
index 000000000000..1fbe1f86745b
--- /dev/null
+++ b/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.cc
@@ -0,0 +1,38 @@
+--- electron/brightray/browser/views/views_delegate.cc.orig 2019-03-16 11:59:52 UTC
++++ electron/brightray/browser/views/views_delegate.cc
+@@ -9,7 +9,7 @@
+ #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+ #include "ui/views/widget/native_widget_aura.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -17,7 +17,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool IsDesktopEnvironmentUnity() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::nix::DesktopEnvironment desktop_env =
+@@ -71,7 +71,7 @@ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow
+ return false;
+ }
+
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return NULL;
+ }
+@@ -103,7 +103,7 @@ void ViewsDelegate::OnBeforeWidgetInit(
+ }
+
+ bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Ubuntu Unity, the system always provides a title bar for maximized
+ // windows.
+ if (!maximized)
diff --git a/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.h b/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.h
new file mode 100644
index 000000000000..ce81fd5e17dc
--- /dev/null
+++ b/devel/electron4/files/patch-electron_brightray_browser_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- electron/brightray/browser/views/views_delegate.h.orig 2019-03-16 12:06:26 UTC
++++ electron/brightray/browser/views/views_delegate.h
+@@ -39,7 +39,7 @@ class ViewsDelegate : public views::ViewsDelegate {
+ HICON GetDefaultWindowIcon() const override;
+ HICON GetSmallWindowIcon() const override;
+ bool IsWindowInMetro(gfx::NativeWindow window) const override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ #endif
+ views::NonClientFrameView* CreateDefaultNonClientFrameView(
diff --git a/devel/electron4/files/patch-electron_brightray_common_platform__util.h b/devel/electron4/files/patch-electron_brightray_common_platform__util.h
new file mode 100644
index 000000000000..2e852b889619
--- /dev/null
+++ b/devel/electron4/files/patch-electron_brightray_common_platform__util.h
@@ -0,0 +1,11 @@
+--- electron/brightray/common/platform_util.h.orig 2019-03-16 12:07:20 UTC
++++ electron/brightray/common/platform_util.h
+@@ -11,7 +11,7 @@ namespace brightray {
+
+ namespace platform_util {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a success flag.
+ // Unlike libgtkui, does *not* use "chromium-browser.desktop" as a fallback.
+ bool GetDesktopName(std::string* setme);
diff --git a/devel/electron4/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc b/devel/electron4/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..9c0731ca31ac
--- /dev/null
+++ b/devel/electron4/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,20 @@
+--- electron/chromium_src/chrome/browser/process_singleton_posix.cc.orig 2019-03-16 13:07:45 UTC
++++ electron/chromium_src/chrome/browser/process_singleton_posix.cc
+@@ -92,7 +92,7 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -859,7 +859,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ // The other process is shutting down, it's safe to start a new process.
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, arraysize(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.cc b/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.cc
new file mode 100644
index 000000000000..4497310d7b14
--- /dev/null
+++ b/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.cc
@@ -0,0 +1,17 @@
+--- electron/chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.cc.orig 2019-03-16 13:10:56 UTC
++++ electron/chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.cc
+@@ -16,10 +16,10 @@
+ #include "base/macros.h"
+ #include "base/strings/stringprintf.h"
+ #include "base/strings/utf_string_conversions.h"
+-#include "third_party/icu/source/common/unicode/normlzr.h"
+-#include "third_party/icu/source/common/unicode/schriter.h"
+-#include "third_party/icu/source/common/unicode/uscript.h"
+-#include "third_party/icu/source/i18n/unicode/ulocdata.h"
++#include "unicode/normlzr.h"
++#include "unicode/schriter.h"
++#include "unicode/uscript.h"
++#include "unicode/ulocdata.h"
+
+ // SpellcheckCharAttribute implementation:
+
diff --git a/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.h b/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.h
new file mode 100644
index 000000000000..2509a8a3f2e3
--- /dev/null
+++ b/devel/electron4/files/patch-electron_chromium__src_chrome_renderer_spellchecker_spellcheck__worditerator.h
@@ -0,0 +1,11 @@
+--- electron/chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.h.orig 2019-03-16 13:11:46 UTC
++++ electron/chromium_src/chrome/renderer/spellchecker/spellcheck_worditerator.h
+@@ -16,7 +16,7 @@
+
+ #include "base/macros.h"
+ #include "base/strings/string16.h"
+-#include "third_party/icu/source/common/unicode/uscript.h"
++#include "unicode/uscript.h"
+
+ namespace base {
+ namespace i18n {
diff --git a/devel/electron4/files/patch-electron_lib_browser_api_app.js b/devel/electron4/files/patch-electron_lib_browser_api_app.js
new file mode 100644
index 000000000000..fd88561c5e2d
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_browser_api_app.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/app.js.orig 2019-05-30 22:14:00 UTC
++++ electron/lib/browser/api/app.js
+@@ -71,7 +71,7 @@ if (process.platform === 'darwin') {
+ }
+ }
+
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ app.launcher = {
+ setBadgeCount: bindings.unityLauncherSetBadgeCount,
+ getBadgeCount: bindings.unityLauncherGetBadgeCount,
diff --git a/devel/electron4/files/patch-electron_lib_browser_api_dialog.js b/devel/electron4/files/patch-electron_lib_browser_api_dialog.js
new file mode 100644
index 000000000000..f4950b8d7fe3
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_browser_api_dialog.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/dialog.js.orig 2019-05-23 00:28:36 UTC
++++ electron/lib/browser/api/dialog.js
+@@ -54,7 +54,7 @@ const normalizeAccessKey = (text) => {
+ // existing single underscores with a second underscore, replace double
+ // ampersands with a single ampersand, and replace a single ampersand with
+ // a single underscore
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return text.replace(/_/g, '__').replace(/&(.?)/g, (match, after) => {
+ if (after === '&') return after
+ return `_${after}`
diff --git a/devel/electron4/files/patch-electron_lib_browser_api_menu-item-roles.js b/devel/electron4/files/patch-electron_lib_browser_api_menu-item-roles.js
new file mode 100644
index 000000000000..330d782cbef6
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_browser_api_menu-item-roles.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/menu-item-roles.js.orig 2019-05-23 00:29:28 UTC
++++ electron/lib/browser/api/menu-item-roles.js
+@@ -5,7 +5,7 @@ const { app } = require('electron')
+ const roles = {
+ about: {
+ get label () {
+- return process.platform === 'linux' ? 'About' : `About ${app.getName()}`
++ return (process.platform === 'linux' || process.platform === 'freebsd') ? 'About' : `About ${app.getName()}`
+ }
+ },
+ close: {
diff --git a/devel/electron4/files/patch-electron_lib_browser_api_power-monitor.js b/devel/electron4/files/patch-electron_lib_browser_api_power-monitor.js
new file mode 100644
index 000000000000..8d03fa3ce00c
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_browser_api_power-monitor.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/power-monitor.js.orig 2019-05-23 00:30:29 UTC
++++ electron/lib/browser/api/power-monitor.js
+@@ -8,7 +8,7 @@ Object.setPrototypeOf(PowerMonitor.prototype, EventEmi
+ EventEmitter.call(powerMonitor)
+
+ // On Linux we need to call blockShutdown() to subscribe to shutdown event.
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ powerMonitor.on('newListener', (event) => {
+ if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
+ powerMonitor.blockShutdown()
diff --git a/devel/electron4/files/patch-electron_lib_browser_init.js b/devel/electron4/files/patch-electron_lib_browser_init.js
new file mode 100644
index 000000000000..c2eab57f2267
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_browser_init.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/init.js.orig 2019-05-23 00:31:34 UTC
++++ electron/lib/browser/init.js
+@@ -167,7 +167,7 @@ const mainStartupScript = packageJson.main || 'index.j
+ const KNOWN_XDG_DESKTOP_VALUES = ['Pantheon', 'Unity:Unity7', 'pop:GNOME']
+
+ function currentPlatformSupportsAppIndicator () {
+- if (process.platform !== 'linux') return false
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') return false
+ const currentDesktop = process.env.XDG_CURRENT_DESKTOP
+
+ if (!currentDesktop) return false
diff --git a/devel/electron4/files/patch-electron_lib_common_api_clipboard.js b/devel/electron4/files/patch-electron_lib_common_api_clipboard.js
new file mode 100644
index 000000000000..6f7283729a46
--- /dev/null
+++ b/devel/electron4/files/patch-electron_lib_common_api_clipboard.js
@@ -0,0 +1,10 @@
+--- electron/lib/common/api/clipboard.js.orig 2019-05-23 00:33:16 UTC
++++ electron/lib/common/api/clipboard.js
+@@ -1,6 +1,6 @@
+ 'use strict'
+
+-if (process.platform === 'linux' && process.type === 'renderer') {
++if ((process.platform === 'linux' || process.platform === 'freebsd') && process.type === 'renderer') {
+ // On Linux we could not access clipboard in renderer process.
+ const { getRemoteForUsage } = require('@electron/internal/renderer/remote')
+ module.exports = getRemoteForUsage('clipboard').clipboard
diff --git a/devel/electron4/files/patch-electron_script_lib_utils.js b/devel/electron4/files/patch-electron_script_lib_utils.js
new file mode 100644
index 000000000000..fb20e1d05d9c
--- /dev/null
+++ b/devel/electron4/files/patch-electron_script_lib_utils.js
@@ -0,0 +1,10 @@
+--- electron/script/lib/utils.js.orig 2019-06-19 18:06:58 UTC
++++ electron/script/lib/utils.js
+@@ -13,6 +13,7 @@ function getElectronExec () {
+ case 'win32':
+ return `out/${OUT_DIR}/electron.exe`
+ case 'linux':
++ case 'freebsd':
+ return `out/${OUT_DIR}/electron`
+ default:
+ throw new Error('Unknown platform')
diff --git a/devel/electron4/files/patch-electron_spec_api-app-spec.js b/devel/electron4/files/patch-electron_spec_api-app-spec.js
new file mode 100644
index 000000000000..865dac6ea3c2
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-app-spec.js
@@ -0,0 +1,75 @@
+--- electron/spec/api-app-spec.js.orig 2019-07-01 21:24:47 UTC
++++ electron/spec/api-app-spec.js
+@@ -175,7 +175,7 @@ describe('app module', () => {
+ })
+
+ it('exits gracefully', async function () {
+- if (!['darwin', 'linux'].includes(process.platform)) {
++ if (!['darwin', 'linux', 'freebsd'].includes(process.platform)) {
+ this.skip()
+ return
+ }
+@@ -275,7 +275,7 @@ describe('app module', () => {
+ let w = null
+
+ before(function () {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -422,7 +422,8 @@ describe('app module', () => {
+ describe('app.setBadgeCount', () => {
+ const platformIsNotSupported =
+ (process.platform === 'win32') ||
+- (process.platform === 'linux' && !app.isUnityRunning())
++ (process.platform === 'linux' && !app.isUnityRunning()) ||
++ (process.platform === 'freebsd')
+ const platformIsSupported = !platformIsNotSupported
+
+ const expectedBadgeCount = 42
+@@ -476,7 +477,7 @@ describe('app module', () => {
+ ]
+
+ before(function () {
+- if (process.platform === 'linux' || process.mas) this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.mas) this.skip()
+ })
+
+ beforeEach(() => {
+@@ -605,7 +606,7 @@ describe('app module', () => {
+ let w = null
+
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -798,7 +799,7 @@ describe('app module', () => {
+ // doesn't affect nested `describe`s.
+ beforeEach(function () {
+ // FIXME Get these specs running on Linux CI
+- if (process.platform === 'linux' && isCI) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && isCI) {
+ this.skip()
+ }
+ })
+@@ -936,7 +937,7 @@ describe('app module', () => {
+
+ it('succeeds with complete GPUInfo', async () => {
+ const completeInfo = await getGPUInfo('complete')
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // For linux and macOS complete info is same as basic info
+ await verifyBasicGPUInfo(completeInfo)
+ const basicInfo = await getGPUInfo('basic')
+@@ -967,7 +968,7 @@ describe('app module', () => {
+ // XXX(alexeykuzmin): Calling `.skip()` inside a `before` hook
+ // doesn't affect nested `describe`s.
+ // FIXME Get these specs running on Linux
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+
diff --git a/devel/electron4/files/patch-electron_spec_api-auto-updater-spec.js b/devel/electron4/files/patch-electron_spec_api-auto-updater-spec.js
new file mode 100644
index 000000000000..a45ed722738e
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-auto-updater-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-auto-updater-spec.js.orig 2019-05-14 02:12:26 UTC
++++ electron/spec/api-auto-updater-spec.js
+@@ -140,7 +140,7 @@ describe('autoUpdater module', function () {
+
+ describe('error event', () => {
+ it('serializes correctly over the remote module', function (done) {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return done()
diff --git a/devel/electron4/files/patch-electron_spec_api-browser-window-spec.js b/devel/electron4/files/patch-electron_spec_api-browser-window-spec.js
new file mode 100644
index 000000000000..782143881c42
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-browser-window-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-browser-window-spec.js.orig 2019-05-14 02:19:04 UTC
++++ electron/spec/api-browser-window-spec.js
+@@ -1208,7 +1208,7 @@ describe('BrowserWindow module', () => {
+
+ describe('enableLargerThanScreen" option', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -2198,7 +2198,7 @@ describe('BrowserWindow module', () => {
+ w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
+ })
+ it('visibilityState changes when window is minimized', function (done) {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // FIXME(alexeykuzmin): Skip the test instead of marking it as passed.
+ // afterEach hook won't be run if a test is skipped dynamically.
+ // If afterEach isn't run current window won't be destroyed
+@@ -2388,7 +2388,7 @@ describe('BrowserWindow module', () => {
+ }
+
+ // FIXME These specs crash on Linux when run in a docker container
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ this.skip()
+ }
+ })
+@@ -2620,7 +2620,7 @@ describe('BrowserWindow module', () => {
+ // - `.skip()` called in the 'beforeEach' hook prevents 'afterEach'
+ // hook from being called.
+ // Not implemented on Linux.
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return
+ }
+
diff --git a/devel/electron4/files/patch-electron_spec_api-clipboard-spec.js b/devel/electron4/files/patch-electron_spec_api-clipboard-spec.js
new file mode 100644
index 000000000000..a306ba12ccf1
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-clipboard-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-clipboard-spec.js.orig 2019-05-16 05:23:55 UTC
++++ electron/spec/api-clipboard-spec.js
+@@ -27,7 +27,7 @@ describe('clipboard module', () => {
+ describe('clipboard.readHTML()', () => {
+ it('returns markup correctly', () => {
+ const text = '<string>Hi</string>'
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
+ clipboard.writeHTML(text)
+ expect(clipboard.readHTML()).to.equal(markup)
+ })
+@@ -43,7 +43,7 @@ describe('clipboard module', () => {
+
+ describe('clipboard.readBookmark', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -69,7 +69,7 @@ describe('clipboard module', () => {
+ const rtf = '{\\rtf1\\utf8 text}'
+ const p = path.join(fixtures, 'assets', 'logo.png')
+ const i = nativeImage.createFromPath(p)
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
+ const bookmark = { title: 'a title', url: 'test' }
+ clipboard.write({
+ text: 'test',
+@@ -84,7 +84,7 @@ describe('clipboard module', () => {
+ expect(clipboard.readRTF()).to.equal(rtf)
+ expect(clipboard.readImage().toDataURL()).to.equal(i.toDataURL())
+
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ expect(clipboard.readBookmark()).to.deep.equal(bookmark)
+ }
+ })
diff --git a/devel/electron4/files/patch-electron_spec_api-crash-reporter-spec.js b/devel/electron4/files/patch-electron_spec_api-crash-reporter-spec.js
new file mode 100644
index 000000000000..b2dcb6fe5ffe
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-crash-reporter-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-crash-reporter-spec.js.orig 2019-05-14 03:49:42 UTC
++++ electron/spec/api-crash-reporter-spec.js
+@@ -16,7 +16,7 @@ describe('crashReporter module', () => {
+ if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return
+
+ // TODO(alexeykuzmin): [Ch66] Fails. Fix it and enable back.
+- if (process.platform === 'linux') return
++ if (process.platform === 'linux' || process.platform === 'freebsd') return
+
+ let originalTempDirectory = null
+ let tempDirectory = null
diff --git a/devel/electron4/files/patch-electron_spec_api-net-log-spec.js b/devel/electron4/files/patch-electron_spec_api-net-log-spec.js
new file mode 100644
index 000000000000..b1efc629f2e1
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-net-log-spec.js
@@ -0,0 +1,29 @@
+--- electron/spec/api-net-log-spec.js.orig 2019-05-14 02:57:56 UTC
++++ electron/spec/api-net-log-spec.js
+@@ -95,7 +95,7 @@ describe('netLog module', () => {
+ })
+
+ it('should begin and end logging automatically when --log-net-log is passed', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -116,7 +116,7 @@ describe('netLog module', () => {
+
+ // FIXME(deepak1556): Ch69 follow up.
+ xit('should begin and end logging automtically when --log-net-log is passed, and behave correctly when .startLogging() and .stopLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -139,7 +139,7 @@ describe('netLog module', () => {
+ })
+
+ it('should end logging automatically when only .startLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
diff --git a/devel/electron4/files/patch-electron_spec_api-notification-dbus-spec.js b/devel/electron4/files/patch-electron_spec_api-notification-dbus-spec.js
new file mode 100644
index 000000000000..3e646826ff3d
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-notification-dbus-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-notification-dbus-spec.js.orig 2019-05-14 03:03:26 UTC
++++ electron/spec/api-notification-dbus-spec.js
+@@ -13,7 +13,7 @@ const Promise = require('bluebird')
+ const { remote } = require('electron')
+ const { app } = remote.require('electron')
+
+-const skip = process.platform !== 'linux' ||
++const skip = (process.platform !== 'linux' && process.platform === 'freebsd') ||
+ process.arch === 'ia32' ||
+ process.arch.indexOf('arm') === 0 ||
+ !process.env.DBUS_SESSION_BUS_ADDRESS;
diff --git a/devel/electron4/files/patch-electron_spec_api-power-monitor-spec.js b/devel/electron4/files/patch-electron_spec_api-power-monitor-spec.js
new file mode 100644
index 000000000000..c1a50a05a72e
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_api-power-monitor-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-power-monitor-spec.js.orig 2019-05-14 03:07:38 UTC
++++ electron/spec/api-power-monitor-spec.js
+@@ -14,7 +14,7 @@ const Promise = require('bluebird')
+ const { expect } = chai
+ chai.use(dirtyChai)
+
+-const skip = process.platform !== 'linux' || !process.env.DBUS_SYSTEM_BUS_ADDRESS
++const skip = (process.platform !== 'linux' && process.platform === 'freebsd') || !process.env.DBUS_SYSTEM_BUS_ADDRESS
+
+ describe('powerMonitor', () => {
+ let logindMock, dbusMockPowerMonitor, getCalls, emitSignal, reset
diff --git a/devel/electron4/files/patch-electron_spec_chromium-spec.js b/devel/electron4/files/patch-electron_spec_chromium-spec.js
new file mode 100644
index 000000000000..63f2250dfcd7
--- /dev/null
+++ b/devel/electron4/files/patch-electron_spec_chromium-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/chromium-spec.js.orig 2019-05-14 03:32:31 UTC
++++ electron/spec/chromium-spec.js
+@@ -861,7 +861,7 @@ describe('chromium feature', () => {
+ })
+
+ it('can be get as context in canvas', () => {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
diff --git a/devel/electron4/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc b/devel/electron4/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
new file mode 100644
index 000000000000..df60e8f6c52f
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/declarative_webrequest/webrequest_action.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -28,7 +28,11 @@
+ #include "extensions/common/extension.h"
+ #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+ #include "net/http/http_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using content::ResourceRequestInfo;
+
diff --git a/devel/electron4/files/patch-extensions_browser_api_messaging_message__service.cc b/devel/electron4/files/patch-extensions_browser_api_messaging_message__service.cc
new file mode 100644
index 000000000000..fb2d08c3a4ad
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_browser_api_messaging_message__service.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/messaging/message_service.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/browser/api/messaging/message_service.cc
+@@ -60,7 +60,7 @@ namespace {
+
+ const char kReceivingEndDoesntExistError[] =
+ "Could not establish connection. Receiving end does not exist.";
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kMissingPermissionError[] =
+ "Access to native messaging requires nativeMessaging permission.";
+ const char kProhibitedByPoliciesError[] =
+@@ -362,7 +362,7 @@ void MessageService::OpenChannelToNativeApp(
+ if (!source)
+ return;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ content::WebContents* web_contents =
+ content::WebContents::FromRenderFrameHost(source);
+ ExtensionWebContentsObserver* extension_web_contents_observer =
diff --git a/devel/electron4/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc b/devel/electron4/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
new file mode 100644
index 000000000000..e21835ecd731
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/networking_private/networking_private_delegate_factory.cc.orig 2019-03-15 06:25:45 UTC
++++ extensions/browser/api/networking_private/networking_private_delegate_factory.cc
+@@ -11,7 +11,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "extensions/browser/api/networking_private/networking_private_linux.h"
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ #include "components/wifi/wifi_service.h"
+@@ -61,7 +61,7 @@ KeyedService* NetworkingPrivateDelegateFactory::BuildS
+ NetworkingPrivateDelegate* delegate;
+ #if defined(OS_CHROMEOS)
+ delegate = new NetworkingPrivateChromeOS(browser_context);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ delegate = new NetworkingPrivateLinux();
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ std::unique_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
diff --git a/devel/electron4/files/patch-extensions_browser_api_web__request_form__data__parser.cc b/devel/electron4/files/patch-extensions_browser_api_web__request_form__data__parser.cc
new file mode 100644
index 000000000000..084c0f161635
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_browser_api_web__request_form__data__parser.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/web_request/form_data_parser.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/browser/api/web_request/form_data_parser.cc
+@@ -15,7 +15,11 @@
+ #include "base/values.h"
+ #include "net/base/escape.h"
+ #include "net/http/http_request_headers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::DictionaryValue;
+ using base::ListValue;
diff --git a/devel/electron4/files/patch-extensions_browser_browser__context__keyed__service__factories.cc b/devel/electron4/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..c84d0f5e2ebd
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
@@ -0,0 +1,11 @@
+--- extensions/browser/browser_context_keyed_service_factories.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/browser/browser_context_keyed_service_factories.cc
+@@ -85,7 +85,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ NetworkingConfigServiceFactory::GetInstance();
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ NetworkingPrivateEventRouterFactory::GetInstance();
+ #endif
+ PowerAPI::GetFactoryInstance();
diff --git a/devel/electron4/files/patch-extensions_common_api___permission__features.json b/devel/electron4/files/patch-extensions_common_api___permission__features.json
new file mode 100644
index 000000000000..538c32e5ab89
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_api___permission__features.json
@@ -0,0 +1,29 @@
+--- extensions/common/api/_permission_features.json.orig 2019-03-15 06:37:23 UTC
++++ extensions/common/api/_permission_features.json
+@@ -126,7 +126,7 @@
+ "bluetoothPrivate": {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+- "platforms": ["chromeos", "win", "mac", "linux"],
++ "platforms": ["chromeos", "win", "mac", "linux", "bsd"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/387169
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/387169
+@@ -453,7 +453,7 @@
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+@@ -484,7 +484,7 @@
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ // DO NOT ADD ANY MORE ENTRIES HERE.
+ // networkingPrivate is being migrated to networking.onc.
diff --git a/devel/electron4/files/patch-extensions_common_api_runtime.json b/devel/electron4/files/patch-extensions_common_api_runtime.json
new file mode 100644
index 000000000000..eb6185b7dff7
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_api_runtime.json
@@ -0,0 +1,11 @@
+--- extensions/common/api/runtime.json.orig 2019-03-15 06:37:23 UTC
++++ extensions/common/api/runtime.json
+@@ -66,7 +66,7 @@
+ "id": "PlatformOs",
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+- "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
++ "enum": ["mac", "win", "android", "cros", "linux", "freebsd", "openbsd"]
+ },
+ {
+ "id": "PlatformArch",
diff --git a/devel/electron4/files/patch-extensions_common_feature__switch.cc b/devel/electron4/files/patch-extensions_common_feature__switch.cc
new file mode 100644
index 000000000000..82b570a21883
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_feature__switch.cc
@@ -0,0 +1,14 @@
+--- extensions/common/feature_switch.cc.orig 2019-03-15 06:25:45 UTC
++++ extensions/common/feature_switch.cc
+@@ -44,11 +44,7 @@ class CommonSwitches {
+ FeatureSwitch::DEFAULT_ENABLED),
+ load_media_router_component_extension(
+ kLoadMediaRouterComponentExtensionFlag,
+-#if defined(GOOGLE_CHROME_BUILD)
+ FeatureSwitch::DEFAULT_ENABLED)
+-#else
+- FeatureSwitch::DEFAULT_DISABLED)
+-#endif // defined(GOOGLE_CHROME_BUILD)
+ {
+ }
+
diff --git a/devel/electron4/files/patch-extensions_common_features_feature.cc b/devel/electron4/files/patch-extensions_common_features_feature.cc
new file mode 100644
index 000000000000..c2917f159f35
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_features_feature.cc
@@ -0,0 +1,11 @@
+--- extensions/common/features/feature.cc.orig 2019-03-15 06:25:45 UTC
++++ extensions/common/features/feature.cc
+@@ -26,6 +26,8 @@ Feature::Platform Feature::GetCurrentPlatform() {
+ return MACOSX_PLATFORM;
+ #elif defined(OS_WIN)
+ return WIN_PLATFORM;
++#elif defined(OS_BSD)
++ return LINUX_PLATFORM;
+ #else
+ return UNSPECIFIED_PLATFORM;
+ #endif
diff --git a/devel/electron4/files/patch-extensions_common_image__util.cc b/devel/electron4/files/patch-extensions_common_image__util.cc
new file mode 100644
index 000000000000..1206faa8183b
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_image__util.cc
@@ -0,0 +1,14 @@
+--- extensions/common/image_util.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/common/image_util.cc
+@@ -11,7 +11,11 @@
+ #include "base/strings/string_number_conversions.h"
+ #include "base/strings/string_util.h"
+ #include "base/strings/stringprintf.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "third_party/skia/include/core/SkColor.h"
+ #include "third_party/skia/include/utils/SkParse.h"
+ #include "ui/gfx/color_utils.h"
diff --git a/devel/electron4/files/patch-extensions_common_stack__frame.cc b/devel/electron4/files/patch-extensions_common_stack__frame.cc
new file mode 100644
index 000000000000..97ebbfafdd89
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_common_stack__frame.cc
@@ -0,0 +1,14 @@
+--- extensions/common/stack_frame.cc.orig 2019-03-15 06:25:45 UTC
++++ extensions/common/stack_frame.cc
+@@ -7,7 +7,11 @@
+ #include <string>
+
+ #include "base/strings/utf_string_conversions.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace extensions {
+
diff --git a/devel/electron4/files/patch-extensions_renderer_bindings_api__binding__util.cc b/devel/electron4/files/patch-extensions_renderer_bindings_api__binding__util.cc
new file mode 100644
index 000000000000..1280525d1431
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_renderer_bindings_api__binding__util.cc
@@ -0,0 +1,11 @@
+--- extensions/renderer/bindings/api_binding_util.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/renderer/bindings/api_binding_util.cc
+@@ -128,6 +128,8 @@ std::string GetPlatformString() {
+ return "mac";
+ #elif defined(OS_WIN)
+ return "win";
++#elif defined(OS_BSD)
++ return "bsd";
+ #else
+ NOTREACHED();
+ return std::string();
diff --git a/devel/electron4/files/patch-extensions_shell_app_shell__main__delegate.cc b/devel/electron4/files/patch-extensions_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..94704d15a9b1
--- /dev/null
+++ b/devel/electron4/files/patch-extensions_shell_app_shell__main__delegate.cc
@@ -0,0 +1,29 @@
+--- extensions/shell/app/shell_main_delegate.cc.orig 2019-03-15 06:37:23 UTC
++++ extensions/shell/app/shell_main_delegate.cc
+@@ -39,7 +39,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -53,7 +53,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ extensions::ShellCrashReporterClient* GetCrashReporterClient() {
+ static base::NoDestructor<extensions::ShellCrashReporterClient> instance;
+ return instance.get();
+@@ -71,7 +71,7 @@ base::FilePath GetDataPath() {
+ return cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
+
+ base::FilePath data_dir;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ data_dir = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron4/files/patch-gpu_command__buffer_service_program__manager.cc b/devel/electron4/files/patch-gpu_command__buffer_service_program__manager.cc
new file mode 100644
index 000000000000..648837eeaddd
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_command__buffer_service_program__manager.cc
@@ -0,0 +1,14 @@
+--- gpu/command_buffer/service/program_manager.cc.orig 2019-03-15 06:37:24 UTC
++++ gpu/command_buffer/service/program_manager.cc
+@@ -31,7 +31,11 @@
+ #include "gpu/command_buffer/service/progress_reporter.h"
+ #include "gpu/command_buffer/service/shader_manager.h"
+ #include "gpu/config/gpu_preferences.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "ui/gl/gl_version_info.h"
+
+ using base::TimeDelta;
diff --git a/devel/electron4/files/patch-gpu_config_gpu__control__list.cc b/devel/electron4/files/patch-gpu_config_gpu__control__list.cc
new file mode 100644
index 000000000000..f623bbb427cd
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_config_gpu__control__list.cc
@@ -0,0 +1,32 @@
+--- gpu/config/gpu_control_list.cc.orig 2019-03-15 06:37:24 UTC
++++ gpu/config/gpu_control_list.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "build/build_config.h"
+ #include "gpu/config/gpu_info.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace gpu {
+ namespace {
+@@ -213,7 +217,7 @@ bool GpuControlList::More::GLVersionInfoMismatch(
+ GpuControlList::GLType GpuControlList::More::GetDefaultGLType() {
+ #if defined(OS_CHROMEOS)
+ return kGLTypeGL;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kGLTypeGL;
+ #elif defined(OS_MACOSX)
+ return kGLTypeGL;
+@@ -681,7 +685,7 @@ GpuControlList::OsType GpuControlList::GetOsType() {
+ return kOsAndroid;
+ #elif defined(OS_FUCHSIA)
+ return kOsFuchsia;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kOsLinux;
+ #elif defined(OS_MACOSX)
+ return kOsMacosx;
diff --git a/devel/electron4/files/patch-gpu_config_gpu__test__config.cc b/devel/electron4/files/patch-gpu_config_gpu__test__config.cc
new file mode 100644
index 000000000000..cdc5f74b96ef
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_config_gpu__test__config.cc
@@ -0,0 +1,11 @@
+--- gpu/config/gpu_test_config.cc.orig 2019-03-15 06:37:24 UTC
++++ gpu/config/gpu_test_config.cc
+@@ -25,7 +25,7 @@ namespace {
+ GPUTestConfig::OS GetCurrentOS() {
+ #if defined(OS_CHROMEOS)
+ return GPUTestConfig::kOsChromeOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return GPUTestConfig::kOsLinux;
+ #elif defined(OS_WIN)
+ int32_t major_version = 0;
diff --git a/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc b/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..1546fce8af82
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,54 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.cc.orig 2019-03-15 06:37:24 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.h"
+ #include "ui/gfx/client_native_pixmap_factory.h"
+ #include "ui/gfx/linux/client_native_pixmap_factory_dmabuf.h"
+@@ -36,13 +36,13 @@ namespace gpu {
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport() {
+ #if defined(USE_OZONE)
+ client_native_pixmap_factory_ = ui::CreateClientNativePixmapFactoryOzone();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ client_native_pixmap_factory_.reset(
+ gfx::CreateClientNativePixmapFactoryDmabuf());
+ #endif
+ }
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport(
+ std::unique_ptr<gfx::ClientNativePixmapFactory>
+ client_native_pixmap_factory)
+@@ -57,7 +57,7 @@ GpuMemoryBufferSupport::GetNativeGpuMemoryBufferType()
+ return gfx::IO_SURFACE_BUFFER;
+ #elif defined(OS_ANDROID)
+ return gfx::ANDROID_HARDWARE_BUFFER;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return gfx::NATIVE_PIXMAP;
+ #elif defined(OS_WIN)
+ return gfx::DXGI_SHARED_HANDLE;
+@@ -114,7 +114,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferCo
+ return false;
+ #elif defined(USE_OZONE)
+ return client_native_pixmap_factory_->IsConfigurationSupported(format, usage);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return false; // TODO(julian.isorce): Add linux support.
+ #elif defined(OS_WIN)
+ switch (usage) {
+@@ -171,7 +171,7 @@ GpuMemoryBufferSupport::CreateGpuMemoryBufferImplFromH
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ std::move(handle), size, format, usage, callback);
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case gfx::NATIVE_PIXMAP:
+ return GpuMemoryBufferImplNativePixmap::CreateFromHandle(
+ client_native_pixmap_factory(), std::move(handle), size, format,
diff --git a/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h b/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
new file mode 100644
index 000000000000..fb78dd3809fa
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
@@ -0,0 +1,38 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.h.orig 2019-03-15 06:37:24 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ namespace gfx {
+ class ClientNativePixmapFactory;
+ }
+@@ -28,7 +28,7 @@ namespace gpu {
+ class GPU_EXPORT GpuMemoryBufferSupport {
+ public:
+ GpuMemoryBufferSupport();
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ GpuMemoryBufferSupport(std::unique_ptr<gfx::ClientNativePixmapFactory>
+ client_native_pixmap_factory);
+ #endif
+@@ -42,7 +42,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format,
+ gfx::BufferUsage usage);
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ gfx::ClientNativePixmapFactory* client_native_pixmap_factory() {
+ return client_native_pixmap_factory_.get();
+ }
+@@ -65,7 +65,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ const GpuMemoryBufferImpl::DestructionCallback& callback);
+
+ private:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_;
+ #endif
+
diff --git a/devel/electron4/files/patch-gpu_ipc_service_gpu__init.cc b/devel/electron4/files/patch-gpu_ipc_service_gpu__init.cc
new file mode 100644
index 000000000000..0438e76e1daa
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_ipc_service_gpu__init.cc
@@ -0,0 +1,29 @@
+--- gpu/ipc/service/gpu_init.cc.orig 2019-03-15 06:37:24 UTC
++++ gpu/ipc/service/gpu_init.cc
+@@ -74,7 +74,7 @@ bool CollectGraphicsInfo(GPUInfo* gpu_info,
+ return success;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST) && !defined(OS_BSD)
+ bool CanAccessNvidiaDeviceFile() {
+ bool res = true;
+ base::AssertBlockingAllowed();
+@@ -110,7 +110,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ // crash during feature collection.
+ gpu::SetKeysForCrashLogging(gpu_info_);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA
+ gpu_info_.gpu.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile())
+ return false;
+@@ -194,7 +194,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ sandbox_helper_->PreSandboxStartup();
+
+ bool attempted_startsandbox = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // On Chrome OS ARM Mali, GPU driver userspace creates threads when
+ // initializing a GL context, so start the sandbox early.
+ // TODO(zmo): Need to collect OS version before this.
diff --git a/devel/electron4/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc b/devel/electron4/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
new file mode 100644
index 000000000000..e647902f5efc
--- /dev/null
+++ b/devel/electron4/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_memory_buffer_factory.cc.orig 2019-03-15 06:25:45 UTC
++++ gpu/ipc/service/gpu_memory_buffer_factory.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_native_pixmap.h"
+ #endif
+
+@@ -33,7 +33,7 @@ GpuMemoryBufferFactory::CreateNativeType() {
+ return base::WrapUnique(new GpuMemoryBufferFactoryIOSurface);
+ #elif defined(OS_ANDROID)
+ return base::WrapUnique(new GpuMemoryBufferFactoryAndroidHardwareBuffer);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return base::WrapUnique(new GpuMemoryBufferFactoryNativePixmap);
+ #elif defined(OS_WIN)
+ return base::WrapUnique(new GpuMemoryBufferFactoryDXGI);
diff --git a/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.cc b/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.cc
new file mode 100644
index 000000000000..3d3632b1e2c6
--- /dev/null
+++ b/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.cc
@@ -0,0 +1,20 @@
+--- headless/lib/browser/headless_content_browser_client.cc.orig 2019-03-15 06:37:24 UTC
++++ headless/lib/browser/headless_content_browser_client.cc
+@@ -205,7 +205,7 @@ void HeadlessContentBrowserClient::GetQuotaSettings(
+ partition->GetPath(), context->IsOffTheRecord(), std::move(callback));
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void HeadlessContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -216,7 +216,7 @@ void HeadlessContentBrowserClient::GetAdditionalMapped
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(HEADLESS_USE_BREAKPAD)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void HeadlessContentBrowserClient::AppendExtraCommandLineSwitches(
+ base::CommandLine* command_line,
diff --git a/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.h b/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.h
new file mode 100644
index 000000000000..16bab148f46b
--- /dev/null
+++ b/devel/electron4/files/patch-headless_lib_browser_headless__content__browser__client.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_content_browser_client.h.orig 2019-03-15 06:37:24 UTC
++++ headless/lib/browser/headless_content_browser_client.h
+@@ -32,7 +32,7 @@ class HeadlessContentBrowserClient : public content::C
+ content::BrowserContext* context,
+ content::StoragePartition* partition,
+ storage::OptionalQuotaSettingsCallback callback) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
diff --git a/devel/electron4/files/patch-headless_lib_headless__macros.h b/devel/electron4/files/patch-headless_lib_headless__macros.h
new file mode 100644
index 000000000000..3b38b0ab2e88
--- /dev/null
+++ b/devel/electron4/files/patch-headless_lib_headless__macros.h
@@ -0,0 +1,13 @@
+--- headless/lib/headless_macros.h.orig 2019-03-15 06:25:45 UTC
++++ headless/lib/headless_macros.h
+@@ -7,8 +7,8 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #define HEADLESS_USE_BREAKPAD
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ #endif // HEADLESS_LIB_HEADLESS_MACROS_H_
diff --git a/devel/electron4/files/patch-ipc_ipc__channel.h b/devel/electron4/files/patch-ipc_ipc__channel.h
new file mode 100644
index 000000000000..5fc27a0bcdbe
--- /dev/null
+++ b/devel/electron4/files/patch-ipc_ipc__channel.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel.h.orig 2019-03-15 06:37:27 UTC
++++ ipc/ipc_channel.h
+@@ -244,7 +244,7 @@ class COMPONENT_EXPORT(IPC) Channel : public Sender {
+ static std::string GenerateUniqueRandomChannelID();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sandboxed processes live in a PID namespace, so when sending the IPC hello
+ // message from client to server we need to send the PID from the global
+ // PID namespace.
diff --git a/devel/electron4/files/patch-ipc_ipc__channel__common.cc b/devel/electron4/files/patch-ipc_ipc__channel__common.cc
new file mode 100644
index 000000000000..f7472986d975
--- /dev/null
+++ b/devel/electron4/files/patch-ipc_ipc__channel__common.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel_common.cc.orig 2019-03-15 06:25:46 UTC
++++ ipc/ipc_channel_common.cc
+@@ -9,7 +9,7 @@
+
+ namespace IPC {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+ int g_global_pid = 0;
diff --git a/devel/electron4/files/patch-ipc_ipc__channel__mojo.cc b/devel/electron4/files/patch-ipc_ipc__channel__mojo.cc
new file mode 100644
index 000000000000..bc05846fe751
--- /dev/null
+++ b/devel/electron4/files/patch-ipc_ipc__channel__mojo.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel_mojo.cc.orig 2019-03-15 06:37:27 UTC
++++ ipc/ipc_channel_mojo.cc
+@@ -64,7 +64,7 @@ class MojoChannelFactory : public ChannelFactory {
+ };
+
+ base::ProcessId GetSelfPID() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (int global_pid = Channel::GetGlobalPid())
+ return global_pid;
+ #endif // OS_LINUX
diff --git a/devel/electron4/files/patch-ipc_ipc__message__utils.cc b/devel/electron4/files/patch-ipc_ipc__message__utils.cc
new file mode 100644
index 000000000000..162808f7f70f
--- /dev/null
+++ b/devel/electron4/files/patch-ipc_ipc__message__utils.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.cc.orig 2019-03-15 06:37:27 UTC
++++ ipc/ipc_message_utils.cc
+@@ -349,7 +349,7 @@ void ParamTraits<unsigned int>::Log(const param_type&
+ }
+
+ #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
+- (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
++ defined(OS_BSD) || (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ void ParamTraits<long>::Log(const param_type& p, std::string* l) {
+ l->append(base::NumberToString(p));
+ }
diff --git a/devel/electron4/files/patch-ipc_ipc__message__utils.h b/devel/electron4/files/patch-ipc_ipc__message__utils.h
new file mode 100644
index 000000000000..9ffa09f142ae
--- /dev/null
+++ b/devel/electron4/files/patch-ipc_ipc__message__utils.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.h.orig 2019-03-15 06:37:27 UTC
++++ ipc/ipc_message_utils.h
+@@ -204,7 +204,7 @@ struct ParamTraits<unsigned int> {
+ // Since we want to support Android 32<>64 bit IPC, as long as we don't have
+ // these traits for 32 bit ARM then that'll catch any errors.
+ #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
+- (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
++ defined(OS_BSD) || (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ template <>
+ struct ParamTraits<long> {
+ typedef long param_type;
diff --git a/devel/electron4/files/patch-media_BUILD.gn b/devel/electron4/files/patch-media_BUILD.gn
new file mode 100644
index 000000000000..178c37a15f21
--- /dev/null
+++ b/devel/electron4/files/patch-media_BUILD.gn
@@ -0,0 +1,12 @@
+--- media/BUILD.gn.orig 2019-03-15 06:37:27 UTC
++++ media/BUILD.gn
+@@ -58,6 +58,9 @@ config("media_config") {
+ defines += [ "DLOPEN_PULSEAUDIO" ]
+ }
+ }
++ if (use_sndio) {
++ defines += [ "USE_SNDIO" ]
++ }
+ if (use_cras) {
+ defines += [ "USE_CRAS" ]
+ }
diff --git a/devel/electron4/files/patch-media_audio_BUILD.gn b/devel/electron4/files/patch-media_audio_BUILD.gn
new file mode 100644
index 000000000000..8f4616eaeb18
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_BUILD.gn
@@ -0,0 +1,31 @@
+--- media/audio/BUILD.gn.orig 2019-03-16 09:15:21 UTC
++++ media/audio/BUILD.gn
+@@ -262,9 +262,19 @@ source_set("audio") {
+ deps += [ "//media/base/android:media_jni_headers" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !use_sndio) {
+ sources += [ "linux/audio_manager_linux.cc" ]
+ }
++ if (use_sndio) {
++ libs += [ "sndio" ]
++ sources += [
++ "openbsd/audio_manager_openbsd.cc",
++ "sndio/sndio_input.cc",
++ "sndio/sndio_input.h",
++ "sndio/sndio_output.cc",
++ "sndio/sndio_output.h"
++ ]
++ }
+
+ if (use_alsa) {
+ libs += [ "asound" ]
+@@ -310,7 +320,6 @@ source_set("audio") {
+ if (link_pulseaudio) {
+ configs += [ ":libpulse" ]
+ } else {
+- libs += [ "dl" ]
+ deps += [ ":pulse_generate_stubs" ]
+ sources += get_target_outputs(":pulse_generate_stubs")
+ }
diff --git a/devel/electron4/files/patch-media_audio_alsa_audio__manager__alsa.cc b/devel/electron4/files/patch-media_audio_alsa_audio__manager__alsa.cc
new file mode 100644
index 000000000000..6f385e736930
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_alsa_audio__manager__alsa.cc
@@ -0,0 +1,54 @@
+--- media/audio/alsa/audio_manager_alsa.cc.orig 2019-03-15 06:37:27 UTC
++++ media/audio/alsa/audio_manager_alsa.cc
+@@ -93,7 +93,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ int card = -1;
+
+ // Loop through the sound cards to get ALSA device hints.
++#ifdef OS_LINUX
+ while (!wrapper_->CardNext(&card) && card >= 0) {
++#endif
+ void** hints = NULL;
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+@@ -105,7 +107,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ DLOG(WARNING) << "GetAlsaAudioDevices: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#ifdef OS_LINUX
+ }
++#endif
+ }
+
+ void AudioManagerAlsa::GetAlsaDevicesInfo(AudioManagerAlsa::StreamType type,
+@@ -188,7 +192,11 @@ bool AudioManagerAlsa::IsAlsaDeviceAvailable(
+ // goes through software conversion if needed (e.g. incompatible
+ // sample rate).
+ // TODO(joi): Should we prefer "hw" instead?
++#ifdef OS_LINUX
+ static const char kDeviceTypeDesired[] = "plughw";
++#else
++ static const char kDeviceTypeDesired[] = "plug";
++#endif
+ return strncmp(kDeviceTypeDesired, device_name,
+ arraysize(kDeviceTypeDesired) - 1) == 0;
+ }
+@@ -210,7 +218,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ // Loop through the sound cards.
+ // Don't use snd_device_name_hint(-1,..) since there is a access violation
+ // inside this ALSA API with libasound.so.2.0.0.
++#ifdef OS_LINUX
+ while (!wrapper_->CardNext(&card) && (card >= 0) && !has_device) {
++#endif
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+ for (void** hint_iter = hints; *hint_iter != NULL; hint_iter++) {
+@@ -234,7 +244,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ DLOG(WARNING) << "HasAnyAudioDevice: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#ifdef OS_LINUX
+ }
++#endif
+
+ return has_device;
+ }
diff --git a/devel/electron4/files/patch-media_audio_audio__manager.cc b/devel/electron4/files/patch-media_audio_audio__manager.cc
new file mode 100644
index 000000000000..cef0e18f3fc3
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_audio__manager.cc
@@ -0,0 +1,29 @@
+--- media/audio/audio_manager.cc.orig 2019-03-15 06:37:27 UTC
++++ media/audio/audio_manager.cc
+@@ -94,7 +94,7 @@ class AudioManagerHelper : public base::PowerObserver
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void set_app_name(const std::string& app_name) { app_name_ = app_name; }
+ const std::string& app_name() const { return app_name_; }
+ #endif
+@@ -229,7 +229,7 @@ class AudioManagerHelper : public base::PowerObserver
+ std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_for_testing_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string app_name_;
+ #endif
+
+@@ -311,7 +311,7 @@ void AudioManager::StartHangMonitorIfNeeded(
+ GetHelper()->StartHangTimer(std::move(task_runner));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AudioManager::SetGlobalAppName(const std::string& app_name) {
+ GetHelper()->set_app_name(app_name);
diff --git a/devel/electron4/files/patch-media_audio_audio__manager.h b/devel/electron4/files/patch-media_audio_audio__manager.h
new file mode 100644
index 000000000000..97bcaaf04d84
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_audio__manager.h
@@ -0,0 +1,11 @@
+--- media/audio/audio_manager.h.orig 2019-03-15 06:37:27 UTC
++++ media/audio/audio_manager.h
+@@ -70,7 +70,7 @@ class MEDIA_EXPORT AudioManager {
+ static void StartHangMonitorIfNeeded(
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sets the name of the audio source as seen by external apps. Only actually
+ // used with PulseAudio as of this writing.
+ static void SetGlobalAppName(const std::string& app_name);
diff --git a/devel/electron4/files/patch-media_audio_audio__output__proxy__unittest.cc b/devel/electron4/files/patch-media_audio_audio__output__proxy__unittest.cc
new file mode 100644
index 000000000000..08d56b08d925
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_audio__output__proxy__unittest.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_output_proxy_unittest.cc.orig 2019-03-15 06:37:27 UTC
++++ media/audio/audio_output_proxy_unittest.cc
+@@ -410,7 +410,7 @@ class AudioOutputProxyTest : public testing::Test {
+ // |stream| is closed at this point. Start() should reopen it again.
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
+ .Times(2)
+- .WillRepeatedly(Return(reinterpret_cast<AudioOutputStream*>(NULL)));
++ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ EXPECT_CALL(callback_, OnError()).Times(2);
+
diff --git a/devel/electron4/files/patch-media_audio_pulse_pulse.sigs b/devel/electron4/files/patch-media_audio_pulse_pulse.sigs
new file mode 100644
index 000000000000..3d31bd187348
--- /dev/null
+++ b/devel/electron4/files/patch-media_audio_pulse_pulse.sigs
@@ -0,0 +1,143 @@
+gen/media/audio/pulse/pulse_stubs.cc:155:27: error: conflicting types for 'pa_context_get_state'
+extern pa_context_state_t pa_context_get_state(pa_context* c) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/context.h:199:20: note: previous declaration is here
+pa_context_state_t pa_context_get_state(const pa_context *c);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:156:21: error: conflicting types for 'pa_context_get_state'
+pa_context_state_t pa_context_get_state(pa_context* c) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/context.h:199:20: note: previous declaration is here
+pa_context_state_t pa_context_get_state(const pa_context *c);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:171:29: error: conflicting types for 'pa_operation_get_state'
+extern pa_operation_state_t pa_operation_get_state(pa_operation* o) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/operation.h:52:22: note: previous declaration is here
+pa_operation_state_t pa_operation_get_state(const pa_operation *o);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:172:23: error: conflicting types for 'pa_operation_get_state'
+pa_operation_state_t pa_operation_get_state(pa_operation* o) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/operation.h:52:22: note: previous declaration is here
+pa_operation_state_t pa_operation_get_state(const pa_operation *o);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:211:17: error: conflicting types for 'pa_stream_get_device_index'
+extern uint32_t pa_stream_get_device_index(pa_stream* s) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:366:10: note: previous declaration is here
+uint32_t pa_stream_get_device_index(const pa_stream *s);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:212:11: error: conflicting types for 'pa_stream_get_device_index'
+uint32_t pa_stream_get_device_index(pa_stream* s) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:366:10: note: previous declaration is here
+uint32_t pa_stream_get_device_index(const pa_stream *s);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:219:26: error: conflicting types for 'pa_stream_get_state'
+extern pa_stream_state_t pa_stream_get_state(pa_stream* p) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:345:19: note: previous declaration is here
+pa_stream_state_t pa_stream_get_state(const pa_stream *p);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:220:20: error: conflicting types for 'pa_stream_get_state'
+pa_stream_state_t pa_stream_get_state(pa_stream* p) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:345:19: note: previous declaration is here
+pa_stream_state_t pa_stream_get_state(const pa_stream *p);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:235:12: error: conflicting types for 'pa_proplist_contains'
+extern int pa_proplist_contains(pa_proplist* p, const char* key) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/proplist.h:390:5: note: previous declaration is here
+int pa_proplist_contains(const pa_proplist *p, const char *key);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:236:6: error: conflicting types for 'pa_proplist_contains'
+int pa_proplist_contains(pa_proplist* p, const char* key) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/proplist.h:390:5: note: previous declaration is here
+int pa_proplist_contains(const pa_proplist *p, const char *key);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:243:20: error: conflicting types for 'pa_proplist_gets'
+extern const char* pa_proplist_gets(pa_proplist* p, const char* key) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/proplist.h:314:13: note: previous declaration is here
+const char *pa_proplist_gets(const pa_proplist *p, const char *key);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:244:14: error: conflicting types for 'pa_proplist_gets'
+const char* pa_proplist_gets(pa_proplist* p, const char* key) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/proplist.h:314:13: note: previous declaration is here
+const char *pa_proplist_gets(const pa_proplist *p, const char *key);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:251:15: error: conflicting types for 'pa_stream_readable_size'
+extern size_t pa_stream_readable_size(pa_stream *p) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:574:8: note: previous declaration is here
+size_t pa_stream_readable_size(const pa_stream *p);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:252:9: error: conflicting types for 'pa_stream_readable_size'
+size_t pa_stream_readable_size(pa_stream *p) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/stream.h:574:8: note: previous declaration is here
+size_t pa_stream_readable_size(const pa_stream *p);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:279:12: error: conflicting types for 'pa_context_errno'
+extern int pa_context_errno(pa_context *c) __attribute__((weak));
+ ^
+../../../../../../../../../../usr/local/include/pulse/context.h:193:5: note: previous declaration is here
+int pa_context_errno(const pa_context *c);
+ ^
+gen/media/audio/pulse/pulse_stubs.cc:280:6: error: conflicting types for 'pa_context_errno'
+int pa_context_errno(pa_context *c) {
+ ^
+../../../../../../../../../../usr/local/include/pulse/context.h:193:5: note: previous declaration is here
+int pa_context_errno(const pa_context *c);
+ ^
+
+--- media/audio/pulse/pulse.sigs.orig 2019-03-19 08:52:48 UTC
++++ media/audio/pulse/pulse.sigs
+@@ -24,11 +24,11 @@ pa_operation* pa_context_get_source_info_by_index(pa_c
+ pa_operation* pa_context_get_source_info_by_name(pa_context* c, const char* name, pa_source_info_cb_t cb, void *userdata);
+ pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
+ pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
+-pa_context_state_t pa_context_get_state(pa_context* c);
++pa_context_state_t pa_context_get_state(const pa_context *c);
+ pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
+ pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
+ void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata);
+-pa_operation_state_t pa_operation_get_state(pa_operation* o);
++pa_operation_state_t pa_operation_get_state(const pa_operation* o);
+ void pa_context_unref(pa_context* c);
+ void pa_operation_unref(pa_operation* o);
+ int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes);
+@@ -38,23 +38,23 @@ pa_operation* pa_stream_cork(pa_stream* s, int b, pa_s
+ int pa_stream_disconnect(pa_stream* s);
+ int pa_stream_drop(pa_stream *p);
+ pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
+-uint32_t pa_stream_get_device_index(pa_stream* s);
++uint32_t pa_stream_get_device_index(const pa_stream* s);
+ int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative);
+-pa_stream_state_t pa_stream_get_state(pa_stream* p);
++pa_stream_state_t pa_stream_get_state(const pa_stream* p);
+ pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
+ pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
+ pa_proplist* pa_proplist_new(void);
+-int pa_proplist_contains(pa_proplist* p, const char* key);
++int pa_proplist_contains(const pa_proplist* p, const char* key);
+ void pa_proplist_free(pa_proplist* p);
+-const char* pa_proplist_gets(pa_proplist* p, const char* key);
++const char* pa_proplist_gets(const pa_proplist* p, const char* key);
+ int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
+-size_t pa_stream_readable_size(pa_stream *p);
++size_t pa_stream_readable_size(const pa_stream *p);
+ int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
+ void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
+ void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
+ int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
+ void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
+ void pa_stream_unref(pa_stream* s);
+-int pa_context_errno(pa_context *c);
++int pa_context_errno(const pa_context *c);
+ const char* pa_strerror(int error);
+ pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v);
diff --git a/devel/electron4/files/patch-media_base_audio__latency.cc b/devel/electron4/files/patch-media_base_audio__latency.cc
new file mode 100644
index 000000000000..ad03178a688d
--- /dev/null
+++ b/devel/electron4/files/patch-media_base_audio__latency.cc
@@ -0,0 +1,11 @@
+--- media/base/audio_latency.cc.orig 2019-03-15 06:37:27 UTC
++++ media/base/audio_latency.cc
+@@ -106,7 +106,7 @@ int AudioLatency::GetRtcBufferSize(int sample_rate, in
+ return frames_per_buffer;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // On Linux, MacOS and Fuchsia, the low level IO implementations on the
+ // browser side supports all buffer size the clients want. We use the native
+ // peer connection buffer size (10ms) to achieve best possible performance.
diff --git a/devel/electron4/files/patch-media_base_scopedfd__helper.h b/devel/electron4/files/patch-media_base_scopedfd__helper.h
new file mode 100644
index 000000000000..572bdac61a67
--- /dev/null
+++ b/devel/electron4/files/patch-media_base_scopedfd__helper.h
@@ -0,0 +1,19 @@
+--- media/base/scopedfd_helper.h.orig 2019-03-15 06:25:46 UTC
++++ media/base/scopedfd_helper.h
+@@ -14,14 +14,14 @@ namespace media {
+ // since the only current user is V4L2 we are limiting the scope to OS_LINUX so
+ // the binary size does not inflate on non-using systems. Feel free to adapt
+ // this and BUILD.gn as our needs evolve.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ // Return a new vector containing duplicates of |fds|, or an empty vector in
+ // case of error.
+ MEDIA_EXPORT std::vector<base::ScopedFD> DuplicateFDs(
+ const std::vector<base::ScopedFD>& fds);
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace media
+
diff --git a/devel/electron4/files/patch-media_base_video__frame.cc b/devel/electron4/files/patch-media_base_video__frame.cc
new file mode 100644
index 000000000000..d5e12a46ab7a
--- /dev/null
+++ b/devel/electron4/files/patch-media_base_video__frame.cc
@@ -0,0 +1,47 @@
+--- media/base/video_frame.cc.orig 2019-03-15 06:37:27 UTC
++++ media/base/video_frame.cc
+@@ -64,7 +64,7 @@ static std::string StorageTypeToString(
+ return "OWNED_MEMORY";
+ case VideoFrame::STORAGE_SHMEM:
+ return "SHMEM";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case VideoFrame::STORAGE_DMABUFS:
+ return "DMABUFS";
+ #endif
+@@ -80,7 +80,7 @@ static std::string StorageTypeToString(
+ // static
+ static bool IsStorageTypeMappable(VideoFrame::StorageType storage_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This is not strictly needed but makes explicit that, at VideoFrame
+ // level, DmaBufs are not mappable from userspace.
+ storage_type != VideoFrame::STORAGE_DMABUFS &&
+@@ -367,7 +367,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuva
+ return frame;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ scoped_refptr<VideoFrame> VideoFrame::WrapExternalDmabufs(
+ VideoPixelFormat format,
+@@ -488,7 +488,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
+ wrapping_frame->data_[i] = frame->data(i);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If there are any |dmabuf_fds_| plugged in, we should duplicate them.
+ if (frame->storage_type() == STORAGE_DMABUFS) {
+ wrapping_frame->dmabuf_fds_ = DuplicateFDs(frame->dmabuf_fds_);
+@@ -860,7 +860,7 @@ size_t VideoFrame::shared_memory_offset() const {
+ return shared_memory_offset_;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::vector<int> VideoFrame::DmabufFds() const {
+ DCHECK_EQ(storage_type_, STORAGE_DMABUFS);
+ std::vector<int> ret;
diff --git a/devel/electron4/files/patch-media_base_video__frame.h b/devel/electron4/files/patch-media_base_video__frame.h
new file mode 100644
index 000000000000..0e6d3d867fb0
--- /dev/null
+++ b/devel/electron4/files/patch-media_base_video__frame.h
@@ -0,0 +1,38 @@
+--- media/base/video_frame.h.orig 2019-03-15 06:37:27 UTC
++++ media/base/video_frame.h
+@@ -69,7 +69,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ STORAGE_UNOWNED_MEMORY = 2, // External, non owned data pointers.
+ STORAGE_OWNED_MEMORY = 3, // VideoFrame has allocated its own data buffer.
+ STORAGE_SHMEM = 4, // Pixels are backed by Shared Memory.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(mcasas): Consider turning this type into STORAGE_NATIVE
+ // based on the idea of using this same enum value for both DMA
+ // buffers on Linux and CVPixelBuffers on Mac (which currently use
+@@ -225,7 +225,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ uint8_t* a_data,
+ base::TimeDelta timestamp);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Wraps provided dmabufs
+ // (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html) with a
+ // VideoFrame. The frame will take ownership of |dmabuf_fds|, and will
+@@ -387,7 +387,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // Returns the offset into the shared memory where the frame data begins.
+ size_t shared_memory_offset() const;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Return a vector containing the backing DmaBufs for this frame. The number
+ // of returned DmaBufs will be equal or less than the number of planes of
+ // the frame. If there are less, this means that the last FD contains the
+@@ -606,7 +606,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // memory.
+ size_t shared_memory_offset_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dmabufs for the frame, used when storage is STORAGE_DMABUFS. Size is either
+ // equal or less than the number of planes of the frame. If it is less, then
+ // the memory area represented by the last FD contains the remaining planes.
diff --git a/devel/electron4/files/patch-media_capture_video_create__video__capture__device__factory.cc b/devel/electron4/files/patch-media_capture_video_create__video__capture__device__factory.cc
new file mode 100644
index 000000000000..ae34c228f9d4
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_create__video__capture__device__factory.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/create_video_capture_device_factory.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/create_video_capture_device_factory.cc
+@@ -10,7 +10,7 @@
+ #include "media/capture/video/fake_video_capture_device_factory.h"
+ #include "media/capture/video/file_video_capture_device_factory.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "media/capture/video/linux/video_capture_device_factory_linux.h"
+ #elif defined(OS_CHROMEOS)
+ #include "media/capture/video/chromeos/public/cros_features.h"
+@@ -31,7 +31,7 @@ namespace {
+ std::unique_ptr<VideoCaptureDeviceFactory>
+ CreatePlatformSpecificVideoCaptureDeviceFactory(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return std::make_unique<VideoCaptureDeviceFactoryLinux>(ui_task_runner);
+ #elif defined(OS_CHROMEOS)
+ // On Chrome OS we have to support two use cases:
diff --git a/devel/electron4/files/patch-media_capture_video_fake__video__capture__device__factory.cc b/devel/electron4/files/patch-media_capture_video_fake__video__capture__device__factory.cc
new file mode 100644
index 000000000000..3da701b7b4c4
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_fake__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/fake_video_capture_device_factory.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/fake_video_capture_device_factory.cc
+@@ -200,7 +200,7 @@ void FakeVideoCaptureDeviceFactory::GetDeviceDescripto
+ for (const auto& entry : devices_config_) {
+ device_descriptors->emplace_back(
+ base::StringPrintf("fake_device_%d", entry_index), entry.device_id,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #elif defined(OS_MACOSX)
+ VideoCaptureApi::MACOSX_AVFOUNDATION
diff --git a/devel/electron4/files/patch-media_capture_video_file__video__capture__device__factory.cc b/devel/electron4/files/patch-media_capture_video_file__video__capture__device__factory.cc
new file mode 100644
index 000000000000..ce193c4482a9
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_file__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/file_video_capture_device_factory.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/file_video_capture_device_factory.cc
+@@ -53,7 +53,7 @@ void FileVideoCaptureDeviceFactory::GetDeviceDescripto
+ #elif defined(OS_MACOSX)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::MACOSX_AVFOUNDATION
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #else
diff --git a/devel/electron4/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc b/devel/electron4/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
new file mode 100644
index 000000000000..c08711a0da21
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
@@ -0,0 +1,26 @@
+--- media/capture/video/linux/v4l2_capture_delegate.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -4,8 +4,10 @@
+
+ #include "media/capture/video/linux/v4l2_capture_delegate.h"
+
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #include <linux/videodev2.h>
++#endif
+ #include <poll.h>
+ #include <sys/fcntl.h>
+ #include <sys/ioctl.h>
+@@ -23,10 +25,10 @@
+
+ using media::mojom::MeteringMode;
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
++// #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+ // 16 bit depth, Realsense F200.
+ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
+-#endif
++// #endif
+
+ // TODO(aleksandar.stojiljkovic): Wrap this with kernel version check once the
+ // format is introduced to kernel.
diff --git a/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc b/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
new file mode 100644
index 000000000000..82dad4046dec
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
@@ -0,0 +1,32 @@
+--- media/capture/video/linux/video_capture_device_factory_linux.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/linux/video_capture_device_factory_linux.cc
+@@ -253,6 +253,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (!(capabilities & V4L2_CAP_VIDEO_CAPTURE))
+ return false;
+
++#if !defined(OS_BSD)
+ const std::list<uint32_t>& usable_fourccs =
+ VideoCaptureDeviceLinux::GetListOfUsableFourCCs(false);
+ v4l2_fmtdesc fmtdesc = {};
+@@ -264,6 +265,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ return true;
+ }
+ }
++#endif
+
+ DLOG(ERROR) << "No usable formats found";
+ return false;
+@@ -311,9 +313,13 @@ void VideoCaptureDeviceFactoryLinux::GetSupportedForma
+ for (; HANDLE_EINTR(v4l2_->ioctl(fd, VIDIOC_ENUM_FMT, &v4l2_format)) == 0;
+ ++v4l2_format.index) {
+ VideoCaptureFormat supported_format;
++#if !defined(OS_FREEBSD)
+ supported_format.pixel_format =
+ VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+ v4l2_format.pixelformat);
++#else
++ supported_format.pixel_format = PIXEL_FORMAT_UNKNOWN;
++#endif
+
+ if (supported_format.pixel_format == PIXEL_FORMAT_UNKNOWN)
+ continue;
diff --git a/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__linux.cc b/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__linux.cc
new file mode 100644
index 000000000000..36312c3f962a
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_linux_video__capture__device__linux.cc
@@ -0,0 +1,60 @@
+--- media/capture/video/linux/video_capture_device_linux.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/linux/video_capture_device_linux.cc
+@@ -22,6 +22,7 @@
+
+ namespace media {
+
++#if !defined(OS_FREEBSD)
+ // Translates Video4Linux pixel formats to Chromium pixel formats.
+ // static
+ VideoPixelFormat VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+@@ -35,6 +36,7 @@ std::list<uint32_t> VideoCaptureDeviceLinux::GetListOf
+ bool favour_mjpeg) {
+ return V4L2CaptureDelegate::GetListOfUsableFourCcs(favour_mjpeg);
+ }
++#endif // !defined(OS_FREEBSD)
+
+ VideoCaptureDeviceLinux::VideoCaptureDeviceLinux(
+ scoped_refptr<V4L2CaptureDevice> v4l2,
+@@ -53,6 +55,7 @@ VideoCaptureDeviceLinux::~VideoCaptureDeviceLinux() {
+ void VideoCaptureDeviceLinux::AllocateAndStart(
+ const VideoCaptureParams& params,
+ std::unique_ptr<VideoCaptureDevice::Client> client) {
++#if !defined(OS_FREEBSD)
+ DCHECK(!capture_impl_);
+ if (v4l2_thread_.IsRunning())
+ return; // Wrong state.
+@@ -78,9 +81,11 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ for (const auto& request : photo_requests_queue_)
+ v4l2_thread_.task_runner()->PostTask(FROM_HERE, request);
+ photo_requests_queue_.clear();
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
++#if !defined(OS_FREEBSD)
+ if (!v4l2_thread_.IsRunning())
+ return; // Wrong state.
+ v4l2_thread_.task_runner()->PostTask(
+@@ -90,6 +95,7 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ v4l2_thread_.Stop();
+
+ capture_impl_ = nullptr;
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
+@@ -132,11 +138,13 @@ void VideoCaptureDeviceLinux::SetPhotoOptions(
+ }
+
+ void VideoCaptureDeviceLinux::SetRotation(int rotation) {
++#if !defined(OS_BSD)
+ if (v4l2_thread_.IsRunning()) {
+ v4l2_thread_.task_runner()->PostTask(
+ FROM_HERE, base::Bind(&V4L2CaptureDelegate::SetRotation,
+ capture_impl_->GetWeakPtr(), rotation));
+ }
++#endif
+ }
+
+ // static
diff --git a/devel/electron4/files/patch-media_capture_video_video__capture__device__client.cc b/devel/electron4/files/patch-media_capture_video_video__capture__device__client.cc
new file mode 100644
index 000000000000..3b4ffd12d553
--- /dev/null
+++ b/devel/electron4/files/patch-media_capture_video_video__capture__device__client.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_device_client.cc.orig 2019-03-15 06:37:27 UTC
++++ media/capture/video/video_capture_device_client.cc
+@@ -238,7 +238,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
+ // see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
+ // Windows RGB24 defines blue at lowest byte,
+ // see https://msdn.microsoft.com/en-us/library/windows/desktop/dd407253
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ origin_colorspace = libyuv::FOURCC_RAW;
+ #elif defined(OS_WIN)
+ origin_colorspace = libyuv::FOURCC_24BG;
diff --git a/devel/electron4/files/patch-media_filters_vp9__parser.h b/devel/electron4/files/patch-media_filters_vp9__parser.h
new file mode 100644
index 000000000000..e3284c9e7e4e
--- /dev/null
+++ b/devel/electron4/files/patch-media_filters_vp9__parser.h
@@ -0,0 +1,10 @@
+--- media/filters/vp9_parser.h.orig 2019-03-15 06:37:27 UTC
++++ media/filters/vp9_parser.h
+@@ -14,6 +14,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <unistd.h>
+ #include <sys/types.h>
+
+ #include <memory>
diff --git a/devel/electron4/files/patch-media_formats_common_offset__byte__queue.cc b/devel/electron4/files/patch-media_formats_common_offset__byte__queue.cc
new file mode 100644
index 000000000000..68b778cceb57
--- /dev/null
+++ b/devel/electron4/files/patch-media_formats_common_offset__byte__queue.cc
@@ -0,0 +1,20 @@
+--- media/formats/common/offset_byte_queue.cc.orig 2019-03-15 06:25:46 UTC
++++ media/formats/common/offset_byte_queue.cc
+@@ -46,13 +46,13 @@ void OffsetByteQueue::PeekAt(int64_t offset, const uin
+ *size = tail() - offset;
+ }
+
+-bool OffsetByteQueue::Trim(int64_t max_offset) {
+- if (max_offset < head_) return true;
+- if (max_offset > tail()) {
++bool OffsetByteQueue::Trim(int64_t _max_offset) {
++ if (_max_offset < head_) return true;
++ if (_max_offset > tail()) {
+ Pop(size_);
+ return false;
+ }
+- Pop(max_offset - head_);
++ Pop(_max_offset - head_);
+ return true;
+ }
+
diff --git a/devel/electron4/files/patch-media_formats_common_offset__byte__queue.h b/devel/electron4/files/patch-media_formats_common_offset__byte__queue.h
new file mode 100644
index 000000000000..1e4451e8bd12
--- /dev/null
+++ b/devel/electron4/files/patch-media_formats_common_offset__byte__queue.h
@@ -0,0 +1,22 @@
+--- media/formats/common/offset_byte_queue.h.orig 2019-03-15 06:25:46 UTC
++++ media/formats/common/offset_byte_queue.h
+@@ -36,15 +36,15 @@ class MEDIA_EXPORT OffsetByteQueue {
+ // a null |buf| and a |size| of zero.
+ void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
+- // Marks the bytes up to (but not including) |max_offset| as ready for
++ // Marks the bytes up to (but not including) |_max_offset| as ready for
+ // deletion. This is relatively inexpensive, but will not necessarily reduce
+ // the resident buffer size right away (or ever).
+ //
+ // Returns true if the full range of bytes were successfully trimmed,
+- // including the case where |max_offset| is less than the current head.
+- // Returns false if |max_offset| > tail() (although all bytes currently
++ // including the case where |_max_offset| is less than the current head.
++ // Returns false if |_max_offset| > tail() (although all bytes currently
+ // buffered are still cleared).
+- bool Trim(int64_t max_offset);
++ bool Trim(int64_t _max_offset);
+
+ // The head and tail positions, in terms of the file's absolute offsets.
+ // tail() is an exclusive bound.
diff --git a/devel/electron4/files/patch-media_formats_mp2t_es__parser__adts.cc b/devel/electron4/files/patch-media_formats_mp2t_es__parser__adts.cc
new file mode 100644
index 000000000000..e30d14eafbf9
--- /dev/null
+++ b/devel/electron4/files/patch-media_formats_mp2t_es__parser__adts.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_adts.cc.orig 2019-03-15 06:37:27 UTC
++++ media/formats/mp2t/es_parser_adts.cc
+@@ -63,11 +63,11 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - kADTSHeaderMinSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - kADTSHeaderMinSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (!isAdtsSyncWord(cur_buf))
+ continue;
+@@ -107,7 +107,7 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron4/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc b/devel/electron4/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
new file mode 100644
index 000000000000..eb089c53752f
--- /dev/null
+++ b/devel/electron4/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_mpeg1audio.cc.orig 2019-03-15 06:25:46 UTC
++++ media/formats/mp2t/es_parser_mpeg1audio.cc
+@@ -108,11 +108,11 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (cur_buf[0] != 0xff)
+ continue;
+@@ -153,7 +153,7 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron4/files/patch-media_media__options.gni b/devel/electron4/files/patch-media_media__options.gni
new file mode 100644
index 000000000000..97a12684127d
--- /dev/null
+++ b/devel/electron4/files/patch-media_media__options.gni
@@ -0,0 +1,12 @@
+--- media/media_options.gni.orig 2019-03-15 06:37:28 UTC
++++ media/media_options.gni
+@@ -95,6 +95,9 @@ declare_args() {
+ # Enables runtime selection of ALSA library for audio.
+ use_alsa = false
+
++ # Enable runtime selection of sndio(7)
++ use_sndio = false
++
+ # Alsa should be used on non-Android, non-Mac POSIX systems.
+ # Alsa should be used on desktop Chromecast and audio-only Chromecast builds.
+ if (is_posix && !is_android && !is_mac &&
diff --git a/devel/electron4/files/patch-mojo_core_options__validation__unittest.cc b/devel/electron4/files/patch-mojo_core_options__validation__unittest.cc
new file mode 100644
index 000000000000..a28f47fe5d0b
--- /dev/null
+++ b/devel/electron4/files/patch-mojo_core_options__validation__unittest.cc
@@ -0,0 +1,11 @@
+--- mojo/core/options_validation_unittest.cc.orig 2019-03-19 09:06:10 UTC
++++ mojo/core/options_validation_unittest.cc
+@@ -18,7 +18,7 @@ namespace {
+
+ using TestOptionsFlags = uint32_t;
+
+-static_assert(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment");
++static_assert(MOJO_ALIGNOF(int64_t) <= 8, "int64_t has weird alignment");
+ struct MOJO_ALIGNAS(8) TestOptions {
+ uint32_t struct_size;
+ TestOptionsFlags flags;
diff --git a/devel/electron4/files/patch-mojo_public_c_system_buffer.h b/devel/electron4/files/patch-mojo_public_c_system_buffer.h
new file mode 100644
index 000000000000..3aa39a171465
--- /dev/null
+++ b/devel/electron4/files/patch-mojo_public_c_system_buffer.h
@@ -0,0 +1,11 @@
+--- mojo/public/c/system/buffer.h.orig 2019-03-19 09:06:10 UTC
++++ mojo/public/c/system/buffer.h
+@@ -30,7 +30,7 @@ struct MOJO_ALIGNAS(8) MojoCreateSharedBufferOptions {
+ // See |MojoCreateSharedBufferFlags|.
+ MojoCreateSharedBufferFlags flags;
+ };
+-MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment");
++MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) <= 8, "int64_t has weird alignment");
+ MOJO_STATIC_ASSERT(sizeof(MojoCreateSharedBufferOptions) == 8,
+ "MojoCreateSharedBufferOptions has wrong size");
+
diff --git a/devel/electron4/files/patch-mojo_public_c_system_data__pipe.h b/devel/electron4/files/patch-mojo_public_c_system_data__pipe.h
new file mode 100644
index 000000000000..a4161c37fbb0
--- /dev/null
+++ b/devel/electron4/files/patch-mojo_public_c_system_data__pipe.h
@@ -0,0 +1,11 @@
+--- mojo/public/c/system/data_pipe.h.orig 2019-03-19 09:06:10 UTC
++++ mojo/public/c/system/data_pipe.h
+@@ -40,7 +40,7 @@ struct MOJO_ALIGNAS(8) MojoCreateDataPipeOptions {
+ // system-dependent capacity of at least one element in size.
+ uint32_t capacity_num_bytes;
+ };
+-MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment");
++MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) <= 8, "int64_t has weird alignment");
+ MOJO_STATIC_ASSERT(sizeof(MojoCreateDataPipeOptions) == 16,
+ "MojoCreateDataPipeOptions has wrong size");
+
diff --git a/devel/electron4/files/patch-mojo_public_c_system_message__pipe.h b/devel/electron4/files/patch-mojo_public_c_system_message__pipe.h
new file mode 100644
index 000000000000..7c60b8630027
--- /dev/null
+++ b/devel/electron4/files/patch-mojo_public_c_system_message__pipe.h
@@ -0,0 +1,11 @@
+--- mojo/public/c/system/message_pipe.h.orig 2019-03-19 09:06:10 UTC
++++ mojo/public/c/system/message_pipe.h
+@@ -35,7 +35,7 @@ struct MOJO_ALIGNAS(8) MojoCreateMessagePipeOptions {
+ // See |MojoCreateMessagePipeFlags|.
+ MojoCreateMessagePipeFlags flags;
+ };
+-MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) == 8, "int64_t has weird alignment");
++MOJO_STATIC_ASSERT(MOJO_ALIGNOF(int64_t) <= 8, "int64_t has weird alignment");
+ MOJO_STATIC_ASSERT(sizeof(MojoCreateMessagePipeOptions) == 8,
+ "MojoCreateMessagePipeOptions has wrong size");
+
diff --git a/devel/electron4/files/patch-mojo_public_c_system_thunks.cc b/devel/electron4/files/patch-mojo_public_c_system_thunks.cc
new file mode 100644
index 000000000000..18e6e1243369
--- /dev/null
+++ b/devel/electron4/files/patch-mojo_public_c_system_thunks.cc
@@ -0,0 +1,47 @@
+--- mojo/public/c/system/thunks.cc.orig 2019-03-15 06:37:28 UTC
++++ mojo/public/c/system/thunks.cc
+@@ -16,7 +16,7 @@
+ #include "build/build_config.h"
+ #include "mojo/public/c/system/core.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
+ #include "base/optional.h"
+@@ -28,7 +28,7 @@ namespace {
+
+ typedef void (*MojoGetSystemThunksFunction)(MojoSystemThunks* thunks);
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ PROTECTED_MEMORY_SECTION
+ base::ProtectedMemory<MojoGetSystemThunksFunction> g_get_thunks;
+ #endif
+@@ -63,7 +63,7 @@ namespace mojo {
+ class CoreLibraryInitializer {
+ public:
+ CoreLibraryInitializer(const MojoInitializeOptions* options) {
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ bool application_provided_path = false;
+ base::Optional<base::FilePath> library_path;
+ if (options && options->struct_size >= sizeof(*options) &&
+@@ -82,7 +82,7 @@ class CoreLibraryInitializer {
+
+ if (!library_path) {
+ // Default to looking for the library in the current working directory.
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::FilePath::CharType kDefaultLibraryPathValue[] =
+ FILE_PATH_LITERAL("./libmojo_core.so");
+ #elif defined(OS_WIN)
+@@ -132,7 +132,7 @@ class CoreLibraryInitializer {
+ ~CoreLibraryInitializer() = default;
+
+ private:
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ base::Optional<base::ScopedNativeLibrary> library_;
+ #endif
+
diff --git a/devel/electron4/files/patch-net_BUILD.gn b/devel/electron4/files/patch-net_BUILD.gn
new file mode 100644
index 000000000000..e04bc46d50f4
--- /dev/null
+++ b/devel/electron4/files/patch-net_BUILD.gn
@@ -0,0 +1,29 @@
+--- net/BUILD.gn.orig 2019-03-15 06:37:29 UTC
++++ net/BUILD.gn
+@@ -95,7 +95,7 @@ net_configs = [
+ "//build/config/compiler:wexit_time_destructors",
+ ]
+
+-if (is_linux) {
++if (is_linux && !is_bsd) {
+ net_configs += [ "//build/config/linux:libresolv" ]
+ }
+
+@@ -1904,6 +1904,17 @@ component("net") {
+ ]
+
+ sources -= [ "disk_cache/blockfile/file_posix.cc" ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "base/address_tracker_linux.cc",
++ "base/address_tracker_linux.h",
++ "base/network_change_notifier_linux.cc",
++ "base/network_change_notifier_linux.h",
++ "base/network_interfaces_linux.cc",
++ ]
++ sources += [ "base/network_interfaces_freebsd.cc" ]
+ }
+
+ if (is_ios || is_mac) {
diff --git a/devel/electron4/files/patch-net_base_address__tracker__linux.cc b/devel/electron4/files/patch-net_base_address__tracker__linux.cc
new file mode 100644
index 000000000000..24159f1234e9
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_address__tracker__linux.cc
@@ -0,0 +1,259 @@
+--- net/base/address_tracker_linux.cc.orig 2019-03-15 06:37:29 UTC
++++ net/base/address_tracker_linux.cc
+@@ -21,96 +21,10 @@
+ namespace net {
+ namespace internal {
+
+-namespace {
+-
+-// Some kernel functions such as wireless_send_event and rtnetlink_ifinfo_prep
+-// may send spurious messages over rtnetlink. RTM_NEWLINK messages where
+-// ifi_change == 0 and rta_type == IFLA_WIRELESS should be ignored.
+-bool IgnoreWirelessChange(const struct nlmsghdr* header,
+- const struct ifinfomsg* msg) {
+- size_t length = IFLA_PAYLOAD(header);
+- for (const struct rtattr* attr = IFLA_RTA(msg); RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- if (attr->rta_type == IFLA_WIRELESS && msg->ifi_change == 0)
+- return true;
+- }
+- return false;
+-}
+-
+-// Retrieves address from NETLINK address message.
+-// Sets |really_deprecated| for IPv6 addresses with preferred lifetimes of 0.
+-bool GetAddress(const struct nlmsghdr* header,
+- IPAddress* out,
+- bool* really_deprecated) {
+- if (really_deprecated)
+- *really_deprecated = false;
+- const struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- size_t address_length = 0;
+- switch (msg->ifa_family) {
+- case AF_INET:
+- address_length = IPAddress::kIPv4AddressSize;
+- break;
+- case AF_INET6:
+- address_length = IPAddress::kIPv6AddressSize;
+- break;
+- default:
+- // Unknown family.
+- return false;
+- }
+- // Use IFA_ADDRESS unless IFA_LOCAL is present. This behavior here is based on
+- // getaddrinfo in glibc (check_pf.c). Judging from kernel implementation of
+- // NETLINK, IPv4 addresses have only the IFA_ADDRESS attribute, while IPv6
+- // have the IFA_LOCAL attribute.
+- uint8_t* address = NULL;
+- uint8_t* local = NULL;
+- size_t length = IFA_PAYLOAD(header);
+- for (const struct rtattr* attr =
+- reinterpret_cast<const struct rtattr*>(IFA_RTA(msg));
+- RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- switch (attr->rta_type) {
+- case IFA_ADDRESS:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- address = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_LOCAL:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- local = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_CACHEINFO: {
+- const struct ifa_cacheinfo *cache_info =
+- reinterpret_cast<const struct ifa_cacheinfo*>(RTA_DATA(attr));
+- if (really_deprecated)
+- *really_deprecated = (cache_info->ifa_prefered == 0);
+- } break;
+- default:
+- break;
+- }
+- }
+- if (local)
+- address = local;
+- if (!address)
+- return false;
+- *out = IPAddress(address, address_length);
+- return true;
+-}
+-
+-} // namespace
+-
+ // static
+ char* AddressTrackerLinux::GetInterfaceName(int interface_index, char* buf) {
+- memset(buf, 0, IFNAMSIZ);
+- base::ScopedFD ioctl_socket = GetSocketForIoctl();
+- if (!ioctl_socket.is_valid())
+- return buf;
+-
+- struct ifreq ifr = {};
+- ifr.ifr_ifindex = interface_index;
+-
+- if (ioctl(ioctl_socket.get(), SIOCGIFNAME, &ifr) == 0)
+- strncpy(buf, ifr.ifr_name, IFNAMSIZ - 1);
+- return buf;
++ NOTIMPLEMENTED();
++ return NULL;
+ }
+
+ AddressTrackerLinux::AddressTrackerLinux()
+@@ -153,93 +67,8 @@ AddressTrackerLinux::~AddressTrackerLinux() {
+ }
+
+ void AddressTrackerLinux::Init() {
+- netlink_fd_ = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+- if (netlink_fd_ < 0) {
+- PLOG(ERROR) << "Could not create NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- int rv;
+-
+- if (tracking_) {
+- // Request notifications.
+- struct sockaddr_nl addr = {};
+- addr.nl_family = AF_NETLINK;
+- addr.nl_pid = getpid();
+- // TODO(szym): Track RTMGRP_LINK as well for ifi_type,
+- // http://crbug.com/113993
+- addr.nl_groups =
+- RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR | RTMGRP_NOTIFY | RTMGRP_LINK;
+- rv = bind(
+- netlink_fd_, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not bind NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+- }
+-
+- // Request dump of addresses.
+- struct sockaddr_nl peer = {};
+- peer.nl_family = AF_NETLINK;
+-
+- struct {
+- struct nlmsghdr header;
+- struct rtgenmsg msg;
+- } request = {};
+-
+- request.header.nlmsg_len = NLMSG_LENGTH(sizeof(request.msg));
+- request.header.nlmsg_type = RTM_GETADDR;
+- request.header.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+- request.header.nlmsg_pid = getpid();
+- request.msg.rtgen_family = AF_UNSPEC;
+-
+- rv = HANDLE_EINTR(sendto(netlink_fd_, &request, request.header.nlmsg_len,
+- 0, reinterpret_cast<struct sockaddr*>(&peer),
+- sizeof(peer)));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not send NETLINK request";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- // Consume pending message to populate the AddressMap, but don't notify.
+- // Sending another request without first reading responses results in EBUSY.
+- bool address_changed;
+- bool link_changed;
+- bool tunnel_changed;
+- ReadMessages(&address_changed, &link_changed, &tunnel_changed);
+-
+- // Request dump of link state
+- request.header.nlmsg_type = RTM_GETLINK;
+-
+- rv = HANDLE_EINTR(sendto(netlink_fd_, &request, request.header.nlmsg_len, 0,
+- reinterpret_cast<struct sockaddr*>(&peer),
+- sizeof(peer)));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not send NETLINK request";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- // Consume pending message to populate links_online_, but don't notify.
+- ReadMessages(&address_changed, &link_changed, &tunnel_changed);
+- {
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- connection_type_initialized_ = true;
+- connection_type_initialized_cv_.Broadcast();
+- }
+-
+- if (tracking_) {
+- rv = base::MessageLoopCurrentForIO::Get()->WatchFileDescriptor(
+- netlink_fd_, true, base::MessagePumpForIO::WATCH_READ, &watcher_, this);
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not watch NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+- }
++NOTIMPLEMENTED();
++AbortAndForceOnline();
+ }
+
+ void AddressTrackerLinux::AbortAndForceOnline() {
+@@ -250,25 +79,6 @@ void AddressTrackerLinux::AbortAndForceOnline() {
+ connection_type_initialized_cv_.Broadcast();
+ }
+
+-AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
+- AddressTrackerAutoLock lock(*this, address_map_lock_);
+- return address_map_;
+-}
+-
+-std::unordered_set<int> AddressTrackerLinux::GetOnlineLinks() const {
+- AddressTrackerAutoLock lock(*this, online_links_lock_);
+- return online_links_;
+-}
+-
+-bool AddressTrackerLinux::IsInterfaceIgnored(int interface_index) const {
+- if (ignored_interfaces_.empty())
+- return false;
+-
+- char buf[IFNAMSIZ] = {0};
+- const char* interface_name = get_interface_name_(interface_index, buf);
+- return ignored_interfaces_.find(interface_name) != ignored_interfaces_.end();
+-}
+-
+ NetworkChangeNotifier::ConnectionType
+ AddressTrackerLinux::GetCurrentConnectionType() {
+ // http://crbug.com/125097
+@@ -323,6 +133,7 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ bool* address_changed,
+ bool* link_changed,
+ bool* tunnel_changed) {
++#if !defined(OS_BSD)
+ DCHECK(buffer);
+ for (struct nlmsghdr* header = reinterpret_cast<struct nlmsghdr*>(buffer);
+ NLMSG_OK(header, length);
+@@ -419,6 +230,9 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ break;
+ }
+ }
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ void AddressTrackerLinux::OnFileCanReadWithoutBlocking(int fd) {
+@@ -455,6 +269,7 @@ bool AddressTrackerLinux::IsTunnelInterfaceName(const
+ }
+
+ void AddressTrackerLinux::UpdateCurrentConnectionType() {
++#if !defined(OS_BSD)
+ AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+ std::unordered_set<int> online_links = GetOnlineLinks();
+
+@@ -483,6 +298,9 @@ void AddressTrackerLinux::UpdateCurrentConnectionType(
+
+ AddressTrackerAutoLock lock(*this, connection_type_lock_);
+ current_connection_type_ = type;
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ int AddressTrackerLinux::GetThreadsWaitingForConnectionTypeInitForTesting()
diff --git a/devel/electron4/files/patch-net_base_address__tracker__linux.h b/devel/electron4/files/patch-net_base_address__tracker__linux.h
new file mode 100644
index 000000000000..4f80a354ba35
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_address__tracker__linux.h
@@ -0,0 +1,12 @@
+--- net/base/address_tracker_linux.h.orig 2019-03-15 06:37:29 UTC
++++ net/base/address_tracker_linux.h
+@@ -7,9 +7,6 @@
+
+ #include <sys/socket.h> // Needed to include netlink.
+ // Mask superfluous definition of |struct net|. This is fixed in Linux 2.6.38.
+-#define net net_kernel
+-#include <linux/rtnetlink.h>
+-#undef net
+ #include <stddef.h>
+
+ #include <map>
diff --git a/devel/electron4/files/patch-net_base_address__tracker__linux__unittest.cc b/devel/electron4/files/patch-net_base_address__tracker__linux__unittest.cc
new file mode 100644
index 000000000000..47dc7694bd17
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_address__tracker__linux__unittest.cc
@@ -0,0 +1,14 @@
+--- net/base/address_tracker_linux_unittest.cc.orig 2019-03-15 06:25:49 UTC
++++ net/base/address_tracker_linux_unittest.cc
+@@ -4,7 +4,11 @@
+
+ #include "net/base/address_tracker_linux.h"
+
++#if defined(__linux__)
+ #include <linux/if.h>
++#else
++#include <net/if.h>
++#endif
+
+ #include <memory>
+ #include <unordered_set>
diff --git a/devel/electron4/files/patch-net_base_network__change__notifier.cc b/devel/electron4/files/patch-net_base_network__change__notifier.cc
new file mode 100644
index 000000000000..5e9c2a40df23
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_network__change__notifier.cc
@@ -0,0 +1,10 @@
+--- net/base/network_change_notifier.cc.orig 2019-03-15 06:37:29 UTC
++++ net/base/network_change_notifier.cc
+@@ -217,7 +217,6 @@ NetworkChangeNotifier* NetworkChangeNotifier::Create()
+ #elif defined(OS_MACOSX)
+ return new NetworkChangeNotifierMac();
+ #else
+- NOTIMPLEMENTED();
+ return NULL;
+ #endif
+ }
diff --git a/devel/electron4/files/patch-net_base_network__interfaces__freebsd.cc b/devel/electron4/files/patch-net_base_network__interfaces__freebsd.cc
new file mode 100644
index 000000000000..15d1229d84ed
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_network__interfaces__freebsd.cc
@@ -0,0 +1,243 @@
+--- net/base/network_interfaces_freebsd.cc.orig 2019-03-16 09:17:06 UTC
++++ net/base/network_interfaces_freebsd.cc
+@@ -0,0 +1,240 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "net/base/network_interfaces_freebsd.h"
++
++#include <ifaddrs.h>
++#include <net/if.h>
++#include <netinet/in.h>
++#include <sys/types.h>
++#include <net/if_media.h>
++#include <net/if_var.h>
++#include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
++#include <sys/ioctl.h>
++
++#include <memory>
++#include <set>
++
++#include "base/files/file_path.h"
++#include "base/logging.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_tokenizer.h"
++#include "base/strings/string_util.h"
++#include "base/threading/thread_restrictions.h"
++#include "net/base/escape.h"
++#include "net/base/ip_endpoint.h"
++#include "net/base/net_errors.h"
++#include "net/base/network_interfaces_posix.h"
++#include "url/gurl.h"
++
++namespace net {
++
++namespace {
++
++// FreeBSD implementation of IPAttributesGetterFreeBSD which calls ioctl on socket to
++// retrieve IP attributes.
++class IPAttributesGetterFreeBSDImpl : public internal::IPAttributesGetterFreeBSD {
++ public:
++ IPAttributesGetterFreeBSDImpl();
++ ~IPAttributesGetterFreeBSDImpl() override;
++ bool IsInitialized() const override;
++ bool GetIPAttributes(const char* ifname,
++ const sockaddr* sock_addr,
++ int* native_attributes) override;
++
++ private:
++ int ioctl_socket_;
++};
++
++IPAttributesGetterFreeBSDImpl::IPAttributesGetterFreeBSDImpl()
++ : ioctl_socket_(socket(AF_INET6, SOCK_DGRAM, 0)) {
++ DCHECK_GE(ioctl_socket_, 0);
++}
++
++bool IPAttributesGetterFreeBSDImpl::IsInitialized() const {
++ return ioctl_socket_ >= 0;
++}
++
++IPAttributesGetterFreeBSDImpl::~IPAttributesGetterFreeBSDImpl() {
++ if (ioctl_socket_ >= 0) {
++ close(ioctl_socket_);
++ }
++}
++
++bool IPAttributesGetterFreeBSDImpl::GetIPAttributes(const char* ifname,
++ const sockaddr* sock_addr,
++ int* native_attributes) {
++ struct in6_ifreq ifr = {};
++ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
++ memcpy(&ifr.ifr_ifru.ifru_addr, sock_addr, sock_addr->sa_len);
++ int rv = ioctl(ioctl_socket_, SIOCGIFAFLAG_IN6, &ifr);
++ if (rv >= 0) {
++ *native_attributes = ifr.ifr_ifru.ifru_flags;
++ }
++ return (rv >= 0);
++}
++
++// When returning true, the platform native IPv6 address attributes were
++// successfully converted to net IP address attributes. Otherwise, returning
++// false and the caller should drop the IP address which can't be used by the
++// application layer.
++bool TryConvertNativeToNetIPAttributes(int native_attributes,
++ int* net_attributes) {
++ // For FreeBSD, we disallow addresses with attributes IN6_IFF_ANYCASE,
++ // IN6_IFF_DUPLICATED, IN6_IFF_TENTATIVE, and IN6_IFF_DETACHED as these are
++ // still progressing through duplicated address detection (DAD) or are not
++ // suitable to be used in an one-to-one communication and shouldn't be used
++ // by the application layer.
++ if (native_attributes & (IN6_IFF_ANYCAST | IN6_IFF_DUPLICATED |
++ IN6_IFF_TENTATIVE | IN6_IFF_DETACHED)) {
++ return false;
++ }
++
++ if (native_attributes & IN6_IFF_DEPRECATED) {
++ *net_attributes |= IP_ADDRESS_ATTRIBUTE_DEPRECATED;
++ }
++
++ return true;
++}
++
++NetworkChangeNotifier::ConnectionType GetNetworkInterfaceType(
++ int addr_family,
++ const std::string& interface_name) {
++ NetworkChangeNotifier::ConnectionType type =
++ NetworkChangeNotifier::CONNECTION_UNKNOWN;
++
++ struct ifmediareq ifmr = {};
++ strncpy(ifmr.ifm_name, interface_name.c_str(), sizeof(ifmr.ifm_name) - 1);
++
++ int s = socket(addr_family, SOCK_DGRAM, 0);
++ if (s == -1) {
++ return type;
++ }
++
++ if (ioctl(s, SIOCGIFMEDIA, &ifmr) != -1) {
++ if (ifmr.ifm_current & IFM_IEEE80211) {
++ type = NetworkChangeNotifier::CONNECTION_WIFI;
++ } else if (ifmr.ifm_current & IFM_ETHER) {
++ type = NetworkChangeNotifier::CONNECTION_ETHERNET;
++ }
++ }
++ close(s);
++ return type;
++}
++
++} // namespace
++
++namespace internal {
++
++bool GetNetworkListImpl(NetworkInterfaceList* networks,
++ int policy,
++ const ifaddrs* interfaces,
++ IPAttributesGetterFreeBSD* ip_attributes_getter) {
++ // Enumerate the addresses assigned to network interfaces which are up.
++ for (const ifaddrs* interface = interfaces; interface != NULL;
++ interface = interface->ifa_next) {
++ // Skip loopback interfaces, and ones which are down.
++ if (!(IFF_RUNNING & interface->ifa_flags))
++ continue;
++ if (IFF_LOOPBACK & interface->ifa_flags)
++ continue;
++ // Skip interfaces with no address configured.
++ struct sockaddr* addr = interface->ifa_addr;
++ if (!addr)
++ continue;
++
++ // Skip unspecified addresses (i.e. made of zeroes) and loopback addresses
++ // configured on non-loopback interfaces.
++ if (IsLoopbackOrUnspecifiedAddress(addr))
++ continue;
++
++ const std::string& name = interface->ifa_name;
++ // Filter out VMware interfaces, typically named vmnet1 and vmnet8.
++ if (ShouldIgnoreInterface(name, policy)) {
++ continue;
++ }
++
++ NetworkChangeNotifier::ConnectionType connection_type =
++ NetworkChangeNotifier::CONNECTION_UNKNOWN;
++
++ int ip_attributes = IP_ADDRESS_ATTRIBUTE_NONE;
++
++ // Retrieve native ip attributes and convert to net version if a getter is
++ // given.
++ if (ip_attributes_getter && ip_attributes_getter->IsInitialized()) {
++ int native_attributes = 0;
++ if (addr->sa_family == AF_INET6 &&
++ ip_attributes_getter->GetIPAttributes(
++ interface->ifa_name, interface->ifa_addr, &native_attributes)) {
++ if (!TryConvertNativeToNetIPAttributes(native_attributes,
++ &ip_attributes)) {
++ continue;
++ }
++ }
++ }
++
++ connection_type = GetNetworkInterfaceType(addr->sa_family, name);
++
++ IPEndPoint address;
++
++ int addr_size = 0;
++ if (addr->sa_family == AF_INET6) {
++ addr_size = sizeof(sockaddr_in6);
++ } else if (addr->sa_family == AF_INET) {
++ addr_size = sizeof(sockaddr_in);
++ }
++
++ if (address.FromSockAddr(addr, addr_size)) {
++ uint8_t prefix_length = 0;
++ if (interface->ifa_netmask) {
++ // If not otherwise set, assume the same sa_family as ifa_addr.
++ if (interface->ifa_netmask->sa_family == 0) {
++ interface->ifa_netmask->sa_family = addr->sa_family;
++ }
++ IPEndPoint netmask;
++ if (netmask.FromSockAddr(interface->ifa_netmask, addr_size)) {
++ prefix_length = MaskPrefixLength(netmask.address());
++ }
++ }
++ networks->push_back(NetworkInterface(
++ name, name, if_nametoindex(name.c_str()), connection_type,
++ address.address(), prefix_length, ip_attributes));
++ }
++ }
++
++ return true;
++}
++
++} // namespace internal
++
++bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
++ if (networks == NULL)
++ return false;
++
++ // getifaddrs() may require IO operations.
++ base::AssertBlockingAllowed();
++
++ ifaddrs* interfaces;
++ if (getifaddrs(&interfaces) < 0) {
++ PLOG(ERROR) << "getifaddrs";
++ return false;
++ }
++
++ std::unique_ptr<internal::IPAttributesGetterFreeBSD> ip_attributes_getter;
++
++ ip_attributes_getter.reset(new IPAttributesGetterFreeBSDImpl());
++
++ bool result = internal::GetNetworkListImpl(networks, policy, interfaces,
++ ip_attributes_getter.get());
++ freeifaddrs(interfaces);
++ return result;
++}
++
++std::string GetWifiSSID() {
++ NOTIMPLEMENTED();
++ return "";
++}
++
++} // namespace net
diff --git a/devel/electron4/files/patch-net_base_network__interfaces__freebsd.h b/devel/electron4/files/patch-net_base_network__interfaces__freebsd.h
new file mode 100644
index 000000000000..13dd41c9939f
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_network__interfaces__freebsd.h
@@ -0,0 +1,47 @@
+--- net/base/network_interfaces_freebsd.h.orig 2019-03-16 09:17:06 UTC
++++ net/base/network_interfaces_freebsd.h
+@@ -0,0 +1,44 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef NET_BASE_NETWORK_INTERFACES_FREEBSD_H_
++#define NET_BASE_NETWORK_INTERFACES_FREEBSD_H_
++
++// This file is only used to expose some of the internals
++// of network_interfaces_mac.cc to tests.
++
++#include <sys/socket.h>
++
++#include "base/macros.h"
++#include "net/base/net_export.h"
++#include "net/base/network_interfaces.h"
++
++struct ifaddrs;
++struct sockaddr;
++
++namespace net {
++namespace internal {
++
++class NET_EXPORT IPAttributesGetterFreeBSD {
++ public:
++ IPAttributesGetterFreeBSD() {}
++ virtual ~IPAttributesGetterFreeBSD() {}
++ virtual bool IsInitialized() const = 0;
++ virtual bool GetIPAttributes(const char* ifname,
++ const sockaddr* sock_addr,
++ int* native_attributes) = 0;
++
++ private:
++ DISALLOW_COPY_AND_ASSIGN(IPAttributesGetterFreeBSD);
++};
++
++NET_EXPORT bool GetNetworkListImpl(NetworkInterfaceList* networks,
++ int policy,
++ const ifaddrs* interfaces,
++ IPAttributesGetterFreeBSD* ip_attributes_getter);
++
++} // namespace internal
++} // namespace net
++
++#endif // NET_BASE_NETWORK_INTERFACES_FREEBSD_H_
diff --git a/devel/electron4/files/patch-net_base_network__interfaces__posix.h b/devel/electron4/files/patch-net_base_network__interfaces__posix.h
new file mode 100644
index 000000000000..ee53c3184d9c
--- /dev/null
+++ b/devel/electron4/files/patch-net_base_network__interfaces__posix.h
@@ -0,0 +1,11 @@
+--- net/base/network_interfaces_posix.h.orig 2019-03-15 06:25:49 UTC
++++ net/base/network_interfaces_posix.h
+@@ -8,6 +8,8 @@
+ // This file provides some basic functionality shared between
+ // network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
+
++#include <sys/socket.h>
++
+ #include <string>
+
+ struct sockaddr;
diff --git a/devel/electron4/files/patch-net_disk__cache_blockfile_disk__format.h b/devel/electron4/files/patch-net_disk__cache_blockfile_disk__format.h
new file mode 100644
index 000000000000..64aa3a21344f
--- /dev/null
+++ b/devel/electron4/files/patch-net_disk__cache_blockfile_disk__format.h
@@ -0,0 +1,12 @@
+--- net/disk_cache/blockfile/disk_format.h.orig 2019-03-15 06:25:50 UTC
++++ net/disk_cache/blockfile/disk_format.h
+@@ -149,7 +149,9 @@ struct RankingsNode {
+ };
+ #pragma pack(pop)
+
++#if !defined(OS_BSD)
+ static_assert(sizeof(RankingsNode) == 36, "bad RankingsNode");
++#endif
+
+ } // namespace disk_cache
+
diff --git a/devel/electron4/files/patch-net_dns_address__sorter__posix.cc b/devel/electron4/files/patch-net_dns_address__sorter__posix.cc
new file mode 100644
index 000000000000..633e23199777
--- /dev/null
+++ b/devel/electron4/files/patch-net_dns_address__sorter__posix.cc
@@ -0,0 +1,12 @@
+--- net/dns/address_sorter_posix.cc.orig 2019-03-15 06:37:29 UTC
++++ net/dns/address_sorter_posix.cc
+@@ -13,7 +13,9 @@
+ #include <sys/socket.h> // Must be included before ifaddrs.h.
+ #include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_var.h>
+ #include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #endif
diff --git a/devel/electron4/files/patch-net_dns_dns__config__service__posix__unittest.cc b/devel/electron4/files/patch-net_dns_dns__config__service__posix__unittest.cc
new file mode 100644
index 000000000000..a30082d24219
--- /dev/null
+++ b/devel/electron4/files/patch-net_dns_dns__config__service__posix__unittest.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_config_service_posix_unittest.cc.orig 2019-03-15 06:37:29 UTC
++++ net/dns/dns_config_service_posix_unittest.cc
+@@ -2,8 +2,6 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <resolv.h>
+-
+ #include <memory>
+
+ #include "base/cancelable_callback.h"
diff --git a/devel/electron4/files/patch-net_dns_dns__reloader.cc b/devel/electron4/files/patch-net_dns_dns__reloader.cc
new file mode 100644
index 000000000000..9c42c4673de3
--- /dev/null
+++ b/devel/electron4/files/patch-net_dns_dns__reloader.cc
@@ -0,0 +1,13 @@
+--- net/dns/dns_reloader.cc.orig 2019-03-15 06:37:29 UTC
++++ net/dns/dns_reloader.cc
+@@ -7,6 +7,10 @@
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+
++#if defined(OS_FREEBSD)
++#include <netinet/in.h>
++#endif
++
+ #include <resolv.h>
+
+ #include "base/lazy_instance.h"
diff --git a/devel/electron4/files/patch-net_dns_dns__util.cc b/devel/electron4/files/patch-net_dns_dns__util.cc
new file mode 100644
index 000000000000..d103df1b6103
--- /dev/null
+++ b/devel/electron4/files/patch-net_dns_dns__util.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_util.cc.orig 2019-03-15 06:37:29 UTC
++++ net/dns/dns_util.cc
+@@ -28,6 +28,8 @@ const int kMaxLabelLength = 63;
+
+ } // namespace
+
++#include <sys/socket.h>
++
+ #if defined(OS_POSIX)
+ #include <netinet/in.h>
+ #if !defined(OS_NACL)
diff --git a/devel/electron4/files/patch-net_dns_host__resolver__proc.cc b/devel/electron4/files/patch-net_dns_host__resolver__proc.cc
new file mode 100644
index 000000000000..b68aa21d5c7d
--- /dev/null
+++ b/devel/electron4/files/patch-net_dns_host__resolver__proc.cc
@@ -0,0 +1,11 @@
+--- net/dns/host_resolver_proc.cc.orig 2019-03-15 06:37:29 UTC
++++ net/dns/host_resolver_proc.cc
+@@ -195,7 +195,7 @@ int SystemHostResolverCall(const std::string& host,
+ // current process during that time.
+ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::WILL_BLOCK);
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+ DnsReloaderMaybeReload();
+ #endif
diff --git a/devel/electron4/files/patch-net_features.gni b/devel/electron4/files/patch-net_features.gni
new file mode 100644
index 000000000000..8e2cbcaa53a0
--- /dev/null
+++ b/devel/electron4/files/patch-net_features.gni
@@ -0,0 +1,11 @@
+--- net/features.gni.orig 2019-03-15 06:37:29 UTC
++++ net/features.gni
+@@ -27,7 +27,7 @@ declare_args() {
+ disable_brotli_filter = false
+
+ # Multicast DNS.
+- enable_mdns = is_win || is_linux || is_fuchsia
++ enable_mdns = is_win || is_linux || is_fuchsia || is_bsd
+
+ # Reporting not used on iOS.
+ enable_reporting = !is_ios
diff --git a/devel/electron4/files/patch-net_http_http__auth__gssapi__posix.cc b/devel/electron4/files/patch-net_http_http__auth__gssapi__posix.cc
new file mode 100644
index 000000000000..384ff069ccb2
--- /dev/null
+++ b/devel/electron4/files/patch-net_http_http__auth__gssapi__posix.cc
@@ -0,0 +1,14 @@
+--- net/http/http_auth_gssapi_posix.cc.orig 2019-03-15 06:37:29 UTC
++++ net/http/http_auth_gssapi_posix.cc
+@@ -431,8 +431,9 @@ base::NativeLibrary GSSAPISharedLibrary::LoadSharedLib
+ static const char* const kDefaultLibraryNames[] = {
+ #if defined(OS_MACOSX)
+ "/System/Library/Frameworks/GSS.framework/GSS"
+-#elif defined(OS_OPENBSD)
+- "libgssapi.so" // Heimdal - OpenBSD
++#elif defined(OS_BSD)
++ "libgssapi_krb5.so.2", // MIT Kerberos - FreeBSD
++ "libgssapi.so" // Heimdal - OpenBSD, FreeBSD
+ #else
+ "libgssapi_krb5.so.2", // MIT Kerberos - FC, Suse10, Debian
+ "libgssapi.so.4", // Heimdal - Suse10, MDK
diff --git a/devel/electron4/files/patch-net_http_http__network__session.cc b/devel/electron4/files/patch-net_http_http__network__session.cc
new file mode 100644
index 000000000000..646fcbd66fd2
--- /dev/null
+++ b/devel/electron4/files/patch-net_http_http__network__session.cc
@@ -0,0 +1,12 @@
+--- net/http/http_network_session.cc.orig 2019-03-15 06:37:30 UTC
++++ net/http/http_network_session.cc
+@@ -20,7 +20,9 @@
+ #include "base/trace_event/memory_dump_request_args.h"
+ #include "base/trace_event/process_memory_dump.h"
+ #include "base/values.h"
++#if defined(USE_KERBEROS)
+ #include "net/http/http_auth_handler_factory.h"
++#endif
+ #include "net/http/http_response_body_drainer.h"
+ #include "net/http/http_stream_factory.h"
+ #include "net/http/url_security_manager.h"
diff --git a/devel/electron4/files/patch-net_proxy__resolution_proxy__config__service__linux.cc b/devel/electron4/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
new file mode 100644
index 000000000000..ea1d68c5e140
--- /dev/null
+++ b/devel/electron4/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
@@ -0,0 +1,39 @@
+--- net/proxy_resolution/proxy_config_service_linux.cc.orig 2019-03-15 06:37:30 UTC
++++ net/proxy_resolution/proxy_config_service_linux.cc
+@@ -6,7 +6,9 @@
+
+ #include <errno.h>
+ #include <limits.h>
++#if !defined(OS_BSD)
+ #include <sys/inotify.h>
++#endif
+ #include <unistd.h>
+
+ #include <map>
+@@ -493,6 +495,7 @@ int StringToIntOrDefault(base::StringPiece value, int
+ return default_value;
+ }
+
++#if !defined(OS_BSD)
+ // This is the KDE version that reads kioslaverc and simulates gsettings.
+ // Doing this allows the main Delegate code, as well as the unit tests
+ // for it, to stay the same - and the settings map fairly well besides.
+@@ -982,6 +985,7 @@ class SettingGetterImplKDE : public ProxyConfigService
+
+ DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
+ };
++#endif
+
+ } // namespace
+
+@@ -1197,8 +1201,10 @@ ProxyConfigServiceLinux::Delegate::Delegate(
+ case base::nix::DESKTOP_ENVIRONMENT_KDE3:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE4:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE5:
++#if !defined(OS_BSD)
+ setting_getter_.reset(new SettingGetterImplKDE(env_var_getter_.get()));
+ break;
++#endif
+ case base::nix::DESKTOP_ENVIRONMENT_XFCE:
+ case base::nix::DESKTOP_ENVIRONMENT_OTHER:
+ break;
diff --git a/devel/electron4/files/patch-net_proxy__resolution_proxy__resolution__service.cc b/devel/electron4/files/patch-net_proxy__resolution_proxy__resolution__service.cc
new file mode 100644
index 000000000000..8bda87ff59d5
--- /dev/null
+++ b/devel/electron4/files/patch-net_proxy__resolution_proxy__resolution__service.cc
@@ -0,0 +1,29 @@
+--- net/proxy_resolution/proxy_resolution_service.cc.orig 2019-03-15 06:37:30 UTC
++++ net/proxy_resolution/proxy_resolution_service.cc
+@@ -47,7 +47,7 @@
+ #elif defined(OS_MACOSX)
+ #include "net/proxy_resolution/proxy_config_service_mac.h"
+ #include "net/proxy_resolution/proxy_resolver_mac.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "net/proxy_resolution/proxy_config_service_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "net/proxy_resolution/proxy_config_service_android.h"
+@@ -61,7 +61,7 @@ namespace net {
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ constexpr net::NetworkTrafficAnnotationTag kSystemProxyConfigTrafficAnnotation =
+ net::DefineNetworkTrafficAnnotation("proxy_config_system", R"(
+ semantics {
+@@ -1529,7 +1529,7 @@ ProxyResolutionService::CreateSystemProxyConfigService
+ << "profile_io_data.cc::CreateProxyConfigService and this should "
+ << "be used only for examples.";
+ return std::make_unique<UnsetProxyConfigService>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
+ new ProxyConfigServiceLinux());
+
diff --git a/devel/electron4/files/patch-net_socket_socks5__client__socket.cc b/devel/electron4/files/patch-net_socket_socks5__client__socket.cc
new file mode 100644
index 000000000000..4580e23332e6
--- /dev/null
+++ b/devel/electron4/files/patch-net_socket_socks5__client__socket.cc
@@ -0,0 +1,13 @@
+--- net/socket/socks5_client_socket.cc.orig 2019-03-15 06:37:30 UTC
++++ net/socket/socks5_client_socket.cc
+@@ -4,6 +4,10 @@
+
+ #include "net/socket/socks5_client_socket.h"
+
++#if defined(OS_BSD)
++#include <netinet/in.h>
++#endif
++
+ #include <utility>
+
+ #include "base/callback_helpers.h"
diff --git a/devel/electron4/files/patch-net_socket_udp__socket__posix.cc b/devel/electron4/files/patch-net_socket_udp__socket__posix.cc
new file mode 100644
index 000000000000..0cd590ef675b
--- /dev/null
+++ b/devel/electron4/files/patch-net_socket_udp__socket__posix.cc
@@ -0,0 +1,96 @@
+--- net/socket/udp_socket_posix.cc.orig 2019-03-15 06:37:30 UTC
++++ net/socket/udp_socket_posix.cc
+@@ -68,7 +68,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+ const base::TimeDelta kActivityMonitorMsThreshold =
+ base::TimeDelta::FromMilliseconds(100);
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
+ // requires passing IPv4 address instead of interface index. This function
+ // resolves IPv4 address by interface index. The |address| is returned in
+@@ -97,7 +97,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
+ return OK;
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+
+@@ -632,13 +632,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ }
+
+ void UDPSocketPosix::SetMsgConfirm(bool confirm) {
+-#if !defined(OS_MACOSX) && !defined(OS_IOS)
++#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ if (confirm) {
+ sendto_flags_ |= MSG_CONFIRM;
+ } else {
+ sendto_flags_ &= ~MSG_CONFIRM;
+ }
+-#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
++#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ }
+
+ int UDPSocketPosix::AllowAddressReuse() {
+@@ -653,17 +653,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ int value = broadcast ? 1 : 0;
+ int rv;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // SO_REUSEPORT on OSX permits multiple processes to each receive
+ // UDP multicast or broadcast datagrams destined for the bound
+ // port.
+ // This is only being set on OSX because its behavior is platform dependent
+ // and we are playing it safe by only setting it on platforms where things
+ // break.
++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
++ if (rv != 0)
++ return MapSystemError(errno);
+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
+ if (rv != 0)
+ return MapSystemError(errno);
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
+
+ return rv == 0 ? OK : MapSystemError(errno);
+@@ -901,19 +904,24 @@ int UDPSocketPosix::SetMulticastOptions() {
+ if (multicast_interface_ != 0) {
+ switch (addr_family_) {
+ case AF_INET: {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+ if (error != OK)
+ return error;
+-#else // defined(OS_MACOSX)
++#else // defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = htonl(INADDR_ANY);
+-#endif // !defined(OS_MACOSX)
++#endif // !defined(OS_MACOSX) || defined(OS_BSD)
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
++#ifdef defined(OS_BSD)
++ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr),
++ sizeof(mreq.imr_interface.s_addr));
++#else
+ reinterpret_cast<const char*>(&mreq), sizeof(mreq));
++#endif
+ if (rv)
+ return MapSystemError(errno);
+ break;
+@@ -975,7 +983,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
diff --git a/devel/electron4/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc b/devel/electron4/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc
new file mode 100644
index 000000000000..c7e4935f7e13
--- /dev/null
+++ b/devel/electron4/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc
@@ -0,0 +1,10 @@
+--- net/third_party/quic/platform/impl/quic_ip_address_impl.cc.orig 2019-03-15 06:37:31 UTC
++++ net/third_party/quic/platform/impl/quic_ip_address_impl.cc
+@@ -13,6 +13,7 @@
+ #include <ws2bth.h>
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ #include <netinet/in.h>
++#include <sys/socket.h>
+ #endif
+
+ using std::string;
diff --git a/devel/electron4/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc b/devel/electron4/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
new file mode 100644
index 000000000000..63c1a6931fd5
--- /dev/null
+++ b/devel/electron4/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
@@ -0,0 +1,20 @@
+--- net/tools/cert_verify_tool/cert_verify_tool.cc.orig 2019-03-15 06:37:31 UTC
++++ net/tools/cert_verify_tool/cert_verify_tool.cc
+@@ -26,7 +26,7 @@
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "net/proxy_resolution/proxy_config.h"
+ #include "net/proxy_resolution/proxy_config_service_fixed.h"
+ #endif
+@@ -45,7 +45,7 @@ void SetUpOnNetworkThread(std::unique_ptr<net::URLRequ
+ base::WaitableEvent* initialization_complete_event) {
+ net::URLRequestContextBuilder url_request_context_builder;
+ url_request_context_builder.set_user_agent(GetUserAgent());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ //
diff --git a/devel/electron4/files/patch-net_url__request_url__request__context__builder.cc b/devel/electron4/files/patch-net_url__request_url__request__context__builder.cc
new file mode 100644
index 000000000000..5597b5c230e3
--- /dev/null
+++ b/devel/electron4/files/patch-net_url__request_url__request__context__builder.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context_builder.cc.orig 2019-03-15 06:37:31 UTC
++++ net/url_request/url_request_context_builder.cc
+@@ -512,7 +512,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ }
+
+ if (!proxy_resolution_service_) {
+-#if !defined(OS_LINUX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // TODO(willchan): Switch to using this code when
+ // ProxyResolutionService::CreateSystemProxyConfigService()'s signature
+ // doesn't suck.
diff --git a/devel/electron4/files/patch-pdf_pdfium_pdfium__engine.cc b/devel/electron4/files/patch-pdf_pdfium_pdfium__engine.cc
new file mode 100644
index 000000000000..c26af92bc3da
--- /dev/null
+++ b/devel/electron4/files/patch-pdf_pdfium_pdfium__engine.cc
@@ -0,0 +1,65 @@
+--- pdf/pdfium/pdfium_engine.cc.orig 2019-03-15 06:37:31 UTC
++++ pdf/pdfium/pdfium_engine.cc
+@@ -137,7 +137,7 @@ constexpr bool kIsEditModeTracked = false;
+
+ PDFiumEngine* g_engine_for_fontmapper = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ PP_Instance g_last_instance_id;
+
+@@ -641,7 +641,7 @@ bool InitializeSDK() {
+ config.m_v8EmbedderSlot = gin::kEmbedderPDFium;
+ FPDF_InitLibraryWithConfig(&config);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Font loading doesn't work in the renderer sandbox in Linux.
+ FPDF_SetSystemFontInfo(&g_font_info);
+ #else
+@@ -666,7 +666,7 @@ bool InitializeSDK() {
+
+ void ShutdownSDK() {
+ FPDF_DestroyLibrary();
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ delete g_font_info;
+ #endif
+ TearDownV8();
+@@ -690,7 +690,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
+ IFSDK_PAUSE::user = nullptr;
+ IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreviewModeClient does not know its pp::Instance.
+ pp::Instance* instance = client_->GetPluginInstance();
+ if (instance)
+@@ -1147,7 +1147,7 @@ pp::Buffer_Dev PDFiumEngine::PrintPagesAsRasterPDF(
+
+ KillFormFocus();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -2842,7 +2842,7 @@ bool PDFiumEngine::ContinuePaint(int progressive_index
+ DCHECK(image_data);
+
+ last_progressive_start_time_ = base::Time::Now();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -3320,7 +3320,7 @@ void PDFiumEngine::SetCurrentPage(int index) {
+ FORM_DoPageAAction(old_page, form(), FPDFPAGE_AACTION_CLOSE);
+ }
+ most_visible_page_ = index;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+ if (most_visible_page_ != -1 && called_do_document_action_) {
diff --git a/devel/electron4/files/patch-ppapi_proxy_file__io__resource.cc b/devel/electron4/files/patch-ppapi_proxy_file__io__resource.cc
new file mode 100644
index 000000000000..7442b5b43732
--- /dev/null
+++ b/devel/electron4/files/patch-ppapi_proxy_file__io__resource.cc
@@ -0,0 +1,48 @@
+--- ppapi/proxy/file_io_resource.cc.orig 2019-03-15 06:37:31 UTC
++++ ppapi/proxy/file_io_resource.cc
+@@ -285,17 +285,19 @@ int32_t FileIOResource::Write(int64_t offset,
+
+ if (check_quota_) {
+ int64_t increase = 0;
+- uint64_t max_offset = 0;
++ uint64_t _max_offset = 0;
++ // (rene) avoid name collission with /usr/include/vm/vm_map.h on FreeBSD
++ // which also defines max_offset
+ bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
+ if (append) {
+ increase = bytes_to_write;
+ } else {
+- uint64_t max_offset = offset + bytes_to_write;
+- if (max_offset >
++ uint64_t _max_offset = offset + bytes_to_write;
++ if (_max_offset >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ return PP_ERROR_FAILED; // amount calculation would overflow.
+ }
+- increase = static_cast<int64_t>(max_offset) - max_written_offset_;
++ increase = static_cast<int64_t>(_max_offset) - max_written_offset_;
+ }
+
+ if (increase > 0) {
+@@ -319,7 +321,7 @@ int32_t FileIOResource::Write(int64_t offset,
+ if (append)
+ append_mode_write_amount_ += bytes_to_write;
+ else
+- max_written_offset_ = max_offset;
++ max_written_offset_ = _max_offset;
+ }
+ }
+ return WriteValidated(offset, buffer, bytes_to_write, callback);
+@@ -597,9 +599,9 @@ void FileIOResource::OnRequestWriteQuotaComplete(
+ } else {
+ DCHECK_LE(offset + bytes_to_write - max_written_offset_, granted);
+
+- int64_t max_offset = offset + bytes_to_write;
+- if (max_written_offset_ < max_offset)
+- max_written_offset_ = max_offset;
++ int64_t _max_offset = offset + bytes_to_write;
++ if (max_written_offset_ < _max_offset)
++ max_written_offset_ = _max_offset;
+ }
+
+ if (callback->is_blocking()) {
diff --git a/devel/electron4/files/patch-printing_backend_print__backend__cups.h b/devel/electron4/files/patch-printing_backend_print__backend__cups.h
new file mode 100644
index 000000000000..be0915942f15
--- /dev/null
+++ b/devel/electron4/files/patch-printing_backend_print__backend__cups.h
@@ -0,0 +1,11 @@
+--- printing/backend/print_backend_cups.h.orig 2019-03-15 06:25:50 UTC
++++ printing/backend/print_backend_cups.h
+@@ -5,6 +5,8 @@
+ #ifndef PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+ #define PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+
++#include <cups/ppd.h>
++
+ #include <string>
+
+ #include "base/files/file_util.h"
diff --git a/devel/electron4/files/patch-printing_cups__config__helper.py b/devel/electron4/files/patch-printing_cups__config__helper.py
new file mode 100644
index 000000000000..d61bd564c8c5
--- /dev/null
+++ b/devel/electron4/files/patch-printing_cups__config__helper.py
@@ -0,0 +1,11 @@
+--- printing/cups_config_helper.py.orig 2019-03-15 06:25:50 UTC
++++ printing/cups_config_helper.py
+@@ -65,7 +65,7 @@ def main():
+ mode = sys.argv[1]
+ if len(sys.argv) > 2 and sys.argv[2]:
+ sysroot = sys.argv[2]
+- cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
++ cups_config = os.path.join(sysroot, 'bin', 'cups-config')
+ if not os.path.exists(cups_config):
+ print 'cups-config not found: %s' % cups_config
+ return 1
diff --git a/devel/electron4/files/patch-remoting_base_chromoting__event.cc b/devel/electron4/files/patch-remoting_base_chromoting__event.cc
new file mode 100644
index 000000000000..43335fb522d0
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_base_chromoting__event.cc
@@ -0,0 +1,11 @@
+--- remoting/base/chromoting_event.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/base/chromoting_event.cc
+@@ -186,7 +186,7 @@ void ChromotingEvent::AddSystemInfo() {
+ SetString(kCpuKey, base::SysInfo::OperatingSystemArchitecture());
+ SetString(kOsVersionKey, base::SysInfo::OperatingSystemVersion());
+ SetString(kWebAppVersionKey, STRINGIZE(VERSION));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ Os os = Os::CHROMOTING_LINUX;
+ #elif defined(OS_CHROMEOS)
+ Os os = Os::CHROMOTING_CHROMEOS;
diff --git a/devel/electron4/files/patch-remoting_client_display_sys__opengl.h b/devel/electron4/files/patch-remoting_client_display_sys__opengl.h
new file mode 100644
index 000000000000..67ed67bfe772
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_client_display_sys__opengl.h
@@ -0,0 +1,11 @@
+--- remoting/client/display/sys_opengl.h.orig 2019-03-15 06:25:51 UTC
++++ remoting/client/display/sys_opengl.h
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_IOS)
+ #include <OpenGLES/ES3/gl.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_GLEXT_PROTOTYPES
+ #include <GL/gl.h>
+ #include <GL/glext.h>
diff --git a/devel/electron4/files/patch-remoting_host_evaluate__capability.cc b/devel/electron4/files/patch-remoting_host_evaluate__capability.cc
new file mode 100644
index 000000000000..c453e132d9cb
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_evaluate__capability.cc
@@ -0,0 +1,11 @@
+--- remoting/host/evaluate_capability.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/evaluate_capability.cc
+@@ -49,7 +49,7 @@ base::FilePath BuildHostBinaryPath() {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (path.BaseName().value() ==
+ FILE_PATH_LITERAL("chrome-remote-desktop-host")) {
+ return path;
diff --git a/devel/electron4/files/patch-remoting_host_host__attributes.cc b/devel/electron4/files/patch-remoting_host_host__attributes.cc
new file mode 100644
index 000000000000..7be44d3feae4
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_host__attributes.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_attributes.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/host_attributes.cc
+@@ -122,7 +122,7 @@ std::string GetHostAttributes() {
+ media::InitializeMediaFoundation()) {
+ result.push_back("HWEncoder");
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ result.push_back("HWEncoder");
+ #endif
+
diff --git a/devel/electron4/files/patch-remoting_host_host__details.cc b/devel/electron4/files/patch-remoting_host_host__details.cc
new file mode 100644
index 000000000000..afb07dcd85c3
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_host__details.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_details.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/host_details.cc
+@@ -22,7 +22,7 @@ std::string GetHostOperatingSystemName() {
+ return "Mac";
+ #elif defined(OS_CHROMEOS)
+ return "ChromeOS";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return "Linux";
+ #elif defined(OS_ANDROID)
+ return "Android";
diff --git a/devel/electron4/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc b/devel/electron4/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
new file mode 100644
index 000000000000..2527b89ff95a
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
@@ -0,0 +1,20 @@
+--- remoting/host/it2me/it2me_native_messaging_host_main.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/it2me/it2me_native_messaging_host_main.cc
+@@ -25,7 +25,7 @@
+ #include "remoting/host/resources.h"
+ #include "remoting/host/usage_stats_consent.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+
+ #include "base/linux_util.h"
+@@ -102,7 +102,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+
+ remoting::LoadResources("");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Required in order for us to run multiple X11 threads.
+ XInitThreads();
+
diff --git a/devel/electron4/files/patch-remoting_host_me2me__desktop__environment.cc b/devel/electron4/files/patch-remoting_host_me2me__desktop__environment.cc
new file mode 100644
index 000000000000..453bf3b9fdfb
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_me2me__desktop__environment.cc
@@ -0,0 +1,11 @@
+--- remoting/host/me2me_desktop_environment.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/me2me_desktop_environment.cc
+@@ -107,7 +107,7 @@ bool Me2MeDesktopEnvironment::InitializeSecurity(
+
+ // Otherwise, if the session is shared with the local user start monitoring
+ // the local input and create the in-session UI.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool want_user_interface = false;
+ #elif defined(OS_MACOSX)
+ // Don't try to display any UI on top of the system's login screen as this
diff --git a/devel/electron4/files/patch-remoting_host_remoting__me2me__host.cc b/devel/electron4/files/patch-remoting_host_remoting__me2me__host.cc
new file mode 100644
index 000000000000..c6ed900d12d7
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_host_remoting__me2me__host.cc
@@ -0,0 +1,108 @@
+--- remoting/host/remoting_me2me_host.cc.orig 2019-03-15 06:37:31 UTC
++++ remoting/host/remoting_me2me_host.cc
+@@ -114,13 +114,13 @@
+ #include "base/mac/scoped_cftyperef.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+ #include "base/linux_util.h"
+ #include "remoting/host/audio_capturer_linux.h"
+ #include "remoting/host/linux/certificate_watcher.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #include <commctrl.h>
+@@ -155,11 +155,11 @@ const char kApplicationName[] = "chromoting";
+ const char kStdinConfigPath[] = "-";
+ #endif // !defined(REMOTING_MULTI_PROCESS)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The command line switch used to pass name of the pipe to capture audio on
+ // linux.
+ const char kAudioPipeSwitchName[] = "audio-pipe-name";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // The command line switch used to pass name of the unix domain socket used to
+@@ -350,7 +350,7 @@ class HostProcess : public ConfigWatcher::Delegate,
+
+ std::unique_ptr<ChromotingHostContext> context_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Watch for certificate changes and kill the host when changes occur
+ std::unique_ptr<CertificateWatcher> cert_watcher_;
+ #endif
+@@ -564,10 +564,10 @@ bool HostProcess::InitWithCommandLine(const base::Comm
+ enable_window_capture_ = cmd_line->HasSwitch(kWindowIdSwitchName);
+ if (enable_window_capture_) {
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ LOG(WARNING) << "Window capturing is not fully supported on Linux or "
+ "Windows.";
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // uint32_t is large enough to hold window IDs on all platforms.
+ uint32_t window_id;
+@@ -760,7 +760,7 @@ void HostProcess::CreateAuthenticatorFactory() {
+ DCHECK(third_party_auth_config_.token_url.is_valid());
+ DCHECK(third_party_auth_config_.token_validation_url.is_valid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!cert_watcher_) {
+ cert_watcher_.reset(new CertificateWatcher(
+ base::Bind(&HostProcess::ShutdownHost, this, kSuccessExitCode),
+@@ -846,7 +846,7 @@ void HostProcess::StartOnUiThread() {
+ base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)),
+ base::Bind(&HostProcess::OnPolicyError, base::Unretained(this)));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If an audio pipe is specific on the command-line then initialize
+ // AudioCapturerLinux to capture from it.
+ base::FilePath audio_pipe_name = base::CommandLine::ForCurrentProcess()->
+@@ -855,7 +855,7 @@ void HostProcess::StartOnUiThread() {
+ remoting::AudioCapturerLinux::InitializePipeReader(
+ context_->audio_task_runner(), audio_pipe_name);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ base::FilePath security_key_socket_name =
+@@ -913,7 +913,7 @@ void HostProcess::ShutdownOnUiThread() {
+ // It is now safe for the HostProcess to be deleted.
+ self_ = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Cause the global AudioPipeReader to be freed, otherwise the audio
+ // thread will remain in-use and prevent the process from exiting.
+ // TODO(wez): DesktopEnvironmentFactory should own the pipe reader.
+@@ -1545,7 +1545,7 @@ void HostProcess::StartHost() {
+ host_->AddExtension(std::make_unique<TestEchoExtension>());
+
+ // TODO(simonmorris): Get the maximum session duration from a policy.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20));
+ #endif
+
+@@ -1704,7 +1704,7 @@ void HostProcess::OnCrash(const std::string& function_
+ int HostProcessMain() {
+ HOST_LOG << "Starting host process: version " << STRINGIZE(VERSION);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ kReportOfflineReasonSwitchName)) {
+ // Required in order for us to run multiple X11 threads.
diff --git a/devel/electron4/files/patch-remoting_webapp_base_js_platform.js b/devel/electron4/files/patch-remoting_webapp_base_js_platform.js
new file mode 100644
index 000000000000..ea446671b504
--- /dev/null
+++ b/devel/electron4/files/patch-remoting_webapp_base_js_platform.js
@@ -0,0 +1,17 @@
+--- remoting/webapp/base/js/platform.js.orig 2019-03-15 06:25:51 UTC
++++ remoting/webapp/base/js/platform.js
+@@ -107,6 +107,14 @@ remoting.getSystemInfo = function() {
+ return result;
+ }
+
++ match = new RegExp('FreeBSD ([a-zA-Z0-9_]*)').exec(userAgent);
++ if (match && (match.length >= 2)) {
++ result.osName = remoting.Os.LINUX;
++ result.osVersion = '';
++ result.cpu = match[1];
++ return result;
++ }
++
+ match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(userAgent);
+ if (match && (match.length >= 3)) {
+ result.osName = remoting.Os.MAC;
diff --git a/devel/electron4/files/patch-sandbox_features.gni b/devel/electron4/files/patch-sandbox_features.gni
new file mode 100644
index 000000000000..eca97e586a70
--- /dev/null
+++ b/devel/electron4/files/patch-sandbox_features.gni
@@ -0,0 +1,10 @@
+--- sandbox/features.gni.orig 2019-03-15 06:25:51 UTC
++++ sandbox/features.gni
+@@ -12,6 +12,6 @@ use_seccomp_bpf =
+ (is_linux || is_android) &&
+ (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el")
++ current_cpu == "mips64el") && !is_bsd
+
+ use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
diff --git a/devel/electron4/files/patch-sandbox_linux_BUILD.gn b/devel/electron4/files/patch-sandbox_linux_BUILD.gn
new file mode 100644
index 000000000000..ab1ebd1b77aa
--- /dev/null
+++ b/devel/electron4/files/patch-sandbox_linux_BUILD.gn
@@ -0,0 +1,47 @@
+--- sandbox/linux/BUILD.gn.orig 2019-03-15 06:37:31 UTC
++++ sandbox/linux/BUILD.gn
+@@ -12,12 +12,12 @@ if (is_android) {
+ }
+
+ declare_args() {
+- compile_suid_client = is_linux
++ compile_suid_client = is_linux && !is_bsd
+
+- compile_credentials = is_linux
++ compile_credentials = is_linux && !is_bsd
+
+ # On Android, use plain GTest.
+- use_base_test_suite = is_linux
++ use_base_test_suite = is_linux && !is_bsd
+ }
+
+ if (is_nacl_nonsfi) {
+@@ -398,7 +398,7 @@ component("sandbox_services") {
+ public_deps += [ ":sandbox_services_headers" ]
+ }
+
+- if (is_nacl_nonsfi) {
++ if (is_nacl_nonsfi || is_bsd) {
+ cflags = [ "-fgnu-inline-asm" ]
+
+ sources -= [
+@@ -406,6 +406,8 @@ component("sandbox_services") {
+ "services/init_process_reaper.h",
+ "services/scoped_process.cc",
+ "services/scoped_process.h",
++ "services/syscall_wrappers.cc",
++ "services/syscall_wrappers.h",
+ "services/yama.cc",
+ "services/yama.h",
+ "syscall_broker/broker_channel.cc",
+@@ -424,6 +426,10 @@ component("sandbox_services") {
+ "syscall_broker/broker_process.h",
+ "syscall_broker/broker_simple_message.cc",
+ "syscall_broker/broker_simple_message.h",
++ ]
++ sources += [
++ "services/libc_interceptor.cc",
++ "services/libc_interceptor.h",
+ ]
+ } else if (!is_android) {
+ sources += [
diff --git a/devel/electron4/files/patch-sandbox_linux_services_init__process__reaper.cc b/devel/electron4/files/patch-sandbox_linux_services_init__process__reaper.cc
new file mode 100644
index 000000000000..c225a30573d7
--- /dev/null
+++ b/devel/electron4/files/patch-sandbox_linux_services_init__process__reaper.cc
@@ -0,0 +1,15 @@
+--- sandbox/linux/services/init_process_reaper.cc.orig 2019-03-15 06:25:51 UTC
++++ sandbox/linux/services/init_process_reaper.cc
+@@ -1,6 +1,7 @@
+ // Copyright 2013 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "sandbox/linux/services/init_process_reaper.h"
+
+@@ -100,3 +101,4 @@ bool CreateInitProcessReaper(base::OnceClosure post_fo
+ }
+
+ } // namespace sandbox.
++#endif
diff --git a/devel/electron4/files/patch-sandbox_linux_services_libc__interceptor.cc b/devel/electron4/files/patch-sandbox_linux_services_libc__interceptor.cc
new file mode 100644
index 000000000000..b915db8f9a6f
--- /dev/null
+++ b/devel/electron4/files/patch-sandbox_linux_services_libc__interceptor.cc
@@ -0,0 +1,21 @@
+--- sandbox/linux/services/libc_interceptor.cc.orig 2019-03-15 06:25:51 UTC
++++ sandbox/linux/services/libc_interceptor.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <time.h>
+@@ -94,7 +96,7 @@ bool ReadTimeStruct(base::PickleIterator* iter,
+ } else {
+ base::AutoLock lock(g_timezones_lock.Get());
+ auto ret_pair = g_timezones.Get().insert(timezone);
+- output->tm_zone = ret_pair.first->c_str();
++ output->tm_zone = (char *)ret_pair.first->c_str();
+ }
+
+ return true;
diff --git a/devel/electron4/files/patch-services_catalog_public_cpp_manifest__parsing__util.cc b/devel/electron4/files/patch-services_catalog_public_cpp_manifest__parsing__util.cc
new file mode 100644
index 000000000000..6ee7f592d83e
--- /dev/null
+++ b/devel/electron4/files/patch-services_catalog_public_cpp_manifest__parsing__util.cc
@@ -0,0 +1,21 @@
+--- services/catalog/public/cpp/manifest_parsing_util.cc.orig 2019-03-15 06:37:32 UTC
++++ services/catalog/public/cpp/manifest_parsing_util.cc
+@@ -17,7 +17,8 @@ bool IsValidPlatformName(const std::string& name) {
+ name == Store::kRequiredFilesKey_PlatformValue_Linux ||
+ name == Store::kRequiredFilesKey_PlatformValue_MacOSX ||
+ name == Store::kRequiredFilesKey_PlatformValue_Android ||
+- name == Store::kRequiredFilesKey_PlatformValue_Fuchsia;
++ name == Store::kRequiredFilesKey_PlatformValue_Fuchsia ||
++ name == Store::kRequiredFilesKey_PlatformValue_FreeBSD;
+ }
+
+ bool IsCurrentPlatform(const std::string& name) {
+@@ -31,6 +32,8 @@ bool IsCurrentPlatform(const std::string& name) {
+ return name == Store::kRequiredFilesKey_PlatformValue_Android;
+ #elif defined(OS_FUCHSIA)
+ return name == Store::kRequiredFilesKey_PlatformValue_Fuchsia;
++#elif defined(OS_BSD)
++ return name == Store::kRequiredFilesKey_PlatformValue_FreeBSD;
+ #else
+ #error This architecture is not supported.
+ #endif
diff --git a/devel/electron4/files/patch-services_catalog_store.cc b/devel/electron4/files/patch-services_catalog_store.cc
new file mode 100644
index 000000000000..72eb735ee0f9
--- /dev/null
+++ b/devel/electron4/files/patch-services_catalog_store.cc
@@ -0,0 +1,10 @@
+--- services/catalog/store.cc.orig 2019-03-15 06:37:32 UTC
++++ services/catalog/store.cc
+@@ -36,5 +36,7 @@ const char Store::kRequiredFilesKey_PlatformValue_MacO
+ const char Store::kRequiredFilesKey_PlatformValue_Android[] = "android";
+ // static
+ const char Store::kRequiredFilesKey_PlatformValue_Fuchsia[] = "fuchsia";
++// static
++const char Store::kRequiredFilesKey_PlatformValue_FreeBSD[] = "freebsd";
+
+ } // namespace catalog
diff --git a/devel/electron4/files/patch-services_catalog_store.h b/devel/electron4/files/patch-services_catalog_store.h
new file mode 100644
index 000000000000..3a9db1c2e069
--- /dev/null
+++ b/devel/electron4/files/patch-services_catalog_store.h
@@ -0,0 +1,10 @@
+--- services/catalog/store.h.orig 2019-03-15 06:37:32 UTC
++++ services/catalog/store.h
+@@ -36,6 +36,7 @@ class Store {
+ static const char kRequiredFilesKey_PlatformValue_MacOSX[];
+ static const char kRequiredFilesKey_PlatformValue_Android[];
+ static const char kRequiredFilesKey_PlatformValue_Fuchsia[];
++ static const char kRequiredFilesKey_PlatformValue_FreeBSD[];
+ };
+
+ } // namespace catalog
diff --git a/devel/electron4/files/patch-services_content_simple__browser_simple__browser__service.h b/devel/electron4/files/patch-services_content_simple__browser_simple__browser__service.h
new file mode 100644
index 000000000000..a6d5fcca324d
--- /dev/null
+++ b/devel/electron4/files/patch-services_content_simple__browser_simple__browser__service.h
@@ -0,0 +1,20 @@
+--- services/content/simple_browser/simple_browser_service.h.orig 2019-03-15 06:37:32 UTC
++++ services/content/simple_browser/simple_browser_service.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "services/service_manager/public/cpp/service.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #endif
+
+@@ -35,7 +35,7 @@ class COMPONENT_EXPORT(SIMPLE_BROWSER) SimpleBrowserSe
+ // service_manager::Service:
+ void OnStart() override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron4/files/patch-services_device_geolocation_location__arbitrator.cc b/devel/electron4/files/patch-services_device_geolocation_location__arbitrator.cc
new file mode 100644
index 000000000000..71875b09d3d8
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_geolocation_location__arbitrator.cc
@@ -0,0 +1,11 @@
+--- services/device/geolocation/location_arbitrator.cc.orig 2019-03-15 06:37:32 UTC
++++ services/device/geolocation/location_arbitrator.cc
+@@ -164,7 +164,7 @@ LocationArbitrator::NewNetworkLocationProvider(
+ std::unique_ptr<LocationProvider>
+ LocationArbitrator::NewSystemLocationProvider() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ return nullptr;
+ #else
+ return device::NewSystemLocationProvider();
diff --git a/devel/electron4/files/patch-services_device_hid_BUILD.gn b/devel/electron4/files/patch-services_device_hid_BUILD.gn
new file mode 100644
index 000000000000..00b65127952d
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_BUILD.gn
@@ -0,0 +1,22 @@
+--- services/device/hid/BUILD.gn.orig 2019-03-15 06:37:32 UTC
++++ services/device/hid/BUILD.gn
+@@ -51,6 +51,19 @@ source_set("hid") {
+ deps += [ "//device/udev_linux" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "hid_connection_linux.cc",
++ "hid_connection_linux.h",
++ ]
++ sources += [
++ "hid_connection_freebsd.cc",
++ "hid_connection_freebsd.h",
++ "hid_service_freebsd.cc",
++ "hid_service_freebsd.h",
++ ]
++ }
++
+ if (is_chromeos) {
+ deps += [ "//chromeos" ]
+ }
diff --git a/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.cc b/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.cc
new file mode 100644
index 000000000000..42a19950b1b0
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.cc
@@ -0,0 +1,194 @@
+--- services/device/hid/hid_connection_freebsd.cc.orig 2019-03-16 09:17:07 UTC
++++ services/device/hid/hid_connection_freebsd.cc
+@@ -0,0 +1,191 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_connection_freebsd.h"
++
++#include <dev/usb/usbhid.h>
++#include <dev/usb/usb_ioctl.h>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/location.h"
++#include "base/numerics/safe_math.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/strings/stringprintf.h"
++#include "base/task_scheduler/post_task.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_service.h"
++
++namespace device {
++
++class HidConnectionFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::ScopedFD fd,
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::WeakPtr<HidConnectionFreeBSD> connection)
++ : fd_(std::move(fd)),
++ connection_(connection),
++ origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++ // Report buffers must always have room for the report ID.
++ report_buffer_size_ = device_info->max_input_report_size() + 1;
++ has_report_id_ = device_info->has_report_id();
++ }
++
++ ~BlockingTaskHelper() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
++
++ // Starts the FileDescriptorWatcher that reads input events from the device.
++ // Must be called on a thread that has a base::MessageLoopForIO.
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::AssertBlockingAllowed();
++ }
++
++ void Write(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ auto data = buffer->front();
++ size_t size = buffer->size();
++ // if report id is 0, it shouldn't be included
++ if (data[0] == 0) {
++ data++;
++ size--;
++ }
++
++ ssize_t result = HANDLE_EINTR(write(fd_.get(), data, size));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Write failed";
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), false));
++ } else {
++ if (static_cast<size_t>(result) != size)
++ HID_LOG(EVENT) << "Incomplete HID write: " << result << " != " << size;
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ void GetFeatureReport(uint8_t report_id,
++ scoped_refptr<base::RefCountedBytes> buffer,
++ ReadCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_GET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to get feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else if (result == 0) {
++ HID_LOG(EVENT) << "Get feature result too short.";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true, buffer, result));
++ }
++ }
++
++ void SendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ // FreeBSD does not require report id if it's not used
++ if (buffer->front()[0] == 0) {
++ ugd.ugd_data = buffer->front() + 1;
++ ugd.ugd_maxlen = buffer->size() - 1;
++ } else {
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ }
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_SET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to send feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ private:
++ SEQUENCE_CHECKER(sequence_checker_);
++ base::ScopedFD fd_;
++ size_t report_buffer_size_;
++ bool has_report_id_;
++ base::WeakPtr<HidConnectionFreeBSD> connection_;
++ const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidConnectionFreeBSD::HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
++ : HidConnection(device_info),
++ blocking_task_runner_(std::move(blocking_task_runner)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(std::move(fd), device_info,
++ weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&BlockingTaskHelper::Start,
++ base::Unretained(helper_.get())));
++}
++
++HidConnectionFreeBSD::~HidConnectionFreeBSD() {}
++
++void HidConnectionFreeBSD::PlatformClose() {
++ // By closing the device on the blocking task runner 1) the requirement that
++ // base::ScopedFD is destroyed on a thread where I/O is allowed is satisfied
++ // and 2) any tasks posted to this task runner that refer to this file will
++ // complete before it is closed.
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++void HidConnectionFreeBSD::PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::Write, base::Unretained(helper_.get()),
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) {
++ // The first byte of the destination buffer is the report ID being requested
++ // and is overwritten by the feature report.
++ DCHECK_GT(device_info()->max_feature_report_size(), 0u);
++ scoped_refptr<base::RefCountedBytes> buffer(
++ new base::RefCountedBytes(device_info()->max_feature_report_size() + 1));
++ if (report_id != 0)
++ buffer->data()[0] = report_id;
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::GetFeatureReport,
++ base::Unretained(helper_.get()), report_id,
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformSendFeatureReport(
++ scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::SendFeatureReport,
++ base::Unretained(helper_.get()), buffer, std::move(callback)));
++}
++
++} // namespace device
diff --git a/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.h b/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.h
new file mode 100644
index 000000000000..1cd62fcd1372
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_hid__connection__freebsd.h
@@ -0,0 +1,73 @@
+--- services/device/hid/hid_connection_freebsd.h.orig 2019-03-16 09:17:07 UTC
++++ services/device/hid/hid_connection_freebsd.h
+@@ -0,0 +1,70 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++#define DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++
++#include <stddef.h>
++#include <stdint.h>
++
++#include "base/files/scoped_file.h"
++#include "base/macros.h"
++#include "base/memory/ptr_util.h"
++#include "base/memory/ref_counted_memory.h"
++#include "base/memory/weak_ptr.h"
++#include "base/sequence_checker.h"
++#include "services/device/hid/hid_connection.h"
++
++namespace base {
++class SequencedTaskRunner;
++}
++
++namespace net {
++class IOBuffer;
++}
++
++namespace device {
++
++class HidConnectionFreeBSD : public HidConnection {
++ public:
++ HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
++
++ private:
++ friend class base::RefCountedThreadSafe<HidConnectionFreeBSD>;
++ class BlockingTaskHelper;
++
++ ~HidConnectionFreeBSD() override;
++
++ // HidConnection implementation.
++ void PlatformClose() override;
++ void PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) override;
++ void PlatformSendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void ProcessInputReport(scoped_refptr<base::RefCountedBytes> buffer,
++ size_t size);
++
++ // |helper_| lives on the sequence to which |blocking_task_runner_| posts
++ // tasks so all calls must be posted there including this object's
++ // destruction.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ base::WeakPtrFactory<HidConnectionFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidConnectionFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_CONNECTION_FREEBSD_H_
diff --git a/devel/electron4/files/patch-services_device_hid_hid__service.cc b/devel/electron4/files/patch-services_device_hid_hid__service.cc
new file mode 100644
index 000000000000..9a2e71d86fc8
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_hid__service.cc
@@ -0,0 +1,20 @@
+--- services/device/hid/hid_service.cc.orig 2019-03-15 06:37:32 UTC
++++ services/device/hid/hid_service.cc
+@@ -16,6 +16,8 @@
+
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ #include "services/device/hid/hid_service_linux.h"
++#elif defined(OS_BSD)
++#include "services/device/hid/hid_service_freebsd.h"
+ #elif defined(OS_MACOSX)
+ #include "services/device/hid/hid_service_mac.h"
+ #elif defined(OS_WIN)
+@@ -36,6 +38,8 @@ constexpr base::TaskTraits HidService::kBlockingTaskTr
+ std::unique_ptr<HidService> HidService::Create() {
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ return base::WrapUnique(new HidServiceLinux());
++#elif defined(OS_BSD)
++ return base::WrapUnique(new HidServiceFreeBSD());
+ #elif defined(OS_MACOSX)
+ return base::WrapUnique(new HidServiceMac());
+ #elif defined(OS_WIN)
diff --git a/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.cc b/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.cc
new file mode 100644
index 000000000000..263ca29adb81
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.cc
@@ -0,0 +1,374 @@
+--- services/device/hid/hid_service_freebsd.cc.orig 2019-03-16 09:17:07 UTC
++++ services/device/hid/hid_service_freebsd.cc
+@@ -0,0 +1,371 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_service_freebsd.h"
++
++#include <dev/usb/usb_ioctl.h>
++#include <stdint.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <set>
++#include <string>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/files/file_enumerator.h"
++#include "base/location.h"
++#include "base/logging.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/stl_util.h"
++#include "base/strings/pattern.h"
++#include "base/strings/stringprintf.h"
++#include "base/strings/sys_string_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/string_split.h"
++#include "base/task_scheduler/post_task.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_connection_freebsd.h"
++
++const int kMaxPermissionChecks = 5;
++
++namespace device {
++
++struct HidServiceFreeBSD::ConnectParams {
++ ConnectParams(scoped_refptr<HidDeviceInfo> device_info,
++ const ConnectCallback& callback)
++ : device_info(std::move(device_info)),
++ callback(callback),
++ task_runner(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)) {}
++ ~ConnectParams() {}
++
++ scoped_refptr<HidDeviceInfo> device_info;
++ ConnectCallback callback;
++ scoped_refptr<base::SequencedTaskRunner> task_runner;
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
++ base::ScopedFD fd;
++};
++
++class HidServiceFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::WeakPtr<HidServiceFreeBSD> service)
++ : service_(std::move(service)),
++ task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++
++ timer_.reset(new base::RepeatingTimer());
++ devd_buffer_ = new net::IOBufferWithSize(1024);
++ }
++
++ ~BlockingTaskHelper() {
++ }
++
++ void Start() {
++ base::AssertBlockingAllowed();
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const base::FilePath kDevRoot("/dev");
++ const std::string kUHIDPattern("/dev/uhid*");
++
++ base::FileEnumerator enumerator(kDevRoot, false, base::FileEnumerator::FILES);
++ do {
++ const base::FilePath next_device_path(enumerator.Next());
++ const std::string next_device = next_device_path.value();
++ if (next_device.empty())
++ break;
++
++ if (base::MatchPattern(next_device, kUHIDPattern))
++ OnDeviceAdded(next_device.substr(5));
++ } while (true);
++
++ SetupDevdMonitor();
++
++ task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::FirstEnumerationComplete, service_));
++ }
++
++ bool HaveReadWritePermissions(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ base::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid())
++ return false;
++
++ return true;
++ }
++
++ void OnDeviceAdded(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ uint16_t vendor_id = 0xffff;
++ uint16_t product_id = 0xffff;
++ std::string product_name = "";
++ std::string serial_number = "";
++
++ std::vector<uint8_t> report_descriptor;
++
++ base::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(ERROR) << "Failed to open '" << device_node
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ return;
++ }
++
++ base::ScopedFD fd;
++ fd.reset(device_file.TakePlatformFile());
++
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_data = NULL;
++ ugd.ugd_maxlen = 0xffff;
++ int result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor size";
++ return;
++ }
++
++ report_descriptor.resize(ugd.ugd_actlen);
++
++ ugd.ugd_data = report_descriptor.data();
++ ugd.ugd_maxlen = ugd.ugd_actlen;
++ result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor";
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo(
++ device_id, vendor_id, product_id, product_name, serial_number,
++ device::mojom::HidBusType::kHIDBusTypeUSB,
++ report_descriptor, device_node));
++
++ task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceFreeBSD::AddDevice,
++ service_, device_info));
++ }
++
++ void OnDeviceRemoved(std::string device_id) {
++ task_runner_->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::RemoveDevice, service_,
++ device_id));
++ }
++
++ private:
++
++ void CheckPendingPermissionChange() {
++ base::AssertBlockingAllowed();
++ std::map<std::string, int>::iterator it;
++ for (it = permissions_checks_attempts_.begin(); it != permissions_checks_attempts_.end();) {
++ std::string device_name = it->first;
++ bool keep = true;
++ if (HaveReadWritePermissions(device_name)) {
++ OnDeviceAdded(device_name);
++ keep = false;
++ }
++ else if (it->second-- <= 0) {
++ HID_LOG(ERROR) << "Still don't have write permissions to '" << device_name
++ << "' after " << kMaxPermissionChecks << " attempts";
++ keep = false;
++ }
++
++ if (keep)
++ ++it;
++ else
++ permissions_checks_attempts_.erase(it++);
++ }
++
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++
++ void SetupDevdMonitor() {
++ base::AssertBlockingAllowed();
++
++ int devd_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
++ if (devd_fd < 0)
++ return;
++
++ struct sockaddr_un sa;
++
++ sa.sun_family = AF_UNIX;
++ strlcpy(sa.sun_path, "/var/run/devd.seqpacket.pipe", sizeof(sa.sun_path));
++ if (connect(devd_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
++ close(devd_fd);
++ return;
++ }
++
++ devd_fd_.reset(devd_fd);
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ devd_fd_.get(), base::Bind(&BlockingTaskHelper::OnDevdMessageCanBeRead,
++ base::Unretained(this)));
++ }
++
++ void OnDevdMessageCanBeRead() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ ssize_t bytes_read = HANDLE_EINTR(recv(devd_fd_.get(), devd_buffer_->data(),
++ devd_buffer_->size() - 1, MSG_WAITALL));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_LOG(ERROR) << "Read failed";
++ file_watcher_.reset();
++ }
++ return;
++ }
++
++ devd_buffer_->data()[bytes_read] = 0;
++ char *data = devd_buffer_->data();
++ // It may take some time for devd to change permissions
++ // on /dev/uhidX node. So do not fail immediately if
++ // open fail. Retry each second for kMaxPermissionChecks
++ // times before giving up entirely
++ if (base::StartsWith(data, "+uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '+'
++ if (HaveReadWritePermissions(device_name))
++ OnDeviceAdded(parts[0].substr(1));
++ else {
++ // Do not re-add to checks
++ if (permissions_checks_attempts_.find(device_name) == permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.insert(std::pair<std::string, int>(device_name, kMaxPermissionChecks));
++ timer_->Start(FROM_HERE, base::TimeDelta::FromSeconds(1),
++ this, &BlockingTaskHelper::CheckPendingPermissionChange);
++ }
++ }
++ }
++ }
++
++ if (base::StartsWith(data, "-uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '-'
++ auto it = permissions_checks_attempts_.find(device_name);
++ if (it != permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.erase(it);
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++ OnDeviceRemoved(parts[0].substr(1));
++ }
++ }
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ // This weak pointer is only valid when checked on this task runner.
++ base::WeakPtr<HidServiceFreeBSD> service_;
++ scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++ std::unique_ptr<base::RepeatingTimer> timer_;
++ base::ScopedFD devd_fd_;
++ scoped_refptr<net::IOBufferWithSize> devd_buffer_;
++ std::map<std::string, int> permissions_checks_attempts_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidServiceFreeBSD::HidServiceFreeBSD()
++ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner_(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&BlockingTaskHelper::Start, base::Unretained(helper_.get())));
++}
++
++HidServiceFreeBSD::~HidServiceFreeBSD() {
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++base::WeakPtr<HidService> HidServiceFreeBSD::GetWeakPtr() {
++ return weak_factory_.GetWeakPtr();
++}
++
++// static
++void HidServiceFreeBSD::OpenOnBlockingThread(
++ std::unique_ptr<ConnectParams> params) {
++ base::AssertBlockingAllowed();
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ base::FilePath device_path(params->device_info->device_node());
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(EVENT) << "Failed to open '" << params->device_info->device_node()
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ task_runner->PostTask(FROM_HERE, base::Bind(params->callback, nullptr));
++ return;
++ }
++ params->fd.reset(device_file.TakePlatformFile());
++ FinishOpen(std::move(params));
++}
++
++void HidServiceFreeBSD::Connect(const std::string& device_guid,
++ const ConnectCallback& callback) {
++ DCHECK(thread_checker_.CalledOnValidThread());
++
++ const auto& map_entry = devices().find(device_guid);
++ if (map_entry == devices().end()) {
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, base::Bind(callback, nullptr));
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info = map_entry->second;
++
++ auto params = std::make_unique<ConnectParams>(device_info, callback);
++
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
++ params->blocking_task_runner;
++ blocking_task_runner->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::OpenOnBlockingThread,
++ base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::FinishOpen(std::unique_ptr<ConnectParams> params) {
++ base::AssertBlockingAllowed();
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ task_runner->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::CreateConnection, base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::CreateConnection(std::unique_ptr<ConnectParams> params) {
++ DCHECK(params->fd.is_valid());
++ params->callback.Run(base::MakeRefCounted<HidConnectionFreeBSD>(
++ std::move(params->device_info), std::move(params->fd),
++ std::move(params->blocking_task_runner)));
++}
++
++} // namespace device
diff --git a/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.h b/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.h
new file mode 100644
index 000000000000..e0571be765e7
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_hid_hid__service__freebsd.h
@@ -0,0 +1,51 @@
+--- services/device/hid/hid_service_freebsd.h.orig 2019-03-16 09:17:07 UTC
++++ services/device/hid/hid_service_freebsd.h
+@@ -0,0 +1,48 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_SERVICE_FREEBSD_H_
++#define DEVICE_HID_HID_SERVICE_FREEBSD_H_
++
++#include <string>
++
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/memory/weak_ptr.h"
++#include "base/timer/timer.h"
++#include "services/device/hid/hid_service.h"
++#include "net/base/io_buffer.h"
++
++namespace device {
++
++class HidServiceFreeBSD : public HidService {
++ public:
++ HidServiceFreeBSD();
++ ~HidServiceFreeBSD() override;
++
++ void Connect(const std::string& device_guid,
++ const ConnectCallback& connect) override;
++ base::WeakPtr<HidService> GetWeakPtr() override;
++
++ private:
++ struct ConnectParams;
++ class BlockingTaskHelper;
++
++ static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
++ static void FinishOpen(std::unique_ptr<ConnectParams> params);
++ static void CreateConnection(std::unique_ptr<ConnectParams> params);
++
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ // |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
++ // a weak reference back to the service that owns it.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++ base::WeakPtrFactory<HidServiceFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidServiceFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_SERVICE_FREEBSD_H_
diff --git a/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc b/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
new file mode 100644
index 000000000000..55aeb6029ea4
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
@@ -0,0 +1,11 @@
+--- services/device/time_zone_monitor/time_zone_monitor.cc.orig 2019-03-15 06:37:32 UTC
++++ services/device/time_zone_monitor/time_zone_monitor.cc
+@@ -41,7 +41,7 @@ void TimeZoneMonitor::NotifyClients() {
+ #else
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::detectHostTimeZone());
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // We get here multiple times on Linux per a single tz change, but
+ // want to update the ICU default zone and notify renderer only once.
+ std::unique_ptr<icu::TimeZone> current_zone(icu::TimeZone::createDefault());
diff --git a/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc b/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
new file mode 100644
index 000000000000..601d3deda732
--- /dev/null
+++ b/devel/electron4/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
@@ -0,0 +1,14 @@
+--- services/device/time_zone_monitor/time_zone_monitor_linux.cc.orig 2019-03-15 06:37:32 UTC
++++ services/device/time_zone_monitor/time_zone_monitor_linux.cc
+@@ -89,7 +89,11 @@ class TimeZoneMonitorLinuxImpl
+ // false positives are harmless, assuming the false positive rate is
+ // reasonable.
+ const char* const kFilesToWatch[] = {
++#if defined(OS_BSD)
++ "/etc/localtime",
++#else
+ "/etc/localtime", "/etc/timezone", "/etc/TZ",
++#endif
+ };
+
+ for (size_t index = 0; index < arraysize(kFilesToWatch); ++index) {
diff --git a/devel/electron4/files/patch-services_network_BUILD.gn b/devel/electron4/files/patch-services_network_BUILD.gn
new file mode 100644
index 000000000000..1913237a8c1f
--- /dev/null
+++ b/devel/electron4/files/patch-services_network_BUILD.gn
@@ -0,0 +1,10 @@
+--- services/network/BUILD.gn.orig 2019-03-15 06:37:32 UTC
++++ services/network/BUILD.gn
+@@ -160,7 +160,6 @@ component("network_service") {
+
+ if (is_linux) {
+ deps += [
+- "//sandbox/linux:sandbox_services",
+ "//services/service_manager/sandbox:sandbox",
+ ]
+ }
diff --git a/devel/electron4/files/patch-services_network_network__context.cc b/devel/electron4/files/patch-services_network_network__context.cc
new file mode 100644
index 000000000000..3e1ff9add3cc
--- /dev/null
+++ b/devel/electron4/files/patch-services_network_network__context.cc
@@ -0,0 +1,38 @@
+--- services/network/network_context.cc.orig 2019-03-16 09:15:20 UTC
++++ services/network/network_context.cc
+@@ -103,7 +103,7 @@
+ #endif // defined(USE_NSS_CERTS)
+
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ #include "net/cert/cert_net_fetcher.h"
+ #include "net/cert_net/cert_net_fetcher_impl.h"
+ #endif
+@@ -380,7 +380,7 @@ NetworkContext::~NetworkContext() {
+ #endif
+
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ net::ShutdownGlobalCertNetFetcher();
+ #endif
+ }
+@@ -833,7 +833,7 @@ URLRequestContextOwner NetworkContext::ApplyContextPar
+
+ net::CookieCryptoDelegate* crypto_delegate = nullptr;
+ if (params_->enable_encrypted_cookies) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
+ DCHECK(network_service_->os_crypt_config_set())
+ << "NetworkService::SetCryptConfig must be called before creating a "
+ "NetworkContext with encrypted cookies.";
+@@ -1105,7 +1105,7 @@ URLRequestContextOwner NetworkContext::ApplyContextPar
+ net::SetURLRequestContextForNSSHttpIO(result.url_request_context.get());
+ #endif
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ net::SetGlobalCertNetFetcher(
+ net::CreateCertNetFetcher(result.url_request_context.get()));
+ #endif
diff --git a/devel/electron4/files/patch-services_network_network__sandbox__hook__linux.cc b/devel/electron4/files/patch-services_network_network__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..1c1ca125bbdc
--- /dev/null
+++ b/devel/electron4/files/patch-services_network_network__sandbox__hook__linux.cc
@@ -0,0 +1,18 @@
+--- services/network/network_sandbox_hook_linux.cc.orig 2019-03-15 06:37:32 UTC
++++ services/network/network_sandbox_hook_linux.cc
+@@ -14,6 +14,7 @@ using sandbox::syscall_broker::MakeBrokerCommandSet;
+ namespace network {
+
+ bool NetworkPreSandboxHook(service_manager::SandboxLinux::Options options) {
++#if !defined(OS_BSD)
+ auto* instance = service_manager::SandboxLinux::GetInstance();
+
+ // TODO(tsepez): remove universal permission under filesytem root.
+@@ -32,6 +33,7 @@ bool NetworkPreSandboxHook(service_manager::SandboxLin
+ service_manager::SandboxLinux::PreSandboxHook(), options);
+
+ instance->EngageNamespaceSandbox(false /* from_zygote */);
++#endif
+ return true;
+ }
+
diff --git a/devel/electron4/files/patch-services_network_network__service.cc b/devel/electron4/files/patch-services_network_network__service.cc
new file mode 100644
index 000000000000..d0336da449ca
--- /dev/null
+++ b/devel/electron4/files/patch-services_network_network__service.cc
@@ -0,0 +1,20 @@
+--- services/network/network_service.cc.orig 2019-04-06 12:09:25 UTC
++++ services/network/network_service.cc
+@@ -39,7 +39,7 @@
+ #include "third_party/boringssl/src/include/openssl/cpu.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ #include "components/os_crypt/key_storage_config_linux.h"
+ #include "components/os_crypt/os_crypt.h"
+ #endif
+@@ -379,7 +379,7 @@ void NetworkService::UpdateSignedTreeHead(const net::c
+ sth_distributor_->NewSTHObserved(sth);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void NetworkService::SetCryptConfig(mojom::CryptConfigPtr crypt_config) {
+ #if !defined(IS_CHROMECAST)
+ DCHECK(!os_crypt_config_set_);
diff --git a/devel/electron4/files/patch-services_network_network__service.h b/devel/electron4/files/patch-services_network_network__service.h
new file mode 100644
index 000000000000..e7a89927de5d
--- /dev/null
+++ b/devel/electron4/files/patch-services_network_network__service.h
@@ -0,0 +1,11 @@
+--- services/network/network_service.h.orig 2019-03-16 09:15:20 UTC
++++ services/network/network_service.h
+@@ -138,7 +138,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
+ void GetTotalNetworkUsages(
+ mojom::NetworkService::GetTotalNetworkUsagesCallback callback) override;
+ void UpdateSignedTreeHead(const net::ct::SignedTreeHead& sth) override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
+ #endif
+
diff --git a/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h b/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
new file mode 100644
index 000000000000..08fdffc56724
--- /dev/null
+++ b/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
@@ -0,0 +1,11 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h.orig 2019-03-15 06:37:32 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h
+@@ -36,7 +36,7 @@ class SERVICES_RESOURCE_COORDINATOR_PUBLIC_CPP_EXPORT
+ static std::vector<mojom::VmRegionPtr> GetProcessModules(base::ProcessId);
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ static void SetProcSmapsForTesting(FILE*);
+ #endif // defined(OS_LINUX)
+ };
diff --git a/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc b/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
new file mode 100644
index 000000000000..25b030d1bc5f
--- /dev/null
+++ b/devel/electron4/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
@@ -0,0 +1,40 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc.orig 2019-03-15 06:37:32 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc
+@@ -16,8 +16,10 @@
+ #include "build/build_config.h"
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
+
++#if !defined(OS_BSD)
+ // Symbol with virtual address of the start of ELF header of the current binary.
+ extern char __ehdr_start;
++#endif
+
+ namespace memory_instrumentation {
+
+@@ -101,7 +103,7 @@ bool ParseSmapsHeader(const char* header_line, VmRegio
+ // Build ID is needed to symbolize heap profiles, and is generated only on
+ // official builds. Build ID is only added for the current library (chrome)
+ // since it is racy to read other libraries which can be unmapped any time.
+-#if defined(OFFICIAL_BUILD)
++#if defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+ uintptr_t addr = reinterpret_cast<uintptr_t>(&ParseSmapsHeader);
+ if (addr >= region->start_address && addr < end_addr) {
+ base::Optional<std::string> buildid =
+@@ -196,6 +198,9 @@ void OSMetrics::SetProcSmapsForTesting(FILE* f) {
+ // static
+ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ mojom::RawOSMemDump* dump) {
++#if defined(OS_BSD)
++ return false;
++#else
+ base::ScopedFD autoclose = OpenStatm(pid);
+ int statm_fd = autoclose.get();
+
+@@ -221,6 +226,7 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ dump->resident_set_kb = process_metrics->GetResidentSetSize() / 1024;
+
+ return true;
++#endif
+ }
+
+ // static
diff --git a/devel/electron4/files/patch-services_service__manager_embedder_main.cc b/devel/electron4/files/patch-services_service__manager_embedder_main.cc
new file mode 100644
index 000000000000..b4f14c9b8078
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_embedder_main.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/embedder/main.cc.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/embedder/main.cc
+@@ -331,7 +331,7 @@ int Main(const MainParams& params) {
+ #endif
+ base::EnableTerminationOnOutOfMemory();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The various desktop environments set this environment variable that
+ // allows the dbus client library to connect directly to the bus. When this
+ // variable is not set (test environments like xvfb-run), the dbus client
diff --git a/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.cc b/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.cc
new file mode 100644
index 000000000000..6f52967eb2c1
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.cc
@@ -0,0 +1,19 @@
+--- services/service_manager/embedder/set_process_title_linux.cc.orig 2019-03-15 06:25:51 UTC
++++ services/service_manager/embedder/set_process_title_linux.cc
+@@ -49,6 +49,8 @@
+ extern char** environ;
+
+ static char** g_main_argv = NULL;
++
++#if !defined(OS_FREEBSD)
+ static char* g_orig_argv0 = NULL;
+
+ void setproctitle(const char* fmt, ...) {
+@@ -101,6 +103,7 @@ void setproctitle(const char* fmt, ...) {
+ va_end(ap);
+ g_main_argv[1] = NULL;
+ }
++#endif
+
+ // A version of this built into glibc would not need this function, since
+ // it could stash the argv pointer in __libc_start_main(). But we need it.
diff --git a/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.h b/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.h
new file mode 100644
index 000000000000..04f03d041f15
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_embedder_set__process__title__linux.h
@@ -0,0 +1,20 @@
+--- services/service_manager/embedder/set_process_title_linux.h.orig 2019-03-15 06:25:51 UTC
++++ services/service_manager/embedder/set_process_title_linux.h
+@@ -5,6 +5,9 @@
+ #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+ #define SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+
++#include "build/build_config.h"
++
++#if !defined(OS_FREEBSD)
+ // Set the process title that will show in "ps" and similar tools. Takes
+ // printf-style format string and arguments. After calling setproctitle()
+ // the original main() argv[] array should not be used. By default, the
+@@ -14,6 +17,7 @@
+ // This signature and naming is to be compatible with most other Unix
+ // implementations of setproctitle().
+ void setproctitle(const char* fmt, ...);
++#endif
+
+ // Initialize state needed for setproctitle() on Linux. Pass the argv pointer
+ // from main() to setproctitle_init() before calling setproctitle().
diff --git a/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_BUILD.gn b/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_BUILD.gn
new file mode 100644
index 000000000000..3d83a650f700
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/public/cpp/standalone_service/BUILD.gn.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/public/cpp/standalone_service/BUILD.gn
+@@ -25,7 +25,7 @@ source_set("standalone_service") {
+ "//services/service_manager/public/mojom",
+ ]
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [
+ "//sandbox/linux:sandbox",
+ "//sandbox/linux:sandbox_services",
diff --git a/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_standalone__service.cc b/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_standalone__service.cc
new file mode 100644
index 000000000000..30966c441c7e
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_public_cpp_standalone__service_standalone__service.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/public/cpp/standalone_service/standalone_service.cc.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/public/cpp/standalone_service/standalone_service.cc
+@@ -62,6 +62,8 @@ void RunStandaloneService(const StandaloneServiceCallb
+ command_line.GetSwitchValueASCII(switches::kServiceSandboxType)),
+ SandboxLinux::PreSandboxHook(), sandbox_options);
+ }
++#elif defined(OS_BSD)
++ NOTIMPLEMENTED();
+ #endif
+
+ mojo::core::Init();
diff --git a/devel/electron4/files/patch-services_service__manager_runner_host_BUILD.gn b/devel/electron4/files/patch-services_service__manager_runner_host_BUILD.gn
new file mode 100644
index 000000000000..33b6a6ab1695
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_runner_host_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/runner/host/BUILD.gn.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/runner/host/BUILD.gn
+@@ -31,7 +31,7 @@ source_set("lib") {
+ "//mojo/public/cpp/system",
+ ]
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//sandbox/linux:sandbox_services" ]
+ }
+
diff --git a/devel/electron4/files/patch-services_service__manager_sandbox_BUILD.gn b/devel/electron4/files/patch-services_service__manager_sandbox_BUILD.gn
new file mode 100644
index 000000000000..a98944b9589a
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_sandbox_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/BUILD.gn.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/sandbox/BUILD.gn
+@@ -28,7 +28,7 @@ component("sandbox") {
+ "//base",
+ "//sandbox:common",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/bpf_base_policy_linux.cc",
+ "linux/bpf_base_policy_linux.h",
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_common_zygote__features.gni b/devel/electron4/files/patch-services_service__manager_zygote_common_zygote__features.gni
new file mode 100644
index 000000000000..e1c157dde249
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_common_zygote__features.gni
@@ -0,0 +1,8 @@
+--- services/service_manager/zygote/common/zygote_features.gni.orig 2019-03-15 06:25:51 UTC
++++ services/service_manager/zygote/common/zygote_features.gni
+@@ -2,4 +2,4 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-use_zygote_handle = is_posix && !is_android && !is_mac
++use_zygote_handle = is_posix && !is_android && !is_mac && !is_bsd
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc b/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
new file mode 100644
index 000000000000..ba7c5d496f74
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
@@ -0,0 +1,40 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.cc.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.cc
+@@ -72,6 +72,7 @@ ZygoteHostImpl* ZygoteHostImpl::GetInstance() {
+ }
+
+ void ZygoteHostImpl::Init(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
+ return;
+ }
+@@ -122,6 +123,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& com
+ "you can try using --"
+ << service_manager::switches::kNoSandbox << ".";
+ }
++#endif
+ }
+
+ void ZygoteHostImpl::AddZygotePid(pid_t pid) {
+@@ -146,6 +148,7 @@ pid_t ZygoteHostImpl::LaunchZygote(
+ base::CommandLine* cmd_line,
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds) {
++#if !defined(OS_BSD)
+ int fds[2];
+ CHECK_EQ(0, socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds));
+ CHECK(base::UnixDomainSocket::EnableReceiveProcessId(fds[0]));
+@@ -210,9 +213,12 @@ pid_t ZygoteHostImpl::LaunchZygote(
+
+ AddZygotePid(pid);
+ return pid;
++#else
++ return 0;
++#endif
+ }
+
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ void ZygoteHostImpl::AdjustRendererOOMScore(base::ProcessHandle pid,
+ int score) {
+ // 1) You can't change the oom_score_adj of a non-dumpable process
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h b/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
new file mode 100644
index 000000000000..31944c53348f
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
@@ -0,0 +1,13 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.h.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.h
+@@ -44,8 +44,10 @@ class COMPONENT_EXPORT(SERVICE_MANAGER_ZYGOTE) ZygoteH
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds);
+
++#if !defined(OS_BSD)
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) override;
++#endif
+
+ private:
+ friend struct base::DefaultSingletonTraits<ZygoteHostImpl>;
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_zygote__host__linux.h b/devel/electron4/files/patch-services_service__manager_zygote_zygote__host__linux.h
new file mode 100644
index 000000000000..d97c707f66f3
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_zygote__host__linux.h
@@ -0,0 +1,16 @@
+--- services/service_manager/zygote/zygote_host_linux.h.orig 2019-03-15 06:25:51 UTC
++++ services/service_manager/zygote/zygote_host_linux.h
+@@ -30,11 +30,13 @@ class ZygoteHost {
+ // after the first render has been forked.
+ virtual int GetRendererSandboxStatus() const = 0;
+
++#if !defined(OS_BSD)
+ // Adjust the OOM score of the given renderer's PID. The allowed
+ // range for the score is [0, 1000], where higher values are more
+ // likely to be killed by the OOM killer.
+ virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) = 0;
++#endif
+ };
+
+ } // namespace service_manager
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_zygote__linux.cc b/devel/electron4/files/patch-services_service__manager_zygote_zygote__linux.cc
new file mode 100644
index 000000000000..54925c175d6e
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_zygote__linux.cc
@@ -0,0 +1,15 @@
+--- services/service_manager/zygote/zygote_linux.cc.orig 2019-03-15 06:25:51 UTC
++++ services/service_manager/zygote/zygote_linux.cc
+@@ -1,6 +1,7 @@
+ // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "services/service_manager/zygote/zygote_linux.h"
+
+@@ -664,3 +665,4 @@ bool Zygote::HandleGetSandboxStatus(int fd, base::Pick
+ }
+
+ } // namespace service_manager
++#endif
diff --git a/devel/electron4/files/patch-services_service__manager_zygote_zygote__main__linux.cc b/devel/electron4/files/patch-services_service__manager_zygote_zygote__main__linux.cc
new file mode 100644
index 000000000000..d1ed79c1c352
--- /dev/null
+++ b/devel/electron4/files/patch-services_service__manager_zygote_zygote__main__linux.cc
@@ -0,0 +1,48 @@
+--- services/service_manager/zygote/zygote_main_linux.cc.orig 2019-03-15 06:37:32 UTC
++++ services/service_manager/zygote/zygote_main_linux.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -101,6 +103,7 @@ static bool CreateInitProcessReaper(
+ // created through the setuid sandbox.
+ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox,
+ base::OnceClosure post_fork_parent_callback) {
++#if !defined(OS_BSD)
+ DCHECK(setuid_sandbox);
+ DCHECK(setuid_sandbox->IsSuidSandboxChild());
+
+@@ -133,6 +136,9 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxCli
+
+ CHECK(service_manager::SandboxDebugHandling::SetDumpableStatusAndHandlers());
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ static void DropAllCapabilities(int proc_fd) {
+@@ -178,6 +184,7 @@ static void EnterLayerOneSandbox(service_manager::Sand
+
+ bool ZygoteMain(
+ std::vector<std::unique_ptr<ZygoteForkDelegate>> fork_delegates) {
++#if !defined(OS_BSD)
+ sandbox::SetAmZygoteOrRenderer(true, GetSandboxFD());
+
+ auto* linux_sandbox = service_manager::SandboxLinux::GetInstance();
+@@ -240,6 +247,9 @@ bool ZygoteMain(
+
+ // This function call can return multiple times, once per fork().
+ return zygote.ProcessRequests();
++#else
++ return false;
++#endif
+ }
+
+ } // namespace service_manager
diff --git a/devel/electron4/files/patch-services_tracing_public_cpp_trace__event__agent.cc b/devel/electron4/files/patch-services_tracing_public_cpp_trace__event__agent.cc
new file mode 100644
index 000000000000..6301a89a6a75
--- /dev/null
+++ b/devel/electron4/files/patch-services_tracing_public_cpp_trace__event__agent.cc
@@ -0,0 +1,11 @@
+--- services/tracing/public/cpp/trace_event_agent.cc.orig 2019-03-15 06:37:32 UTC
++++ services/tracing/public/cpp/trace_event_agent.cc
+@@ -23,7 +23,7 @@
+ #include "services/tracing/public/mojom/constants.mojom.h"
+
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
+- defined(OS_WIN)
++ defined(OS_WIN) || defined(OS_BSD)
+ #define PERFETTO_AVAILABLE
+ #include "services/tracing/public/cpp/perfetto/producer_client.h"
+ #endif
diff --git a/devel/electron4/files/patch-services_tracing_tracing__service.h b/devel/electron4/files/patch-services_tracing_tracing__service.h
new file mode 100644
index 000000000000..65df59fb98dc
--- /dev/null
+++ b/devel/electron4/files/patch-services_tracing_tracing__service.h
@@ -0,0 +1,11 @@
+--- services/tracing/tracing_service.h.orig 2019-03-15 06:37:32 UTC
++++ services/tracing/tracing_service.h
+@@ -18,7 +18,7 @@
+ #include "services/tracing/coordinator.h"
+
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
+- defined(OS_WIN)
++ defined(OS_WIN) || defined(OS_BSD)
+ #define PERFETTO_SERVICE_AVAILABLE
+ #endif
+
diff --git a/devel/electron4/files/patch-skia_ext_SkMemory__new__handler.cpp b/devel/electron4/files/patch-skia_ext_SkMemory__new__handler.cpp
new file mode 100644
index 000000000000..335dbf8417c3
--- /dev/null
+++ b/devel/electron4/files/patch-skia_ext_SkMemory__new__handler.cpp
@@ -0,0 +1,20 @@
+--- skia/ext/SkMemory_new_handler.cpp.orig 2019-03-15 06:25:51 UTC
++++ skia/ext/SkMemory_new_handler.cpp
+@@ -77,7 +77,7 @@ static void* malloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = malloc(size);
+ #else
+ // It's the responsibility of the caller to check the return value.
+@@ -97,7 +97,7 @@ static void* calloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = calloc(1, size);
+ #else
+ // It's the responsibility of the caller to check the return value.
diff --git a/devel/electron4/files/patch-third__party_angle_BUILD.gn b/devel/electron4/files/patch-third__party_angle_BUILD.gn
new file mode 100644
index 000000000000..a2105804f1a5
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_BUILD.gn
@@ -0,0 +1,21 @@
+--- third_party/angle/BUILD.gn.orig 2019-03-15 06:40:08 UTC
++++ third_party/angle/BUILD.gn
+@@ -275,6 +275,7 @@ static_library("angle_gpu_info_util") {
+ "X11",
+ "Xi",
+ "Xext",
++ "GL",
+ ]
+ }
+ }
+@@ -842,10 +843,6 @@ foreach(is_shared_library,
+ libs = []
+ if (is_linux) {
+ sources += rebase_path(util_gypi.util_linux_sources, ".", "util")
+- libs += [
+- "rt",
+- "dl",
+- ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
new file mode 100644
index 000000000000..8d9df6d18f7b
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
@@ -0,0 +1,16 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_internal.h.orig 2019-03-15 06:27:28 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_internal.h
+@@ -14,8 +14,13 @@
+ namespace angle
+ {
+
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices);
++
+ // Defined in SystemInfo_libpci when GPU_INFO_USE_LIBPCI is defined.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices);
++#if defined(__FreeBSD__)
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices);
++#endif
+ // Defined in SystemInfo_x11 when GPU_INFO_USE_X11 is defined.
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version);
+
diff --git a/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
new file mode 100644
index 000000000000..58de65fda60a
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
@@ -0,0 +1,90 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp.orig 2019-03-15 06:40:10 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp
+@@ -12,6 +12,11 @@
+ #include <pci/pci.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#include <sys/pciio.h>
++#endif
++
+ #include "common/angleutils.h"
+ #include "common/debug.h"
+
+@@ -82,6 +87,75 @@ struct LibPCI : private angle::NonCopyable
+ };
+
+ } // anonymous namespace
++
++#if defined(__FreeBSD__)
++// Adds an entry per PCI GPU found and fills the device and vendor ID.
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices)
++{
++ int fd;
++ struct pci_conf_io conf;
++ struct pci_conf *matches;
++ uint32_t offset = 0;
++
++ fd = open("/dev/pci", O_RDONLY);
++ if (fd < 0)
++ return false;
++
++ matches = new struct pci_conf[32];
++ conf.generation = 0;
++ do {
++ conf.pat_buf_len = 0;
++ conf.num_patterns = 0;
++ conf.patterns = NULL;
++ conf.match_buf_len = 32 * sizeof(struct pci_conf);
++ conf.num_matches = 32;
++ conf.matches = matches;
++ conf.offset = offset;
++ conf.status = PCI_GETCONF_ERROR;
++ if (ioctl(fd, PCIOCGETCONF, &conf) < 0) {
++ if (errno == ENODEV)
++ break;
++ }
++ /* PCI_GETCONF_LIST_CHANGED would require us to start over. */
++ if (conf.status == PCI_GETCONF_ERROR || conf.status == PCI_GETCONF_LIST_CHANGED) {
++ break;
++ }
++
++ for (unsigned int i = 0; i < conf.num_matches; i++) {
++ uint16_t device_class = (matches[i].pc_class << 8) | matches[i].pc_subclass;
++
++ // Skip non-GPU devices
++ switch (device_class)
++ {
++ case PCI_CLASS_DISPLAY_VGA:
++ case PCI_CLASS_DISPLAY_XGA:
++ case PCI_CLASS_DISPLAY_3D:
++ break;
++ default:
++ continue;
++ }
++
++ // Skip unknown devices
++ if (matches[i].pc_vendor == 0 || matches[i].pc_device == 0) {
++ continue;
++ }
++
++ GPUDeviceInfo info;
++ info.vendorId = matches[i].pc_vendor;
++ info.deviceId = matches[i].pc_device;
++
++ devices->push_back(info);
++ }
++ offset += conf.num_matches;
++ } while (conf.status == PCI_GETCONF_MORE_DEVS);
++
++ delete[] matches;
++
++ close(fd);
++
++ return true;
++}
++#endif
+
+ // Adds an entry per PCI GPU found and fills the device and vendor ID.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices)
diff --git a/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
new file mode 100644
index 000000000000..d44e4f488ca6
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
@@ -0,0 +1,21 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp.orig 2019-03-15 06:27:28 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp
+@@ -71,10 +71,18 @@ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo
+
+ bool GetSystemInfo(SystemInfo *info)
+ {
++#if defined(__FreeBSD__)
++ if (!CollectMesaCardInfo(&(info->gpus)))
++ {
++ if (!GetPCIDevicesFreeBSD(&(info->gpus)))
++ return false;
++ }
++#else
+ if (!GetPCIDevicesWithLibPCI(&(info->gpus)))
+ {
+ return false;
+ }
++#endif
+
+ if (info->gpus.size() == 0)
+ {
diff --git a/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
new file mode 100644
index 000000000000..1fcd6b8b7fd0
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
@@ -0,0 +1,55 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp.orig 2019-03-15 06:40:10 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp
+@@ -8,6 +8,8 @@
+
+ #include "gpu_info_util/SystemInfo_internal.h"
+
++#include <GL/glx.h>
++#include <GL/glxext.h>
+ #include <X11/Xlib.h>
+
+ #include "common/debug.h"
+@@ -18,8 +20,43 @@
+ #error SystemInfo_x11.cpp compiled without GPU_INFO_USE_X11
+ #endif
+
++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
++
+ namespace angle
+ {
++
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices)
++{
++
++ unsigned int vid[3], did[3];
++
++ Display *display = XOpenDisplay(NULL);
++ if (!display) {
++ return false;
++ }
++
++ PFNGLXQUERYRENDERERINTEGERMESAPROC queryInteger =
++ (PFNGLXQUERYRENDERERINTEGERMESAPROC) glXGetProcAddressARB((const GLubyte *)
++ "glXQueryRendererIntegerMESA");
++
++ if (!queryInteger)
++ return false;
++
++ bool vendor_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_VENDOR_ID_MESA, vid);
++ bool device_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_DEVICE_ID_MESA, did);
++
++ if (vendor_ret && device_ret) {
++ GPUDeviceInfo info;
++ info.vendorId = vid[0];
++ info.deviceId = did[0];
++ devices->push_back(info);
++ }
++
++ return true;
++}
+
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version)
+ {
diff --git a/devel/electron4/files/patch-third__party_angle_src_libANGLE_Display.cpp b/devel/electron4/files/patch-third__party_angle_src_libANGLE_Display.cpp
new file mode 100644
index 000000000000..bf8a3fed2aa1
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_libANGLE_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/angle/src/libANGLE/Display.cpp.orig 2019-03-15 06:40:10 UTC
++++ third_party/angle/src/libANGLE/Display.cpp
+@@ -63,7 +63,7 @@
+ #if defined(ANGLE_ENABLE_VULKAN)
+ #if defined(ANGLE_PLATFORM_WINDOWS)
+ #include "libANGLE/renderer/vulkan/win32/DisplayVkWin32.h"
+-#elif defined(ANGLE_PLATFORM_LINUX)
++#elif defined(ANGLE_PLATFORM_POSIX)
+ #include "libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h"
+ #elif defined(ANGLE_PLATFORM_ANDROID)
+ #include "libANGLE/renderer/vulkan/android/DisplayVkAndroid.h"
+@@ -211,7 +211,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const Attrib
+ #if defined(ANGLE_ENABLE_VULKAN)
+ #if defined(ANGLE_PLATFORM_WINDOWS)
+ impl = new rx::DisplayVkWin32(state);
+-#elif defined(ANGLE_PLATFORM_LINUX)
++#elif defined(ANGLE_PLATFORM_POSIX)
+ impl = new rx::DisplayVkXcb(state);
+ #elif defined(ANGLE_PLATFORM_ANDROID)
+ impl = new rx::DisplayVkAndroid(state);
diff --git a/devel/electron4/files/patch-third__party_angle_src_libANGLE_renderer_gl_renderergl__utils.cpp b/devel/electron4/files/patch-third__party_angle_src_libANGLE_renderer_gl_renderergl__utils.cpp
new file mode 100644
index 000000000000..404c0be2d10d
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_src_libANGLE_renderer_gl_renderergl__utils.cpp
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp.orig 2019-03-15 06:40:12 UTC
++++ third_party/angle/src/libANGLE/renderer/gl/renderergl_utils.cpp
+@@ -1127,7 +1127,7 @@ void GenerateWorkarounds(const FunctionsGL *functions,
+ workarounds->doesSRGBClearsOnLinearFramebufferAttachments =
+ functions->standard == STANDARD_GL_DESKTOP && (IsIntel(vendor) || IsAMD(vendor));
+
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ workarounds->emulateMaxVertexAttribStride =
+ functions->standard == STANDARD_GL_DESKTOP && IsAMD(vendor);
+ workarounds->useUnusedBlocksWithStandardOrSharedLayout = IsAMD(vendor);
diff --git a/devel/electron4/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h b/devel/electron4/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h
new file mode 100644
index 000000000000..4b4d165d2eee
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h
@@ -0,0 +1,10 @@
+--- third_party/angle/third_party/glslang/src/glslang/Include/PoolAlloc.h.orig 2020-03-14 11:01:09 UTC
++++ third_party/angle/third_party/glslang/src/glslang/Include/PoolAlloc.h
+@@ -304,7 +304,6 @@ class pool_allocator { (public)
+ size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
+ size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
+
+- void setAllocator(TPoolAllocator* a) { allocator = *a; }
+ TPoolAllocator& getAllocator() const { return allocator; }
+
+ protected:
diff --git a/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
new file mode 100644
index 000000000000..a96a60c3e8f3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/loader.c.orig 2019-03-15 06:41:41 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/loader.c
+@@ -213,7 +213,7 @@ void *loader_device_heap_realloc(const struct loader_d
+ }
+
+ // Environment variables
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+
+ static inline char *loader_getenv(const char *name, const struct loader_instance *inst) {
+ // No allocation of memory necessary for Linux, but we should at least touch
diff --git a/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
new file mode 100644
index 000000000000..de24aa2e2351
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h.orig 2019-03-15 06:41:41 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron4/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
new file mode 100644
index 000000000000..67596e4dcfba
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h.orig 2019-03-15 06:30:51 UTC
++++ third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc b/devel/electron4/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
new file mode 100644
index 000000000000..56a5c42eba05
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/editing/editing_behavior.cc.orig 2019-03-15 06:38:12 UTC
++++ third_party/blink/renderer/core/editing/editing_behavior.cc
+@@ -270,7 +270,7 @@ bool EditingBehavior::ShouldInsertCharacter(const Keyb
+ // unexpected behaviour
+ if (ch < ' ')
+ return false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // According to XKB map no keyboard combinations with ctrl key are mapped to
+ // printable characters, however we need the filter as the DomKey/text could
+ // contain printable characters.
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc b/devel/electron4/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
new file mode 100644
index 000000000000..fc23e3e24784
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc.orig 2019-03-15 06:38:13 UTC
++++ third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+@@ -34,7 +34,7 @@ namespace {
+ constexpr TimeDelta kSlackBeforeDeadline = TimeDelta::FromMilliseconds(1);
+
+ /* The value is based on user statistics on Nov 2017. */
+-#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN))
++#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)) || defined(OS_BSD)
+ const double kIdleTaskStartTimeoutDelayMs = 1000.0;
+ #else
+ const double kIdleTaskStartTimeoutDelayMs = 4000.0; // For ChromeOS, Mobile
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc b/devel/electron4/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
new file mode 100644
index 000000000000..24d452072379
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/forms/internal_popup_menu.cc.orig 2019-03-15 06:38:14 UTC
++++ third_party/blink/renderer/core/html/forms/internal_popup_menu.cc
+@@ -126,7 +126,7 @@ class InternalPopupMenu::ItemIterationContext {
+ is_in_group_(false),
+ buffer_(buffer) {
+ DCHECK(buffer_);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On other platforms, the <option> background color is the same as the
+ // <select> background color. On Linux, that makes the <option>
+ // background color very dark, so by default, try to use a lighter
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc b/devel/electron4/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
new file mode 100644
index 000000000000..b45d31a34693
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/inspector/inspector_memory_agent.cc.orig 2019-03-15 06:38:14 UTC
++++ third_party/blink/renderer/core/inspector/inspector_memory_agent.cc
+@@ -162,7 +162,7 @@ InspectorMemoryAgent::GetSamplingProfileById(uint32_t
+
+ std::vector<std::string> InspectorMemoryAgent::Symbolize(
+ const std::vector<void*>& addresses) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(alph): Move symbolization to the client.
+ std::vector<void*> addresses_to_symbolize;
+ for (void* address : addresses) {
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_BUILD.gn b/devel/electron4/files/patch-third__party_blink_renderer_platform_BUILD.gn
new file mode 100644
index 000000000000..b0446bbbb974
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/blink/renderer/platform/BUILD.gn.orig 2019-03-16 09:15:20 UTC
++++ third_party/blink/renderer/platform/BUILD.gn
+@@ -144,6 +144,7 @@ executable("character_data_generator") {
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ libs = [ "cxxrt" ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
new file mode 100644
index 000000000000..7ecfd18174c4
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.cc.orig 2019-03-15 06:38:17 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.cc
+@@ -65,7 +65,7 @@ namespace blink {
+
+ SkFontMgr* FontCache::static_font_manager_ = nullptr;
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float FontCache::device_scale_factor_ = 1.0;
+ #endif
+
+@@ -88,7 +88,7 @@ FontCache::FontCache()
+ FontPlatformData* FontCache::SystemFontPlatformData(
+ const FontDescription& font_description) {
+ const AtomicString& family = FontCache::SystemFontFamily();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (family.IsEmpty() || family == FontFamilyNames::system_ui)
+ return nullptr;
+ #else
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
new file mode 100644
index 000000000000..d8c3a76cffc3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
@@ -0,0 +1,38 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.h.orig 2019-03-15 06:38:17 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.h
+@@ -156,7 +156,7 @@ class PLATFORM_EXPORT FontCache {
+ sk_sp<SkFontMgr> FontManager() { return font_manager_; }
+ static void SetFontManager(sk_sp<SkFontMgr>);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // These are needed for calling QueryRenderStyleForStrike, since
+ // gfx::GetFontRenderParams makes distinctions based on DSF.
+ static float DeviceScaleFactor() { return device_scale_factor_; }
+@@ -217,7 +217,7 @@ class PLATFORM_EXPORT FontCache {
+ const FontDescription&);
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct PlatformFallbackFont {
+ String name;
+ CString filename;
+@@ -291,7 +291,7 @@ class PLATFORM_EXPORT FontCache {
+ const FontFaceCreationParams&,
+ CString& name);
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ static AtomicString GetFamilyNameForCharacter(SkFontMgr*,
+ UChar32,
+ const FontDescription&,
+@@ -327,7 +327,7 @@ class PLATFORM_EXPORT FontCache {
+ bool is_test_font_mgr_ = false;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ static float device_scale_factor_;
+ #endif
+
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
new file mode 100644
index 000000000000..ce7e8a74bc0f
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_description.cc.orig 2019-03-15 06:38:17 UTC
++++ third_party/blink/renderer/platform/fonts/font_description.cc
+@@ -38,7 +38,7 @@
+ #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -222,7 +222,7 @@ FontCacheKey FontDescription::CacheKey(
+ static_cast<unsigned>(fields_.orientation_) << 1 | // bit 2-3
+ static_cast<unsigned>(fields_.subpixel_text_position_); // bit 1
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float device_scale_factor_for_key = FontCache::DeviceScaleFactor();
+ #else
+ float device_scale_factor_for_key = 1.0f;
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
new file mode 100644
index 000000000000..6bfdd523e0df
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/fonts/font_metrics.cc.orig 2019-03-15 06:38:17 UTC
++++ third_party/blink/renderer/platform/fonts/font_metrics.cc
+@@ -38,7 +38,7 @@
+
+ namespace blink {
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // This is the largest VDMX table which we'll try to load and parse.
+ static const size_t kMaxVDMXTableSize = 1024 * 1024; // 1 MB
+ #endif
+@@ -60,7 +60,7 @@ void FontMetrics::AscentDescentWithHacks(
+ int vdmx_ascent = 0, vdmx_descent = 0;
+ bool is_vdmx_valid = false;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Manually digging up VDMX metrics is only applicable when bytecode hinting
+ // using FreeType. With DirectWrite or CoreText, no bytecode hinting is ever
+ // done. This code should be pushed into FreeType (hinted font metrics).
+@@ -106,7 +106,7 @@ void FontMetrics::AscentDescentWithHacks(
+ visual_overflow_inflation_for_ascent = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent = 1;
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
new file mode 100644
index 000000000000..ea4249c38945
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc.orig 2019-03-15 06:38:17 UTC
++++ third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc
+@@ -59,7 +59,7 @@ AtomicString ToAtomicString(const SkString& str) {
+ return AtomicString::FromUTF8(str.c_str(), str.size());
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Android special locale for retrieving the color emoji font
+ // based on the proposed changes in UTR #51 for introducing
+ // an Emoji script code:
+@@ -248,7 +248,7 @@ PaintTypeface FontCache::CreateTypeface(
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // On linux if the fontManager has been overridden then we should be calling
+ // the embedder provided font Manager rather than calling
+ // SkTypeface::CreateFromName which may redirect the call to the default font
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc
new file mode 100644
index 000000000000..89618de1b132
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/heap/stack_frame_depth.cc.orig 2019-03-15 06:26:13 UTC
++++ third_party/blink/renderer/platform/heap/stack_frame_depth.cc
+@@ -15,6 +15,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace blink {
+
+ static const char* g_avoid_optimization = nullptr;
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn
new file mode 100644
index 000000000000..1e1c236a6e74
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn
@@ -0,0 +1,16 @@
+--- third_party/blink/renderer/platform/wtf/BUILD.gn.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/BUILD.gn
+@@ -276,8 +276,12 @@ jumbo_component("wtf") {
+ if (is_android) {
+ libs = [ "log" ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ libs = [ "dl" ]
++ }
++
++ if (is_bsd) {
++ libs = [ "execinfo" ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc
new file mode 100644
index 000000000000..564ccc6a0af6
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/platform/wtf/assertions.cc.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/assertions.cc
+@@ -48,7 +48,7 @@
+ #include <windows.h>
+ #endif
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(__UCLIBC__))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(__UCLIBC__))
+ #include <cxxabi.h>
+ #include <dlfcn.h>
+ #include <execinfo.h>
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_atomics.h b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_atomics.h
new file mode 100644
index 000000000000..596f595c9707
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_atomics.h
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/platform/wtf/atomics.h.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/atomics.h
+@@ -176,7 +176,7 @@ ALWAYS_INLINE void AtomicSetOneToZero(int volatile* pt
+ #if defined(THREAD_SANITIZER)
+ // The definitions below assume an LP64 data model. This is fine because
+ // TSan is only supported on x86_64 Linux.
+-#if defined(ARCH_CPU_64_BITS) && defined(OS_LINUX)
++#if defined(ARCH_CPU_64_BITS) && defined(OS_LINUX) || defined(OS_BSD)
+ ALWAYS_INLINE void ReleaseStore(volatile int* ptr, int value) {
+ __tsan_atomic32_store(ptr, value, __tsan_memory_order_release);
+ }
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
new file mode 100644
index 000000000000..80946c3226d0
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/platform/wtf/container_annotations.h.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/container_annotations.h
+@@ -10,7 +10,7 @@
+
+ // TODO(ochang): Remove the ARCH_CPU_X86_64 condition to enable this for X86
+ // once the crashes there have been fixed: http://crbug.com/461406
+-#if defined(ADDRESS_SANITIZER) && defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if defined(ADDRESS_SANITIZER) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #define ANNOTATE_CONTIGUOUS_CONTAINER
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize) \
+ if (buffer) { \
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
new file mode 100644
index 000000000000..a30eb25333c9
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/wtf/stack_util.cc.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/stack_util.cc
+@@ -16,6 +16,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ size_t GetUnderestimatedStackSize() {
diff --git a/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
new file mode 100644
index 000000000000..adceb86714c7
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
@@ -0,0 +1,22 @@
+--- third_party/blink/renderer/platform/wtf/threading_pthreads.cc.orig 2019-03-15 06:38:18 UTC
++++ third_party/blink/renderer/platform/wtf/threading_pthreads.cc
+@@ -51,12 +51,17 @@
+ #include <objc/objc-auto.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <unistd.h>
++#endif
++
++#if defined(OS_BSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
+ #endif
+
+ namespace WTF {
diff --git a/devel/electron4/files/patch-third__party_boringssl_BUILD.gn b/devel/electron4/files/patch-third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..f1c1ff79cfc3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_boringssl_BUILD.gn
@@ -0,0 +1,36 @@
+--- third_party/boringssl/BUILD.gn.orig 2019-03-16 09:15:20 UTC
++++ third_party/boringssl/BUILD.gn
+@@ -85,7 +85,7 @@ if (is_win && !is_msan) {
+ } else if (current_cpu == "x64") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86_64
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86_64
+ } else {
+ public_configs = [ ":no_asm_config" ]
+@@ -93,13 +93,13 @@ if (is_win && !is_msan) {
+ } else if (current_cpu == "x86") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_arm
+ } else if (is_ios) {
+ sources += crypto_sources_ios_arm
+@@ -107,7 +107,7 @@ if (is_win && !is_msan) {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_aarch64
+ } else if (is_ios) {
+ sources += crypto_sources_ios_aarch64
diff --git a/devel/electron4/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c b/devel/electron4/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
new file mode 100644
index 000000000000..c8951969bf3c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
@@ -0,0 +1,54 @@
+--- third_party/boringssl/src/crypto/cpu-aarch64-linux.c.orig 2019-03-15 06:27:31 UTC
++++ third_party/boringssl/src/crypto/cpu-aarch64-linux.c
+@@ -14,49 +14,7 @@
+
+ #include <openssl/cpu.h>
+
+-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
+- !defined(OPENSSL_STATIC_ARMCAP)
+-
+-#include <sys/auxv.h>
+-
+-#include <openssl/arm_arch.h>
+-
+-#include "internal.h"
+-
+-
+-extern uint32_t OPENSSL_armcap_P;
+-
++#ifdef __FreeBSD__
+ void OPENSSL_cpuid_setup(void) {
+- unsigned long hwcap = getauxval(AT_HWCAP);
+-
+- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
+- // these values.
+- static const unsigned long kNEON = 1 << 1;
+- static const unsigned long kAES = 1 << 3;
+- static const unsigned long kPMULL = 1 << 4;
+- static const unsigned long kSHA1 = 1 << 5;
+- static const unsigned long kSHA256 = 1 << 6;
+-
+- if ((hwcap & kNEON) == 0) {
+- // Matching OpenSSL, if NEON is missing, don't report other features
+- // either.
+- return;
+- }
+-
+- OPENSSL_armcap_P |= ARMV7_NEON;
+-
+- if (hwcap & kAES) {
+- OPENSSL_armcap_P |= ARMV8_AES;
+- }
+- if (hwcap & kPMULL) {
+- OPENSSL_armcap_P |= ARMV8_PMULL;
+- }
+- if (hwcap & kSHA1) {
+- OPENSSL_armcap_P |= ARMV8_SHA1;
+- }
+- if (hwcap & kSHA256) {
+- OPENSSL_armcap_P |= ARMV8_SHA256;
+- }
+ }
+-
+-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
++#endif
diff --git a/devel/electron4/files/patch-third__party_boringssl_src_crypto_ex__data.c b/devel/electron4/files/patch-third__party_boringssl_src_crypto_ex__data.c
new file mode 100644
index 000000000000..e4b0317f6f49
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_boringssl_src_crypto_ex__data.c
@@ -0,0 +1,13 @@
+--- third_party/boringssl/src/crypto/ex_data.c.orig 2019-03-15 06:27:31 UTC
++++ third_party/boringssl/src/crypto/ex_data.c
+@@ -186,7 +186,9 @@ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int index,
+ }
+ }
+
+- sk_void_set(ad->sk, index, val);
++ // expression result unused; should this cast be to 'void'?
++ // seems it should, feel free to investigate those #def
++ (void) sk_void_set(ad->sk, index, val);
+ return 1;
+ }
+
diff --git a/devel/electron4/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h b/devel/electron4/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
new file mode 100644
index 000000000000..af2179917fc5
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
@@ -0,0 +1,11 @@
+--- third_party/breakpad/breakpad/src/common/simple_string_dictionary.h.orig 2019-03-15 06:27:08 UTC
++++ third_party/breakpad/breakpad/src/common/simple_string_dictionary.h
+@@ -33,7 +33,7 @@
+ #include <assert.h>
+ #include <string.h>
+
+-#include "common/basictypes.h"
++#include "third_party/breakpad/breakpad/src/common/basictypes.h"
+
+ namespace google_breakpad {
+
diff --git a/devel/electron4/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h b/devel/electron4/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
new file mode 100644
index 000000000000..57d9efb86307
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
@@ -0,0 +1,11 @@
+--- third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h.orig 2019-03-15 06:26:35 UTC
++++ third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
+@@ -334,6 +334,8 @@ class Status {
+ */
+ PERMANENT_FAILURE
+ };
++
++ Status() : code_(SUCCESS), message_() {}
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni b/devel/electron4/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
new file mode 100644
index 000000000000..d8bd15d49570
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/build/crashpad_buildconfig.gni.orig 2019-03-15 06:38:19 UTC
++++ third_party/crashpad/crashpad/build/crashpad_buildconfig.gni
+@@ -38,7 +38,7 @@ crashpad_is_standalone = crashpad_dependencies == "sta
+ if (crashpad_is_in_chromium) {
+ crashpad_is_mac = is_mac
+ crashpad_is_win = is_win
+- crashpad_is_linux = is_linux
++ crashpad_is_linux = is_linux && !is_bsd
+ crashpad_is_android = is_android
+ crashpad_is_fuchsia = is_fuchsia
+
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
new file mode 100644
index 000000000000..d174f8d828f5
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/address_types.h.orig 2019-03-15 06:26:36 UTC
++++ third_party/crashpad/crashpad/util/misc/address_types.h
+@@ -25,7 +25,7 @@
+ #include <mach/mach_types.h>
+ #elif defined(OS_WIN)
+ #include "util/win/address_types.h"
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "util/linux/address_types.h"
+ #elif defined(OS_FUCHSIA)
+ #include <zircon/types.h>
+@@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t;
+ using VMAddress = WinVMAddress;
+ using VMSize = WinVMSize;
+
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ using VMAddress = LinuxVMAddress;
+ using VMSize = LinuxVMSize;
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
new file mode 100644
index 000000000000..7e68da3c498a
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/capture_context.h.orig 2019-03-15 06:26:36 UTC
++++ third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -21,7 +21,7 @@
+ #include <mach/mach.h>
+ #elif defined(OS_WIN)
+ #include <windows.h>
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <ucontext.h>
+ #elif defined(OS_FUCHSIA)
+ #include <signal.h>
+@@ -35,7 +35,7 @@ using NativeCPUContext = x86_thread_state;
+ #endif
+ #elif defined(OS_WIN)
+ using NativeCPUContext = CONTEXT;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ using NativeCPUContext = ucontext_t;
+ #endif // OS_MACOSX
+
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
new file mode 100644
index 000000000000..7d86d9babc7b
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/metrics.cc.orig 2019-03-15 06:38:19 UTC
++++ third_party/crashpad/crashpad/util/misc/metrics.cc
+@@ -24,7 +24,7 @@
+ #define METRICS_OS_NAME "Win"
+ #elif defined(OS_ANDROID)
+ #define METRICS_OS_NAME "Android"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define METRICS_OS_NAME "Linux"
+ #elif defined(OS_FUCHSIA)
+ #define METRICS_OS_NAME "Fuchsia"
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
new file mode 100644
index 000000000000..6ce7a52e55f4
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/uuid.cc.orig 2019-03-15 06:26:36 UTC
++++ third_party/crashpad/crashpad/util/misc/uuid.cc
+@@ -95,7 +95,7 @@ bool UUID::InitializeWithNew() {
+ InitializeFromBytes(uuid);
+ return true;
+ #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Linux, Android, and Fuchsia do not provide a UUID generator in a
+ // widely-available system library. On Linux and Android, uuid_generate()
+ // from libuuid is not available everywhere.
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
new file mode 100644
index 000000000000..b8deba52a93e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2019-03-15 06:38:19 UTC
++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -71,7 +71,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) {
+ // This is an advantage over looping over all possible file descriptors, because
+ // no attempt needs to be made to close file descriptors that are not open.
+ bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ static constexpr char kFDDir[] = "/dev/fd";
+ #elif defined(OS_LINUX) || defined(OS_ANDROID)
+ static constexpr char kFDDir[] = "/proc/self/fd";
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
new file mode 100644
index 000000000000..8debecc79ae3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/drop_privileges.cc.orig 2019-03-15 06:26:36 UTC
++++ third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+@@ -23,7 +23,7 @@ void DropPrivileges() {
+ gid_t gid = getgid();
+ uid_t uid = getuid();
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Based on the POSIX.1-2008 2013 edition documentation for setreuid() and
+ // setregid(), setreuid() and setregid() alone should be sufficient to drop
+ // privileges. The standard specifies that the saved ID should be set to the
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
new file mode 100644
index 000000000000..97e00f3fba13
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
@@ -0,0 +1,33 @@
+--- third_party/crashpad/crashpad/util/posix/signals.cc.orig 2019-03-15 06:38:19 UTC
++++ third_party/crashpad/crashpad/util/posix/signals.cc
+@@ -44,7 +44,7 @@ constexpr int kCrashSignals[] = {
+ #if defined(SIGEMT)
+ SIGEMT,
+ #endif // defined(SIGEMT)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_LINUX)
+@@ -84,7 +84,7 @@ constexpr int kTerminateSignals[] = {
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_MACOSX)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGIO,
+ #endif // defined(OS_LINUX)
+ };
+@@ -214,8 +214,12 @@ bool Signals::WillSignalReraiseAutonomously(const sigi
+ // remains. See 10.12.3 xnu-3789.41.3/bsd/kern/kern_sig.c
+ // psignal_internal().
+ (code > 0 &&
++#if defined(SI_ASYNCIO)
+ code != SI_ASYNCIO &&
++#endif
++#if defined(SI_MESGQ)
+ code != SI_MESGQ &&
++#endif
+ code != SI_QUEUE &&
+ code != SI_TIMER &&
+ code != SI_USER &&
diff --git a/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
new file mode 100644
index 000000000000..255741801c8f
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc.orig 2019-03-15 06:38:19 UTC
++++ third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc
+@@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = {
+ "INFO",
+ "USR1",
+ "USR2",
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #if defined(ARCH_CPU_MIPS_FAMILY)
+ "HUP",
+ "INT",
+@@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = {
+ #endif // defined(ARCH_CPU_MIPS_FAMILY)
+ #endif
+ };
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // NSIG is 64 to account for real-time signals.
+ static_assert(arraysize(kSignalNames) == 32, "kSignalNames length");
+ #else
diff --git a/devel/electron4/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h b/devel/electron4/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
new file mode 100644
index 000000000000..093b60ae3aec
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
@@ -0,0 +1,19 @@
+--- third_party/crc32c/src/src/crc32c_arm64_linux_check.h.orig 2019-03-15 06:27:10 UTC
++++ third_party/crc32c/src/src/crc32c_arm64_linux_check.h
+@@ -29,6 +29,8 @@ extern "C" unsigned long getauxval(unsigned long type)
+ namespace crc32c {
+
+ inline bool CanUseArm64Linux() {
++return false;
++#if 0
+ #if HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+ // From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
+ constexpr unsigned long kHWCAP_PMULL = 1 << 4;
+@@ -39,6 +41,7 @@ inline bool CanUseArm64Linux() {
+ #else
+ return false;
+ #endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
++#endif
+ }
+
+ } // namespace crc32c
diff --git a/devel/electron4/files/patch-third__party_electron__node_common.gypi b/devel/electron4/files/patch-third__party_electron__node_common.gypi
new file mode 100644
index 000000000000..fbace0dcccf4
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_electron__node_common.gypi
@@ -0,0 +1,18 @@
+--- third_party/electron_node/common.gypi.orig 2020-05-09 08:13:10 UTC
++++ third_party/electron_node/common.gypi
+@@ -507,15 +507,6 @@
+ 'libraries': [ '-lelf' ],
+ }],
+ ['OS=="freebsd"', {
+- 'conditions': [
+- ['"0" < llvm_version < "4.0"', {
+- # Use this flag because on FreeBSD std::pairs copy constructor is non-trivial.
+- # Doesn't apply to llvm 4.0 (FreeBSD 11.1) or later.
+- # Refs: https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html
+- # Refs: https://svnweb.freebsd.org/ports/head/www/node/Makefile?revision=444555&view=markup
+- 'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ],
+- }],
+- ],
+ 'ldflags': [
+ '-Wl,--export-dynamic',
+ ],
diff --git a/devel/electron4/files/patch-third__party_electron__node_deps_uv_BUILD.gn b/devel/electron4/files/patch-third__party_electron__node_deps_uv_BUILD.gn
new file mode 100644
index 000000000000..fe82e3a57a29
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_electron__node_deps_uv_BUILD.gn
@@ -0,0 +1,44 @@
+--- third_party/electron_node/deps/uv/BUILD.gn.orig 2019-03-16 10:00:16 UTC
++++ third_party/electron_node/deps/uv/BUILD.gn
+@@ -3,7 +3,7 @@ config("libuv_config") {
+
+ defines = []
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_POSIX_C_SOURCE=200112" ]
+ }
+ if (!is_win) {
+@@ -145,7 +145,7 @@ static_library("uv") {
+ libs += [ "m" ]
+ ldflags += [ "-pthread" ]
+ }
+- if (is_mac || is_linux) {
++ if (is_mac || (is_linux && !is_bsd)) {
+ sources += [ "src/unix/proctitle.c" ]
+ }
+ if (is_mac) {
+@@ -159,7 +159,7 @@ static_library("uv") {
+ "_DARWIN_UNLIMITED_SELECT=1",
+ ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_GNU_SOURCE" ]
+ sources += [
+ "src/unix/linux-core.c",
+@@ -179,6 +179,14 @@ static_library("uv") {
+ sources += [
+ "src/unix/bsd-ifaddrs.c",
+ "src/unix/kqueue.c",
++ ]
++ }
++ if (is_bsd) {
++ sources += [
++ "src/unix/bsd-ifaddrs.c",
++ "src/unix/freebsd.c",
++ "src/unix/kqueue.c",
++ "src/unix/posix-hrtime.c",
+ ]
+ }
+ }
diff --git a/devel/electron4/files/patch-third__party_ffmpeg_libavutil_mem.c b/devel/electron4/files/patch-third__party_ffmpeg_libavutil_mem.c
new file mode 100644
index 000000000000..753164f18794
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_ffmpeg_libavutil_mem.c
@@ -0,0 +1,12 @@
+--- third_party/ffmpeg/libavutil/mem.c.orig 2019-03-15 06:40:46 UTC
++++ third_party/ffmpeg/libavutil/mem.c
+@@ -32,9 +32,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#if HAVE_MALLOC_H
+-#include <malloc.h>
+-#endif
+
+ #include "avassert.h"
+ #include "avutil.h"
diff --git a/devel/electron4/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h b/devel/electron4/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h
new file mode 100644
index 000000000000..df91aba5ab2e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h
@@ -0,0 +1,11 @@
+--- third_party/googletest/src/googletest/include/gtest/internal/gtest-port.h.orig 2019-03-15 06:40:20 UTC
++++ third_party/googletest/src/googletest/include/gtest/internal/gtest-port.h
+@@ -841,7 +841,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SE
+ (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX)
+
+ // Determines whether test results can be streamed to a socket.
+-#if GTEST_OS_LINUX
++#if GTEST_OS_LINUX || GTEST_OS_FREEBSD
+ # define GTEST_CAN_STREAM_RESULTS_ 1
+ #endif
+
diff --git a/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc b/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
new file mode 100644
index 000000000000..263fcca64d13
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
@@ -0,0 +1,43 @@
+--- third_party/googletest/src/googletest/src/gtest-port.cc.orig 2019-03-15 06:40:20 UTC
++++ third_party/googletest/src/googletest/src/gtest-port.cc
+@@ -52,6 +52,11 @@
+ # include <mach/vm_map.h>
+ #endif // GTEST_OS_MAC
+
++#if GTEST_OS_FREEBSD
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ #if GTEST_OS_QNX
+ # include <devctl.h>
+ # include <fcntl.h>
+@@ -126,6 +131,28 @@ size_t GetThreadCount() {
+ } else {
+ return 0;
+ }
++}
++
++#elif GTEST_OS_FREEBSD
++
++#define KP_NLWP(kp) (kp.ki_numthreads)
++
++// Return the number of threads running in the process, or 0 to indicate that
++// we cannot detect it.
++size_t GetThreadCount() {
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ struct kinfo_proc(info);
++ size_t size = sizeof(info);
++ if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
++ return 0;
++ }
++ return KP_NLWP(info);
+ }
+
+ #elif GTEST_OS_QNX
diff --git a/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest.cc b/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest.cc
new file mode 100644
index 000000000000..5aa4ce19177e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_googletest_src_googletest_src_gtest.cc
@@ -0,0 +1,10 @@
+--- third_party/googletest/src/googletest/src/gtest.cc.orig 2019-03-15 06:40:20 UTC
++++ third_party/googletest/src/googletest/src/gtest.cc
+@@ -128,6 +128,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ # include <sys/socket.h> // NOLINT
+ # include <sys/types.h> // NOLINT
diff --git a/devel/electron4/files/patch-third__party_leveldatabase_env__chromium.cc b/devel/electron4/files/patch-third__party_leveldatabase_env__chromium.cc
new file mode 100644
index 000000000000..5d81cd00e6f7
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_leveldatabase_env__chromium.cc
@@ -0,0 +1,14 @@
+--- third_party/leveldatabase/env_chromium.cc.orig 2019-03-15 06:38:20 UTC
++++ third_party/leveldatabase/env_chromium.cc
+@@ -38,7 +38,11 @@
+ #include "third_party/leveldatabase/chromium_logger.h"
+ #include "third_party/leveldatabase/leveldb_chrome.h"
+ #include "third_party/leveldatabase/src/include/leveldb/options.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::FilePath;
+ using base::trace_event::MemoryAllocatorDump;
diff --git a/devel/electron4/files/patch-third__party_libXNVCtrl_NVCtrl.c b/devel/electron4/files/patch-third__party_libXNVCtrl_NVCtrl.c
new file mode 100644
index 000000000000..3e574a3ea88c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libXNVCtrl_NVCtrl.c
@@ -0,0 +1,25 @@
+--- third_party/libXNVCtrl/NVCtrl.c.orig 2019-03-15 06:26:36 UTC
++++ third_party/libXNVCtrl/NVCtrl.c
+@@ -27,10 +27,6 @@
+ * libXNVCtrl library properly protects the Display connection.
+ */
+
+-#if !defined(XTHREADS)
+-#define XTHREADS
+-#endif /* XTHREADS */
+-
+ #define NEED_EVENTS
+ #define NEED_REPLIES
+ #include <stdint.h>
+@@ -39,6 +35,11 @@
+ #include <X11/Xutil.h>
+ #include <X11/extensions/Xext.h>
+ #include <X11/extensions/extutil.h>
++
++#if !defined(XTHREADS)
++#define XTHREADS
++#endif /* XTHREADS */
++
+ #include "NVCtrlLib.h"
+ #include "nv_control.h"
+
diff --git a/devel/electron4/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc b/devel/electron4/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc
new file mode 100644
index 000000000000..33288be95e97
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc
@@ -0,0 +1,11 @@
+--- third_party/libjingle_xmpp/task_runner/taskrunner.cc.orig 2019-03-15 06:38:20 UTC
++++ third_party/libjingle_xmpp/task_runner/taskrunner.cc
+@@ -95,7 +95,7 @@ void TaskRunner::InternalRunTasks(bool in_destructor)
+ std::vector<Task *>::iterator it;
+ it = std::remove(tasks_.begin(),
+ tasks_.end(),
+- reinterpret_cast<Task *>(NULL));
++ static_cast<Task *>(NULL));
+
+ tasks_.erase(it, tasks_.end());
+
diff --git a/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
new file mode 100644
index 000000000000..64df6a6843c4
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h.orig 2019-03-15 06:28:26 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h
+@@ -56,7 +56,7 @@ template <class T> boost::once_flag Singleton<T>::flag
+ #include "phonenumbers/base/logging.h"
+ #include "phonenumbers/base/thread_checker.h"
+
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
new file mode 100644
index 000000000000..53f5bac82614
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h.orig 2019-03-15 06:28:26 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h
+@@ -37,7 +37,7 @@ typedef boost::mutex::scoped_lock AutoLock;
+ // Dummy lock implementation on non-POSIX platforms. If you are running on a
+ // different platform and care about thread-safety, please compile with
+ // -DI18N_PHONENUMBERS_USE_BOOST.
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
new file mode 100644
index 000000000000..998d97206463
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
@@ -0,0 +1,19 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h.orig 2019-03-15 06:28:26 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h
+@@ -23,6 +23,7 @@
+ // user of the library know that it can't be used in a thread-safe manner when
+ // it is not depending on Boost.
+ #if !defined(__linux__) && !defined(__APPLE__) && \
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
+ !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
+ #error Building without Boost, please provide \
+ -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
+@@ -31,7 +32,7 @@
+ #endif
+
+ #if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
+- (defined(__linux__) || defined(__apple__))
++ (defined(__linux__) || defined(__apple__)) || defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ #include <pthread.h>
+
diff --git a/devel/electron4/files/patch-third__party_libyuv_include_libyuv_row.h b/devel/electron4/files/patch-third__party_libyuv_include_libyuv_row.h
new file mode 100644
index 000000000000..caf8e923fb29
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_libyuv_include_libyuv_row.h
@@ -0,0 +1,37 @@
+--- third_party/libyuv/include/libyuv/row.h.orig 2019-03-15 06:40:37 UTC
++++ third_party/libyuv/include/libyuv/row.h
+@@ -157,10 +157,14 @@ extern "C" {
+ #define HAS_ARGBSHADEROW_SSE2
+ #define HAS_ARGBSUBTRACTROW_SSE2
+ #define HAS_ARGBUNATTENUATEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_SSSE3
++#endif
+ #define HAS_COMPUTECUMULATIVESUMROW_SSE2
+ #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_SSSE3
++#endif
+ #define HAS_RGBCOLORTABLEROW_X86
+ #define HAS_SOBELROW_SSE2
+ #define HAS_SOBELTOPLANEROW_SSE2
+@@ -206,7 +210,9 @@ extern "C" {
+ #define HAS_I422TORGB565ROW_AVX2
+ #define HAS_I422TORGBAROW_AVX2
+ #define HAS_I444TOARGBROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_AVX2
++#endif
+ #define HAS_J422TOARGBROW_AVX2
+ #define HAS_MERGEUVROW_AVX2
+ #define HAS_MIRRORROW_AVX2
+@@ -231,7 +237,9 @@ extern "C" {
+ #define HAS_ARGBMULTIPLYROW_AVX2
+ #define HAS_ARGBSUBTRACTROW_AVX2
+ #define HAS_ARGBUNATTENUATEROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_AVX2
++#endif
+
+ #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
+ defined(_MSC_VER)
diff --git a/devel/electron4/files/patch-third__party_node_node.py b/devel/electron4/files/patch-third__party_node_node.py
new file mode 100644
index 000000000000..46a6aa460643
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_node_node.py
@@ -0,0 +1,10 @@
+--- third_party/node/node.py.orig 2019-03-15 06:26:37 UTC
++++ third_party/node/node.py
+@@ -12,6 +12,7 @@ import sys
+ def GetBinaryPath():
+ return os_path.join(os_path.dirname(__file__), *{
+ 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ 'FreeBSD': ('freebsd', 'node-freebsd-x64', 'bin', 'node'),
+ 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+ 'Windows': ('win', 'node.exe'),
+ }[platform.system()])
diff --git a/devel/electron4/files/patch-third__party_pdfium_core_fxcrt_fx__system.h b/devel/electron4/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
new file mode 100644
index 000000000000..f6ab540dd002
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/fx_system.h.orig 2019-03-15 06:29:29 UTC
++++ third_party/pdfium/core/fxcrt/fx_system.h
+@@ -41,7 +41,7 @@
+ #elif defined(_WIN64)
+ #define _FX_OS_ _FX_OS_WIN64_
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define _FX_OS_ _FX_OS_LINUX_
+ #define _FX_PLATFORM_ _FX_PLATFORM_LINUX_
+ #elif defined(__APPLE__)
diff --git a/devel/electron4/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp b/devel/electron4/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
new file mode 100644
index 000000000000..8586f9b4e087
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/core/fxge/fx_ge_linux.cpp.orig 2019-03-15 06:41:33 UTC
++++ third_party/pdfium/core/fxge/fx_ge_linux.cpp
+@@ -146,9 +146,8 @@ std::unique_ptr<SystemFontInfoIface> SystemFontInfoIfa
+ const char** pUserPaths) {
+ auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
+ if (!pInfo->ParseFontCfg(pUserPaths)) {
+- pInfo->AddPath("/usr/share/fonts");
+- pInfo->AddPath("/usr/share/X11/fonts/Type1");
+- pInfo->AddPath("/usr/share/X11/fonts/TTF");
++ pInfo->AddPath("/usr/local/share/fonts/Type1");
++ pInfo->AddPath("/usr/local/share/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return std::move(pInfo);
diff --git a/devel/electron4/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp b/devel/electron4/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
new file mode 100644
index 000000000000..4f9c980e4d52
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
@@ -0,0 +1,106 @@
+--- third_party/pdfium/fxjs/cjs_publicmethods.cpp.orig 2019-03-15 06:41:33 UTC
++++ third_party/pdfium/fxjs/cjs_publicmethods.cpp
+@@ -72,6 +72,103 @@ const wchar_t* const kFullMonths[] = {L"January", L"Fe
+ L"July", L"August", L"September",
+ L"October", L"November", L"December"};
+
++#if defined(__FreeBSD__)
++/*
++ * cvt.c - IEEE floating point formatting routines for FreeBSD
++ * from GNU libc-4.6.27
++ */
++
++/*
++ * ap_ecvt converts to decimal
++ * the number of digits is specified by ndigit
++ * decpt is set to the position of the decimal point
++ * sign is set to 0 for positive, 1 for negative
++ */
++
++#define NDIG 80
++
++static char *
++ ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
++{
++ register int r2;
++ double fi, fj;
++ register char *p, *p1;
++ static char buf[NDIG];
++
++ if (ndigits >= NDIG - 1)
++ ndigits = NDIG - 2;
++ r2 = 0;
++ *sign = 0;
++ p = &buf[0];
++ if (arg < 0) {
++ *sign = 1;
++ arg = -arg;
++ }
++ arg = modf(arg, &fi);
++ p1 = &buf[NDIG];
++ /*
++ * Do integer part
++ */
++ if (fi != 0) {
++ p1 = &buf[NDIG];
++ while (fi != 0) {
++ fj = modf(fi / 10, &fi);
++ *--p1 = (int) ((fj + .03) * 10) + '0';
++ r2++;
++ }
++ while (p1 < &buf[NDIG])
++ *p++ = *p1++;
++ }
++ else if (arg > 0) {
++ while ((fj = arg * 10) < 1) {
++ arg = fj;
++ r2--;
++ }
++ }
++ p1 = &buf[ndigits];
++ if (eflag == 0)
++ p1 += r2;
++ *decpt = r2;
++ if (p1 < &buf[0]) {
++ buf[0] = '\0';
++ return (buf);
++ }
++ while (p <= p1 && p < &buf[NDIG]) {
++ arg *= 10;
++ arg = modf(arg, &fj);
++ *p++ = (int) fj + '0';
++ }
++ if (p1 >= &buf[NDIG]) {
++ buf[NDIG - 1] = '\0';
++ return (buf);
++ }
++ p = p1;
++ *p1 += 5;
++ while (*p1 > '9') {
++ *p1 = '0';
++ if (p1 > buf)
++ ++ * --p1;
++ else {
++ *p1 = '1';
++ (*decpt)++;
++ if (eflag == 0) {
++ if (p > buf)
++ *p = '0';
++ p++;
++ }
++ }
++ }
++ *p = '\0';
++ return (buf);
++}
++
++static char *
++ fcvt(double arg, int ndigits, int *decpt, int *sign)
++{
++ return (ap_cvt(arg, ndigits, decpt, sign, 0));
++}
++#endif // defined(__FreeBSD__)
++
+ template <typename T>
+ T StrTrim(const T& str) {
+ T result = str;
diff --git a/devel/electron4/files/patch-third__party_pdfium_fxjs_js__define.cpp b/devel/electron4/files/patch-third__party_pdfium_fxjs_js__define.cpp
new file mode 100644
index 000000000000..a38fdbf80d49
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_pdfium_fxjs_js__define.cpp
@@ -0,0 +1,22 @@
+--- third_party/pdfium/fxjs/js_define.cpp.orig 2019-03-15 06:41:33 UTC
++++ third_party/pdfium/fxjs/js_define.cpp
+@@ -23,6 +23,11 @@ double GetLocalTZA() {
+ return 0;
+ time_t t = 0;
+ time(&t);
++#ifdef __FreeBSD__
++ struct tm lt;
++ localtime_r(&t, &lt);
++ return (double)(-(lt.tm_gmtoff * 1000));
++#else
+ localtime(&t);
+ #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
+ // In gcc 'timezone' is a global variable declared in time.h. In VC++, that
+@@ -31,6 +36,7 @@ double GetLocalTZA() {
+ _get_timezone(&timezone);
+ #endif // _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
+ return (double)(-(timezone * 1000));
++#endif // __FreeBSD__
+ }
+
+ int GetDaylightSavingTA(double d) {
diff --git a/devel/electron4/files/patch-third__party_pdfium_third__party_base_logging.h b/devel/electron4/files/patch-third__party_pdfium_third__party_base_logging.h
new file mode 100644
index 000000000000..30adc593812f
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_pdfium_third__party_base_logging.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/third_party/base/logging.h.orig 2019-03-15 06:41:33 UTC
++++ third_party/pdfium/third_party/base/logging.h
+@@ -10,7 +10,7 @@
+
+ #ifndef _WIN32
+ #define NULL_DEREF_IF_POSSIBLE \
+- *(reinterpret_cast<volatile char*>(NULL) + 42) = 0x42;
++ *(reinterpret_cast<volatile char*>(__null) + 42) = 0x42;
+ #else
+ #define NULL_DEREF_IF_POSSIBLE
+ #endif
diff --git a/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_build__config.h b/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
new file mode 100644
index 000000000000..8bfa807479e3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
@@ -0,0 +1,37 @@
+--- third_party/perfetto/include/perfetto/base/build_config.h.orig 2019-03-15 06:40:52 UTC
++++ third_party/perfetto/include/perfetto/base/build_config.h
+@@ -28,6 +28,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #elif defined(__APPLE__)
+@@ -36,22 +37,25 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #elif defined(_WIN32)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #elif defined(__EMSCRIPTEN__)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1
+ #else
diff --git a/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h b/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
new file mode 100644
index 000000000000..bfdd3e46f67e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
@@ -0,0 +1,11 @@
+--- third_party/perfetto/include/perfetto/base/watchdog_posix.h.orig 2019-03-15 06:40:52 UTC
++++ third_party/perfetto/include/perfetto/base/watchdog_posix.h
+@@ -45,7 +45,7 @@ class Watchdog {
+ Timer(const Timer&) = delete;
+ Timer& operator=(const Timer&) = delete;
+
+- timer_t timerid_ = nullptr;
++ timer_t timerid_ = 0;
+ };
+ virtual ~Watchdog();
+
diff --git a/devel/electron4/files/patch-third__party_perfetto_src_base_unix__task__runner.cc b/devel/electron4/files/patch-third__party_perfetto_src_base_unix__task__runner.cc
new file mode 100644
index 000000000000..ab28f410bbe4
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_perfetto_src_base_unix__task__runner.cc
@@ -0,0 +1,11 @@
+--- third_party/perfetto/src/base/unix_task_runner.cc.orig 2019-03-15 06:40:54 UTC
++++ third_party/perfetto/src/base/unix_task_runner.cc
+@@ -45,7 +45,7 @@ UnixTaskRunner::UnixTaskRunner() {
+ control_read_.reset(pipe_fds[0]);
+ control_write_.reset(pipe_fds[1]);
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX)
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) && !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ // We are never expecting to have more than a few bytes in the wake-up pipe.
+ // Reduce the buffer size on Linux. Note that this gets rounded up to the page
+ // size.
diff --git a/devel/electron4/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc b/devel/electron4/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
new file mode 100644
index 000000000000..cc61c8455e48
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
@@ -0,0 +1,12 @@
+--- third_party/perfetto/src/tracing/core/tracing_service_impl.cc.orig 2019-03-15 06:40:55 UTC
++++ third_party/perfetto/src/tracing/core/tracing_service_impl.cc
+@@ -1050,7 +1050,8 @@ void TracingServiceImpl::MaybeSnapshotClocks(
+ protos::ClockSnapshot* clock_snapshot = packet.mutable_clock_snapshot();
+
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct {
+ clockid_t id;
+ protos::ClockSnapshot::Clock::Type type;
diff --git a/devel/electron4/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h b/devel/electron4/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
new file mode 100644
index 000000000000..874b6fae9ed6
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
@@ -0,0 +1,11 @@
+--- third_party/protobuf/src/google/protobuf/stubs/platform_macros.h.orig 2019-03-15 06:38:22 UTC
++++ third_party/protobuf/src/google/protobuf/stubs/platform_macros.h
+@@ -114,7 +114,7 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+ #undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+-#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__)
++#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__FreeBSD__)
+ // Android ndk does not support the __thread keyword very well yet. Here
+ // we use pthread_key_create()/pthread_getspecific()/... methods for
+ // TLS support on android.
diff --git a/devel/electron4/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc b/devel/electron4/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
new file mode 100644
index 000000000000..a6062ddfd686
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
@@ -0,0 +1,47 @@
+--- third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc.orig 2019-03-15 06:29:31 UTC
++++ third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc
+@@ -439,7 +439,7 @@ CMapTable::CMapFormat0::Builder::Builder(
+ }
+
+ CMapTable::CMapFormat0::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat0,
+ cmap_id) {
+ }
+@@ -563,7 +563,7 @@ CMapTable::CMapFormat2::Builder::Builder(WritableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<WritableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<WritableFontData*>(NULL),
++ : static_cast<WritableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -574,7 +574,7 @@ CMapTable::CMapFormat2::Builder::Builder(ReadableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<ReadableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<ReadableFontData*>(NULL),
++ : static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -958,7 +958,7 @@ CMapTable::CMapFormat4::Builder::Builder(WritableFontD
+ CMapTable::CMapFormat4::Builder::Builder(SegmentList* segments,
+ std::vector<int32_t>* glyph_id_array,
+ const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id),
+ segments_(segments->begin(), segments->end()),
+ glyph_id_array_(glyph_id_array->begin(), glyph_id_array->end()) {
+@@ -966,7 +966,7 @@ CMapTable::CMapFormat4::Builder::Builder(SegmentList*
+ }
+
+ CMapTable::CMapFormat4::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id) {
+ }
+
diff --git a/devel/electron4/files/patch-third__party_skia_src_core_SkCpu.cpp b/devel/electron4/files/patch-third__party_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..aecee950ad5c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_core_SkCpu.cpp
@@ -0,0 +1,19 @@
+--- third_party/skia/src/core/SkCpu.cpp.orig 2019-03-15 06:31:12 UTC
++++ third_party/skia/src/core/SkCpu.cpp
+@@ -74,6 +74,8 @@
+ #include <sys/auxv.h>
+
+ static uint32_t read_cpu_features() {
++return 0;
++#if 0
+ const uint32_t kHWCAP_CRC32 = (1<< 7),
+ kHWCAP_ASIMDHP = (1<<10);
+
+@@ -82,6 +84,7 @@
+ if (hwcaps & kHWCAP_CRC32 ) { features |= SkCpu::CRC32; }
+ if (hwcaps & kHWCAP_ASIMDHP) { features |= SkCpu::ASIMDHP; }
+ return features;
++#endif
+ }
+
+ #elif defined(SK_CPU_ARM32) && __has_include(<sys/auxv.h>) && \
diff --git a/devel/electron4/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h b/devel/electron4/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
new file mode 100644
index 000000000000..13c8ea76b41e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/gpu/GrAutoLocaleSetter.h.orig 2019-03-15 06:31:12 UTC
++++ third_party/skia/src/gpu/GrAutoLocaleSetter.h
+@@ -27,7 +27,7 @@
+ #define HAVE_XLOCALE 0
+ #endif
+
+-#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION)
++#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION) || defined(__FreeBSD__)
+ #define HAVE_LOCALE_T 0
+ #else
+ #define HAVE_LOCALE_T 1
diff --git a/devel/electron4/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp b/devel/electron4/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
new file mode 100644
index 000000000000..4e55952fe38d
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
@@ -0,0 +1,41 @@
+--- third_party/skia/src/images/SkJpegEncoder.cpp.orig 2019-03-15 06:41:36 UTC
++++ third_party/skia/src/images/SkJpegEncoder.cpp
+@@ -77,9 +77,14 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ return transform_scanline_to_premul_legacy;
+ };
+
++#ifdef JCS_EXTENSIONS
+ J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
++#else
++ J_COLOR_SPACE jpegColorType = JCS_RGB;
++#endif
+ int numComponents = 0;
+ switch (srcInfo.colorType()) {
++#ifdef JCS_EXTENSIONS
+ case kRGBA_8888_SkColorType:
+ fProc = chooseProc8888();
+ jpegColorType = JCS_EXT_RGBA;
+@@ -90,6 +95,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_BGRA;
+ numComponents = 4;
+ break;
++#endif
+ case kRGB_565_SkColorType:
+ fProc = transform_scanline_565;
+ jpegColorType = JCS_RGB;
+@@ -109,6 +115,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_GRAYSCALE;
+ numComponents = 1;
+ break;
++#ifdef JCS_EXTENSIONS
+ case kRGBA_F16_SkColorType:
+ if (!srcInfo.colorSpace()) {
+ return false;
+@@ -124,6 +131,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_RGBA;
+ numComponents = 4;
+ break;
++#endif
+ default:
+ return false;
+ }
diff --git a/devel/electron4/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h b/devel/electron4/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
new file mode 100644
index 000000000000..cdfbea65bb96
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
@@ -0,0 +1,20 @@
+--- third_party/skia/src/opts/SkRasterPipeline_opts.h.orig 2019-03-15 06:41:36 UTC
++++ third_party/skia/src/opts/SkRasterPipeline_opts.h
+@@ -657,7 +657,7 @@ SI F approx_powf(F x, F y) {
+ }
+
+ SI F from_half(U16 h) {
+-#if defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f32_f16(h);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
+@@ -677,7 +677,7 @@ SI F from_half(U16 h) {
+ }
+
+ SI U16 to_half(F f) {
+-#if defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(__aarch64__) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f16_f32(f);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/devel/electron4/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp b/devel/electron4/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp
new file mode 100644
index 000000000000..183f141d6406
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp
@@ -0,0 +1,77 @@
+--- third_party/skia/src/ports/SkFontHost_FreeType.cpp.orig 2019-03-15 06:41:36 UTC
++++ third_party/skia/src/ports/SkFontHost_FreeType.cpp
+@@ -112,8 +112,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ : fGetVarDesignCoordinates(nullptr)
+ , fGetVarAxisFlags(nullptr)
+ , fLibrary(nullptr)
+- , fIsLCDSupported(false)
+- , fLCDExtra(0)
+ {
+ if (FT_New_Library(&gFTMemory, &fLibrary)) {
+ return;
+@@ -173,12 +171,7 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ }
+ #endif
+
+- // Setup LCD filtering. This reduces color fringes for LCD smoothed glyphs.
+- // The default has changed over time, so this doesn't mean the same thing to all users.
+- if (FT_Library_SetLcdFilter(fLibrary, FT_LCD_FILTER_DEFAULT) == 0) {
+- fIsLCDSupported = true;
+- fLCDExtra = 2; //Using a filter adds one full pixel to each side.
+- }
++ FT_Library_SetLcdFilter(fLibrary, FT_LCD_FILTER_DEFAULT);
+ }
+ ~FreeTypeLibrary() {
+ if (fLibrary) {
+@@ -187,8 +180,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ }
+
+ FT_Library library() { return fLibrary; }
+- bool isLCDSupported() { return fIsLCDSupported; }
+- int lcdExtra() { return fLCDExtra; }
+
+ // FT_Get_{MM,Var}_{Blend,Design}_Coordinates were added in FreeType 2.7.1.
+ // Prior to this there was no way to get the coordinates out of the FT_Face.
+@@ -205,8 +196,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+
+ private:
+ FT_Library fLibrary;
+- bool fIsLCDSupported;
+- int fLCDExtra;
+
+ // FT_Library_SetLcdFilterWeights was introduced in FreeType 2.4.0.
+ // The following platforms provide FreeType of at least 2.4.0.
+@@ -704,17 +693,6 @@ void SkTypeface_FreeType::onFilterRec(SkScalerContextR
+ rec->fTextSize = SkIntToScalar(1 << 14);
+ }
+
+- if (isLCD(*rec)) {
+- // TODO: re-work so that FreeType is set-up and selected by the SkFontMgr.
+- SkAutoMutexAcquire ama(gFTMutex);
+- ref_ft_library();
+- if (!gFTLibrary->isLCDSupported()) {
+- // If the runtime Freetype library doesn't support LCD, disable it here.
+- rec->fMaskFormat = SkMask::kA8_Format;
+- }
+- unref_ft_library();
+- }
+-
+ SkPaint::Hinting h = rec->getHinting();
+ if (SkPaint::kFull_Hinting == h && !isLCD(*rec)) {
+ // collapse full->normal hinting if we're not doing LCD
+@@ -1109,11 +1087,11 @@ bool SkScalerContext_FreeType::getCBoxForLetter(char l
+ void SkScalerContext_FreeType::updateGlyphIfLCD(SkGlyph* glyph) {
+ if (isLCD(fRec)) {
+ if (fLCDIsVert) {
+- glyph->fHeight += gFTLibrary->lcdExtra();
+- glyph->fTop -= gFTLibrary->lcdExtra() >> 1;
++ glyph->fHeight += 2;
++ glyph->fTop -= 1;
+ } else {
+- glyph->fWidth += gFTLibrary->lcdExtra();
+- glyph->fLeft -= gFTLibrary->lcdExtra() >> 1;
++ glyph->fWidth += 2;
++ glyph->fLeft -= 1;
+ }
+ }
+ }
diff --git a/devel/electron4/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp b/devel/electron4/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
new file mode 100644
index 000000000000..d7a6d0d3adff
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
@@ -0,0 +1,11 @@
+--- third_party/skia/src/ports/SkOSFile_stdio.cpp.orig 2019-03-15 06:41:36 UTC
++++ third_party/skia/src/ports/SkOSFile_stdio.cpp
+@@ -129,7 +129,7 @@ void sk_fflush(FILE* f) {
+
+ void sk_fsync(FILE* f) {
+ #if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \
+- && !defined(_NEWLIB_VERSION)
++ && !defined(_NEWLIB_VERSION) && !defined(__FreeBSD__)
+ int fd = fileno(f);
+ fsync(fd);
+ #endif
diff --git a/devel/electron4/files/patch-third__party_skia_src_sksl_SkSLString.h b/devel/electron4/files/patch-third__party_skia_src_sksl_SkSLString.h
new file mode 100644
index 000000000000..0006ccd1e37b
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_src_sksl_SkSLString.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/sksl/SkSLString.h.orig 2019-03-15 06:41:36 UTC
++++ third_party/skia/src/sksl/SkSLString.h
+@@ -22,6 +22,8 @@
+ #include "SkString.h"
+ #endif
+
++#include <stdarg.h>
++
+ namespace SkSL {
+
+ // Represents a (not necessarily null-terminated) slice of a string.
diff --git a/devel/electron4/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h b/devel/electron4/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
new file mode 100644
index 000000000000..17906c15830c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
@@ -0,0 +1,11 @@
+--- third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h.orig 2019-03-16 09:15:20 UTC
++++ third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+@@ -2232,7 +2232,7 @@ remove them if not needed.
+ #include <mutex> // for std::mutex
+ #include <atomic> // for std::atomic
+
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h> // for aligned_alloc()
+ #endif
+
diff --git a/devel/electron4/files/patch-third__party_snappy_src_snappy.h b/devel/electron4/files/patch-third__party_snappy_src_snappy.h
new file mode 100644
index 000000000000..df563c71e1cb
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_snappy_src_snappy.h
@@ -0,0 +1,20 @@
+--- third_party/snappy/src/snappy.h.orig 2019-03-19 09:09:00 UTC
++++ third_party/snappy/src/snappy.h
+@@ -73,7 +73,7 @@ namespace snappy {
+ // Original contents of *output are lost.
+ //
+ // REQUIRES: "input[]" is not an alias of "*output".
+- size_t Compress(const char* input, size_t input_length, string* output);
++ size_t Compress(const char* input, size_t input_length, std::string* output);
+
+ // Decompresses "compressed[0,compressed_length-1]" to "*uncompressed".
+ // Original contents of "*uncompressed" are lost.
+@@ -82,7 +82,7 @@ namespace snappy {
+ //
+ // returns false if the message is corrupted and could not be decompressed
+ bool Uncompress(const char* compressed, size_t compressed_length,
+- string* uncompressed);
++ std::string* uncompressed);
+
+ // Decompresses "compressed" to "*uncompressed".
+ //
diff --git a/devel/electron4/files/patch-third__party_sqlite_BUILD.gn b/devel/electron4/files/patch-third__party_sqlite_BUILD.gn
new file mode 100644
index 000000000000..3407106ed016
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_sqlite_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/sqlite/BUILD.gn.orig 2019-03-16 09:15:21 UTC
++++ third_party/sqlite/BUILD.gn
+@@ -240,7 +240,7 @@ config("sqlite_warnings") {
+ ]
+ }
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ cflags += [
+ # SQLite doesn't believe in compiler warnings, preferring testing.
+ # http://www.sqlite.org/faq.html#q17
diff --git a/devel/electron4/files/patch-third__party_swiftshader_BUILD.gn b/devel/electron4/files/patch-third__party_swiftshader_BUILD.gn
new file mode 100644
index 000000000000..bfbc8dbee204
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/swiftshader/BUILD.gn.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/BUILD.gn
+@@ -100,7 +100,6 @@ config("swiftshader_config") {
+
+ if (is_linux) {
+ ldflags = [
+- "-Wl,--hash-style=both",
+ "-Wl,--gc-sections",
+ ]
+
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_Common_Configurator.cpp b/devel/electron4/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
new file mode 100644
index 000000000000..81635f9b4123
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
@@ -0,0 +1,12 @@
+--- third_party/swiftshader/src/Common/Configurator.cpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/Common/Configurator.cpp
+@@ -42,6 +42,9 @@ namespace sw
+
+ bool Configurator::readFile()
+ {
++#if defined(__FreeBSD__)
++ return false;
++#endif
+ #if defined(__unix__)
+ if(access(path.c_str(), R_OK) != 0)
+ {
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp b/devel/electron4/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
new file mode 100644
index 000000000000..77b5638046b7
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/MutexLock.hpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/Common/MutexLock.hpp
+@@ -17,7 +17,7 @@
+
+ #include "Thread.hpp"
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ // Use a pthread mutex on Linux. Since many processes may use SwiftShader
+ // at the same time it's best to just have the scheduler overhead.
+ #include <pthread.h>
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp b/devel/electron4/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
new file mode 100644
index 000000000000..dfaf60d07695
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/SharedLibrary.hpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/Common/SharedLibrary.hpp
+@@ -115,7 +115,7 @@ void *loadLibrary(const std::string &libraryDirectory,
+
+ inline void *getLibraryHandle(const char *path)
+ {
+- #ifdef __ANDROID__
++ #if defined( __ANDROID__) || defined(__FreeBSD__)
+ // bionic doesn't support RTLD_NOLOAD before L
+ return dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp b/devel/electron4/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
new file mode 100644
index 000000000000..c96dff8a3c90
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
@@ -0,0 +1,14 @@
+--- third_party/swiftshader/src/Main/SwiftConfig.cpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/Main/SwiftConfig.cpp
+@@ -762,7 +762,11 @@ namespace sw
+ struct stat status;
+ int lastModified = ini.getInteger("LastModified", "Time", 0);
+
++#if !defined(__FreeBSD__)
+ bool noConfig = stat("SwiftShader.ini", &status) != 0;
++#else
++ bool noConfig = false;
++#endif
+ newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;
+
+ if(disableServerOverride)
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
new file mode 100644
index 000000000000..5573e799090b
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp
+@@ -119,7 +119,7 @@ EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
+ // FIXME: Check if display_id is the default display
+ }
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD)) && !defined(__ANDROID__)
+ #if defined(USE_X11)
+ if(!libX11)
+ #endif // Non X11 linux is headless only
+@@ -178,7 +178,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name)
+ {
+ return success(
+ "EGL_KHR_client_get_all_proc_addresses "
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ "EGL_KHR_platform_gbm "
+ #endif
+ #if defined(USE_X11)
+@@ -1172,7 +1172,7 @@ EGLDisplay GetPlatformDisplayEXT(EGLenum platform, voi
+ {
+ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ switch(platform)
+ {
+ #if defined(USE_X11)
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
new file mode 100644
index 000000000000..638f09a578b5
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp
+@@ -100,7 +100,7 @@ class LibEGL (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
+ #else
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
new file mode 100644
index 000000000000..6fa9fab484bd
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+@@ -261,7 +261,7 @@ class LibGLES_CM (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
+ #else
diff --git a/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
new file mode 100644
index 000000000000..01f956f6a603
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp.orig 2019-03-15 06:41:56 UTC
++++ third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp
+@@ -286,7 +286,7 @@ class LibGLESv2 (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+ #else
diff --git a/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h b/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..11d911e663ad
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h.orig 2019-03-15 06:30:14 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h
+@@ -121,7 +121,7 @@
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+@@ -130,7 +130,7 @@
+ /* #undef HAVE_MALLCTL */
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+ #define HAVE_MALLOC_H 1
+@@ -154,7 +154,7 @@
+ /* #undef HAVE_NDIR_H */
+
+ /* Define to 1 if you have the `posix_fallocate' function. */
+-#define HAVE_POSIX_FALLOCATE 1
++/* #undef HAVE_POSIX_FALLOCATE */
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+ #define HAVE_POSIX_SPAWN 1
diff --git a/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc b/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
new file mode 100644
index 000000000000..98bb3bcfd5d9
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc.orig 2019-03-15 06:30:14 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc
+@@ -35,7 +35,7 @@
+ // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for
+ // <stdlib.h> instead. Unix.h includes this for us already.
+ #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \
+- !defined(__OpenBSD__) && !defined(__Bitrig__)
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__Bitrig__)
+ #include <malloc.h>
+ #endif
+ #if defined(HAVE_MALLCTL)
diff --git a/devel/electron4/files/patch-third__party_usrsctp_BUILD.gn b/devel/electron4/files/patch-third__party_usrsctp_BUILD.gn
new file mode 100644
index 000000000000..39b9266d5b93
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_usrsctp_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/usrsctp/BUILD.gn.orig 2019-03-15 06:26:39 UTC
++++ third_party/usrsctp/BUILD.gn
+@@ -116,11 +116,16 @@ static_library("usrsctp") {
+ "-UINET6",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android ) {
+ defines += [
+ "__Userspace_os_Linux",
+ "_GNU_SOURCE",
+ ]
++ } else if (is_bsd) {
++ defines += [
++ "__Userspace_os_FreeBSD",
++ ]
++ cflags += [ "-U__FreeBSD__" ]
+ } else if (is_mac || is_ios) {
+ defines += [
+ "HAVE_SA_LEN",
diff --git a/devel/electron4/files/patch-third__party_webrtc_BUILD.gn b/devel/electron4/files/patch-third__party_webrtc_BUILD.gn
new file mode 100644
index 000000000000..c33559a7e7bf
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_BUILD.gn
@@ -0,0 +1,12 @@
+--- third_party/webrtc/BUILD.gn.orig 2019-03-15 06:42:00 UTC
++++ third_party/webrtc/BUILD.gn
+@@ -132,6 +132,9 @@ config("common_inherited_config") {
+ if (is_linux) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
diff --git a/devel/electron4/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn b/devel/electron4/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
new file mode 100644
index 000000000000..7b2b791b6e1c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/modules/audio_device/BUILD.gn.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/modules/audio_device/BUILD.gn
+@@ -331,7 +331,7 @@ rtc_source_set("audio_device_impl") {
+ if (rtc_use_dummy_audio_file_devices) {
+ defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
+ } else {
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/alsasymboltable_linux.cc",
+ "linux/alsasymboltable_linux.h",
diff --git a/devel/electron4/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/devel/electron4/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..2aaca46a6d00
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -13,6 +13,7 @@
+ #include <string.h>
+
+ #include <algorithm>
++#include <cstdlib>
+ #include <iterator>
+ #include <utility>
+
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_BUILD.gn b/devel/electron4/files/patch-third__party_webrtc_rtc__base_BUILD.gn
new file mode 100644
index 000000000000..0d9424e1f857
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/webrtc/rtc_base/BUILD.gn.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/BUILD.gn
+@@ -907,8 +907,6 @@ rtc_static_library("rtc_base_generic") {
+
+ if (rtc_use_x11) {
+ libs += [
+- "dl",
+- "rt",
+ "Xext",
+ "X11",
+ "Xcomposite",
+@@ -916,7 +914,7 @@ rtc_static_library("rtc_base_generic") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ libs += [
+ "dl",
+ "rt",
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_byteorder.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_byteorder.h
new file mode 100644
index 000000000000..10805aa87dfb
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_byteorder.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/byteorder.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/byteorder.h
+@@ -79,7 +79,7 @@
+ #error WEBRTC_ARCH_BIG_ENDIAN or WEBRTC_ARCH_LITTLE_ENDIAN must be defined.
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #endif
+
+ namespace rtc {
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_httpcommon.cc b/devel/electron4/files/patch-third__party_webrtc_rtc__base_httpcommon.cc
new file mode 100644
index 000000000000..e921dff4ac1e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_httpcommon.cc
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/httpcommon.cc.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/httpcommon.cc
+@@ -459,7 +459,7 @@ bool HttpDateToSeconds(const std::string& date, time_t
+ }
+ // TODO: Android should support timezone, see b/2441195
+ #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID) || \
+- defined(BSD)
++ defined(WEBRTC_BSD)
+ tm* tm_for_timezone = localtime(&gmt);
+ *seconds = gmt + tm_for_timezone->tm_gmtoff;
+ #else
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..d236fc85709e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/ifaddrs_converter.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs-android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_ipaddress.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_ipaddress.h
new file mode 100644
index 000000000000..326f5f7f696b
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_ipaddress.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/ipaddress.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/ipaddress.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.cc b/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.cc
new file mode 100644
index 000000000000..4a37e57af788
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.cc
@@ -0,0 +1,29 @@
+--- third_party/webrtc/rtc_base/network.cc.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/network.cc
+@@ -14,7 +14,7 @@
+ // linux/if.h can't be included at the same time as the posix sys/if.h, and
+ // it's transitively required by linux/route.h, so include that version on
+ // linux instead of the standard posix one.
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/if.h>
+ #include <linux/route.h>
+ #elif !defined(__native_client__)
+@@ -764,7 +764,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_
+ }
+ #endif // WEBRTC_WIN
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ bool IsDefaultRoute(const std::string& network_name) {
+ FileStream fs;
+ if (!fs.Open("/proc/net/route", "r", nullptr)) {
+@@ -805,7 +805,7 @@ bool BasicNetworkManager::IsIgnoredNetwork(const Netwo
+ strncmp(network.name().c_str(), "vboxnet", 7) == 0) {
+ return true;
+ }
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // Make sure this is a default route, if we're ignoring non-defaults.
+ if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
+ return true;
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.h
new file mode 100644
index 000000000000..f405694e5721
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/network.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/network.h
+@@ -24,6 +24,10 @@
+ #include "rtc_base/networkmonitor.h"
+ #include "rtc_base/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.cc b/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.cc
new file mode 100644
index 000000000000..9af2699fa32e
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.cc
@@ -0,0 +1,56 @@
+--- third_party/webrtc/rtc_base/physicalsocketserver.cc.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/physicalsocketserver.cc
+@@ -67,7 +67,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -295,7 +295,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ socklen_t optlen = sizeof(*value);
+ int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+ if (ret != -1 && opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ }
+@@ -308,7 +308,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ }
+@@ -318,7 +318,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ int PhysicalSocket::Send(const void* pv, size_t cb) {
+ int sent = DoSend(
+ s_, reinterpret_cast<const char*>(pv), static_cast<int>(cb),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. Without this, attempting to send on a socket whose
+ // other end is closed will result in a SIGPIPE signal being raised to
+ // our process, which by default will terminate the process, which we
+@@ -347,7 +347,7 @@ int PhysicalSocket::SendTo(const void* buffer,
+ size_t len = addr.ToSockAddrStorage(&saddr);
+ int sent =
+ DoSendTo(s_, static_cast<const char*>(buffer), static_cast<int>(length),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. See above for explanation.
+ MSG_NOSIGNAL,
+ #else
+@@ -538,7 +538,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.h
new file mode 100644
index 000000000000..b18898ad4cfb
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_physicalsocketserver.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/physicalsocketserver.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/physicalsocketserver.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICALSOCKETSERVER_H_
+ #define RTC_BASE_PHYSICALSOCKETSERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread.cc b/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread.cc
new file mode 100644
index 000000000000..3b822e535384
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread.cc
@@ -0,0 +1,12 @@
+--- third_party/webrtc/rtc_base/platform_thread.cc.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/platform_thread.cc
+@@ -15,7 +15,9 @@
+ #include "rtc_base/timeutils.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc b/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..d0f8365b95dd
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
@@ -0,0 +1,40 @@
+--- third_party/webrtc/rtc_base/platform_thread_types.cc.orig 2019-03-15 06:30:53 UTC
++++ third_party/webrtc/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,9 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -27,8 +29,10 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
+-#elif defined(WEBRTC_LINUX)
++#elif defined(WEBRTC_LINUX) && !defined(__FreeBSD__)
+ return syscall(__NR_gettid);
++#elif defined(__FreeBSD__)
++ return reinterpret_cast<uint64_t>(pthread_self());
+ #else
+ // Default implementation for nacl and solaris.
+ return reinterpret_cast<pid_t>(pthread_self());
+@@ -55,6 +59,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ struct {
+ DWORD dwType;
+@@ -72,6 +77,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/devel/electron4/files/patch-third__party_webrtc_rtc__base_stringutils.h b/devel/electron4/files/patch-third__party_webrtc_rtc__base_stringutils.h
new file mode 100644
index 000000000000..49896b83d015
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_rtc__base_stringutils.h
@@ -0,0 +1,17 @@
+--- third_party/webrtc/rtc_base/stringutils.h.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/rtc_base/stringutils.h
+@@ -24,11 +24,11 @@
+ #endif // WEBRTC_WIN
+
+ #if defined(WEBRTC_POSIX)
+-#ifdef BSD
++#if defined(WEBRTC_BSD) || defined(BSD)
+ #include <stdlib.h>
+-#else // BSD
++#else // WEBRTC_BSD
+ #include <alloca.h>
+-#endif // !BSD
++#endif // !WEBRTC_BSD
+ #endif // WEBRTC_POSIX
+
+ #include <string>
diff --git a/devel/electron4/files/patch-third__party_webrtc_system__wrappers_BUILD.gn b/devel/electron4/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..705c548fb8ea
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/system_wrappers/BUILD.gn.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/system_wrappers/BUILD.gn
+@@ -75,8 +75,6 @@ rtc_static_library("system_wrappers") {
+ if (!build_with_chromium) {
+ deps += [ ":cpu_features_linux" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_ios || is_mac) {
diff --git a/devel/electron4/files/patch-third__party_webrtc_webrtc.gni b/devel/electron4/files/patch-third__party_webrtc_webrtc.gni
new file mode 100644
index 000000000000..c27fafce71e3
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_webrtc_webrtc.gni
@@ -0,0 +1,11 @@
+--- third_party/webrtc/webrtc.gni.orig 2019-03-15 06:42:01 UTC
++++ third_party/webrtc/webrtc.gni
+@@ -206,7 +206,7 @@ rtc_libvpx_dir = "//third_party/libvpx"
+ rtc_opus_dir = "//third_party/opus"
+
+ # Desktop capturer is supported only on Windows, OSX and Linux.
+-rtc_desktop_capture_supported = is_win || is_mac || (is_linux && rtc_use_x11)
++rtc_desktop_capture_supported = is_win || is_mac || ((is_linux && rtc_use_x11) && !is_bsd)
+
+ ###############################################################################
+ # Templates
diff --git a/devel/electron4/files/patch-third__party_yasm_BUILD.gn b/devel/electron4/files/patch-third__party_yasm_BUILD.gn
new file mode 100644
index 000000000000..89e999d65f98
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_yasm_BUILD.gn
@@ -0,0 +1,16 @@
+--- third_party/yasm/BUILD.gn.orig 2019-03-15 06:38:25 UTC
++++ third_party/yasm/BUILD.gn
+@@ -60,7 +60,12 @@ if (current_toolchain == host_toolchain) {
+ # x86insn_nasm.c. These files were previously generated during the build but
+ # are now shipped pre-generated by yasm.
+ yasm_gen_include_dir = "$target_gen_dir/gen_include"
+- config_makefile = "source/config/Makefile"
++ # Hack for all BSD derivatives use OpenBSD include directory
++ if (is_bsd) {
++ config_makefile = "source/config/openbsd/Makefile"
++ } else {
++ config_makefile = "source/config/$host_os/Makefile"
++ }
+ version_file = "version.mac"
+
+ import("//build/compiled_action.gni")
diff --git a/devel/electron4/files/patch-third__party_zlib_BUILD.gn b/devel/electron4/files/patch-third__party_zlib_BUILD.gn
new file mode 100644
index 000000000000..c0a5cf7644b7
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_zlib_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/zlib/BUILD.gn.orig 2019-03-15 06:38:25 UTC
++++ third_party/zlib/BUILD.gn
+@@ -68,7 +68,7 @@ config("zlib_arm_crc32_config") {
+ if (is_android) {
+ defines += [ "ARMV8_OS_ANDROID" ]
+ } else if (is_linux || is_chromeos) {
+- defines += [ "ARMV8_OS_LINUX" ]
++# defines += [ "ARMV8_OS_LINUX" ]
+ }
+ }
+ }
+@@ -327,7 +327,7 @@ static_library("minizip") {
+ ]
+ }
+
+- if (is_mac || is_ios || is_android || is_nacl) {
++ if (is_mac || is_ios || is_android || is_nacl || is_bsd) {
+ # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We
+ # use fopen, ftell, and fseek instead on these systems.
+ defines = [ "USE_FILE32API" ]
diff --git a/devel/electron4/files/patch-third__party_zlib_arm__features.c b/devel/electron4/files/patch-third__party_zlib_arm__features.c
new file mode 100644
index 000000000000..ba73caed182c
--- /dev/null
+++ b/devel/electron4/files/patch-third__party_zlib_arm__features.c
@@ -0,0 +1,29 @@
+--- third_party/zlib/arm_features.c.orig 2019-03-15 06:38:25 UTC
++++ third_party/zlib/arm_features.c
+@@ -16,12 +16,13 @@
+ #include <asm/hwcap.h>
+ #include <sys/auxv.h>
+ #else
+-#error ### No ARM CPU features detection in your platform/OS
++/* #error ### No ARM CPU features detection in your platform/OS */
+ #endif
+
+ int ZLIB_INTERNAL arm_cpu_enable_crc32 = 0;
+ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+
++#ifdef ARMV8_OS_LINUX
+ static pthread_once_t cpu_check_inited_once = PTHREAD_ONCE_INIT;
+
+ static void init_arm_features(void)
+@@ -53,8 +54,11 @@ static void init_arm_features(void)
+ if (capabilities & flag_pmull)
+ arm_cpu_enable_pmull = 1;
+ }
++#endif
+
+ void ZLIB_INTERNAL arm_check_features(void)
+ {
++#ifdef ARMV8_OS_LINUX
+ pthread_once(&cpu_check_inited_once, init_arm_features);
++#endif
+ }
diff --git a/devel/electron4/files/patch-tools_gn_base_files_file__posix.cc b/devel/electron4/files/patch-tools_gn_base_files_file__posix.cc
new file mode 100644
index 000000000000..cd67de1b31bf
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_base_files_file__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_posix.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_posix.cc
+@@ -414,7 +414,7 @@ void File::DoInitialize(const FilePath& path, uint32_t
+ bool File::Flush() {
+ DCHECK(IsValid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !HANDLE_EINTR(fdatasync(file_.get()));
+ #else
+ return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/devel/electron4/files/patch-tools_gn_base_files_file__util.h b/devel/electron4/files/patch-tools_gn_base_files_file__util.h
new file mode 100644
index 000000000000..50e6f6d47d46
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_base_files_file__util.h
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util.h.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_util.h
+@@ -361,7 +361,7 @@ bool VerifyPathControlledByAdmin(const base::FilePath&
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron4/files/patch-tools_gn_base_files_file__util__posix.cc b/devel/electron4/files/patch-tools_gn_base_files_file__util__posix.cc
new file mode 100644
index 000000000000..9371e261d354
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util_posix.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_util_posix.cc
+@@ -254,7 +254,7 @@ bool ReplaceFile(const FilePath& from_path,
+ #endif // !defined(OS_NACL_NONSFI)
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron4/files/patch-tools_gn_base_files_scoped__file.cc b/devel/electron4/files/patch-tools_gn_base_files_scoped__file.cc
new file mode 100644
index 000000000000..62938b8813c6
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/scoped_file.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron4/files/patch-tools_gn_build_gen.py b/devel/electron4/files/patch-tools_gn_build_gen.py
new file mode 100644
index 000000000000..17c1d1dad583
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_build_gen.py
@@ -0,0 +1,33 @@
+--- tools/gn/build/gen.py.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/build/gen.py
+@@ -46,7 +46,7 @@ class Platform(object):
+
+ @staticmethod
+ def known_platforms():
+- return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd']
++ return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd', 'freebsd']
+
+ def platform(self):
+ return self._platform
+@@ -69,6 +69,9 @@ class Platform(object):
+ def is_aix(self):
+ return self._platform == 'aix'
+
++ def is_freebsd(self):
++ return self._platform == 'freebsd'
++
+ def is_posix(self):
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd']
+
+@@ -335,6 +338,11 @@ def WriteGNNinja(path, platform, host, options):
+ elif platform.is_aix():
+ cflags_cc.append('-maix64')
+ ldflags.append('-maix64')
++ elif platform.is_freebsd():
++ cflags.extend(['-Wno-deprecated-register', '-Wno-parentheses-equality'])
++ ldflags.extend(['-pthread'])
++ libs.extend(['-lexecinfo', '-lkvm', '-lutil'])
++ include_dirs += ['/usr/local/include']
+
+ if platform.is_posix():
+ ldflags.append('-pthread')
diff --git a/devel/electron4/files/patch-tools_gn_tools_gn_exec__process.cc b/devel/electron4/files/patch-tools_gn_tools_gn_exec__process.cc
new file mode 100644
index 000000000000..db7042144c3f
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_tools_gn_exec__process.cc
@@ -0,0 +1,13 @@
+--- tools/gn/tools/gn/exec_process.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/tools/gn/exec_process.cc
+@@ -29,6 +29,10 @@
+ #include "base/posix/file_descriptor_shuffle.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
++
+ namespace internal {
+
+ #if defined(OS_WIN)
diff --git a/devel/electron4/files/patch-tools_gn_util_sys__info.cc b/devel/electron4/files/patch-tools_gn_util_sys__info.cc
new file mode 100644
index 000000000000..408fd97444a1
--- /dev/null
+++ b/devel/electron4/files/patch-tools_gn_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- tools/gn/util/sys_info.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/util/sys_info.cc
+@@ -28,6 +28,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron4/files/patch-tools_json__schema__compiler_feature__compiler.py b/devel/electron4/files/patch-tools_json__schema__compiler_feature__compiler.py
new file mode 100644
index 000000000000..605bac419cf5
--- /dev/null
+++ b/devel/electron4/files/patch-tools_json__schema__compiler_feature__compiler.py
@@ -0,0 +1,10 @@
+--- tools/json_schema_compiler/feature_compiler.py.orig 2019-03-15 06:38:26 UTC
++++ tools/json_schema_compiler/feature_compiler.py
+@@ -205,6 +205,7 @@ FEATURE_GRAMMAR = (
+ 'enum_map': {
+ 'chromeos': 'Feature::CHROMEOS_PLATFORM',
+ 'linux': 'Feature::LINUX_PLATFORM',
++ 'bsd': 'Feature::LINUX_PLATFORM',
+ 'mac': 'Feature::MACOSX_PLATFORM',
+ 'win': 'Feature::WIN_PLATFORM',
+ }
diff --git a/devel/electron4/files/patch-tools_json__schema__compiler_model.py b/devel/electron4/files/patch-tools_json__schema__compiler_model.py
new file mode 100644
index 000000000000..ba410a564759
--- /dev/null
+++ b/devel/electron4/files/patch-tools_json__schema__compiler_model.py
@@ -0,0 +1,11 @@
+--- tools/json_schema_compiler/model.py.orig 2019-03-15 06:26:40 UTC
++++ tools/json_schema_compiler/model.py
+@@ -602,7 +602,7 @@ class Platforms(object):
+ """
+ CHROMEOS = _PlatformInfo("chromeos")
+ CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
+- LINUX = _PlatformInfo("linux")
++ LINUX = _PlatformInfo("bsd")
+ MAC = _PlatformInfo("mac")
+ WIN = _PlatformInfo("win")
+
diff --git a/devel/electron4/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn b/devel/electron4/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
new file mode 100644
index 000000000000..31950f5648a9
--- /dev/null
+++ b/devel/electron4/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
@@ -0,0 +1,11 @@
+--- tools/perf/chrome_telemetry_build/BUILD.gn.orig 2019-03-15 06:38:26 UTC
++++ tools/perf/chrome_telemetry_build/BUILD.gn
+@@ -44,7 +44,7 @@ group("telemetry_chrome_test") {
+ data_deps += [ "//chrome:reorder_imports" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
diff --git a/devel/electron4/files/patch-tools_variations_fieldtrial__to__struct.py b/devel/electron4/files/patch-tools_variations_fieldtrial__to__struct.py
new file mode 100644
index 000000000000..efaf20b67755
--- /dev/null
+++ b/devel/electron4/files/patch-tools_variations_fieldtrial__to__struct.py
@@ -0,0 +1,10 @@
+--- tools/variations/fieldtrial_to_struct.py.orig 2019-03-15 06:26:43 UTC
++++ tools/variations/fieldtrial_to_struct.py
+@@ -24,6 +24,7 @@ finally:
+ _platforms = [
+ 'android',
+ 'android_webview',
++ 'freebsd',
+ 'chromeos',
+ 'fuchsia',
+ 'ios',
diff --git a/devel/electron4/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc b/devel/electron4/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
new file mode 100644
index 000000000000..398daaa0da94
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
@@ -0,0 +1,20 @@
+--- ui/base/dragdrop/os_exchange_data_provider_factory.cc.orig 2019-03-15 06:26:43 UTC
++++ ui/base/dragdrop/os_exchange_data_provider_factory.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(USE_X11)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+ #elif defined(OS_MACOSX)
+ #include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
+@@ -42,7 +42,7 @@ OSExchangeDataProviderFactory::CreateProvider() {
+
+ #if defined(USE_X11)
+ return std::make_unique<OSExchangeDataProviderAuraX11>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<OSExchangeDataProviderAura>();
+ #elif defined(OS_MACOSX)
+ return ui::BuildOSExchangeDataProviderMac();
diff --git a/devel/electron4/files/patch-ui_base_ime_ime__engine__handler__interface.h b/devel/electron4/files/patch-ui_base_ime_ime__engine__handler__interface.h
new file mode 100644
index 000000000000..1b5d84d6e7f5
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_ime_ime__engine__handler__interface.h
@@ -0,0 +1,11 @@
+--- ui/base/ime/ime_engine_handler_interface.h.orig 2019-03-15 06:38:27 UTC
++++ ui/base/ime/ime_engine_handler_interface.h
+@@ -162,7 +162,7 @@ class UI_BASE_IME_EXPORT IMEEngineHandlerInterface {
+ // Hides the input view window (from API call).
+ virtual void HideInputView() = 0;
+
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // Get the id of the IME extension.
+ virtual std::string GetExtensionId() const = 0;
diff --git a/devel/electron4/files/patch-ui_base_ime_input__method__initializer.cc b/devel/electron4/files/patch-ui_base_ime_input__method__initializer.cc
new file mode 100644
index 000000000000..c1d1849078d2
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_ime_input__method__initializer.cc
@@ -0,0 +1,38 @@
+--- ui/base/ime/input_method_initializer.cc.orig 2019-03-15 06:26:43 UTC
++++ ui/base/ime/input_method_initializer.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/base/ime/ime_bridge.h"
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/logging.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
+ #elif defined(OS_WIN)
+@@ -18,7 +18,7 @@
+
+ namespace {
+
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const ui::LinuxInputMethodContextFactory*
+ g_linux_input_method_context_factory_for_testing;
+ #endif
+@@ -46,7 +46,7 @@ void ShutdownInputMethod() {
+ void InitializeInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Initialize();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ if (!g_linux_input_method_context_factory_for_testing)
+ g_linux_input_method_context_factory_for_testing =
+ new FakeInputMethodContextFactory();
+@@ -67,7 +67,7 @@ void InitializeInputMethodForTesting() {
+ void ShutdownInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Shutdown();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxInputMethodContextFactory* factory =
+ LinuxInputMethodContextFactory::instance();
+ CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
diff --git a/devel/electron4/files/patch-ui_base_resource_resource__bundle.cc b/devel/electron4/files/patch-ui_base_resource_resource__bundle.cc
new file mode 100644
index 000000000000..2676a9494f09
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_resource_resource__bundle.cc
@@ -0,0 +1,20 @@
+--- ui/base/resource/resource_bundle.cc.orig 2019-03-15 06:38:27 UTC
++++ ui/base/resource/resource_bundle.cc
+@@ -720,7 +720,7 @@ void ResourceBundle::ReloadFonts() {
+ }
+
+ ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ return max_scale_factor_;
+ #else
+ return GetSupportedScaleFactors().back();
+@@ -766,7 +766,7 @@ void ResourceBundle::InitSharedInstance(Delegate* dele
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ // For Windows we have a separate case in this function.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ #endif
+ #endif
diff --git a/devel/electron4/files/patch-ui_base_resource_resource__bundle__freebsd.cc b/devel/electron4/files/patch-ui_base_resource_resource__bundle__freebsd.cc
new file mode 100644
index 000000000000..7e8a1a3ff7dc
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_resource_resource__bundle__freebsd.cc
@@ -0,0 +1,24 @@
+--- ui/base/resource/resource_bundle_freebsd.cc.orig 2019-03-16 09:18:33 UTC
++++ ui/base/resource/resource_bundle_freebsd.cc
+@@ -0,0 +1,21 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ui/base/resource/resource_bundle.h"
++
++#include "base/logging.h"
++#include "base/macros.h"
++#include "ui/gfx/image/image.h"
++
++namespace ui {
++
++void ResourceBundle::LoadCommonResources() {
++ LoadChromeResources();
++}
++
++gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id) {
++ return GetImageNamed(resource_id);
++}
++
++} // namespace ui
diff --git a/devel/electron4/files/patch-ui_base_ui__base__features.cc b/devel/electron4/files/patch-ui_base_ui__base__features.cc
new file mode 100644
index 000000000000..4fc705e86fe1
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_ui__base__features.cc
@@ -0,0 +1,20 @@
+--- ui/base/ui_base_features.cc.orig 2019-03-16 09:15:20 UTC
++++ ui/base/ui_base_features.cc
+@@ -120,7 +120,7 @@ const base::Feature kPrecisionTouchpadScrollPhase{
+ "PrecisionTouchpadScrollPhase", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables stylus appearing as touch when in contact with digitizer.
+ const base::Feature kDirectManipulationStylus = {
+ "DirectManipulationStylus",
+@@ -130,7 +130,7 @@ const base::Feature kDirectManipulationStylus = {
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #endif
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const base::Feature kMash = {"Mash", base::FEATURE_DISABLED_BY_DEFAULT};
+
diff --git a/devel/electron4/files/patch-ui_base_ui__base__features.h b/devel/electron4/files/patch-ui_base_ui__base__features.h
new file mode 100644
index 000000000000..228bed5866e8
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_ui__base__features.h
@@ -0,0 +1,14 @@
+--- ui/base/ui_base_features.h.orig 2019-03-15 06:38:27 UTC
++++ ui/base/ui_base_features.h
+@@ -43,9 +43,9 @@ UI_BASE_EXPORT extern const base::Feature kTSFImeSuppo
+ UI_BASE_EXPORT bool IsUsingWMPointerForTouch();
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ UI_BASE_EXPORT extern const base::Feature kDirectManipulationStylus;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Used to have ash (Chrome OS system UI) run in its own process.
+ // TODO(jamescook): Make flag only available in Chrome OS.
diff --git a/devel/electron4/files/patch-ui_base_webui_web__ui__util.cc b/devel/electron4/files/patch-ui_base_webui_web__ui__util.cc
new file mode 100644
index 000000000000..01efb48bf550
--- /dev/null
+++ b/devel/electron4/files/patch-ui_base_webui_web__ui__util.cc
@@ -0,0 +1,11 @@
+--- ui/base/webui/web_ui_util.cc.orig 2019-03-15 06:26:43 UTC
++++ ui/base/webui/web_ui_util.cc
+@@ -217,7 +217,7 @@ std::string GetFontFamily() {
+
+ // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced
+ // into Ozone: crbug.com/320050
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ font_family = ui::ResourceBundle::GetSharedInstance().GetFont(
+ ui::ResourceBundle::BaseFont).GetFontName() + ", " + font_family;
+ #endif
diff --git a/devel/electron4/files/patch-ui_events_devices_x11_device__data__manager__x11.cc b/devel/electron4/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
new file mode 100644
index 000000000000..1aaf1647bc0b
--- /dev/null
+++ b/devel/electron4/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
@@ -0,0 +1,19 @@
+--- ui/events/devices/x11/device_data_manager_x11.cc.orig 2019-03-15 06:38:27 UTC
++++ ui/events/devices/x11/device_data_manager_x11.cc
+@@ -829,6 +829,8 @@ void DeviceDataManagerX11::SetDisabledKeyboardAllowedK
+ }
+
+ void DeviceDataManagerX11::DisableDevice(int deviceid) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ blocked_devices_.set(deviceid, true);
+ // TODO(rsadam@): Support blocking touchscreen devices.
+ std::vector<InputDevice> keyboards = GetKeyboardDevices();
+@@ -840,6 +842,7 @@ void DeviceDataManagerX11::DisableDevice(int deviceid)
+ keyboards.erase(it);
+ DeviceDataManager::OnKeyboardDevicesUpdated(keyboards);
+ }
++#endif
+ }
+
+ void DeviceDataManagerX11::EnableDevice(int deviceid) {
diff --git a/devel/electron4/files/patch-ui_events_event__switches.cc b/devel/electron4/files/patch-ui_events_event__switches.cc
new file mode 100644
index 000000000000..1abe4f4d87b6
--- /dev/null
+++ b/devel/electron4/files/patch-ui_events_event__switches.cc
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.cc.orig 2019-03-15 06:38:27 UTC
++++ ui/events/event_switches.cc
+@@ -17,7 +17,7 @@ const char kEnableScrollPrediction[] = "enable-scroll-
+ const char kCompensateForUnstablePinchZoom[] =
+ "compensate-for-unstable-pinch-zoom";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ // Tells chrome to interpret events from these devices as touch events. Only
+ // available with XInput 2 (i.e. X server 1.8 or above). The id's of the
+ // devices can be retrieved from 'xinput list'.
diff --git a/devel/electron4/files/patch-ui_events_event__switches.h b/devel/electron4/files/patch-ui_events_event__switches.h
new file mode 100644
index 000000000000..c108eddfd102
--- /dev/null
+++ b/devel/electron4/files/patch-ui_events_event__switches.h
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.h.orig 2019-03-15 06:38:27 UTC
++++ ui/events/event_switches.h
+@@ -14,7 +14,7 @@ namespace switches {
+ EVENTS_BASE_EXPORT extern const char kEnableScrollPrediction[];
+ EVENTS_BASE_EXPORT extern const char kCompensateForUnstablePinchZoom[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ EVENTS_BASE_EXPORT extern const char kTouchDevices[];
+ EVENTS_BASE_EXPORT extern const char kPenDevices[];
+ #endif
diff --git a/devel/electron4/files/patch-ui_events_keycodes_dom_keycode__converter.cc b/devel/electron4/files/patch-ui_events_keycodes_dom_keycode__converter.cc
new file mode 100644
index 000000000000..32924a65ea0a
--- /dev/null
+++ b/devel/electron4/files/patch-ui_events_keycodes_dom_keycode__converter.cc
@@ -0,0 +1,11 @@
+--- ui/events/keycodes/dom/keycode_converter.cc.orig 2019-03-15 06:38:27 UTC
++++ ui/events/keycodes/dom/keycode_converter.cc
+@@ -20,7 +20,7 @@ namespace {
+ // and DOM Level 3 |code| strings.
+ #if defined(OS_WIN)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, win, code}
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, xkb, code}
+ #elif defined(OS_MACOSX)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, mac, code}
diff --git a/devel/electron4/files/patch-ui_gfx_BUILD.gn b/devel/electron4/files/patch-ui_gfx_BUILD.gn
new file mode 100644
index 000000000000..39910503a685
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gfx/BUILD.gn.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/BUILD.gn
+@@ -572,7 +572,7 @@ source_set("memory_buffer_sources") {
+ deps += [ "//third_party/libdrm" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux || is_android) && !is_bsd) {
+ deps += [ "//third_party/libsync" ]
+ }
+
diff --git a/devel/electron4/files/patch-ui_gfx_canvas__skia.cc b/devel/electron4/files/patch-ui_gfx_canvas__skia.cc
new file mode 100644
index 000000000000..32a258735fdf
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_canvas__skia.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/canvas_skia.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/canvas_skia.cc
+@@ -208,7 +208,7 @@ void Canvas::DrawStringRectWithFlags(const base::strin
+ Range range = StripAcceleratorChars(flags, &adjusted_text);
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, eliding really means fading the end of the string. But only
+ // for LTR text. RTL text is still elided (on the left) with "...".
+ if (elide_text) {
diff --git a/devel/electron4/files/patch-ui_gfx_codec_jpeg__codec.cc b/devel/electron4/files/patch-ui_gfx_codec_jpeg__codec.cc
new file mode 100644
index 000000000000..3c8a0151087b
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_codec_jpeg__codec.cc
@@ -0,0 +1,20 @@
+--- ui/gfx/codec/jpeg_codec.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/codec/jpeg_codec.cc
+@@ -219,6 +219,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // Choose an output colorspace and return if it is an unsupported one.
+ // Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+@@ -237,6 +238,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ NOTREACHED() << "Invalid pixel format";
+ return false;
+ }
++#else
++ cinfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
diff --git a/devel/electron4/files/patch-ui_gfx_font__fallback__linux.cc b/devel/electron4/files/patch-ui_gfx_font__fallback__linux.cc
new file mode 100644
index 000000000000..b9a974af937a
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_font__fallback__linux.cc
@@ -0,0 +1,13 @@
+--- ui/gfx/font_fallback_linux.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/font_fallback_linux.cc
+@@ -15,6 +15,10 @@
+ #include "base/memory/ptr_util.h"
+ #include "ui/gfx/font.h"
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ namespace gfx {
+
+ namespace {
diff --git a/devel/electron4/files/patch-ui_gfx_font__list.cc b/devel/electron4/files/patch-ui_gfx_font__list.cc
new file mode 100644
index 000000000000..1bfc9560ae4f
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_font__list.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/font_list.cc.orig 2019-03-15 06:26:44 UTC
++++ ui/gfx/font_list.cc
+@@ -24,7 +24,7 @@ base::LazyInstance<scoped_refptr<gfx::FontListImpl>>::
+ bool g_default_impl_initialized = false;
+
+ bool IsFontFamilyAvailable(const std::string& family, SkFontMgr* fontManager) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !!fontManager->legacyMakeTypeface(family.c_str(), SkFontStyle());
+ #else
+ sk_sp<SkFontStyleSet> set(fontManager->matchFamily(family.c_str()));
diff --git a/devel/electron4/files/patch-ui_gfx_font__render__params.h b/devel/electron4/files/patch-ui_gfx_font__render__params.h
new file mode 100644
index 000000000000..dd0c428d0b32
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_font__render__params.h
@@ -0,0 +1,18 @@
+--- ui/gfx/font_render_params.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/font_render_params.h
+@@ -111,13 +111,13 @@ GFX_EXPORT FontRenderParams GetFontRenderParams(
+ const FontRenderParamsQuery& query,
+ std::string* family_out);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are
+ // changing Fontconfig's configuration.
+ GFX_EXPORT void ClearFontRenderParamsCacheForTest();
+ #endif
+
+-#if defined(OS_LINUX) || (defined(OS_ANDROID) && BUILDFLAG(ENABLE_VR))
++#if defined(OS_LINUX) || (defined(OS_ANDROID) && BUILDFLAG(ENABLE_VR)) || defined(OS_BSD)
+ // Gets the device scale factor to query the FontRenderParams.
+ GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
+
diff --git a/devel/electron4/files/patch-ui_gfx_gpu__memory__buffer.h b/devel/electron4/files/patch-ui_gfx_gpu__memory__buffer.h
new file mode 100644
index 000000000000..aa2b8ce19449
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_gpu__memory__buffer.h
@@ -0,0 +1,20 @@
+--- ui/gfx/gpu_memory_buffer.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/gpu_memory_buffer.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ #include "ui/gfx/mac/io_surface.h"
+@@ -57,7 +57,7 @@ struct GFX_EXPORT GpuMemoryBufferHandle {
+ base::SharedMemoryHandle handle;
+ uint32_t offset;
+ int32_t stride;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ NativePixmapHandle native_pixmap_handle;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ ScopedRefCountedIOSurfaceMachPort mach_port;
diff --git a/devel/electron4/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h b/devel/electron4/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
new file mode 100644
index 000000000000..9f13d36dd3c5
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
@@ -0,0 +1,29 @@
+--- ui/gfx/ipc/gfx_param_traits_macros.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/ipc/gfx_param_traits_macros.h
+@@ -18,7 +18,7 @@
+ #include "ui/gfx/selection_bound.h"
+ #include "ui/gfx/swap_result.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #endif
+
+@@ -51,7 +51,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferHandle)
+ IPC_STRUCT_TRAITS_MEMBER(handle)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(native_pixmap_handle)
+ #elif defined(OS_MACOSX)
+ IPC_STRUCT_TRAITS_MEMBER(mach_port)
+@@ -66,7 +66,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferId)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_END()
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapPlane)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
diff --git a/devel/electron4/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc b/devel/electron4/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
new file mode 100644
index 000000000000..0bfbc00496ad
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/linux/client_native_pixmap_dmabuf.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/linux/client_native_pixmap_dmabuf.cc
+@@ -5,7 +5,9 @@
+ #include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
+
+ #include <fcntl.h>
++#if !defined(__FreeBSD__)
+ #include <linux/version.h>
++#endif
+ #include <stddef.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+@@ -17,11 +19,7 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/trace_event/trace_event.h"
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+-#include <linux/dma-buf.h>
+-#else
+-#include <linux/types.h>
+-
++#if defined(__FreeBSD__)
+ struct dma_buf_sync {
+ __u64 flags;
+ };
diff --git a/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc b/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
new file mode 100644
index 000000000000..25e9e31b6b1c
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
@@ -0,0 +1,42 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.cc
+@@ -27,10 +27,10 @@ std::vector<mojo::ScopedHandle>
+ StructTraits<gfx::mojom::NativePixmapHandleDataView, gfx::NativePixmapHandle>::
+ fds(const gfx::NativePixmapHandle& pixmap_handle) {
+ std::vector<mojo::ScopedHandle> handles;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (const base::FileDescriptor& fd : pixmap_handle.fds)
+ handles.emplace_back(mojo::WrapPlatformFile(fd.fd));
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ return handles;
+ }
+
+@@ -38,7 +38,7 @@ bool StructTraits<
+ gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle>::Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::ArrayDataView<mojo::ScopedHandle> handles_data_view;
+ data.GetFdsDataView(&handles_data_view);
+ for (size_t i = 0; i < handles_data_view.size(); ++i) {
+@@ -71,7 +71,7 @@ const gfx::NativePixmapHandle&
+ StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
+ gfx::GpuMemoryBufferHandle>::
+ native_pixmap_handle(const gfx::GpuMemoryBufferHandle& handle) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return handle.native_pixmap_handle;
+ #else
+ static gfx::NativePixmapHandle pixmap_handle;
+@@ -154,7 +154,7 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDat
+ out->offset = data.offset();
+ out->stride = data.stride();
+ }
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (out->type == gfx::NATIVE_PIXMAP &&
+ !data.ReadNativePixmapHandle(&out->native_pixmap_handle))
+ return false;
diff --git a/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h b/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
new file mode 100644
index 000000000000..2e6549b7902c
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
@@ -0,0 +1,11 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.h
+@@ -291,7 +291,7 @@ template <>
+ struct StructTraits<gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle> {
+ static bool IsNull(const gfx::NativePixmapHandle& handle) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return false;
+ #else
+ // NativePixmapHandle are not used on non-linux platforms.
diff --git a/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.cc b/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.cc
new file mode 100644
index 000000000000..e6e30eb3e98b
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.cc
@@ -0,0 +1,28 @@
+--- ui/gfx/native_pixmap_handle.cc.orig 2019-03-15 06:26:44 UTC
++++ ui/gfx/native_pixmap_handle.cc
+@@ -4,14 +4,14 @@
+
+ #include "ui/gfx/native_pixmap_handle.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <drm_fourcc.h>
+ #include "base/posix/eintr_wrapper.h"
+ #endif
+
+ namespace gfx {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static_assert(NativePixmapPlane::kNoModifier == DRM_FORMAT_MOD_INVALID,
+ "gfx::NativePixmapPlane::kNoModifier should be an alias for"
+ "DRM_FORMAT_MOD_INVALID");
+@@ -36,7 +36,7 @@ NativePixmapHandle::NativePixmapHandle(const NativePix
+
+ NativePixmapHandle::~NativePixmapHandle() {}
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
+ NativePixmapHandle clone;
+ std::vector<base::ScopedFD> scoped_fds;
diff --git a/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.h b/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.h
new file mode 100644
index 000000000000..121b259ef55a
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_native__pixmap__handle.h
@@ -0,0 +1,28 @@
+--- ui/gfx/native_pixmap_handle.h.orig 2019-03-15 06:26:44 UTC
++++ ui/gfx/native_pixmap_handle.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/file_descriptor_posix.h"
+ #endif
+
+@@ -54,14 +54,14 @@ struct GFX_EXPORT NativePixmapHandle {
+
+ ~NativePixmapHandle();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // File descriptors for the underlying memory objects (usually dmabufs).
+ std::vector<base::FileDescriptor> fds;
+ #endif
+ std::vector<NativePixmapPlane> planes;
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns an instance of |handle| which can be sent over IPC. This duplicates
+ // the file-handles, so that the IPC code take ownership of them, without
+ // invalidating |handle|.
diff --git a/devel/electron4/files/patch-ui_gfx_render__text.cc b/devel/electron4/files/patch-ui_gfx_render__text.cc
new file mode 100644
index 000000000000..417ab322a581
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gfx_render__text.cc
@@ -0,0 +1,46 @@
+--- ui/gfx/render_text.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gfx/render_text.cc
+@@ -942,32 +942,33 @@ void RenderText::SetDisplayOffset(int horizontal_offse
+ const int extra_content = GetContentWidth() - display_rect_.width();
+ const int cursor_width = cursor_enabled_ ? 1 : 0;
+
+- int min_offset = 0;
+- int max_offset = 0;
++ // avoid collisions with vm_map.h on FreeBSD --cmt
++ int _min_offset = 0;
++ int _max_offset = 0;
+ if (extra_content > 0) {
+ switch (GetCurrentHorizontalAlignment()) {
+ case ALIGN_LEFT:
+- min_offset = -extra_content;
++ _min_offset = -extra_content;
+ break;
+ case ALIGN_RIGHT:
+- max_offset = extra_content;
++ _max_offset = extra_content;
+ break;
+ case ALIGN_CENTER:
+ // The extra space reserved for cursor at the end of the text is ignored
+ // when centering text. So, to calculate the valid range for offset, we
+ // exclude that extra space, calculate the range, and add it back to the
+ // range (if cursor is enabled).
+- min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
+- max_offset = (extra_content - cursor_width) / 2;
++ _min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
++ _max_offset = (extra_content - cursor_width) / 2;
+ break;
+ default:
+ break;
+ }
+ }
+- if (horizontal_offset < min_offset)
+- horizontal_offset = min_offset;
+- else if (horizontal_offset > max_offset)
+- horizontal_offset = max_offset;
++ if (horizontal_offset < _min_offset)
++ horizontal_offset = _min_offset;
++ else if (horizontal_offset > _max_offset)
++ horizontal_offset = _max_offset;
+
+ cached_bounds_and_offset_valid_ = true;
+ display_offset_.set_x(horizontal_offset);
diff --git a/devel/electron4/files/patch-ui_gl_BUILD.gn b/devel/electron4/files/patch-ui_gl_BUILD.gn
new file mode 100644
index 000000000000..a564bd3ba249
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gl/BUILD.gn.orig 2019-03-15 06:38:28 UTC
++++ ui/gl/BUILD.gn
+@@ -209,7 +209,7 @@ component("gl") {
+ }
+ }
+
+- if (is_posix && !is_fuchsia && !is_mac) {
++ if (is_posix && !is_fuchsia && !is_mac && !is_bsd) {
+ # Windows has USE_EGL but doesn't support base::FileDescriptor.
+ # libsync isn't supported or needed on MacOSX.
+ # Fuchsia is excluded due to a libsync dependency and because it's
diff --git a/devel/electron4/files/patch-ui_gl_generate__bindings.py b/devel/electron4/files/patch-ui_gl_generate__bindings.py
new file mode 100644
index 000000000000..9d1377de5121
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_generate__bindings.py
@@ -0,0 +1,12 @@
+--- ui/gl/generate_bindings.py.orig 2019-03-15 06:38:28 UTC
++++ ui/gl/generate_bindings.py
+@@ -2347,6 +2347,9 @@ GLX_FUNCTIONS = [
+ 'arguments':
+ 'Display* dpy, GLXDrawable drawable, int32_t* numerator, '
+ 'int32_t* denominator' },
++{ 'return_type': '__GLXextFuncPtr',
++ 'names': ['glXGetProcAddressARB'],
++ 'arguments': 'const GLubyte* procName', },
+ { 'return_type': 'void',
+ 'names': ['glXGetSelectedEvent'],
+ 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
diff --git a/devel/electron4/files/patch-ui_gl_gl__bindings__api__autogen__glx.h b/devel/electron4/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
new file mode 100644
index 000000000000..466082e3789a
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
@@ -0,0 +1,10 @@
+--- ui/gl/gl_bindings_api_autogen_glx.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gl/gl_bindings_api_autogen_glx.h
+@@ -84,6 +84,7 @@ bool glXGetMscRateOMLFn(Display* dpy,
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) override;
++__GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) override;
+ void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) override;
diff --git a/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.cc b/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.cc
new file mode 100644
index 000000000000..a06b87288b6e
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.cc
@@ -0,0 +1,61 @@
+--- ui/gl/gl_bindings_autogen_glx.cc.orig 2019-03-15 06:26:44 UTC
++++ ui/gl/gl_bindings_autogen_glx.cc
+@@ -115,6 +115,8 @@ void DriverGLX::InitializeExtensionBindings() {
+
+ ext.b_GLX_ARB_create_context =
+ gfx::HasExtension(extensions, "GLX_ARB_create_context");
++ ext.b_GLX_ARB_get_proc_address =
++ gfx::HasExtension(extensions, "GLX_ARB_get_proc_address");
+ ext.b_GLX_EXT_swap_control =
+ gfx::HasExtension(extensions, "GLX_EXT_swap_control");
+ ext.b_GLX_EXT_texture_from_pixmap =
+@@ -145,6 +147,11 @@ void DriverGLX::InitializeExtensionBindings() {
+ GetGLProcAddress("glXCreateContextAttribsARB"));
+ }
+
++ if (ext.b_GLX_ARB_get_proc_address) {
++ fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
++ GetGLProcAddress("glXGetProcAddressARB"));
++ }
++
+ if (ext.b_GLX_SGIX_fbconfig) {
+ fn.glXGetFBConfigFromVisualSGIXFn =
+ reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+@@ -346,6 +353,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
+ return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
++ return driver_->fn.glXGetProcAddressARBFn(procName);
++}
++
+ void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -646,6 +657,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
++ return glx_api_->glXGetProcAddressARBFn(procName);
++}
++
+ void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -1068,6 +1084,14 @@ bool DebugGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ << static_cast<const void*>(denominator) << ")");
+ bool result =
+ glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
++ GL_SERVICE_LOG("GL_RESULT: " << result);
++ return result;
++}
++
++__GLXextFuncPtr DebugGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ GL_SERVICE_LOG("glXGetProcAddressARB"
++ << "(" << static_cast<const void*>(procName) << ")");
++ __GLXextFuncPtr result = glx_api_->glXGetProcAddressARBFn(procName);
+ GL_SERVICE_LOG("GL_RESULT: " << result);
+ return result;
+ }
diff --git a/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.h b/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.h
new file mode 100644
index 000000000000..0c706e183054
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_gl__bindings__autogen__glx.h
@@ -0,0 +1,43 @@
+--- ui/gl/gl_bindings_autogen_glx.h.orig 2019-03-15 06:26:44 UTC
++++ ui/gl/gl_bindings_autogen_glx.h
+@@ -104,6 +104,8 @@ typedef bool(GL_BINDING_CALL* glXGetMscRateOMLProc)(Di
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator);
++typedef __GLXextFuncPtr(GL_BINDING_CALL* glXGetProcAddressARBProc)(
++ const GLubyte* procName);
+ typedef void(GL_BINDING_CALL* glXGetSelectedEventProc)(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask);
+@@ -166,6 +168,7 @@ typedef void(GL_BINDING_CALL* glXWaitXProc)(void);
+
+ struct ExtensionsGLX {
+ bool b_GLX_ARB_create_context;
++ bool b_GLX_ARB_get_proc_address;
+ bool b_GLX_EXT_swap_control;
+ bool b_GLX_EXT_texture_from_pixmap;
+ bool b_GLX_MESA_copy_sub_buffer;
+@@ -203,6 +206,7 @@ struct ProcsGLX {
+ glXGetFBConfigFromVisualSGIXProc glXGetFBConfigFromVisualSGIXFn;
+ glXGetFBConfigsProc glXGetFBConfigsFn;
+ glXGetMscRateOMLProc glXGetMscRateOMLFn;
++ glXGetProcAddressARBProc glXGetProcAddressARBFn;
+ glXGetSelectedEventProc glXGetSelectedEventFn;
+ glXGetSyncValuesOMLProc glXGetSyncValuesOMLFn;
+ glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigFn;
+@@ -310,6 +314,7 @@ class GL_EXPORT GLXApi {
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) = 0;
++ virtual __GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) = 0;
+ virtual void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) = 0;
+@@ -394,6 +399,7 @@ class GL_EXPORT GLXApi {
+ ::gl::g_current_glx_context->glXGetFBConfigFromVisualSGIXFn
+ #define glXGetFBConfigs ::gl::g_current_glx_context->glXGetFBConfigsFn
+ #define glXGetMscRateOML ::gl::g_current_glx_context->glXGetMscRateOMLFn
++#define glXGetProcAddressARB ::gl::g_current_glx_context->glXGetProcAddressARBFn
+ #define glXGetSelectedEvent ::gl::g_current_glx_context->glXGetSelectedEventFn
+ #define glXGetSyncValuesOML ::gl::g_current_glx_context->glXGetSyncValuesOMLFn
+ #define glXGetVisualFromFBConfig \
diff --git a/devel/electron4/files/patch-ui_gl_gl__fence.cc b/devel/electron4/files/patch-ui_gl_gl__fence.cc
new file mode 100644
index 000000000000..f45c46314199
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_gl__fence.cc
@@ -0,0 +1,11 @@
+--- ui/gl/gl_fence.cc.orig 2019-03-15 06:26:44 UTC
++++ ui/gl/gl_fence.cc
+@@ -18,7 +18,7 @@
+ #include "ui/gl/gl_fence_apple.h"
+ #endif
+
+-#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ #define USE_GL_FENCE_ANDROID_NATIVE_FENCE_SYNC
+ #include "ui/gl/gl_fence_android_native_fence_sync.h"
+ #include "ui/gl/gl_surface_egl.h"
diff --git a/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.cc b/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.cc
new file mode 100644
index 000000000000..8fbfd8957503
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.cc
@@ -0,0 +1,43 @@
+--- ui/gl/sync_control_vsync_provider.cc.orig 2019-03-15 06:38:28 UTC
++++ ui/gl/sync_control_vsync_provider.cc
+@@ -11,7 +11,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // These constants define a reasonable range for a calculated refresh interval.
+ // Calculating refreshes out of this range will be considered a fatal error.
+ const int64_t kMinVsyncIntervalUs = base::Time::kMicrosecondsPerSecond / 400;
+@@ -26,7 +26,7 @@ const double kRelativeIntervalDifferenceThreshold = 0.
+ namespace gl {
+
+ SyncControlVSyncProvider::SyncControlVSyncProvider() : gfx::VSyncProvider() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On platforms where we can't get an accurate reading on the refresh
+ // rate we fall back to the assumption that we're displaying 60 frames
+ // per second.
+@@ -48,7 +48,7 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ base::TimeTicks* timebase_out,
+ base::TimeDelta* interval_out) {
+ TRACE_EVENT0("gpu", "SyncControlVSyncProvider::GetVSyncParameters");
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The actual clock used for the system time returned by glXGetSyncValuesOML
+ // is unspecified. In practice, the clock used is likely to be either
+ // CLOCK_REALTIME or CLOCK_MONOTONIC, so we compare the returned time to the
+@@ -157,11 +157,11 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool SyncControlVSyncProvider::SupportGetVSyncParametersIfAvailable() const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.h b/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.h
new file mode 100644
index 000000000000..0ea826154fd3
--- /dev/null
+++ b/devel/electron4/files/patch-ui_gl_sync__control__vsync__provider.h
@@ -0,0 +1,34 @@
+--- ui/gl/sync_control_vsync_provider.h.orig 2019-03-15 06:38:28 UTC
++++ ui/gl/sync_control_vsync_provider.h
+@@ -26,11 +26,11 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ bool SupportGetVSyncParametersIfAvailable() const override;
+
+ static constexpr bool IsSupported() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ protected:
+@@ -41,7 +41,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0;
+
+ private:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeTicks last_timebase_;
+ uint64_t last_media_stream_counter_ = 0;
+ base::TimeDelta last_good_interval_;
+@@ -52,7 +52,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ // from configuration change (monitor reconfiguration, moving windows
+ // between monitors, suspend and resume, etc.).
+ base::queue<base::TimeDelta> last_computed_intervals_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
+ };
diff --git a/devel/electron4/files/patch-ui_message__center_public_cpp_message__center__constants.h b/devel/electron4/files/patch-ui_message__center_public_cpp_message__center__constants.h
new file mode 100644
index 000000000000..a8975f8c9b08
--- /dev/null
+++ b/devel/electron4/files/patch-ui_message__center_public_cpp_message__center__constants.h
@@ -0,0 +1,11 @@
+--- ui/message_center/public/cpp/message_center_constants.h.orig 2019-03-15 06:38:28 UTC
++++ ui/message_center/public/cpp/message_center_constants.h
+@@ -106,7 +106,7 @@ const int kButtonHorizontalPadding = 16; // In DIPs.
+ const int kButtonIconTopPadding = 11; // In DIPs.
+ const int kButtonIconToTitlePadding = 16; // In DIPs.
+
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ constexpr SkColor kButtonSeparatorColor = SkColorSetRGB(234, 234, 234);
+ constexpr SkColor kHoveredButtonBackgroundColor = SkColorSetRGB(243, 243, 243);
+ #endif
diff --git a/devel/electron4/files/patch-ui_native__theme_native__theme.h b/devel/electron4/files/patch-ui_native__theme_native__theme.h
new file mode 100644
index 000000000000..ffd3cf0d1807
--- /dev/null
+++ b/devel/electron4/files/patch-ui_native__theme_native__theme.h
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme.h.orig 2019-03-15 06:38:28 UTC
++++ ui/native_theme/native_theme.h
+@@ -47,7 +47,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
+ // The part to be painted / sized.
+ enum Part {
+ kCheckbox,
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ kFrameTopArea,
+ #endif
+ kInnerSpinButton,
diff --git a/devel/electron4/files/patch-ui_native__theme_native__theme__base.cc b/devel/electron4/files/patch-ui_native__theme_native__theme__base.cc
new file mode 100644
index 000000000000..11f346176e92
--- /dev/null
+++ b/devel/electron4/files/patch-ui_native__theme_native__theme__base.cc
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme_base.cc.orig 2019-03-15 06:26:44 UTC
++++ ui/native_theme/native_theme_base.cc
+@@ -172,7 +172,7 @@ void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
+ case kCheckbox:
+ PaintCheckbox(canvas, state, rect, extra.button);
+ break;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case kFrameTopArea:
+ PaintFrameTopArea(canvas, state, rect, extra.frame_top_area);
+ break;
diff --git a/devel/electron4/files/patch-ui_strings_app__locale__settings.grd b/devel/electron4/files/patch-ui_strings_app__locale__settings.grd
new file mode 100644
index 000000000000..0f5b219b740f
--- /dev/null
+++ b/devel/electron4/files/patch-ui_strings_app__locale__settings.grd
@@ -0,0 +1,11 @@
+--- ui/strings/app_locale_settings.grd.orig 2019-03-15 06:26:44 UTC
++++ ui/strings/app_locale_settings.grd
+@@ -187,7 +187,7 @@
+ 75%
+ </message>
+ </if>
+- <if expr="(is_linux or is_android or is_bsd) and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <!-- The font used in Web UI (e.g. History). Note that these are only
+ backups. We try to use the system font if possible. -->
+ <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true">
diff --git a/devel/electron4/files/patch-ui_views_controls_label.cc b/devel/electron4/files/patch-ui_views_controls_label.cc
new file mode 100644
index 000000000000..a4c5af861fa8
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_controls_label.cc
@@ -0,0 +1,20 @@
+--- ui/views/controls/label.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/controls/label.cc
+@@ -549,7 +549,7 @@ bool Label::OnMousePressed(const ui::MouseEvent& event
+ GetFocusManager()->SetFocusedView(this);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (event.IsOnlyMiddleMouseButton() && GetFocusManager() && !had_focus)
+ GetFocusManager()->SetFocusedView(this);
+ #endif
+@@ -734,7 +734,7 @@ bool Label::PasteSelectionClipboard() {
+ }
+
+ void Label::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!obscured()) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron4/files/patch-ui_views_controls_textfield_textfield.cc b/devel/electron4/files/patch-ui_views_controls_textfield_textfield.cc
new file mode 100644
index 000000000000..ac4914f5166a
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_controls_textfield_textfield.cc
@@ -0,0 +1,73 @@
+--- ui/views/controls/textfield/textfield.cc.orig 2019-07-24 10:33:28 UTC
++++ ui/views/controls/textfield/textfield.cc
+@@ -59,7 +59,7 @@
+ #include "base/win/win_util.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "base/strings/utf_string_conversions.h"
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+@@ -156,14 +156,14 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::Ke
+ case ui::VKEY_BACK:
+ if (!control)
+ return ui::TextEditCommand::DELETE_BACKWARD;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift)
+ return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
+ #endif
+ return ui::TextEditCommand::DELETE_WORD_BACKWARD;
+ case ui::VKEY_DELETE:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift && control)
+ return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
+@@ -219,7 +219,7 @@ bool IsControlKeyModifier(int flags) {
+ // Control-modified key combination, but we cannot extend it to other platforms
+ // as Control has different meanings and behaviors.
+ // https://crrev.com/2580483002/#msg46
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return flags & ui::EF_CONTROL_DOWN;
+ #else
+ return false;
+@@ -671,7 +671,7 @@ bool Textfield::OnMousePressed(const ui::MouseEvent& e
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!handled && !had_focus && event.IsOnlyMiddleMouseButton())
+ RequestFocusWithPointer(ui::EventPointerType::POINTER_TYPE_MOUSE);
+ #endif
+@@ -715,7 +715,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event
+ if (!textfield)
+ return handled;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
+@@ -883,7 +883,7 @@ void Textfield::AboutToRequestFocusFromTabTraversal(bo
+ }
+
+ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Skip any accelerator handling that conflicts with custom keybindings.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+@@ -2079,7 +2079,7 @@ bool Textfield::PasteSelectionClipboard() {
+ }
+
+ void Textfield::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron4/files/patch-ui_views_corewm_tooltip__aura.cc b/devel/electron4/files/patch-ui_views_corewm_tooltip__aura.cc
new file mode 100644
index 000000000000..fd4e5098b22c
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_corewm_tooltip__aura.cc
@@ -0,0 +1,11 @@
+--- ui/views/corewm/tooltip_aura.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/corewm/tooltip_aura.cc
+@@ -34,7 +34,7 @@ const int kCursorOffsetY = 15;
+
+ // TODO(varkha): Update if native widget can be transparent on Linux.
+ bool CanUseTranslucentTooltipWidget() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ return false;
+ #else
+ return true;
diff --git a/devel/electron4/files/patch-ui_views_examples_widget__example.cc b/devel/electron4/files/patch-ui_views_examples_widget__example.cc
new file mode 100644
index 000000000000..83248556db62
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_examples_widget__example.cc
@@ -0,0 +1,11 @@
+--- ui/views/examples/widget_example.cc.orig 2019-03-15 06:26:45 UTC
++++ ui/views/examples/widget_example.cc
+@@ -79,7 +79,7 @@ void WidgetExample::CreateExampleView(View* container)
+ BuildButton(container, "Popup widget", POPUP);
+ BuildButton(container, "Dialog widget", DIALOG);
+ BuildButton(container, "Modal Dialog", MODAL_DIALOG);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Windows does not support TYPE_CONTROL top-level widgets.
+ BuildButton(container, "Child widget", CHILD);
+ #endif
diff --git a/devel/electron4/files/patch-ui_views_selection__controller.cc b/devel/electron4/files/patch-ui_views_selection__controller.cc
new file mode 100644
index 000000000000..f5e64ee2f8b0
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_selection__controller.cc
@@ -0,0 +1,11 @@
+--- ui/views/selection_controller.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/selection_controller.cc
+@@ -20,7 +20,7 @@ SelectionController::SelectionController(SelectionCont
+ delegate_(delegate),
+ handles_selection_clipboard_(false) {
+ // On Linux, update the selection clipboard on a text selection.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_handles_selection_clipboard(true);
+ #endif
+
diff --git a/devel/electron4/files/patch-ui_views_style_platform__style.cc b/devel/electron4/files/patch-ui_views_style_platform__style.cc
new file mode 100644
index 000000000000..faccc0bdf486
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_style_platform__style.cc
@@ -0,0 +1,11 @@
+--- ui/views/style/platform_style.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/style/platform_style.cc
+@@ -19,7 +19,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define DESKTOP_LINUX
+ #endif
+
diff --git a/devel/electron4/files/patch-ui_views_views__delegate.cc b/devel/electron4/files/patch-ui_views_views__delegate.cc
new file mode 100644
index 000000000000..5db37da2c5d2
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_views__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/views_delegate.cc
+@@ -87,7 +87,7 @@ HICON ViewsDelegate::GetSmallWindowIcon() const {
+ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return nullptr;
+ }
diff --git a/devel/electron4/files/patch-ui_views_views__delegate.h b/devel/electron4/files/patch-ui_views_views__delegate.h
new file mode 100644
index 000000000000..cc83d3ed30cd
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.h.orig 2019-03-15 06:38:29 UTC
++++ ui/views/views_delegate.h
+@@ -155,7 +155,7 @@ class VIEWS_EXPORT ViewsDelegate {
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_FREEBSD)
+ virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
+ #endif
+
diff --git a/devel/electron4/files/patch-ui_views_window_custom__frame__view.cc b/devel/electron4/files/patch-ui_views_window_custom__frame__view.cc
new file mode 100644
index 000000000000..a6db791500f5
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_window_custom__frame__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/custom_frame_view.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/window/custom_frame_view.cc
+@@ -301,7 +301,7 @@ int CustomFrameView::NonClientTopBorderHeight() const
+ int CustomFrameView::CaptionButtonY() const {
+ // Maximized buttons start at window top so that even if their images aren't
+ // drawn flush with the screen edge, they still obey Fitts' Law.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD)
+ return FrameBorderThickness();
+ #else
+ return frame_->IsMaximized() ? FrameBorderThickness() : kFrameShadowThickness;
diff --git a/devel/electron4/files/patch-ui_views_window_dialog__delegate.cc b/devel/electron4/files/patch-ui_views_window_dialog__delegate.cc
new file mode 100644
index 000000000000..e74b3c6407e3
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_window_dialog__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/dialog_delegate.cc.orig 2019-03-15 06:38:29 UTC
++++ ui/views/window/dialog_delegate.cc
+@@ -65,7 +65,7 @@ Widget::InitParams DialogDelegate::GetDialogWidgetInit
+ params.bounds = bounds;
+ DialogDelegate* dialog = delegate->AsDialogDelegate();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // The new style doesn't support unparented dialogs on Linux desktop.
+ if (dialog)
+ dialog->supports_custom_frame_ &= parent != NULL;
diff --git a/devel/electron4/files/patch-ui_views_window_frame__background.cc b/devel/electron4/files/patch-ui_views_window_frame__background.cc
new file mode 100644
index 000000000000..965a8e3036e9
--- /dev/null
+++ b/devel/electron4/files/patch-ui_views_window_frame__background.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/frame_background.cc.orig 2019-03-15 06:26:45 UTC
++++ ui/views/window/frame_background.cc
+@@ -122,7 +122,7 @@ void FrameBackground::PaintMaximized(gfx::Canvas* canv
+ const View* view) const {
+ // Fill the top with the frame color first so we have a constant background
+ // for areas not covered by the theme image.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ auto* native_theme = view->GetNativeTheme();
+ ui::NativeTheme::ExtraParams params;
+ params.frame_top_area.use_custom_frame = use_custom_frame_;
diff --git a/devel/electron4/files/patch-ui_webui_resources_js_cr.js b/devel/electron4/files/patch-ui_webui_resources_js_cr.js
new file mode 100644
index 000000000000..e3bf65d8ae23
--- /dev/null
+++ b/devel/electron4/files/patch-ui_webui_resources_js_cr.js
@@ -0,0 +1,14 @@
+--- ui/webui/resources/js/cr.js.orig 2019-03-15 06:38:29 UTC
++++ ui/webui/resources/js/cr.js
+@@ -455,6 +455,11 @@ var cr = cr || function() {
+ get doc() {
+ return document;
+ },
++
++ /** Whether this is on *BSD. */
++ get isBSD() {
++ return /BSD/.test(navigator.userAgent);
++ },
+
+ /** Whether we are using a Mac or not. */
+ get isMac() {
diff --git a/devel/electron4/files/patch-ui_webui_resources_js_icon.js b/devel/electron4/files/patch-ui_webui_resources_js_icon.js
new file mode 100644
index 000000000000..ab3da3479ac9
--- /dev/null
+++ b/devel/electron4/files/patch-ui_webui_resources_js_icon.js
@@ -0,0 +1,11 @@
+--- ui/webui/resources/js/icon.js.orig 2019-03-15 06:38:29 UTC
++++ ui/webui/resources/js/icon.js
+@@ -14,7 +14,7 @@ cr.define('cr.icon', function() {
+ // supports SCALE_FACTOR_100P on all non-iOS platforms.
+ supportedScaleFactors.push(1);
+ }
+- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
++ if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux || cr.isBSD) {
+ // All desktop platforms support zooming which also updates the renderer's
+ // device scale factors (a.k.a devicePixelRatio), and these platforms have
+ // high DPI assets for 2x. Let the renderer pick the closest image for
diff --git a/devel/electron4/files/patch-v8_BUILD.gn b/devel/electron4/files/patch-v8_BUILD.gn
new file mode 100644
index 000000000000..ff8acf2302e5
--- /dev/null
+++ b/devel/electron4/files/patch-v8_BUILD.gn
@@ -0,0 +1,41 @@
+--- v8/BUILD.gn.orig 2019-06-07 04:25:16 UTC
++++ v8/BUILD.gn
+@@ -2610,7 +2610,7 @@ v8_source_set("v8_base") {
+ "src/x64/simulator-x64.h",
+ "src/x64/sse-instr.h",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/trap-handler/handler-inside-linux.cc",
+ "src/trap-handler/handler-outside-linux.cc",
+@@ -2959,7 +2959,7 @@ v8_component("v8_libbase") {
+ }
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/base/debug/stack_trace_posix.cc",
+ "src/base/platform/platform-linux.cc",
+@@ -2979,6 +2979,12 @@ v8_component("v8_libbase") {
+ "dl",
+ "rt",
+ ]
++ } else if (is_bsd) {
++ sources += [
++ "src/base/debug/stack_trace_posix.cc",
++ "src/base/platform/platform-freebsd.cc",
++ ]
++ libs = [ "rt", "execinfo" ]
+ } else if (is_android) {
+ if (current_toolchain == host_toolchain) {
+ libs = [
+@@ -3148,6 +3154,7 @@ if (v8_use_snapshot && current_toolchain == v8_snapsho
+ sources = [
+ "src/snapshot/mksnapshot.cc",
+ ]
++ libs = ["execinfo"]
+
+ configs = [ ":internal_config" ]
+
diff --git a/devel/electron4/files/patch-v8_src_base_cpu.cc b/devel/electron4/files/patch-v8_src_base_cpu.cc
new file mode 100644
index 000000000000..ea691832cc39
--- /dev/null
+++ b/devel/electron4/files/patch-v8_src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- v8/src/base/cpu.cc.orig 2019-03-15 06:33:46 UTC
++++ v8/src/base/cpu.cc
+@@ -424,6 +424,7 @@ CPU::CPU()
+
+ #if V8_OS_LINUX
+
++#if V8_OS_LINUX
+ CPUInfo cpu_info;
+
+ // Extract implementor from the "CPU implementer" field.
+@@ -457,6 +458,7 @@ CPU::CPU()
+ }
+ delete[] part;
+ }
++#endif
+
+ // Extract architecture from the "CPU Architecture" field.
+ // The list is well-known, unlike the the output of
diff --git a/devel/electron4/files/patch-v8_src_base_platform_platform-posix.cc b/devel/electron4/files/patch-v8_src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..e04c5a61e963
--- /dev/null
+++ b/devel/electron4/files/patch-v8_src_base_platform_platform-posix.cc
@@ -0,0 +1,15 @@
+--- v8/src/base/platform/platform-posix.cc.orig 2019-03-15 06:42:04 UTC
++++ v8/src/base/platform/platform-posix.cc
+@@ -496,6 +496,12 @@ int OS::GetCurrentThreadId() {
+ return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+ return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++ return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++ return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++ return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+ return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/devel/electron4/files/patch-v8_src_log-utils.h b/devel/electron4/files/patch-v8_src_log-utils.h
new file mode 100644
index 000000000000..1378eb7f2442
--- /dev/null
+++ b/devel/electron4/files/patch-v8_src_log-utils.h
@@ -0,0 +1,11 @@
+--- v8/src/log-utils.h.orig 2019-03-15 06:42:05 UTC
++++ v8/src/log-utils.h
+@@ -15,6 +15,8 @@
+ #include "src/flags.h"
+ #include "src/ostreams.h"
+
++#include <stdarg.h>
++
+ namespace v8 {
+ namespace internal {
+
diff --git a/devel/electron4/pkg-descr b/devel/electron4/pkg-descr
new file mode 100644
index 000000000000..bb5485e9e735
--- /dev/null
+++ b/devel/electron4/pkg-descr
@@ -0,0 +1,10 @@
+Build cross platform desktop apps with JavaScript, HTML, and CSS.
+
+It's easier than you think.
+
+If you can build a website, you can build a desktop app. Electron is a
+framework for creating native applications with web technologies like
+JavaScript, HTML, and CSS. It takes care of the hard parts so you can
+focus on the core of your application.
+
+WWW: https://electronjs.org/
diff --git a/devel/electron4/pkg-plist b/devel/electron4/pkg-plist
new file mode 100644
index 000000000000..48ff3d8f1952
--- /dev/null
+++ b/devel/electron4/pkg-plist
@@ -0,0 +1,122 @@
+bin/electron%%ELECTRON_VER_MAJOR%%
+%%DATADIR%%/LICENSE
+%%DATADIR%%/LICENSES.chromium.html
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DRIVER%%%%DATADIR%%/chromedriver
+%%DATADIR%%/electron
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/mksnapshot
+%%DATADIR%%/natives_blob.bin
+%%DATADIR%%/node_headers/include/node/common.gypi
+%%DATADIR%%/node_headers/include/node/config.gypi
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform-export.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform.h
+%%DATADIR%%/node_headers/include/node/libplatform/v8-tracing.h
+%%DATADIR%%/node_headers/include/node/node.h
+%%DATADIR%%/node_headers/include/node/node_api.h
+%%DATADIR%%/node_headers/include/node/node_api_types.h
+%%DATADIR%%/node_headers/include/node/node_buffer.h
+%%DATADIR%%/node_headers/include/node/node_object_wrap.h
+%%DATADIR%%/node_headers/include/node/node_version.h
+%%DATADIR%%/node_headers/include/node/uv.h
+%%DATADIR%%/node_headers/include/node/uv/aix.h
+%%DATADIR%%/node_headers/include/node/uv/android-ifaddrs.h
+%%DATADIR%%/node_headers/include/node/uv/bsd.h
+%%DATADIR%%/node_headers/include/node/uv/darwin.h
+%%DATADIR%%/node_headers/include/node/uv/errno.h
+%%DATADIR%%/node_headers/include/node/uv/linux.h
+%%DATADIR%%/node_headers/include/node/uv/os390.h
+%%DATADIR%%/node_headers/include/node/uv/posix.h
+%%DATADIR%%/node_headers/include/node/uv/pthread-barrier.h
+%%DATADIR%%/node_headers/include/node/uv/stdint-msvc2008.h
+%%DATADIR%%/node_headers/include/node/uv/sunos.h
+%%DATADIR%%/node_headers/include/node/uv/threadpool.h
+%%DATADIR%%/node_headers/include/node/uv/tree.h
+%%DATADIR%%/node_headers/include/node/uv/unix.h
+%%DATADIR%%/node_headers/include/node/uv/version.h
+%%DATADIR%%/node_headers/include/node/uv/win.h
+%%DATADIR%%/node_headers/include/node/v8-inspector-protocol.h
+%%DATADIR%%/node_headers/include/node/v8-inspector.h
+%%DATADIR%%/node_headers/include/node/v8-platform.h
+%%DATADIR%%/node_headers/include/node/v8-profiler.h
+%%DATADIR%%/node_headers/include/node/v8-testing.h
+%%DATADIR%%/node_headers/include/node/v8-util.h
+%%DATADIR%%/node_headers/include/node/v8-value-serializer-version.h
+%%DATADIR%%/node_headers/include/node/v8-version-string.h
+%%DATADIR%%/node_headers/include/node/v8-version.h
+%%DATADIR%%/node_headers/include/node/v8.h
+%%DATADIR%%/node_headers/include/node/v8config.h
+%%DATADIR%%/node_headers/include/node/zconf.h
+%%DATADIR%%/node_headers/include/node/zlib.h
+%%DIST%%%%DATADIR%%/releases/SHASUMS256.txt
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/default_app.asar
+%%DATADIR%%/resources/electron.asar
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DATADIR%%/v8_context_snapshot_generator
+%%DATADIR%%/version
diff --git a/devel/electron5/Makefile b/devel/electron5/Makefile
new file mode 100644
index 000000000000..c45406deadfe
--- /dev/null
+++ b/devel/electron5/Makefile
@@ -0,0 +1,302 @@
+# $FreeBSD$
+
+PORTNAME= electron
+DISTVERSIONPREFIX= v
+DISTVERSION= ${ELECTRON_VER:S/-beta./.b/}
+CATEGORIES= devel java
+MASTER_SITES= https://github.com/tagattie/FreeBSD-Electron/releases/download/v5.0.1/:chromium \
+ https://commondatastorage.googleapis.com/chromium-browser-official/:chromium_official \
+ https://commondatastorage.googleapis.com/chromium-nodejs/:chromium_node \
+ https://commondatastorage.googleapis.com/chromium-fonts/:chromium_testfonts
+PKGNAMESUFFIX= ${ELECTRON_VER_MAJOR}
+DISTFILES= chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
+ chromium-${CHROMIUM_OFFICIAL_VER}${EXTRACT_SUFX}:chromium_official \
+ ${CHROMIUM_NODE_MODULES_HASH}:chromium_node \
+ ${CHROMIUM_TEST_FONTS_HASH}:chromium_testfonts \
+ electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= tagattie@FreeBSD.org
+COMMENT= Build cross-platform desktop apps with JavaScript, HTML, and CSS
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/electron/LICENSE
+
+ONLY_FOR_ARCHS= amd64
+
+FETCH_DEPENDS= npm-node12>0:www/npm-node12
+PATCH_DEPENDS= git:devel/git
+BUILD_DEPENDS= ${LOCALBASE}/bin/ar:devel/binutils \
+ gperf:devel/gperf \
+ yasm:devel/yasm \
+ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
+ node12>0:www/node12 \
+ npm-node12>0:www/npm-node12
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libatspi.so:accessibility/at-spi2-core \
+ libsnappy.so:archivers/snappy \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libdbus-1.so:devel/dbus \
+ libnotify.so:devel/libnotify \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libre2.so:devel/re2 \
+ liblcms2.so:graphics/lcms2 \
+ libdrm.so:graphics/libdrm \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libvpx.so:multimedia/libvpx \
+ libopenh264.so:multimedia/openh264 \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+RUN_DEPENDS= xdg-open:devel/xdg-utils
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}python-dbusmock>0:devel/py-python-dbusmock@${PY_FLAVOR} \
+ npm-node12>0:www/npm-node12
+
+USES= bison dos2unix gettext-tools gl gnome jpeg localbase:ldflags \
+ ninja pkgconfig python:2.7,build,test tar:xz xorg
+
+USE_GITHUB= yes
+GH_TAGNAME= ${DISTVERSIONPREFIX}${ELECTRON_VER}
+# See ${WRKSRC}/electron/DEPS for GH_TAGNAME_node
+GH_TUPLE= electron:node:666c67e078bddc32f25409f4a929c1e9b5f47373:node
+
+# Official chromium version containing "gn" which is known to work
+CHROMIUM_OFFICIAL_VER= 76.0.3809.132
+# See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
+CHROMIUM_VER= 73.0.3683.121
+# See ${WRKSRC}/third_party/node/node_modules.tar.gz.sha1 for CHROMIUM_NODE_MODULES_HASH
+CHROMIUM_NODE_MODULES_HASH= c0e0f34498afb3f363cc37cd2e9c1a020cb020d9
+# See ${WRKSRC}/third_party/test_fonts/test_fonts.tar.gz.sha1 for CHROMIUM_TEST_FONTS_HASH
+CHROMIUM_TEST_FONTS_HASH= a22de844e32a3f720d219e3911c3da3478039f89
+
+NO_WRKSUBDIR= yes
+WRKSRC_SUBDIR= src
+
+DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
+
+DOS2UNIX_FILES= third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrandr \
+ xrender xscrnsaver xtst
+USE_GL= gl glesv2
+USE_GNOME= atk cairo pango gdkpixbuf2 gtk30 libxml2 libxslt
+USE_JAVA= yes
+JAVA_VERSION= 1.8
+JAVA_BUILD= yes
+
+USE_LDCONFIG= ${DATADIR}
+
+GN_ARGS+= clang_use_chrome_plugins=false \
+ enable_hangout_services_extension=true \
+ enable_nacl=false \
+ enable_remoting=false \
+ fieldtrial_testing_like_official_build=true \
+ is_clang=true \
+ jumbo_file_merge_limit=8 \
+ toolkit_views=true \
+ treat_warnings_as_errors=false \
+ use_allocator="none" \
+ use_allocator_shim=false \
+ use_aura=true \
+ use_custom_libcxx=false \
+ use_gnome_keyring=false \
+ use_jumbo_build=true \
+ use_lld=true \
+ use_sysroot=false \
+ use_system_freetype=true \
+ use_system_harfbuzz=true \
+ use_system_lcms2=true \
+ use_system_libdrm=true \
+ use_system_libjpeg=true \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
+
+ALL_TARGET= electron third_party/electron_node:headers
+MAKE_ARGS= -C out/${BUILDTYPE}
+MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
+ CPLUS_INCLUDE_PATH=${LOCALBASE}/include
+
+OPTIONS_DEFINE= CUPS DEBUG DIST DRIVER KERBEROS
+DIST_DESC= Build distribution zip files
+DRIVER_DESC= Install chromedriver
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO
+OPTIONS_DEFAULT= CUPS DRIVER KERBEROS ALSA
+OPTIONS_SUB= yes
+
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
+ALSA_VARS= GN_ARGS+=use_alsa=true
+ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
+
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+CUPS_VARS= GN_ARGS+=use_cups=true
+CUPS_VARS_OFF= GN_ARGS+=use_cups=false
+
+DEBUG_VARS= BUILDTYPE=Debug \
+ GN_ARGS+=is_component_build=false
+DEBUG_VARS_OFF= BUILDTYPE=Release
+
+DIST_IMPLIES= DRIVER
+
+DRIVER_ALL_TARGET= chromedriver
+
+KERBEROS_VARS= GN_ARGS+=use_kerberos=true
+KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
+PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
+
+POST_BUILD_TARGETS= licenses version
+POST_BUILD_DIST_TARGETS= electron_dist_zip electron_chromedriver_zip electron_mksnapshot_zip
+
+NPM_TIMESTAMP= 1576733942
+
+PLIST_SUB= ELECTRON_VER=${ELECTRON_VER} \
+ ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR}
+
+.include "Makefile.version"
+.include "Makefile.tests"
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "amd64"
+PLIST_SUB+= AMD64=""
+.else
+PLIST_SUB+= AMD64="@comment "
+.endif
+
+.if ${ARCH} == "i386"
+PLIST_SUB+= I386=""
+.else
+PLIST_SUB+= I386="@comment "
+.endif
+
+pre-fetch:
+ @${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
+ if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX} ]; \
+ then ${MKDIR} ${WRKDIR}/npm-cache; \
+ ${CP} ${FILESDIR}/package.json \
+ ${FILESDIR}/package-lock.json ${WRKDIR}/npm-cache; \
+ cd ${WRKDIR}/npm-cache && \
+ ${SETENV} HOME=${WRKDIR} npm ci --verbose --no-progress && \
+ ${MV} node_modules npm_modules; \
+ ${MTREE_CMD} -cbnSp npm_modules | ${MTREE_CMD} -C | ${SED} \
+ -e 's:time=[0-9.]*:time=${NPM_TIMESTAMP}.000000000:' \
+ -e 's:\([gu]id\)=[0-9]*:\1=0:g' \
+ -e 's:flags=.*:flags=none:' \
+ -e 's:^\.:./npm_modules:' > npm_modules.mtree; \
+ ${TAR} cJf ${DISTDIR}/${DIST_SUBDIR}/electron-npm-modules-${ELECTRON_VER}${EXTRACT_SUFX} \
+ @npm_modules.mtree; \
+ ${RM} -r ${WRKDIR}/npm-cache; \
+ fi
+
+post-extract:
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
+ ${RM} -r ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_OFFICIAL_VER}/tools/gn \
+ ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${PORTNAME}-${ELECTRON_VER} ${WRKSRC}/electron
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_node}-${GH_TAGNAME_node} \
+ ${WRKSRC}/third_party/${GH_ACCOUNT_node}_${GH_PROJECT_node}
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/node_modules ${WRKSRC}/third_party/node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/test_fonts ${WRKSRC}/third_party/test_fonts
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/npm_modules ${WRKSRC}/electron/node_modules
+
+pre-patch:
+ ${SH} ${FILESDIR}/apply-electron-patches.sh ${WRKSRC}
+ # ${FIND} ${WRKSRC} -type f -name '*.orig' -print -delete
+ # ${FIND} ${WRKSRC} -type f -name '*~' -print -delete
+
+pre-configure:
+ # We used to remove bundled libraries to be sure that chromium uses
+ # system libraries and not shipped ones.
+ # cd ${WRKSRC} && ${PYTHON_CMD} \
+ #./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
+ ./build/linux/unbundle/replace_gn_files.py --system-libraries \
+ ffmpeg flac fontconfig freetype harfbuzz-ng libdrm libjpeg \
+ libusb libvpx libwebp libxml libxslt openh264 opus re2 snappy \
+ yasm || ${FALSE}
+
+do-configure:
+ # GN generator bootstrapping and generating ninja files
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
+ READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
+ ./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn gen out/${BUILDTYPE} \
+ --args='import("//electron/build/args/${BUILDTYPE:tl}.gn") ${GN_ARGS}'
+ # Setup nodejs dependency
+ ${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin
+ ${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin/node
+ # Setup java dependency
+ ${MKDIR} ${WRKDIR}/bin
+ ${LN} -sf ${LOCALBASE}/openjdk8/bin/java ${WRKDIR}/bin/java
+
+post-build:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_TARGETS}
+
+post-build-DIST-on:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_DIST_TARGETS}
+ cd ${WRKSRC}/out/${BUILDTYPE} && \
+ ${CP} chromedriver.zip chromedriver-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} dist.zip electron-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} mksnapshot.zip mksnapshot-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | ${SED} -e 's/ / */' > SHASUMS256.txt
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+.for f in electron mksnapshot v8_context_snapshot_generator
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/swiftshader
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/swiftshader/${f} ${STAGEDIR}${DATADIR}/swiftshader
+.endfor
+.for f in LICENSE LICENSES.chromium.html icudtl.dat natives_blob.bin snapshot_blob.bin v8_context_snapshot.bin version
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/locales
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/locales/*.pak ${STAGEDIR}${DATADIR}/locales
+ ${MKDIR} ${STAGEDIR}${DATADIR}/resources
+.for f in default_app.asar electron.asar
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/resources/${f} ${STAGEDIR}${DATADIR}/resources
+.endfor
+ cd ${WRKSRC}/out/${BUILDTYPE}/gen && ${COPYTREE_SHARE} node_headers ${STAGEDIR}${DATADIR}
+ ${RLN} ${STAGEDIR}${DATADIR}/electron ${STAGEDIR}${PREFIX}/bin/electron${PKGNAMESUFFIX}
+
+post-install-DIST-on:
+ ${MKDIR} ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/SHASUMS256.txt ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*-v${ELECTRON_VER}-freebsd-*.zip ${STAGEDIR}${DATADIR}/releases
+
+post-install-DRIVER-on:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chromedriver ${STAGEDIR}${DATADIR}
+
+do-test:
+ # Note 1: "npm install" will run before actual tests are executed
+ # Note 2: Xvfb or something similar is necessary for headless testing
+ # Note 3: unit test won't run. (robotjs doesn't build.)
+.for t in ${TEST_MODULES}
+ cd ${WRKSRC}/electron && \
+ ${SETENV} ${TEST_ENV} ELECTRON_OUT_DIR=${BUILDTYPE} \
+ npm run test -- --ci -g '${t}' || ${TRUE}
+.endfor
+
+.include <bsd.port.post.mk>
diff --git a/devel/electron5/Makefile.tests b/devel/electron5/Makefile.tests
new file mode 100644
index 000000000000..a3145ff9eb4f
--- /dev/null
+++ b/devel/electron5/Makefile.tests
@@ -0,0 +1,55 @@
+# $FreeBSD$
+
+TEST_MODULES= electron\ module \
+ app\ module \
+ default\ behavior \
+ autoUpdater\ module \
+ BrowserView\ module \
+ BrowserWindow\ with\ affinity\ module \
+ BrowserWindow\ module \
+ CallbacksRegistry\ module \
+ clipboard\ module \
+ contentTracing \
+ debugger\ module \
+ deprecations \
+ desktopCapturer \
+ dialog\ module \
+ globalShortcut\ module \
+ ipc\ main\ module \
+ ipc\ renderer\ module \
+ MenuItems \
+ Menu\ module \
+ nativeImage\ module \
+ netLog\ module \
+ net\ module \
+ Notification\ module \
+ powerMonitor \
+ powerSaveBlocker\ module \
+ process\ module \
+ protocol\ module \
+ remote\ module \
+ screen\ module \
+ session\ module \
+ shell\ module \
+ renderer\ nodeIntegrationInSubFrames \
+ systemPreferences\ module \
+ TouchBar\ module \
+ tray\ module \
+ View \
+ webContents\ module \
+ WebContentsView \
+ webFrame\ module \
+ webRequest\ module \
+ asar\ package \
+ chromium\ feature \
+ font\ fallback \
+ feature-string\ parsing \
+ modules\ support \
+ node\ feature \
+ security\ warnings \
+ bump-version\ utils \
+ bump-version\ script \
+ <webview>\ tag
+
+# crashReporter\ module \
+# inAppPurchase\ module \
diff --git a/devel/electron5/Makefile.version b/devel/electron5/Makefile.version
new file mode 100644
index 000000000000..213ed54f9118
--- /dev/null
+++ b/devel/electron5/Makefile.version
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+ELECTRON_VER= 5.0.13
+ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron5/distinfo b/devel/electron5/distinfo
new file mode 100644
index 000000000000..66a37b79e575
--- /dev/null
+++ b/devel/electron5/distinfo
@@ -0,0 +1,15 @@
+TIMESTAMP = 1576734588
+SHA256 (electron/chromium-73.0.3683.121.tar.xz) = 1adbc4b118c55cb24ca82e87bfa251dc5d6e46a1f946719b961c15c499e007df
+SIZE (electron/chromium-73.0.3683.121.tar.xz) = 1447269608
+SHA256 (electron/chromium-76.0.3809.132.tar.xz) = d54e4640b5e399d170dffbc5bcff65157eb1b29314b94b5d808f727d9ce45241
+SIZE (electron/chromium-76.0.3809.132.tar.xz) = 728899912
+SHA256 (electron/c0e0f34498afb3f363cc37cd2e9c1a020cb020d9) = 656d38e92fc26271822cc07add8993e926b367da135d349f88f30d3b7f5f3719
+SIZE (electron/c0e0f34498afb3f363cc37cd2e9c1a020cb020d9) = 4436810
+SHA256 (electron/electron-npm-modules-5.0.13.tar.xz) = fe7d5946412513d7930acfc22072791eba72f1284d0b96acaf057690ef76a020
+SIZE (electron/electron-npm-modules-5.0.13.tar.xz) = 15849284
+SHA256 (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 6e331676d098a57c53c1250821dc47ed84c47f823901bf30c4704df90d8a34be
+SIZE (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 17469927
+SHA256 (electron/electron-electron-v5.0.13_GH0.tar.gz) = 318e8ebd41c0ed3935c05b0b781e0a42525131fea1b15a8eeb94cde3136b20a4
+SIZE (electron/electron-electron-v5.0.13_GH0.tar.gz) = 4026612
+SHA256 (electron/electron-node-666c67e078bddc32f25409f4a929c1e9b5f47373_GH0.tar.gz) = e788406fc7818eeae9fa48d6d75e142655c890ccec5a8401e5fb17631194476a
+SIZE (electron/electron-node-666c67e078bddc32f25409f4a929c1e9b5f47373_GH0.tar.gz) = 71509702
diff --git a/devel/electron5/files/apply-electron-patches.sh b/devel/electron5/files/apply-electron-patches.sh
new file mode 100644
index 000000000000..300c8166f223
--- /dev/null
+++ b/devel/electron5/files/apply-electron-patches.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+PATH=/bin:/usr/bin:/usr/local/bin
+
+PATCH_CMD="git apply"
+#PATCH_FLAGS="--numstat --check" # for debugging
+PATCH_FLAGS="--verbose --reject"
+
+WRKSRC=$1
+PATCH_CONF=${WRKSRC}/electron/patches/common/config.json
+
+PATCHD_REPOD_PAIRS=$(sed -e '1d; $d; /^$/d; s/[",]//g; s/: */:/' "${PATCH_CONF}")
+for prp in ${PATCHD_REPOD_PAIRS}; do
+ pd=$(echo "${prp}" | awk -F: '{print $1}' | sed -e 's/src/./')
+ rd=$(echo "${prp}" | awk -F: '{print $2}' | sed -e 's/src/./')
+ (cd "${WRKSRC}/${rd}" && \
+ while read -r p; do
+ ${PATCH_CMD} ${PATCH_FLAGS} "${WRKSRC}/${pd}/${p}"
+ done < "${WRKSRC}/${pd}/.patches")
+done
diff --git a/devel/electron5/files/package-lock.json b/devel/electron5/files/package-lock.json
new file mode 100644
index 000000000000..4069b69a54ee
--- /dev/null
+++ b/devel/electron5/files/package-lock.json
@@ -0,0 +1,13356 @@
+{
+ "name": "electron",
+ "version": "5.0.13",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@iamstarkov/listr-update-renderer": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@iamstarkov/listr-update-renderer/-/listr-update-renderer-0.4.1.tgz",
+ "integrity": "sha512-IJyxQWsYDEkf8C8QthBn5N8tIUR9V9je6j3sMIpAkonaadjbvxmRC6RAhpa3RKxndhNnU2M6iNbtJwd7usQYIA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "cli-truncate": "^0.2.1",
+ "elegant-spinner": "^1.0.1",
+ "figures": "^1.7.0",
+ "indent-string": "^3.0.0",
+ "log-symbols": "^1.0.2",
+ "log-update": "^2.3.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ }
+ }
+ },
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz",
+ "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==",
+ "dev": true
+ },
+ "@octokit/endpoint": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-3.1.1.tgz",
+ "integrity": "sha512-KPkoTvKwCTetu/UqonLs1pfwFO5HAqTv/Ksp9y4NAg//ZgUCpvJsT4Hrst85uEzJvkB8+LxKyR4Bfv2X8O4cmQ==",
+ "dev": true,
+ "requires": {
+ "deepmerge": "3.0.0",
+ "is-plain-object": "^2.0.4",
+ "universal-user-agent": "^2.0.1",
+ "url-template": "^2.0.8"
+ }
+ },
+ "@octokit/request": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-2.2.1.tgz",
+ "integrity": "sha512-enwbVOl3vWWIUuEj0LJRq+mxWNyv95fa13GJitz7qGt/ycYCwtSoVssW3pCqvxS4GlJfHfO2OA+8czIcEF522A==",
+ "dev": true,
+ "requires": {
+ "@octokit/endpoint": "^3.1.1",
+ "is-plain-object": "^2.0.4",
+ "node-fetch": "^2.3.0",
+ "universal-user-agent": "^2.0.1"
+ },
+ "dependencies": {
+ "node-fetch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
+ "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==",
+ "dev": true
+ }
+ }
+ },
+ "@octokit/rest": {
+ "version": "16.6.1",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.6.1.tgz",
+ "integrity": "sha512-3F9c6ldPT6N123iGcuEZMfrE6BvL/Z4F+V80zbA3KS6vGWRm3RS4OblF6age+dCtlMsa99t13AeTmWD7Bsea0Q==",
+ "dev": true,
+ "requires": {
+ "@octokit/request": "2.2.1",
+ "before-after-hook": "^1.2.0",
+ "btoa-lite": "^1.0.0",
+ "lodash.get": "^4.4.2",
+ "lodash.pick": "^4.4.0",
+ "lodash.set": "^4.3.2",
+ "lodash.uniq": "^4.5.0",
+ "octokit-pagination-methods": "^1.1.0",
+ "universal-user-agent": "^2.0.0",
+ "url-template": "^2.0.8"
+ }
+ },
+ "@samverschueren/stream-to-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
+ "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
+ "dev": true,
+ "requires": {
+ "any-observable": "^0.3.0"
+ }
+ },
+ "@sindresorhus/is": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
+ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "dev": true
+ },
+ "@szmarczak/http-timer": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
+ "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "dev": true,
+ "requires": {
+ "defer-to-connect": "^1.0.1"
+ }
+ },
+ "@types/node": {
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.3.tgz",
+ "integrity": "sha512-HeyK+csRk7Khhg9krpMGJeT9pLzjsmiJFHYRzYpPv/dQ5tPclQsbvceiX/HKynRt/9lMLorWUYTbBHC3hRI4sg==",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
+ "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "abab": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz",
+ "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
+ "dev": true,
+ "optional": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
+ "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "acorn": "^2.1.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
+ "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-node": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
+ "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.4.1",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ }
+ }
+ },
+ "add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+ "dev": true
+ },
+ "address": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz",
+ "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "dev": true
+ },
+ "aliasify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/aliasify/-/aliasify-2.1.0.tgz",
+ "integrity": "sha1-fDCCW5RQueYYW6J1M+r24gZ9S0I=",
+ "dev": true,
+ "requires": {
+ "browserify-transform-tools": "~1.7.0"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "any-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
+ "dev": true,
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ }
+ },
+ "arch": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+ "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==",
+ "dev": true
+ },
+ "arg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
+ "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "args": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/args/-/args-4.0.0.tgz",
+ "integrity": "sha512-4b7lVF58nlo7sNtq8s2OueroOY/UHn0Nt/NVjsx9zn28u6yDVb9bQ/uy/5jKtHCbUDil4MlMyDLF5+OHEgnTug==",
+ "dev": true,
+ "requires": {
+ "camelcase": "5.0.0",
+ "chalk": "2.3.2",
+ "leven": "2.1.0",
+ "mri": "1.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-filter": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "array-iterate": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.2.tgz",
+ "integrity": "sha512-1hWSHTIlG/8wtYD+PPX5AOBtKWngpDFjrsrHgZpe+JdgNGz0udYu6ZIkAa/xuenIUEqFv7DvE2Yr60jxweJSrQ==",
+ "dev": true
+ },
+ "array-map": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asar": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-0.11.0.tgz",
+ "integrity": "sha1-uSbnksMV+MBIxDNx4yWwnJenZGQ=",
+ "dev": true,
+ "requires": {
+ "chromium-pickle-js": "^0.1.0",
+ "commander": "^2.9.0",
+ "cuint": "^0.2.1",
+ "glob": "^6.0.4",
+ "minimatch": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "mksnapshot": "^0.3.0"
+ }
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astw": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
+ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
+ "dev": true,
+ "requires": {
+ "acorn": "^4.0.3"
+ }
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "bail": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz",
+ "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "basic-auth": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz",
+ "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ }
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "before-after-hook": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.3.1.tgz",
+ "integrity": "sha512-BIjg60OP/sQvG7Q2L9Xkc77gyyFw1B4T73LIfZVQtXbutJinC1+t2HRl4qeR3EWAmY+tA6z9vpRi02q6ZXyluQ==",
+ "dev": true
+ },
+ "binary": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+ "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+ "dev": true,
+ "requires": {
+ "buffers": "~0.1.1",
+ "chainsaw": "~0.1.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
+ "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz",
+ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.1.2",
+ "buffer": "^4.1.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.1",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "~1.1.0",
+ "duplexer2": "~0.1.2",
+ "events": "~1.1.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "~0.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "module-deps": "^4.0.8",
+ "os-browserify": "~0.1.1",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "string_decoder": "~0.10.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "~0.0.0",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "~0.0.1",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
+ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-transform-tools": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz",
+ "integrity": "sha1-g+J3Ih9jJZvtLn6yooOpcKUB9MQ=",
+ "dev": true,
+ "requires": {
+ "falafel": "^2.0.0",
+ "through": "^2.3.7"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
+ "dev": true,
+ "requires": {
+ "pako": "~0.2.0"
+ }
+ },
+ "btoa-lite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
+ "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=",
+ "dev": true
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "requires": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "dev": true
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
+ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "buffers": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cacheable-request": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.0.0.tgz",
+ "integrity": "sha512-2N7AmszH/WPPpl5Z3XMw1HAP+8d+xugnKQAeKvxFZ/04dbT/CAznqwbl+7eSr3HkwdepNwtb2yx3CAMQWvG01Q==",
+ "dev": true,
+ "requires": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^4.0.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^3.0.0",
+ "lowercase-keys": "^1.0.1",
+ "normalize-url": "^3.1.0",
+ "responselike": "^1.0.2"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
+ "dev": true
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true,
+ "optional": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
+ "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "ccount": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz",
+ "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==",
+ "dev": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chainsaw": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+ "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+ "dev": true,
+ "requires": {
+ "traverse": ">=0.3.0 <0.4"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "character-entities": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz",
+ "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==",
+ "dev": true
+ },
+ "character-entities-html4": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz",
+ "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==",
+ "dev": true
+ },
+ "character-entities-legacy": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz",
+ "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==",
+ "dev": true
+ },
+ "character-reference-invalid": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz",
+ "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==",
+ "dev": true
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "check-for-leaks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/check-for-leaks/-/check-for-leaks-1.2.0.tgz",
+ "integrity": "sha1-6jtQFk6XV3kzLGKBMZX/jGr4Jsw=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "minimist": "^1.2.0",
+ "parse-gitignore": "^0.4.0",
+ "walk-sync": "^0.3.2"
+ }
+ },
+ "checksum": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/checksum/-/checksum-0.1.1.tgz",
+ "integrity": "sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=",
+ "dev": true,
+ "requires": {
+ "optimist": "~0.3.5"
+ }
+ },
+ "cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=",
+ "dev": true,
+ "requires": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.0",
+ "entities": "~1.1.1",
+ "htmlparser2": "^3.9.1",
+ "lodash.assignin": "^4.0.9",
+ "lodash.bind": "^4.1.4",
+ "lodash.defaults": "^4.0.1",
+ "lodash.filter": "^4.4.0",
+ "lodash.flatten": "^4.2.0",
+ "lodash.foreach": "^4.3.0",
+ "lodash.map": "^4.4.0",
+ "lodash.merge": "^4.4.0",
+ "lodash.pick": "^4.2.1",
+ "lodash.reduce": "^4.4.0",
+ "lodash.reject": "^4.4.0",
+ "lodash.some": "^4.4.0"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true
+ },
+ "chromium-pickle-js": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz",
+ "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
+ "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+ "dev": true
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=",
+ "dev": true
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "glob": "^7.0.0",
+ "resolve": "^1.1.6"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "clean-deep": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-2.0.2.tgz",
+ "integrity": "sha1-d83ZTmsmZkTw95Cy9XbL7wOOJ8E=",
+ "dev": true,
+ "requires": {
+ "lodash.isempty": "^4.4.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.transform": "^4.6.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^1.0.1"
+ }
+ },
+ "cli-spinners": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz",
+ "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=",
+ "dev": true
+ },
+ "cli-truncate": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+ "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "0.0.4",
+ "string-width": "^1.0.1"
+ },
+ "dependencies": {
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ }
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clipboardy": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz",
+ "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==",
+ "dev": true,
+ "requires": {
+ "arch": "^2.1.0",
+ "execa": "^0.8.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collapse-white-space": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz",
+ "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz",
+ "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
+ "dev": true
+ },
+ "compare-func": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "dev": true,
+ "requires": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^3.0.0"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "compressible": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz",
+ "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.34.0 < 2"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.35.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+ "dev": true
+ }
+ }
+ },
+ "compression": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.14",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.1",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~2.0.0",
+ "typedarray": "~0.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "conventional-changelog": {
+ "version": "1.1.24",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
+ "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "^1.6.6",
+ "conventional-changelog-atom": "^0.2.8",
+ "conventional-changelog-codemirror": "^0.3.8",
+ "conventional-changelog-core": "^2.0.11",
+ "conventional-changelog-ember": "^0.3.12",
+ "conventional-changelog-eslint": "^1.0.9",
+ "conventional-changelog-express": "^0.3.6",
+ "conventional-changelog-jquery": "^0.1.0",
+ "conventional-changelog-jscs": "^0.1.0",
+ "conventional-changelog-jshint": "^0.3.8",
+ "conventional-changelog-preset-loader": "^1.1.8"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
+ "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
+ "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "1.3.22",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
+ "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
+ "dev": true,
+ "requires": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog": "^1.1.24",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "tempfile": "^1.1.1"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
+ "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
+ "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "^3.0.9",
+ "conventional-commits-parser": "^2.1.7",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^1.0.0",
+ "git-raw-commits": "^1.3.6",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^1.3.6",
+ "lodash": "^4.2.1",
+ "normalize-package-data": "^2.3.5",
+ "q": "^1.5.1",
+ "read-pkg": "^1.1.0",
+ "read-pkg-up": "^1.0.1",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
+ "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
+ "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
+ "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "requires": {
+ "q": "^1.4.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
+ "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "q": "^1.5.1"
+ }
+ },
+ "conventional-changelog-preset-loader": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
+ "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
+ "dev": true
+ },
+ "conventional-changelog-writer": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
+ "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "dev": true,
+ "requires": {
+ "compare-func": "^1.3.1",
+ "conventional-commits-filter": "^1.1.6",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.0.2",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "semver": "^5.5.0",
+ "split": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
+ "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "dev": true,
+ "requires": {
+ "is-subset": "^0.1.1",
+ "modify-values": "^1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
+ "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.4",
+ "is-text-path": "^1.0.0",
+ "lodash": "^4.2.1",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0",
+ "trim-off-newlines": "^1.0.0"
+ }
+ },
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz",
+ "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==",
+ "dev": true,
+ "requires": {
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0",
+ "css-what": "2.1",
+ "domutils": "1.5.1",
+ "nth-check": "~1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
+ "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
+ "dev": true,
+ "optional": true
+ },
+ "cssstyle": {
+ "version": "0.2.37",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "cssom": "0.3.x"
+ }
+ },
+ "cuint": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz",
+ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "date-fns": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
+ "dev": true
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ },
+ "dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-log": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
+ "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
+ "dev": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dev": true,
+ "requires": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "decompress-zip": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.0.tgz",
+ "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=",
+ "dev": true,
+ "requires": {
+ "binary": "^0.3.0",
+ "graceful-fs": "^4.1.3",
+ "mkpath": "^0.1.0",
+ "nopt": "^3.0.1",
+ "q": "^1.1.2",
+ "readable-stream": "^1.1.8",
+ "touch": "0.0.3"
+ }
+ },
+ "dedent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
+ "integrity": "sha1-Dm2o8M5Sg471zsXI+TlrDBtko8s=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "deepmerge": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.0.0.tgz",
+ "integrity": "sha512-a8z8bkgHsAML+uHLqmMS83HHlpy3PvZOOuiTQqaa3wu8ZVg3h0hqHk6aCsGdOnZV2XMM/FRimNGjUh0KCcmHBw==",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "defer-to-connect": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz",
+ "integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ }
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "deglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
+ "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
+ "dev": true,
+ "requires": {
+ "find-root": "^1.0.0",
+ "glob": "^7.0.5",
+ "ignore": "^3.0.9",
+ "pkg-config": "^1.1.0",
+ "run-parallel": "^1.1.2",
+ "uniq": "^1.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-port": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.2.3.tgz",
+ "integrity": "sha512-IDbrX6PxqnYy8jV4wSHBaJlErYKTJvW8OQb9F7xivl1iQLqiUYHGa+nZ61Do6+N5uuOn/pReXKNqI9rUn04vug==",
+ "dev": true,
+ "requires": {
+ "address": "^1.0.1",
+ "debug": "^2.6.0"
+ }
+ },
+ "detective": {
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz",
+ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.2.1",
+ "defined": "^1.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dir-glob": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "path-type": "^3.0.0"
+ },
+ "dependencies": {
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domain-browser": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
+ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=",
+ "dev": true
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
+ "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=",
+ "dev": true
+ },
+ "dotenv-safe": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-4.0.4.tgz",
+ "integrity": "sha1-iw587Y5wsdPF2HTvlCDkBvOUJbM=",
+ "dev": true,
+ "requires": {
+ "dotenv": "^4.0.0"
+ }
+ },
+ "dugite": {
+ "version": "1.63.0",
+ "resolved": "https://registry.npmjs.org/dugite/-/dugite-1.63.0.tgz",
+ "integrity": "sha512-CFd0sWTB2oouat0kJA4/rEQAeh6ZUvCDL9uFOaSBhLX+2CM/YL+ebKJXd8dYVIe8iVXmK5R9P31NVbRw4Ccoxw==",
+ "dev": true,
+ "requires": {
+ "checksum": "^0.1.1",
+ "mkdirp": "^0.5.1",
+ "progress": "^2.0.0",
+ "request": "^2.85.0",
+ "rimraf": "^2.5.4",
+ "tar": "^4.0.2"
+ }
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
+ "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-docs": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/electron-docs/-/electron-docs-2.0.1.tgz",
+ "integrity": "sha1-ARI6T8y2vieswSgAJ7/LJAxUsdI=",
+ "dev": true,
+ "requires": {
+ "got": "^6.3.0",
+ "gunzip-maybe": "^1.3.1",
+ "node-dir": "^0.1.12",
+ "ora": "^0.2.3",
+ "path-exists": "^3.0.0",
+ "pify": "^2.3.0",
+ "semver": "^5.1.0",
+ "tar-fs": "^1.13.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "ora": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz",
+ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "cli-cursor": "^1.0.2",
+ "cli-spinners": "^0.1.2",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ }
+ }
+ },
+ "electron-docs-linter": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/electron-docs-linter/-/electron-docs-linter-2.4.0.tgz",
+ "integrity": "sha512-WvxXsk6kl4x0nrQOqMYAXsMMbSouSwa8VeNd+Bps9HM7QXuNNNVPFB1UEdykq06HWS60lUt4VUiAjQjAJJpcSg==",
+ "dev": true,
+ "requires": {
+ "cheerio": "^0.22.0",
+ "clean-deep": "^2.0.1",
+ "decamelize": "^1.2.0",
+ "dedent": "^0.6.0",
+ "electron-docs": "^2.0.1",
+ "entities": "^1.1.1",
+ "keyed-array": "^2.1.2",
+ "lodash.merge": "^4.6.0",
+ "lodash.pick": "^4.2.1",
+ "marky-markdown-lite": "^1.2.0",
+ "minimist": "^1.2.0",
+ "ora": "^0.3.0",
+ "path-exists": "^3.0.0",
+ "pify": "^2.3.0",
+ "revalidator": "^0.3.1",
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "electron-typescript-definitions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/electron-typescript-definitions/-/electron-typescript-definitions-7.0.0.tgz",
+ "integrity": "sha512-9/BkCl/sJdVn09fn42+bihGsYymBKxzaFM2VY/LYoPe4/7B+3TPhgQyunOgWRaPT1Kx+ZJBgJbYj+rQYEUFR2w==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^7.0.18",
+ "colors": "^1.1.2",
+ "debug": "^2.6.3",
+ "electron-docs": "^2.0.0",
+ "electron-docs-linter": "^2.4.0",
+ "lodash": "^4.17.11",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "tslint": "^4.5.1",
+ "typescript": "^2.2.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ }
+ }
+ },
+ "elegant-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "ensure-posix-path": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz",
+ "integrity": "sha1-pls+QtC3HPxYXrd0+ZQ8jZuRsMI=",
+ "dev": true
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz",
+ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.1",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esprima": "^2.7.1",
+ "estraverse": "^1.9.1",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.2.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "eslint": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz",
+ "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.5.3",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.1.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^4.0.3",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
+ "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
+ "dev": true
+ },
+ "eslint-config-standard-jsx": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz",
+ "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz",
+ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.8",
+ "pkg-dir": "^1.0.0"
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz",
+ "integrity": "sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^1.3.0",
+ "regexpp": "^2.0.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
+ "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
+ "dev": true,
+ "requires": {
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.2.0",
+ "has": "^1.0.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.6.0"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-mocha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.2.0.tgz",
+ "integrity": "sha512-4VTX/qIoxUFRnXLNm6bEhEJyfGnGagmQzV4TWXKzkZgIYyP2FSubEdCjEFTyS/dGwSVRWCWGX7jO7BK8R0kppg==",
+ "dev": true,
+ "requires": {
+ "ramda": "^0.25.0"
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz",
+ "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^1.3.1",
+ "eslint-utils": "^1.3.1",
+ "ignore": "^4.0.2",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz",
+ "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
+ "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "prop-types": "^15.6.2"
+ },
+ "dependencies": {
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz",
+ "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
+ "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.6.0",
+ "acorn-jsx": "^4.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true,
+ "optional": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true,
+ "optional": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "^1.0.6"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "dev": true
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz",
+ "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "^2.2.1",
+ "@nodelib/fs.stat": "^1.0.1",
+ "glob-parent": "^3.1.0",
+ "is-glob": "^4.0.0",
+ "merge2": "^1.2.1",
+ "micromatch": "^3.1.10"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fault": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz",
+ "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==",
+ "dev": true,
+ "requires": {
+ "format": "^0.2.2"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "dev": true,
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "find-parent-dir": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
+ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+ "dev": true
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
+ }
+ },
+ "fn-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz",
+ "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=",
+ "dev": true
+ },
+ "folder-hash": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/folder-hash/-/folder-hash-2.1.1.tgz",
+ "integrity": "sha512-owr5AVhj+nxnzsyDLOiwSUC6S3mqcxJSfZneFgOYoaScMBwPGt3cz0XiBPRrCIUk2Hs1ucQXFGwfB40JxBqb4w==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.1.0",
+ "graceful-fs": "~4.1.11",
+ "minimatch": "~3.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "0.26.7",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
+ "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "dev": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": false,
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": false,
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": false,
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "resolved": false,
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": false,
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": false,
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "resolved": false,
+ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": false,
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": false,
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": false,
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": false,
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "resolved": false,
+ "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": false,
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "resolved": false,
+ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "resolved": false,
+ "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": false,
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": false,
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": false,
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": false,
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "resolved": false,
+ "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "resolved": false,
+ "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": false,
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": false,
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": false,
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": false,
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": false,
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": false,
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": false,
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "resolved": false,
+ "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "resolved": false,
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": false,
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": false,
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "resolved": false,
+ "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "resolved": false,
+ "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": false,
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "resolved": false,
+ "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==",
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "resolved": false,
+ "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": false,
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": false,
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": false,
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": false,
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": false,
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": false,
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": false,
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "resolved": false,
+ "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": false,
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": false,
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": false,
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": false,
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": false,
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": false,
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": false,
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": false,
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": false,
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": false,
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": false,
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": false,
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "resolved": false,
+ "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "resolved": false,
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": false,
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "resolved": false,
+ "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "g-status": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz",
+ "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "matcher": "^1.0.0",
+ "simple-git": "^1.85.0"
+ }
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
+ "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
+ "dev": true
+ },
+ "get-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "meow": "^3.3.0",
+ "normalize-package-data": "^2.3.0",
+ "parse-github-repo-url": "^1.3.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "git-raw-commits": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
+ "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "dev": true,
+ "requires": {
+ "dargs": "^4.0.1",
+ "lodash.template": "^4.0.2",
+ "meow": "^4.0.0",
+ "split2": "^2.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ }
+ },
+ "git-semver-tags": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
+ "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "dev": true,
+ "requires": {
+ "meow": "^4.0.0",
+ "semver": "^5.5.0"
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.2"
+ }
+ },
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "globals": {
+ "version": "11.7.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz",
+ "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "got": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
+ "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
+ "dev": true,
+ "requires": {
+ "@sindresorhus/is": "^0.14.0",
+ "@szmarczak/http-timer": "^1.1.2",
+ "cacheable-request": "^6.0.0",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^4.1.0",
+ "lowercase-keys": "^1.0.1",
+ "mimic-response": "^1.0.1",
+ "p-cancelable": "^1.0.0",
+ "to-readable-stream": "^1.0.0",
+ "url-parse-lax": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "gunzip-maybe": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz",
+ "integrity": "sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==",
+ "dev": true,
+ "requires": {
+ "browserify-zlib": "^0.1.4",
+ "is-deflate": "^1.0.0",
+ "is-gzip": "^1.0.0",
+ "peek-stream": "^1.1.0",
+ "pumpify": "^1.3.3",
+ "through2": "^2.0.3"
+ }
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "^1.4.0",
+ "optimist": "^0.6.1",
+ "source-map": "^0.4.4",
+ "uglify-js": "^2.6"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
+ "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.0.2"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
+ "dev": true
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "^1.3.0",
+ "domhandler": "^2.3.0",
+ "domutils": "^1.5.1",
+ "entities": "^1.1.1",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz",
+ "integrity": "sha512-laeSTWIkuFa6lUgZAt+ic9RwOSEwbi9VDQNcCvMFO4sZiDc2Ha8DaZVCJnfpLLQCcS8rvCnIWYmz0POLxt7Dew==",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": ">= 1.3.1 < 2"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz",
+ "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=",
+ "dev": true
+ },
+ "husky": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz",
+ "integrity": "sha1-xp7XTi0neXaaF7qDmbVM4LY8EsM=",
+ "dev": true,
+ "requires": {
+ "is-ci": "^1.0.10",
+ "normalize-path": "^1.0.0",
+ "strip-indent": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
+ "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+ "dev": true
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
+ "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz",
+ "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "inquirer": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz",
+ "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.10",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.1.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz",
+ "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "lexical-scope": "^1.2.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "irregular-plurals": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz",
+ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz",
+ "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==",
+ "dev": true
+ },
+ "is-alphanumeric": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz",
+ "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=",
+ "dev": true
+ },
+ "is-alphanumerical": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz",
+ "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
+ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-decimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz",
+ "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==",
+ "dev": true
+ },
+ "is-deflate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
+ "integrity": "sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-empty": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz",
+ "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz",
+ "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-gzip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+ "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=",
+ "dev": true
+ },
+ "is-hexadecimal": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz",
+ "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==",
+ "dev": true
+ },
+ "is-hidden": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-hidden/-/is-hidden-1.1.1.tgz",
+ "integrity": "sha512-175UKecS8+U4hh2PSY0j4xnm2GKYzvSKnbh+naC93JjuBA7LgIo6YxlbcsSo6seFBdQO3RuIcH980yvqqD/2cA==",
+ "dev": true
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
+ "dev": true
+ },
+ "is-observable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
+ "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "^1.1.0"
+ },
+ "dependencies": {
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
+ "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
+ "dev": true
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-whitespace-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz",
+ "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "is-word-character": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz",
+ "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jest-get-type": {
+ "version": "22.4.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz",
+ "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==",
+ "dev": true
+ },
+ "jest-validate": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz",
+ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1",
+ "jest-get-type": "^22.1.0",
+ "leven": "^2.1.0",
+ "pretty-format": "^23.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=",
+ "dev": true
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsdom": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
+ "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abab": "^1.0.0",
+ "acorn": "^2.4.0",
+ "acorn-globals": "^1.0.4",
+ "cssom": ">= 0.3.0 < 0.4.0",
+ "cssstyle": ">= 0.2.29 < 0.3.0",
+ "escodegen": "^1.6.1",
+ "nwmatcher": ">= 1.3.7 < 2.0.0",
+ "parse5": "^1.5.1",
+ "request": "^2.55.0",
+ "sax": "^1.1.4",
+ "symbol-tree": ">= 3.1.0 < 4.0.0",
+ "tough-cookie": "^2.2.0",
+ "webidl-conversions": "^2.0.0",
+ "whatwg-url-compat": "~0.6.5",
+ "xml-name-validator": ">= 2.0.1 < 3.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz",
+ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3"
+ }
+ },
+ "keyed-array": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/keyed-array/-/keyed-array-2.1.2.tgz",
+ "integrity": "sha1-isE3thMi7V7Rx7Qbn5zQZmMcrOA=",
+ "dev": true
+ },
+ "keyv": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
+ "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true,
+ "optional": true
+ },
+ "leven": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lexical-scope": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
+ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "dev": true,
+ "requires": {
+ "astw": "^2.0.0"
+ }
+ },
+ "linkify-it": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-1.2.4.tgz",
+ "integrity": "sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo=",
+ "dev": true,
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "lint": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/lint/-/lint-1.1.2.tgz",
+ "integrity": "sha1-Ne0GTzIlR8MxNY2JmGhmSWi6Nx8=",
+ "dev": true
+ },
+ "lint-staged": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.0.tgz",
+ "integrity": "sha512-yfSkyJy7EuVsaoxtUSEhrD81spdJOe/gMTGea3XaV7HyoRhTb9Gdlp6/JppRZERvKSEYXP9bjcmq6CA5oL2lYQ==",
+ "dev": true,
+ "requires": {
+ "@iamstarkov/listr-update-renderer": "0.4.1",
+ "chalk": "^2.3.1",
+ "commander": "^2.14.1",
+ "cosmiconfig": "5.0.6",
+ "debug": "^3.1.0",
+ "dedent": "^0.7.0",
+ "del": "^3.0.0",
+ "execa": "^1.0.0",
+ "find-parent-dir": "^0.3.0",
+ "g-status": "^2.0.2",
+ "is-glob": "^4.0.0",
+ "is-windows": "^1.0.2",
+ "jest-validate": "^23.5.0",
+ "listr": "^0.14.2",
+ "lodash": "^4.17.5",
+ "log-symbols": "^2.2.0",
+ "micromatch": "^3.1.8",
+ "npm-which": "^3.0.1",
+ "p-map": "^1.1.1",
+ "path-is-inside": "^1.0.2",
+ "pify": "^3.0.0",
+ "please-upgrade-node": "^3.0.2",
+ "staged-git-files": "1.1.2",
+ "string-argv": "^0.0.2",
+ "stringify-object": "^3.2.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "^6.1.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "p-map": "^1.1.1",
+ "pify": "^3.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "listr": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
+ "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+ "dev": true,
+ "requires": {
+ "@samverschueren/stream-to-observable": "^0.3.0",
+ "is-observable": "^1.1.0",
+ "is-promise": "^2.1.0",
+ "is-stream": "^1.1.0",
+ "listr-silent-renderer": "^1.1.1",
+ "listr-update-renderer": "^0.5.0",
+ "listr-verbose-renderer": "^0.5.0",
+ "p-map": "^2.0.0",
+ "rxjs": "^6.3.3"
+ },
+ "dependencies": {
+ "p-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz",
+ "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+ "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ }
+ }
+ },
+ "listr-silent-renderer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+ "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+ "dev": true
+ },
+ "listr-update-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
+ "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "cli-truncate": "^0.2.1",
+ "elegant-spinner": "^1.0.1",
+ "figures": "^1.7.0",
+ "indent-string": "^3.0.0",
+ "log-symbols": "^1.0.2",
+ "log-update": "^2.3.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ }
+ }
+ },
+ "listr-verbose-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
+ "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "cli-cursor": "^2.1.0",
+ "date-fns": "^1.27.2",
+ "figures": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "load-plugin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-2.2.2.tgz",
+ "integrity": "sha512-FYzamtURIJefQykZGtiClYuZkJBUKzmx8Tc74y8JGAulDzbzVm/C+w/MbAljHRr+REL0cRzy3WgnHE+T8gce5g==",
+ "dev": true,
+ "requires": {
+ "npm-prefix": "^1.2.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.assignin": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz",
+ "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=",
+ "dev": true
+ },
+ "lodash.bind": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
+ "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=",
+ "dev": true
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.filter": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz",
+ "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=",
+ "dev": true
+ },
+ "lodash.flatten": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
+ "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
+ "dev": true
+ },
+ "lodash.foreach": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz",
+ "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.isempty": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+ "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.map": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
+ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "lodash.merge": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz",
+ "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==",
+ "dev": true
+ },
+ "lodash.pick": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=",
+ "dev": true
+ },
+ "lodash.range": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.range/-/lodash.range-3.2.0.tgz",
+ "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=",
+ "dev": true
+ },
+ "lodash.reduce": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
+ "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=",
+ "dev": true
+ },
+ "lodash.reject": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
+ "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=",
+ "dev": true
+ },
+ "lodash.set": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
+ "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~3.0.0"
+ }
+ },
+ "lodash.transform": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
+ "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=",
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "log-update": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
+ "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "cli-cursor": "^2.0.0",
+ "wrap-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true,
+ "optional": true
+ },
+ "longest-streak": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz",
+ "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+ },
+ "macos-release": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz",
+ "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown-escapes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz",
+ "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==",
+ "dev": true
+ },
+ "markdown-extensions": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz",
+ "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==",
+ "dev": true
+ },
+ "markdown-it": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-6.1.1.tgz",
+ "integrity": "sha1-ztA39Ec+6fUVOsQU933IPJG6knw=",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "entities": "~1.1.1",
+ "linkify-it": "~1.2.2",
+ "mdurl": "~1.0.1",
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "markdown-it-named-headers": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz",
+ "integrity": "sha1-gu/CgyQkCmsed7mq5QF3HV81HB8=",
+ "dev": true,
+ "requires": {
+ "string": "^3.0.1"
+ }
+ },
+ "markdown-table": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.2.tgz",
+ "integrity": "sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==",
+ "dev": true
+ },
+ "marky-markdown-lite": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/marky-markdown-lite/-/marky-markdown-lite-1.2.0.tgz",
+ "integrity": "sha1-dO2phLgTZVfe4QZO/RXkBhdAaZc=",
+ "dev": true,
+ "requires": {
+ "cheerio": "^0.20.0",
+ "conventional-changelog-cli": "^1.2.0",
+ "is-file": "^1.0.0",
+ "markdown-it": "^6.0.1",
+ "markdown-it-named-headers": "0.0.4"
+ },
+ "dependencies": {
+ "cheerio": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz",
+ "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
+ "dev": true,
+ "requires": {
+ "css-select": "~1.2.0",
+ "dom-serializer": "~0.1.0",
+ "entities": "~1.1.1",
+ "htmlparser2": "~3.8.1",
+ "jsdom": "^7.0.2",
+ "lodash": "^4.1.0"
+ }
+ },
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1",
+ "domhandler": "2.3",
+ "domutils": "1.5",
+ "entities": "1.0",
+ "readable-stream": "1.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "matcher": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz",
+ "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.4"
+ }
+ },
+ "matcher-collection": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/matcher-collection/-/matcher-collection-1.0.5.tgz",
+ "integrity": "sha1-LuCVQ4Nyy4iE8FgjQTjAXGROwzk=",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.2"
+ }
+ },
+ "math-random": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
+ "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "mdast-comment-marker": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-1.0.2.tgz",
+ "integrity": "sha1-Hd8O+BH7UkOQF8jSwLkiA18rp0o=",
+ "dev": true
+ },
+ "mdast-util-compact": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz",
+ "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=",
+ "dev": true,
+ "requires": {
+ "unist-util-modify-children": "^1.0.0",
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "mdast-util-heading-style": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-1.0.3.tgz",
+ "integrity": "sha1-77OQ28iqAWw89XegNJANsn7nJHw=",
+ "dev": true
+ },
+ "mdast-util-to-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz",
+ "integrity": "sha1-XEVch4yTVfDB5/PotxnPWDaRrPs=",
+ "dev": true
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+ "dev": true
+ },
+ "meow": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
+ "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist": "^1.1.3",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz",
+ "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==",
+ "dev": true
+ },
+ "micro": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/micro/-/micro-9.3.1.tgz",
+ "integrity": "sha512-83uimpPJqfwkfKvJl2WWontBlV3hmzrIgyJ+L2uhDXKNk7Ll+/ezK3zBz7TljubpKPqjM0JdT2Ker4MTPmhjgA==",
+ "dev": true,
+ "requires": {
+ "arg": "2.0.0",
+ "chalk": "2.4.0",
+ "content-type": "1.0.4",
+ "is-stream": "1.1.0",
+ "raw-body": "2.3.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz",
+ "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "micro-compress": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/micro-compress/-/micro-compress-1.0.0.tgz",
+ "integrity": "sha1-U/WoC0rQMgyhZaVZtuPfFF1PcE8=",
+ "dev": true,
+ "requires": {
+ "compression": "^1.6.2"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "minipass": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.0.tgz",
+ "integrity": "sha512-jWC2Eg+Np4bxah7llu1IrUNSJQxtLz/J+pOjTM0nFpJXGAaV18XBWhUn031Q1tAA/TJtA1jgwnOe9S2PQa4Lbg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
+ "dev": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "mkpath": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz",
+ "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=",
+ "dev": true
+ },
+ "mksnapshot": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.1.tgz",
+ "integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=",
+ "dev": true,
+ "requires": {
+ "decompress-zip": "0.3.0",
+ "fs-extra": "0.26.7",
+ "request": "^2.79.0"
+ }
+ },
+ "modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true
+ },
+ "module-deps": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz",
+ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.5.0",
+ "defined": "^1.0.0",
+ "detective": "^4.0.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.3",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "mri": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.0.tgz",
+ "integrity": "sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.2"
+ }
+ },
+ "node-version": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.1.3.tgz",
+ "integrity": "sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
+ "dev": true
+ },
+ "npm-path": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.10"
+ }
+ },
+ "npm-prefix": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/npm-prefix/-/npm-prefix-1.2.0.tgz",
+ "integrity": "sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.0",
+ "shellsubstitute": "^1.1.0",
+ "untildify": "^2.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-which": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.9.0",
+ "npm-path": "^2.0.2",
+ "which": "^1.2.10"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "nugget": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "minimist": "^1.1.0",
+ "pretty-bytes": "^1.0.2",
+ "progress-stream": "^1.1.0",
+ "request": "^2.45.0",
+ "single-line-log": "^1.1.2",
+ "throttleit": "0.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "nwmatcher": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz",
+ "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==",
+ "dev": true,
+ "optional": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "octicons": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/octicons/-/octicons-7.3.0.tgz",
+ "integrity": "sha512-UVjlkmUL15Ef/7Rd72Io634Bdl61QgSMasAZpvXPoR2XNFj1RelAyhl4QJuR1hBGlPWFDR7KFj2jEzsFax2IUg==",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1"
+ }
+ },
+ "octokit-pagination-methods": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz",
+ "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "openssl-self-signed-certificate": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/openssl-self-signed-certificate/-/openssl-self-signed-certificate-1.1.6.tgz",
+ "integrity": "sha1-nTpHdrGlfphHNQOSEUrS+RWoPdQ=",
+ "dev": true
+ },
+ "opn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "dev": true,
+ "requires": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "ora": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-0.3.0.tgz",
+ "integrity": "sha1-NnoHitJc+wltpQERXrW0AeB9dJU=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "cli-cursor": "^1.0.2",
+ "cli-spinners": "^0.2.0",
+ "log-symbols": "^1.0.2"
+ },
+ "dependencies": {
+ "cli-spinners": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz",
+ "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=",
+ "dev": true
+ }
+ }
+ },
+ "os-browserify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz",
+ "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz",
+ "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==",
+ "dev": true,
+ "requires": {
+ "macos-release": "^2.0.0",
+ "windows-release": "^3.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-cancelable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.0.0.tgz",
+ "integrity": "sha512-USgPoaC6tkTGlS831CxsVdmZmyb8tR1D+hStI84MyckLOzfJlYQUweomrwE3D8T7u5u5GVuW064LT501wHTYYA==",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
+ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ }
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "parse-entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz",
+ "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==",
+ "dev": true,
+ "requires": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-gitignore": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-0.4.0.tgz",
+ "integrity": "sha1-q/cC5LkAUk//eQK2g4YoV7Y/k/4=",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "is-glob": "^3.1.0"
+ },
+ "dependencies": {
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true,
+ "optional": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.16",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
+ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "peek-stream": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
+ "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "duplexify": "^3.5.0",
+ "through2": "^2.0.3"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-conf": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
+ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "load-json-file": "^4.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "pkg-config": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
+ "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
+ "dev": true,
+ "requires": {
+ "debug-log": "^1.0.0",
+ "find-root": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz",
+ "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "plist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+ "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.2.3",
+ "xmlbuilder": "^9.0.7",
+ "xmldom": "0.1.x"
+ }
+ },
+ "plur": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz",
+ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=",
+ "dev": true,
+ "requires": {
+ "irregular-plurals": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ }
+ }
+ },
+ "pretty-format": {
+ "version": "23.6.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz",
+ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0",
+ "ansi-styles": "^3.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ }
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "progress-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+ "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "dev": true,
+ "requires": {
+ "speedometer": "~0.1.2",
+ "through2": "~0.2.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+ "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "xtend": "~2.1.1"
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.3.1",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
+ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
+ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.25.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz",
+ "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
+ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
+ "dev": true,
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz",
+ "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "minimatch": "^3.0.2",
+ "readable-stream": "^2.0.2",
+ "set-immediate-shim": "^1.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz",
+ "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==",
+ "dev": true
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "remark": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz",
+ "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==",
+ "dev": true,
+ "requires": {
+ "remark-parse": "^4.0.0",
+ "remark-stringify": "^4.0.0",
+ "unified": "^6.0.0"
+ }
+ },
+ "remark-cli": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-4.0.0.tgz",
+ "integrity": "sha512-q5GMjGypUS4rTZb3WfMQcGpClSC38A9Ogg1h/HB2GLsqypDetmAfy0X+tuJ6JeyCPVOXXCDgsDCQq4QPqKmxBA==",
+ "dev": true,
+ "requires": {
+ "markdown-extensions": "^1.1.0",
+ "remark": "^8.0.0",
+ "unified-args": "^4.0.0"
+ }
+ },
+ "remark-lint": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-6.0.1.tgz",
+ "integrity": "sha512-wvTTuB5O5pF8SxqahQjjrU3dtuhygYjaGcOZTw+4ACgSE4RBINDlNqN46HjcV3X0ib5GmObJUt5a2mmhtmuTqw==",
+ "dev": true,
+ "requires": {
+ "remark-message-control": "^4.0.0"
+ }
+ },
+ "remark-lint-blockquote-indentation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.1.tgz",
+ "integrity": "sha512-YrP99MJ3+dQ5JXzq39fUOcYzwcumva/xEM1eFtD2TrQcSdlMLoqYa7gj+aEEhZCjlA5BssTiVoWWW0RjyPPGZw==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-code-block-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.1.tgz",
+ "integrity": "sha512-FRUMhhKwCruH4vkatdMhVO4WlYpysV1NmMILVoK/k+/7uFLSfgvlqo66nzhpMdWL8TQHqdo0LhiXuetGC2WjsQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-definition-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-1.0.1.tgz",
+ "integrity": "sha512-TxLye5KF4o/rKVTvmPRX5jS9itamFS02yy1IG8bIYcIAJvWsW3GlJaXq4ohK3hKwSQOhtCherEfD6XF9BHLNYQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-definition-spacing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.1.tgz",
+ "integrity": "sha512-ewzdlFfpTSP11ZuiOln0yfz6Y03aWtgJmLVQNfF1spaT1gURaShjs8Hiilbo719bz96DgvXSZLP6UnkSiZL1vg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-emphasis-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.1.tgz",
+ "integrity": "sha512-QyNsD6y8EZQqhechw0XFGybYMlxn6PFLSlFUO50KSQlJEOgkImN2yJfrNrET2GY4t/fc/uYmeI/q7auUIkLX2w==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-fenced-code-flag": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.1.tgz",
+ "integrity": "sha512-P24T9DRe/nnywPFRpE1UAXAVzN1CX6HmINr15UHbQZo1Cy8KYt7uV9YOR0/XzphtnO/AFenAqZyf7tchW5AUNQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-fenced-code-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.1.tgz",
+ "integrity": "sha512-mX7xAMl5m7xGX+YtOtyXIyv+egD4IQAm6DPGdfunI734QwODwcoBydtpTD56jrY+48nVcQ/anFYT1Blg3Xk3sQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-file-extension": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-1.0.1.tgz",
+ "integrity": "sha512-K1Pf5oviaFyCs0FhZqaNZ2odgd5KoV6AlA4nNAMxyylB0Y6t0mYpzECoLSS5Bgxf6f8Op9YbuM2cbjBAsv0dIA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-final-definition": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-1.0.1.tgz",
+ "integrity": "sha512-DK6bphJdQ0xSOQAn+8wOyLIVc3SZW2+ZzCMCLkQnVtHiQ9GHMzFiCkeE3Cq+OClsMI5Yn8wFTHZHPUn58VhNEQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-hard-break-spaces": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.2.tgz",
+ "integrity": "sha512-uh7LqHgRPCphiCvRzBVA4D0Ml2IqPaw89lWJdQ6HvYiV8ChB/OFLBapHi6OKW7NVVVPPJsElPMB/UPUsKFaPTg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-heading-increment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.1.tgz",
+ "integrity": "sha512-jBAJacXAU5drUpvmymOoFmrdCCNDiz8bzGgJIMjpT0Vyjd0+qdXu2iyFMl/4RkkUli25rpUDXkTHTcxmNbh7Zw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-heading-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-1.0.1.tgz",
+ "integrity": "sha512-m9Gqr091YdxUtG69xdXYH8fSd3+nsrsMamB/qSWpVSZuWQKZ1mRotr1LO9NphJh6vhw8IfBtG07wgEDn6b40sQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-heading-style": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-link-title-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.1.tgz",
+ "integrity": "sha512-91MyqmZjokSzRbgvlKq5sLCJEFkM/MNKT1PDaWa3+GDLBGu7D4eMQGd2x49xX8IdJDEoWy5D8W+2Gb8XKWMUyw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1",
+ "vfile-location": "^2.0.1"
+ }
+ },
+ "remark-lint-list-item-content-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.1.tgz",
+ "integrity": "sha512-R5cdXFFywoBcg+2UUcF9OJ/vt9oqJv+KmTKIQV9CFHWeAfMFiZbxazsSPNaCcO1fW9622hxPCawN/AofDTbP7Q==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-list-item-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.1.tgz",
+ "integrity": "sha512-dSUFGQYtduuaos+5oXH89RTk0rGUe6DFf04q+rxQ7Z3YRbuXhAU2nYeY0/HENYiWJU1xFLteZkDvKMj0NfS3DQ==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-list-item-spacing": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.1.tgz",
+ "integrity": "sha512-HlPEzRq4LJB6tQ72zgIZ42mOaOSX92O268BLolys/H1x6N29/JNMLfurWqLsrxZrxxHH3H7EUP4dNM2P1kDGBw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-maximum-heading-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.1.tgz",
+ "integrity": "sha512-f8ChV9U238gncyvTqmzJ+UpCMj+hFyluWBjVYr2K8CNh+MdSivIxS4zw4170sBRoqNuS3gBxRHG9f4rmdqotJA==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-maximum-line-length": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.0.2.tgz",
+ "integrity": "sha512-M4UIXAAbtLgoQbTDVwdKOEFbTKtJSZ+pCW7ZqMFs+cbIN0Svm32LM9+xpVfVU0hLYt3Ypl++EAPfguBNe1PZEw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-auto-link-without-protocol": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.1.tgz",
+ "integrity": "sha512-MHl0hNtF8Rc0lg6iuVP7/0rnp4uZadm3S07/1TiFeqzU22KFxxzcC8980Q4+I8oPZE0d1x80h9DmkNAVFwhDjQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-blockquote-without-marker": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.1.tgz",
+ "integrity": "sha512-8VTQ/MP3flvG4U0tFSD+DMVT7F/4u9SnQLb/jjeRC3DzgbsIagIUqpWYAKkc+yBz9S/lgftA92lLP5PrlOa5DA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1",
+ "vfile-location": "^2.0.1"
+ }
+ },
+ "remark-lint-no-consecutive-blank-lines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.1.tgz",
+ "integrity": "sha512-IhyUiGTpb/hjtusIVg10q963KeL5CyNfbWOfDZ1KtY2tvdoSPRGrrCuTKo6OG8r1qavM6bU0mtRuIBqNh4lIzA==",
+ "dev": true,
+ "requires": {
+ "plur": "^2.1.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-duplicate-headings": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.1.tgz",
+ "integrity": "sha512-iZZxyZgwnjvDkydKZzqHBueJvIpGbxnITmgd8xN8TOLZoAg9/KGTQRAkotL1HXNRdkzwggfgB9ONxv/rWtYBmg==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-emphasis-as-heading": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.1.tgz",
+ "integrity": "sha512-+x17Hrjwne4Mhk2x/Zolnuv/sOclF1oYMDBSEYhBUpn/UAwxhXEXYKkeo0KkWA7Q3+UCLELJvzsk4cGNP6Sgow==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-file-name-articles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.1.tgz",
+ "integrity": "sha512-SzebnFnilrsINA6QZP1YqPa3SrfSotrLkRWl5FUCoVshBvEFNKJFWXj6Xyt4NjWQ5tJWFtOMysAuHdGT+Odhjg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-consecutive-dashes": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.1.tgz",
+ "integrity": "sha512-YP2HBwA00yeD7phvxp4ftiqbfBPfYHPgPfcEcb8oNa1WlUh/58cs9DbSHWKsZG+XLkvEaheC6qUQG02jEKZHPA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-irregular-characters": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.1.tgz",
+ "integrity": "sha512-+ks/V6OVMGOPZKw+fe2E4DPvLoslGxvdgtqXq2Nyz0cEdYX8RP45kI79V4w95H7UCJAeOFM9mZzVLvmCY1sEbg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-mixed-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.1.tgz",
+ "integrity": "sha512-bcqPsow1C0LrsKII1YehUO7VPOER7nze6FzsZZ8/NP+d200OL7Y7VMCqN1kscAvG+PTJgjznyXuLEpy7KQnVFg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-file-name-outer-dashes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.2.tgz",
+ "integrity": "sha512-BVEwLrA4kipalgKrxhncpgtmh6eUmHBH1ggC+X3csYR4X5vXv4vHQqpov4I1vMyWxMLMBnq7lTL3Iqp0CS4vwg==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0"
+ }
+ },
+ "remark-lint-no-heading-punctuation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.1.tgz",
+ "integrity": "sha512-/7kGRmPT+JLxEME1Z/rQn99mP8yr4qXFwcniKYsefR1jl8pCZciwCIp2Tq92Nn+FPELVrpk9sloRBb2JP3UB0A==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-inline-padding": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.1.tgz",
+ "integrity": "sha512-nRl6vA45ZPdMz3/rVMZw7WRRqLFuMrzhdkrbrGLjwBovdIeD/IGCEbDA5NR60g2xT9V5dAmKogvHEH1bIr8SdQ==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-literal-urls": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.1.tgz",
+ "integrity": "sha512-YMsZFVYQDt9gvpc6THL76GzyhCR+cK79vjyEOEmX+O3tOjxQstbi0oW6Lngbl1WbpkCW5TWEzSKOorQowYI2wg==",
+ "dev": true,
+ "requires": {
+ "mdast-util-to-string": "^1.0.2",
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-multiple-toplevel-headings": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.1.tgz",
+ "integrity": "sha512-LFfgjF3NKFkt0tGNnJ8Exf8+DrVcMRwek5qu5mvh2KrZnmSpm5flYWzUy2UnnIyicDL3CZYC/r3Fjz6CeBYgZA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shell-dollars": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.1.tgz",
+ "integrity": "sha512-YryHem73PTxjCkuC4HONJWHsmrLyXmF7r+cCH36Ys3vuWsfAbwkbOwpyuPB4KXn+6fHaTUfz/B5BPp3iwzJwyA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shortcut-reference-image": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.1.tgz",
+ "integrity": "sha512-nUQ+4xB5hKZTCl9gvg7c+W1T3ddsnjgu4zwRza2Bn+21cKmUzx+z9dvlZ4aVuNGmxuWHbKI8/ZkKuB8Eu27vJw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-shortcut-reference-link": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.2.tgz",
+ "integrity": "sha512-A6ZexZ6XyQ7fXebrj5WgW5FkSJ81GobjWyMFVmBxgxPd9GH2BkRsZ10aFSkQQvfKSrqbnOL2vrigGMgbiERRxA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-no-table-indentation": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.1.tgz",
+ "integrity": "sha512-QrtT1GvJmAoNsWh+gmHFajFlM+ubm9rd3Cbz2OYPix8ZM6g907aIfG2NusJFXL9D8/CExQWYhlBvelFBbHgqbQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-ordered-list-marker-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.1.tgz",
+ "integrity": "sha512-LJICUZIxqHHi360EP90zbDP+2QQIVVgPGlz0AatuR9ifd7xqAzraQKxsQajAZpuOepZgjBMTOz9L9W0Znx7ujA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-ordered-list-marker-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.1.tgz",
+ "integrity": "sha512-P6fYui3MvuB21+6AYH8Lbe7SVZ2VQL+FVJUuDCBhe01bgx6SajGmQ/f4Iqt0gCHEAaKw7e2B7tdwd36ifbs1EA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-rule-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-1.0.1.tgz",
+ "integrity": "sha512-dzH+K6DcPIIMBq6LUQgE4dR9TiQGZrQOoULD7m0Y0lIb2EoR2FK5Zd4TgZg/LnvTs6fid37t0xFoaY4/lXV/5Q==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-strong-marker": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.1.tgz",
+ "integrity": "sha512-+bwWKWAqDwqd21Vw+ndqVFh5V27Dp4MKhk9AUlKmcvgJYHuvQ8UfWQdpZcP218ps/4EbwTfyi33TaPyXqOTlXA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-cell-padding": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.1.tgz",
+ "integrity": "sha512-o3WwC9YysXbQKf0D5nvhhJPcLagqedLwGdifukdgyaKvuIQVbtWbNv1/UOdB3LL+D+2fUrwrCmnQ8J3E1r0lBw==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-pipe-alignment": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.1.tgz",
+ "integrity": "sha512-lYfK2gWGN45hYfAOZw5gscQ4uDaO9bJLp+H64jvrTQzBV+OCvB9kRQwI0oIrJAa4XMmipAZR+2XhjNSCfQ0fRA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-table-pipes": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.1.tgz",
+ "integrity": "sha512-VHfDRvcovLBl/cvSjwDoA0xRizdZU33A6F2qFD9A5hu1sDWgGxMLg5m2MOvFlRkUVxSwUv47cuD0/yxB4THYXQ==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-lint-unordered-list-marker-style": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.1.tgz",
+ "integrity": "sha512-dHYD9cHM9ZJ7BKUZ1nEPGfLAHgUmYxccXtms1GSEM/uyUtR2SU/ao1RwZZ+LvacZFCNZ1yG2yKCJhGI/5U/GrA==",
+ "dev": true,
+ "requires": {
+ "unified-lint-rule": "^1.0.0",
+ "unist-util-generated": "^1.1.0",
+ "unist-util-position": "^3.0.0",
+ "unist-util-visit": "^1.1.1"
+ }
+ },
+ "remark-message-control": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-4.1.0.tgz",
+ "integrity": "sha512-e1dszks4YKY7hLAkhS2367jBjBpAfvi+kVgSN/tOFrdp3qxITjiNR5fOFnyYF8vvorkQ9uxlKJoZUOW8T7rKDg==",
+ "dev": true,
+ "requires": {
+ "mdast-comment-marker": "^1.0.0",
+ "unified-message-control": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remark-parse": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz",
+ "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==",
+ "dev": true,
+ "requires": {
+ "collapse-white-space": "^1.0.2",
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "is-word-character": "^1.0.0",
+ "markdown-escapes": "^1.0.0",
+ "parse-entities": "^1.0.2",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "trim": "0.0.1",
+ "trim-trailing-lines": "^1.0.0",
+ "unherit": "^1.0.4",
+ "unist-util-remove-position": "^1.0.0",
+ "vfile-location": "^2.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remark-preset-lint-markdown-style-guide": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.1.tgz",
+ "integrity": "sha512-Ao6fB63WuGtz1fa4rjoI+u1EOu21rWVGPmJlUKZlCICPPB6I815nJ52V0sLYjaw2cs+ZiXsXhdVinN7UpVgXcQ==",
+ "dev": true,
+ "requires": {
+ "remark-lint": "^6.0.0",
+ "remark-lint-blockquote-indentation": "^1.0.0",
+ "remark-lint-code-block-style": "^1.0.0",
+ "remark-lint-definition-case": "^1.0.0",
+ "remark-lint-definition-spacing": "^1.0.0",
+ "remark-lint-emphasis-marker": "^1.0.0",
+ "remark-lint-fenced-code-flag": "^1.0.0",
+ "remark-lint-fenced-code-marker": "^1.0.0",
+ "remark-lint-file-extension": "^1.0.0",
+ "remark-lint-final-definition": "^1.0.0",
+ "remark-lint-hard-break-spaces": "^1.0.0",
+ "remark-lint-heading-increment": "^1.0.0",
+ "remark-lint-heading-style": "^1.0.0",
+ "remark-lint-link-title-style": "^1.0.0",
+ "remark-lint-list-item-content-indent": "^1.0.0",
+ "remark-lint-list-item-indent": "^1.0.0",
+ "remark-lint-list-item-spacing": "^1.0.0",
+ "remark-lint-maximum-heading-length": "^1.0.0",
+ "remark-lint-maximum-line-length": "^1.0.0",
+ "remark-lint-no-auto-link-without-protocol": "^1.0.0",
+ "remark-lint-no-blockquote-without-marker": "^2.0.0",
+ "remark-lint-no-consecutive-blank-lines": "^1.0.0",
+ "remark-lint-no-duplicate-headings": "^1.0.0",
+ "remark-lint-no-emphasis-as-heading": "^1.0.0",
+ "remark-lint-no-file-name-articles": "^1.0.0",
+ "remark-lint-no-file-name-consecutive-dashes": "^1.0.0",
+ "remark-lint-no-file-name-irregular-characters": "^1.0.0",
+ "remark-lint-no-file-name-mixed-case": "^1.0.0",
+ "remark-lint-no-file-name-outer-dashes": "^1.0.0",
+ "remark-lint-no-heading-punctuation": "^1.0.0",
+ "remark-lint-no-inline-padding": "^1.0.0",
+ "remark-lint-no-literal-urls": "^1.0.0",
+ "remark-lint-no-multiple-toplevel-headings": "^1.0.0",
+ "remark-lint-no-shell-dollars": "^1.0.0",
+ "remark-lint-no-shortcut-reference-image": "^1.0.0",
+ "remark-lint-no-shortcut-reference-link": "^1.0.0",
+ "remark-lint-no-table-indentation": "^1.0.0",
+ "remark-lint-ordered-list-marker-style": "^1.0.0",
+ "remark-lint-ordered-list-marker-value": "^1.0.0",
+ "remark-lint-rule-style": "^1.0.0",
+ "remark-lint-strong-marker": "^1.0.0",
+ "remark-lint-table-cell-padding": "^1.0.0",
+ "remark-lint-table-pipe-alignment": "^1.0.0",
+ "remark-lint-table-pipes": "^1.0.0",
+ "remark-lint-unordered-list-marker-style": "^1.0.0"
+ }
+ },
+ "remark-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz",
+ "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==",
+ "dev": true,
+ "requires": {
+ "ccount": "^1.0.0",
+ "is-alphanumeric": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-whitespace-character": "^1.0.0",
+ "longest-streak": "^2.0.1",
+ "markdown-escapes": "^1.0.0",
+ "markdown-table": "^1.1.0",
+ "mdast-util-compact": "^1.0.0",
+ "parse-entities": "^1.0.2",
+ "repeat-string": "^1.5.4",
+ "state-toggle": "^1.0.0",
+ "stringify-entities": "^1.0.1",
+ "unherit": "^1.0.4",
+ "xtend": "^4.0.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.36.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz",
+ "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.20",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
+ "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.36.0"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz",
+ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dev": true,
+ "requires": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "^1.0.0",
+ "onetime": "^1.0.0"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "revalidator": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.3.1.tgz",
+ "integrity": "sha1-/yzEz3zHxjhaxxAXgnbm280Ddi8=",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz",
+ "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.0",
+ "statuses": "~1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ }
+ }
+ },
+ "serve": {
+ "version": "6.5.8",
+ "resolved": "https://registry.npmjs.org/serve/-/serve-6.5.8.tgz",
+ "integrity": "sha512-GZYlJz7f6E7Xq6xbg1rTSvQQV9x4v/yYB/sum6egzSBLa/mdk1PViDSX2JvL0Me83sxu3JpEpQELfakDKbGcrw==",
+ "dev": true,
+ "requires": {
+ "args": "4.0.0",
+ "basic-auth": "2.0.0",
+ "bluebird": "3.5.1",
+ "boxen": "1.3.0",
+ "chalk": "2.4.1",
+ "clipboardy": "1.2.3",
+ "dargs": "5.1.0",
+ "detect-port": "1.2.3",
+ "filesize": "3.6.1",
+ "fs-extra": "6.0.1",
+ "handlebars": "4.0.11",
+ "ip": "1.1.5",
+ "micro": "9.3.1",
+ "micro-compress": "1.0.0",
+ "mime-types": "2.1.18",
+ "node-version": "1.1.3",
+ "openssl-self-signed-certificate": "1.1.6",
+ "opn": "5.3.0",
+ "path-is-inside": "1.0.2",
+ "path-type": "3.0.0",
+ "send": "0.16.2",
+ "update-check": "1.5.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "dargs": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz",
+ "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
+ "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "set-immediate-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
+ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "shellsubstitute": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shellsubstitute/-/shellsubstitute-1.2.0.tgz",
+ "integrity": "sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-git": {
+ "version": "1.107.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz",
+ "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "sliced": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
+ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
+ "dev": true
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "staged-git-files": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz",
+ "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==",
+ "dev": true
+ },
+ "standard": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz",
+ "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==",
+ "dev": true,
+ "requires": {
+ "eslint": "~5.4.0",
+ "eslint-config-standard": "12.0.0",
+ "eslint-config-standard-jsx": "6.0.2",
+ "eslint-plugin-import": "~2.14.0",
+ "eslint-plugin-node": "~7.0.1",
+ "eslint-plugin-promise": "~4.0.0",
+ "eslint-plugin-react": "~7.11.1",
+ "eslint-plugin-standard": "~4.0.0",
+ "standard-engine": "~9.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "eslint": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz",
+ "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.0",
+ "babel-code-frame": "^6.26.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.2",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^5.2.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.11.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^4.0.3",
+ "text-table": "^0.2.0"
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "5.2.0",
+ "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
+ "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.1.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^5.5.2",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rxjs": {
+ "version": "5.5.12",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
+ "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ }
+ }
+ },
+ "standard-engine": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz",
+ "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==",
+ "dev": true,
+ "requires": {
+ "deglob": "^2.1.0",
+ "get-stdin": "^6.0.0",
+ "minimist": "^1.1.0",
+ "pkg-conf": "^2.0.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ }
+ }
+ },
+ "standard-markdown": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/standard-markdown/-/standard-markdown-5.0.0.tgz",
+ "integrity": "sha512-jgGyyMmZqOIYYAHs/ksEkGUa+bngJce2P4FygFIrb1WMkKmQL/RPgsI2njl02r6kiDzHPProOG9y4ABe20joCA==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.1",
+ "commander": "^2.18.0",
+ "globby": "^8.0.1",
+ "lodash.flatten": "^4.4.0",
+ "lodash.range": "^3.2.0",
+ "ora": "^3.0.0",
+ "standard": "^12.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz",
+ "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globby": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz",
+ "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "dir-glob": "^2.0.0",
+ "fast-glob": "^2.0.2",
+ "glob": "^7.1.2",
+ "ignore": "^3.3.5",
+ "pify": "^3.0.0",
+ "slash": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "ora": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz",
+ "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "state-toggle": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz",
+ "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-http": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz",
+ "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "stream-splicer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "string": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz",
+ "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=",
+ "dev": true
+ },
+ "string-argv": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
+ "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringify-entities": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz",
+ "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==",
+ "dev": true,
+ "requires": {
+ "character-entities-html4": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "sumchecker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
+ "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
+ "dev": true
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true,
+ "optional": true
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "table": {
+ "version": "4.0.3",
+ "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz",
+ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.0.1",
+ "ajv-keywords": "^3.0.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz",
+ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "tar": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.2.tgz",
+ "integrity": "sha512-BfkE9CciGGgDsATqkikUHrQrraBCO+ke/1f6SFAEMnxyyfN9lxC+nW1NFWMpqH865DhHIy9vQi682gk1X7friw==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "tar-fs": {
+ "version": "1.16.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
+ "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "mkdirp": "^0.5.1",
+ "pump": "^1.0.0",
+ "tar-stream": "^1.1.2"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
+ "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
+ "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
+ "dev": true,
+ "requires": {
+ "bl": "^1.0.0",
+ "buffer-alloc": "^1.1.0",
+ "end-of-stream": "^1.0.0",
+ "fs-constants": "^1.0.0",
+ "readable-stream": "^2.3.0",
+ "to-buffer": "^1.1.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "rimraf": "~2.2.6"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true
+ }
+ }
+ },
+ "tempfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+ "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "^1.0.0",
+ "uuid": "^2.0.1"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "text-extensions": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz",
+ "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-buffer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
+ "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-readable-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
+ "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
+ "dev": true
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ }
+ }
+ },
+ "to-vfile": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-2.2.0.tgz",
+ "integrity": "sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "vfile": "^2.0.0",
+ "x-is-function": "^1.0.4"
+ }
+ },
+ "touch": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz",
+ "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=",
+ "dev": true,
+ "requires": {
+ "nopt": "~1.0.10"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true,
+ "optional": true
+ },
+ "traverse": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+ "dev": true
+ },
+ "trim": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
+ "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
+ "dev": true
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "trim-off-newlines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+ "dev": true
+ },
+ "trim-trailing-lines": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz",
+ "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==",
+ "dev": true
+ },
+ "trough": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz",
+ "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "tslint": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/tslint/-/tslint-4.5.1.tgz",
+ "integrity": "sha1-BTVocb7yOkNJBnNABvwYgza6gks=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.20.0",
+ "colors": "^1.1.2",
+ "diff": "^3.0.1",
+ "findup-sync": "~0.3.0",
+ "glob": "^7.1.1",
+ "optimist": "~0.6.0",
+ "resolve": "^1.1.7",
+ "tsutils": "^1.1.0",
+ "update-notifier": "^2.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ }
+ }
+ }
+ },
+ "tsutils": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-1.9.1.tgz",
+ "integrity": "sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz",
+ "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz",
+ "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "unherit": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz",
+ "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unified": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz",
+ "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==",
+ "dev": true,
+ "requires": {
+ "bail": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^1.1.0",
+ "trough": "^1.0.0",
+ "vfile": "^2.0.0",
+ "x-is-string": "^0.1.0"
+ }
+ },
+ "unified-args": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-4.0.0.tgz",
+ "integrity": "sha1-jZubitNHvrN/QwVipixNNhtCIg8=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.0",
+ "chokidar": "^1.5.1",
+ "minimist": "^1.2.0",
+ "text-table": "^0.2.0",
+ "unified-engine": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "unified-engine": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-4.0.1.tgz",
+ "integrity": "sha1-lpKql/1cTsNoiXeeElFL746GP8M=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.5.1",
+ "debug": "^2.2.0",
+ "fault": "^1.0.0",
+ "fn-name": "^2.0.1",
+ "glob": "^7.0.3",
+ "ignore": "^3.2.0",
+ "is-empty": "^1.0.0",
+ "is-hidden": "^1.0.1",
+ "is-object": "^1.0.1",
+ "js-yaml": "^3.6.1",
+ "load-plugin": "^2.0.0",
+ "parse-json": "^2.2.0",
+ "to-vfile": "^2.0.0",
+ "trough": "^1.0.0",
+ "vfile-reporter": "^4.0.0",
+ "vfile-statistics": "^1.1.0",
+ "x-is-function": "^1.0.4",
+ "x-is-string": "^0.1.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "unified-lint-rule": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.2.tgz",
+ "integrity": "sha512-WkqwMC1aijHE17W3Z1co7aTI+Dzo1jHdwhI66fTClU1yOTbzAsTqlOD6eeR/MI9235Y3nu2jMDcm8GCeq4gaLg==",
+ "dev": true,
+ "requires": {
+ "wrapped": "^1.0.1"
+ }
+ },
+ "unified-message-control": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-1.0.4.tgz",
+ "integrity": "sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==",
+ "dev": true,
+ "requires": {
+ "trim": "0.0.1",
+ "unist-util-visit": "^1.0.0",
+ "vfile-location": "^2.0.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "unist-util-generated": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.2.tgz",
+ "integrity": "sha512-1HcwiEO62dr0XWGT+abVK4f0aAm8Ik8N08c5nAYVmuSxfvpA9rCcNyX/le8xXj1pJK5nBrGlZefeWB6bN8Pstw==",
+ "dev": true
+ },
+ "unist-util-is": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz",
+ "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==",
+ "dev": true
+ },
+ "unist-util-modify-children": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.2.tgz",
+ "integrity": "sha512-GRi04yhng1WqBf5RBzPkOtWAadcZS2gvuOgNn/cyJBYNxtTuyYqTKN0eg4rC1YJwGnzrqfRB3dSKm8cNCjNirg==",
+ "dev": true,
+ "requires": {
+ "array-iterate": "^1.0.0"
+ }
+ },
+ "unist-util-position": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.0.1.tgz",
+ "integrity": "sha512-05QfJDPI7PE1BIUtAxeSV+cDx21xP7+tUZgSval5CA7tr0pHBwybF7OnEa1dOFqg6BfYH/qiMUnWwWj+Frhlww==",
+ "dev": true
+ },
+ "unist-util-remove-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz",
+ "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==",
+ "dev": true,
+ "requires": {
+ "unist-util-visit": "^1.1.0"
+ }
+ },
+ "unist-util-stringify-position": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz",
+ "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==",
+ "dev": true
+ },
+ "unist-util-visit": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.1.tgz",
+ "integrity": "sha512-0fdB9EQJU0tho5tK0VzOJzAQpPv2LyLZ030b10GxuzAWEfvd54mpY7BMjQ1L69k2YNvL+SvxRzH0yUIehOO8aA==",
+ "dev": true,
+ "requires": {
+ "unist-util-is": "^2.1.1"
+ }
+ },
+ "universal-user-agent": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.0.2.tgz",
+ "integrity": "sha512-nOwvHWLH3dBazyuzbECPA5uVFNd7AlgviXRHgR4yf48QqitIvpdncRrxMbZNMpPPEfgz30I9ubd1XmiJiqsTrg==",
+ "dev": true,
+ "requires": {
+ "os-name": "^3.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "untildify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz",
+ "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "update-check": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.1.tgz",
+ "integrity": "sha512-M3rjq5KwSrWZrm2GVPIQIF+NXpIn5I9mIV67gGoydptQvzRjLp9ZbM6ctFJeNuaWSm5+mNP7aInELjSiLcIw6A==",
+ "dev": true,
+ "requires": {
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0"
+ }
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+ "dev": true,
+ "requires": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^2.0.0"
+ }
+ },
+ "url-template": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+ "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vfile": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz",
+ "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.4",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-message": "^1.0.0"
+ }
+ },
+ "vfile-location": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz",
+ "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==",
+ "dev": true
+ },
+ "vfile-message": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.1.tgz",
+ "integrity": "sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug==",
+ "dev": true,
+ "requires": {
+ "unist-util-stringify-position": "^1.1.1"
+ }
+ },
+ "vfile-reporter": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz",
+ "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=",
+ "dev": true,
+ "requires": {
+ "repeat-string": "^1.5.0",
+ "string-width": "^1.0.0",
+ "supports-color": "^4.1.0",
+ "unist-util-stringify-position": "^1.0.0",
+ "vfile-statistics": "^1.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^2.0.0"
+ }
+ }
+ }
+ },
+ "vfile-statistics": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.1.tgz",
+ "integrity": "sha512-dxUM6IYvGChHuwMT3dseyU5BHprNRXzAV0OHx1A769lVGsTiT50kU7BbpRFV+IE6oWmU+PwHdsTKfXhnDIRIgQ==",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "dev": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "walk-sync": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/walk-sync/-/walk-sync-0.3.2.tgz",
+ "integrity": "sha1-SCcoCvxC0OA1NnxKTjHurA0Tb3U=",
+ "dev": true,
+ "requires": {
+ "ensure-posix-path": "^1.0.0",
+ "matcher-collection": "^1.0.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "webidl-conversions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz",
+ "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
+ "dev": true,
+ "optional": true
+ },
+ "whatwg-url-compat": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz",
+ "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tr46": "~0.0.1"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true,
+ "optional": true
+ },
+ "windows-release": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz",
+ "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.10.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
+ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
+ "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrapped": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz",
+ "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=",
+ "dev": true,
+ "requires": {
+ "co": "3.1.0",
+ "sliced": "^1.0.1"
+ },
+ "dependencies": {
+ "co": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz",
+ "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz",
+ "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "x-is-function": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz",
+ "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=",
+ "dev": true
+ },
+ "x-is-string": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
+ "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
+ "dev": true
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ },
+ "xml-name-validator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+ "dev": true,
+ "optional": true
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
+ "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
+ "dev": true
+ }
+ }
+}
diff --git a/devel/electron5/files/package.json b/devel/electron5/files/package.json
new file mode 100644
index 000000000000..d09524116650
--- /dev/null
+++ b/devel/electron5/files/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "electron",
+ "version": "5.0.13",
+ "repository": "https://github.com/electron/electron",
+ "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
+ "devDependencies": {
+ "@octokit/rest": "^16.3.2",
+ "aliasify": "^2.1.0",
+ "asar": "^0.11.0",
+ "browserify": "^13.1.0",
+ "check-for-leaks": "^1.0.2",
+ "clang-format": "^1.2.3",
+ "colors": "^1.1.2",
+ "dotenv-safe": "^4.0.4",
+ "dugite": "^1.45.0",
+ "electron-docs-linter": "^2.4.0",
+ "electron-typescript-definitions": "^7.0.0",
+ "eslint": "^5.6.0",
+ "eslint-config-standard": "^12.0.0",
+ "eslint-plugin-mocha": "^5.2.0",
+ "folder-hash": "^2.1.1",
+ "got": "^9.6.0",
+ "husky": "^0.14.3",
+ "lint": "^1.1.2",
+ "lint-staged": "^8.1.0",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "octicons": "^7.3.0",
+ "plist": "^3.0.1",
+ "remark-cli": "^4.0.0",
+ "remark-preset-lint-markdown-style-guide": "^2.1.1",
+ "request": "^2.88.0",
+ "semver": "^5.6.0",
+ "serve": "^6.5.8",
+ "standard-markdown": "^5.0.0",
+ "sumchecker": "^2.0.2",
+ "temp": "^0.8.3"
+ },
+ "private": true,
+ "scripts": {
+ "asar": "asar",
+ "browserify": "browserify",
+ "bump-version": "./script/bump-version.js",
+ "check-tls": "python ./script/tls.py",
+ "clang-format": "find atom/ chromium_src/ -iname *.h -o -iname *.cc -o -iname *.mm | xargs clang-format -i",
+ "lint": "node ./script/lint.js && npm run lint:clang-format && npm run lint:docs",
+ "lint:js": "node ./script/lint.js --js",
+ "lint:clang-format": "python script/run-clang-format.py -r -c atom/ chromium_src/ || (echo \"\\nCode not formatted correctly.\" && exit 1)",
+ "lint:cpp": "node ./script/lint.js --cc",
+ "lint:py": "node ./script/lint.js --py",
+ "lint:gn": "node ./script/lint.js --gn",
+ "lint:docs": "remark docs -qf && npm run lint:js-in-markdown && npm run create-typescript-definitions && npm run lint:docs-relative-links",
+ "lint:docs-relative-links": "python ./script/check-relative-doc-links.py",
+ "lint:js-in-markdown": "standard-markdown docs",
+ "create-api-json": "electron-docs-linter docs --outfile=electron-api.json",
+ "create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --in=electron-api.json --out=electron.d.ts && node spec/ts-smoke/runner.js",
+ "preinstall": "node -e 'process.exit(0)'",
+ "precommit": "lint-staged",
+ "prepack": "check-for-leaks",
+ "prepush": "check-for-leaks",
+ "repl": "node ./script/start.js --interactive",
+ "start": "node ./script/start.js",
+ "test": "node ./script/spec-runner.js electron/spec"
+ },
+ "license": "MIT",
+ "author": "Electron Community",
+ "keywords": [
+ "electron"
+ ],
+ "aliasify": {
+ "replacements": {
+ "@electron/internal/(.+)": "./lib/$1"
+ }
+ },
+ "lint-staged": {
+ "*.{js,ts}": [
+ "node script/lint.js --js --fix --only --",
+ "git add"
+ ],
+ "*.{cc,mm,c,h}": [
+ "python script/run-clang-format.py -r -c --fix",
+ "git add"
+ ],
+ "*.md": [
+ "remark -qf"
+ ]
+ }
+}
diff --git a/devel/electron5/files/patch-BUILD.gn b/devel/electron5/files/patch-BUILD.gn
new file mode 100644
index 000000000000..d8d023875781
--- /dev/null
+++ b/devel/electron5/files/patch-BUILD.gn
@@ -0,0 +1,87 @@
+--- BUILD.gn.orig 2019-04-08 08:32:35 UTC
++++ BUILD.gn
+@@ -381,7 +381,7 @@ group("gn_all") {
+ ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ deps += [
+ "//third_party/breakpad:breakpad_unittests",
+ "//third_party/breakpad:core-2-minidump",
+@@ -422,8 +422,6 @@ group("gn_all") {
+ "//net:disk_cache_memory_test",
+ "//net:quic_client",
+ "//net:quic_server",
+- "//sandbox/linux:chrome_sandbox",
+- "//sandbox/linux:sandbox_linux_unittests",
+ "//testing:empty_main",
+ ]
+
+@@ -480,10 +478,6 @@ group("gn_all") {
+ "//chrome/test/chromedriver:chromedriver",
+ "//chrome/test/chromedriver:chromedriver_tests",
+ "//components/sync:run_sync_testserver",
+- "//courgette:courgette",
+- "//courgette:courgette_fuzz",
+- "//courgette:courgette_minimal_tool",
+- "//courgette:courgette_unittests",
+ "//media/cast:generate_barcode_video",
+ "//media/cast:generate_timecode_audio",
+ "//net:crash_cache",
+@@ -538,10 +532,6 @@ group("gn_all") {
+ "//mojo:mojo_perftests",
+ "//services/service_manager/public/cpp",
+ "//testing/gmock:gmock_main",
+- "//third_party/breakpad:dump_syms($host_toolchain)",
+- "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+- "//third_party/breakpad:minidump_dump($host_toolchain)",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+
+ if (!is_android) {
+@@ -615,7 +605,7 @@ group("gn_all") {
+ host_os == "win") {
+ deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
+ }
+- } else if (!is_android && !is_ios && !is_fuchsia) {
++ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
+ deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+ }
+
+@@ -873,7 +863,6 @@ if (is_chromeos) {
+ "//ppapi/examples/video_decode",
+ "//sandbox/linux:chrome_sandbox",
+ "//sandbox/linux:sandbox_linux_unittests",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+
+ # Blocked on https://github.com/catapult-project/catapult/issues/2297
+ #"//third_party/catapult/telemetry:bitmaptools",
+@@ -1001,7 +990,7 @@ if (!is_ios) {
+ ]
+ }
+
+- if (!is_win && !is_android) {
++ if (!is_win && !is_android && !is_bsd) {
+ data_deps +=
+ [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+@@ -1010,7 +999,7 @@ if (!is_ios) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+@@ -1150,9 +1139,6 @@ group("chromium_builder_perf") {
+
+ if (is_win) {
+ data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
+- } else {
+- data_deps +=
+- [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+ if (is_win || is_android) {
+ data_deps += [
diff --git a/devel/electron5/files/patch-apps_ui_views_app__window__frame__view.cc b/devel/electron5/files/patch-apps_ui_views_app__window__frame__view.cc
new file mode 100644
index 000000000000..2a9e23ea3f97
--- /dev/null
+++ b/devel/electron5/files/patch-apps_ui_views_app__window__frame__view.cc
@@ -0,0 +1,11 @@
+--- apps/ui/views/app_window_frame_view.cc.orig 2019-04-08 08:32:35 UTC
++++ apps/ui/views/app_window_frame_view.cc
+@@ -132,7 +132,7 @@ gfx::Rect AppWindowFrameView::GetBoundsForClientView()
+ gfx::Rect AppWindowFrameView::GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ gfx::Rect window_bounds = client_bounds;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Get the difference between the widget's client area bounds and window
+ // bounds, and grow |window_bounds| by that amount.
+ gfx::Insets native_frame_insets =
diff --git a/devel/electron5/files/patch-ash_display_mirror__window__controller.cc b/devel/electron5/files/patch-ash_display_mirror__window__controller.cc
new file mode 100644
index 000000000000..a152baf0e33c
--- /dev/null
+++ b/devel/electron5/files/patch-ash_display_mirror__window__controller.cc
@@ -0,0 +1,14 @@
+--- ash/display/mirror_window_controller.cc.orig 2019-04-08 08:32:36 UTC
++++ ash/display/mirror_window_controller.cc
+@@ -274,7 +274,11 @@ void MirrorWindowController::UpdateWindow(
+ return info.id() == iter->first;
+ }) == display_info_list.end()) {
+ CloseAndDeleteHost(iter->second, true);
++#if defined(__llvm__)
++ mirroring_host_info_map_.erase(iter++);
++#else
+ iter = mirroring_host_info_map_.erase(iter);
++#endif
+ } else {
+ ++iter;
+ }
diff --git a/devel/electron5/files/patch-base_BUILD.gn b/devel/electron5/files/patch-base_BUILD.gn
new file mode 100644
index 000000000000..29d276b82b4b
--- /dev/null
+++ b/devel/electron5/files/patch-base_BUILD.gn
@@ -0,0 +1,67 @@
+--- base/BUILD.gn.orig 2019-04-08 08:32:37 UTC
++++ base/BUILD.gn
+@@ -1185,7 +1185,7 @@ jumbo_component("base") {
+ # Needed for <atomic> if using newer C++ library than sysroot, except if
+ # building inside the cros_sdk environment - use host_toolchain as a
+ # more robust check for this.
+- if (!use_sysroot && (is_android || (is_linux && !is_chromecast)) &&
++ if (!use_sysroot && (is_android || (is_linux && !is_chromecast) && !is_clang) &&
+ host_toolchain != "//build/toolchain/cros:host") {
+ libs += [ "atomic" ]
+ }
+@@ -1211,7 +1211,7 @@ jumbo_component("base") {
+ "allocator/allocator_shim_override_glibc_weak_symbols.h",
+ ]
+ deps += [ "//base/allocator:tcmalloc" ]
+- } else if (is_linux && use_allocator == "none") {
++ } else if ((is_linux && !is_bsd) && use_allocator == "none") {
+ sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
+ } else if (is_android && use_allocator == "none") {
+ sources += [
+@@ -1751,6 +1751,33 @@ jumbo_component("base") {
+ }
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "files/file_path_watcher_linux.cc",
++ "files/file_util_linux.cc",
++ "process/memory_linux.cc",
++ "process/process_handle_linux.cc",
++ "process/process_iterator_linux.cc",
++ "process/process_metrics_linux.cc",
++ "system/sys_info_linux.cc"
++ ]
++ sources += [
++ "files/file_path_watcher_kqueue.cc",
++ "files/file_path_watcher_kqueue.h",
++ "files/file_path_watcher_stub.cc",
++ "process/memory_stubs.cc",
++ "process/process_handle_freebsd.cc",
++ "process/process_iterator_freebsd.cc",
++ "process/process_metrics_freebsd.cc",
++ "system/sys_info_freebsd.cc",
++ ]
++ libs = [
++ "execinfo", # logging.cc
++ "kvm", # process_metrics_freebsd
++ "util" # process_metrics_freebsd
++ ]
++ }
++
+ # iOS
+ if (is_ios) {
+ set_sources_assignment_filter([])
+@@ -2808,6 +2835,12 @@ test("base_unittests") {
+ ]
+ set_sources_assignment_filter(sources_assignment_filter)
+ }
++
++ if (is_bsd) {
++ sources -= [
++ "debug/proc_maps_linux_unittest.cc",
++ ]
++ }
+
+ if (is_win) {
+ deps += [ "//base:scoped_handle_test_dll" ]
diff --git a/devel/electron5/files/patch-base_allocator_allocator__shim.cc b/devel/electron5/files/patch-base_allocator_allocator__shim.cc
new file mode 100644
index 000000000000..710c2b180fe1
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_allocator__shim.cc
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim.cc.orig 2019-04-08 08:32:37 UTC
++++ base/allocator/allocator_shim.cc
+@@ -70,7 +70,7 @@ inline const allocator::AllocatorDispatch* GetChainHea
+ // Unfortunately due to that bug NoBarrier_Load() is mistakenly fully
+ // barriered on Linux+Clang, and that causes visible perf regressons.
+ return reinterpret_cast<const allocator::AllocatorDispatch*>(
+-#if defined(OS_LINUX) && defined(__clang__)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(__clang__)
+ *static_cast<const volatile subtle::AtomicWord*>(&g_chain_head)
+ #else
+ subtle::NoBarrier_Load(&g_chain_head)
diff --git a/devel/electron5/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc b/devel/electron5/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
new file mode 100644
index 000000000000..53f7a7f3a37c
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
@@ -0,0 +1,77 @@
+--- base/allocator/allocator_shim_default_dispatch_to_glibc.cc.orig 2019-04-08 08:18:04 UTC
++++ base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+@@ -3,19 +3,28 @@
+ // found in the LICENSE file.
+
+ #include "base/allocator/allocator_shim.h"
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc_np.h>
+
+-#include <malloc.h>
+-
+ // This translation unit defines a default dispatch for the allocator shim which
+ // routes allocations to libc functions.
+-// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
++// The code here is strongly inspired from tcmalloc's override_glibc.h.
+
+ extern "C" {
+-void* __libc_malloc(size_t size);
+-void* __libc_calloc(size_t n, size_t size);
+-void* __libc_realloc(void* address, size_t size);
+-void* __libc_memalign(size_t alignment, size_t size);
+-void __libc_free(void* ptr);
++void* __malloc(size_t size);
++void* __calloc(size_t n, size_t size);
++void* __realloc(void* address, size_t size);
++void* __memalign(size_t alignment, size_t size) {
++ void *ret;
++ if (__posix_memalign(&ret, alignment, size) != 0) {
++ return nullptr;
++ } else {
++ return ret;
++ }
++}
++int __posix_memalign(void **ptr, size_t alignment, size_t size);
++void __free(void* ptr);
+ } // extern "C"
+
+ namespace {
+@@ -23,32 +32,32 @@ namespace {
+ using base::allocator::AllocatorDispatch;
+
+ void* GlibcMalloc(const AllocatorDispatch*, size_t size, void* context) {
+- return __libc_malloc(size);
++ return __malloc(size);
+ }
+
+ void* GlibcCalloc(const AllocatorDispatch*,
+ size_t n,
+ size_t size,
+ void* context) {
+- return __libc_calloc(n, size);
++ return __calloc(n, size);
+ }
+
+ void* GlibcRealloc(const AllocatorDispatch*,
+ void* address,
+ size_t size,
+ void* context) {
+- return __libc_realloc(address, size);
++ return __realloc(address, size);
+ }
+
+ void* GlibcMemalign(const AllocatorDispatch*,
+ size_t alignment,
+ size_t size,
+ void* context) {
+- return __libc_memalign(alignment, size);
++ return __memalign(alignment, size);
+ }
+
+ void GlibcFree(const AllocatorDispatch*, void* address, void* context) {
+- __libc_free(address);
++ __free(address);
+ }
+
+ size_t GlibcGetSizeEstimate(const AllocatorDispatch*,
diff --git a/devel/electron5/files/patch-base_allocator_allocator__shim__override__libc__symbols.h b/devel/electron5/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
new file mode 100644
index 000000000000..d1053bd90377
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim_override_libc_symbols.h.orig 2019-04-08 08:18:04 UTC
++++ base/allocator/allocator_shim_override_libc_symbols.h
+@@ -10,7 +10,7 @@
+ #endif
+ #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_LIBC_SYMBOLS_H_
+
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "base/allocator/allocator_shim_internals.h"
+
diff --git a/devel/electron5/files/patch-base_allocator_allocator__shim__unittest.cc b/devel/electron5/files/patch-base_allocator_allocator__shim__unittest.cc
new file mode 100644
index 000000000000..1d497a5b7fb7
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_allocator__shim__unittest.cc
@@ -0,0 +1,36 @@
+--- base/allocator/allocator_shim_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/allocator/allocator_shim_unittest.cc
+@@ -348,7 +348,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_size[61], 1u);
+ #endif // !OS_WIN
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void* memalign_ptr = memalign(128, 53);
+ ASSERT_NE(nullptr, memalign_ptr);
+ ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(memalign_ptr) % 128);
+@@ -361,7 +361,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_alignment[kPageSize], 1u);
+ // pvalloc rounds the size up to the next page.
+ ASSERT_GE(aligned_allocs_intercepted_by_size[kPageSize], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ char* realloc_ptr = static_cast<char*>(malloc(10));
+ strcpy(realloc_ptr, "foobar");
+@@ -377,13 +377,13 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ free(zero_alloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(zero_alloc_ptr)], 1u);
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ free(memalign_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
+
+ free(pvalloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ #if !defined(OS_WIN)
+ free(posix_memalign_ptr);
diff --git a/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator.cc b/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator.cc
new file mode 100644
index 000000000000..8cb71cb4f758
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator.cc
@@ -0,0 +1,11 @@
+--- base/allocator/partition_allocator/page_allocator.cc.orig 2019-04-08 08:32:37 UTC
++++ base/allocator/partition_allocator/page_allocator.cc
+@@ -115,7 +115,7 @@ void* AllocPages(void* address,
+ uintptr_t align_base_mask = ~align_offset_mask;
+ DCHECK(!(reinterpret_cast<uintptr_t>(address) & align_offset_mask));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(ARCH_CPU_64_BITS)
+ // On 64 bit Linux, we may need to adjust the address space limit for
+ // guarded allocations.
+ if (length >= kMinimumGuardedMemorySize) {
diff --git a/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h b/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..e6d032068fcf
--- /dev/null
+++ b/devel/electron5/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,38 @@
+--- base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-04-08 08:32:37 UTC
++++ base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -14,7 +14,7 @@
+ #if defined(OS_MACOSX)
+ #include <mach/mach.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_BSD) || defined(OS_LINUX)
+ #include <sys/resource.h>
+
+ #include <algorithm>
+@@ -48,7 +48,7 @@ int GetAccessFlags(PageAccessibilityConfiguration acce
+ }
+ }
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(ARCH_CPU_64_BITS)
+
+ // Multiple guarded memory regions may exceed the process address space limit.
+ // This function will raise or lower the limit by |amount|.
+@@ -68,7 +68,7 @@ bool AdjustAddressSpaceLimit(int64_t amount) {
+ // schemes that reduce that to 4 GiB.
+ constexpr size_t kMinimumGuardedMemorySize = 1ULL << 32; // 4 GiB
+
+-#endif // defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && defined(ARCH_CPU_64_BITS)
+
+ void* SystemAllocPagesInternal(void* hint,
+ size_t length,
+@@ -134,7 +134,7 @@ void SetSystemPagesAccessInternal(
+ void FreePagesInternal(void* address, size_t length) {
+ CHECK(!munmap(address, length));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(ARCH_CPU_64_BITS)
+ // Restore the address space limit.
+ if (length >= kMinimumGuardedMemorySize) {
+ CHECK(AdjustAddressSpaceLimit(-base::checked_cast<int64_t>(length)));
diff --git a/devel/electron5/files/patch-base_debug_debugger__posix.cc b/devel/electron5/files/patch-base_debug_debugger__posix.cc
new file mode 100644
index 000000000000..ac0917a1340f
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_debugger__posix.cc
@@ -0,0 +1,56 @@
+--- base/debug/debugger_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/debug/debugger_posix.cc
+@@ -86,7 +86,7 @@ bool BeingDebugged() {
+ KERN_PROC,
+ KERN_PROC_PID,
+ getpid()
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ , sizeof(struct kinfo_proc),
+ 0
+ #endif
+@@ -94,33 +94,35 @@ bool BeingDebugged() {
+
+ // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
+ // binary interfaces may change.
+- struct kinfo_proc info;
+- size_t info_size = sizeof(info);
++ struct kinfo_proc *info;
++ size_t info_size;
+
+-#if defined(OS_OPENBSD)
+ if (sysctl(mib, base::size(mib), NULL, &info_size, NULL, 0) < 0)
+ return -1;
+
++ info = (struct kinfo_proc *)malloc(info_size);
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+-#endif
+
+- int sysctl_result = sysctl(mib, base::size(mib), &info, &info_size, NULL, 0);
++ int sysctl_result = sysctl(mib, base::size(mib), info, &info_size, NULL, 0);
+ DCHECK_EQ(sysctl_result, 0);
+ if (sysctl_result != 0) {
+ is_set = true;
+ being_debugged = false;
+- return being_debugged;
++ goto out;
+ }
+
+ // This process is being debugged if the P_TRACED flag is set.
+ is_set = true;
+ #if defined(OS_FREEBSD)
+- being_debugged = (info.ki_flag & P_TRACED) != 0;
++ being_debugged = (info->ki_flag & P_TRACED) != 0;
+ #elif defined(OS_BSD)
+- being_debugged = (info.p_flag & P_TRACED) != 0;
++ being_debugged = (info->p_flag & P_TRACED) != 0;
+ #else
+- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
++ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0;
+ #endif
++
++out:
++ free(info);
+ return being_debugged;
+ }
+
diff --git a/devel/electron5/files/patch-base_debug_elf__reader__linux.cc b/devel/electron5/files/patch-base_debug_elf__reader__linux.cc
new file mode 100644
index 000000000000..db49f472e43c
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_elf__reader__linux.cc
@@ -0,0 +1,13 @@
+--- base/debug/elf_reader_linux.cc.orig 2019-04-08 08:32:37 UTC
++++ base/debug/elf_reader_linux.cc
+@@ -41,8 +41,10 @@ Optional<std::string> ElfSegmentBuildIDNoteAsString(co
+ const void* section_end = segment.data() + segment.size_bytes();
+ const Nhdr* note_header = reinterpret_cast<const Nhdr*>(segment.data());
+ while (note_header < section_end) {
++#if !defined(OS_BSD)
+ if (note_header->n_type == NT_GNU_BUILD_ID)
+ break;
++#endif
+ note_header = reinterpret_cast<const Nhdr*>(
+ reinterpret_cast<const char*>(note_header) + sizeof(Nhdr) +
+ bits::Align(note_header->n_namesz, 4) +
diff --git a/devel/electron5/files/patch-base_debug_proc__maps__linux.cc b/devel/electron5/files/patch-base_debug_proc__maps__linux.cc
new file mode 100644
index 000000000000..33d60e4dbaa0
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_proc__maps__linux.cc
@@ -0,0 +1,11 @@
+--- base/debug/proc_maps_linux.cc.orig 2019-04-08 08:18:04 UTC
++++ base/debug/proc_maps_linux.cc
+@@ -12,7 +12,7 @@
+ #include "base/strings/string_split.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_ANDROID)
+ #include <inttypes.h>
+ #endif
+
diff --git a/devel/electron5/files/patch-base_debug_stack__trace.cc b/devel/electron5/files/patch-base_debug_stack__trace.cc
new file mode 100644
index 000000000000..cee67e9b038d
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_stack__trace.cc
@@ -0,0 +1,11 @@
+--- base/debug/stack_trace.cc.orig 2019-04-08 08:32:37 UTC
++++ base/debug/stack_trace.cc
+@@ -14,7 +14,7 @@
+
+ #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <pthread.h>
+ #include "base/process/process_handle.h"
+ #include "base/threading/platform_thread.h"
diff --git a/devel/electron5/files/patch-base_debug_stack__trace.h b/devel/electron5/files/patch-base_debug_stack__trace.h
new file mode 100644
index 000000000000..8d02d84ef1a6
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_stack__trace.h
@@ -0,0 +1,10 @@
+--- base/debug/stack_trace.h.orig 2019-04-08 08:32:37 UTC
++++ base/debug/stack_trace.h
+@@ -16,6 +16,7 @@
+ #include "build/build_config.h"
+
+ #if defined(OS_POSIX)
++#include <sys/stdint.h>
+ #include <unistd.h>
+ #endif
+
diff --git a/devel/electron5/files/patch-base_debug_stack__trace__posix.cc b/devel/electron5/files/patch-base_debug_stack__trace__posix.cc
new file mode 100644
index 000000000000..dc903fb4e662
--- /dev/null
+++ b/devel/electron5/files/patch-base_debug_stack__trace__posix.cc
@@ -0,0 +1,31 @@
+--- base/debug/stack_trace_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/debug/stack_trace_posix.cc
+@@ -35,7 +35,7 @@
+ #include <AvailabilityMacros.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/debug/proc_maps_linux.h"
+ #endif
+
+@@ -653,6 +653,11 @@ class SandboxSymbolizeHelper {
+ // for the modules that are loaded in the current process.
+ // Returns true on success.
+ bool CacheMemoryRegions() {
++#if defined(OS_BSD)
++ // TODO (rene) avoid link error, implement something?
++ NOTIMPLEMENTED();
++ return false;
++#else
+ // Reads /proc/self/maps.
+ std::string contents;
+ if (!ReadProcMaps(&contents)) {
+@@ -670,6 +675,7 @@ class SandboxSymbolizeHelper {
+
+ is_initialized_ = true;
+ return true;
++#endif
+ }
+
+ // Opens all object files and caches their file descriptors.
diff --git a/devel/electron5/files/patch-base_files_file__path__unittest.cc b/devel/electron5/files/patch-base_files_file__path__unittest.cc
new file mode 100644
index 000000000000..127fe7b8c491
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__path__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/files/file_path_unittest.cc
+@@ -1138,7 +1138,7 @@ TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe)
+ "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
+ };
+
+-#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX)
++#if !defined(SYSTEM_NATIVE_UTF8) && (defined(OS_LINUX) || defined(OS_BSD))
+ ScopedLocale locale("en_US.UTF-8");
+ #endif
+
diff --git a/devel/electron5/files/patch-base_files_file__path__watcher__kqueue.h b/devel/electron5/files/patch-base_files_file__path__watcher__kqueue.h
new file mode 100644
index 000000000000..9be1f3928117
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__path__watcher__kqueue.h
@@ -0,0 +1,13 @@
+--- base/files/file_path_watcher_kqueue.h.orig 2019-04-08 08:18:04 UTC
++++ base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,10 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
+ #include <sys/event.h>
+
+ #include <memory>
diff --git a/devel/electron5/files/patch-base_files_file__path__watcher__stub.cc b/devel/electron5/files/patch-base_files_file__path__watcher__stub.cc
new file mode 100644
index 000000000000..239dc46bd460
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__path__watcher__stub.cc
@@ -0,0 +1,51 @@
+--- base/files/file_path_watcher_stub.cc.orig 2019-04-08 08:18:04 UTC
++++ base/files/file_path_watcher_stub.cc
+@@ -1,14 +1,15 @@
+-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
++// Copyright 2014 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-// This file exists for Unix systems which don't have the inotify headers, and
+-// thus cannot build file_watcher_inotify.cc
+
+-#include "base/files/file_path_watcher.h"
++#include <memory>
+
++#include "base/files/file_path_watcher.h"
++#include "base/files/file_path_watcher_kqueue.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
++#include "build/build_config.h"
+
+ namespace base {
+
+@@ -22,12 +23,26 @@ class FilePathWatcherImpl : public FilePathWatcher::Pl
+ bool Watch(const FilePath& path,
+ bool recursive,
+ const FilePathWatcher::Callback& callback) override {
+- return false;
++ DCHECK(!impl_.get());
++ if (recursive) {
++ if (!FilePathWatcher::RecursiveWatchAvailable())
++ return false;
++ } else {
++ impl_ = std::make_unique<FilePathWatcherKQueue>();
++ }
++ DCHECK(impl_.get());
++ return impl_->Watch(path, recursive, callback);
+ }
+
+- void Cancel() override {}
++ void Cancel() override {
++ if (impl_.get())
++ impl_->Cancel();
++ set_cancelled();
++ }
+
+ private:
++ std::unique_ptr<PlatformDelegate> impl_;
++
+ DISALLOW_COPY_AND_ASSIGN(FilePathWatcherImpl);
+ };
+
diff --git a/devel/electron5/files/patch-base_files_file__path__watcher__unittest.cc b/devel/electron5/files/patch-base_files_file__path__watcher__unittest.cc
new file mode 100644
index 000000000000..42bc5b3cc63c
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__path__watcher__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/files/file_path_watcher_unittest.cc
+@@ -436,7 +436,7 @@ TEST_F(FilePathWatcherTest, WatchDirectory) {
+ VLOG(1) << "Waiting for file1 creation";
+ ASSERT_TRUE(WaitForEvents());
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Mac implementation does not detect files modified in a directory.
+ ASSERT_TRUE(WriteFile(file1, "content v2"));
+ VLOG(1) << "Waiting for file1 modification";
diff --git a/devel/electron5/files/patch-base_files_file__util.h b/devel/electron5/files/patch-base_files_file__util.h
new file mode 100644
index 000000000000..c74fb49a2fcc
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__util.h
@@ -0,0 +1,11 @@
+--- base/files/file_util.h.orig 2019-04-08 08:32:37 UTC
++++ base/files/file_util.h
+@@ -445,7 +445,7 @@ BASE_EXPORT bool VerifyPathControlledByAdmin(const bas
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ BASE_EXPORT int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron5/files/patch-base_files_file__util__posix.cc b/devel/electron5/files/patch-base_files_file__util__posix.cc
new file mode 100644
index 000000000000..88e632aa3dc8
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/file_util_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/files/file_util_posix.cc
+@@ -407,7 +407,7 @@ bool CopyDirectoryExcl(const FilePath& from_path,
+ #endif // !defined(OS_NACL_NONSFI)
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron5/files/patch-base_files_memory__mapped__file__posix.cc b/devel/electron5/files/patch-base_files_memory__mapped__file__posix.cc
new file mode 100644
index 000000000000..0f8e33ab197c
--- /dev/null
+++ b/devel/electron5/files/patch-base_files_memory__mapped__file__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/memory_mapped_file_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/files/memory_mapped_file_posix.cc
+@@ -110,6 +110,8 @@ bool MemoryMappedFile::MapFileRegionToMemory(
+ // Only Android API>=21 supports the fallocate call. Older versions need
+ // to manually extend the file by writing zeros at block intervals.
+ do_manual_extension = true;
++#elif defined(OS_BSD)
++ do_manual_extension = true;
+ #elif defined(OS_MACOSX)
+ // MacOS doesn't support fallocate even though their new APFS filesystem
+ // does support sparse files. It does, however, have the functionality
diff --git a/devel/electron5/files/patch-base_i18n_icu__util.cc b/devel/electron5/files/patch-base_i18n_icu__util.cc
new file mode 100644
index 000000000000..0cd66ee1ccfa
--- /dev/null
+++ b/devel/electron5/files/patch-base_i18n_icu__util.cc
@@ -0,0 +1,20 @@
+--- base/i18n/icu_util.cc.orig 2019-04-08 08:32:37 UTC
++++ base/i18n/icu_util.cc
+@@ -20,7 +20,7 @@
+ #include "build/build_config.h"
+ #include "third_party/icu/source/common/unicode/putil.h"
+ #include "third_party/icu/source/common/unicode/udata.h"
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
++#if (defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
+ #include "third_party/icu/source/i18n/unicode/timezone.h"
+ #endif
+
+@@ -315,7 +315,7 @@ bool InitializeICU() {
+ // TODO(jungshik): Some callers do not care about tz at all. If necessary,
+ // add a boolean argument to this function to init'd the default tz only
+ // when requested.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (result)
+ std::unique_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
+ #endif
diff --git a/devel/electron5/files/patch-base_linux__util.cc b/devel/electron5/files/patch-base_linux__util.cc
new file mode 100644
index 000000000000..4cf4d2a2b179
--- /dev/null
+++ b/devel/electron5/files/patch-base_linux__util.cc
@@ -0,0 +1,18 @@
+--- base/linux_util.cc.orig 2019-04-08 08:18:04 UTC
++++ base/linux_util.cc
+@@ -90,12 +90,14 @@ char g_linux_distro[kDistroSize] =
+ "CrOS";
+ #elif defined(OS_ANDROID)
+ "Android";
++#elif defined(OS_BSD)
++ "BSD";
+ #else // if defined(OS_LINUX)
+ "Unknown";
+ #endif
+
+ std::string GetLinuxDistro() {
+-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ return g_linux_distro;
+ #elif defined(OS_LINUX)
+ LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
diff --git a/devel/electron5/files/patch-base_logging__unittest.cc b/devel/electron5/files/patch-base_logging__unittest.cc
new file mode 100644
index 000000000000..ee3a6e93eb8c
--- /dev/null
+++ b/devel/electron5/files/patch-base_logging__unittest.cc
@@ -0,0 +1,11 @@
+--- base/logging_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/logging_unittest.cc
+@@ -420,7 +420,7 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
+ // need the arch-specific boilerplate below, which is inspired by breakpad.
+ // At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
+ uintptr_t crash_addr = 0;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
+ #else // OS_POSIX && !OS_MACOSX
+ ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
diff --git a/devel/electron5/files/patch-base_native__library__posix.cc b/devel/electron5/files/patch-base_native__library__posix.cc
new file mode 100644
index 000000000000..212b19516b56
--- /dev/null
+++ b/devel/electron5/files/patch-base_native__library__posix.cc
@@ -0,0 +1,11 @@
+--- base/native_library_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/native_library_posix.cc
+@@ -29,7 +29,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
+ // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
+ // and http://crbug.com/40794.
+ int flags = RTLD_LAZY;
+-#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND)
++#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND) || defined(OS_BSD)
+ // Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
+ // further investigation, as it might vary across versions. Crash here to
+ // warn developers that they're trying to rely on uncertain behavior.
diff --git a/devel/electron5/files/patch-base_native__library__unittest.cc b/devel/electron5/files/patch-base_native__library__unittest.cc
new file mode 100644
index 000000000000..7db5291a1f3f
--- /dev/null
+++ b/devel/electron5/files/patch-base_native__library__unittest.cc
@@ -0,0 +1,11 @@
+--- base/native_library_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/native_library_unittest.cc
+@@ -120,7 +120,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
+ // Android dlopen() requires further investigation, as it might vary across
+ // versions with respect to symbol resolution scope.
+ // TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
+-#if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
++#if !defined(OS_ANDROID) && !defined(OS_BSD) && !defined(THREAD_SANITIZER) && \
+ !defined(MEMORY_SANITIZER)
+
+ // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
diff --git a/devel/electron5/files/patch-base_numerics_safe__math__shared__impl.h b/devel/electron5/files/patch-base_numerics_safe__math__shared__impl.h
new file mode 100644
index 000000000000..ee762dc89b74
--- /dev/null
+++ b/devel/electron5/files/patch-base_numerics_safe__math__shared__impl.h
@@ -0,0 +1,13 @@
+--- base/numerics/safe_math_shared_impl.h.orig 2019-04-08 08:18:04 UTC
++++ base/numerics/safe_math_shared_impl.h
+@@ -19,9 +19,7 @@
+
+ // Where available use builtin math overflow support on Clang and GCC.
+ #if !defined(__native_client__) && \
+- ((defined(__clang__) && \
+- ((__clang_major__ > 3) || \
+- (__clang_major__ == 3 && __clang_minor__ >= 4))) || \
++ ((defined(__clang__) && (__clang_major__ > 6)) || \
+ (defined(__GNUC__) && __GNUC__ >= 5))
+ #include "base/numerics/safe_math_clang_gcc_impl.h"
+ #define BASE_HAS_OPTIMIZED_SAFE_MATH (1)
diff --git a/devel/electron5/files/patch-base_posix_can__lower__nice__to.cc b/devel/electron5/files/patch-base_posix_can__lower__nice__to.cc
new file mode 100644
index 000000000000..18311971adda
--- /dev/null
+++ b/devel/electron5/files/patch-base_posix_can__lower__nice__to.cc
@@ -0,0 +1,20 @@
+--- base/posix/can_lower_nice_to.cc.orig 2019-04-08 08:18:04 UTC
++++ base/posix/can_lower_nice_to.cc
+@@ -31,6 +31,9 @@ bool CanLowerNiceTo(int nice_value) {
+ if (geteuid() == 0)
+ return true;
+
++#if defined(OS_BSD)
++ return false;
++#else
+ // 2. Skip checking the CAP_SYS_NICE permission because it would require
+ // libcap.so.
+
+@@ -54,6 +57,7 @@ bool CanLowerNiceTo(int nice_value) {
+ // And lowering niceness to |nice_value| is allowed if it is greater than or
+ // equal to the limit:
+ return nice_value >= lowest_nice_allowed;
++#endif
+ }
+
+ } // namespace internal
diff --git a/devel/electron5/files/patch-base_posix_unix__domain__socket.cc b/devel/electron5/files/patch-base_posix_unix__domain__socket.cc
new file mode 100644
index 000000000000..62eea4ed56e5
--- /dev/null
+++ b/devel/electron5/files/patch-base_posix_unix__domain__socket.cc
@@ -0,0 +1,49 @@
+--- base/posix/unix_domain_socket.cc.orig 2019-04-08 08:18:04 UTC
++++ base/posix/unix_domain_socket.cc
+@@ -5,7 +5,10 @@
+ #include "base/posix/unix_domain_socket.h"
+
+ #include <errno.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/ucred.h>
+ #if !defined(OS_NACL_NONSFI)
+ #include <sys/un.h>
+ #endif
+@@ -28,6 +31,14 @@ namespace base {
+
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+
++#ifndef SCM_CREDENTIALS
++# define SCM_CREDENTIALS 0x9001
++#endif
++
++#ifndef SO_PASSCRED
++# define SO_PASSCRED 0x9002
++#endif
++
+ #if !defined(OS_NACL_NONSFI)
+ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+ int raw_socks[2];
+@@ -150,7 +161,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ #if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ // The PNaCl toolchain for Non-SFI binary build and macOS do not support
+ // ucred. macOS supports xucred, but this structure is insufficient.
+- + CMSG_SPACE(sizeof(struct ucred))
++ + CMSG_SPACE(sizeof(struct cmsgcred))
+ #endif // OS_NACL_NONSFI or OS_MACOSX
+ ;
+ char control_buffer[kControlBufferSize];
+@@ -180,9 +191,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ // SCM_CREDENTIALS.
+ if (cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
+- DCHECK_EQ(payload_len, sizeof(struct ucred));
++ DCHECK_EQ(payload_len, sizeof(struct cmsgcred));
+ DCHECK_EQ(pid, -1);
+- pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
++ pid = getpid();
+ }
+ #endif // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ }
diff --git a/devel/electron5/files/patch-base_posix_unix__domain__socket__unittest.cc b/devel/electron5/files/patch-base_posix_unix__domain__socket__unittest.cc
new file mode 100644
index 000000000000..a1e580979139
--- /dev/null
+++ b/devel/electron5/files/patch-base_posix_unix__domain__socket__unittest.cc
@@ -0,0 +1,12 @@
+--- base/posix/unix_domain_socket_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/posix/unix_domain_socket_unittest.cc
+@@ -8,6 +8,9 @@
+ #include <stdint.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
+ #include <unistd.h>
+
+ #include "base/bind.h"
diff --git a/devel/electron5/files/patch-base_process_internal__linux.cc b/devel/electron5/files/patch-base_process_internal__linux.cc
new file mode 100644
index 000000000000..1f3b09942315
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_internal__linux.cc
@@ -0,0 +1,16 @@
+--- base/process/internal_linux.cc.orig 2019-04-08 08:32:37 UTC
++++ base/process/internal_linux.cc
+@@ -60,10 +60,13 @@ bool ReadProcFile(const FilePath& file, std::string* b
+ // Synchronously reading files in /proc is safe.
+ ThreadRestrictions::ScopedAllowIO allow_io;
+
++#if !defined(OS_BSD)
+ if (!ReadFileToString(file, buffer)) {
+ DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
+ return false;
+ }
++#endif
++
+ return !buffer->empty();
+ }
+
diff --git a/devel/electron5/files/patch-base_process_internal__linux.h b/devel/electron5/files/patch-base_process_internal__linux.h
new file mode 100644
index 000000000000..7fa2057432d1
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_internal__linux.h
@@ -0,0 +1,11 @@
+--- base/process/internal_linux.h.orig 2019-04-08 08:18:04 UTC
++++ base/process/internal_linux.h
+@@ -14,6 +14,8 @@
+
+ #include "base/files/file_path.h"
+
++#include <unistd.h> /* pid_t */
++
+ namespace base {
+
+ class Time;
diff --git a/devel/electron5/files/patch-base_process_kill.h b/devel/electron5/files/patch-base_process_kill.h
new file mode 100644
index 000000000000..a28456099a7f
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_kill.h
@@ -0,0 +1,11 @@
+--- base/process/kill.h.orig 2019-04-08 08:18:04 UTC
++++ base/process/kill.h
+@@ -111,7 +111,7 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
+ BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
+ ProcessHandle handle, int* exit_code);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Spawns a thread to wait asynchronously for the child |process| to exit
+ // and then reaps it.
+ BASE_EXPORT void EnsureProcessGetsReaped(Process process);
diff --git a/devel/electron5/files/patch-base_process_kill__posix.cc b/devel/electron5/files/patch-base_process_kill__posix.cc
new file mode 100644
index 000000000000..5e93abfef215
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_kill__posix.cc
@@ -0,0 +1,11 @@
+--- base/process/kill_posix.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/kill_posix.cc
+@@ -168,7 +168,7 @@ void EnsureProcessTerminated(Process process) {
+ 0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void EnsureProcessGetsReaped(Process process) {
+ DCHECK(!process.is_current());
+
diff --git a/devel/electron5/files/patch-base_process_launch.cc b/devel/electron5/files/patch-base_process_launch.cc
new file mode 100644
index 000000000000..6e365ec7c362
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_launch.cc
@@ -0,0 +1,11 @@
+--- base/process/launch.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/launch.cc
+@@ -15,7 +15,7 @@ LaunchOptions::~LaunchOptions() = default;
+
+ LaunchOptions LaunchOptionsForTest() {
+ LaunchOptions options;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // To prevent accidental privilege sharing to an untrusted child, processes
+ // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
+ // new child will be used for testing only.
diff --git a/devel/electron5/files/patch-base_process_launch.h b/devel/electron5/files/patch-base_process_launch.h
new file mode 100644
index 000000000000..acc8bd6739e9
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_launch.h
@@ -0,0 +1,20 @@
+--- base/process/launch.h.orig 2019-04-08 08:32:37 UTC
++++ base/process/launch.h
+@@ -175,7 +175,7 @@ struct BASE_EXPORT LaunchOptions {
+ FileHandleMappingVector fds_to_remap;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If non-zero, start the process using clone(), using flags as provided.
+ // Unlike in clone, clone_flags may not contain a custom termination signal
+ // that is sent to the parent when the child dies. The termination signal will
+@@ -188,7 +188,7 @@ struct BASE_EXPORT LaunchOptions {
+
+ // Sets parent process death signal to SIGKILL.
+ bool kill_on_parent_death = false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ // If valid, launches the application in that job object.
diff --git a/devel/electron5/files/patch-base_process_launch__posix.cc b/devel/electron5/files/patch-base_process_launch__posix.cc
new file mode 100644
index 000000000000..4820ed1c9a8b
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_launch__posix.cc
@@ -0,0 +1,10 @@
+--- base/process/launch_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/process/launch_posix.cc
+@@ -64,6 +64,7 @@
+ #error "macOS should use launch_mac.cc"
+ #endif
+
++#pragma weak environ
+ extern char** environ;
+
+ namespace base {
diff --git a/devel/electron5/files/patch-base_process_memory.cc b/devel/electron5/files/patch-base_process_memory.cc
new file mode 100644
index 000000000000..a38c435dfdf6
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_memory.cc
@@ -0,0 +1,20 @@
+--- base/process/memory.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/memory.cc
+@@ -10,7 +10,7 @@
+ namespace base {
+
+ // Defined in memory_win.cc for Windows.
+-#if !defined(OS_WIN)
++#if !defined(OS_WIN) && !defined(OS_BSD)
+
+ namespace {
+
+@@ -31,7 +31,7 @@ void TerminateBecauseOutOfMemory(size_t size) {
+ #endif
+
+ // Defined in memory_mac.mm for Mac.
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+ const size_t alloc_size = num_items * size;
diff --git a/devel/electron5/files/patch-base_process_memory.h b/devel/electron5/files/patch-base_process_memory.h
new file mode 100644
index 000000000000..92f404bedfdd
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_memory.h
@@ -0,0 +1,11 @@
+--- base/process/memory.h.orig 2019-04-08 08:18:04 UTC
++++ base/process/memory.h
+@@ -32,7 +32,7 @@ BASE_EXPORT void EnableTerminationOnOutOfMemory();
+ // Crash reporting classifies such crashes as OOM.
+ BASE_EXPORT void TerminateBecauseOutOfMemory(size_t size);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ BASE_EXPORT extern size_t g_oom_size;
+
+ // The maximum allowed value for the OOM score.
diff --git a/devel/electron5/files/patch-base_process_memory__unittest.cc b/devel/electron5/files/patch-base_process_memory__unittest.cc
new file mode 100644
index 000000000000..9833e91ea0f3
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_memory__unittest.cc
@@ -0,0 +1,18 @@
+--- base/process/memory_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/memory_unittest.cc
+@@ -104,7 +104,7 @@ TEST(MemoryTest, AllocatorShimWorking) {
+ // OpenBSD does not support these tests. Don't test these on ASan/TSan/MSan
+ // configurations: only test the real allocator.
+ // Windows only supports these tests with the allocator shim in place.
+-#if !defined(OS_OPENBSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
++#if !defined(OS_BSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
+ !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+
+ namespace {
+@@ -529,5 +529,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
+ EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
+ EXPECT_TRUE(value_ == nullptr);
+ }
+-#endif // !defined(OS_OPENBSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
++#endif // !defined(OS_BSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
+ // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/devel/electron5/files/patch-base_process_process__handle.cc b/devel/electron5/files/patch-base_process_process__handle.cc
new file mode 100644
index 000000000000..f450e6993dbd
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__handle.cc
@@ -0,0 +1,11 @@
+--- base/process/process_handle.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_handle.cc
+@@ -39,7 +39,7 @@ uint32_t GetUniqueIdForProcess() {
+ return g_unique_id;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
+ g_unique_id = MangleProcessId(pid_outside_of_namespace);
diff --git a/devel/electron5/files/patch-base_process_process__handle.h b/devel/electron5/files/patch-base_process_process__handle.h
new file mode 100644
index 000000000000..fe93ce086be5
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__handle.h
@@ -0,0 +1,11 @@
+--- base/process/process_handle.h.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_handle.h
+@@ -64,7 +64,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
+ // a process's PID.
+ BASE_EXPORT uint32_t GetUniqueIdForProcess();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // When a process is started in a different PID namespace from the browser
+ // process, this function must be called with the process's PID in the browser's
+ // PID namespace in order to initialize its unique ID. Not thread safe.
diff --git a/devel/electron5/files/patch-base_process_process__handle__freebsd.cc b/devel/electron5/files/patch-base_process_process__handle__freebsd.cc
new file mode 100644
index 000000000000..cbeaad7c83de
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__handle__freebsd.cc
@@ -0,0 +1,17 @@
+--- base/process/process_handle_freebsd.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_handle_freebsd.cc
+@@ -16,10 +16,13 @@ namespace base {
+
+ ProcessId GetParentProcessId(ProcessHandle process) {
+ struct kinfo_proc info;
+- size_t length;
++ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
+
+ if (sysctl(mib, base::size(mib), &info, &length, NULL, 0) < 0)
++ return -1;
++
++ if (length < sizeof(struct kinfo_proc))
+ return -1;
+
+ return info.ki_ppid;
diff --git a/devel/electron5/files/patch-base_process_process__iterator__freebsd.cc b/devel/electron5/files/patch-base_process_process__iterator__freebsd.cc
new file mode 100644
index 000000000000..cc0356e511c7
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__iterator__freebsd.cc
@@ -0,0 +1,44 @@
+--- base/process/process_iterator_freebsd.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_iterator_freebsd.cc
+@@ -10,6 +10,10 @@
+ #include <sys/sysctl.h>
+ #include <unistd.h>
+
++/* getuid() */
++#include <unistd.h>
++#include <sys/types.h>
++
+ #include "base/logging.h"
+ #include "base/stl_util.h"
+ #include "base/strings/string_split.h"
+@@ -40,7 +44,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
+ num_of_kinfo_proc += 16;
+ kinfo_procs_.resize(num_of_kinfo_proc);
+ len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
+- if (sysctl(mib, base::size(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
++ if (sysctl(mib, base::size(mib), kinfo_procs_.data(), &len, NULL, 0) < 0) {
+ // If we get a mem error, it just means we need a bigger buffer, so
+ // loop around again. Anything else is a real error and give up.
+ if (errno != ENOMEM) {
+@@ -72,18 +76,13 @@ bool ProcessIterator::CheckForNextProcess() {
+ for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
+ size_t length;
+ struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
+- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
+
+ if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
+ continue;
+
+- length = 0;
+- if (sysctl(mib, base::size(mib), NULL, &length, NULL, 0) < 0) {
+- LOG(ERROR) << "failed to figure out the buffer size for a command line";
+- continue;
+- }
+-
+- data.resize(length);
++ data.resize(ARG_MAX);
++ length = ARG_MAX;
+
+ if (sysctl(mib, base::size(mib), &data[0], &length, NULL, 0) < 0) {
+ LOG(ERROR) << "failed to fetch a commandline";
diff --git a/devel/electron5/files/patch-base_process_process__linux.cc b/devel/electron5/files/patch-base_process_process__linux.cc
new file mode 100644
index 000000000000..f27dd887f45c
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__linux.cc
@@ -0,0 +1,18 @@
+--- base/process/process_linux.cc.orig 2019-04-08 08:32:37 UTC
++++ base/process/process_linux.cc
+@@ -88,6 +88,7 @@ Time Process::CreationTime() const {
+ return Time(boot_time + start_offset);
+ }
+
++#if !defined(OS_BSD)
+ // static
+ bool Process::CanBackgroundProcesses() {
+ #if defined(OS_CHROMEOS)
+@@ -139,6 +140,7 @@ bool Process::SetProcessBackgrounded(bool background)
+ DPCHECK(result == 0);
+ return result == 0;
+ }
++#endif // !defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ bool IsProcessBackgroundedCGroup(const StringPiece& cgroup_contents) {
diff --git a/devel/electron5/files/patch-base_process_process__metrics.cc b/devel/electron5/files/patch-base_process_process__metrics.cc
new file mode 100644
index 000000000000..b070a2cc0387
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__metrics.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics.cc.orig 2019-04-08 08:32:37 UTC
++++ base/process/process_metrics.cc
+@@ -126,7 +126,7 @@ double ProcessMetrics::GetPlatformIndependentCPUUsage(
+ }
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int ProcessMetrics::CalculateIdleWakeupsPerSecond(
+ uint64_t absolute_idle_wakeups) {
+ return CalculateEventsPerSecond(absolute_idle_wakeups,
+@@ -138,7 +138,7 @@ int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED(); // http://crbug.com/120488
+ return 0;
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ int ProcessMetrics::CalculatePackageIdleWakeupsPerSecond(
diff --git a/devel/electron5/files/patch-base_process_process__metrics.h b/devel/electron5/files/patch-base_process_process__metrics.h
new file mode 100644
index 000000000000..7952e1ce24a2
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__metrics.h
@@ -0,0 +1,112 @@
+--- base/process/process_metrics.h.orig 2019-04-08 08:32:37 UTC
++++ base/process/process_metrics.h
+@@ -41,7 +41,7 @@ namespace base {
+ // Full declaration is in process_metrics_iocounters.h.
+ struct IoCounters;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Minor and major page fault counts since the process creation.
+ // Both counts are process-wide, and exclude child processes.
+ //
+@@ -51,7 +51,7 @@ struct PageFaultCounts {
+ int64_t minor;
+ int64_t major;
+ };
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Convert a POSIX timeval to microseconds.
+ BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv);
+@@ -92,7 +92,7 @@ class BASE_EXPORT ProcessMetrics {
+ // convenience wrapper for CreateProcessMetrics().
+ static std::unique_ptr<ProcessMetrics> CreateCurrentProcessMetrics();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Resident Set Size is a Linux/Android specific memory concept. Do not
+ // attempt to extend this to other platforms.
+ BASE_EXPORT size_t GetResidentSetSize() const;
+@@ -199,14 +199,14 @@ class BASE_EXPORT ProcessMetrics {
+ int GetOpenFdSoftLimit() const;
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Bytes of swap as reported by /proc/[pid]/status.
+ uint64_t GetVmSwapBytes() const;
+
+ // Minor and major page fault count as reported by /proc/[pid]/stat.
+ // Returns true for success.
+ bool GetPageFaultCounts(PageFaultCounts* counts) const;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns total memory usage of malloc.
+ size_t GetMallocUsage();
+@@ -218,7 +218,7 @@ class BASE_EXPORT ProcessMetrics {
+ ProcessMetrics(ProcessHandle process, PortProvider* port_provider);
+ #endif // !defined(OS_MACOSX) || defined(OS_IOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -247,7 +247,7 @@ class BASE_EXPORT ProcessMetrics {
+ // Number of bytes transferred to/from disk in bytes.
+ uint64_t last_cumulative_disk_usage_ = 0;
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Same thing for idle wakeups.
+ TimeTicks last_idle_wakeups_time_;
+ uint64_t last_absolute_idle_wakeups_;
+@@ -293,7 +293,7 @@ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_de
+ #endif // defined(OS_POSIX)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
++ defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Data about system-wide memory consumption. Values are in KB. Available on
+ // Windows, Mac, Linux, Android and Chrome OS.
+ //
+@@ -326,7 +326,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int avail_phys = 0;
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // This provides an estimate of available memory as described here:
+ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
+ // NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
+@@ -341,7 +341,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ #endif
+
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ int buffers = 0;
+ int cached = 0;
+ int active_anon = 0;
+@@ -351,7 +351,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int dirty = 0;
+ int reclaimable = 0;
+ #endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) ||
+- // defined(OS_FUCHSIA)
++ // defined(OS_FUCHSIA) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ int shmem = 0;
+@@ -377,9 +377,9 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo);
+
+ #endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
+- // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
++ // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // Parse the data found in /proc/<pid>/stat and return the sum of the
+ // CPU-related ticks. Returns -1 on parse error.
+ // Exposed for testing.
diff --git a/devel/electron5/files/patch-base_process_process__metrics__freebsd.cc b/devel/electron5/files/patch-base_process_process__metrics__freebsd.cc
new file mode 100644
index 000000000000..32ca973b48b3
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__metrics__freebsd.cc
@@ -0,0 +1,122 @@
+--- base/process/process_metrics_freebsd.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_metrics_freebsd.cc
+@@ -5,6 +5,7 @@
+ #include "base/process/process_metrics.h"
+
+ #include <stddef.h>
++#include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <sys/user.h>
+ #include <unistd.h>
+@@ -14,11 +15,15 @@
+ #include "base/process/process_metrics_iocounters.h"
+ #include "base/stl_util.h"
+
++#include <unistd.h> /* getpagesize() */
++#include <fcntl.h> /* O_RDONLY */
++#include <kvm.h>
++#include <libutil.h>
++
+ namespace base {
+
+ ProcessMetrics::ProcessMetrics(ProcessHandle process)
+- : process_(process),
+- last_cpu_(0) {}
++ : process_(process) {}
+
+ // static
+ std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
+@@ -69,4 +74,93 @@ size_t GetSystemCommitCharge() {
+ return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
+ }
+
++int GetNumberOfThreads(ProcessHandle process) {
++ // Taken from FreeBSD top (usr.bin/top/machine.c)
++
++ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
++ if (kd == NULL)
++ return 0;
++
++ struct kinfo_proc* pbase;
++ int nproc;
++ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
++ if (pbase == NULL)
++ return 0;
++
++ if (kvm_close(kd) == -1)
++ return 0;
++
++ return nproc;
++}
++
++bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
++ unsigned int mem_total, mem_free, swap_total, swap_used;
++ size_t length;
++ int pagesizeKB;
++
++ pagesizeKB = getpagesize() / 1024;
++
++ length = sizeof(mem_total);
++ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
++ &length, NULL, 0) != 0 || length != sizeof(mem_total))
++ return false;
++
++ length = sizeof(mem_free);
++ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
++ != 0 || length != sizeof(mem_free))
++ return false;
++
++ length = sizeof(swap_total);
++ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
++ != 0 || length != sizeof(swap_total))
++ return false;
++
++ length = sizeof(swap_used);
++ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
++ != 0 || length != sizeof(swap_used))
++ return false;
++
++ meminfo->total = mem_total * pagesizeKB;
++ meminfo->free = mem_free * pagesizeKB;
++ meminfo->swap_total = swap_total * pagesizeKB;
++ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
++
++ return true;
++}
++
++int ProcessMetrics::GetOpenFdCount() const {
++ struct kinfo_file * kif;
++ int cnt;
++
++ if ((kif = kinfo_getfile(process_, &cnt)) == NULL)
++ return -1;
++
++ free(kif);
++
++ return cnt;
++}
++
++int ProcessMetrics::GetOpenFdSoftLimit() const {
++ size_t length;
++ int total_count = 0;
++ int mib[] = { CTL_KERN, KERN_MAXFILESPERPROC };
++
++ length = sizeof(total_count);
++
++ if (sysctl(mib, base::size(mib), &total_count, &length, NULL, 0) < 0) {
++ total_count = -1;
++ }
++
++ return total_count;
++}
++
++uint64_t ProcessMetrics::GetVmSwapBytes() const {
++ NOTIMPLEMENTED();
++ return 0;
++}
++
++int ProcessMetrics::GetIdleWakeupsPerSecond() {
++ NOTIMPLEMENTED();
++ return 0;
++}
+ } // namespace base
diff --git a/devel/electron5/files/patch-base_process_process__metrics__posix.cc b/devel/electron5/files/patch-base_process_process__metrics__posix.cc
new file mode 100644
index 000000000000..b9c9af87bc40
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__metrics__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics_posix.cc.orig 2019-04-08 08:18:04 UTC
++++ base/process/process_metrics_posix.cc
+@@ -19,6 +19,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_FREEBSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -107,7 +109,7 @@ size_t ProcessMetrics::GetMallocUsage() {
+ #else
+ return minfo.hblkhd + minfo.arena;
+ #endif
+-#elif defined(OS_FUCHSIA)
++#elif defined(OS_FUCHSIA) || defined(OS_BSD)
+ // TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
+ return 0;
+ #endif
diff --git a/devel/electron5/files/patch-base_process_process__unittest.cc b/devel/electron5/files/patch-base_process_process__unittest.cc
new file mode 100644
index 000000000000..bc086121d761
--- /dev/null
+++ b/devel/electron5/files/patch-base_process_process__unittest.cc
@@ -0,0 +1,11 @@
+--- base/process/process_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/process/process_unittest.cc
+@@ -148,7 +148,7 @@ TEST_F(ProcessTest, CreationTimeOtherProcess) {
+ // was spawned and a time recorded after it was spawned. However, since the
+ // base::Time and process creation clocks don't match, tolerate some error.
+ constexpr base::TimeDelta kTolerance =
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, process creation time is relative to boot time which has a
+ // 1-second resolution. Tolerate 1 second for the imprecise boot time and
+ // 100 ms for the imprecise clock.
diff --git a/devel/electron5/files/patch-base_profiler_stack__sampling__profiler__unittest.cc b/devel/electron5/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
new file mode 100644
index 000000000000..ac1871b5049f
--- /dev/null
+++ b/devel/electron5/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
@@ -0,0 +1,11 @@
+--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/profiler/stack_sampling_profiler_unittest.cc
+@@ -39,7 +39,7 @@
+ #include <intrin.h>
+ #include <malloc.h>
+ #include <windows.h>
+-#else
++#elif !defined(OS_BSD)
+ #include <alloca.h>
+ #endif
+
diff --git a/devel/electron5/files/patch-base_security__unittest.cc b/devel/electron5/files/patch-base_security__unittest.cc
new file mode 100644
index 000000000000..ef38e563e13c
--- /dev/null
+++ b/devel/electron5/files/patch-base_security__unittest.cc
@@ -0,0 +1,11 @@
+--- base/security_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/security_unittest.cc
+@@ -59,7 +59,7 @@ NOINLINE Type HideValueFromCompiler(volatile Type valu
+ // FAILS_ is too clunky.
+ void OverflowTestsSoftExpectTrue(bool overflow_detected) {
+ if (!overflow_detected) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_NACL)
+ // Sadly, on Linux, Android, and OSX we don't have a good story yet. Don't
+ // fail the test, but report.
+ printf("Platform has overflow: %s\n",
diff --git a/devel/electron5/files/patch-base_strings_safe__sprintf__unittest.cc b/devel/electron5/files/patch-base_strings_safe__sprintf__unittest.cc
new file mode 100644
index 000000000000..93b2e94497f8
--- /dev/null
+++ b/devel/electron5/files/patch-base_strings_safe__sprintf__unittest.cc
@@ -0,0 +1,18 @@
+--- base/strings/safe_sprintf_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/strings/safe_sprintf_unittest.cc
+@@ -730,6 +730,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
+ }
+
+ TEST(SafeSPrintfTest, EmitNULL) {
++/* Avoid compiler error: http://pastebin.com/1edWUE84
+ char buf[40];
+ #if defined(__GNUC__)
+ #pragma GCC diagnostic push
+@@ -741,6 +742,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
+ EXPECT_EQ("0x0", std::string(buf));
+ EXPECT_EQ(6, SafeSPrintf(buf, "%s", NULL));
+ EXPECT_EQ("<NULL>", std::string(buf));
++*/
+ #if defined(__GCC__)
+ #pragma GCC diagnostic pop
+ #endif
diff --git a/devel/electron5/files/patch-base_system_sys__info__freebsd.cc b/devel/electron5/files/patch-base_system_sys__info__freebsd.cc
new file mode 100644
index 000000000000..5bd6a7ab8a8f
--- /dev/null
+++ b/devel/electron5/files/patch-base_system_sys__info__freebsd.cc
@@ -0,0 +1,71 @@
+--- base/system/sys_info_freebsd.cc.orig 2019-04-08 08:18:04 UTC
++++ base/system/sys_info_freebsd.cc
+@@ -13,26 +13,58 @@
+ namespace base {
+
+ int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
+- int pages, page_size;
++ int pages, page_size, r = 0;
+ size_t size = sizeof(pages);
+- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+- if (pages == -1 || page_size == -1) {
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
++ if(r == 0)
++ r =sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+ }
+
+-// static
+-uint64_t SysInfo::MaxSharedMemorySize() {
+- size_t limit;
+- size_t size = sizeof(limit);
+- if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
++int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
++ int page_size, r = 0;
++ unsigned pgfree, pginact, pgcache;
++ size_t size = sizeof(page_size);
++ size_t szpg = sizeof(pgfree);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+- return static_cast<uint64_t>(limit);
++ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
++}
++
++// static
++std::string SysInfo::CPUModelName() {
++ int mib[] = { CTL_HW, HW_MODEL };
++ char name[256];
++ size_t size = base::size(name);
++ if (sysctl(mib, base::size(mib), &name, &size, NULL, 0) == 0)
++ return name;
++ return std::string();
++}
++
++int SysInfo::NumberOfProcessors() {
++ int mib[] = { CTL_HW, HW_NCPU };
++ int ncpu;
++ size_t size = sizeof(ncpu);
++ if (sysctl(mib, base::size(mib), &ncpu, &size, NULL, 0) == -1) {
++ NOTREACHED();
++ return 1;
++ }
++ return ncpu;
+ }
+
+ } // namespace base
diff --git a/devel/electron5/files/patch-base_system_sys__info__posix.cc b/devel/electron5/files/patch-base_system_sys__info__posix.cc
new file mode 100644
index 000000000000..20cae1f3dac7
--- /dev/null
+++ b/devel/electron5/files/patch-base_system_sys__info__posix.cc
@@ -0,0 +1,38 @@
+--- base/system/sys_info_posix.cc.orig 2019-04-08 08:32:37 UTC
++++ base/system/sys_info_posix.cc
+@@ -38,7 +38,7 @@
+
+ namespace {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ int NumberOfProcessors() {
+ // sysconf returns the number of "logical" (not "physical") processors on both
+ // Mac and Linux. So we get the number of max available "logical" processors.
+@@ -64,7 +64,7 @@ int NumberOfProcessors() {
+
+ base::LazyInstance<base::internal::LazySysInfoValue<int, NumberOfProcessors>>::
+ Leaky g_lazy_number_of_processors = LAZY_INSTANCE_INITIALIZER;
+-#endif // !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#endif // !defined(OS_BSD) && !defined(OS_FUCHSIA)
+
+ #if !defined(OS_FUCHSIA)
+ int64_t AmountOfVirtualMemory() {
+@@ -132,7 +132,7 @@ bool GetDiskSpaceInfo(const base::FilePath& path,
+
+ namespace base {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ int SysInfo::NumberOfProcessors() {
+ return g_lazy_number_of_processors.Get().value();
+ }
+@@ -225,6 +225,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron5/files/patch-base_task_task__scheduler_scheduler__single__thread__task__runner__manager__unittest.cc b/devel/electron5/files/patch-base_task_task__scheduler_scheduler__single__thread__task__runner__manager__unittest.cc
new file mode 100644
index 000000000000..4ab50e1aa725
--- /dev/null
+++ b/devel/electron5/files/patch-base_task_task__scheduler_scheduler__single__thread__task__runner__manager__unittest.cc
@@ -0,0 +1,12 @@
+--- base/task/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc.orig 2019-04-08 08:32:37 UTC
++++ base/task/task_scheduler/scheduler_single_thread_task_runner_manager_unittest.cc
+@@ -295,6 +295,9 @@ TEST_P(TaskSchedulerSingleThreadTaskRunnerManagerCommo
+ EXPECT_EQ(ThreadPriority::NORMAL, thread_priority_normal);
+ }
+
++#if defined(OS_BSD)
++#define ThreadNamesSet DISABLED_ThreadNamesSet
++#endif
+ TEST_P(TaskSchedulerSingleThreadTaskRunnerManagerCommonTest, ThreadNamesSet) {
+ constexpr TaskTraits foo_traits = {TaskPriority::BEST_EFFORT,
+ TaskShutdownBehavior::BLOCK_SHUTDOWN};
diff --git a/devel/electron5/files/patch-base_test_generate__fontconfig__caches.cc b/devel/electron5/files/patch-base_test_generate__fontconfig__caches.cc
new file mode 100644
index 000000000000..393129fa70b0
--- /dev/null
+++ b/devel/electron5/files/patch-base_test_generate__fontconfig__caches.cc
@@ -0,0 +1,17 @@
+--- base/test/generate_fontconfig_caches.cc.orig 2019-04-08 08:32:37 UTC
++++ base/test/generate_fontconfig_caches.cc
+@@ -57,7 +57,14 @@ int main() {
+ base::TearDownFontconfig();
+
+ // Check existence of intended fontconfig cache file.
++#if defined(OS_BSD)
++ // Our version of fontconfig is too old to respect .uuid files in font directories,
++ // so we check for the CACHEDIR.TAG file instead
+ CHECK(base::PathExists(
++ fontconfig_caches.Append("CACHEDIR.TAG")));
++#else
++ CHECK(base::PathExists(
+ fontconfig_caches.Append(base::StrCat({uuid, "-le64.cache-7"}))));
++#endif
+ return 0;
+ }
diff --git a/devel/electron5/files/patch-base_test_launcher_test__launcher.cc b/devel/electron5/files/patch-base_test_launcher_test__launcher.cc
new file mode 100644
index 000000000000..6eaed5f3f4cb
--- /dev/null
+++ b/devel/electron5/files/patch-base_test_launcher_test__launcher.cc
@@ -0,0 +1,10 @@
+--- base/test/launcher/test_launcher.cc.orig 2019-04-08 08:32:37 UTC
++++ base/test/launcher/test_launcher.cc
+@@ -53,6 +53,7 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+
+ #if defined(OS_POSIX)
++#include <signal.h>
+ #include <fcntl.h>
+
+ #include "base/files/file_descriptor_watcher_posix.h"
diff --git a/devel/electron5/files/patch-base_test_test__file__util__linux.cc b/devel/electron5/files/patch-base_test_test__file__util__linux.cc
new file mode 100644
index 000000000000..e6f34fe8ae09
--- /dev/null
+++ b/devel/electron5/files/patch-base_test_test__file__util__linux.cc
@@ -0,0 +1,13 @@
+--- base/test/test_file_util_linux.cc.orig 2019-04-08 08:18:04 UTC
++++ base/test/test_file_util_linux.cc
+@@ -51,8 +51,10 @@ bool EvictFileFromSystemCache(const FilePath& file) {
+ return false;
+ if (fdatasync(fd.get()) != 0)
+ return false;
++#if !defined(OS_BSD)
+ if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
+ return false;
++#endif
+ return true;
+ }
+
diff --git a/devel/electron5/files/patch-base_test_test__file__util__posix.cc b/devel/electron5/files/patch-base_test_test__file__util__posix.cc
new file mode 100644
index 000000000000..ed6da8975a70
--- /dev/null
+++ b/devel/electron5/files/patch-base_test_test__file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/test/test_file_util_posix.cc.orig 2019-04-08 08:18:04 UTC
++++ base/test/test_file_util_posix.cc
+@@ -85,7 +85,7 @@ void SyncPageCacheToDisk() {
+ sync();
+ }
+
+-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ bool EvictFileFromSystemCache(const FilePath& file) {
+ // There doesn't seem to be a POSIX way to cool the disk cache.
+ NOTIMPLEMENTED();
diff --git a/devel/electron5/files/patch-base_third__party_libevent_BUILD.gn b/devel/electron5/files/patch-base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..f47077ef1123
--- /dev/null
+++ b/devel/electron5/files/patch-base_third__party_libevent_BUILD.gn
@@ -0,0 +1,24 @@
+--- base/third_party/libevent/BUILD.gn.orig 2019-04-08 08:18:04 UTC
++++ base/third_party/libevent/BUILD.gn
+@@ -43,13 +43,20 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
+- } else if (is_linux) {
++ } else if (is_linux && !is_bsd) {
+ sources += [
+ "epoll.c",
+ "linux/config.h",
+ "linux/event-config.h",
+ ]
+ include_dirs = [ "linux" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_android) {
+ sources += [
+ "android/config.h",
diff --git a/devel/electron5/files/patch-base_threading_platform__thread.h b/devel/electron5/files/patch-base_threading_platform__thread.h
new file mode 100644
index 000000000000..9d84e5d980a6
--- /dev/null
+++ b/devel/electron5/files/patch-base_threading_platform__thread.h
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread.h.orig 2019-04-08 08:18:04 UTC
++++ base/threading/platform_thread.h
+@@ -220,7 +220,7 @@ class BASE_EXPORT PlatformThread {
+
+ static ThreadPriority GetCurrentThreadPriority();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Toggles a specific thread's priority at runtime. This can be used to
+ // change the priority of a thread in a different process and will fail
+ // if the calling process does not have proper permissions. The
diff --git a/devel/electron5/files/patch-base_threading_platform__thread__linux.cc b/devel/electron5/files/patch-base_threading_platform__thread__linux.cc
new file mode 100644
index 000000000000..0dd787928c93
--- /dev/null
+++ b/devel/electron5/files/patch-base_threading_platform__thread__linux.cc
@@ -0,0 +1,30 @@
+--- base/threading/platform_thread_linux.cc.orig 2019-04-08 08:32:37 UTC
++++ base/threading/platform_thread_linux.cc
+@@ -18,7 +18,9 @@
+
+ #if !defined(OS_NACL) && !defined(OS_AIX)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -99,7 +101,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToN
+
+ Optional<bool> CanIncreaseCurrentThreadPriorityForPlatform(
+ ThreadPriority priority) {
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // A non-zero soft-limit on RLIMIT_RTPRIO is required to be allowed to invoke
+ // pthread_setschedparam in SetCurrentThreadPriorityForPlatform().
+ struct rlimit rlim;
+@@ -141,7 +143,7 @@ Optional<ThreadPriority> GetCurrentThreadPriorityForPl
+ void PlatformThread::SetName(const std::string& name) {
+ ThreadIdNameManager::GetInstance()->SetName(name);
+
+-#if !defined(OS_NACL) && !defined(OS_AIX)
++#if !defined(OS_NACL) && !defined(OS_AIX) && !defined(OS_BSD)
+ // On linux we can get the thread names to show up in the debugger by setting
+ // the process name for the LWP. We don't want to do this for the main
+ // thread because that would rename the process, causing tools like killall
diff --git a/devel/electron5/files/patch-base_threading_platform__thread__posix.cc b/devel/electron5/files/patch-base_threading_platform__thread__posix.cc
new file mode 100644
index 000000000000..1a05103cf05a
--- /dev/null
+++ b/devel/electron5/files/patch-base_threading_platform__thread__posix.cc
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread_posix.cc.orig 2019-04-08 08:18:04 UTC
++++ base/threading/platform_thread_posix.cc
+@@ -66,7 +66,7 @@ void* ThreadFunc(void* params) {
+ if (!thread_params->joinable)
+ base::ThreadRestrictions::SetSingletonAllowed(false);
+
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // Threads on linux/android may inherit their priority from the thread
+ // where they were created. This explicitly sets the priority of all new
+ // threads.
diff --git a/devel/electron5/files/patch-base_threading_thread__local__storage__unittest.cc b/devel/electron5/files/patch-base_threading_thread__local__storage__unittest.cc
new file mode 100644
index 000000000000..cbd473a0a6e7
--- /dev/null
+++ b/devel/electron5/files/patch-base_threading_thread__local__storage__unittest.cc
@@ -0,0 +1,11 @@
+--- base/threading/thread_local_storage_unittest.cc.orig 2019-04-08 08:18:04 UTC
++++ base/threading/thread_local_storage_unittest.cc
+@@ -86,7 +86,7 @@ class ThreadLocalStorageRunner : public DelegateSimple
+ void ThreadLocalStorageCleanup(void *value) {
+ int *ptr = reinterpret_cast<int*>(value);
+ // Destructors should never be called with a NULL.
+- ASSERT_NE(reinterpret_cast<int*>(NULL), ptr);
++ ASSERT_NE(static_cast<int*>(NULL), ptr);
+ if (*ptr == kFinalTlsValue)
+ return; // We've been called enough times.
+ ASSERT_LT(kFinalTlsValue, *ptr);
diff --git a/devel/electron5/files/patch-base_threading_thread__task__runner__handle.cc b/devel/electron5/files/patch-base_threading_thread__task__runner__handle.cc
new file mode 100644
index 000000000000..24b97496da5b
--- /dev/null
+++ b/devel/electron5/files/patch-base_threading_thread__task__runner__handle.cc
@@ -0,0 +1,26 @@
+--- base/threading/thread_task_runner_handle.cc.orig 2019-04-08 08:32:37 UTC
++++ base/threading/thread_task_runner_handle.cc
+@@ -7,6 +7,7 @@
+ #include <utility>
+
+ #include "base/bind.h"
++#include "base/callback_helpers.h"
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/memory/ptr_util.h"
+@@ -37,6 +38,7 @@ bool ThreadTaskRunnerHandle::IsSet() {
+ return !!thread_task_runner_tls.Pointer()->Get();
+ }
+
++#if defined(OS_BSD)
+ // static
+ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideForTesting(
+ scoped_refptr<SingleThreadTaskRunner> overriding_task_runner) {
+@@ -86,6 +88,7 @@ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideFo
+ base::Unretained(ttrh->task_runner_.get()),
+ std::move(no_running_during_override)));
+ }
++#endif
+
+ ThreadTaskRunnerHandle::ThreadTaskRunnerHandle(
+ scoped_refptr<SingleThreadTaskRunner> task_runner)
diff --git a/devel/electron5/files/patch-base_trace__event_malloc__dump__provider.cc b/devel/electron5/files/patch-base_trace__event_malloc__dump__provider.cc
new file mode 100644
index 000000000000..d63474cc9ef4
--- /dev/null
+++ b/devel/electron5/files/patch-base_trace__event_malloc__dump__provider.cc
@@ -0,0 +1,21 @@
+--- base/trace_event/malloc_dump_provider.cc.orig 2019-04-08 08:18:04 UTC
++++ base/trace_event/malloc_dump_provider.cc
+@@ -17,6 +17,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_BSD)
++#include "stdlib.h"
+ #else
+ #include <malloc.h>
+ #endif
+@@ -132,6 +134,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
+ }
+ #elif defined(OS_FUCHSIA)
+ // TODO(fuchsia): Port, see https://crbug.com/706592.
++#elif defined(OS_BSD)
++ total_virtual_size = 0;
++ allocated_objects_size = 0;
+ #else
+ struct mallinfo info = mallinfo();
+ DCHECK_GE(info.arena + info.hblkhd, info.uordblks);
diff --git a/devel/electron5/files/patch-base_trace__event_process__memory__dump.cc b/devel/electron5/files/patch-base_trace__event_process__memory__dump.cc
new file mode 100644
index 000000000000..577ae0fbd22f
--- /dev/null
+++ b/devel/electron5/files/patch-base_trace__event_process__memory__dump.cc
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.cc.orig 2019-04-08 08:18:04 UTC
++++ base/trace_event/process_memory_dump.cc
+@@ -94,7 +94,7 @@ size_t ProcessMemoryDump::CountResidentBytes(void* sta
+ #if defined(OS_WIN)
+ std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
+ new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<char[]> vec(new char[max_vec_size]);
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
diff --git a/devel/electron5/files/patch-base_trace__event_process__memory__dump.h b/devel/electron5/files/patch-base_trace__event_process__memory__dump.h
new file mode 100644
index 000000000000..112a2738cf3a
--- /dev/null
+++ b/devel/electron5/files/patch-base_trace__event_process__memory__dump.h
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.h.orig 2019-04-08 08:32:37 UTC
++++ base/trace_event/process_memory_dump.h
+@@ -22,7 +22,7 @@
+
+ // Define COUNT_RESIDENT_BYTES_SUPPORTED if platform supports counting of the
+ // resident memory.
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ #define COUNT_RESIDENT_BYTES_SUPPORTED
+ #endif
+
diff --git a/devel/electron5/files/patch-build_config_BUILD.gn b/devel/electron5/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..973325f3fcd3
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig 2019-04-08 08:32:37 UTC
++++ build/config/BUILD.gn
+@@ -162,7 +162,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
++ } else if ((is_linux || is_bsd) && current_cpu == "x64" && enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+ # TODO(phajdan.jr): Should we enable this for all of POSIX?
+@@ -263,9 +263,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -342,7 +340,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_config" ]
+ if (is_chromecast) {
+ configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/devel/electron5/files/patch-build_config_BUILDCONFIG.gn b/devel/electron5/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..4e7c32e4f711
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,48 @@
+--- build/config/BUILDCONFIG.gn.orig 2019-04-09 12:48:19 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -134,10 +134,10 @@ declare_args() {
+ is_official_build = false
+
+ # Whether we're a traditional desktop unix.
+- is_desktop_linux = current_os == "linux"
++ is_desktop_linux = current_os == "linux" || current_os == "freebsd"
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64")
+@@ -189,8 +189,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" && target_os != "freebsd") {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+ } else if (is_clang) {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -227,7 +227,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -294,10 +294,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "chromeos" || current_os == "linux"
++is_linux = current_os == "chromeos" || current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+
+ is_posix = !is_win && !is_fuchsia
+
diff --git a/devel/electron5/files/patch-build_config_allocator.gni b/devel/electron5/files/patch-build_config_allocator.gni
new file mode 100644
index 000000000000..6a46f90fb175
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_allocator.gni
@@ -0,0 +1,20 @@
+--- build/config/allocator.gni.orig 2019-04-08 08:32:37 UTC
++++ build/config/allocator.gni
+@@ -6,7 +6,7 @@ import("//build/config/sanitizers/sanitizers.gni")
+
+ # Temporarily disable tcmalloc on arm64 linux to get rid of compilation errors.
+ if (is_android || is_mac || is_ios || is_asan || is_lsan || is_tsan ||
+- is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64")) {
++ is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64") || is_bsd) {
+ _default_allocator = "none"
+ } else {
+ _default_allocator = "tcmalloc"
+@@ -17,7 +17,7 @@ if (is_android || is_mac || is_ios || is_asan || is_ls
+ # against the debug CRT with "is_nacl=false".
+ if ((is_linux || is_android || is_mac ||
+ (is_win && !is_component_build && !is_debug)) && !is_asan && !is_lsan &&
+- !is_tsan && !is_msan) {
++ !is_tsan && !is_msan && !is_bsd) {
+ _default_use_allocator_shim = true
+ } else {
+ _default_use_allocator_shim = false
diff --git a/devel/electron5/files/patch-build_config_compiler_BUILD.gn b/devel/electron5/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..1636f0fabb6b
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,83 @@
+--- build/config/compiler/BUILD.gn.orig 2019-04-08 08:32:37 UTC
++++ build/config/compiler/BUILD.gn
+@@ -53,7 +53,7 @@ declare_args() {
+ # only two architectures that are currently checked in). Turn this off when
+ # you are using a custom toolchain and need to control -B in cflags.
+ linux_use_bundled_binutils =
+- linux_use_bundled_binutils_override && is_linux &&
++ linux_use_bundled_binutils_override && (is_linux && !is_bsd) &&
+ (current_cpu == "x64" || current_cpu == "x86")
+ binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
+ root_build_dir)
+@@ -275,7 +275,7 @@ config("compiler") {
+ # Linker warnings.
+ if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
+ !(is_android && use_order_profiling) && !is_mac && !is_ios &&
+- current_os != "aix") {
++ current_os != "aix" && !is_bsd) {
+ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
+ # TODO(lizeb,pasko): Fix link errors when linking with order_profiling=1
+ # crbug.com/485542
+@@ -394,7 +394,7 @@ config("compiler") {
+
+ # Compiler instrumentation can introduce dependencies in DSOs to symbols in
+ # the executable they are loaded into, so they are unresolved at link-time.
+- if (!using_sanitizer) {
++ if (!using_sanitizer && !is_bsd) {
+ ldflags += [
+ "-Wl,-z,defs",
+ "-Wl,--as-needed",
+@@ -502,7 +502,7 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
++ if (is_clang && !is_nacl && !use_xcode_clang && !is_bsd) {
+ cflags += [
+ # TODO(hans): Remove this once Clang generates better optimized debug info
+ # by default. https://crbug.com/765793
+@@ -809,7 +809,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1494,7 +1494,7 @@ config("default_warnings") {
+ cflags += [ "-Wno-nonportable-include-path" ]
+ }
+
+- if (current_toolchain == host_toolchain || !use_xcode_clang) {
++ if ((current_toolchain == host_toolchain || !use_xcode_clang) && !is_bsd) {
+ # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
+ # recognize.
+ cflags += [
+@@ -1694,7 +1694,7 @@ config("thin_archive") {
+ # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
+ # have a "thin archive" mode (it does accept -T, but it means truncating
+ # archive names to 16 characters, which is not what we want).
+- if ((is_posix && !is_nacl && !is_mac && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_mac && !is_ios && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ } else if (is_win && use_lld) {
+ arflags = [ "/llvmlibthin" ]
+@@ -2278,7 +2278,7 @@ config("symbols") {
+ # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+ # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+ if (!is_nacl || is_clang) {
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+ }
+ if (use_debug_fission && !is_nacl && !is_android) {
+@@ -2299,7 +2299,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ if (!is_mac && !is_ios && !is_nacl && current_cpu != "x86" &&
+- (use_gold || use_lld)) {
++ (use_gold || use_lld) && !is_bsd) {
+ if (is_clang) {
+ # This flag enables the GNU-format pubnames and pubtypes sections,
+ # which lld needs in order to generate a correct GDB index.
diff --git a/devel/electron5/files/patch-build_config_compiler_compiler.gni b/devel/electron5/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..a8822c55c2a4
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- build/config/compiler/compiler.gni.orig 2019-04-08 08:32:37 UTC
++++ build/config/compiler/compiler.gni
+@@ -179,7 +179,7 @@ declare_args() {
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+ use_gold =
+- !use_lld && !(is_chromecast && is_linux &&
++ !is_bsd && !use_lld && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ ((is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
diff --git a/devel/electron5/files/patch-build_config_features.gni b/devel/electron5/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..b66a32546b9b
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig 2019-04-08 08:32:37 UTC
++++ build/config/features.gni
+@@ -41,7 +41,7 @@ declare_args() {
+ }
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = is_linux && !is_chromecast
++ use_udev = is_linux && !is_chromecast && !is_bsd
+
+ use_dbus = is_linux && !is_chromecast
+
diff --git a/devel/electron5/files/patch-build_config_freetype_freetype.gni b/devel/electron5/files/patch-build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..392a943744ce
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- build/config/freetype/freetype.gni.orig 2019-04-08 08:18:04 UTC
++++ build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/devel/electron5/files/patch-build_config_linux_BUILD.gn b/devel/electron5/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..6fd924842d10
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig 2019-04-08 08:18:04 UTC
++++ build/config/linux/BUILD.gn
+@@ -28,7 +28,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/devel/electron5/files/patch-build_config_linux_pkg-config.py b/devel/electron5/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..b9bafa482696
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig 2019-04-08 08:18:04 UTC
++++ build/config/linux/pkg-config.py
+@@ -57,8 +57,12 @@ def SetConfigPath(options):
+ print "You must specify an architecture via -a if using a sysroot."
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -107,7 +111,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print "[[],[],[],[],[]]"
+ return 0
+
diff --git a/devel/electron5/files/patch-build_config_sysroot.gni b/devel/electron5/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..b832536e2aa1
--- /dev/null
+++ b/devel/electron5/files/patch-build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- build/config/sysroot.gni.orig 2019-04-08 08:18:04 UTC
++++ build/config/sysroot.gni
+@@ -15,9 +15,10 @@ declare_args() {
+ # The absolute path to directory containing linux sysroot images
+ target_sysroot_dir = "//build/linux"
+
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (
++ current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (current_os == target_os && current_cpu == target_cpu &&
diff --git a/devel/electron5/files/patch-build_detect__host__arch.py b/devel/electron5/files/patch-build_detect__host__arch.py
new file mode 100644
index 000000000000..c4d84291e9eb
--- /dev/null
+++ b/devel/electron5/files/patch-build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- build/detect_host_arch.py.orig 2019-04-20 10:45:29 UTC
++++ build/detect_host_arch.py
+@@ -19,6 +19,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/devel/electron5/files/patch-build_gn__run__binary.py b/devel/electron5/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..33adc4264c39
--- /dev/null
+++ b/devel/electron5/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig 2019-04-08 08:18:04 UTC
++++ build/gn_run_binary.py
+@@ -22,7 +22,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/devel/electron5/files/patch-build_linux_chrome.map b/devel/electron5/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..90380ac5ce61
--- /dev/null
+++ b/devel/electron5/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig 2019-04-08 08:18:04 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -81,7 +88,4 @@ global:
+ localtime64;
+ localtime64_r;
+ localtime_r;
+-
+-local:
+- *;
+ };
diff --git a/devel/electron5/files/patch-build_linux_libpci_BUILD.gn b/devel/electron5/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..3569104ae96c
--- /dev/null
+++ b/devel/electron5/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig 2019-04-08 08:18:04 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/devel/electron5/files/patch-build_linux_unbundle_libusb.gn b/devel/electron5/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..0a591fbd6d63
--- /dev/null
+++ b/devel/electron5/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig 2019-04-09 12:48:44 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/devel/electron5/files/patch-build_linux_unbundle_replace__gn__files.py b/devel/electron5/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..3c324e793147
--- /dev/null
+++ b/devel/electron5/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig 2019-04-08 08:18:04 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/devel/electron5/files/patch-build_toolchain_gcc__toolchain.gni b/devel/electron5/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..36464dcaefe3
--- /dev/null
+++ b/devel/electron5/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig 2019-04-08 08:32:38 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -47,6 +47,11 @@ analyzer_wrapper =
+ rebase_path("//build/toolchain/clang_static_analyzer_wrapper.py",
+ root_build_dir) + " --mode=clang"
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -610,13 +615,23 @@ template("clang_toolchain") {
+ }
+
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "$prefix/clang"
+- cxx = "$prefix/clang++"
+- ld = cxx
+- readelf = "${toolprefix}readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${toolprefix}nm"
++ if (is_bsd) {
++ prefix = "/usr/local/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ readelf = "readelf"
++ ar = "${prefix}/ar"
++ nm = "${toolprefix}nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${toolprefix}readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${toolprefix}nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/devel/electron5/files/patch-build_toolchain_get__concurrent__links.py b/devel/electron5/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..80deb4907cc2
--- /dev/null
+++ b/devel/electron5/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig 2019-04-08 08:32:38 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -46,6 +46,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/devel/electron5/files/patch-build_toolchain_linux_BUILD.gn b/devel/electron5/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..87f9f232d50f
--- /dev/null
+++ b/devel/electron5/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig 2019-04-08 08:32:38 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -14,7 +14,6 @@ clang_toolchain("clang_arm") {
+ }
+
+ clang_toolchain("clang_arm64") {
+- toolprefix = "aarch64-linux-gnu-"
+ toolchain_args = {
+ current_cpu = "arm64"
+ current_os = "linux"
diff --git a/devel/electron5/files/patch-cc_BUILD.gn b/devel/electron5/files/patch-cc_BUILD.gn
new file mode 100644
index 000000000000..e1f804908425
--- /dev/null
+++ b/devel/electron5/files/patch-cc_BUILD.gn
@@ -0,0 +1,21 @@
+--- cc/BUILD.gn.orig 2019-04-08 08:32:38 UTC
++++ cc/BUILD.gn
+@@ -548,7 +548,7 @@ cc_test_static_library("test_support") {
+ "//ui/gl:test_support",
+ "//ui/latency",
+ ]
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ data_deps = [
+ "//third_party/mesa_headers",
+ ]
+@@ -746,9 +746,6 @@ cc_test("cc_unittests") {
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ "//ui/gl:test_support",
+- ]
+- data_deps = [
+- "//third_party/mesa_headers",
+ ]
+ }
+
diff --git a/devel/electron5/files/patch-cc_layers_scrollbar__layer__impl__base.cc b/devel/electron5/files/patch-cc_layers_scrollbar__layer__impl__base.cc
new file mode 100644
index 000000000000..3afd448f825c
--- /dev/null
+++ b/devel/electron5/files/patch-cc_layers_scrollbar__layer__impl__base.cc
@@ -0,0 +1,13 @@
+--- cc/layers/scrollbar_layer_impl_base.cc.orig 2019-04-08 08:18:04 UTC
++++ cc/layers/scrollbar_layer_impl_base.cc
+@@ -218,8 +218,8 @@ gfx::Rect ScrollbarLayerImplBase::ComputeThumbQuadRect
+ int thumb_offset = TrackStart();
+ if (maximum > 0) {
+ float ratio = clamped_current_pos / maximum;
+- float max_offset = track_length - thumb_length;
+- thumb_offset += static_cast<int>(ratio * max_offset);
++ float _max_offset = track_length - thumb_length;
++ thumb_offset += static_cast<int>(ratio * _max_offset);
+ }
+
+ float thumb_thickness_adjustment =
diff --git a/devel/electron5/files/patch-cc_trees_property__tree.cc b/devel/electron5/files/patch-cc_trees_property__tree.cc
new file mode 100644
index 000000000000..ae720cf5bf96
--- /dev/null
+++ b/devel/electron5/files/patch-cc_trees_property__tree.cc
@@ -0,0 +1,20 @@
+--- cc/trees/property_tree.cc.orig 2019-04-08 08:32:38 UTC
++++ cc/trees/property_tree.cc
+@@ -1325,13 +1325,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scro
+
+ gfx::Size clip_layer_bounds = container_bounds(scroll_node->id);
+
+- gfx::ScrollOffset max_offset(
++ gfx::ScrollOffset _max_offset(
+ scaled_scroll_bounds.width() - clip_layer_bounds.width(),
+ scaled_scroll_bounds.height() - clip_layer_bounds.height());
+
+- max_offset.Scale(1 / scale_factor);
+- max_offset.SetToMax(gfx::ScrollOffset());
+- return max_offset;
++ _max_offset.Scale(1 / scale_factor);
++ _max_offset.SetToMax(gfx::ScrollOffset());
++ return _max_offset;
+ }
+
+ gfx::SizeF ScrollTree::scroll_bounds(int scroll_node_id) const {
diff --git a/devel/electron5/files/patch-chrome_app_chrome__command__ids.h b/devel/electron5/files/patch-chrome_app_chrome__command__ids.h
new file mode 100644
index 000000000000..a19810b9c14c
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_chrome__command__ids.h
@@ -0,0 +1,11 @@
+--- chrome/app/chrome_command_ids.h.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/chrome_command_ids.h
+@@ -63,7 +63,7 @@
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_2 34049
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_3 34050
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #define IDC_USE_SYSTEM_TITLE_BAR 34051
+ #define IDC_RESTORE_WINDOW 34052
+ #endif
diff --git a/devel/electron5/files/patch-chrome_app_chrome__main.cc b/devel/electron5/files/patch-chrome_app_chrome__main.cc
new file mode 100644
index 000000000000..d2d72495cb2e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_chrome__main.cc
@@ -0,0 +1,16 @@
+--- chrome/app/chrome_main.cc.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/chrome_main.cc
+@@ -93,11 +93,11 @@ int ChromeMain(int argc, const char** argv) {
+ #endif
+
+ // Chrome-specific process modes.
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ if (command_line->HasSwitch(switches::kHeadless)) {
+ return headless::HeadlessShellMain(params);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ int rv = content::ContentMain(params);
+
diff --git a/devel/electron5/files/patch-chrome_app_chrome__main__delegate.cc b/devel/electron5/files/patch-chrome_app_chrome__main__delegate.cc
new file mode 100644
index 000000000000..02eaf329244d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_chrome__main__delegate.cc
@@ -0,0 +1,128 @@
+--- chrome/app/chrome_main_delegate.cc.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/chrome_main_delegate.cc
+@@ -101,7 +101,7 @@
+ #include "chrome/app/shutdown_signal_handlers_posix.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ #include "components/nacl/common/nacl_paths.h"
+ #include "components/nacl/zygote/nacl_fork_delegate_linux.h"
+ #endif
+@@ -135,7 +135,7 @@
+ #include "v8/include/v8.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #endif
+
+@@ -232,7 +232,7 @@ bool UseHooks() {
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ void AdjustLinuxOOMScore(const std::string& process_type) {
+ // Browsers and zygotes should still be killable, but killed last.
+ const int kZygoteScore = 0;
+@@ -291,7 +291,7 @@ void AdjustLinuxOOMScore(const std::string& process_ty
+ if (score > -1)
+ base::AdjustOOMScore(base::GetCurrentProcId(), score);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ // Returns true if this subprocess type needs the ResourceBundle initialized
+ // and resources loaded.
+@@ -336,7 +336,7 @@ bool HandleVersionSwitches(const base::CommandLine& co
+ return false;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Show the man page if --help or -h is on the command line.
+ void HandleHelpSwitches(const base::CommandLine& command_line) {
+ if (command_line.HasSwitch(switches::kHelp) ||
+@@ -346,7 +346,7 @@ void HandleHelpSwitches(const base::CommandLine& comma
+ PLOG(FATAL) << "execlp failed";
+ }
+ }
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ void SIGTERMProfilingShutdown(int signal) {
+@@ -400,7 +400,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, Chrome does not support running multiple copies under different
+ // DISPLAYs, so the profile directory can be specified in the environment to
+ // support the virtual desktop use-case.
+@@ -412,7 +412,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ user_data_dir = base::FilePath::FromUTF8Unsafe(user_data_dir_string);
+ }
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_MACOSX)
+ policy::path_parser::CheckUserDataDirPolicy(&user_data_dir);
+ #endif // OS_MAC
+@@ -469,7 +469,7 @@ void InitLogging(const std::string& process_type) {
+ void RecordMainStartupMetrics(base::TimeTicks exe_entry_point_ticks) {
+ if (!exe_entry_point_ticks.is_null())
+ startup_metric_utils::RecordExeMainEntryPointTicks(exe_entry_point_ticks);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Record the startup process creation time on supported platforms.
+ startup_metric_utils::RecordStartupProcessCreationTime(
+ base::Process::Current().CreationTime());
+@@ -596,7 +596,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ *exit_code = 0;
+ return true; // Got a --version switch; exit with a success error code.
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This will directly exit if the user asked for help.
+ HandleHelpSwitches(command_line);
+ #endif
+@@ -620,7 +620,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ #if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+ #endif
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ nacl::RegisterPathProvider();
+ #endif
+
+@@ -936,7 +936,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ InitializePDF();
+ #endif
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Zygote needs to call InitCrashReporter() in RunZygote().
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ #if defined(OS_ANDROID)
+@@ -951,7 +951,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ breakpad::InitCrashReporter(process_type);
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // After all the platform Breakpads have been initialized, store the command
+ // line for crash reporting.
+@@ -961,7 +961,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
+ // Note: If you are adding a new process type below, be sure to adjust the
+ // AdjustLinuxOOMScore function too.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ AdjustLinuxOOMScore(process_type);
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron5/files/patch-chrome_app_chromium__strings.grd b/devel/electron5/files/patch-chrome_app_chromium__strings.grd
new file mode 100644
index 000000000000..35ac8716f2a3
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_chromium__strings.grd
@@ -0,0 +1,20 @@
+--- chrome/app/chromium_strings.grd.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/chromium_strings.grd
+@@ -809,7 +809,7 @@ Signing in anyway will merge Chromium information like
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Chromium process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
+ </message>
+@@ -1057,7 +1057,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL">$2
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chromium to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron5/files/patch-chrome_app_generated__resources.grd b/devel/electron5/files/patch-chrome_app_generated__resources.grd
new file mode 100644
index 000000000000..cf7c5d330c7e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_generated__resources.grd
@@ -0,0 +1,29 @@
+--- chrome/app/generated_resources.grd.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/generated_resources.grd
+@@ -5339,7 +5339,7 @@ the Bookmarks menu.">
+ </message>
+ </if>
+
+- <if expr="is_win or (is_linux and not chromeos)">
++ <if expr="is_win or (is_posix and not chromeos)">
+ <message name="IDS_QUIT_ACCELERATOR_TUTORIAL" desc="Instructions for how the user should quit using keyboard shortcuts.">
+ Press |<ph name="ACCELERATOR1">$1<ex>Ctrl</ex></ph>|+|<ph name="ACCELERATOR2">$2<ex>Shift</ex></ph>| followed by |<ph name="ACCELERATOR3">$3<ex>Q</ex></ph>| to exit
+ </message>
+@@ -6160,7 +6160,7 @@ the Bookmarks menu.">
+ Google Pay
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+ Use system title bar and borders
+ </message>
+@@ -6946,7 +6946,7 @@ Please help our engineers fix this problem. Tell us wh
+ Set as default
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_MINIMIZE_WINDOW_MENU" desc="The Linux browser window menu item text for minimizing the window.">
+ Minimize
+ </message>
diff --git a/devel/electron5/files/patch-chrome_app_google__chrome__strings.grd b/devel/electron5/files/patch-chrome_app_google__chrome__strings.grd
new file mode 100644
index 000000000000..bf2b9192b98b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_google__chrome__strings.grd
@@ -0,0 +1,20 @@
+--- chrome/app/google_chrome_strings.grd.orig 2019-04-08 08:32:41 UTC
++++ chrome/app/google_chrome_strings.grd
+@@ -820,7 +820,7 @@ Signing in anyway will merge Chrome information like b
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Google Chrome process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chrome has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chrome.
+ </message>
+@@ -1075,7 +1075,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL">$2
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chrome to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron5/files/patch-chrome_app_settings__strings.grdp b/devel/electron5/files/patch-chrome_app_settings__strings.grdp
new file mode 100644
index 000000000000..71ac17299cf9
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_settings__strings.grdp
@@ -0,0 +1,20 @@
+--- chrome/app/settings_strings.grdp.orig 2019-04-08 08:32:43 UTC
++++ chrome/app/settings_strings.grdp
+@@ -580,7 +580,7 @@
+ Themes
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SETTINGS_SYSTEM_THEME" desc="Text of the label describing the system (GTK+) browser theme on Linux">
+ GTK+
+ </message>
+@@ -594,7 +594,7 @@
+ Use Classic
+ </message>
+ </if>
+- <if expr="not is_linux or chromeos">
++ <if expr="not is_posix or chromeos">
+ <message name="IDS_SETTINGS_RESET_TO_DEFAULT_THEME" desc="Name of the control which resets the browser theme back to the default theme.">
+ Reset to default
+ </message>
diff --git a/devel/electron5/files/patch-chrome_app_shutdown__signal__handlers__posix.cc b/devel/electron5/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
new file mode 100644
index 000000000000..0bd4bbf1e68d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
@@ -0,0 +1,21 @@
+--- chrome/app/shutdown_signal_handlers_posix.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/app/shutdown_signal_handlers_posix.cc
+@@ -183,12 +183,18 @@ void InstallShutdownSignalHandlers(
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ // PTHREAD_STACK_MIN causes chromium to crash under FreeBSD,
++ // we request the default pthread stack size by specifying 0 here.
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+ // ASan instrumentation bloats the stack frames, so we need to increase the
+ // stack size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ ShutdownDetector* detector = new ShutdownDetector(
+ g_shutdown_pipe_read_fd, shutdown_callback, task_runner);
diff --git a/devel/electron5/files/patch-chrome_app_theme_chrome__unscaled__resources.grd b/devel/electron5/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
new file mode 100644
index 000000000000..ae8423b12b87
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/app/theme/chrome_unscaled_resources.grd.orig 2019-04-08 08:32:43 UTC
++++ chrome/app/theme/chrome_unscaled_resources.grd
+@@ -100,7 +100,7 @@
+ <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/common/profile_avatar_sun_cloud.png" type="BINDATA" />
+ <include name="IDR_PROFILE_AVATAR_2X_26" file="default_200_percent/common/profile_avatar_placeholder.png" type="BINDATA" />
+ </if>
+- <if expr="is_linux and enable_app_list">
++ <if expr="is_posix and enable_app_list">
+ <!-- App Launcher icons for desktop icon. -->
+ <if expr="_google_chrome">
+ <then>
diff --git a/devel/electron5/files/patch-chrome_browser_about__flags.cc b/devel/electron5/files/patch-chrome_browser_about__flags.cc
new file mode 100644
index 000000000000..a09c0da499f6
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_about__flags.cc
@@ -0,0 +1,120 @@
+--- chrome/browser/about_flags.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/about_flags.cc
+@@ -749,7 +749,7 @@ const FeatureEntry::FeatureVariation kAutofillPreviewS
+ {"(Black on GoogleYellow050)", kAutofillPreviewStyleBlackOnYellow050,
+ base::size(kAutofillPreviewStyleBlackOnYellow050), nullptr}};
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const FeatureEntry::FeatureParam kPedalSuggestionInSuggestion[] = {
+ {OmniboxFieldTrial::kPedalSuggestionModeParam, "in_suggestion"}};
+ const FeatureEntry::FeatureParam kPedalSuggestionDedicated[] = {
+@@ -760,7 +760,7 @@ const FeatureEntry::FeatureVariation kPedalSuggestionV
+ {"Dedicated Suggestion Line", kPedalSuggestionDedicated,
+ base::size(kPedalSuggestionDedicated), nullptr},
+ };
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ const FeatureEntry::Choice kAutoplayPolicyChoices[] = {
+ {flags_ui::kGenericExperimentChoiceDefault, "", ""},
+@@ -2362,12 +2362,12 @@ const FeatureEntry kFeatureEntries[] = {
+ {"force-text-direction", flag_descriptions::kForceTextDirectionName,
+ flag_descriptions::kForceTextDirectionDescription, kOsAll,
+ MULTI_VALUE_TYPE(kForceTextDirectionChoices)},
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-input-ime-api", flag_descriptions::kEnableInputImeApiName,
+ flag_descriptions::kEnableInputImeApiDescription, kOsWin | kOsLinux,
+ ENABLE_DISABLE_VALUE_TYPE(switches::kEnableInputImeAPI,
+ switches::kDisableInputImeAPI)},
+-#endif // OS_WIN || OS_LINUX
++#endif // OS_WIN || OS_LINUX || OS_BSD
+ {"enable-origin-trials", flag_descriptions::kOriginTrialsName,
+ flag_descriptions::kOriginTrialsDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kOriginTrials)},
+@@ -2562,12 +2562,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(chrome::android::kAndroidNightMode)},
+ #endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE)
+ #endif // OS_ANDROID
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"passwords-migrate-linux-to-login-db",
+ flag_descriptions::kPasswordsMigrateLinuxToLoginDBName,
+ flag_descriptions::kPasswordsMigrateLinuxToLoginDBDescription, kOsLinux,
+ FEATURE_VALUE_TYPE(password_manager::features::kMigrateLinuxToLoginDB)},
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"enable-experimental-accessibility-features",
+ flag_descriptions::kExperimentalAccessibilityFeaturesName,
+ flag_descriptions::kExperimentalAccessibilityFeaturesDescription, kOsCrOS,
+@@ -3001,7 +3001,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(omnibox::kOmniboxNewAnswerLayout)},
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ {"omnibox-reverse-answers", flag_descriptions::kOmniboxReverseAnswersName,
+ flag_descriptions::kOmniboxReverseAnswersDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kOmniboxReverseAnswers)},
+@@ -3026,7 +3026,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kOmniboxDriveSuggestionsName,
+ flag_descriptions::kOmniboxDriveSuggestionsDescriptions, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kDocumentProvider)},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ {"enable-speculative-service-worker-start-on-query-input",
+ flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputName,
+@@ -3342,7 +3342,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kClickToOpenPDFDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"direct-manipulation-stylus",
+ flag_descriptions::kDirectManipulationStylusName,
+ flag_descriptions::kDirectManipulationStylusDescription,
+@@ -3353,7 +3353,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kShowManagedUiDescription,
+ kOsWin | kOsMac | kOsLinux | kOsCrOS,
+ FEATURE_VALUE_TYPE(features::kShowManagedUi)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ {"third-party-doodles", flag_descriptions::kThirdPartyDoodlesName,
+@@ -4280,7 +4280,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(features::kForceEnableSystemAec)},
+ #endif // defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"autofill-always-show-server-cards-in-sync-transport",
+ flag_descriptions::kAutofillAlwaysShowServerCardsInSyncTransportName,
+ flag_descriptions::
+@@ -4288,7 +4288,7 @@ const FeatureEntry kFeatureEntries[] = {
+ kOsMac | kOsWin | kOsLinux,
+ FEATURE_VALUE_TYPE(
+ autofill::features::kAutofillAlwaysShowServerCardsInSyncTransport)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_MACOSX)
+ {"enable-custom-mac-paper-sizes",
+@@ -4333,13 +4333,13 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(features::kCrostiniAppSearch)},
+ #endif // OS_CHROMEOS
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"autofill-settings-split-by-card-type",
+ flag_descriptions::kAutofillSettingsSplitByCardTypeName,
+ flag_descriptions::kAutofillSettingsSplitByCardTypeDescription,
+ kOsMac | kOsWin | kOsLinux,
+ FEATURE_VALUE_TYPE(autofill::features::kAutofillSettingsCardTypeSplit)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
+ {"hardware-media-key-handling",
diff --git a/devel/electron5/files/patch-chrome_browser_after__startup__task__utils.cc b/devel/electron5/files/patch-chrome_browser_after__startup__task__utils.cc
new file mode 100644
index 000000000000..c5ae4f11fec0
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_after__startup__task__utils.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/after_startup_task_utils.cc.orig 2019-04-08 08:18:06 UTC
++++ chrome/browser/after_startup_task_utils.cc
+@@ -29,7 +29,7 @@
+ #include "content/public/browser/web_contents.h"
+ #include "content/public/browser/web_contents_observer.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -115,7 +115,7 @@ void QueueTask(std::unique_ptr<AfterStartupTask> queue
+
+ void SetBrowserStartupIsComplete() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Process::Current().CreationTime() is not available on all platforms.
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+@@ -123,7 +123,7 @@ void SetBrowserStartupIsComplete() {
+ UMA_HISTOGRAM_LONG_TIMES("Startup.AfterStartupTaskDelayedUntilTime",
+ base::Time::Now() - process_creation_time);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("Startup.AfterStartupTaskCount",
+ g_after_startup_tasks.Get().size());
+ g_startup_complete_flag.Get().Set();
+@@ -132,7 +132,7 @@ void SetBrowserStartupIsComplete() {
+ g_after_startup_tasks.Get().clear();
+ g_after_startup_tasks.Get().shrink_to_fit();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make sure we complete the startup notification sequence, or launchers will
+ // get confused by not receiving the expected message from the main process.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/devel/electron5/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc b/devel/electron5/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
new file mode 100644
index 000000000000..144fb82300a6
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
@@ -0,0 +1,70 @@
+--- chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc
+@@ -4,6 +4,11 @@
+
+ #include "chrome/browser/apps/platform_apps/api/music_manager_private/device_id.h"
+
++#if defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <net/if_dl.h>
++#endif
++
+ #include <ifaddrs.h>
+ #include <net/if.h>
+ #include <stddef.h>
+@@ -105,9 +110,36 @@ class MacAddressProcessor {
+ const char* const prefixes[],
+ size_t prefixes_count) {
+ const int MAC_LENGTH = 6;
++#if defined(OS_FREEBSD)
++ struct ifaddrs *ifap, *ifinfo;
++#else
+ struct ifreq ifinfo;
++#endif
+
+ memset(&ifinfo, 0, sizeof(ifinfo));
++
++#if defined(OS_FREEBSD)
++ int result = getifaddrs(&ifap);
++
++ if (result != 0)
++ return true;
++
++ result = 1; // no MAC found yet
++
++ for (ifinfo = ifap; ifinfo != NULL; ifinfo = ifinfo->ifa_next) {
++ struct sockaddr* sa = ifinfo->ifa_addr;
++ if (sa->sa_family == AF_LINK &&
++ !strncmp(ifinfo->ifa_name, ifaddr->ifa_name,
++ sizeof(ifinfo->ifa_name) - 1)) {
++ result = 0;
++ break;
++ }
++ }
++
++ char mac_address[6];
++
++ strncpy(mac_address, (const char*)LLADDR((struct sockaddr_dl*)ifinfo->ifa_addr), sizeof(mac_address));
++#else
+ strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1);
+
+ int sd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -119,11 +151,18 @@ class MacAddressProcessor {
+
+ const char* mac_address =
+ static_cast<const char*>(ifinfo.ifr_hwaddr.sa_data);
++#endif
++
+ if (!is_valid_mac_address_.Run(mac_address, MAC_LENGTH))
+ return true;
+
++#if defined(OS_FREEBSD)
++ if (!IsValidPrefix(ifinfo->ifa_name, prefixes, prefixes_count))
++ return true;
++#else
+ if (!IsValidPrefix(ifinfo.ifr_name, prefixes, prefixes_count))
+ return true;
++#endif
+
+ // Got one!
+ found_mac_address_ =
diff --git a/devel/electron5/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc b/devel/electron5/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
new file mode 100644
index 000000000000..4862cce35e7e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.orig 2019-04-08 08:18:06 UTC
++++ chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+@@ -59,7 +59,7 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForSch
+ return metrics::OmniboxInputType::QUERY;
+
+ case ExternalProtocolHandler::UNKNOWN: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Linux impl of GetApplicationNameForProtocol doesn't distinguish
+ // between URL schemes with handers and those without. This will
+ // make the default behaviour be search on Linux.
diff --git a/devel/electron5/files/patch-chrome_browser_background_background__mode__optimizer.cc b/devel/electron5/files/patch-chrome_browser_background_background__mode__optimizer.cc
new file mode 100644
index 000000000000..ee768ff1295a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_background_background__mode__optimizer.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/background/background_mode_optimizer.cc.orig 2019-04-08 08:18:06 UTC
++++ chrome/browser/background/background_mode_optimizer.cc
+@@ -30,10 +30,10 @@ std::unique_ptr<BackgroundModeOptimizer> BackgroundMod
+ switches::kKeepAliveForTest))
+ return nullptr;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kBackgroundModeAllowRestart))
+ return base::WrapUnique(new BackgroundModeOptimizer());
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ return nullptr;
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_browser__resources.grd b/devel/electron5/files/patch-chrome_browser_browser__resources.grd
new file mode 100644
index 000000000000..2820adc89477
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_browser__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/browser/browser_resources.grd.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/browser_resources.grd
+@@ -679,7 +679,7 @@
+ <include name="IDR_WELCOME_WIN10_PIN_WEBP" file="resources\welcome\pin.webp" type="BINDATA" />
+ </if>
+ <include name="IDR_SSL_ERROR_ASSISTANT_PB" file="${root_gen_dir}/chrome/browser/resources/ssl/ssl_error_assistant/ssl_error_assistant.pb" use_base_dir="false" type="BINDATA" />
+- <if expr="is_android or is_linux">
++ <if expr="is_android or is_posix">
+ <include name="IDR_SANDBOX_INTERNALS_HTML" file="resources\sandbox_internals\sandbox_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_SANDBOX_INTERNALS_JS" file="resources\sandbox_internals\sandbox_internals.js" type="BINDATA" compress="gzip" />
+ </if>
diff --git a/devel/electron5/files/patch-chrome_browser_chrome__browser__main.cc b/devel/electron5/files/patch-chrome_browser_chrome__browser__main.cc
new file mode 100644
index 000000000000..a03fc751952e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_chrome__browser__main.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/chrome_browser_main.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/chrome_browser_main.cc
+@@ -217,7 +217,7 @@
+ #include "chromeos/settings/cros_settings_names.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/first_run/upgrade_util_linux.h"
+ #endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
+
+@@ -257,7 +257,7 @@
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+ #endif
+
+@@ -1043,7 +1043,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Create directory for user-level Native Messaging manifest files. This
+ // makes it less likely that the directory will be created by third-party
+ // software with incorrect owner or permission. See crbug.com/725513 .
+@@ -1052,14 +1052,14 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ &user_native_messaging_dir));
+ if (!base::PathExists(user_native_messaging_dir))
+ base::CreateDirectory(user_native_messaging_dir);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ // Set the product channel for crash reports.
+ breakpad::SetChannelCrashKey(chrome::GetChannelName());
+-#endif // defined(OS_LINUX) || defined(OS_OPENBSD)
++#endif // defined(OS_LINUX)
+
+ #if defined(OS_MACOSX)
+ // Get the Keychain API to register for distributed notifications on the main
+@@ -1087,7 +1087,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ metrics::DesktopSessionDurationTracker::Initialize();
+ #endif
+ metrics::RendererUptimeTracker::Initialize();
+@@ -1267,6 +1267,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::TimeDelta::FromMinutes(1));
+
+ #if !defined(OS_ANDROID)
++#if !defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kWebUsb)) {
+ web_usb_detector_.reset(new WebUsbDetector());
+ BrowserThread::PostAfterStartupTask(
+@@ -1275,6 +1276,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::BindOnce(&WebUsbDetector::Initialize,
+ base::Unretained(web_usb_detector_.get())));
+ }
++#endif
+ if (base::FeatureList::IsEnabled(features::kTabMetricsLogging)) {
+ // Initialize the TabActivityWatcher to begin logging tab activity events.
+ resource_coordinator::TabActivityWatcher::GetInstance();
diff --git a/devel/electron5/files/patch-chrome_browser_chrome__browser__main__linux.cc b/devel/electron5/files/patch-chrome_browser_chrome__browser__main__linux.cc
new file mode 100644
index 000000000000..bd8e04d5c8c6
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_chrome__browser__main__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/chrome_browser_main_linux.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/chrome_browser_main_linux.cc
+@@ -90,12 +90,14 @@ void ChromeBrowserMainPartsLinux::PreProfileInit() {
+ void ChromeBrowserMainPartsLinux::PostProfileInit() {
+ ChromeBrowserMainPartsPosix::PostProfileInit();
+
++#if !defined(OS_BSD)
+ g_browser_process->metrics_service()->RecordBreakpadRegistration(
+ breakpad::IsCrashReporterEnabled());
++#endif
+ }
+
+ void ChromeBrowserMainPartsLinux::PostMainMessageLoopStart() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusThreadManager::Initialize();
+ bluez::BluezDBusManager::Initialize();
+ #endif
+@@ -104,7 +106,7 @@ void ChromeBrowserMainPartsLinux::PostMainMessageLoopS
+ }
+
+ void ChromeBrowserMainPartsLinux::PostDestroyThreads() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Shutdown();
+ bluez::BluezDBusThreadManager::Shutdown();
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_chrome__browser__main__posix.cc b/devel/electron5/files/patch-chrome_browser_chrome__browser__main__posix.cc
new file mode 100644
index 000000000000..dff8c5aa1b6c
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_chrome__browser__main__posix.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/chrome_browser_main_posix.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/chrome_browser_main_posix.cc
+@@ -142,7 +142,7 @@ void ChromeBrowserMainPartsPosix::PostMainMessageLoopS
+ void ChromeBrowserMainPartsPosix::ShowMissingLocaleMessageBox() {
+ #if defined(OS_CHROMEOS)
+ NOTREACHED(); // Should not ever happen on ChromeOS.
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+ #elif defined(USE_AURA)
diff --git a/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.cc b/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.cc
new file mode 100644
index 000000000000..469fee0162dc
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.cc
@@ -0,0 +1,97 @@
+--- chrome/browser/chrome_content_browser_client.cc.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/chrome_content_browser_client.cc
+@@ -395,7 +395,7 @@
+ #include "components/user_manager/user_manager.h"
+ #include "services/service_manager/public/mojom/interface_provider_spec.mojom.h"
+ #include "services/ws/common/switches.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/chrome_browser_main_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "base/android/application_status_listener.h"
+@@ -441,11 +441,11 @@
+ #include "components/services/patch/public/interfaces/constants.mojom.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/webshare/share_service_impl.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ #include "chrome/browser/browser_switcher/browser_switcher_navigation_throttle.h"
+ #endif
+@@ -462,7 +462,7 @@
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.h"
+ #endif
+
+@@ -1144,7 +1144,7 @@ content::BrowserMainParts* ChromeContentBrowserClient:
+ #elif defined(OS_CHROMEOS)
+ main_parts = new chromeos::ChromeBrowserMainPartsChromeos(
+ parameters, chrome_feature_list_creator_);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ main_parts =
+ new ChromeBrowserMainPartsLinux(parameters, chrome_feature_list_creator_);
+ #elif defined(OS_ANDROID)
+@@ -1164,7 +1164,7 @@ content::BrowserMainParts* ChromeContentBrowserClient:
+ // Construct additional browser parts. Stages are called in the order in
+ // which they are added.
+ #if defined(TOOLKIT_VIEWS)
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViewsLinux());
+ #else
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViews());
+@@ -1956,7 +1956,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ command_line->AppendSwitchASCII(switches::kMetricsClientID,
+ client_info->client_id);
+ }
+-#elif defined(OS_POSIX)
++#elif defined(OS_POSIX) && !defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ bool enable_crash_reporter = true;
+ #else
+@@ -3550,7 +3550,7 @@ void ChromeContentBrowserClient::GetAdditionalFileSyst
+ }
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -4288,7 +4288,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigati
+ handle));
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ std::unique_ptr<content::NavigationThrottle> browser_switcher_throttle =
+ browser_switcher::BrowserSwitcherNavigationThrottle ::
+@@ -4409,7 +4409,7 @@ void ChromeContentBrowserClient::InitWebContextInterfa
+ #if defined(OS_ANDROID)
+ frame_interfaces_parameterized_->AddInterface(base::Bind(
+ &ForwardToJavaWebContentsRegistry<blink::mojom::ShareService>));
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ frame_interfaces_->AddInterface(base::Bind(&ShareServiceImpl::Create));
+ #endif
+
+@@ -5047,7 +5047,7 @@ std::unique_ptr<content::OverlayWindow>
+ ChromeContentBrowserClient::CreateWindowForPictureInPicture(
+ content::PictureInPictureWindowController* controller) {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_CHROMEOS)
++ defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Note: content::OverlayWindow::Create() is defined by platform-specific
+ // implementation in chrome/browser/ui/views. This layering hack, which goes
+ // through //content and ContentBrowserClient, allows us to work around the
diff --git a/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.h b/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.h
new file mode 100644
index 000000000000..ad99f1b26cf4
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_chrome__content__browser__client.h
@@ -0,0 +1,17 @@
+--- chrome/browser/chrome_content_browser_client.h.orig 2019-04-08 08:32:43 UTC
++++ chrome/browser/chrome_content_browser_client.h
+@@ -363,12 +363,12 @@ class ChromeContentBrowserClient : public content::Con
+ void OverridePageVisibilityState(
+ content::RenderFrameHost* render_frame_host,
+ content::PageVisibilityState* visibility_state) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #if defined(OS_WIN)
+ bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override;
+ base::string16 GetAppContainerSidForSandboxType(
diff --git a/devel/electron5/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc b/devel/electron5/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
new file mode 100644
index 000000000000..5088b94dd0aa
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/custom_handlers/protocol_handler_registry.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/custom_handlers/protocol_handler_registry.cc
+@@ -48,7 +48,7 @@ const ProtocolHandler& LookupHandler(
+ // If true default protocol handlers will be removed if the OS level
+ // registration for a protocol is no longer Chrome.
+ bool ShouldRemoveHandlersNotInOS() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // We don't do this on Linux as the OS registration there is not reliable,
+ // and Chrome OS doesn't have any notion of OS registration.
+ // TODO(benwells): When Linux support is more reliable remove this
diff --git a/devel/electron5/files/patch-chrome_browser_defaults.cc b/devel/electron5/files/patch-chrome_browser_defaults.cc
new file mode 100644
index 000000000000..3f9a7086243a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_defaults.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/defaults.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/defaults.cc
+@@ -43,7 +43,7 @@ const bool kSyncAutoStarts = true;
+ const bool kSyncAutoStarts = false;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const bool kScrollEventChangesTab = true;
+ #else
+ const bool kScrollEventChangesTab = false;
diff --git a/devel/electron5/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc b/devel/electron5/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
new file mode 100644
index 000000000000..000c55f88feb
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/devtools/devtools_eye_dropper.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/devtools/devtools_eye_dropper.cc
+@@ -163,7 +163,7 @@ void DevToolsEyeDropper::UpdateCursor() {
+ // magnified projection only with centered hotspot.
+ // Mac Retina requires cursor to be > 120px in order to render smoothly.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const float kCursorSize = 63;
+ const float kDiameter = 63;
+ const float kHotspotOffset = 32;
diff --git a/devel/electron5/files/patch-chrome_browser_diagnostics_diagnostics__writer.h b/devel/electron5/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
new file mode 100644
index 000000000000..fcc3af39de32
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
@@ -0,0 +1,11 @@
+--- chrome/browser/diagnostics/diagnostics_writer.h.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/diagnostics/diagnostics_writer.h
+@@ -15,6 +15,8 @@ namespace diagnostics {
+ // Console base class used internally.
+ class SimpleConsole;
+
++#undef MACHINE
++
+ class DiagnosticsWriter : public DiagnosticsModel::Observer {
+ public:
+ // The type of formatting done by this writer.
diff --git a/devel/electron5/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc b/devel/electron5/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
new file mode 100644
index 000000000000..6e79780314b5
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/chrome_download_manager_delegate.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/download/chrome_download_manager_delegate.cc
+@@ -1231,7 +1231,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+ target_info->is_filetype_handled_safely)
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (item->GetOriginalMimeType() == "application/x-x509-user-cert")
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+ #endif
+@@ -1251,7 +1251,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+
+ bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile(
+ const base::FilePath& path) {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) {
+ return !download_prefs_->ShouldOpenPdfInSystemReader();
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__commands.cc b/devel/electron5/files/patch-chrome_browser_download_download__commands.cc
new file mode 100644
index 000000000000..ebb357696c15
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__commands.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_commands.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/download/download_commands.cc
+@@ -158,7 +158,7 @@ Browser* DownloadCommands::GetBrowser() const {
+ return browser_displayer.browser();
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ bool DownloadCommands::IsDownloadPdf() const {
+ base::FilePath path = model_->GetTargetFilePath();
+ return path.MatchesExtension(FILE_PATH_LITERAL(".pdf"));
+@@ -175,7 +175,7 @@ bool DownloadCommands::CanOpenPdfInSystemViewer() cons
+ return IsDownloadPdf() &&
+ (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date
+ : true);
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return IsDownloadPdf();
+ #endif
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__commands.h b/devel/electron5/files/patch-chrome_browser_download_download__commands.h
new file mode 100644
index 000000000000..b885c9b9e1db
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__commands.h
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_commands.h.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/download/download_commands.h
+@@ -42,7 +42,7 @@ class DownloadCommands {
+ bool IsCommandVisible(Command command) const;
+ void ExecuteCommand(Command command);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool IsDownloadPdf() const;
+ bool CanOpenPdfInSystemViewer() const;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__item__model.cc b/devel/electron5/files/patch-chrome_browser_download_download__item__model.cc
new file mode 100644
index 000000000000..47f816e3c414
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__item__model.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_item_model.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/download/download_item_model.cc
+@@ -555,7 +555,7 @@ bool DownloadItemModel::IsCommandChecked(
+ return download_->GetOpenWhenComplete() ||
+ download_crx_util::IsExtensionDownload(*download_);
+ case DownloadCommands::ALWAYS_OPEN_TYPE:
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+ return prefs->ShouldOpenPdfInSystemReader();
+@@ -592,7 +592,7 @@ void DownloadItemModel::ExecuteCommand(DownloadCommand
+ bool is_checked = IsCommandChecked(download_commands,
+ DownloadCommands::ALWAYS_OPEN_TYPE);
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ prefs->SetShouldOpenPdfInSystemReader(!is_checked);
+ SetShouldPreferOpeningInBrowser(is_checked);
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__prefs.cc b/devel/electron5/files/patch-chrome_browser_download_download__prefs.cc
new file mode 100644
index 000000000000..af8d026fa11d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__prefs.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/download/download_prefs.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/download/download_prefs.cc
+@@ -62,7 +62,7 @@ namespace {
+ // Consider downloads 'dangerous' if they go to the home directory on Linux and
+ // to the desktop on any platform.
+ bool DownloadPathIsDangerous(const base::FilePath& download_path) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath home_dir = base::GetHomeDir();
+ if (download_path == home_dir) {
+ return true;
+@@ -155,7 +155,7 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profi
+ GetDefaultDownloadDirectoryForProfile()));
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ should_open_pdf_in_system_reader_ =
+ prefs->GetBoolean(prefs::kOpenPdfDownloadInSystemReader);
+ #endif
+@@ -252,7 +252,7 @@ void DownloadPrefs::RegisterProfilePrefs(
+ default_download_path);
+ registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ default_download_path);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
+ #endif
+ #if defined(OS_ANDROID)
+@@ -354,7 +354,7 @@ bool DownloadPrefs::IsDownloadPathManaged() const {
+ }
+
+ bool DownloadPrefs::IsAutoOpenUsed() const {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (ShouldOpenPdfInSystemReader())
+ return true;
+ #endif
+@@ -368,7 +368,7 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension(
+ return false;
+ DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
+ extension.erase(0, 1);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (base::FilePath::CompareEqualIgnoreCase(extension,
+ FILE_PATH_LITERAL("pdf")) &&
+ ShouldOpenPdfInSystemReader())
+@@ -405,7 +405,7 @@ void DownloadPrefs::DisableAutoOpenBasedOnExtension(
+ SaveAutoOpenState();
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void DownloadPrefs::SetShouldOpenPdfInSystemReader(bool should_open) {
+ if (should_open_pdf_in_system_reader_ == should_open)
+ return;
+@@ -426,7 +426,7 @@ bool DownloadPrefs::ShouldOpenPdfInSystemReader() cons
+ #endif
+
+ void DownloadPrefs::ResetAutoOpen() {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ SetShouldOpenPdfInSystemReader(false);
+ #endif
+ auto_open_.clear();
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__prefs.h b/devel/electron5/files/patch-chrome_browser_download_download__prefs.h
new file mode 100644
index 000000000000..f7979bd0e8c7
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__prefs.h
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_prefs.h.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/download/download_prefs.h
+@@ -101,7 +101,7 @@ class DownloadPrefs {
+ // Disables auto-open based on file extension.
+ void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Store the user preference to disk. If |should_open| is true, also disable
+ // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
+ void SetShouldOpenPdfInSystemReader(bool should_open);
+@@ -145,7 +145,7 @@ class DownloadPrefs {
+ AutoOpenCompareFunctor> AutoOpenSet;
+ AutoOpenSet auto_open_;
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool should_open_pdf_in_system_reader_;
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__query.cc b/devel/electron5/files/patch-chrome_browser_download_download__query.cc
new file mode 100644
index 000000000000..0964b44c2dd3
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__query.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/download/download_query.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/download/download_query.cc
+@@ -27,7 +27,11 @@
+ #include "components/download/public/common/download_item.h"
+ #include "components/url_formatter/url_formatter.h"
+ #include "content/public/browser/content_browser_client.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using download::DownloadDangerType;
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__shelf__context__menu.cc b/devel/electron5/files/patch-chrome_browser_download_download__shelf__context__menu.cc
new file mode 100644
index 000000000000..0dcac31f2cfb
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__shelf__context__menu.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_shelf_context_menu.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/download/download_shelf_context_menu.cc
+@@ -127,7 +127,7 @@ base::string16 DownloadShelfContextMenu::GetLabelForCo
+ : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
+ }
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (can_open_pdf_in_system_viewer) {
+ id = IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
diff --git a/devel/electron5/files/patch-chrome_browser_download_download__status__updater.cc b/devel/electron5/files/patch-chrome_browser_download_download__status__updater.cc
new file mode 100644
index 000000000000..e55328d5b5bd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_download_download__status__updater.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_status_updater.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/download/download_status_updater.cc
+@@ -13,7 +13,7 @@
+ #include "base/memory/ptr_util.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -136,7 +136,7 @@ void DownloadStatusUpdater::OnDownloadUpdated(content:
+ #if defined(OS_ANDROID) || (defined(USE_AURA) && !defined(OS_WIN))
+ void DownloadStatusUpdater::UpdateAppIconDownloadProgress(
+ download::DownloadItem* download) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ float progress = 0;
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_BUILD.gn b/devel/electron5/files/patch-chrome_browser_extensions_BUILD.gn
new file mode 100644
index 000000000000..6d05b5c466ce
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_BUILD.gn
@@ -0,0 +1,15 @@
+--- chrome/browser/extensions/BUILD.gn.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/BUILD.gn
+@@ -1104,6 +1104,12 @@ jumbo_static_library("extensions") {
+ deps += [ "//chrome/common:service_process_mojom" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "api/image_writer_private/removable_storage_provider_linux.cc",
++ ]
++ }
++
+ if (enable_service_discovery) {
+ sources += [
+ "api/mdns/mdns_api.cc",
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_activity__log_activity__log.cc b/devel/electron5/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
new file mode 100644
index 000000000000..44503459de96
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/extensions/activity_log/activity_log.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/activity_log/activity_log.cc
+@@ -52,7 +52,11 @@
+ #include "extensions/common/extension.h"
+ #include "extensions/common/extension_messages.h"
+ #include "extensions/common/one_shot_event.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ namespace constants = activity_log_constants;
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc b/devel/electron5/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
new file mode 100644
index 000000000000..0ce240fd867e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc
+@@ -20,6 +20,7 @@ static base::LazyInstance<scoped_refptr<StorageDeviceL
+
+ void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
++#if !defined(OS_BSD)
+ if (g_test_device_list.Get().get() != nullptr) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+@@ -33,6 +34,9 @@ void RemovableStorageProvider::GetAllDevices(DeviceLis
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+ base::BindOnce(&RemovableStorageProvider::PopulateDeviceList),
+ std::move(callback));
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ // static
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h b/devel/electron5/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
new file mode 100644
index 000000000000..a16878db074e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/input_ime/input_ime_api.h.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/extensions/api/input_ime/input_ime_api.h
+@@ -31,7 +31,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_nonchromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc b/devel/electron5/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
new file mode 100644
index 000000000000..66129bad8d14
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+@@ -296,6 +296,8 @@ bool ChromeRuntimeAPIDelegate::GetPlatformInfo(Platfor
+ info->os = extensions::api::runtime::PLATFORM_OS_CROS;
+ } else if (strcmp(os, "linux") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_LINUX;
++ } else if (strcmp(os, "freebsd") == 0) {
++ info->os = extensions::api::runtime::PLATFORM_OS_FREEBSD;
+ } else if (strcmp(os, "openbsd") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_OPENBSD;
+ } else {
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc b/devel/electron5/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
new file mode 100644
index 000000000000..53c9f36b8db7
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/settings_private/prefs_util.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -127,7 +127,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUseCustomChromeFrame] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
+@@ -137,7 +137,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ // Appearance settings.
+ (*s_whitelist)[::prefs::kCurrentThemeID] =
+ settings_api::PrefType::PREF_TYPE_STRING;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUsesSystemTheme] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_bookmark__app__helper.cc b/devel/electron5/files/patch-chrome_browser_extensions_bookmark__app__helper.cc
new file mode 100644
index 000000000000..9e6df2f4a479
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_bookmark__app__helper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/bookmark_app_helper.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/bookmark_app_helper.cc
+@@ -503,7 +503,7 @@ void BookmarkAppHelper::FinishInstallation(const Exten
+ if (create_shortcuts_) {
+ #if !defined(OS_CHROMEOS)
+ web_app::ShortcutLocations creation_locations;
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ creation_locations.on_desktop = true;
+ #else
+ creation_locations.on_desktop = false;
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc b/devel/electron5/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..99c84c1c391b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/browser_context_keyed_service_factories.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/extensions/browser_context_keyed_service_factories.cc
+@@ -54,7 +54,7 @@
+ #include "chrome/browser/chromeos/extensions/input_method_api.h"
+ #include "chrome/browser/chromeos/extensions/media_player_api.h"
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #endif
+
+@@ -93,7 +93,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ extensions::InputImeAPI::GetFactoryInstance();
+ extensions::InputMethodAPI::GetFactoryInstance();
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ extensions::InputImeAPI::GetFactoryInstance();
+ #endif
+ extensions::LanguageSettingsPrivateDelegateFactory::GetInstance();
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_external__provider__impl.cc b/devel/electron5/files/patch-chrome_browser_extensions_external__provider__impl.cc
new file mode 100644
index 000000000000..82ea43e37cf9
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_external__provider__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/external_provider_impl.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/external_provider_impl.cc
+@@ -747,7 +747,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ chromeos::DemoSession::Get()->SetExtensionsExternalLoader(loader);
+ provider_list->push_back(std::move(demo_apps_provider));
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ new ExternalPrefLoader(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
+@@ -774,7 +774,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ bundled_extension_creation_flags));
+
+ // Define a per-user source of external extensions.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD))
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS,
diff --git a/devel/electron5/files/patch-chrome_browser_extensions_install__signer.cc b/devel/electron5/files/patch-chrome_browser_extensions_install__signer.cc
new file mode 100644
index 000000000000..ce9eb7249337
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_extensions_install__signer.cc
@@ -0,0 +1,18 @@
+--- chrome/browser/extensions/install_signer.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/extensions/install_signer.cc
+@@ -293,13 +293,13 @@ void LogRequestStartHistograms() {
+ DCHECK(g_single_thread_checker.Get().CalledOnValidThread());
+
+ // Process::Current().CreationTime is only defined on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+ UMA_HISTOGRAM_COUNTS_1M(
+ "ExtensionInstallSigner.UptimeAtTimeOfRequest",
+ (base::Time::Now() - process_creation_time).InSeconds());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ base::TimeDelta delta;
+ base::TimeTicks now = base::TimeTicks::Now();
diff --git a/devel/electron5/files/patch-chrome_browser_first__run_first__run__internal__posix.cc b/devel/electron5/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
new file mode 100644
index 000000000000..021696eada4d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/first_run/first_run_internal_posix.cc.orig 2019-04-08 08:18:07 UTC
++++ chrome/browser/first_run/first_run_internal_posix.cc
+@@ -44,7 +44,7 @@ enum class ForcedShowDialogState {
+ ForcedShowDialogState g_forced_show_dialog_state =
+ ForcedShowDialogState::kNotForced;
+
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ // Returns whether the first run dialog should be shown. This is only true for
+ // certain builds, and only if the user has not already set preferences. In a
+ // real, official-build first run, initializes the default metrics reporting if
+@@ -95,7 +95,7 @@ void ForceFirstRunDialogShownForTesting(bool shown) {
+ }
+
+ void DoPostImportPlatformSpecificTasks(Profile* profile) {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (!ShouldShowFirstRunDialog())
+ return;
+
diff --git a/devel/electron5/files/patch-chrome_browser_flag__descriptions.cc b/devel/electron5/files/patch-chrome_browser_flag__descriptions.cc
new file mode 100644
index 000000000000..6d3b81b12771
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_flag__descriptions.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/flag_descriptions.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/flag_descriptions.cc
+@@ -3656,13 +3656,13 @@ const char kWakeOnPacketsDescription[] =
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kEnableInputImeApiName[] = "Enable Input IME API";
+ const char kEnableInputImeApiDescription[] =
+ "Enable the use of chrome.input.ime API.";
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+
+@@ -3675,13 +3675,13 @@ const char kAutomaticTabDiscardingDescription[] =
+
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kDirectManipulationStylusName[] = "Direct Manipulation Stylus";
+ const char kDirectManipulationStylusDescription[] =
+ "If enabled, Chrome will scroll web pages on stylus drag.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/devel/electron5/files/patch-chrome_browser_flag__descriptions.h b/devel/electron5/files/patch-chrome_browser_flag__descriptions.h
new file mode 100644
index 000000000000..44b31ebd7670
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_flag__descriptions.h
@@ -0,0 +1,32 @@
+--- chrome/browser/flag_descriptions.h.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/flag_descriptions.h
+@@ -2192,12 +2192,12 @@ extern const char kWakeOnPacketsDescription[];
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kEnableInputImeApiName[];
+ extern const char kEnableInputImeApiDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kExperimentalUiName[];
+ extern const char kExperimentalUiDescription[];
+@@ -2209,12 +2209,12 @@ extern const char kAutomaticTabDiscardingDescription[]
+
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kDirectManipulationStylusName[];
+ extern const char kDirectManipulationStylusDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/devel/electron5/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc b/devel/electron5/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
new file mode 100644
index 000000000000..929d6e92a8b4
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc
+@@ -38,10 +38,12 @@ void MTPDeviceMapService::RegisterMTPFileSystem(
+ // Note that this initializes the delegate asynchronously, but since
+ // the delegate will only be used from the IO thread, it is guaranteed
+ // to be created before use of it expects it to be there.
++#if !defined(OS_FREEBSD)
+ CreateMTPDeviceAsyncDelegate(
+ device_location, read_only,
+ base::Bind(&MTPDeviceMapService::AddAsyncDelegate,
+ base::Unretained(this), device_location, read_only));
++#endif
+ mtp_device_usage_map_[key] = 0;
+ }
+
diff --git a/devel/electron5/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc b/devel/electron5/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
new file mode 100644
index 000000000000..e97e394c131f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/media_galleries/media_file_system_registry.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media_galleries/media_file_system_registry.cc
+@@ -734,7 +734,10 @@ class MediaFileSystemRegistry::MediaFileSystemContextI
+ // Constructor in 'private' section because depends on private class definition.
+ MediaFileSystemRegistry::MediaFileSystemRegistry()
+ : file_system_context_(new MediaFileSystemContextImpl) {
+- StorageMonitor::GetInstance()->AddObserver(this);
++ // This conditional is needed for shutdown. Destructors
++ // try to get the media file system registry.
++ if (StorageMonitor::GetInstance())
++ StorageMonitor::GetInstance()->AddObserver(this);
+ }
+
+ MediaFileSystemRegistry::~MediaFileSystemRegistry() {
diff --git a/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc b/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
new file mode 100644
index 000000000000..b8b31b85ab42
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_posix.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_posix.cc
+@@ -10,6 +10,7 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <sys/time.h>
+
+ #include <algorithm>
+
+@@ -19,7 +20,7 @@
+ #include "chrome/browser/media/router/discovery/discovery_network_list_wifi.h"
+ #include "net/base/net_errors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include <netpacket/packet.h>
+ #else
+ #include <net/if_dl.h>
+@@ -28,7 +29,7 @@
+ namespace media_router {
+ namespace {
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ using sll = struct sockaddr_ll;
+ #define SOCKET_ARP_TYPE(s) ((s)->sll_hatype)
+ #define SOCKET_ADDRESS_LEN(s) ((s)->sll_halen)
diff --git a/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc b/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
new file mode 100644
index 000000000000..ebfedf41999c
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc
+@@ -9,8 +9,6 @@
+ #include <sys/socket.h>
+ #include <sys/types.h>
+
+-#include <linux/wireless.h>
+-
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"
+ #include "net/base/network_interfaces_linux.h"
+@@ -20,6 +18,7 @@ namespace media_router {
+ bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) {
+ DCHECK(ssid_out);
+
++#if !defined(OS_BSD)
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+ if (!ioctl_socket.is_valid()) {
+ // AF_INET is for IPv4, so it may fail for IPv6-only hosts even when there
+@@ -41,6 +40,7 @@ bool MaybeGetWifiSSID(const std::string& if_name, std:
+ ssid_out->assign(ssid);
+ return true;
+ }
++#endif
+ return false;
+ }
+
diff --git a/devel/electron5/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc b/devel/electron5/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
new file mode 100644
index 000000000000..5c65a638424a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
@@ -0,0 +1,23 @@
+--- chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc
+@@ -111,6 +111,12 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ bool incognito,
+ CreateRouteCallback callback) {
+ DCHECK(!base::ContainsKey(presentations_, presentation_id));
++#if defined(OS_BSD) // XXX
++ std::move(callback).Run(base::nullopt, nullptr,
++ std::string("Not implemented"),
++ RouteRequestResult::UNKNOWN_ERROR);
++ return;
++#else
+ base::Optional<Display> display = GetDisplayBySinkId(sink_id);
+ if (!display) {
+ std::move(callback).Run(base::nullopt, nullptr,
+@@ -137,6 +143,7 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ std::move(callback).Run(route, nullptr, base::nullopt,
+ RouteRequestResult::OK);
+ NotifyRouteObservers();
++#endif
+ }
+
+ void WiredDisplayMediaRouteProvider::JoinRoute(
diff --git a/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
new file mode 100644
index 000000000000..599ca4002e6f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_event_log_uploader.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+@@ -36,7 +36,7 @@ constexpr size_t kExpectedMimeOverheadBytes = 1000; /
+ const char kProduct[] = "Chrome";
+ #elif defined(OS_MACOSX)
+ const char kProduct[] = "Chrome_Mac";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kProduct[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char kProduct[] = "Chrome_Android";
diff --git a/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
new file mode 100644
index 000000000000..dde5f44cdcfb
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_log_uploader.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media/webrtc/webrtc_log_uploader.cc
+@@ -391,6 +391,8 @@ void WebRtcLogUploader::SetupMultipart(
+ const char product[] = "Chrome_Android";
+ #elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc
new file mode 100644
index 000000000000..8241bbeb2491
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc
@@ -0,0 +1,33 @@
+--- chrome/browser/media/webrtc/webrtc_logging_handler_host.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_handler_host.cc
+@@ -26,10 +26,10 @@
+ #include "content/public/browser/content_browser_client.h"
+ #include "content/public/browser/render_process_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "content/public/browser/child_process_security_policy.h"
+ #include "storage/browser/fileapi/isolated_context.h"
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ using content::BrowserThread;
+ using webrtc_event_logging::WebRtcEventLogManager;
+@@ -281,7 +281,7 @@ void WebRtcLoggingHandlerHost::StartEventLogging(
+ output_period_ms, web_app_id, callback);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ void WebRtcLoggingHandlerHost::GetLogsDirectory(
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback) {
+@@ -327,7 +327,7 @@ void WebRtcLoggingHandlerHost::GrantLogsDirectoryAcces
+ FROM_HERE, {BrowserThread::UI},
+ base::BindOnce(callback, filesystem_id, registered_name));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD
+
+ void WebRtcLoggingHandlerHost::OnRtpPacket(
+ std::unique_ptr<uint8_t[]> packet_header,
diff --git a/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h
new file mode 100644
index 000000000000..39eb56fe1c5b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h
@@ -0,0 +1,36 @@
+--- chrome/browser/media/webrtc/webrtc_logging_handler_host.h.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_handler_host.h
+@@ -154,13 +154,13 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ size_t web_app_id,
+ const StartEventLoggingCallback& callback);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Ensures that the WebRTC Logs directory exists and then grants render
+ // process access to the 'WebRTC Logs' directory, and invokes |callback| with
+ // the ids necessary to create a DirectoryEntry object.
+ void GetLogsDirectory(const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ private:
+ friend class content::BrowserThread;
+@@ -227,7 +227,7 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ bool success,
+ const std::string& error_message);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Grants the render process access to the 'WebRTC Logs' directory, and
+ // invokes |callback| with the ids necessary to create a DirectoryEntry
+ // object. If the |logs_path| couldn't be created or found, |error_callback|
+@@ -236,7 +236,7 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback,
+ const base::FilePath& logs_path);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // The render process ID this object belongs to.
+ const int render_process_id_;
diff --git a/devel/electron5/files/patch-chrome_browser_memory__details.cc b/devel/electron5/files/patch-chrome_browser_memory__details.cc
new file mode 100644
index 000000000000..e6b71a025827
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_memory__details.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/memory_details.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/memory_details.cc
+@@ -38,7 +38,7 @@
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/zygote_host_linux.h"
+ #endif
+
+@@ -336,7 +336,7 @@ void MemoryDetails::CollectChildInfoOnUIThread() {
+ process.titles.push_back(title);
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ if (service_manager::ZygoteHost::GetInstance()->IsZygotePid(process.pid)) {
+ process.process_type = content::PROCESS_TYPE_ZYGOTE;
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_memory__details__linux.cc b/devel/electron5/files/patch-chrome_browser_memory__details__linux.cc
new file mode 100644
index 000000000000..4ec645a9a93d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_memory__details__linux.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/memory_details_linux.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/memory_details_linux.cc
+@@ -72,8 +72,10 @@ ProcessData GetProcessDataMemoryInformation(
+
+ std::unique_ptr<base::ProcessMetrics> metrics(
+ base::ProcessMetrics::CreateProcessMetrics(pid));
++#if !defined(OS_BSD)
+ pmi.num_open_fds = metrics->GetOpenFdCount();
+ pmi.open_fds_soft_limit = metrics->GetOpenFdSoftLimit();
++#endif
+
+ process_data.processes.push_back(pmi);
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc b/devel/electron5/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
new file mode 100644
index 000000000000..cce46f33fdec
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/metrics/bluetooth_available_utility.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/metrics/bluetooth_available_utility.cc
+@@ -72,8 +72,10 @@ void ReportBluetoothAvailability() {
+ if (!device::BluetoothAdapterFactory::Get().IsBluetoothSupported())
+ ReportAvailability(BLUETOOTH_NOT_SUPPORTED);
+
++#if !defined(OS_BSD)
+ device::BluetoothAdapterFactory::Get().GetAdapter(
+ base::BindOnce(&OnGetAdapter));
++#endif
+ }
+
+ } // namespace bluetooth_utility
diff --git a/devel/electron5/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc b/devel/electron5/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
new file mode 100644
index 000000000000..a6440626de32
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
@@ -0,0 +1,21 @@
+--- chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc.orig 2019-04-08 08:32:44 UTC
++++ chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+@@ -44,7 +44,9 @@
+
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include <gnu/libc-version.h>
++#endif
+
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+@@ -52,7 +54,7 @@
+ #if defined(USE_X11)
+ #include "ui/base/x/x11_util.h"
+ #endif
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(USE_OZONE) || defined(USE_X11)
+ #include "ui/events/devices/input_device_event_observer.h"
diff --git a/devel/electron5/files/patch-chrome_browser_net_system__network__context__manager.cc b/devel/electron5/files/patch-chrome_browser_net_system__network__context__manager.cc
new file mode 100644
index 000000000000..e4a227d73095
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_net_system__network__context__manager.cc
@@ -0,0 +1,26 @@
+--- chrome/browser/net/system_network_context_manager.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/net/system_network_context_manager.cc
+@@ -69,12 +69,12 @@
+ #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/chrome_paths_internal.h"
+ #include "chrome/common/chrome_switches.h"
+ #include "chrome/grit/chromium_strings.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ namespace {
+
+@@ -519,7 +519,7 @@ void SystemNetworkContextManager::OnNetworkServiceCrea
+ content::GetNetworkService()->ConfigureStubHostResolver(
+ stub_resolver_enabled, std::move(dns_over_https_servers));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ const base::CommandLine& command_line =
+ *base::CommandLine::ForCurrentProcess();
+
diff --git a/devel/electron5/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc b/devel/electron5/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
new file mode 100644
index 000000000000..4650cfb09454
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/password_manager/chrome_password_manager_client.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -80,7 +80,11 @@
+ #include "net/cert/cert_status_flags.h"
+ #include "services/identity/public/cpp/identity_manager.h"
+ #include "services/metrics/public/cpp/ukm_recorder.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/url_constants.h"
+
+ #if defined(SAFE_BROWSING_DB_LOCAL)
diff --git a/devel/electron5/files/patch-chrome_browser_password__manager_password__store__factory.cc b/devel/electron5/files/patch-chrome_browser_password__manager_password__store__factory.cc
new file mode 100644
index 000000000000..9ee61dd93691
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_password__manager_password__store__factory.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/password_manager/password_store_factory.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/password_manager/password_store_factory.cc
+@@ -300,7 +300,7 @@ PasswordStoreFactory::BuildServiceInstanceFor(
+ password_manager_util::RemoveUselessCredentials(ps, profile->GetPrefs(), 60,
+ network_context_getter);
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ std::unique_ptr<password_manager::PasswordStoreSigninNotifier> notifier =
+ std::make_unique<password_manager::PasswordStoreSigninNotifierImpl>(
diff --git a/devel/electron5/files/patch-chrome_browser_platform__util.h b/devel/electron5/files/patch-chrome_browser_platform__util.h
new file mode 100644
index 000000000000..02be44eabab2
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_platform__util.h
@@ -0,0 +1,11 @@
+--- chrome/browser/platform_util.h.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/platform_util.h
+@@ -40,7 +40,7 @@ enum OpenOperationResult {
+ enum OpenItemType {
+ OPEN_FILE,
+ OPEN_FOLDER,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SHOW_ITEM_IN_FOLDER
+ #endif
+ };
diff --git a/devel/electron5/files/patch-chrome_browser_plugins_plugins__resource__service.cc b/devel/electron5/files/patch-chrome_browser_plugins_plugins__resource__service.cc
new file mode 100644
index 000000000000..3af745ac2568
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_plugins_plugins__resource__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugins_resource_service.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/plugins/plugins_resource_service.cc
+@@ -63,7 +63,7 @@ GURL GetPluginsServerURL() {
+ filename = "plugins_win.json";
+ #elif defined(OS_CHROMEOS)
+ filename = "plugins_chromeos.json";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ filename = "plugins_linux.json";
+ #elif defined(OS_MACOSX)
+ filename = "plugins_mac.json";
diff --git a/devel/electron5/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc b/devel/electron5/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
new file mode 100644
index 000000000000..a538bdcb27d1
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/policy/configuration_policy_handler_list_factory.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/policy/configuration_policy_handler_list_factory.cc
+@@ -107,7 +107,7 @@
+ #include "chrome/browser/policy/browser_signin_policy_handler.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+@@ -939,7 +939,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ prefs::kEnterpriseHardwarePlatformAPIEnabled,
+ base::Value::Type::BOOLEAN },
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ { key::kAlternativeBrowserPath,
+ browser_switcher::prefs::kAlternativeBrowserPath,
diff --git a/devel/electron5/files/patch-chrome_browser_policy_machine__level__user__cloud__policy__controller.cc b/devel/electron5/files/patch-chrome_browser_policy_machine__level__user__cloud__policy__controller.cc
new file mode 100644
index 000000000000..7eaf99330b24
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_policy_machine__level__user__cloud__policy__controller.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/policy/machine_level_user_cloud_policy_controller.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/policy/machine_level_user_cloud_policy_controller.cc
+@@ -65,7 +65,7 @@ bool IsMachineLevelUserCloudPolicyEnabled() {
+ #endif
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void CleanupUnusedPolicyDirectory() {
+ std::string enrollment_token =
+ BrowserDMTokenStorage::Get()->RetrieveEnrollmentToken();
+@@ -124,7 +124,7 @@ MachineLevelUserCloudPolicyController::CreatePolicyMan
+ void MachineLevelUserCloudPolicyController::Init(
+ PrefService* local_state,
+ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // This is a function that removes the directory we accidentally create due to
+ // crbug.com/880870. The directory is only removed when it's empty and
+ // enrollment token doesn't exist. This function is expected to be removed
diff --git a/devel/electron5/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc b/devel/electron5/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
new file mode 100644
index 000000000000..e2698d948407
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/policy_prefs_browsertest.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/policy/policy_prefs_browsertest.cc
+@@ -185,6 +185,8 @@ class PolicyTestCase {
+ const std::string os("chromeos");
+ #elif defined(OS_LINUX)
+ const std::string os("linux");
++#elif defined(OS_FREEBSD)
++ const std::string os("freebsd");
+ #else
+ #error "Unknown platform"
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_prefs_browser__prefs.cc b/devel/electron5/files/patch-chrome_browser_prefs_browser__prefs.cc
new file mode 100644
index 000000000000..35cc47f7d168
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_prefs_browser__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/prefs/browser_prefs.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/prefs/browser_prefs.cc
+@@ -319,7 +319,7 @@
+ #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_prefs_manager.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+@@ -771,7 +771,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySync
+ safe_browsing::PostCleanupSettingsResetter::RegisterProfilePrefs(registry);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc b/devel/electron5/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
new file mode 100644
index 000000000000..7b6ff9766c53
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/prefs/pref_service_incognito_whitelist.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/prefs/pref_service_incognito_whitelist.cc
+@@ -164,7 +164,7 @@ const char* const kPersistentPrefNames[] = {
+ prefs::kShowFullscreenToolbar,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Toggleing custom frames affects all open windows in the profile, hence
+ // should be written to the regular profile when changed in incognito mode.
+ prefs::kUseCustomChromeFrame,
diff --git a/devel/electron5/files/patch-chrome_browser_process__singleton__posix.cc b/devel/electron5/files/patch-chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..1d4bea2a90dd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/process_singleton_posix.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/process_singleton_posix.cc
+@@ -93,11 +93,11 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/process_singleton_dialog_linux.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -325,7 +325,7 @@ bool DisplayProfileInUseError(const base::FilePath& lo
+ if (g_disable_prompt)
+ return g_user_opted_unlock_in_use_profile;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::string16 relaunch_button_text = l10n_util::GetStringUTF16(
+ IDS_PROFILE_IN_USE_LINUX_RELAUNCH);
+ return ShowProcessSingletonDialog(error, relaunch_button_text);
+@@ -904,7 +904,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ SendRemoteProcessInteractionResultHistogram(REMOTE_PROCESS_SHUTTING_DOWN);
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron5/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc b/devel/electron5/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
new file mode 100644
index 000000000000..048f371ed656
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+@@ -326,7 +326,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ #if !defined(OS_ANDROID)
+ MediaGalleriesPreferencesFactory::GetInstance();
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetInstance();
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_profiles_profile__attributes__entry.cc b/devel/electron5/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
new file mode 100644
index 000000000000..f4498be77946
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/profile_attributes_entry.cc.orig 2019-04-08 08:18:08 UTC
++++ chrome/browser/profiles/profile_attributes_entry.cc
+@@ -57,7 +57,7 @@ void ProfileAttributesEntry::Initialize(ProfileInfoCac
+ if (is_force_signin_enabled_) {
+ if (!IsAuthenticated())
+ is_force_signin_profile_locked_ = true;
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ } else if (IsSigninRequired()) {
+ // Profiles that require signin in the absence of an enterprise policy are
+ // left-overs from legacy supervised users. Just unlock them, so users can
diff --git a/devel/electron5/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc b/devel/electron5/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
new file mode 100644
index 000000000000..b30faeb855bf
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_context_menu/render_view_context_menu.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
+@@ -1507,7 +1507,7 @@ void RenderViewContextMenu::AppendEditableItems() {
+ // 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+ // We make an exception for OS X as context clicking will select the closest
+ // word. In this case both items are always shown.
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
+ IDS_CONTENT_CONTEXT_UNDO);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
+@@ -1549,7 +1549,7 @@ void RenderViewContextMenu::AppendLanguageSettings() {
+ if (!use_spelling)
+ return;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS,
+ IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS);
+ #else
+@@ -1823,7 +1823,7 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id)
+ case IDC_CHECK_SPELLING_WHILE_TYPING:
+ return prefs->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
+
+-#if !defined(OS_MACOSX) && defined(OS_POSIX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD) && defined(OS_POSIX)
+ // TODO(suzhe): this should not be enabled for password fields.
+ case IDC_INPUT_METHODS_MENU:
+ return true;
diff --git a/devel/electron5/files/patch-chrome_browser_renderer__preferences__util.cc b/devel/electron5/files/patch-chrome_browser_renderer__preferences__util.cc
new file mode 100644
index 000000000000..1eccc956ea62
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_renderer__preferences__util.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_preferences_util.cc.orig 2019-04-08 08:32:45 UTC
++++ chrome/browser/renderer_preferences_util.cc
+@@ -28,7 +28,7 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/themes/theme_service.h"
+ #include "chrome/browser/themes/theme_service_factory.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -127,7 +127,7 @@ void UpdateFromSystemSettings(content::RendererPrefere
+ prefs->caret_blink_interval = interval;
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
+@@ -146,7 +146,7 @@ void UpdateFromSystemSettings(content::RendererPrefere
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_BSD)
+ content::UpdateFontRendererPreferencesFromSystemSettings(prefs);
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py b/devel/electron5/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
new file mode 100644
index 000000000000..3cc257a63eb0
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
@@ -0,0 +1,19 @@
+--- chrome/browser/resources/safe_browsing/gen_file_type_proto.py.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/resources/safe_browsing/gen_file_type_proto.py
+@@ -31,6 +31,7 @@ def PlatformTypes():
+ "android": download_file_types_pb2.DownloadFileType.PLATFORM_ANDROID,
+ "chromeos": download_file_types_pb2.DownloadFileType.PLATFORM_CHROME_OS,
+ "linux": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
++ "bsd": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
+ "mac": download_file_types_pb2.DownloadFileType.PLATFORM_MAC,
+ "win": download_file_types_pb2.DownloadFileType.PLATFORM_WINDOWS,
+ }
+@@ -169,7 +170,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenera
+ 'Outfile must have a %d for version and %s for platform.')
+ parser.add_option('-t', '--type',
+ help='The platform type. One of android, chromeos, ' +
+- 'linux, mac, win')
++ 'linux, bsd, mac, win')
+
+ def AddExtraCommandLineArgsForVirtualEnvRun(self, opts, command):
+ if opts.type is not None:
diff --git a/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
new file mode 100644
index 000000000000..97bddc3e44b4
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
@@ -0,0 +1,20 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js
+@@ -35,7 +35,7 @@ cr.define('settings', function() {
+
+ useDefaultTheme() {}
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ useSystemTheme() {}
+
+ // </if>
+@@ -93,7 +93,7 @@ cr.define('settings', function() {
+ chrome.send('useDefaultTheme');
+ }
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /** @override */
+ useSystemTheme() {
+ chrome.send('useSystemTheme');
diff --git a/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
new file mode 100644
index 000000000000..aae864ba24d0
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
@@ -0,0 +1,29 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.html.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.html
+@@ -65,7 +65,7 @@
+ hidden="[[!pageVisibility.setTheme]]"
+ label="$i18n{themes}" sub-label="[[themeSublabel_]]"
+ on-click="openThemeUrl_"></cr-link-row>
+-<if expr="not is_linux or chromeos">
++<if expr="not is_posix or chromeos">
+ <template is="dom-if" if="[[prefs.extensions.theme.id.value]]">
+ <div class="separator"></div>
+ <paper-button id="useDefault" on-click="onUseDefaultTap_"
+@@ -74,7 +74,7 @@
+ </paper-button>
+ </template>
+ </if>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <div class="settings-row continuation"
+ hidden="[[!showThemesSecondary_(
+ prefs.extensions.theme.id.value, useSystemTheme_)]]"
+@@ -139,7 +139,7 @@
+ pref="{{prefs.bookmark_bar.show_on_all_tabs}}"
+ label="$i18n{showBookmarksBar}">
+ </settings-toggle-button>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <settings-toggle-button
+ class$="[[getFirst_(pageVisibility.bookmarksBar)]]"
+ pref="{{prefs.browser.custom_chrome_frame}}"
diff --git a/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
new file mode 100644
index 000000000000..9d2505de80cb
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
@@ -0,0 +1,33 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.js.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.js
+@@ -120,7 +120,7 @@ Polymer({
+ 'defaultFontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
+ 'themeChanged_(prefs.extensions.theme.id.value, useSystemTheme_)',
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ // NOTE: this pref only exists on Linux.
+ 'useSystemThemePrefChanged_(prefs.extensions.theme.use_system.value)',
+ // </if>
+@@ -223,7 +223,7 @@ Polymer({
+ this.browserProxy_.useDefaultTheme();
+ },
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /**
+ * @param {boolean} useSystemTheme
+ * @private
+@@ -292,10 +292,10 @@ Polymer({
+ }
+
+ let i18nId;
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ i18nId = useSystemTheme ? 'systemTheme' : 'classicTheme';
+ // </if>
+- // <if expr="not is_linux or chromeos">
++ // <if expr="not is_bsd or chromeos">
+ i18nId = 'chooseFromWebStore';
+ // </if>
+ this.themeSublabel_ = this.i18n(i18nId);
diff --git a/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc b/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
new file mode 100644
index 000000000000..ccdff3b36c08
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc
+@@ -8,7 +8,12 @@
+
+ #include "base/hash.h"
+ #include "base/logging.h"
++//XXX(rene) needs shim headers?
++#if defined(USE_SYSTEM_PROTOBUF)
++#include <google/protobuf/message_lite.h>
++#else
+ #include "third_party/protobuf/src/google/protobuf/message_lite.h"
++#endif
+
+ namespace safe_browsing {
+
diff --git a/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc b/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
new file mode 100644
index 000000000000..18796fa5fd79
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+@@ -715,7 +715,7 @@ void IncidentReportingService::OnEnvironmentDataCollec
+ environment_collection_pending_ = false;
+
+ // Process::Current().CreationTime() is missing on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeDelta uptime =
+ first_incident_time_ - base::Process::Current().CreationTime();
+ environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/devel/electron5/files/patch-chrome_browser_search_local__files__ntp__source.cc b/devel/electron5/files/patch-chrome_browser_search_local__files__ntp__source.cc
new file mode 100644
index 000000000000..c4525b9b9eb1
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_search_local__files__ntp__source.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/search/local_files_ntp_source.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/search/local_files_ntp_source.cc
+@@ -20,8 +20,13 @@
+ #include "build/build_config.h"
+ #include "chrome/common/url_constants.h"
+ #include "content/public/browser/url_data_source.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#include <re2/stringpiece.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
+ #include "third_party/re2/src/re2/stringpiece.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron5/files/patch-chrome_browser_signin_signin__util.cc b/devel/electron5/files/patch-chrome_browser_signin_signin__util.cc
new file mode 100644
index 000000000000..f399c25be493
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_signin_signin__util.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/signin/signin_util.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/signin/signin_util.cc
+@@ -42,7 +42,7 @@ namespace {
+
+ constexpr char kSignoutSettingKey[] = "signout_setting";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #define CAN_DELETE_PROFILE
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc b/devel/electron5/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
new file mode 100644
index 000000000000..1abec17ff058
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ssl/ssl_error_controller_client.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ssl/ssl_error_controller_client.cc
+@@ -78,7 +78,7 @@ void LaunchDateAndTimeSettingsImpl() {
+ #if defined(OS_ANDROID)
+ chrome::android::OpenDateAndTimeSettings();
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ struct ClockCommand {
+ const char* const pathname;
+ const char* const argument;
+@@ -219,7 +219,7 @@ void SSLErrorControllerClient::Proceed() {
+
+ bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+ #if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
+- defined(OS_WIN)
++ defined(OS_WIN) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron5/files/patch-chrome_browser_sync_chrome__sync__client.cc b/devel/electron5/files/patch-chrome_browser_sync_chrome__sync__client.cc
new file mode 100644
index 000000000000..5d6849fdfdb6
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_sync_chrome__sync__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/sync/chrome_sync_client.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/sync/chrome_sync_client.cc
+@@ -428,7 +428,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ }
+ #endif // BUILDFLAG(ENABLE_APP_LIST)
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Dictionary sync is enabled by default.
+ if (!disabled_types.Has(syncer::DICTIONARY)) {
+ if (base::FeatureList::IsEnabled(switches::kSyncPseudoUSSDictionary)) {
+@@ -444,7 +444,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ base::CreateSingleThreadTaskRunnerWithTraits({BrowserThread::UI})));
+ }
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ if (arc::IsArcAllowedForProfile(profile_) &&
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.cc b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.cc
new file mode 100644
index 000000000000..b1e7887b1d61
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.cc
@@ -0,0 +1,56 @@
+--- chrome/browser/task_manager/sampling/task_group.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/task_manager/sampling/task_group.cc
+@@ -33,9 +33,9 @@ const int kBackgroundRefreshTypesMask =
+ #if defined(OS_WIN)
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME |
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if BUILDFLAG(ENABLE_NACL)
+ REFRESH_TYPE_NACL |
+ #endif // BUILDFLAG(ENABLE_NACL)
+@@ -112,9 +112,9 @@ TaskGroup::TaskGroup(
+ #if BUILDFLAG(ENABLE_NACL)
+ nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown),
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ open_fd_count_(-1),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ idle_wakeups_per_second_(-1),
+ gpu_memory_has_duplicates_(false),
+ is_backgrounded_(false),
+@@ -128,10 +128,10 @@ TaskGroup::TaskGroup(
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnOpenFdCountRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnProcessPriorityDone,
+ weak_ptr_factory_.GetWeakPtr()));
+
+@@ -296,14 +296,14 @@ void TaskGroup::OnRefreshNaClDebugStubPortDone(int nac
+ }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void TaskGroup::OnOpenFdCountRefreshDone(int open_fd_count) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ open_fd_count_ = open_fd_count;
+ OnBackgroundRefreshTypeFinished(REFRESH_TYPE_FD_COUNT);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void TaskGroup::OnCpuRefreshDone(double cpu_usage) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.h b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.h
new file mode 100644
index 000000000000..e890888d7801
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group.h
@@ -0,0 +1,39 @@
+--- chrome/browser/task_manager/sampling/task_group.h.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/task_manager/sampling/task_group.h
+@@ -106,9 +106,9 @@ class TaskGroup {
+ int nacl_debug_stub_port() const { return nacl_debug_stub_port_; }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int open_fd_count() const { return open_fd_count_; }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ int idle_wakeups_per_second() const { return idle_wakeups_per_second_; }
+ private:
+@@ -121,9 +121,9 @@ class TaskGroup {
+ void RefreshNaClDebugStubPort(int child_process_unique_id);
+ void OnRefreshNaClDebugStubPortDone(int port);
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void OnOpenFdCountRefreshDone(int open_fd_count);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void OnCpuRefreshDone(double cpu_usage);
+ void OnSwappedMemRefreshDone(int64_t swapped_mem_bytes);
+@@ -191,10 +191,10 @@ class TaskGroup {
+ #if BUILDFLAG(ENABLE_NACL)
+ int nacl_debug_stub_port_;
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // The number of file descriptors currently open by the process.
+ int open_fd_count_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int idle_wakeups_per_second_;
+ bool gpu_memory_has_duplicates_;
+ bool is_backgrounded_;
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
new file mode 100644
index 000000000000..f7b5b1503c2b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.cc
+@@ -42,9 +42,9 @@ TaskGroupSampler::TaskGroupSampler(
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_swapped_mem_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority)
+ : process_(std::move(process)),
+ process_metrics_(CreateProcessMetrics(process_.Handle())),
+@@ -52,9 +52,9 @@ TaskGroupSampler::TaskGroupSampler(
+ on_cpu_refresh_callback_(on_cpu_refresh),
+ on_swapped_mem_refresh_callback_(on_swapped_mem_refresh),
+ on_idle_wakeups_callback_(on_idle_wakeups),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_open_fd_count_callback_(on_open_fd_count),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_process_priority_callback_(on_process_priority) {
+ DCHECK(blocking_pool_runner.get());
+
+@@ -85,7 +85,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ on_swapped_mem_refresh_callback_);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_IDLE_WAKEUPS,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -94,9 +94,9 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshIdleWakeupsPerSecond, this),
+ on_idle_wakeups_callback_);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_FD_COUNT,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -105,7 +105,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshOpenFdCount, this),
+ on_open_fd_count_callback_);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_PRIORITY,
+ refresh_flags)) {
+@@ -144,13 +144,13 @@ int TaskGroupSampler::RefreshIdleWakeupsPerSecond() {
+ return process_metrics_->GetIdleWakeupsPerSecond();
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int TaskGroupSampler::RefreshOpenFdCount() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
+
+ return process_metrics_->GetOpenFdCount();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ bool TaskGroupSampler::RefreshProcessPriority() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
new file mode 100644
index 000000000000..3e4d599e8c5e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
@@ -0,0 +1,50 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.h.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.h
+@@ -32,9 +32,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ using OnCpuRefreshCallback = base::Callback<void(double)>;
+ using OnSwappedMemRefreshCallback = base::Callback<void(int64_t)>;
+ using OnIdleWakeupsCallback = base::Callback<void(int)>;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnOpenFdCountCallback = base::Callback<void(int)>;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnProcessPriorityCallback = base::Callback<void(bool)>;
+
+ TaskGroupSampler(
+@@ -43,9 +43,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_memory_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority);
+
+ // Refreshes the expensive process' stats (CPU usage, memory usage, and idle
+@@ -60,9 +60,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ double RefreshCpuUsage();
+ int64_t RefreshSwappedMem();
+ int RefreshIdleWakeupsPerSecond();
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int RefreshOpenFdCount();
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool RefreshProcessPriority();
+
+ // The process that holds the handle that we own so that we can use it for
+@@ -80,9 +80,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback on_cpu_refresh_callback_;
+ const OnSwappedMemRefreshCallback on_swapped_mem_refresh_callback_;
+ const OnIdleWakeupsCallback on_idle_wakeups_callback_;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback on_open_fd_count_callback_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback on_process_priority_callback_;
+
+ // To assert we're running on the correct thread.
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
new file mode 100644
index 000000000000..8084e80d9619
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/sampling/task_manager_impl.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/task_manager/sampling/task_manager_impl.cc
+@@ -207,11 +207,11 @@ void TaskManagerImpl::GetUSERHandles(TaskId task_id,
+ }
+
+ int TaskManagerImpl::GetOpenFdCount(TaskId task_id) const {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return GetTaskGroupByTaskId(task_id)->open_fd_count();
+ #else
+ return -1;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ }
+
+ bool TaskManagerImpl::IsTaskOnBackgroundedProcess(TaskId task_id) const {
diff --git a/devel/electron5/files/patch-chrome_browser_task__manager_task__manager__observer.h b/devel/electron5/files/patch-chrome_browser_task__manager_task__manager__observer.h
new file mode 100644
index 000000000000..2d318f6b4b7a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_task__manager_task__manager__observer.h
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/task_manager_observer.h.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/task_manager/task_manager_observer.h
+@@ -43,11 +43,11 @@ enum RefreshType {
+ // or backgrounded.
+ REFRESH_TYPE_PRIORITY = 1 << 13,
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // For observers interested in getting the number of open file descriptors of
+ // processes.
+ REFRESH_TYPE_FD_COUNT = 1 << 14,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ REFRESH_TYPE_KEEPALIVE_COUNT = 1 << 15,
+ REFRESH_TYPE_MEMORY_FOOTPRINT = 1 << 16,
diff --git a/devel/electron5/files/patch-chrome_browser_tracing_crash__service__uploader.cc b/devel/electron5/files/patch-chrome_browser_tracing_crash__service__uploader.cc
new file mode 100644
index 000000000000..afeb4c13fd17
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_tracing_crash__service__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/tracing/crash_service_uploader.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/tracing/crash_service_uploader.cc
+@@ -162,6 +162,8 @@ void TraceCrashServiceUploader::DoCompressOnBackground
+ const char product[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_browser__command__controller.cc b/devel/electron5/files/patch-chrome_browser_ui_browser__command__controller.cc
new file mode 100644
index 000000000000..4a8b6f7616e8
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_browser__command__controller.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/browser_command_controller.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/browser_command_controller.cc
+@@ -79,7 +79,7 @@
+ #include "chrome/browser/ui/browser_commands_chromeos.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+
+@@ -216,7 +216,7 @@ bool BrowserCommandController::IsReservedCommandOrKey(
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // If this key was registered by the user as a content editing hotkey, then
+ // it is not reserved.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+@@ -421,7 +421,7 @@ bool BrowserCommandController::ExecuteCommandWithDispo
+ break;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case IDC_MINIMIZE_WINDOW:
+ browser_->window()->Minimize();
+ break;
+@@ -860,7 +860,7 @@ void BrowserCommandController::InitCommandState() {
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_2, true);
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_3, true);
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ command_updater_.UpdateCommandEnabled(IDC_MINIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_MAXIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_RESTORE_WINDOW, true);
diff --git a/devel/electron5/files/patch-chrome_browser_ui_browser__view__prefs.cc b/devel/electron5/files/patch-chrome_browser_ui_browser__view__prefs.cc
new file mode 100644
index 000000000000..8140dbd391bd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_browser__view__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/browser_view_prefs.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/ui/browser_view_prefs.cc
+@@ -34,7 +34,7 @@ void RegisterBrowserViewLocalPrefs(PrefRegistrySimple*
+
+ void RegisterBrowserViewProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool custom_frame_pref_default = false;
+ #if defined(USE_X11)
+ custom_frame_pref_default = ui::GetCustomFramePrefDefault();
+@@ -45,7 +45,7 @@ void RegisterBrowserViewProfilePrefs(
+ #endif
+ registry->RegisterBooleanPref(prefs::kUseCustomChromeFrame,
+ custom_frame_pref_default);
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX && !OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void MigrateBrowserTabStripPrefs(PrefService* prefs) {
diff --git a/devel/electron5/files/patch-chrome_browser_ui_browser__window.h b/devel/electron5/files/patch-chrome_browser_ui_browser__window.h
new file mode 100644
index 000000000000..383e71501f93
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_browser__window.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/browser_window.h.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/browser_window.h
+@@ -425,7 +425,7 @@ class BrowserWindow : public ui::BaseWindow {
+ bool is_source_keyboard) = 0;
+
+ #if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ virtual void ShowHatsBubbleFromAppMenuButton() = 0;
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc b/devel/electron5/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
new file mode 100644
index 000000000000..108cf18c0628
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc
+@@ -16,7 +16,7 @@
+
+ // NOTE(koz): Linux doesn't use the thick shadowed border, so we add padding
+ // here.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const int ExclusiveAccessBubble::kPaddingPx = 8;
+ #else
+ const int ExclusiveAccessBubble::kPaddingPx = 15;
diff --git a/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine.h b/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine.h
new file mode 100644
index 000000000000..436fb2f73ae7
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine.h.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/input_method/input_method_engine.h
+@@ -27,7 +27,7 @@ class InputMethodEngine : public InputMethodEngineBase
+
+ // ui::IMEEngineHandlerInterface:
+ bool IsActive() const override;
+- std::string GetExtensionId() const override;
++ std::string GetExtensionId() const;
+
+ // Creates and shows the IME window.
+ // Returns 0 for errors and |error| will contains the error message.
diff --git a/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc b/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
new file mode 100644
index 000000000000..a3a29506ad1a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine_base.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/input_method/input_method_engine_base.cc
+@@ -29,7 +29,7 @@
+ #include "ui/base/ime/chromeos/ime_keymap.h"
+ #elif defined(OS_WIN)
+ #include "ui/events/keycodes/keyboard_codes_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/keycodes/keyboard_codes_posix.h"
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc b/devel/electron5/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
new file mode 100644
index 000000000000..7b586a4fb35f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
@@ -0,0 +1,10 @@
+--- chrome/browser/ui/libgtkui/print_dialog_gtk.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/ui/libgtkui/print_dialog_gtk.cc
+@@ -333,6 +333,7 @@ void PrintDialogGtk::ShowDialog(
+ // Since we only generate PDF, only show printers that support PDF.
+ // TODO(thestig) Add more capabilities to support?
+ GtkPrintCapabilities cap = static_cast<GtkPrintCapabilities>(
++ GTK_PRINT_CAPABILITY_GENERATE_PS |
+ GTK_PRINT_CAPABILITY_GENERATE_PDF |
+ GTK_PRINT_CAPABILITY_PAGE_SET |
+ GTK_PRINT_CAPABILITY_COPIES |
diff --git a/devel/electron5/files/patch-chrome_browser_ui_sad__tab.cc b/devel/electron5/files/patch-chrome_browser_ui_sad__tab.cc
new file mode 100644
index 000000000000..ddba5deb702a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_sad__tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/sad_tab.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/ui/sad_tab.cc
+@@ -180,7 +180,7 @@ std::vector<int> SadTab::GetSubMessages() {
+ // Only show incognito suggestion if not already in Incognito mode.
+ if (!web_contents_->GetBrowserContext()->IsOffTheRecord())
+ message_ids.insert(message_ids.begin(), IDS_SAD_TAB_RELOAD_INCOGNITO);
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Note: on macOS, Linux and ChromeOS, the first bullet is either one of
+ // IDS_SAD_TAB_RELOAD_CLOSE_TABS or IDS_SAD_TAB_RELOAD_CLOSE_NOTABS
+ // followed by one of the above suggestions.
diff --git a/devel/electron5/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc b/devel/electron5/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
new file mode 100644
index 000000000000..e59714234093
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/startup/bad_flags_prompt.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/startup/bad_flags_prompt.cc
+@@ -84,7 +84,7 @@ static const char* kBadFlags[] = {
+ extensions::switches::kExtensionsOnChromeURLs,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
+ // http://crbug.com/327295
+ switches::kEnableSpeechDispatcher,
diff --git a/devel/electron5/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc b/devel/electron5/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
new file mode 100644
index 000000000000..6aae10f0b2c5
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
@@ -0,0 +1,22 @@
+--- chrome/browser/ui/startup/startup_browser_creator.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/startup/startup_browser_creator.cc
+@@ -79,7 +79,7 @@
+ #include "chrome/browser/ui/user_manager.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+
+@@ -633,8 +633,10 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
+ }
+ #endif // OS_CHROMEOS
+
++#if 0 /* XXX */
+ #if defined(TOOLKIT_VIEWS) && defined(USE_X11)
+ ui::TouchFactory::SetTouchDeviceListFromCommandLine();
++#endif
+ #endif
+
+ #if defined(OS_MACOSX)
diff --git a/devel/electron5/files/patch-chrome_browser_ui_tab__helpers.cc b/devel/electron5/files/patch-chrome_browser_ui_tab__helpers.cc
new file mode 100644
index 000000000000..0f4c1e67f8cd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_tab__helpers.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/ui/tab_helpers.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/tab_helpers.cc
+@@ -116,7 +116,7 @@
+ #include "components/zoom/zoom_controller.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
+ #include "chrome/browser/ui/hats/hats_helper.h"
+ #endif
+@@ -309,11 +309,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_con
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopSessionDurationObserver::CreateForWebContents(web_contents);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ features::kHappinessTrackingSurveysForDesktop)) {
+ HatsHelper::CreateForWebContents(web_contents);
diff --git a/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc b/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
new file mode 100644
index 000000000000..3c828b5f1667
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/ui/task_manager/task_manager_columns.cc.orig 2019-04-08 08:18:09 UTC
++++ chrome/browser/ui/task_manager/task_manager_columns.cc
+@@ -93,10 +93,10 @@ const TableColumnData kColumns[] = {
+ base::size("100000") * kCharWidth, -1, true, false, false},
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
+ base::size("999") * kCharWidth, -1, true, false, false},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN, ui::TableColumn::LEFT, -1, 0,
+ base::size("background") * kCharWidth, -1, true, true, false},
+ {IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
diff --git a/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc b/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
new file mode 100644
index 000000000000..8d6814ce51c3
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
@@ -0,0 +1,50 @@
+--- chrome/browser/ui/task_manager/task_manager_table_model.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/task_manager/task_manager_table_model.cc
+@@ -430,13 +430,13 @@ base::string16 TaskManagerTableModel::GetText(int row,
+ ? stringifier_->backgrounded_string()
+ : stringifier_->foregrounded_string();
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
+ return fd_count >= 0 ? base::FormatNumber(fd_count)
+ : stringifier_->n_a_string();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ case IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN: {
+ return stringifier_->GetKeepaliveCountText(
+@@ -590,7 +590,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ return BooleanCompare(is_proc1_bg, is_proc2_bg);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int proc1_fd_count =
+ observed_task_manager()->GetOpenFdCount(tasks_[row1]);
+@@ -598,7 +598,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ observed_task_manager()->GetOpenFdCount(tasks_[row2]);
+ return ValueCompare(proc1_fd_count, proc2_fd_count);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
+@@ -760,11 +760,11 @@ void TaskManagerTableModel::UpdateRefreshTypes(int col
+ type = REFRESH_TYPE_KEEPALIVE_COUNT;
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
+ type = REFRESH_TYPE_FD_COUNT;
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
diff --git a/devel/electron5/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc b/devel/electron5/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
new file mode 100644
index 000000000000..92d7cefacc6d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/toolbar/app_menu_model.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/toolbar/app_menu_model.cc
+@@ -671,7 +671,7 @@ bool AppMenuModel::IsCommandIdVisible(int command_id)
+ return app_menu_icon_controller_->GetTypeAndSeverity().type ==
+ AppMenuIconController::IconType::UPGRADE_NOTIFICATION;
+ }
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ case IDC_BOOKMARK_PAGE:
+ return !chrome::ShouldRemoveBookmarkThisPageUI(browser_->profile());
+ case IDC_BOOKMARK_ALL_TABS:
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_accelerator__table.cc b/devel/electron5/files/patch-chrome_browser_ui_views_accelerator__table.cc
new file mode 100644
index 000000000000..0783a36224c1
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_accelerator__table.cc
@@ -0,0 +1,46 @@
+--- chrome/browser/ui/views/accelerator_table.cc.orig 2019-04-08 08:18:10 UTC
++++ chrome/browser/ui/views/accelerator_table.cc
+@@ -50,7 +50,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR, IDC_SAVE_PAGE},
+ {ui::VKEY_9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT},
+@@ -80,7 +80,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_NUMPAD7, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_6},
+ {ui::VKEY_8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1},
+@@ -98,7 +98,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR},
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX || OS_BSD) && !OS_CHROMEOS
+ {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
+ IDC_SHOW_BOOKMARK_BAR},
+ {ui::VKEY_OEM_MINUS, ui::EF_PLATFORM_ACCELERATOR, IDC_ZOOM_MINUS},
+@@ -122,14 +122,14 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_F11, ui::EF_NONE, IDC_FULLSCREEN},
+
+ // Platform-specific key maps.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK},
+ {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD},
+ {ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash.
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc b/devel/electron5/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
new file mode 100644
index 000000000000..c856a398b1ec
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
+@@ -35,7 +35,7 @@
+ #include "ui/wm/core/wm_state.h"
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -45,7 +45,7 @@
+ #include "chrome/grit/generated_resources.h"
+ #include "content/public/common/content_switches.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ ChromeBrowserMainExtraPartsViews::ChromeBrowserMainExtraPartsViews() {}
+
+@@ -93,7 +93,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ }
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // On the Linux desktop, we want to prevent the user from logging in as root,
+ // so that we don't destroy the profile. Now that we have some minimal ui
+ // initialized, check to see if we're running as root and bail if we are.
+@@ -124,7 +124,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ base::RunLoop().RunUntilIdle();
+
+ exit(EXIT_FAILURE);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ }
+
+ void ChromeBrowserMainExtraPartsViews::PostBrowserStart() {
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_chrome__views__delegate.h b/devel/electron5/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
new file mode 100644
index 000000000000..a8e4e59da590
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/chrome_views_delegate.h.orig 2019-04-08 08:32:46 UTC
++++ chrome/browser/ui/views/chrome_views_delegate.h
+@@ -44,7 +44,7 @@ class ChromeViewsDelegate : public views::ViewsDelegat
+ HICON GetSmallWindowIcon() const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ const base::Closure& callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ bool WindowManagerProvidesTitleBar(bool maximized) override;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_first__run__dialog.cc b/devel/electron5/files/patch-chrome_browser_ui_views_first__run__dialog.cc
new file mode 100644
index 000000000000..92a78964d01f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_first__run__dialog.cc
@@ -0,0 +1,24 @@
+--- chrome/browser/ui/views/first_run_dialog.cc.orig 2019-04-08 08:18:10 UTC
++++ chrome/browser/ui/views/first_run_dialog.cc
+@@ -37,8 +37,10 @@
+ namespace {
+
+ void InitCrashReporterIfEnabled(bool enabled) {
++#if !defined(OS_BSD)
+ if (enabled)
+ breakpad::InitCrashReporter(std::string());
++#endif
+ }
+
+ } // namespace
+@@ -111,8 +113,10 @@ views::View* FirstRunDialog::CreateExtraView() {
+ bool FirstRunDialog::Accept() {
+ GetWidget()->Hide();
+
++#if !defined(OS_BSD)
+ ChangeMetricsReportingStateWithReply(report_crashes_->checked(),
+ base::Bind(&InitCrashReporterIfEnabled));
++#endif
+
+ if (make_default_->checked())
+ shell_integration::SetAsDefaultBrowser();
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__frame.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
new file mode 100644
index 000000000000..72c1fa8895cd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/browser_frame.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/browser_frame.cc
+@@ -37,7 +37,7 @@
+ #include "components/user_manager/user_manager.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/views/frame/browser_command_handler_linux.h"
+ #endif
+
+@@ -48,7 +48,7 @@
+ namespace {
+
+ bool IsUsingGtkTheme(Profile* profile) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme();
+ #else
+ return false;
+@@ -104,7 +104,7 @@ void BrowserFrame::InitBrowserFrame() {
+ non_client_view()->set_context_menu_controller(this);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ browser_command_handler_.reset(new BrowserCommandHandlerLinux(browser_view_));
+ #endif
+ }
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
new file mode 100644
index 000000000000..f4874c577610
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc.orig 2019-04-08 08:18:10 UTC
++++ chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+@@ -13,7 +13,7 @@
+ #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -32,7 +32,7 @@ OpaqueBrowserFrameView* CreateOpaqueBrowserFrameView(
+ BrowserView* browser_view) {
+ #if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
+ std::unique_ptr<views::NavButtonProvider> nav_button_provider;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (ThemeServiceFactory::GetForProfile(browser_view->browser()->profile())
+ ->UsingSystemTheme() &&
+ views::LinuxUI::instance()) {
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.cc
new file mode 100644
index 000000000000..7b35b6bb824a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/browser_view.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/browser_view.cc
+@@ -1269,7 +1269,7 @@ void BrowserView::RotatePaneFocus(bool forwards) {
+ }
+
+ void BrowserView::DestroyBrowser() {
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (quit_instruction_bubble_controller_) {
+ GetWidget()->GetNativeView()->RemovePreTargetHandler(
+ quit_instruction_bubble_controller_.get());
+@@ -2155,7 +2155,7 @@ views::View* BrowserView::CreateOverlayView() {
+ }
+
+ void BrowserView::OnWidgetDestroying(views::Widget* widget) {
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (quit_instruction_bubble_controller_) {
+ GetWidget()->GetNativeView()->RemovePreTargetHandler(
+ quit_instruction_bubble_controller_.get());
+@@ -2499,7 +2499,7 @@ void BrowserView::InitViews() {
+ GetWidget()->SetNativeWindowProperty(Profile::kProfileKey,
+ browser_->profile());
+
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (browser_->SupportsWindowFeature(Browser::FEATURE_TOOLBAR)) {
+ quit_instruction_bubble_controller_ =
+ QuitInstructionBubbleController::GetInstance();
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.h b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.h
new file mode 100644
index 000000000000..464a5f05e813
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_browser__view.h
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_view.h.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/browser_view.h
+@@ -50,7 +50,7 @@
+ #include "chrome/browser/ui/views/intent_picker_bubble_view.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/ui/views/quit_instruction_bubble_controller.h"
+ #endif
+
+@@ -853,7 +853,7 @@ class BrowserView : public BrowserWindow,
+ };
+ base::Optional<ResizeSession> interactive_resize_;
+
+-#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_WIN) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ scoped_refptr<QuitInstructionBubbleController>
+ quit_instruction_bubble_controller_;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
new file mode 100644
index 000000000000..8660d7341bb1
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+@@ -49,7 +49,7 @@
+ #include "ui/views/window/vector_icons/vector_icons.h"
+ #include "ui/views/window/window_shape.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/controls/menu/menu_runner.h"
+ #endif
+
+@@ -356,7 +356,7 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Butt
+ void OpaqueBrowserFrameView::OnMenuButtonClicked(views::MenuButton* source,
+ const gfx::Point& point,
+ const ui::Event* event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ views::MenuRunner menu_runner(frame()->GetSystemMenuModel(),
+ views::MenuRunner::HAS_MNEMONICS);
+ menu_runner.RunMenuAt(browser_view()->GetWidget(), window_icon_,
+@@ -480,7 +480,7 @@ bool OpaqueBrowserFrameView::EverHasVisibleBackgroundT
+
+ OpaqueBrowserFrameView::FrameButtonStyle
+ OpaqueBrowserFrameView::GetFrameButtonStyle() const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return FrameButtonStyle::kMdButton;
+ #else
+ return FrameButtonStyle::kImageButton;
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
new file mode 100644
index 000000000000..b571f7f2611e
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc
+@@ -10,7 +10,7 @@ bool OpaqueBrowserFrameViewPlatformSpecific::IsUsingSy
+ return false;
+ }
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_FREEBSD)
+
+ // static
+ OpaqueBrowserFrameViewPlatformSpecific*
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
new file mode 100644
index 000000000000..9d4af9aa9034
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_builder.cc.orig 2019-04-08 08:18:10 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_builder.cc
+@@ -78,7 +78,7 @@ void SystemMenuModelBuilder::BuildMenu(ui::SimpleMenuM
+
+ void SystemMenuModelBuilder::BuildSystemMenuForBrowserWindow(
+ ui::SimpleMenuModel* model) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ model->AddItemWithStringId(IDC_MINIMIZE_WINDOW, IDS_MINIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_MAXIMIZE_WINDOW, IDS_MAXIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_RESTORE_WINDOW, IDS_RESTORE_WINDOW_MENU);
+@@ -90,7 +90,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForBrowser
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddCheckItemWithStringId(IDC_USE_SYSTEM_TITLE_BAR,
+ IDS_SHOW_WINDOW_DECORATIONS_MENU);
+@@ -126,7 +126,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForAppOrPo
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_CLOSE_WINDOW, IDS_CLOSE);
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc b/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
new file mode 100644
index 000000000000..4d2303d97053
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/system_menu_model_delegate.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_delegate.cc
+@@ -15,7 +15,7 @@
+ #include "components/sessions/core/tab_restore_service.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/pref_names.h"
+ #include "components/prefs/pref_service.h"
+ #endif
+@@ -30,7 +30,7 @@ SystemMenuModelDelegate::SystemMenuModelDelegate(
+ SystemMenuModelDelegate::~SystemMenuModelDelegate() {}
+
+ bool SystemMenuModelDelegate::IsCommandIdChecked(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (command_id == IDC_USE_SYSTEM_TITLE_BAR) {
+ PrefService* prefs = browser_->profile()->GetPrefs();
+ return !prefs->GetBoolean(prefs::kUseCustomChromeFrame);
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_hung__renderer__view.cc b/devel/electron5/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
new file mode 100644
index 000000000000..76bd528c6645
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/hung_renderer_view.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/hung_renderer_view.cc
+@@ -389,7 +389,7 @@ bool HungRendererDialogView::Cancel() {
+ content::RenderProcessHost* rph =
+ hung_pages_table_model_->GetRenderWidgetHost()->GetProcess();
+ if (rph) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A generic |CrashDumpHungChildProcess()| is not implemented for Linux.
+ // Instead we send an explicit IPC to crash on the renderer's IO thread.
+ rph->ForceCrash();
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc b/devel/electron5/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
new file mode 100644
index 000000000000..ee80e646a739
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/new_tab_button.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/tabs/new_tab_button.cc
+@@ -63,7 +63,7 @@ const gfx::Size NewTabButton::kButtonSize{28, 28};
+ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
+ : views::ImageButton(listener), tab_strip_(tab_strip) {
+ set_animate_on_state_change(true);
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_triggerable_event_flags(triggerable_event_flags() |
+ ui::EF_MIDDLE_MOUSE_BUTTON);
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc b/devel/electron5/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
new file mode 100644
index 000000000000..812381b1d73f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/tabs/tab_drag_controller.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/views/tabs/tab_drag_controller.cc
+@@ -390,7 +390,7 @@ void TabDragController::Init(TabStrip* source_tabstrip
+ // synchronous on desktop Linux, so use that.
+ // - Chrome OS
+ // Releasing capture on Ash cancels gestures so avoid it.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ can_release_capture_ = false;
+ #endif
+ start_point_in_screen_ = gfx::Point(source_tab_offset, mouse_offset.y());
+@@ -814,7 +814,7 @@ TabDragController::DragBrowserToNewTabStrip(TabStrip*
+ else
+ target_tabstrip->GetWidget()->SetCapture(attached_tabstrip_);
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) || defined(OS_BSD)
+ // EndMoveLoop is going to snap the window back to its original location.
+ // Hide it so users don't see this. Hiding a window in Linux aura causes
+ // it to lose capture so skip it.
+@@ -1953,7 +1953,7 @@ TabDragController::Liveness TabDragController::GetLoca
+ if (dragged_window)
+ exclude.insert(dragged_window);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Exclude windows which are pending deletion via Browser::TabStripEmpty().
+ // These windows can be returned in the Linux Aura port because the browser
+ // window which was used for dragging is not hidden once all of its tabs are
diff --git a/devel/electron5/files/patch-chrome_browser_ui_webui_about__ui.cc b/devel/electron5/files/patch-chrome_browser_ui_webui_about__ui.cc
new file mode 100644
index 000000000000..3f6b6245eb2d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_webui_about__ui.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/about_ui.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/webui/about_ui.cc
+@@ -552,7 +552,7 @@ std::string ChromeURLs() {
+ return html;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string AboutLinuxProxyConfig() {
+ std::string data;
+ AppendHeader(&data, 0,
+@@ -607,7 +607,7 @@ void AboutUIHTMLSource::StartDataRequest(
+ .GetRawDataResource(idr)
+ .as_string();
+ }
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc b/devel/electron5/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
new file mode 100644
index 000000000000..595db7ce3c83
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
@@ -0,0 +1,49 @@
+--- chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -192,11 +192,11 @@
+ #include "chrome/browser/ui/webui/welcome/welcome_win10_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/sandbox_internals_ui.h"
+ #endif
+
+@@ -314,7 +314,7 @@ bool IsAboutUI(const GURL& url) {
+ #if !defined(OS_ANDROID)
+ || url.host_piece() == chrome::kChromeUITermsHost
+ #endif
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ || url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -588,7 +588,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ if (url.host_piece() == chrome::kChromeUINaClHost)
+ return &NewWebUI<NaClUI>;
+ #endif
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUITabModalConfirmDialogHost)
+ return &NewWebUI<ConstrainedWebDialogUI>;
+ #endif
+@@ -641,12 +641,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ return &NewWebUI<CastUI>;
+ }
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUISandboxHost) {
+ return &NewWebUI<SandboxInternalsUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIDiscardsHost)
+ return &NewWebUI<DiscardsUI>;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
new file mode 100644
index 000000000000..85e92283de93
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.cc.orig 2019-04-08 08:18:11 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.cc
+@@ -31,7 +31,7 @@ void AppearanceHandler::RegisterMessages() {
+ "useDefaultTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme,
+ base::Unretained(this)));
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ web_ui()->RegisterMessageCallback(
+ "useSystemTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme,
+@@ -59,7 +59,7 @@ void AppearanceHandler::HandleUseDefaultTheme(const ba
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
+ if (profile_->IsSupervised())
+ NOTREACHED();
diff --git a/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
new file mode 100644
index 000000000000..47488eb445ea
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.h.orig 2019-04-08 08:18:11 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.h
+@@ -36,7 +36,7 @@ class AppearanceHandler : public SettingsPageUIHandler
+ // Changes the UI theme of the browser to the default theme.
+ void HandleUseDefaultTheme(const base::ListValue* args);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Changes the UI theme of the browser to the system (GTK+) theme.
+ void HandleUseSystemTheme(const base::ListValue* args);
+ #endif
diff --git a/devel/electron5/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc
new file mode 100644
index 000000000000..a96fbe239384
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_ui_webui_settings_md__settings__localized__strings__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc
+@@ -513,7 +513,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
+ {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
+ {"themes", IDS_SETTINGS_THEMES},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
+ {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
+ {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
+@@ -531,7 +531,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"openWallpaperApp", IDS_SETTINGS_OPEN_WALLPAPER_APP},
+ {"setWallpaper", IDS_SETTINGS_SET_WALLPAPER},
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron5/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc b/devel/electron5/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
new file mode 100644
index 000000000000..8f8fb7df6fcd
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc
+@@ -46,7 +46,7 @@ namespace {
+ #if defined(OS_MACOSX)
+ const int kDesiredSizes[] = {16, 32, 128, 256, 512};
+ const size_t kNumDesiredSizes = base::size(kDesiredSizes);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux supports icons of any size. FreeDesktop Icon Theme Specification states
+ // that "Minimally you should install a 48x48 icon in the hicolor theme."
+ const int kDesiredSizes[] = {16, 32, 48, 128, 256, 512};
diff --git a/devel/electron5/files/patch-chrome_common_BUILD.gn b/devel/electron5/files/patch-chrome_common_BUILD.gn
new file mode 100644
index 000000000000..b0d67eb1290b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_BUILD.gn
@@ -0,0 +1,13 @@
+--- chrome/common/BUILD.gn.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/BUILD.gn
+@@ -300,6 +300,10 @@ static_library("common") {
+ public_deps += [ "//ppapi/shared_impl" ]
+ }
+
++ if (is_bsd) {
++ sources -= [ "component_flash_hint_file_linux.cc" ]
++ }
++
+ if (enable_extensions) {
+ sources += [
+ "cast_messages.cc",
diff --git a/devel/electron5/files/patch-chrome_common_chrome__features.cc b/devel/electron5/files/patch-chrome_common_chrome__features.cc
new file mode 100644
index 000000000000..078ec2ae2765
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__features.cc
@@ -0,0 +1,36 @@
+--- chrome/common/chrome_features.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/chrome_features.cc
+@@ -82,13 +82,13 @@ const base::Feature kAutomaticTabDiscarding{"Automatic
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables the Restart background mode optimization. When all Chrome UI is
+ // closed and it goes in the background, allows to restart the browser to
+ // discard memory.
+ const base::Feature kBackgroundModeAllowRestart{
+ "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Enables or disables whether permission prompts are automatically blocked
+ // after the user has explicitly dismissed them too many times.
+@@ -131,7 +131,7 @@ const base::Feature kThirdPartyModulesBlocking{
+ "ThirdPartyModulesBlocking", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Enables the dual certificate verification trial feature.
+ // https://crbug.com/649026
+ const base::Feature kCertDualVerificationTrialFeature{
+@@ -195,7 +195,7 @@ const base::Feature kUsageTimeLimitPolicy{"UsageTimeLi
+ const base::Feature kDesktopPWAWindowing {
+ "DesktopPWAWindowing",
+ #if defined(OS_CHROMEOS) || defined(OS_WIN) || defined(OS_LINUX) || \
+- defined(OS_MACOSX)
++ defined(OS_MACOSX) || defined(OS_BSD)
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+ base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/devel/electron5/files/patch-chrome_common_chrome__features.h b/devel/electron5/files/patch-chrome_common_chrome__features.h
new file mode 100644
index 000000000000..46ace3e44432
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__features.h
@@ -0,0 +1,24 @@
+--- chrome/common/chrome_features.h.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/chrome_features.h
+@@ -61,10 +61,10 @@ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kAutomaticTabDiscarding;
+ #endif // defined(OS_WIN) || defined(OS_MACOSX)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBackgroundModeAllowRestart;
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBlockPromptsIfDismissedOften;
+@@ -81,7 +81,7 @@ extern const base::Feature kBrowserHangFixesExperiment
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBundledConnectionHelpFeature;
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kCertDualVerificationTrialFeature;
+ #endif
diff --git a/devel/electron5/files/patch-chrome_common_chrome__paths.cc b/devel/electron5/files/patch-chrome_common_chrome__paths.cc
new file mode 100644
index 000000000000..e8c8b55bbe3f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__paths.cc
@@ -0,0 +1,114 @@
+--- chrome/common/chrome_paths.cc.orig 2019-04-08 08:18:11 UTC
++++ chrome/common/chrome_paths.cc
+@@ -52,21 +52,21 @@ const base::FilePath::CharType kPepperFlashSystemBaseD
+ FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer");
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The path to the external extension <id>.json files.
+ // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
+ const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
+ #if defined(GOOGLE_CHROME_BUILD)
+ FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
+ #else
+- FILE_PATH_LITERAL("/usr/share/chromium/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/chromium/extensions");
+ #endif // defined(GOOGLE_CHROME_BUILD)
+
+ // The path to the hint file that tells the pepper plugin loader
+ // where it can find the latest component updated flash.
+ const base::FilePath::CharType kComponentUpdatedFlashHint[] =
+ FILE_PATH_LITERAL("latest-component-updated-flash");
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ const base::FilePath::CharType kChromeOSComponentFlash[] = FILE_PATH_LITERAL(
+@@ -197,7 +197,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ break;
+ case chrome::DIR_DEFAULT_DOWNLOADS_SAFE:
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (!GetUserDownloadsDirectorySafe(&cur))
+ return false;
+ break;
+@@ -459,10 +459,12 @@ bool PathProvider(int key, base::FilePath* result) {
+ if (!base::PathExists(cur)) // We don't want to create this
+ return false;
+ break;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
++#if defined(OS_POSIX) && !defined(OS_MACOSX)
+ case chrome::DIR_POLICY_FILES: {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/opt/chrome/policies"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL("/usr/local/etc/chrome/policies"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/chromium/policies"));
+ #endif
+@@ -470,7 +472,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ #endif
+ #if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
+- defined(OS_MACOSX)
++ defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_USER_EXTERNAL_EXTENSIONS: {
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+ return false;
+@@ -478,7 +480,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ }
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
+ break;
+@@ -513,7 +515,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ #endif
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_NATIVE_MESSAGING:
+ #if defined(OS_MACOSX)
+ #if defined(GOOGLE_CHROME_BUILD)
+@@ -527,6 +529,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/opt/chrome/native-messaging-hosts"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/native-messaging-hosts"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/chromium/native-messaging-hosts"));
+@@ -539,7 +544,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ cur = cur.Append(FILE_PATH_LITERAL("NativeMessagingHosts"));
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if !defined(OS_ANDROID)
+ case chrome::DIR_GLOBAL_GCM_STORE:
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+@@ -547,7 +552,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ cur = cur.Append(kGCMStoreDirname);
+ break;
+ #endif // !defined(OS_ANDROID)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::FILE_COMPONENT_FLASH_HINT:
+ if (!base::PathService::Get(
+ chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &cur)) {
+@@ -555,7 +560,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ cur = cur.Append(kComponentUpdatedFlashHint);
+ break;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ case chrome::FILE_CHROME_OS_COMPONENT_FLASH:
+ cur = base::FilePath(kChromeOSComponentFlash);
diff --git a/devel/electron5/files/patch-chrome_common_chrome__paths.h b/devel/electron5/files/patch-chrome_common_chrome__paths.h
new file mode 100644
index 000000000000..a5fb20ab3d0a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__paths.h
@@ -0,0 +1,42 @@
+--- chrome/common/chrome_paths.h.orig 2019-04-08 08:18:11 UTC
++++ chrome/common/chrome_paths.h
+@@ -51,7 +51,7 @@ enum {
+ // to set policies for chrome. This directory
+ // contains subdirectories.
+ #endif
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
++#if defined(OS_CHROMEOS) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD)) || \
+ defined(OS_MACOSX)
+ DIR_USER_EXTERNAL_EXTENSIONS, // Directory for per-user external extensions
+ // on Chrome Mac and Chromium Linux.
+@@ -60,7 +60,7 @@ enum {
+ // create it.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_STANDALONE_EXTERNAL_EXTENSIONS, // Directory for 'per-extension'
+ // definition manifest files that
+ // describe extensions which are to be
+@@ -107,7 +107,7 @@ enum {
+ DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, // Directory where sanitized
+ // supervised user whitelists are
+ // installed.
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_MACOSX)
+ DIR_NATIVE_MESSAGING, // System directory where native messaging host
+ // manifest files are stored.
+ DIR_USER_NATIVE_MESSAGING, // Directory with Native Messaging Hosts
+@@ -122,10 +122,10 @@ enum {
+ DIR_GEN_TEST_DATA, // Directory where generated test data resides.
+ DIR_TEST_DATA, // Directory where unit test data resides.
+ DIR_TEST_TOOLS, // Directory where unit test tools reside.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ FILE_COMPONENT_FLASH_HINT, // A file in a known location that points to
+ // the component updated flash plugin.
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ FILE_CHROME_OS_COMPONENT_FLASH, // The location of component updated Flash on
+ // Chrome OS.
diff --git a/devel/electron5/files/patch-chrome_common_chrome__paths__internal.h b/devel/electron5/files/patch-chrome_common_chrome__paths__internal.h
new file mode 100644
index 000000000000..821109ea8b17
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__paths__internal.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_paths_internal.h.orig 2019-04-08 08:18:11 UTC
++++ chrome/common/chrome_paths_internal.h
+@@ -45,7 +45,7 @@ void GetUserCacheDirectory(const base::FilePath& profi
+ // Get the path to the user's documents directory.
+ bool GetUserDocumentsDirectory(base::FilePath* result);
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Gets the path to a safe default download directory for a user.
+ bool GetUserDownloadsDirectorySafe(base::FilePath* result);
+ #endif
diff --git a/devel/electron5/files/patch-chrome_common_chrome__switches.cc b/devel/electron5/files/patch-chrome_common_chrome__switches.cc
new file mode 100644
index 000000000000..74ed11ead8cf
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__switches.cc
@@ -0,0 +1,17 @@
+--- chrome/common/chrome_switches.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/chrome_switches.cc
+@@ -914,12 +914,12 @@ const char kAllowNaClFileHandleAPI[] = "allow-n
+ const char kAllowNaClSocketAPI[] = "allow-nacl-socket-api";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kDisableInputImeAPI[] = "disable-input-ime-api";
+ const char kEnableInputImeAPI[] = "enable-input-ime-api";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const char kEnableNewAppMenuIcon[] = "enable-new-app-menu-icon";
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_common_chrome__switches.h b/devel/electron5/files/patch-chrome_common_chrome__switches.h
new file mode 100644
index 000000000000..e78e9aab497a
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_chrome__switches.h
@@ -0,0 +1,17 @@
+--- chrome/common/chrome_switches.h.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/chrome_switches.h
+@@ -282,12 +282,12 @@ extern const char kAllowNaClFileHandleAPI[];
+ extern const char kAllowNaClSocketAPI[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kDisableInputImeAPI[];
+ extern const char kEnableInputImeAPI[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const char kEnableNewAppMenuIcon[];
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_common_extensions_api_api__sources.gni b/devel/electron5/files/patch-chrome_common_extensions_api_api__sources.gni
new file mode 100644
index 000000000000..c68ca7474cba
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_extensions_api_api__sources.gni
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/api/api_sources.gni.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/extensions/api/api_sources.gni
+@@ -109,7 +109,7 @@ if (is_chromeos) {
+ "wallpaper.json",
+ "wallpaper_private.json",
+ ]
+-} else if (is_linux || is_win) {
++} else if (is_linux || is_bsd || is_win) {
+ schema_sources_ += [ "input_ime.json" ]
+ }
+
diff --git a/devel/electron5/files/patch-chrome_common_extensions_command.cc b/devel/electron5/files/patch-chrome_common_extensions_command.cc
new file mode 100644
index 000000000000..32602e7e3bc8
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_extensions_command.cc
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/command.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/extensions/command.cc
+@@ -309,7 +309,7 @@ std::string Command::CommandPlatform() {
+ return values::kKeybindingPlatformMac;
+ #elif defined(OS_CHROMEOS)
+ return values::kKeybindingPlatformChromeOs;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return values::kKeybindingPlatformLinux;
+ #else
+ return "";
diff --git a/devel/electron5/files/patch-chrome_common_features.gni b/devel/electron5/files/patch-chrome_common_features.gni
new file mode 100644
index 000000000000..16adb25dd456
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_features.gni
@@ -0,0 +1,14 @@
+--- chrome/common/features.gni.orig 2019-04-08 08:18:13 UTC
++++ chrome/common/features.gni
+@@ -41,9 +41,9 @@ declare_args() {
+ (is_desktop_linux && use_dbus) || is_chromeos
+
+ enable_one_click_signin =
+- is_win || is_mac || (is_linux && !is_chromeos && !is_chromecast)
++ is_win || is_mac || is_bsd || (is_linux && !is_chromeos && !is_chromecast)
+
+- enable_service_discovery = (enable_mdns && !is_android && !is_ios) || is_mac
++ enable_service_discovery = (enable_mdns && !is_android && !is_ios) || is_mac || is_bsd
+
+ # Enables use of the session service, which is enabled by default.
+ # Android stores them separately on the Java side.
diff --git a/devel/electron5/files/patch-chrome_common_pref__names.cc b/devel/electron5/files/patch-chrome_common_pref__names.cc
new file mode 100644
index 000000000000..b01aad523d68
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_pref__names.cc
@@ -0,0 +1,29 @@
+--- chrome/common/pref_names.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/pref_names.cc
+@@ -946,7 +946,7 @@ const char kForceYouTubeRestrict[] = "settings.force_y
+ // only using an account that belongs to one of the domains from this pref.
+ const char kAllowedDomainsForApps[] = "settings.allowed_domains_for_apps";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Linux specific preference on whether we should match the system theme.
+ const char kUsesSystemTheme[] = "extensions.theme.use_system";
+ #endif
+@@ -1038,7 +1038,7 @@ const char kShowUpdatePromotionInfoBar[] =
+ "browser.show_update_promotion_info_bar";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Boolean that is false if we should show window manager decorations. If
+ // true, we draw a custom chrome frame (thicker title bar and blue border).
+ const char kUseCustomChromeFrame[] = "browser.custom_chrome_frame";
+@@ -1419,7 +1419,7 @@ const char kDownloadDefaultDirectory[] = "download.def
+ // upgrade a unsafe location to a safe location.
+ const char kDownloadDirUpgraded[] = "download.directory_upgrade";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const char kOpenPdfDownloadInSystemReader[] =
+ "download.open_pdf_in_system_reader";
+ #endif
diff --git a/devel/electron5/files/patch-chrome_common_pref__names.h b/devel/electron5/files/patch-chrome_common_pref__names.h
new file mode 100644
index 000000000000..50b86128a154
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_pref__names.h
@@ -0,0 +1,29 @@
+--- chrome/common/pref_names.h.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/pref_names.h
+@@ -300,7 +300,7 @@ extern const char kMdHistoryMenuPromoShown[];
+ extern const char kForceGoogleSafeSearch[];
+ extern const char kForceYouTubeRestrict[];
+ extern const char kAllowedDomainsForApps[];
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUsesSystemTheme[];
+ #endif
+ extern const char kCurrentThemePackFilename[];
+@@ -333,7 +333,7 @@ extern const char kDefaultBrowserSettingEnabled[];
+ #if defined(OS_MACOSX)
+ extern const char kShowUpdatePromotionInfoBar[];
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUseCustomChromeFrame[];
+ #endif
+ #if BUILDFLAG(ENABLE_PLUGINS)
+@@ -487,7 +487,7 @@ extern const char kAppWindowPlacement[];
+ extern const char kDownloadDefaultDirectory[];
+ extern const char kDownloadExtensionsToOpen[];
+ extern const char kDownloadDirUpgraded[];
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const char kOpenPdfDownloadInSystemReader[];
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron5/files/patch-chrome_common_webui__url__constants.cc b/devel/electron5/files/patch-chrome_common_webui__url__constants.cc
new file mode 100644
index 000000000000..ccf581cf7c6d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_webui__url__constants.cc
@@ -0,0 +1,41 @@
+--- chrome/common/webui_url_constants.cc.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/webui_url_constants.cc
+@@ -246,7 +246,7 @@ const char kChromeUIMetroFlowURL[] = "chrome://make-me
+ const char kChromeUICastHost[] = "cast";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kChromeUIDiscardsHost[] = "discards";
+ const char kChromeUIDiscardsURL[] = "chrome://discards/";
+ const char kChromeUIHatsHost[] = "hats";
+@@ -257,11 +257,11 @@ const char kChromeUIHatsURL[] = "chrome://hats/";
+ const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const char kChromeUISandboxHost[] = "sandbox";
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+ #endif
+
+@@ -415,13 +415,13 @@ const char* const kChromeHostURLs[] = {
+ kChromeUIInternetDetailDialogHost,
+ kChromeUIAssistantOptInHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ kChromeUIDiscardsHost,
+ #endif
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ kChromeUILinuxProxyConfigHost,
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ kChromeUISandboxHost,
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron5/files/patch-chrome_common_webui__url__constants.h b/devel/electron5/files/patch-chrome_common_webui__url__constants.h
new file mode 100644
index 000000000000..36026e303feb
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_common_webui__url__constants.h
@@ -0,0 +1,25 @@
+--- chrome/common/webui_url_constants.h.orig 2019-04-08 08:32:47 UTC
++++ chrome/common/webui_url_constants.h
+@@ -241,7 +241,7 @@ extern const char kChromeUIMetroFlowURL[];
+ extern const char kChromeUICastHost[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kChromeUIDiscardsHost[];
+ extern const char kChromeUIDiscardsURL[];
+ extern const char kChromeUIHatsHost[];
+@@ -253,11 +253,11 @@ extern const char kChromeUIHatsURL[];
+ extern const char kChromeUILinuxProxyConfigHost[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ extern const char kChromeUISandboxHost[];
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ extern const char kChromeUITabModalConfirmDialogHost[];
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_renderer_chrome__content__renderer__client.cc b/devel/electron5/files/patch-chrome_renderer_chrome__content__renderer__client.cc
new file mode 100644
index 000000000000..c8493486f192
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_renderer_chrome__content__renderer__client.cc
@@ -0,0 +1,11 @@
+--- chrome/renderer/chrome_content_renderer_client.cc.orig 2019-04-08 08:32:48 UTC
++++ chrome/renderer/chrome_content_renderer_client.cc
+@@ -1012,7 +1012,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
+ }
+
+ case chrome::mojom::PluginStatus::kRestartRequired: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ placeholder = create_blocked_plugin(
+ IDR_BLOCKED_PLUGIN_HTML,
+ l10n_util::GetStringFUTF16(IDS_PLUGIN_RESTART_REQUIRED,
diff --git a/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc b/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
new file mode 100644
index 000000000000..c47e0fc0b89d
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
@@ -0,0 +1,29 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.cc.orig 2019-04-08 08:18:13 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.cc
+@@ -15,7 +15,7 @@
+ #include "ppapi/proxy/ppapi_messages.h"
+ #include "ppapi/proxy/serialized_structs.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "content/public/common/common_sandbox_support_linux.h"
+ #elif defined(OS_WIN)
+@@ -29,7 +29,7 @@ PepperFlashFontFileHost::PepperFlashFontFileHost(
+ const ppapi::proxy::SerializedFontDescription& description,
+ PP_PrivateFontCharset charset)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The global SkFontConfigInterface is configured and initialized with a
+ // SkFontconfigInterface compatible font_service::FontLoader in
+ // RendererBlinkPlatformImpl (called from RenderThreadImpl::Init) at startup
+@@ -74,7 +74,7 @@ bool PepperFlashFontFileHost::GetFontData(uint32_t tab
+ void* buffer,
+ size_t* length) {
+ bool result = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (font_file_.IsValid()) {
+ result = content::GetFontTable(font_file_.GetPlatformFile(), table,
+ 0 /* offset */,
diff --git a/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h b/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
new file mode 100644
index 000000000000..0328e2daacf2
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
@@ -0,0 +1,20 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.h.orig 2019-04-08 08:18:13 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.h
+@@ -14,7 +14,7 @@
+ #include "ppapi/c/private/pp_private_font_charset.h"
+ #include "ppapi/host/resource_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file.h"
+ #elif defined(OS_WIN)
+ #include "third_party/skia/include/core/SkRefCnt.h"
+@@ -50,7 +50,7 @@ class PepperFlashFontFileHost : public ppapi::host::Re
+ uint32_t table);
+ bool GetFontData(uint32_t table, void* buffer, size_t* length);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::File font_file_;
+ #elif defined(OS_WIN)
+ sk_sp<SkTypeface> typeface_;
diff --git a/devel/electron5/files/patch-chrome_service_cloud__print_print__system.cc b/devel/electron5/files/patch-chrome_service_cloud__print_print__system.cc
new file mode 100644
index 000000000000..8a093d2a3e9f
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_service_cloud__print_print__system.cc
@@ -0,0 +1,11 @@
+--- chrome/service/cloud_print/print_system.cc.orig 2019-04-08 08:18:13 UTC
++++ chrome/service/cloud_print/print_system.cc
+@@ -36,7 +36,7 @@ std::string PrintSystem::GenerateProxyId() {
+ return base::GenerateGUID();
+ }
+
+-#if defined(OS_LINUX) && !defined(USE_CUPS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(USE_CUPS)
+ scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
+ const base::DictionaryValue*) {
+ return nullptr;
diff --git a/devel/electron5/files/patch-chrome_test_BUILD.gn b/devel/electron5/files/patch-chrome_test_BUILD.gn
new file mode 100644
index 000000000000..e274c4991e92
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_test_BUILD.gn
@@ -0,0 +1,11 @@
+--- chrome/test/BUILD.gn.orig 2019-04-08 08:32:48 UTC
++++ chrome/test/BUILD.gn
+@@ -5232,7 +5232,7 @@ test("chrome_app_unittests") {
+ "//components/crash/core/common",
+ "//components/flags_ui:switches",
+ ]
+- if (!is_fuchsia) {
++ if (!is_fuchsia && !is_bsd) {
+ # TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
+ deps += [ "//third_party/breakpad:client" ]
+ }
diff --git a/devel/electron5/files/patch-chrome_test_base_in__process__browser__test.cc b/devel/electron5/files/patch-chrome_test_base_in__process__browser__test.cc
new file mode 100644
index 000000000000..1da982350dce
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_test_base_in__process__browser__test.cc
@@ -0,0 +1,22 @@
+--- chrome/test/base/in_process_browser_test.cc.orig 2019-04-08 08:32:48 UTC
++++ chrome/test/base/in_process_browser_test.cc
+@@ -74,6 +74,10 @@
+ #include "chrome/test/base/scoped_bundle_swizzler_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <signal.h>
++#endif
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -102,7 +106,7 @@
+ #include "ui/events/test/event_generator.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/test/test_desktop_screen_x11.h"
+ #endif
+
diff --git a/devel/electron5/files/patch-chrome_test_base_testing__browser__process.h b/devel/electron5/files/patch-chrome_test_base_testing__browser__process.h
new file mode 100644
index 000000000000..cf26fd2d13d0
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_test_base_testing__browser__process.h
@@ -0,0 +1,13 @@
+--- chrome/test/base/testing_browser_process.h.orig 2019-04-08 08:18:13 UTC
++++ chrome/test/base/testing_browser_process.h
+@@ -119,8 +119,8 @@ class TestingBrowserProcess : public BrowserProcess {
+ DownloadStatusUpdater* download_status_updater() override;
+ DownloadRequestLimiter* download_request_limiter() override;
+
+-#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+- void StartAutoupdateTimer() override {}
++#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
++ void StartAutoupdateTimer() /*override*/ {}
+ #endif
+
+ net_log::ChromeNetLog* net_log() override;
diff --git a/devel/electron5/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc b/devel/electron5/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
new file mode 100644
index 000000000000..4a98c9aca81b
--- /dev/null
+++ b/devel/electron5/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
@@ -0,0 +1,20 @@
+--- chrome/test/chromedriver/chrome/chrome_finder.cc.orig 2019-04-08 08:18:13 UTC
++++ chrome/test/chromedriver/chrome/chrome_finder.cc
+@@ -48,7 +48,7 @@ void GetApplicationDirs(std::vector<base::FilePath>* l
+ installation_locations[i].Append(L"Chromium\\Application"));
+ }
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ void GetApplicationDirs(std::vector<base::FilePath>* locations) {
+ // TODO: Respect users' PATH variables.
+ // Until then, we use an approximation of the most common defaults.
+@@ -135,7 +135,7 @@ bool FindChrome(base::FilePath* browser_exe) {
+ #elif defined(OS_MACOSX)
+ base::FilePath("Google Chrome.app/Contents/MacOS/Google Chrome"),
+ base::FilePath("Chromium.app/Contents/MacOS/Chromium")
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath("google-chrome"),
+ base::FilePath("chrome"),
+ base::FilePath("chromium"),
diff --git a/devel/electron5/files/patch-chromecast_browser_cast__browser__main__parts.cc b/devel/electron5/files/patch-chromecast_browser_cast__browser__main__parts.cc
new file mode 100644
index 000000000000..bcc1898f31c9
--- /dev/null
+++ b/devel/electron5/files/patch-chromecast_browser_cast__browser__main__parts.cc
@@ -0,0 +1,29 @@
+--- chromecast/browser/cast_browser_main_parts.cc.orig 2019-04-08 08:32:48 UTC
++++ chromecast/browser/cast_browser_main_parts.cc
+@@ -66,7 +66,7 @@
+ #include "ui/compositor/compositor_switches.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include <signal.h>
+ #include <sys/prctl.h>
+@@ -244,7 +244,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {cc::switches::kDisableThreadedAnimation, ""},
+ #endif // defined(OS_ANDROID)
+ #endif // BUILDFLAG(IS_CAST_AUDIO_ONLY)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(ARCH_CPU_X86_FAMILY)
+ // This is needed for now to enable the x11 Ozone platform to work with
+ // current Linux/NVidia OpenGL drivers.
+@@ -393,7 +393,7 @@ void CastBrowserMainParts::PostMainMessageLoopStart()
+ }
+
+ void CastBrowserMainParts::ToolkitInitialized() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Without this call, the FontConfig library gets implicitly initialized
+ // on the first call to FontConfig. Since it's not safe to initialize it
+ // concurrently from multiple threads, we explicitly initialize it here
diff --git a/devel/electron5/files/patch-chromecast_browser_cast__content__browser__client.cc b/devel/electron5/files/patch-chromecast_browser_cast__content__browser__client.cc
new file mode 100644
index 000000000000..c2463460ce64
--- /dev/null
+++ b/devel/electron5/files/patch-chromecast_browser_cast__content__browser__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/browser/cast_content_browser_client.cc.orig 2019-04-08 08:32:48 UTC
++++ chromecast/browser/cast_content_browser_client.cc
+@@ -524,7 +524,7 @@ void CastContentBrowserClient::AppendExtraCommandLineS
+ switches::kAudioOutputChannels));
+ }
+ } else if (process_type == switches::kGpuProcess) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Necessary for accelerated 2d canvas. By default on Linux, Chromium assumes
+ // GLES2 contexts can be lost to a power-save mode, which breaks GPU canvas
+ // apps.
diff --git a/devel/electron5/files/patch-chromecast_browser_tts_tts__controller__impl.cc b/devel/electron5/files/patch-chromecast_browser_tts_tts__controller__impl.cc
new file mode 100644
index 000000000000..2577edc60b08
--- /dev/null
+++ b/devel/electron5/files/patch-chromecast_browser_tts_tts__controller__impl.cc
@@ -0,0 +1,14 @@
+--- chromecast/browser/tts/tts_controller_impl.cc.orig 2019-04-08 08:18:16 UTC
++++ chromecast/browser/tts/tts_controller_impl.cc
+@@ -390,7 +390,11 @@ int TtsControllerImpl::QueueSize() {
+ }
+
+ TtsPlatformImpl* TtsControllerImpl::GetPlatformImpl() {
++#if defined(OS_BSD)
++ return NULL;
++#else
+ return platform_impl_.get();
++#endif // defined(OS_BSD)
+ }
+
+ std::string TtsControllerImpl::GetApplicationLocale() const {
diff --git a/devel/electron5/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc b/devel/electron5/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc
new file mode 100644
index 000000000000..523c884e0063
--- /dev/null
+++ b/devel/electron5/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc
@@ -0,0 +1,23 @@
+--- chromecast/media/cma/backend/media_pipeline_backend_for_mixer.cc.orig 2019-04-08 08:32:48 UTC
++++ chromecast/media/cma/backend/media_pipeline_backend_for_mixer.cc
+@@ -14,9 +14,9 @@
+ #include "chromecast/media/cma/backend/av_sync.h"
+ #include "chromecast/media/cma/backend/video_decoder_for_mixer.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chromecast/media/cma/backend/audio_buildflags.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #include <zircon/syscalls.h>
+@@ -226,7 +226,7 @@ MediaPipelineBackendForMixer::GetTaskRunner() const {
+ return static_cast<TaskRunnerImpl*>(params_.task_runner)->runner();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int64_t MediaPipelineBackendForMixer::MonotonicClockNow() const {
+ timespec now = {0, 0};
+ #if BUILDFLAG(MEDIA_CLOCK_MONOTONIC_RAW)
diff --git a/devel/electron5/files/patch-components_autofill__strings.grdp b/devel/electron5/files/patch-components_autofill__strings.grdp
new file mode 100644
index 000000000000..36a088d484e5
--- /dev/null
+++ b/devel/electron5/files/patch-components_autofill__strings.grdp
@@ -0,0 +1,11 @@
+--- components/autofill_strings.grdp.orig 2019-04-08 08:32:49 UTC
++++ components/autofill_strings.grdp
+@@ -217,7 +217,7 @@
+ <message name="IDS_AUTOFILL_NAME_FIX_FLOW_PROMPT_SAVE_CARD" desc="Text to show for the Autofill save credit card prompt card holder name fix flow button." formatter_data="android_java">
+ Save card
+ </message>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <then>
+ <message name="IDS_AUTOFILL_SAVE_CARD_PROMPT_TITLE_TO_CLOUD" desc="Title text for the Autofill save card prompt when the card is to be saved by uploading it to Google Payments and also saved locally. The prompt can be either a bubble or an infobar.">
+ Do you want to save this card to your Google Account?
diff --git a/devel/electron5/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc b/devel/electron5/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
new file mode 100644
index 000000000000..e0c8c931fee6
--- /dev/null
+++ b/devel/electron5/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
@@ -0,0 +1,14 @@
+--- components/autofill/content/renderer/password_form_conversion_utils.cc.orig 2019-04-08 08:32:49 UTC
++++ components/autofill/content/renderer/password_form_conversion_utils.cc
+@@ -37,7 +37,11 @@
+ #include "third_party/blink/public/web/web_form_control_element.h"
+ #include "third_party/blink/public/web/web_input_element.h"
+ #include "third_party/blink/public/web/web_local_frame.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using blink::WebFormControlElement;
diff --git a/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.cc b/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.cc
new file mode 100644
index 000000000000..10af17286e6b
--- /dev/null
+++ b/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.cc
@@ -0,0 +1,46 @@
+--- components/autofill/core/browser/autofill_experiments.cc.orig 2019-04-08 08:32:49 UTC
++++ components/autofill/core/browser/autofill_experiments.cc
+@@ -28,7 +28,7 @@
+
+ namespace autofill {
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const base::Feature kAutofillDropdownLayoutExperiment{
+ "AutofillDropdownLayout", base::FEATURE_DISABLED_BY_DEFAULT};
+ const char kAutofillDropdownLayoutParameterName[] = "variant";
+@@ -36,7 +36,7 @@ const char kAutofillDropdownLayoutParameterLeadingIcon
+ const char kAutofillDropdownLayoutParameterTrailingIcon[] = "trailing-icon";
+ const char kAutofillDropdownLayoutParameterTwoLinesLeadingIcon[] =
+ "two-lines-leading-icon";
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ bool IsCreditCardUploadEnabled(const PrefService* pref_service,
+ const syncer::SyncService* sync_service,
+@@ -143,7 +143,7 @@ bool IsAutofillNoLocalSaveOnUploadSuccessExperimentEna
+ }
+
+ bool OfferStoreUnmaskedCards(bool is_off_the_record) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The checkbox can be forced on with a flag, but by default we don't store
+ // on Linux due to lack of system keychain integration. See crbug.com/162735
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
+@@ -181,7 +181,7 @@ bool ShouldUseActiveSignedInAccount() {
+ features::kAutofillGetPaymentsIdentityFromSync);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ ForcedPopupLayoutState GetForcedPopupLayoutState() {
+ if (!base::FeatureList::IsEnabled(
+ autofill::kAutofillDropdownLayoutExperiment))
+@@ -205,6 +205,6 @@ ForcedPopupLayoutState GetForcedPopupLayoutState() {
+ NOTREACHED();
+ return ForcedPopupLayoutState::kDefault;
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ } // namespace autofill
diff --git a/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.h b/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.h
new file mode 100644
index 000000000000..ca1fe8f433cc
--- /dev/null
+++ b/devel/electron5/files/patch-components_autofill_core_browser_autofill__experiments.h
@@ -0,0 +1,36 @@
+--- components/autofill/core/browser/autofill_experiments.h.orig 2019-04-08 08:32:49 UTC
++++ components/autofill/core/browser/autofill_experiments.h
+@@ -23,13 +23,13 @@ class SyncService;
+ namespace autofill {
+
+ // Parameterized Features (grouped with parameter name and options)
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const base::Feature kAutofillDropdownLayoutExperiment;
+ extern const char kAutofillDropdownLayoutParameterName[];
+ extern const char kAutofillDropdownLayoutParameterLeadingIcon[];
+ extern const char kAutofillDropdownLayoutParameterTrailingIcon[];
+ extern const char kAutofillDropdownLayoutParameterTwoLinesLeadingIcon[];
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // Returns true if uploading credit cards to Wallet servers is enabled. This
+ // requires the appropriate flags and user settings to be true and the user to
+@@ -59,7 +59,7 @@ bool OfferStoreUnmaskedCards(bool is_off_the_record);
+ // Returns whether the account of the active signed-in user should be used.
+ bool ShouldUseActiveSignedInAccount();
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ enum class ForcedPopupLayoutState {
+ kDefault, // No popup layout forced by experiment.
+ kLeadingIcon, // Experiment forces leading (left in LTR) icon layout.
+@@ -73,7 +73,7 @@ enum class ForcedPopupLayoutState {
+ // if the experiment param matches kAutofillDropdownLayoutParameterLeadingIcon
+ // or kAutofillDropdownLayoutParameterTrailingIcon, respectively.
+ ForcedPopupLayoutState GetForcedPopupLayoutState();
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ } // namespace autofill
+
diff --git a/devel/electron5/files/patch-components_autofill_core_common_autofill__util.cc b/devel/electron5/files/patch-components_autofill_core_common_autofill__util.cc
new file mode 100644
index 000000000000..3b152c50b763
--- /dev/null
+++ b/devel/electron5/files/patch-components_autofill_core_common_autofill__util.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_util.cc.orig 2019-04-08 08:32:49 UTC
++++ components/autofill/core/common/autofill_util.cc
+@@ -203,7 +203,7 @@ bool SanitizedFieldIsEmpty(const base::string16& value
+ }
+
+ bool ShouldAutoselectFirstSuggestionOnArrowDown() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron5/files/patch-components_content__settings_core_browser_website__settings__registry.cc b/devel/electron5/files/patch-components_content__settings_core_browser_website__settings__registry.cc
new file mode 100644
index 000000000000..5d3b51f38b4f
--- /dev/null
+++ b/devel/electron5/files/patch-components_content__settings_core_browser_website__settings__registry.cc
@@ -0,0 +1,11 @@
+--- components/content_settings/core/browser/website_settings_registry.cc.orig 2019-04-08 08:32:49 UTC
++++ components/content_settings/core/browser/website_settings_registry.cc
+@@ -66,7 +66,7 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Re
+ #if defined(OS_WIN)
+ if (!(platform & PLATFORM_WINDOWS))
+ return nullptr;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!(platform & PLATFORM_LINUX))
+ return nullptr;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron5/files/patch-components_cookie__config_cookie__store__util.cc b/devel/electron5/files/patch-components_cookie__config_cookie__store__util.cc
new file mode 100644
index 000000000000..26459aa2acfb
--- /dev/null
+++ b/devel/electron5/files/patch-components_cookie__config_cookie__store__util.cc
@@ -0,0 +1,24 @@
+--- components/cookie_config/cookie_store_util.cc.orig 2019-04-08 08:18:17 UTC
++++ components/cookie_config/cookie_store_util.cc
+@@ -11,7 +11,7 @@
+
+ namespace cookie_config {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ namespace {
+
+ // Use the operating system's mechanisms to encrypt cookies before writing
+@@ -63,10 +63,10 @@ base::LazyInstance<CookieOSCryptoDelegate>::Destructor
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return g_cookie_crypto_delegate.Pointer();
+ }
+-#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return NULL;
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace cookie_config
diff --git a/devel/electron5/files/patch-components_crash_content_app_BUILD.gn b/devel/electron5/files/patch-components_crash_content_app_BUILD.gn
new file mode 100644
index 000000000000..be52fea0e98a
--- /dev/null
+++ b/devel/electron5/files/patch-components_crash_content_app_BUILD.gn
@@ -0,0 +1,29 @@
+--- components/crash/content/app/BUILD.gn.orig 2019-04-08 08:32:49 UTC
++++ components/crash/content/app/BUILD.gn
+@@ -36,12 +36,12 @@ static_library("app") {
+ sources += [ "crashpad.cc" ]
+ }
+
+- if (is_android || (is_linux && !is_chromeos)) {
++ if (is_android || (is_linux && !is_chromeos && !is_bsd)) {
+ set_sources_assignment_filter([])
+ sources += [ "crashpad_linux.cc" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "breakpad_linux.cc",
+ "breakpad_linux.h",
+@@ -79,7 +79,10 @@ static_library("app") {
+ "//third_party/crashpad/crashpad/snapshot",
+ ]
+
+- if (is_linux) {
++ if (is_bsd) {
++ deps -= [ "//third_party/crashpad/crashpad/snapshot" ]
++ }
++ if (is_linux && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+ }
diff --git a/devel/electron5/files/patch-components_crash_content_app_crashpad.cc b/devel/electron5/files/patch-components_crash_content_app_crashpad.cc
new file mode 100644
index 000000000000..fcbf710f39a5
--- /dev/null
+++ b/devel/electron5/files/patch-components_crash_content_app_crashpad.cc
@@ -0,0 +1,43 @@
+--- components/crash/content/app/crashpad.cc.orig 2019-04-08 08:32:49 UTC
++++ components/crash/content/app/crashpad.cc
+@@ -102,6 +102,12 @@ void InitializeCrashpadImpl(bool initial_client,
+ const base::FilePath& exe_path,
+ const std::vector<std::string>& initial_arguments,
+ bool embedded_handler) {
++
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return;
++#endif
++
+ static bool initialized = false;
+ DCHECK(!initialized);
+ initialized = true;
+@@ -122,7 +128,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ DCHECK(browser_process || process_type == "Chrome Installer" ||
+ process_type == "notification-helper" ||
+ process_type == "GCPW Installer" || process_type == "GCPW DLL");
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ DCHECK(browser_process);
+ #else
+ #error Port.
+@@ -187,7 +193,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // other "main, first process" to initialize things. There is no "relauncher"
+ // on Windows, so this is synonymous with initial_client.
+ const bool should_initialize_database_and_set_upload_policy = initial_client;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const bool should_initialize_database_and_set_upload_policy = browser_process;
+ #endif
+ if (should_initialize_database_and_set_upload_policy) {
+@@ -267,7 +273,9 @@ bool GetUploadsEnabled() {
+
+ #if !defined(OS_ANDROID)
+ void DumpWithoutCrashing() {
++#if !defined(OS_BSD)
+ CRASHPAD_SIMULATE_CRASH();
++#endif
+ }
+ #endif
+
diff --git a/devel/electron5/files/patch-components_crash_content_browser_BUILD.gn b/devel/electron5/files/patch-components_crash_content_browser_BUILD.gn
new file mode 100644
index 000000000000..81ac98290989
--- /dev/null
+++ b/devel/electron5/files/patch-components_crash_content_browser_BUILD.gn
@@ -0,0 +1,27 @@
+--- components/crash/content/browser/BUILD.gn.orig 2019-04-08 08:18:17 UTC
++++ components/crash/content/browser/BUILD.gn
+@@ -28,7 +28,7 @@ source_set("browser") {
+ "//content/public/common",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ set_sources_assignment_filter([])
+
+ # Want this file on both Linux and Android.
+@@ -42,13 +42,13 @@ source_set("browser") {
+ deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
+
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
+ # This is not in the GYP build but this target includes breakpad client
+ # headers, so add the dependency here.
+- if ((is_posix && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_ios && !is_bsd) || is_fuchsia) {
+ configs += [ "//third_party/breakpad:client_config" ]
+ public_configs = [ "//third_party/breakpad:client_config" ]
+ }
diff --git a/devel/electron5/files/patch-components_crash_core_common_BUILD.gn b/devel/electron5/files/patch-components_crash_core_common_BUILD.gn
new file mode 100644
index 000000000000..8c1dd6dfd748
--- /dev/null
+++ b/devel/electron5/files/patch-components_crash_core_common_BUILD.gn
@@ -0,0 +1,28 @@
+--- components/crash/core/common/BUILD.gn.orig 2019-04-08 08:32:49 UTC
++++ components/crash/core/common/BUILD.gn
+@@ -6,7 +6,7 @@ import("//build/buildflag_header.gni")
+
+ declare_args() {
+ # If set to true, this will stub out and disable the entire crash key system.
+- use_crash_key_stubs = is_fuchsia
++ use_crash_key_stubs = is_fuchsia || is_bsd
+ }
+
+ group("common") {
+@@ -89,7 +89,6 @@ target(crash_key_target_type, "crash_key") {
+ ]
+ }
+
+- deps += [ "//third_party/breakpad:client" ]
+ }
+ }
+
+@@ -144,7 +143,7 @@ source_set("unit_tests") {
+ sources += [ "objc_zombie_unittest.mm" ]
+ }
+
+- if (!is_mac && !is_win && !is_fuchsia && !is_android) {
++ if (!is_mac && !is_win && !is_fuchsia && !is_android && !is_bsd) {
+ include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
+ sources += [ "crash_key_breakpad_unittest.cc" ]
+ }
diff --git a/devel/electron5/files/patch-components_download_internal_common_base__file.cc b/devel/electron5/files/patch-components_download_internal_common_base__file.cc
new file mode 100644
index 000000000000..74d8f60684a4
--- /dev/null
+++ b/devel/electron5/files/patch-components_download_internal_common_base__file.cc
@@ -0,0 +1,11 @@
+--- components/download/internal/common/base_file.cc.orig 2019-04-08 08:32:49 UTC
++++ components/download/internal/common/base_file.cc
+@@ -446,7 +446,7 @@ DownloadInterruptReason BaseFile::LogInterruptReason(
+ return reason;
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+
diff --git a/devel/electron5/files/patch-components_download_quarantine_quarantine__linux.cc b/devel/electron5/files/patch-components_download_quarantine_quarantine__linux.cc
new file mode 100644
index 000000000000..f9acd2f5a69a
--- /dev/null
+++ b/devel/electron5/files/patch-components_download_quarantine_quarantine__linux.cc
@@ -0,0 +1,36 @@
+--- components/download/quarantine/quarantine_linux.cc.orig 2019-04-08 08:32:49 UTC
++++ components/download/quarantine/quarantine_linux.cc
+@@ -2,11 +2,15 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
++#include "build/build_config.h"
++
+ #include "components/download/quarantine/quarantine.h"
+
+ #include <stddef.h>
+ #include <sys/types.h>
++#if !defined(OS_BSD)
+ #include <sys/xattr.h>
++#endif
+
+ #include "base/files/file_path.h"
+ #include "base/logging.h"
+@@ -25,7 +29,7 @@ bool SetExtendedFileAttribute(const char* path,
+ int flags) {
+ // On Chrome OS, there is no component that can validate these extended
+ // attributes so there is no need to set them.
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK);
+ int result = setxattr(path, name, value, value_size, flags);
+ if (result) {
+@@ -33,7 +37,7 @@ bool SetExtendedFileAttribute(const char* path,
+ << path;
+ return false;
+ }
+-#endif // !defined(OS_CHROMEOS)
++#endif // !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ return true;
+ }
+
diff --git a/devel/electron5/files/patch-components_download_quarantine_test__support__linux.cc b/devel/electron5/files/patch-components_download_quarantine_test__support__linux.cc
new file mode 100644
index 000000000000..762ae5d740cf
--- /dev/null
+++ b/devel/electron5/files/patch-components_download_quarantine_test__support__linux.cc
@@ -0,0 +1,20 @@
+--- components/download/quarantine/test_support_linux.cc.orig 2019-04-08 08:32:49 UTC
++++ components/download/quarantine/test_support_linux.cc
+@@ -21,6 +21,7 @@ namespace download {
+ namespace {
+
+ std::string GetExtendedFileAttribute(const char* path, const char* name) {
++#if !defined(OS_BSD)
+ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK);
+ ssize_t len = getxattr(path, name, nullptr, 0);
+ if (len <= 0)
+@@ -31,6 +32,9 @@ std::string GetExtendedFileAttribute(const char* path,
+ if (len < static_cast<ssize_t>(buffer.size()))
+ return std::string();
+ return std::string(buffer.begin(), buffer.end());
++#else
++ return std::string();
++#endif // !defined(OS_BSD)
+ }
+
+ } // namespace
diff --git a/devel/electron5/files/patch-components_feature__engagement_public_event__constants.cc b/devel/electron5/files/patch-components_feature__engagement_public_event__constants.cc
new file mode 100644
index 000000000000..29bdef914db1
--- /dev/null
+++ b/devel/electron5/files/patch-components_feature__engagement_public_event__constants.cc
@@ -0,0 +1,14 @@
+--- components/feature_engagement/public/event_constants.cc.orig 2019-04-08 08:18:17 UTC
++++ components/feature_engagement/public/event_constants.cc
+@@ -26,9 +26,9 @@ const char kReopenTabConditionsMet[] = "reopen_tab_con
+ const char kTabReopened[] = "tab_reopened";
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ const char kNewTabOpened[] = "new_tab_opened";
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ const char kChromeOpened[] = "chrome_opened";
diff --git a/devel/electron5/files/patch-components_feature__engagement_public_event__constants.h b/devel/electron5/files/patch-components_feature__engagement_public_event__constants.h
new file mode 100644
index 000000000000..de0c6fd03309
--- /dev/null
+++ b/devel/electron5/files/patch-components_feature__engagement_public_event__constants.h
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/event_constants.h.orig 2019-04-08 08:18:17 UTC
++++ components/feature_engagement/public/event_constants.h
+@@ -49,7 +49,7 @@ extern const char kReopenTabConditionsMet[];
+ extern const char kTabReopened[];
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ // This event is included in the deferred onboarding events for the New Tab
+ // described above, but it is also used on iOS, so it must be compiled
+ // separately.
+@@ -57,7 +57,7 @@ extern const char kTabReopened[];
+ // The user has explicitly opened a new tab via an entry point from inside of
+ // Chrome.
+ extern const char kNewTabOpened[];
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ // The user has opened Chrome (cold start or from background).
diff --git a/devel/electron5/files/patch-components_feedback_anonymizer__tool.cc b/devel/electron5/files/patch-components_feedback_anonymizer__tool.cc
new file mode 100644
index 000000000000..f0b9a2ca259c
--- /dev/null
+++ b/devel/electron5/files/patch-components_feedback_anonymizer__tool.cc
@@ -0,0 +1,14 @@
+--- components/feedback/anonymizer_tool.cc.orig 2019-04-08 08:32:49 UTC
++++ components/feedback/anonymizer_tool.cc
+@@ -13,7 +13,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "content/public/browser/browser_thread.h"
+ #include "net/base/ip_address.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using re2::RE2;
+
diff --git a/devel/electron5/files/patch-components_flags__ui_flags__state.cc b/devel/electron5/files/patch-components_flags__ui_flags__state.cc
new file mode 100644
index 000000000000..2b8b92ba87ec
--- /dev/null
+++ b/devel/electron5/files/patch-components_flags__ui_flags__state.cc
@@ -0,0 +1,11 @@
+--- components/flags_ui/flags_state.cc.orig 2019-04-08 08:32:49 UTC
++++ components/flags_ui/flags_state.cc
+@@ -618,7 +618,7 @@ int FlagsState::GetCurrentPlatform() {
+ return kOsWin;
+ #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check.
+ return kOsCrOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_FREEBSD)
+ return kOsLinux;
+ #elif defined(OS_ANDROID)
+ return kOsAndroid;
diff --git a/devel/electron5/files/patch-components_gcm__driver_gcm__client.h b/devel/electron5/files/patch-components_gcm__driver_gcm__client.h
new file mode 100644
index 000000000000..136366e9880d
--- /dev/null
+++ b/devel/electron5/files/patch-components_gcm__driver_gcm__client.h
@@ -0,0 +1,10 @@
+--- components/gcm_driver/gcm_client.h.orig 2019-04-08 08:32:49 UTC
++++ components/gcm_driver/gcm_client.h
+@@ -85,6 +85,7 @@ class GCMClient {
+ PLATFORM_CROS,
+ PLATFORM_IOS,
+ PLATFORM_ANDROID,
++ PLATFORM_BSD,
+ PLATFORM_UNSPECIFIED
+ };
+
diff --git a/devel/electron5/files/patch-components_gcm__driver_gcm__client__impl.cc b/devel/electron5/files/patch-components_gcm__driver_gcm__client__impl.cc
new file mode 100644
index 000000000000..38e672ed5cb6
--- /dev/null
+++ b/devel/electron5/files/patch-components_gcm__driver_gcm__client__impl.cc
@@ -0,0 +1,12 @@
+--- components/gcm_driver/gcm_client_impl.cc.orig 2019-04-08 08:18:17 UTC
++++ components/gcm_driver/gcm_client_impl.cc
+@@ -150,6 +150,9 @@ void ToCheckinProtoVersion(
+ case GCMClient::PLATFORM_CROS:
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS;
+ break;
++ case GCMClient::PLATFORM_BSD:
++ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
++ break;
+ case GCMClient::PLATFORM_UNSPECIFIED:
+ // For unknown platform, return as LINUX.
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
diff --git a/devel/electron5/files/patch-components_keyed__service_core_dependency__graph__unittest.cc b/devel/electron5/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
new file mode 100644
index 000000000000..051e2918ce3a
--- /dev/null
+++ b/devel/electron5/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
@@ -0,0 +1,14 @@
+--- components/keyed_service/core/dependency_graph_unittest.cc.orig 2019-04-08 08:18:17 UTC
++++ components/keyed_service/core/dependency_graph_unittest.cc
+@@ -9,7 +9,11 @@
+ #include "components/keyed_service/core/dependency_graph.h"
+ #include "components/keyed_service/core/dependency_node.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron5/files/patch-components_metrics_BUILD.gn b/devel/electron5/files/patch-components_metrics_BUILD.gn
new file mode 100644
index 000000000000..bb60389c143b
--- /dev/null
+++ b/devel/electron5/files/patch-components_metrics_BUILD.gn
@@ -0,0 +1,14 @@
+--- components/metrics/BUILD.gn.orig 2019-04-08 08:32:49 UTC
++++ components/metrics/BUILD.gn
+@@ -143,6 +143,11 @@ jumbo_static_library("metrics") {
+ if (is_fuchsia) {
+ sources += [ "drive_metrics_provider_fuchsia.cc" ]
+ }
++
++ if (is_bsd) {
++ sources -= [ "system_memory_stats_recorder_linux.cc" ]
++ }
++
+ }
+
+ # The component metrics provider is a separate target because it depends upon
diff --git a/devel/electron5/files/patch-components_metrics_drive__metrics__provider__linux.cc b/devel/electron5/files/patch-components_metrics_drive__metrics__provider__linux.cc
new file mode 100644
index 000000000000..3bd146182f76
--- /dev/null
+++ b/devel/electron5/files/patch-components_metrics_drive__metrics__provider__linux.cc
@@ -0,0 +1,16 @@
+--- components/metrics/drive_metrics_provider_linux.cc.orig 2019-04-08 08:18:17 UTC
++++ components/metrics/drive_metrics_provider_linux.cc
+@@ -4,7 +4,13 @@
+
+ #include "components/metrics/drive_metrics_provider.h"
+
++#if defined(OS_BSD)
++#include <sys/types.h>
++#define MAJOR(dev) major(dev)
++#define MINOR(dev) minor(dev)
++#else
+ #include <linux/kdev_t.h> // For MAJOR()/MINOR().
++#endif
+ #include <sys/stat.h>
+ #include <string>
+
diff --git a/devel/electron5/files/patch-components_metrics_metrics__log.cc b/devel/electron5/files/patch-components_metrics_metrics__log.cc
new file mode 100644
index 000000000000..1fb05d911114
--- /dev/null
+++ b/devel/electron5/files/patch-components_metrics_metrics__log.cc
@@ -0,0 +1,11 @@
+--- components/metrics/metrics_log.cc.orig 2019-04-08 08:32:49 UTC
++++ components/metrics/metrics_log.cc
+@@ -198,7 +198,7 @@ void MetricsLog::RecordCoreSystemProfile(MetricsServic
+ // OperatingSystemVersion refers to the ChromeOS release version.
+ #if defined(OS_CHROMEOS)
+ os->set_kernel_version(base::SysInfo::KernelVersion());
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux operating system version is copied over into kernel version to be
+ // consistent.
+ os->set_kernel_version(base::SysInfo::OperatingSystemVersion());
diff --git a/devel/electron5/files/patch-components_metrics_system__memory__stats__recorder__linux.cc b/devel/electron5/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
new file mode 100644
index 000000000000..e08a20f9a71f
--- /dev/null
+++ b/devel/electron5/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
@@ -0,0 +1,18 @@
+--- components/metrics/system_memory_stats_recorder_linux.cc.orig 2019-04-08 08:18:17 UTC
++++ components/metrics/system_memory_stats_recorder_linux.cc
+@@ -30,6 +30,7 @@ namespace metrics {
+ UMA_HISTOGRAM_LINEAR(name, sample, 2500, 50)
+
+ void RecordMemoryStats(RecordMemoryStatsType type) {
++#if !defined(OS_FREEBSD)
+ base::SystemMemoryInfoKB memory;
+ if (!base::GetSystemMemoryInfo(&memory))
+ return;
+@@ -93,6 +94,7 @@ void RecordMemoryStats(RecordMemoryStatsType type) {
+ break;
+ }
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace metrics
diff --git a/devel/electron5/files/patch-components_neterror_resources_neterror.js b/devel/electron5/files/patch-components_neterror_resources_neterror.js
new file mode 100644
index 000000000000..20918d48b85f
--- /dev/null
+++ b/devel/electron5/files/patch-components_neterror_resources_neterror.js
@@ -0,0 +1,11 @@
+--- components/neterror/resources/neterror.js.orig 2019-04-08 08:32:49 UTC
++++ components/neterror/resources/neterror.js
+@@ -166,7 +166,7 @@ function setUpCachedButton(buttonStrings) {
+ }
+
+ var primaryControlOnLeft = true;
+-// <if expr="is_macosx or is_ios or is_linux or is_android">
++// <if expr="is_macosx or is_ios or is_linux or is_android or is_bsd">
+ primaryControlOnLeft = false;
+ // </if>
+
diff --git a/devel/electron5/files/patch-components_network__session__configurator_browser_network__session__configurator.cc b/devel/electron5/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
new file mode 100644
index 000000000000..a60db582f931
--- /dev/null
+++ b/devel/electron5/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
@@ -0,0 +1,11 @@
+--- components/network_session_configurator/browser/network_session_configurator.cc.orig 2019-04-08 08:32:49 UTC
++++ components/network_session_configurator/browser/network_session_configurator.cc
+@@ -662,7 +662,7 @@ net::URLRequestContextBuilder::HttpCacheParams::Type C
+ }
+ #endif // #if !defined(OS_ANDROID)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE;
+ #else
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE;
diff --git a/devel/electron5/files/patch-components_new__or__sad__tab__strings.grdp b/devel/electron5/files/patch-components_new__or__sad__tab__strings.grdp
new file mode 100644
index 000000000000..6a882f986ce3
--- /dev/null
+++ b/devel/electron5/files/patch-components_new__or__sad__tab__strings.grdp
@@ -0,0 +1,38 @@
+--- components/new_or_sad_tab_strings.grdp.orig 2019-04-08 08:18:18 UTC
++++ components/new_or_sad_tab_strings.grdp
+@@ -51,7 +51,7 @@
+ Open page in a new Incognito window (⇧⌘N)
+ </message>
+ </if>
+- <if expr="is_win or is_linux or chromeos">
++ <if expr="is_win or is_posix or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_INCOGNITO" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to open the web page in Chrome's Incognito mode.">
+ Open page in a new Incognito window (Ctrl-Shift-N)
+ </message>
+@@ -69,7 +69,7 @@
+ Close other tabs or apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_TABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other Chrome tabs or programs running on their computer.">
+ Close other tabs or programs
+ </message>
+@@ -79,7 +79,7 @@
+ Close other apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_NOTABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other programs running on their computer (Linux).">
+ Close other programs
+ </message>
+@@ -94,7 +94,7 @@
+ Restart Chromium
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_RESTART_DEVICE" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to restart their computer.">
+ Restart your computer
+ </message>
diff --git a/devel/electron5/files/patch-components_os__crypt_os__crypt.h b/devel/electron5/files/patch-components_os__crypt_os__crypt.h
new file mode 100644
index 000000000000..1b56184c92a0
--- /dev/null
+++ b/devel/electron5/files/patch-components_os__crypt_os__crypt.h
@@ -0,0 +1,48 @@
+--- components/os_crypt/os_crypt.h.orig 2019-04-08 08:18:18 UTC
++++ components/os_crypt/os_crypt.h
+@@ -15,9 +15,9 @@
+ #include "base/strings/string16.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ class KeyStorageLinux;
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ class PrefRegistrySimple;
+@@ -34,13 +34,13 @@ struct Config;
+ // true for Linux, if a password management tool is available.
+ class OSCrypt {
+ public:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Set the configuration of OSCrypt.
+ static COMPONENT_EXPORT(OS_CRYPT) void SetConfig(
+ std::unique_ptr<os_crypt::Config> config);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // On Linux returns true iff the real secret key (not hardcoded one) is
+ // available. On MacOS returns true if Keychain is available (for mock
+ // Keychain it returns true if not using locked Keychain, false if using
+@@ -112,7 +112,7 @@ class OSCrypt {
+ DISALLOW_IMPLICIT_CONSTRUCTORS(OSCrypt);
+ };
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For unit testing purposes, inject methods to be used.
+ // |get_key_storage_mock| provides the desired |KeyStorage| implementation.
+ // If the provider returns |nullptr|, a hardcoded password will be used.
+@@ -127,6 +127,6 @@ void UseMockKeyStorageForTesting(
+ // Clears any caching and most lazy initialisations performed by the production
+ // code. Should be used after any test which required a password.
+ COMPONENT_EXPORT(OS_CRYPT) void ClearCacheForTesting();
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #endif // COMPONENTS_OS_CRYPT_OS_CRYPT_H_
diff --git a/devel/electron5/files/patch-components_os__crypt_os__crypt__unittest.cc b/devel/electron5/files/patch-components_os__crypt_os__crypt__unittest.cc
new file mode 100644
index 000000000000..0e23dc941bd3
--- /dev/null
+++ b/devel/electron5/files/patch-components_os__crypt_os__crypt__unittest.cc
@@ -0,0 +1,11 @@
+--- components/os_crypt/os_crypt_unittest.cc.orig 2019-04-08 08:32:50 UTC
++++ components/os_crypt/os_crypt_unittest.cc
+@@ -18,7 +18,7 @@
+ #include "components/os_crypt/os_crypt_mocker.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "components/os_crypt/os_crypt_mocker_linux.h"
+ #endif
+
diff --git a/devel/electron5/files/patch-components_plugins_renderer_plugin__placeholder.cc b/devel/electron5/files/patch-components_plugins_renderer_plugin__placeholder.cc
new file mode 100644
index 000000000000..60e5e4137919
--- /dev/null
+++ b/devel/electron5/files/patch-components_plugins_renderer_plugin__placeholder.cc
@@ -0,0 +1,14 @@
+--- components/plugins/renderer/plugin_placeholder.cc.orig 2019-04-08 08:18:18 UTC
++++ components/plugins/renderer/plugin_placeholder.cc
+@@ -17,7 +17,11 @@
+ #include "third_party/blink/public/web/web_plugin_container.h"
+ #include "third_party/blink/public/web/web_script_source.h"
+ #include "third_party/blink/public/web/web_serialized_script_value.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace plugins {
+
diff --git a/devel/electron5/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc b/devel/electron5/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
new file mode 100644
index 000000000000..f71c490cfad1
--- /dev/null
+++ b/devel/electron5/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
@@ -0,0 +1,73 @@
+--- components/policy/core/common/cloud/cloud_policy_util.cc.orig 2019-04-08 08:18:18 UTC
++++ components/policy/core/common/cloud/cloud_policy_util.cc
+@@ -16,7 +16,7 @@
+ #include <wincred.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include <pwd.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -28,7 +28,7 @@
+ #include <sys/sysctl.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include <limits.h> // For HOST_NAME_MAX
+ #endif
+
+@@ -52,7 +52,7 @@
+ #include "base/system/sys_info.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/system/sys_info.h"
+ #endif
+
+@@ -61,11 +61,24 @@ namespace policy {
+ namespace em = enterprise_management;
+
+ std::string GetMachineName() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
+ return hostname;
+ return std::string();
++#elif defined(OS_BSD)
++ long host_name_max = sysconf(_SC_HOST_NAME_MAX);
++ if (host_name_max != -1) {
++ char *hostname = new char[host_name_max + 1]();
++ std::string hostname_r;
++
++ if (gethostname(hostname, host_name_max) == 0)
++ hostname_r = hostname;
++
++ delete[] hostname;
++ return hostname_r;
++ }
++ return std::string();
+ #elif defined(OS_MACOSX)
+ // Do not use NSHost currentHost, as it's very slow. http://crbug.com/138570
+ SCDynamicStoreContext context = {0, NULL, NULL, NULL};
+@@ -111,7 +124,7 @@ std::string GetMachineName() {
+ }
+
+ std::string GetOSVersion() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ return base::SysInfo::OperatingSystemVersion();
+ #elif defined(OS_WIN)
+ base::win::OSInfo::VersionNumber version_number =
+@@ -134,7 +147,7 @@ std::string GetOSArchitecture() {
+ }
+
+ std::string GetOSUsername() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ struct passwd* creds = getpwuid(getuid());
+ if (!creds || !creds->pw_name)
+ return std::string();
diff --git a/devel/electron5/files/patch-components_policy_core_common_schema.cc b/devel/electron5/files/patch-components_policy_core_common_schema.cc
new file mode 100644
index 000000000000..2fb2bf60092a
--- /dev/null
+++ b/devel/electron5/files/patch-components_policy_core_common_schema.cc
@@ -0,0 +1,14 @@
+--- components/policy/core/common/schema.cc.orig 2019-04-08 08:32:50 UTC
++++ components/policy/core/common/schema.cc
+@@ -23,7 +23,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "components/policy/core/common/json_schema_constants.h"
+ #include "components/policy/core/common/schema_internal.h"
++#if defined(OS_FREEBSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace schema = json_schema_constants;
+
diff --git a/devel/electron5/files/patch-components_policy_resources_policy__templates.json b/devel/electron5/files/patch-components_policy_resources_policy__templates.json
new file mode 100644
index 000000000000..b360320b2344
--- /dev/null
+++ b/devel/electron5/files/patch-components_policy_resources_policy__templates.json
@@ -0,0 +1,83 @@
+--- components/policy/resources/policy_templates.json.orig 2019-04-08 08:32:50 UTC
++++ components/policy/resources/policy_templates.json
+@@ -956,7 +956,7 @@
+ 'name': 'HomepageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -983,7 +983,7 @@
+ 'name': 'HomepageIsNewTabPage',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1009,7 +1009,7 @@
+ 'name': 'NewTabPageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
++ 'supported_on': ['chrome.*:58-', 'chrome_os:58-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1702,7 +1702,7 @@
+ 'name': 'RemoteAccessHostMatchUsername',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
++ 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-', 'chrome.freebsd:25-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -3192,7 +3192,7 @@
+ 'name': 'GSSAPILibraryName',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.linux:9-'],
++ 'supported_on': ['chrome.linux:9-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'dynamic_refresh': False,
+ 'per_profile': False,
+@@ -3244,7 +3244,7 @@
+ 'name': 'NtlmV2Enabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
++ 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-', 'chrome.freebsd:63-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -6303,7 +6303,7 @@
+ 'name': 'RequireOnlineRevocationChecksForLocalAnchors',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
++ 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-', 'chrome.freebsd:30-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -7433,7 +7433,7 @@
+ 'name': 'BackgroundModeEnabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
++ 'supported_on': ['chrome.win:19-', 'chrome.linux:19-', 'chrome.freebsd:19-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -7948,7 +7948,7 @@
+ 'name': 'FullscreenAllowed',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
++ 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-', 'chrome.freebsd:31-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': True,
diff --git a/devel/electron5/files/patch-components_policy_tools_generate__policy__source.py b/devel/electron5/files/patch-components_policy_tools_generate__policy__source.py
new file mode 100644
index 000000000000..17fd8cafd12a
--- /dev/null
+++ b/devel/electron5/files/patch-components_policy_tools_generate__policy__source.py
@@ -0,0 +1,20 @@
+--- components/policy/tools/generate_policy_source.py.orig 2019-04-08 08:32:51 UTC
++++ components/policy/tools/generate_policy_source.py
+@@ -86,7 +86,7 @@ class PolicyDetails:
+ if platform not in [
+ 'chrome_frame', 'chrome_os', 'android', 'webview_android',
+ 'chrome.win', 'chrome.linux', 'chrome.mac', 'chrome.fuchsia',
+- 'chrome.*'
++ 'chrome.freebsd', 'chrome.*'
+ ]:
+ raise RuntimeError('Platform "%s" is not supported' % platform)
+
+@@ -105,7 +105,7 @@ class PolicyDetails:
+ if platform.startswith('chrome.'):
+ platform_sub = platform[7:]
+ if platform_sub == '*':
+- self.platforms.extend(['win', 'mac', 'linux', 'fuchsia'])
++ self.platforms.extend(['win', 'mac', 'linux', 'fuchsia', 'freebsd'])
+ else:
+ self.platforms.append(platform_sub)
+ else:
diff --git a/devel/electron5/files/patch-components_previews_core_previews__features.cc b/devel/electron5/files/patch-components_previews_core_previews__features.cc
new file mode 100644
index 000000000000..9f49cf55b30e
--- /dev/null
+++ b/devel/electron5/files/patch-components_previews_core_previews__features.cc
@@ -0,0 +1,18 @@
+--- components/previews/core/previews_features.cc.orig 2019-04-08 08:32:51 UTC
++++ components/previews/core/previews_features.cc
+@@ -14,12 +14,12 @@ namespace features {
+ // are enabled are controlled by other features.
+ const base::Feature kPreviews {
+ "Previews",
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Previews allowed for Android (but also allow on Linux for dev/debug).
+ base::FEATURE_ENABLED_BY_DEFAULT
+-#else // !defined(OS_ANDROID) || defined(OS_LINUX)
++#else // !defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Enables the Offline previews on android slow connections.
diff --git a/devel/electron5/files/patch-components_services_filesystem_file__system__app.cc b/devel/electron5/files/patch-components_services_filesystem_file__system__app.cc
new file mode 100644
index 000000000000..2eb39ce0d2cd
--- /dev/null
+++ b/devel/electron5/files/patch-components_services_filesystem_file__system__app.cc
@@ -0,0 +1,20 @@
+--- components/services/filesystem/file_system_app.cc.orig 2019-04-08 08:32:51 UTC
++++ components/services/filesystem/file_system_app.cc
+@@ -19,7 +19,7 @@
+ #elif defined(OS_ANDROID)
+ #include "base/base_paths_android.h"
+ #include "base/path_service.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+@@ -73,7 +73,7 @@ base::FilePath FileSystemApp::GetUserDataDir() {
+ CHECK(base::PathService::Get(base::DIR_APP_DATA, &path));
+ #elif defined(OS_ANDROID)
+ CHECK(base::PathService::Get(base::DIR_ANDROID_APP_DATA, &path));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ path = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron5/files/patch-components_services_font_font__service__app.cc b/devel/electron5/files/patch-components_services_font_font__service__app.cc
new file mode 100644
index 000000000000..10043906fb47
--- /dev/null
+++ b/devel/electron5/files/patch-components_services_font_font__service__app.cc
@@ -0,0 +1,11 @@
+--- components/services/font/font_service_app.cc.orig 2019-04-08 08:32:51 UTC
++++ components/services/font/font_service_app.cc
+@@ -20,7 +20,7 @@
+ #include "components/services/font/ppapi_fontconfig_matching.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/test/fontconfig_util_linux.h"
+ #endif
+
diff --git a/devel/electron5/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc b/devel/electron5/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc
new file mode 100644
index 000000000000..e3334c5fc472
--- /dev/null
+++ b/devel/electron5/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc
@@ -0,0 +1,20 @@
+--- components/startup_metric_utils/browser/startup_metric_utils.cc.orig 2019-04-08 08:32:51 UTC
++++ components/startup_metric_utils/browser/startup_metric_utils.cc
+@@ -456,7 +456,7 @@ void AddStartupEventsForTelemetry()
+ // RecordBrowserMainMessageLoopStart, the time since last startup is also logged
+ // to a histogram suffixed with the startup temperature.
+ void RecordTimeSinceLastStartup(PrefService* pref_service) {
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(pref_service);
+
+ // Get the timestamp of the current startup.
+@@ -485,7 +485,7 @@ void RecordTimeSinceLastStartup(PrefService* pref_serv
+ // Write the timestamp of the current startup in |pref_service|.
+ pref_service->SetInt64(prefs::kLastStartupTimestamp,
+ process_start_time.ToInternalValue());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ // Logs the Startup.SameVersionStartupCount histogram. Relies on |pref_service|
diff --git a/devel/electron5/files/patch-components_storage__monitor_BUILD.gn b/devel/electron5/files/patch-components_storage__monitor_BUILD.gn
new file mode 100644
index 000000000000..246f01948e98
--- /dev/null
+++ b/devel/electron5/files/patch-components_storage__monitor_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/storage_monitor/BUILD.gn.orig 2019-04-08 08:18:18 UTC
++++ components/storage_monitor/BUILD.gn
+@@ -65,6 +65,17 @@ static_library("storage_monitor") {
+ ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "mtab_watcher_linux.cc",
++ "mtab_watcher_linux.h",
++ ]
++ sources += [
++ "storage_monitor_freebsd.cc",
++ "storage_monitor_freebsd.h",
++ ]
++ }
++
+ if (use_udev) {
+ deps += [ "//device/udev_linux" ]
+ } else if (is_linux) {
diff --git a/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.cc b/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.cc
new file mode 100644
index 000000000000..8e3c4f45fabc
--- /dev/null
+++ b/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.cc
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.cc.orig 2019-04-08 08:18:18 UTC
++++ components/storage_monitor/removable_device_constants.cc
+@@ -10,7 +10,7 @@ namespace storage_monitor {
+ const char kFSUniqueIdPrefix[] = "UUID:";
+ const char kVendorModelSerialPrefix[] = "VendorModelSerial:";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kVendorModelVolumeStoragePrefix[] = "VendorModelVolumeStorage:";
+ #endif
+
diff --git a/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.h b/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.h
new file mode 100644
index 000000000000..a8ced84a6840
--- /dev/null
+++ b/devel/electron5/files/patch-components_storage__monitor_removable__device__constants.h
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.h.orig 2019-04-08 08:18:18 UTC
++++ components/storage_monitor/removable_device_constants.h
+@@ -15,7 +15,7 @@ namespace storage_monitor {
+ extern const char kFSUniqueIdPrefix[];
+ extern const char kVendorModelSerialPrefix[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kVendorModelVolumeStoragePrefix[];
+ #endif
+
diff --git a/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.cc b/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
new file mode 100644
index 000000000000..a39e5b9a0831
--- /dev/null
+++ b/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
@@ -0,0 +1,57 @@
+--- components/storage_monitor/storage_monitor_freebsd.cc.orig 2019-04-09 12:48:46 UTC
++++ components/storage_monitor/storage_monitor_freebsd.cc
+@@ -0,0 +1,54 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD implementation.
++
++#include "components/storage_monitor/storage_monitor_freebsd.h"
++
++#include <stdio.h>
++
++#include <list>
++
++#include "base/bind.h"
++#include "base/metrics/histogram.h"
++#include "base/process/kill.h"
++#include "base/process/launch.h"
++#include "base/stl_util.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/utf_string_conversions.h"
++#include "components/storage_monitor/media_storage_util.h"
++#include "components/storage_monitor/removable_device_constants.h"
++#include "components/storage_monitor/storage_info.h"
++
++using content::BrowserThread;
++
++namespace storage_monitor {
++
++namespace {
++
++} // namespace
++
++StorageMonitorFreeBSD::StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++StorageMonitorFreeBSD::~StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++void StorageMonitorFreeBSD::Init() {
++}
++
++bool StorageMonitorFreeBSD::GetStorageInfoForPath(
++ const base::FilePath& path,
++ StorageInfo* device_info) const {
++ return false; // TODO
++}
++
++StorageMonitor* StorageMonitor::CreateInternal() {
++ return new StorageMonitorFreeBSD();
++}
++
++} // namespace storage_monitor
diff --git a/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.h b/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.h
new file mode 100644
index 000000000000..0b301a208cd9
--- /dev/null
+++ b/devel/electron5/files/patch-components_storage__monitor_storage__monitor__freebsd.h
@@ -0,0 +1,48 @@
+--- components/storage_monitor/storage_monitor_freebsd.h.orig 2019-04-09 12:48:46 UTC
++++ components/storage_monitor/storage_monitor_freebsd.h
+@@ -0,0 +1,45 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD processes mount point change events, notifies listeners
++// about the addition and deletion of media devices, and answers queries about
++// mounted devices.
++// StorageMonitorFreeBSD lives on the UI thread, and uses ???
++// the FILE thread to get mount point change events.
++
++#ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++#define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++
++#include <map>
++#include <string>
++
++#include "base/compiler_specific.h"
++#include "base/files/file_path.h"
++#include "base/files/file_path_watcher.h"
++#include "base/memory/weak_ptr.h"
++#include "components/storage_monitor/storage_monitor.h"
++#include "content/public/browser/browser_thread.h"
++
++namespace storage_monitor {
++
++class StorageMonitorFreeBSD : public StorageMonitor {
++ public:
++ // Should only be called by browser start up code.
++ // Use StorageMonitor::GetInstance() instead.
++ explicit StorageMonitorFreeBSD();
++ virtual ~StorageMonitorFreeBSD();
++
++ // Must be called for StorageMonitorFreeBSD to work.
++ virtual void Init() override;
++ private:
++ // StorageMonitor implementation.
++ virtual bool GetStorageInfoForPath(const base::FilePath& path,
++ StorageInfo* device_info) const override;
++
++ DISALLOW_COPY_AND_ASSIGN(StorageMonitorFreeBSD);
++};
++
++} // namespace storage_monitor
++
++#endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
diff --git a/devel/electron5/files/patch-components_sync_base_get__session__name.cc b/devel/electron5/files/patch-components_sync_base_get__session__name.cc
new file mode 100644
index 000000000000..457a8ff7aba8
--- /dev/null
+++ b/devel/electron5/files/patch-components_sync_base_get__session__name.cc
@@ -0,0 +1,20 @@
+--- components/sync/base/get_session_name.cc.orig 2019-04-08 08:32:52 UTC
++++ components/sync/base/get_session_name.cc
+@@ -17,7 +17,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chromeos/constants/devicetype.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/sync/base/get_session_name_linux.h"
+ #elif defined(OS_IOS)
+ #include "components/sync/base/get_session_name_ios.h"
+@@ -52,7 +52,7 @@ std::string GetSessionNameBlocking() {
+ session_name = "Chromebook";
+ break;
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ session_name = internal::GetHostname();
+ #elif defined(OS_IOS)
+ session_name = internal::GetComputerName();
diff --git a/devel/electron5/files/patch-components_sync_base_get__session__name__linux.cc b/devel/electron5/files/patch-components_sync_base_get__session__name__linux.cc
new file mode 100644
index 000000000000..2f447c6d116c
--- /dev/null
+++ b/devel/electron5/files/patch-components_sync_base_get__session__name__linux.cc
@@ -0,0 +1,14 @@
+--- components/sync/base/get_session_name_linux.cc.orig 2019-04-08 08:18:18 UTC
++++ components/sync/base/get_session_name_linux.cc
+@@ -13,8 +13,9 @@ namespace syncer {
+ namespace internal {
+
+ std::string GetHostname() {
+- char hostname[HOST_NAME_MAX];
+- if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
++ int len = sysconf(_SC_HOST_NAME_MAX);
++ char hostname[len];
++ if (gethostname(hostname, len) == 0) // Success.
+ return hostname;
+ return base::GetLinuxDistro();
+ }
diff --git a/devel/electron5/files/patch-components_sync_device__info_local__device__info__provider__impl.cc b/devel/electron5/files/patch-components_sync_device__info_local__device__info__provider__impl.cc
new file mode 100644
index 000000000000..c0bf786fda9d
--- /dev/null
+++ b/devel/electron5/files/patch-components_sync_device__info_local__device__info__provider__impl.cc
@@ -0,0 +1,11 @@
+--- components/sync/device_info/local_device_info_provider_impl.cc.orig 2019-04-08 08:32:52 UTC
++++ components/sync/device_info/local_device_info_provider_impl.cc
+@@ -15,7 +15,7 @@ namespace {
+ sync_pb::SyncEnums::DeviceType GetLocalDeviceType(bool is_tablet) {
+ #if defined(OS_CHROMEOS)
+ return sync_pb::SyncEnums_DeviceType_TYPE_CROS;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return sync_pb::SyncEnums_DeviceType_TYPE_LINUX;
+ #elif defined(OS_ANDROID) || defined(OS_IOS)
+ return is_tablet ? sync_pb::SyncEnums_DeviceType_TYPE_TABLET
diff --git a/devel/electron5/files/patch-components_update__client_update__query__params.cc b/devel/electron5/files/patch-components_update__client_update__query__params.cc
new file mode 100644
index 000000000000..d3d51d838078
--- /dev/null
+++ b/devel/electron5/files/patch-components_update__client_update__query__params.cc
@@ -0,0 +1,11 @@
+--- components/update_client/update_query_params.cc.orig 2019-04-08 08:32:52 UTC
++++ components/update_client/update_query_params.cc
+@@ -38,6 +38,8 @@ const char kOs[] =
+ "fuchsia";
+ #elif defined(OS_OPENBSD)
+ "openbsd";
++#elif defined(OS_FREEBSD)
++ "freebsd";
+ #else
+ #error "unknown os"
+ #endif
diff --git a/devel/electron5/files/patch-components_url__matcher_regex__set__matcher.cc b/devel/electron5/files/patch-components_url__matcher_regex__set__matcher.cc
new file mode 100644
index 000000000000..bfdbfff020ca
--- /dev/null
+++ b/devel/electron5/files/patch-components_url__matcher_regex__set__matcher.cc
@@ -0,0 +1,16 @@
+--- components/url_matcher/regex_set_matcher.cc.orig 2019-04-08 08:18:18 UTC
++++ components/url_matcher/regex_set_matcher.cc
+@@ -11,8 +11,13 @@
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+ #include "components/url_matcher/substring_set_matcher.h"
++#if defined(OS_BSD)
++#include <re2/filtered_re2.h>
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/filtered_re2.h"
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron5/files/patch-components_url__matcher_url__matcher__factory.cc b/devel/electron5/files/patch-components_url__matcher_url__matcher__factory.cc
new file mode 100644
index 000000000000..851085a479aa
--- /dev/null
+++ b/devel/electron5/files/patch-components_url__matcher_url__matcher__factory.cc
@@ -0,0 +1,14 @@
+--- components/url_matcher/url_matcher_factory.cc.orig 2019-04-08 08:18:18 UTC
++++ components/url_matcher/url_matcher_factory.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "components/url_matcher/url_matcher_constants.h"
+ #include "components/url_matcher/url_matcher_helpers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron5/files/patch-components_webcrypto_algorithms_test__helpers.cc b/devel/electron5/files/patch-components_webcrypto_algorithms_test__helpers.cc
new file mode 100644
index 000000000000..04bf4e642ba7
--- /dev/null
+++ b/devel/electron5/files/patch-components_webcrypto_algorithms_test__helpers.cc
@@ -0,0 +1,14 @@
+--- components/webcrypto/algorithms/test_helpers.cc.orig 2019-04-08 08:32:53 UTC
++++ components/webcrypto/algorithms/test_helpers.cc
+@@ -25,7 +25,11 @@
+ #include "components/webcrypto/status.h"
+ #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
+ #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace webcrypto {
+
diff --git a/devel/electron5/files/patch-content_app_content__main__runner__impl.cc b/devel/electron5/files/patch-content_app_content__main__runner__impl.cc
new file mode 100644
index 000000000000..8497a70a3d28
--- /dev/null
+++ b/devel/electron5/files/patch-content_app_content__main__runner__impl.cc
@@ -0,0 +1,73 @@
+--- content/app/content_main_runner_impl.cc.orig 2019-04-09 12:48:20 UTC
++++ content/app/content_main_runner_impl.cc
+@@ -93,17 +93,17 @@
+ #include "base/posix/global_descriptors.h"
+ #include "content/public/common/content_descriptors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_fork_delegate_linux.h"
+ #endif
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "sandbox/linux/services/libc_interceptor.h"
+ #include "services/service_manager/zygote/zygote_main.h"
+ #endif
+
+ #endif // OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/native_library.h"
+ #include "base/rand_util.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
+@@ -124,7 +124,7 @@
+ #include "content/public/common/content_client.h"
+ #endif
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || defined(OS_BSD)
+
+ #if !defined(CHROME_MULTIPLE_DLL_BROWSER)
+ #include "content/child/field_trial.h"
+@@ -309,7 +309,7 @@ void InitializeZygoteSandboxForBrowserProcess(
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ // Loads the (native) libraries but does not initialize them (i.e., does not
+@@ -406,7 +406,7 @@ void PreSandboxInit() {
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace
+
+@@ -464,7 +464,7 @@ int RunZygote(ContentMainDelegate* delegate) {
+ delegate->ZygoteStarting(&zygote_fork_delegates);
+ media::InitializeMediaLibrary();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PreSandboxInit();
+ #endif
+
+@@ -637,11 +637,11 @@ int ContentMainRunnerImpl::Initialize(const ContentMai
+ base::GlobalDescriptors::kBaseDescriptor);
+ #endif // !OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ g_fds->Set(service_manager::kCrashDumpSignal,
+ service_manager::kCrashDumpSignal +
+ base::GlobalDescriptors::kBaseDescriptor);
+-#endif // OS_LINUX || OS_OPENBSD
++#endif // OS_LINUX
+
+ #endif // !OS_WIN
+
diff --git a/devel/electron5/files/patch-content_browser_BUILD.gn b/devel/electron5/files/patch-content_browser_BUILD.gn
new file mode 100644
index 000000000000..4fca3c5fa7ba
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_BUILD.gn
@@ -0,0 +1,14 @@
+--- content/browser/BUILD.gn.orig 2019-04-08 08:32:53 UTC
++++ content/browser/BUILD.gn
+@@ -1939,11 +1939,6 @@ jumbo_source_set("browser") {
+ "tracing/cros_tracing_agent.h",
+ ]
+ deps += [ "//chromeos/resources" ]
+- } else {
+- sources += [
+- "memory/memory_monitor_linux.cc",
+- "memory/memory_monitor_linux.h",
+- ]
+ }
+
+ if (is_chromeos || is_android || is_chromecast) {
diff --git a/devel/electron5/files/patch-content_browser_browser__main__loop.cc b/devel/electron5/files/patch-content_browser_browser__main__loop.cc
new file mode 100644
index 000000000000..9b715ca09eb2
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_browser__main__loop.cc
@@ -0,0 +1,46 @@
+--- content/browser/browser_main_loop.cc.orig 2019-04-09 12:48:20 UTC
++++ content/browser/browser_main_loop.cc
+@@ -250,6 +250,13 @@
+ #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h"
+ #endif
+
++#if defined(OS_BSD)
++#include "content/browser/sandbox_host_linux.h"
++#include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#include "content/public/common/common_sandbox_support_linux.h"
++#include "services/service_manager/sandbox/sandbox.h"
++#endif
++
+ // One of the linux specific headers defines this as a macro.
+ #ifdef DestroyAll
+ #undef DestroyAll
+@@ -585,6 +592,11 @@ int BrowserMainLoop::EarlyInitialization() {
+ // by now since a thread to start the ServiceManager has been created
+ // before the browser main loop starts.
+ DCHECK(SandboxHostLinux::GetInstance()->IsInitialized());
++#elif defined(OS_BSD)
++ SandboxHostLinux::GetInstance()->Init();
++ base::FileHandleMappingVector fds_to_map;
++ const int sfd = SandboxHostLinux::GetInstance()->GetChildSocket();
++ fds_to_map.push_back(std::make_pair(sfd, service_manager::GetSandboxFD()));
+ #endif
+
+ #if defined(USE_X11)
+@@ -629,7 +641,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ #endif // defined(OS_ANDROID) || defined(OS_CHROMEOS)
+
+ #if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \
+- defined(OS_ANDROID)
++ defined(OS_ANDROID) || defined(OS_BSD)
+ // We use quite a few file descriptors for our IPC as well as disk the disk
+ // cache,and the default limit on the Mac is low (256), so bump it up.
+
+@@ -639,7 +651,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ // an arbitrarily high number. See https://crbug.com/539567
+ base::IncreaseFdLimitTo(8192);
+ #endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) ||
+- // defined(OS_ANDROID)
++ // defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ net::EnsureWinsockInit();
diff --git a/devel/electron5/files/patch-content_browser_child__process__launcher__helper__linux.cc b/devel/electron5/files/patch-content_browser_child__process__launcher__helper__linux.cc
new file mode 100644
index 000000000000..fc75b91a8681
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_child__process__launcher__helper__linux.cc
@@ -0,0 +1,76 @@
+--- content/browser/child_process_launcher_helper_linux.cc.orig 2019-04-08 08:32:53 UTC
++++ content/browser/child_process_launcher_helper_linux.cc
+@@ -17,7 +17,9 @@
+ #include "content/public/common/sandboxed_process_launcher_delegate.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#if !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_handle.h"
++#endif
+ #include "services/service_manager/zygote/host/zygote_communication_linux.h"
+ #include "services/service_manager/zygote/host/zygote_host_impl_linux.h"
+
+@@ -69,6 +71,7 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ int* launch_result) {
+ *is_synchronous_launch = true;
+
++#if !defined(OS_BSD)
+ service_manager::ZygoteHandle zygote_handle =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoZygote)
+ ? nullptr
+@@ -82,7 +85,6 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ GetProcessType());
+ *launch_result = LAUNCH_RESULT_SUCCESS;
+
+-#if !defined(OS_OPENBSD)
+ if (handle) {
+ // This is just a starting score for a renderer or extension (the
+ // only types of processes that will be started this way). It will
+@@ -93,13 +95,13 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ service_manager::ZygoteHostImpl::GetInstance()->AdjustRendererOOMScore(
+ handle, kLowestRendererOomScore);
+ }
+-#endif
+
+ Process process;
+ process.process = base::Process(handle);
+ process.zygote = zygote_handle;
+ return process;
+ }
++#endif
+
+ Process process;
+ process.process = base::LaunchProcess(*command_line(), options);
+@@ -117,10 +119,14 @@ ChildProcessTerminationInfo ChildProcessLauncherHelper
+ const ChildProcessLauncherHelper::Process& process,
+ bool known_dead) {
+ ChildProcessTerminationInfo info;
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ info.status = process.zygote->GetTerminationStatus(
+ process.process.Handle(), known_dead, &info.exit_code);
+ } else if (known_dead) {
++#else
++ if (known_dead) {
++#endif
+ info.status = base::GetKnownDeadTerminationStatus(process.process.Handle(),
+ &info.exit_code);
+ } else {
+@@ -144,13 +150,17 @@ void ChildProcessLauncherHelper::ForceNormalProcessTer
+ DCHECK(CurrentlyOnProcessLauncherTaskRunner());
+ process.process.Terminate(service_manager::RESULT_CODE_NORMAL_EXIT, false);
+ // On POSIX, we must additionally reap the child.
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ // If the renderer was created via a zygote, we have to proxy the reaping
+ // through the zygote process.
+ process.zygote->EnsureProcessTerminated(process.process.Handle());
+ } else {
++#endif
+ base::EnsureProcessTerminated(std::move(process.process));
++#if !defined(OS_BSD)
+ }
++#endif
+ }
+
+ void ChildProcessLauncherHelper::SetProcessPriorityOnLauncherThread(
diff --git a/devel/electron5/files/patch-content_browser_media_media__internals.cc b/devel/electron5/files/patch-content_browser_media_media__internals.cc
new file mode 100644
index 000000000000..a2523c0ceef1
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_media_media__internals.cc
@@ -0,0 +1,11 @@
+--- content/browser/media/media_internals.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/media/media_internals.cc
+@@ -763,7 +763,7 @@ void MediaInternals::UpdateVideoCaptureDeviceCapabilit
+ device_dict->SetString("name", descriptor.GetNameAndModel());
+ device_dict->Set("formats", std::move(format_list));
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_ANDROID)
++ defined(OS_ANDROID) || defined(OS_BSD)
+ device_dict->SetString("captureApi", descriptor.GetCaptureApiTypeString());
+ #endif
+ video_capture_capabilities_cached_data_.Append(std::move(device_dict));
diff --git a/devel/electron5/files/patch-content_browser_memory_memory__monitor.cc b/devel/electron5/files/patch-content_browser_memory_memory__monitor.cc
new file mode 100644
index 000000000000..442d814f3bc2
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_memory_memory__monitor.cc
@@ -0,0 +1,11 @@
+--- content/browser/memory/memory_monitor.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/memory/memory_monitor.cc
+@@ -22,7 +22,7 @@ void MemoryMonitorDelegate::GetSystemMemoryInfo(
+ base::GetSystemMemoryInfo(mem_info);
+ }
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // TODO(bashi,bcwhite): Remove when memory monitor for mac is available.
+ std::unique_ptr<MemoryMonitor> CreateMemoryMonitor() {
+ NOTREACHED();
diff --git a/devel/electron5/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc b/devel/electron5/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
new file mode 100644
index 000000000000..a1531915b262
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
@@ -0,0 +1,27 @@
+--- content/browser/memory/swap_metrics_driver_impl_linux.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/memory/swap_metrics_driver_impl_linux.cc
+@@ -43,6 +43,7 @@ SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinu
+
+ SwapMetricsDriver::SwapMetricsUpdateResult
+ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
++#if !defined(OS_BSD)
+ base::VmStatInfo vmstat;
+ if (!base::GetVmStatInfo(&vmstat)) {
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
+@@ -55,12 +56,15 @@ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base
+
+ if (interval.is_zero())
+ return SwapMetricsDriver::SwapMetricsUpdateResult::
+- kSwapMetricsUpdateSuccess;
++ kSwapMetricsUpdateSuccess;
+
+ delegate_->OnSwapInCount(in_counts, interval);
+ delegate_->OnSwapOutCount(out_counts, interval);
+
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateSuccess;
++#else
++ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
++#endif
+ }
+
+ } // namespace content
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc b/devel/electron5/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
new file mode 100644
index 000000000000..173633245d7b
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/input/input_device_change_observer.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/renderer_host/input/input_device_change_observer.cc
+@@ -10,7 +10,7 @@
+
+ #if defined(OS_WIN)
+ #include "ui/events/devices/input_device_observer_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/devices/input_device_manager.h"
+ #elif defined(OS_ANDROID)
+ #include "ui/events/devices/input_device_observer_android.h"
+@@ -22,7 +22,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ render_view_host_impl_ = rvhi;
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->AddObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
+@@ -32,7 +32,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ InputDeviceChangeObserver::~InputDeviceChangeObserver() {
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.cc b/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.cc
new file mode 100644
index 000000000000..3673a9721890
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_message_filter.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/renderer_host/render_message_filter.cc
+@@ -71,7 +71,7 @@
+ #if defined(OS_MACOSX)
+ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/threading/platform_thread.h"
+ #endif
+@@ -151,7 +151,7 @@ void RenderMessageFilter::CreateFullscreenWidget(
+ std::move(callback).Run(route_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriorityOnFileThread(
+ base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority) {
+@@ -172,7 +172,7 @@ void RenderMessageFilter::SetThreadPriorityOnFileThrea
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) {
+ constexpr base::TaskTraits kTraits = {
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.h b/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.h
new file mode 100644
index 000000000000..bf67c7d20ae8
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__message__filter.h
@@ -0,0 +1,19 @@
+--- content/browser/renderer_host/render_message_filter.h.orig 2019-04-08 08:18:19 UTC
++++ content/browser/renderer_host/render_message_filter.h
+@@ -87,14 +87,14 @@ class CONTENT_EXPORT RenderMessageFilter
+ mojom::WidgetPtr widget,
+ CreateFullscreenWidgetCallback callback) override;
+ void HasGpuProcess(HasGpuProcessCallback callback) override;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) override;
+ #endif
+
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority);
+ #endif
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__process__host__impl.h b/devel/electron5/files/patch-content_browser_renderer__host_render__process__host__impl.h
new file mode 100644
index 000000000000..5c58b7351ead
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__process__host__impl.h
@@ -0,0 +1,15 @@
+--- content/browser/renderer_host/render_process_host_impl.h.orig 2019-04-08 08:32:54 UTC
++++ content/browser/renderer_host/render_process_host_impl.h
+@@ -407,10 +407,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
+ is_for_guests_only_ = is_for_guests_only;
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Launch the zygote early in the browser startup.
+ static void EarlyZygoteLaunch();
+-#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ RendererAudioOutputStreamFactoryContext*
+ GetRendererAudioOutputStreamFactoryContext() override;
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__view__host__impl.cc b/devel/electron5/files/patch-content_browser_renderer__host_render__view__host__impl.cc
new file mode 100644
index 000000000000..303aab716e04
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__view__host__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_view_host_impl.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/renderer_host/render_view_host_impl.cc
+@@ -161,7 +161,7 @@ void GetPlatformSpecificPrefs(RendererPreferences* pre
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CYVSCROLL);
+ prefs->arrow_bitmap_width_horizontal_scroll_bar_in_dips =
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXHSCROLL);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ prefs->system_font_family_name = gfx::Font().GetFontName();
+ #endif
+ }
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc b/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
new file mode 100644
index 000000000000..012854ec2417
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_widget_host_view_aura.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/renderer_host/render_widget_host_view_aura.cc
+@@ -121,7 +121,7 @@
+ #include "content/browser/accessibility/browser_accessibility_auralinux.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+@@ -2192,7 +2192,7 @@ bool RenderWidgetHostViewAura::NeedsInputGrab() {
+ }
+
+ bool RenderWidgetHostViewAura::NeedsMouseCapture() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ return NeedsInputGrab();
+ #endif
+ return false;
+@@ -2390,7 +2390,7 @@ void RenderWidgetHostViewAura::ForwardKeyboardEventWit
+ if (!target_host)
+ return;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* keybinding_delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
diff --git a/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc b/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
new file mode 100644
index 000000000000..e4ae33552531
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_widget_host_view_event_handler.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/renderer_host/render_widget_host_view_event_handler.cc
+@@ -608,7 +608,7 @@ bool RenderWidgetHostViewEventHandler::CanRendererHand
+ if (event->type() == ui::ET_MOUSE_EXITED) {
+ if (mouse_locked || selection_popup)
+ return false;
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Don't forward the mouse leave message which is received when the context
+ // menu is displayed by the page. This confuses the page and causes state
+ // changes.
diff --git a/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc b/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
new file mode 100644
index 000000000000..1319ffd70470
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.cc.orig 2019-04-08 08:18:19 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.cc
+@@ -15,7 +15,7 @@
+
+ #include "ui/events/platform/platform_event_source.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/env.h"
+ #include "ui/events/event.h"
+ #endif
+@@ -39,7 +39,7 @@ NativeEventObserver::~NativeEventObserver() {
+ DeregisterObserver();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeEventObserver::RegisterObserver() {
+ aura::Env::GetInstance()->AddWindowEventDispatcherObserver(this);
+ }
+@@ -61,7 +61,7 @@ void NativeEventObserver::OnWindowEventDispatcherFinis
+ did_run_event_callback_.Run(info.unique_id);
+ events_being_processed_.pop_back();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ void NativeEventObserver::RegisterObserver() {
diff --git a/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h b/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
new file mode 100644
index 000000000000..5f428c6ed946
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
@@ -0,0 +1,47 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.h.orig 2019-04-08 08:18:19 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.h
+@@ -14,7 +14,7 @@
+ #include "content/public/browser/native_event_processor_observer_mac.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/window_event_dispatcher_observer.h"
+ #endif
+
+@@ -39,7 +39,7 @@ namespace responsiveness {
+ class CONTENT_EXPORT NativeEventObserver
+ #if defined(OS_MACOSX)
+ : public NativeEventProcessorObserver
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ : public aura::WindowEventDispatcherObserver
+ #elif defined(OS_WIN)
+ : public base::MessagePumpForUI::Observer
+@@ -56,7 +56,7 @@ class CONTENT_EXPORT NativeEventObserver
+ NativeEventObserver(WillRunEventCallback will_run_event_callback,
+ DidRunEventCallback did_run_event_callback);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ~NativeEventObserver() override;
+ #else
+ virtual ~NativeEventObserver();
+@@ -68,7 +68,7 @@ class CONTENT_EXPORT NativeEventObserver
+ // Exposed for tests.
+ void WillRunNativeEvent(const void* opaque_identifier) override;
+ void DidRunNativeEvent(const void* opaque_identifier) override;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // aura::WindowEventDispatcherObserver overrides:
+ void OnWindowEventDispatcherStartedProcessing(
+ aura::WindowEventDispatcher* dispatcher,
+@@ -85,7 +85,7 @@ class CONTENT_EXPORT NativeEventObserver
+ void RegisterObserver();
+ void DeregisterObserver();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct EventInfo {
+ const void* unique_id;
+ };
diff --git a/devel/electron5/files/patch-content_browser_service__manager_service__manager__context.cc b/devel/electron5/files/patch-content_browser_service__manager_service__manager__context.cc
new file mode 100644
index 000000000000..0a9aa9acde92
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_service__manager_service__manager__context.cc
@@ -0,0 +1,35 @@
+--- content/browser/service_manager/service_manager_context.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/service_manager/service_manager_context.cc
+@@ -99,7 +99,7 @@
+ #include "jni/ContentNfcDelegate_jni.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/font_service_app.h"
+ #include "components/services/font/public/interfaces/constants.mojom.h"
+ #endif
+@@ -378,12 +378,12 @@ void CreateInProcessAudioService(
+ BrowserMainLoop::GetAudioManager(), std::move(request)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<service_manager::Service> CreateFontService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<font_service::FontServiceApp>(std::move(request));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ std::unique_ptr<service_manager::Service> CreateResourceCoordinatorService(
+ service_manager::mojom::ServiceRequest request) {
+@@ -618,7 +618,7 @@ ServiceManagerContext::ServiceManagerContext(
+ base::BindRepeating(&CreateVideoCaptureService));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ RegisterInProcessService(
+ packaged_services_connection_.get(), font_service::mojom::kServiceName,
+ base::CreateSequencedTaskRunnerWithTraits(
diff --git a/devel/electron5/files/patch-content_browser_storage__partition__impl.cc b/devel/electron5/files/patch-content_browser_storage__partition__impl.cc
new file mode 100644
index 000000000000..b4a2284f90e3
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_storage__partition__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/storage_partition_impl.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/storage_partition_impl.cc
+@@ -768,7 +768,7 @@ net::URLRequestContextGetter* StoragePartitionImpl::Ge
+ // TODO(jam): enable for all, still used on WebView.
+ // See copy of this ifdef in:
+ // StoragePartitionImplMap::Get
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(network::features::kNetworkService))
+ NOTREACHED();
+ #endif
diff --git a/devel/electron5/files/patch-content_browser_storage__partition__impl__map.cc b/devel/electron5/files/patch-content_browser_storage__partition__impl__map.cc
new file mode 100644
index 000000000000..bad77210c635
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_storage__partition__impl__map.cc
@@ -0,0 +1,11 @@
+--- content/browser/storage_partition_impl_map.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/storage_partition_impl_map.cc
+@@ -425,7 +425,7 @@ StoragePartitionImpl* StoragePartitionImplMap::Get(
+ bool create_request_context = true;
+ if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
+ // These ifdefs should match StoragePartitionImpl::GetURLRequestContext.
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ create_request_context = false;
+ #elif defined(OS_ANDROID)
+ create_request_context =
diff --git a/devel/electron5/files/patch-content_browser_webui_shared__resources__data__source.cc b/devel/electron5/files/patch-content_browser_webui_shared__resources__data__source.cc
new file mode 100644
index 000000000000..20d0742f869c
--- /dev/null
+++ b/devel/electron5/files/patch-content_browser_webui_shared__resources__data__source.cc
@@ -0,0 +1,14 @@
+--- content/browser/webui/shared_resources_data_source.cc.orig 2019-04-08 08:32:54 UTC
++++ content/browser/webui/shared_resources_data_source.cc
+@@ -72,9 +72,9 @@ const std::map<int, std::string> CreateMojoResourceIdT
+ return std::map<int, std::string> {
+ {IDR_MOJO_MOJO_BINDINGS_JS, "js/mojo_bindings.js"},
+ {IDR_MOJO_MOJO_BINDINGS_LITE_JS, "js/mojo_bindings_lite.js"},
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {IDR_MOJO_TIME_MOJOM_JS, "js/time.mojom.js"},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+ }
+
diff --git a/devel/electron5/files/patch-content_common_BUILD.gn b/devel/electron5/files/patch-content_common_BUILD.gn
new file mode 100644
index 000000000000..84a623759634
--- /dev/null
+++ b/devel/electron5/files/patch-content_common_BUILD.gn
@@ -0,0 +1,15 @@
+--- content/common/BUILD.gn.orig 2019-04-08 08:32:54 UTC
++++ content/common/BUILD.gn
+@@ -382,6 +382,12 @@ source_set("common") {
+ libs += [ "android" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "sandbox_init_linux.cc",
++ ]
++ }
++
+ if (is_debug && !is_component_build && enable_plugins) {
+ # Content depends on the PPAPI message logging stuff; if this isn't here,
+ # some unit test binaries won't compile. This only worked in release mode
diff --git a/devel/electron5/files/patch-content_common_common__sandbox__support__linux.cc b/devel/electron5/files/patch-content_common_common__sandbox__support__linux.cc
new file mode 100644
index 000000000000..a255b6f85604
--- /dev/null
+++ b/devel/electron5/files/patch-content_common_common__sandbox__support__linux.cc
@@ -0,0 +1,10 @@
+--- content/common/common_sandbox_support_linux.cc.orig 2019-04-08 08:18:19 UTC
++++ content/common/common_sandbox_support_linux.cc
+@@ -5,6 +5,7 @@
+ #include "content/public/common/common_sandbox_support_linux.h"
+
+ #include <sys/stat.h>
++#include <unistd.h>
+
+ #include <limits>
+ #include <memory>
diff --git a/devel/electron5/files/patch-content_common_user__agent.cc b/devel/electron5/files/patch-content_common_user__agent.cc
new file mode 100644
index 000000000000..4456692317e9
--- /dev/null
+++ b/devel/electron5/files/patch-content_common_user__agent.cc
@@ -0,0 +1,17 @@
+--- content/common/user_agent.cc.orig 2019-04-08 08:32:54 UTC
++++ content/common/user_agent.cc
+@@ -131,6 +131,14 @@ std::string BuildOSCpuInfo(bool include_android_build_
+ #endif
+ ); // NOLINT
+
++#if defined(OS_BSD)
++#if defined(__x86_64__)
++ base::StringAppendF(&os_cpu, "; Linux x86_64");
++#else
++ base::StringAppendF(&os_cpu, "; Linux i686");
++#endif
++#endif
++
+ return os_cpu;
+ }
+
diff --git a/devel/electron5/files/patch-content_gpu_BUILD.gn b/devel/electron5/files/patch-content_gpu_BUILD.gn
new file mode 100644
index 000000000000..3ecb06b8b71e
--- /dev/null
+++ b/devel/electron5/files/patch-content_gpu_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/gpu/BUILD.gn.orig 2019-04-08 08:32:54 UTC
++++ content/gpu/BUILD.gn
+@@ -133,7 +133,7 @@ target(link_target_type, "gpu_sources") {
+
+ # Use DRI on desktop Linux builds.
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+- (!is_chromecast || is_cast_desktop_build)) {
++ (!is_chromecast || is_cast_desktop_build) && !is_bsd) {
+ configs += [ "//build/config/linux/dri" ]
+ }
+ }
diff --git a/devel/electron5/files/patch-content_gpu_gpu__main.cc b/devel/electron5/files/patch-content_gpu_gpu__main.cc
new file mode 100644
index 000000000000..a5db07f08c04
--- /dev/null
+++ b/devel/electron5/files/patch-content_gpu_gpu__main.cc
@@ -0,0 +1,47 @@
+--- content/gpu/gpu_main.cc.orig 2019-04-09 12:48:19 UTC
++++ content/gpu/gpu_main.cc
+@@ -78,7 +78,7 @@
+ #include "ui/gfx/x/x11_switches.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/gpu/gpu_sandbox_hook_linux.h"
+ #include "content/public/common/sandbox_init.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+@@ -111,7 +111,7 @@ namespace content {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread*,
+ const gpu::GPUInfo*,
+ const gpu::GpuPreferences&);
+@@ -172,7 +172,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHel
+ bool EnsureSandboxInitialized(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ return StartSandboxLinux(watchdog_thread, gpu_info, gpu_prefs);
+ #elif defined(OS_WIN)
+ return StartSandboxWindows(sandbox_info_);
+@@ -367,7 +367,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) {
+@@ -402,7 +402,7 @@ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdo
+
+ return res;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ bool StartSandboxWindows(const sandbox::SandboxInterfaceInfo* sandbox_info) {
diff --git a/devel/electron5/files/patch-content_gpu_gpu__sandbox__hook__linux.cc b/devel/electron5/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..790ba884806f
--- /dev/null
+++ b/devel/electron5/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
@@ -0,0 +1,58 @@
+--- content/gpu/gpu_sandbox_hook_linux.cc.orig 2019-04-08 08:18:19 UTC
++++ content/gpu/gpu_sandbox_hook_linux.cc
+@@ -95,8 +95,9 @@ static const char kLibV4lEncPluginPath[] =
+ "/usr/lib/libv4l/plugins/libv4l-encplugin.so";
+ #endif
+
+-constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
++constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL;
+
++#if !defined(OS_BSD)
+ void AddV4L2GpuWhitelist(
+ std::vector<BrokerFilePermission>* permissions,
+ const service_manager::SandboxSeccompBPF::Options& options) {
+@@ -277,8 +278,10 @@ std::vector<BrokerFilePermission> FilePermissionsForGp
+ AddStandardGpuWhiteList(&permissions);
+ return permissions;
+ }
++#endif
+
+ void LoadArmGpuLibraries() {
++#if !defined(OS_BSD)
+ // Preload the Mali library.
+ if (UseChromecastSandboxWhitelist()) {
+ for (const char* path : kWhitelistedChromecastPaths) {
+@@ -293,6 +296,7 @@ void LoadArmGpuLibraries() {
+ // Preload the Tegra V4L2 (video decode acceleration) library.
+ dlopen(kLibTegraPath, dlopen_flag);
+ }
++#endif
+ }
+
+ bool LoadAmdGpuLibraries() {
+@@ -348,6 +352,7 @@ bool LoadLibrariesForGpu(
+ return true;
+ }
+
++#if !defined(OS_BSD)
+ sandbox::syscall_broker::BrokerCommandSet CommandSetForGPU(
+ const service_manager::SandboxLinux::Options& options) {
+ sandbox::syscall_broker::BrokerCommandSet command_set;
+@@ -368,13 +373,17 @@ bool BrokerProcessPreSandboxHook(
+ service_manager::SetProcessTitleFromCommandLine(nullptr);
+ return true;
+ }
++#endif
+
+ } // namespace
+
+ bool GpuProcessPreSandboxHook(service_manager::SandboxLinux::Options options) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ service_manager::SandboxLinux::GetInstance()->StartBrokerProcess(
+ CommandSetForGPU(options), FilePermissionsForGpu(options),
+ base::BindOnce(BrokerProcessPreSandboxHook), options);
++#endif
+
+ if (!LoadLibrariesForGpu(options))
+ return false;
diff --git a/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc b/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
new file mode 100644
index 000000000000..0ffa35fa93e3
--- /dev/null
+++ b/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
@@ -0,0 +1,38 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.cc.orig 2019-04-08 08:32:54 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.cc
+@@ -20,7 +20,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -34,7 +34,7 @@ typedef struct CGFont* CGFontRef;
+ namespace content {
+
+ PpapiBlinkPlatformImpl::PpapiBlinkPlatformImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ =
+ sk_make_sp<font_service::FontLoader>(ChildThread::Get()->GetConnector());
+ SkFontConfigInterface::SetGlobal(font_loader_);
+@@ -49,7 +49,7 @@ PpapiBlinkPlatformImpl::~PpapiBlinkPlatformImpl() {
+ }
+
+ void PpapiBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -59,7 +59,7 @@ void PpapiBlinkPlatformImpl::Shutdown() {
+ }
+
+ blink::WebSandboxSupport* PpapiBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h b/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
new file mode 100644
index 000000000000..2ec5475bec25
--- /dev/null
+++ b/devel/electron5/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
@@ -0,0 +1,25 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.h.orig 2019-04-08 08:32:54 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "content/child/blink_platform_impl.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -42,11 +42,11 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImp
+ bool sync_dir) override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron5/files/patch-content_public_app_content__packaged__services__manifest.cc b/devel/electron5/files/patch-content_public_app_content__packaged__services__manifest.cc
new file mode 100644
index 000000000000..ea5add9d44ce
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_app_content__packaged__services__manifest.cc
@@ -0,0 +1,20 @@
+--- content/public/app/content_packaged_services_manifest.cc.orig 2019-04-08 08:32:55 UTC
++++ content/public/app/content_packaged_services_manifest.cc
+@@ -23,7 +23,7 @@
+ #include "services/video_capture/manifest.h"
+ #include "services/viz/manifest.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/manifest.h"
+ #endif
+
+@@ -67,7 +67,7 @@ const service_manager::Manifest& GetContentPackagedSer
+ .PackageService(tracing::GetManifest())
+ .PackageService(video_capture::GetManifest())
+ .PackageService(viz::GetManifest())
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .PackageService(font_service::GetManifest())
+ #endif
+ #if defined(OS_CHROMEOS)
diff --git a/devel/electron5/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc b/devel/electron5/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
new file mode 100644
index 000000000000..ee77b0ab1e0a
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
@@ -0,0 +1,11 @@
+--- content/public/app/v8_snapshot_overlay_manifest.cc.orig 2019-04-08 08:18:19 UTC
++++ content/public/app/v8_snapshot_overlay_manifest.cc
+@@ -15,7 +15,7 @@ namespace content {
+ const service_manager::Manifest& GetV8SnapshotOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest {
+ service_manager::ManifestBuilder()
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .PreloadFile(kV8NativesDataDescriptor,
+ base::FilePath(FILE_PATH_LITERAL("natives_blob.bin")))
+ #if defined(USE_V8_CONTEXT_SNAPSHOT)
diff --git a/devel/electron5/files/patch-content_public_common_child__process__host.h b/devel/electron5/files/patch-content_public_common_child__process__host.h
new file mode 100644
index 000000000000..37f3d7d78f59
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_child__process__host.h
@@ -0,0 +1,20 @@
+--- content/public/common/child_process_host.h.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/child_process_host.h
+@@ -47,7 +47,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // No special behavior requested.
+ CHILD_NORMAL = 0,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Indicates that the child execed after forking may be execced from
+ // /proc/self/exe rather than using the "real" app path. This prevents
+ // autoupdate from confusing us if it changes the file out from under us.
+@@ -56,7 +56,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // gdb). In this case, you'd use GetChildPath to get the real executable
+ // file name, and then prepend the GDB command to the command line.
+ CHILD_ALLOW_SELF = 1 << 0,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Returns the pathname to be used for a child process. If a subprocess
diff --git a/devel/electron5/files/patch-content_public_common_common__param__traits__macros.h b/devel/electron5/files/patch-content_public_common_common__param__traits__macros.h
new file mode 100644
index 000000000000..3767c3b68ca0
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_common__param__traits__macros.h
@@ -0,0 +1,11 @@
+--- content/public/common/common_param_traits_macros.h.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/common_param_traits_macros.h
+@@ -325,7 +325,7 @@ IPC_STRUCT_TRAITS_BEGIN(content::RendererPreferences)
+ IPC_STRUCT_TRAITS_MEMBER(disable_client_blocked_error_page)
+ IPC_STRUCT_TRAITS_MEMBER(plugin_fullscreen_allowed)
+ IPC_STRUCT_TRAITS_MEMBER(network_contry_iso)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(system_font_family_name)
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron5/files/patch-content_public_common_content__features.cc b/devel/electron5/files/patch-content_public_common_content__features.cc
new file mode 100644
index 000000000000..9038c05e0a96
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_content__features.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_features.cc.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/content_features.cc
+@@ -493,7 +493,7 @@ const base::Feature kWebAssemblyThreads{"WebAssemblyTh
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+ // Enable WebAssembly trap handler.
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_64)
+ const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #else
diff --git a/devel/electron5/files/patch-content_public_common_content__switches.cc b/devel/electron5/files/patch-content_public_common_content__switches.cc
new file mode 100644
index 000000000000..cca3699508eb
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_content__switches.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.cc.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/content_switches.cc
+@@ -968,7 +968,7 @@ const char kDisableAudioSupportForDesktopShare[] =
+ const char kDisablePanelFitting[] = "disable-panel-fitting";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ // Allows sending text-to-speech requests to speech-dispatcher, a common
+ // Linux speech service. Because it's buggy, the user must explicitly
+ // enable it so that visiting a random webpage can't cause instability.
diff --git a/devel/electron5/files/patch-content_public_common_content__switches.h b/devel/electron5/files/patch-content_public_common_content__switches.h
new file mode 100644
index 000000000000..4ad5026ad08c
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_content__switches.h
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.h.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/content_switches.h
+@@ -270,7 +270,7 @@ CONTENT_EXPORT extern const char kEnableOSKOverscroll[
+ CONTENT_EXPORT extern const char kDisablePanelFitting[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
+ #endif
+
diff --git a/devel/electron5/files/patch-content_public_common_renderer__preferences.h b/devel/electron5/files/patch-content_public_common_renderer__preferences.h
new file mode 100644
index 000000000000..04190193cc83
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_renderer__preferences.h
@@ -0,0 +1,11 @@
+--- content/public/common/renderer_preferences.h.orig 2019-04-08 08:32:55 UTC
++++ content/public/common/renderer_preferences.h
+@@ -120,7 +120,7 @@ struct CONTENT_EXPORT RendererPreferences {
+ // Country iso of the mobile network for content detection purpose.
+ std::string network_contry_iso;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string system_font_family_name;
+ #endif
+
diff --git a/devel/electron5/files/patch-content_public_common_use__zoom__for__dsf__policy.cc b/devel/electron5/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
new file mode 100644
index 000000000000..1d8bdce8fd3c
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
@@ -0,0 +1,11 @@
+--- content/public/common/use_zoom_for_dsf_policy.cc.orig 2019-04-08 08:18:19 UTC
++++ content/public/common/use_zoom_for_dsf_policy.cc
+@@ -25,7 +25,7 @@ const base::Feature kUseZoomForDsfEnabledByDefault{
+ #endif
+
+ bool IsUseZoomForDSFEnabledByDefault() {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return true;
+ #elif defined(OS_WIN) || defined(OS_ANDROID)
+ return base::FeatureList::IsEnabled(kUseZoomForDsfEnabledByDefault);
diff --git a/devel/electron5/files/patch-content_public_test_browser__test__base.cc b/devel/electron5/files/patch-content_public_test_browser__test__base.cc
new file mode 100644
index 000000000000..5080cfd82237
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_test_browser__test__base.cc
@@ -0,0 +1,13 @@
+--- content/public/test/browser_test_base.cc.orig 2019-04-08 08:32:55 UTC
++++ content/public/test/browser_test_base.cc
+@@ -62,6 +62,10 @@
+ #include "ui/views/test/event_generator_delegate_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#endif
++
+ #if defined(OS_POSIX)
+ #include "base/process/process_handle.h"
+ #endif
diff --git a/devel/electron5/files/patch-content_public_test_mock__render__thread.cc b/devel/electron5/files/patch-content_public_test_mock__render__thread.cc
new file mode 100644
index 000000000000..54d358309dc3
--- /dev/null
+++ b/devel/electron5/files/patch-content_public_test_mock__render__thread.cc
@@ -0,0 +1,11 @@
+--- content/public/test/mock_render_thread.cc.orig 2019-04-08 08:32:55 UTC
++++ content/public/test/mock_render_thread.cc
+@@ -69,7 +69,7 @@ class MockRenderMessageFilterImpl : public mojom::Rend
+ std::move(callback).Run(false);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t platform_thread_id,
+ base::ThreadPriority thread_priority) override {}
+ #endif
diff --git a/devel/electron5/files/patch-content_renderer_media_audio_audio__device__factory.cc b/devel/electron5/files/patch-content_renderer_media_audio_audio__device__factory.cc
new file mode 100644
index 000000000000..c4b271290315
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_media_audio_audio__device__factory.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/audio/audio_device_factory.cc.orig 2019-04-08 08:32:55 UTC
++++ content/renderer/media/audio/audio_device_factory.cc
+@@ -33,7 +33,7 @@ AudioDeviceFactory* AudioDeviceFactory::factory_ = nul
+
+ namespace {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ // Due to driver deadlock issues on Windows (http://crbug/422522) there is a
+ // chance device authorization response is never received from the browser side.
diff --git a/devel/electron5/files/patch-content_renderer_media_stream_processed__local__audio__source.cc b/devel/electron5/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
new file mode 100644
index 000000000000..ef7824fc5db7
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
@@ -0,0 +1,20 @@
+--- content/renderer/media/stream/processed_local_audio_source.cc.orig 2019-04-08 08:32:55 UTC
++++ content/renderer/media/stream/processed_local_audio_source.cc
+@@ -35,7 +35,7 @@ void* const kProcessedLocalAudioSourceIdentifier =
+ const_cast<void**>(&kProcessedLocalAudioSourceIdentifier);
+
+ bool ApmInAudioServiceEnabled() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return base::FeatureList::IsEnabled(features::kWebRtcApmInAudioService);
+ #else
+ return false;
+@@ -355,7 +355,7 @@ void ProcessedLocalAudioSource::CaptureUsingProcessor(
+ bool key_pressed) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ DCHECK_LE(volume, 1.0);
+-#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_OPENBSD)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // We have a special situation on Linux where the microphone volume can be
+ // "higher than maximum". The input volume slider in the sound preference
+ // allows the user to set a scaling that is higher than 100%. It means that
diff --git a/devel/electron5/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc b/devel/electron5/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
new file mode 100644
index 000000000000..10d5c966c9d1
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc.orig 2019-04-08 08:32:55 UTC
++++ content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc
+@@ -203,7 +203,7 @@ TEST_F(WebRtcAudioRendererTest, MultipleRenderers) {
+ TEST_F(WebRtcAudioRendererTest, VerifySinkParameters) {
+ SetupRenderer(kDefaultOutputDeviceId);
+ renderer_proxy_->Start();
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ static const int kExpectedBufferSize = kHardwareSampleRate / 100;
+ #elif defined(OS_ANDROID)
+ static const int kExpectedBufferSize = 2 * kHardwareSampleRate / 100;
diff --git a/devel/electron5/files/patch-content_renderer_render__thread__impl.cc b/devel/electron5/files/patch-content_renderer_render__thread__impl.cc
new file mode 100644
index 000000000000..f8c259b5e58d
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_render__thread__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/render_thread_impl.cc.orig 2019-04-09 12:48:19 UTC
++++ content/renderer/render_thread_impl.cc
+@@ -191,12 +191,21 @@
+ #include "mojo/public/cpp/bindings/message_dumper.h"
+ #endif
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
+ #endif
++#endif
+
++#if defined(OS_BSD)
++#include <stddef.h>
++#include <stdint.h>
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#endif
++
+ using base::ThreadRestrictions;
+ using blink::WebDocument;
+ using blink::WebFrame;
+@@ -926,7 +935,7 @@ void RenderThreadImpl::Init() {
+ DCHECK(parsed_num_raster_threads) << string_value;
+ DCHECK_GT(num_raster_threads, 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ categorized_worker_pool_->SetBackgroundingCallback(
+ main_thread_scheduler_->DefaultTaskRunner(),
+ base::BindOnce(
+@@ -967,7 +976,7 @@ void RenderThreadImpl::Init() {
+ GetConnector()->BindInterface(mojom::kBrowserServiceName,
+ mojo::MakeRequest(&storage_partition_service_));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ render_message_filter()->SetThreadPriority(
+ ChildProcess::current()->io_thread_id(), base::ThreadPriority::DISPLAY);
+ #endif
+@@ -1337,11 +1346,11 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl:
+ gpu::kGpuFeatureStatusEnabled);
+ const bool enable_gpu_memory_buffers =
+ !is_gpu_compositing_disabled_ &&
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames);
+ #else
+ cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ const bool enable_media_stream_gpu_memory_buffers =
+ enable_gpu_memory_buffers &&
+ base::FeatureList::IsEnabled(
diff --git a/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.cc b/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.cc
new file mode 100644
index 000000000000..31a6cfd814a8
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/renderer_blink_platform_impl.cc.orig 2019-04-09 12:48:19 UTC
++++ content/renderer/renderer_blink_platform_impl.cc
+@@ -109,7 +109,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -202,7 +202,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ ->Clone();
+ thread_safe_sender_ = RenderThreadImpl::current()->thread_safe_sender();
+ blob_registry_.reset(new WebBlobRegistryImpl(thread_safe_sender_.get()));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ = sk_make_sp<font_service::FontLoader>(connector_.get());
+ SkFontConfigInterface::SetGlobal(font_loader_);
+ #endif
+@@ -211,7 +211,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ connector_ = service_manager::Connector::Create(&request);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (g_sandbox_enabled && sandboxEnabled()) {
+ #if defined(OS_MACOSX)
+ sandbox_support_.reset(new WebSandboxSupportMac(connector_.get()));
+@@ -239,7 +239,7 @@ RendererBlinkPlatformImpl::~RendererBlinkPlatformImpl(
+ }
+
+ void RendererBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -320,7 +320,7 @@ RendererBlinkPlatformImpl::CreateNetworkURLLoaderFacto
+
+ void RendererBlinkPlatformImpl::SetDisplayThreadPriority(
+ base::PlatformThreadId thread_id) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) {
+ render_thread->render_message_filter()->SetThreadPriority(
+ thread_id, base::ThreadPriority::DISPLAY);
+@@ -333,7 +333,7 @@ blink::BlameContext* RendererBlinkPlatformImpl::GetTop
+ }
+
+ blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ // These platforms do not require sandbox support.
diff --git a/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.h b/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.h
new file mode 100644
index 000000000000..daf3ceb03ccc
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_renderer__blink__platform__impl.h
@@ -0,0 +1,29 @@
+--- content/renderer/renderer_blink_platform_impl.h.orig 2019-04-09 12:48:19 UTC
++++ content/renderer/renderer_blink_platform_impl.h
+@@ -29,7 +29,7 @@
+ #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
+ #include "third_party/blink/public/platform/modules/webdatabase/web_database.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -264,7 +264,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ std::unique_ptr<service_manager::Connector> connector_;
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+@@ -299,7 +299,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ blink::mojom::CodeCacheHostPtrInfo code_cache_host_info_;
+ scoped_refptr<blink::mojom::ThreadSafeCodeCacheHostPtr> code_cache_host_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron5/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc b/devel/electron5/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
new file mode 100644
index 000000000000..3d0117a67802
--- /dev/null
+++ b/devel/electron5/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
@@ -0,0 +1,19 @@
+--- content/renderer/renderer_main_platform_delegate_linux.cc.orig 2019-04-08 08:18:19 UTC
++++ content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -30,6 +30,7 @@ void RendererMainPlatformDelegate::PlatformUninitializ
+ }
+
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if !defined(OS_BSD)
+ // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+ // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md
+ //
+@@ -65,7 +66,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
+ CHECK_EQ(errno, EPERM);
+ }
+ #endif // __x86_64__
+-
++#endif // ! OS_BSD
+ return true;
+ }
+
diff --git a/devel/electron5/files/patch-content_shell_BUILD.gn b/devel/electron5/files/patch-content_shell_BUILD.gn
new file mode 100644
index 000000000000..5b280089b62f
--- /dev/null
+++ b/devel/electron5/files/patch-content_shell_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/shell/BUILD.gn.orig 2019-04-08 08:32:55 UTC
++++ content/shell/BUILD.gn
+@@ -942,7 +942,7 @@ group("content_shell_crash_test") {
+ if (is_win) {
+ data_deps += [ "//build/win:copy_cdb_to_output" ]
+ }
+- if (is_posix && !is_android) {
++ if (is_posix && !is_android && !is_bsd) {
+ data_deps += [
+ "//third_party/breakpad:dump_syms($host_toolchain)",
+ "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
diff --git a/devel/electron5/files/patch-content_shell_browser_shell__browser__context.cc b/devel/electron5/files/patch-content_shell_browser_shell__browser__context.cc
new file mode 100644
index 000000000000..cca1d51f6a73
--- /dev/null
+++ b/devel/electron5/files/patch-content_shell_browser_shell__browser__context.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_context.cc.orig 2019-04-08 08:18:19 UTC
++++ content/shell/browser/shell_browser_context.cc
+@@ -28,7 +28,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -103,7 +103,7 @@ void ShellBrowserContext::InitWhileIOAllowed() {
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
+ path_ = path_.Append(std::wstring(L"content_shell"));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(
+ base::nix::GetXDGDirectory(env.get(),
diff --git a/devel/electron5/files/patch-content_shell_browser_shell__browser__main__parts.cc b/devel/electron5/files/patch-content_shell_browser_shell__browser__main__parts.cc
new file mode 100644
index 000000000000..c3236c2785a2
--- /dev/null
+++ b/devel/electron5/files/patch-content_shell_browser_shell__browser__main__parts.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_main_parts.cc.orig 2019-04-08 08:32:55 UTC
++++ content/shell/browser/shell_browser_main_parts.cc
+@@ -48,7 +48,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ #include "ui/base/ime/input_method_initializer.h"
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -126,7 +126,7 @@ int ShellBrowserMainParts::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron5/files/patch-content_shell_test__runner_test__runner.cc b/devel/electron5/files/patch-content_shell_test__runner_test__runner.cc
new file mode 100644
index 000000000000..b0df38733e4c
--- /dev/null
+++ b/devel/electron5/files/patch-content_shell_test__runner_test__runner.cc
@@ -0,0 +1,29 @@
+--- content/shell/test_runner/test_runner.cc.orig 2019-04-08 08:32:55 UTC
++++ content/shell/test_runner/test_runner.cc
+@@ -64,7 +64,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/skia_util.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "third_party/blink/public/platform/web_font_render_style.h"
+ #endif
+
+@@ -1542,7 +1542,7 @@ void TestRunner::Reset() {
+ drag_image_.reset();
+
+ blink::WebSecurityPolicy::ClearOriginAccessList();
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ blink::WebFontRenderStyle::SetSubpixelPositioning(false);
+ #endif
+
+@@ -2091,7 +2091,7 @@ void TestRunner::AddOriginAccessAllowListEntry(
+ }
+
+ void TestRunner::SetTextSubpixelPositioning(bool value) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Since FontConfig doesn't provide a variable to control subpixel
+ // positioning, we'll fall back to setting it globally for all fonts.
+ blink::WebFontRenderStyle::SetSubpixelPositioning(value);
diff --git a/devel/electron5/files/patch-content_test_content__test__suite.cc b/devel/electron5/files/patch-content_test_content__test__suite.cc
new file mode 100644
index 000000000000..fbd3fec4c6a4
--- /dev/null
+++ b/devel/electron5/files/patch-content_test_content__test__suite.cc
@@ -0,0 +1,18 @@
+--- content/test/content_test_suite.cc.orig 2019-04-08 08:32:55 UTC
++++ content/test/content_test_suite.cc
+@@ -85,6 +85,7 @@ void ContentTestSuite::Initialize() {
+ // to initialize GL, so don't do it here.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_child_process = command_line->HasSwitch(switches::kTestChildProcess);
++#if !defined(OS_BSD)
+ if (!is_child_process) {
+ gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
+ auto* gpu_feature_info = gpu::GetTestGpuThreadHolder()->GetGpuFeatureInfo();
+@@ -92,6 +93,7 @@ void ContentTestSuite::Initialize() {
+ gpu_feature_info->disabled_extensions);
+ gl::init::InitializeExtensionSettingsOneOffPlatform();
+ }
++#endif
+ testing::TestEventListeners& listeners =
+ testing::UnitTest::GetInstance()->listeners();
+ listeners.Append(new TestInitializationListener);
diff --git a/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc b/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
new file mode 100644
index 000000000000..269d7b9da7b3
--- /dev/null
+++ b/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
@@ -0,0 +1,29 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.cc.orig 2019-04-08 08:18:20 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -17,7 +17,7 @@ namespace content {
+ UtilityBlinkPlatformWithSandboxSupportImpl::
+ UtilityBlinkPlatformWithSandboxSupportImpl(
+ service_manager::Connector* connector) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ = sk_make_sp<font_service::FontLoader>(connector);
+ SkFontConfigInterface::SetGlobal(font_loader_);
+ sandbox_support_ = std::make_unique<WebSandboxSupportLinux>(font_loader_);
+@@ -31,7 +31,7 @@ UtilityBlinkPlatformWithSandboxSupportImpl::
+
+ blink::WebSandboxSupport*
+ UtilityBlinkPlatformWithSandboxSupportImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h b/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
new file mode 100644
index 000000000000..eb29dd292c9c
--- /dev/null
+++ b/devel/electron5/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
@@ -0,0 +1,24 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.h.orig 2019-04-08 08:18:20 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.h
+@@ -11,7 +11,7 @@
+ #include "build/build_config.h"
+ #include "third_party/blink/public/platform/platform.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -39,10 +39,10 @@ class UtilityBlinkPlatformWithSandboxSupportImpl : pub
+ blink::WebSandboxSupport* GetSandboxSupport() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron5/files/patch-device_bluetooth_BUILD.gn b/devel/electron5/files/patch-device_bluetooth_BUILD.gn
new file mode 100644
index 000000000000..abd58abba84e
--- /dev/null
+++ b/devel/electron5/files/patch-device_bluetooth_BUILD.gn
@@ -0,0 +1,11 @@
+--- device/bluetooth/BUILD.gn.orig 2019-04-08 08:32:55 UTC
++++ device/bluetooth/BUILD.gn
+@@ -277,7 +277,7 @@ component("bluetooth") {
+ ]
+ }
+
+- if (is_chromeos || is_linux) {
++ if (is_chromeos || (is_linux && !is_bsd)) {
+ if (use_dbus) {
+ sources += [
+ "bluez/bluetooth_adapter_bluez.cc",
diff --git a/devel/electron5/files/patch-device_gamepad_gamepad__provider.cc b/devel/electron5/files/patch-device_gamepad_gamepad__provider.cc
new file mode 100644
index 000000000000..2554909b1c07
--- /dev/null
+++ b/devel/electron5/files/patch-device_gamepad_gamepad__provider.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/gamepad_provider.cc.orig 2019-04-08 08:32:56 UTC
++++ device/gamepad/gamepad_provider.cc
+@@ -164,7 +164,7 @@ void GamepadProvider::Initialize(std::unique_ptr<Gamep
+ monitor->AddDevicesChangedObserver(this);
+
+ polling_thread_.reset(new base::Thread("Gamepad polling thread"));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, the data fetcher needs to watch file descriptors, so the message
+ // loop needs to be a libevent loop.
+ const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_IO;
diff --git a/devel/electron5/files/patch-device_usb_BUILD.gn b/devel/electron5/files/patch-device_usb_BUILD.gn
new file mode 100644
index 000000000000..8db32d7ec105
--- /dev/null
+++ b/devel/electron5/files/patch-device_usb_BUILD.gn
@@ -0,0 +1,21 @@
+--- device/usb/BUILD.gn.orig 2019-04-08 08:32:56 UTC
++++ device/usb/BUILD.gn
+@@ -112,10 +112,17 @@ static_library("usb") {
+ ]
+ }
+
+- if (is_android || is_chromeos || is_linux) {
++ if (is_android || is_chromeos || (is_linux && !is_bsd)) {
+ sources += [
+ "usb_device_handle_usbfs.cc",
+ "usb_device_handle_usbfs.h",
++ ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "usb_device_linux.cc",
++ "usb_device_linux.h",
+ ]
+ }
+
diff --git a/devel/electron5/files/patch-device_usb_usb__context.cc b/devel/electron5/files/patch-device_usb_usb__context.cc
new file mode 100644
index 000000000000..976725befc57
--- /dev/null
+++ b/devel/electron5/files/patch-device_usb_usb__context.cc
@@ -0,0 +1,12 @@
+--- device/usb/usb_context.cc.orig 2019-04-08 08:18:20 UTC
++++ device/usb/usb_context.cc
+@@ -58,7 +58,9 @@ void UsbContext::UsbEventHandler::Run() {
+
+ void UsbContext::UsbEventHandler::Stop() {
+ base::subtle::Release_Store(&running_, 0);
++#if !defined(OS_FREEBSD) // XXX(rene) not available in base version
+ libusb_interrupt_handle_event(context_);
++#endif
+ }
+
+ UsbContext::UsbContext(PlatformUsbContext context) : context_(context) {
diff --git a/devel/electron5/files/patch-device_usb_usb__error.cc b/devel/electron5/files/patch-device_usb_usb__error.cc
new file mode 100644
index 000000000000..919ca8366d6b
--- /dev/null
+++ b/devel/electron5/files/patch-device_usb_usb__error.cc
@@ -0,0 +1,11 @@
+--- device/usb/usb_error.cc.orig 2019-04-08 08:18:20 UTC
++++ device/usb/usb_error.cc
+@@ -9,7 +9,7 @@
+ namespace device {
+
+ std::string ConvertPlatformUsbErrorToString(int errcode) {
+- return libusb_strerror(static_cast<libusb_error>(errcode));
++ return "";
+ }
+
+ } // namespace device
diff --git a/devel/electron5/files/patch-device_usb_usb__service__impl.cc b/devel/electron5/files/patch-device_usb_usb__service__impl.cc
new file mode 100644
index 000000000000..e528cef5cbbd
--- /dev/null
+++ b/devel/electron5/files/patch-device_usb_usb__service__impl.cc
@@ -0,0 +1,45 @@
+--- device/usb/usb_service_impl.cc.orig 2019-04-08 08:32:56 UTC
++++ device/usb/usb_service_impl.cc
+@@ -231,8 +231,10 @@ UsbServiceImpl::UsbServiceImpl()
+ }
+
+ UsbServiceImpl::~UsbServiceImpl() {
++#if !defined(OS_FREEBSD)
+ if (hotplug_enabled_)
+ libusb_hotplug_deregister_callback(context_->context(), hotplug_handle_);
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void UsbServiceImpl::GetDevices(const GetDevicesCallback& callback) {
+@@ -287,6 +289,7 @@ void UsbServiceImpl::OnUsbContext(scoped_refptr<UsbCon
+
+ context_ = std::move(context);
+
++#if !defined(OS_FREEBSD)
+ int rv = libusb_hotplug_register_callback(
+ context_->context(),
+ static_cast<libusb_hotplug_event>(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
+@@ -299,6 +302,7 @@ void UsbServiceImpl::OnUsbContext(scoped_refptr<UsbCon
+
+ // This will call any enumeration callbacks queued while initializing.
+ RefreshDevices();
++#endif // !defined(OS_FREEBSD)
+
+ #if defined(OS_WIN)
+ DeviceMonitorWin* device_monitor = DeviceMonitorWin::GetForAllInterfaces();
+@@ -495,6 +499,7 @@ void UsbServiceImpl::RemoveDevice(scoped_refptr<UsbDev
+ device->OnDisconnect();
+ }
+
++#if !defined(OS_FREEBSD)
+ // static
+ int LIBUSB_CALL UsbServiceImpl::HotplugCallback(libusb_context* context,
+ libusb_device* device_raw,
+@@ -528,6 +533,7 @@ int LIBUSB_CALL UsbServiceImpl::HotplugCallback(libusb
+
+ return 0;
+ }
++#endif // !defined(OS_FREEBSD)
+
+ void UsbServiceImpl::OnPlatformDeviceAdded(
+ ScopedLibusbDeviceRef platform_device) {
diff --git a/devel/electron5/files/patch-device_usb_usb__service__impl.h b/devel/electron5/files/patch-device_usb_usb__service__impl.h
new file mode 100644
index 000000000000..ad11f82527ed
--- /dev/null
+++ b/devel/electron5/files/patch-device_usb_usb__service__impl.h
@@ -0,0 +1,26 @@
+--- device/usb/usb_service_impl.h.orig 2019-04-08 08:18:20 UTC
++++ device/usb/usb_service_impl.h
+@@ -73,11 +73,13 @@ class UsbServiceImpl :
+ scoped_refptr<UsbDeviceImpl> device);
+ void RemoveDevice(scoped_refptr<UsbDeviceImpl> device);
+
++#if !defined(OS_FREEBSD)
+ // Handle hotplug events from libusb.
+ static int LIBUSB_CALL HotplugCallback(libusb_context* context,
+ libusb_device* device,
+ libusb_hotplug_event event,
+ void* user_data);
++#endif
+ // These functions release a reference to the provided platform device.
+ void OnPlatformDeviceAdded(ScopedLibusbDeviceRef platform_device);
+ void OnPlatformDeviceRemoved(ScopedLibusbDeviceRef platform_device);
+@@ -97,7 +99,9 @@ class UsbServiceImpl :
+ // connected instead of only when a full enumeration is requested.
+ // TODO(reillyg): Support this on all platforms. crbug.com/411715
+ bool hotplug_enabled_ = false;
++#if !defined(OS_FREEBSD)
+ libusb_hotplug_callback_handle hotplug_handle_;
++#endif
+
+ // Enumeration callbacks are queued until an enumeration completes.
+ bool enumeration_ready_ = false;
diff --git a/devel/electron5/files/patch-electron_BUILD.gn b/devel/electron5/files/patch-electron_BUILD.gn
new file mode 100644
index 000000000000..2daec0384286
--- /dev/null
+++ b/devel/electron5/files/patch-electron_BUILD.gn
@@ -0,0 +1,36 @@
+--- electron/BUILD.gn.orig 2019-07-23 18:38:39 UTC
++++ electron/BUILD.gn
+@@ -366,6 +366,15 @@ static_library("electron_lib") {
+ sources = filenames.lib_sources
+ set_sources_assignment_filter(sources_assignment_filter)
+
++ if (is_bsd) {
++ sources -= [
++ "atom/common/crash_reporter/crash_reporter_linux.cc",
++ "atom/common/crash_reporter/crash_reporter_linux.h",
++ "atom/common/crash_reporter/linux/crash_dump_handler.cc",
++ "atom/common/crash_reporter/linux/crash_dump_handler.h",
++ ]
++ }
++
+ if (is_component_build) {
+ defines += [ "NODE_SHARED_MODE" ]
+ }
+@@ -440,7 +449,7 @@ static_library("electron_lib") {
+ if (is_win) {
+ libs += [ "dwmapi.lib" ]
+ }
+- if (is_linux || is_win) {
++ if ((is_linux && !is_bsd) || is_win) {
+ deps += [ "//third_party/breakpad:client" ]
+ include_dirs += [ "//third_party/breakpad" ]
+ }
+@@ -1057,7 +1066,7 @@ dist_zip("electron_dist_zip") {
+ ":licenses",
+ ":electron_version",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//sandbox/linux:chrome_sandbox" ]
+ }
+ outputs = [
diff --git a/devel/electron5/files/patch-electron_atom_app_atom__main.cc b/devel/electron5/files/patch-electron_atom_app_atom__main.cc
new file mode 100644
index 000000000000..0074c4419b54
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_app_atom__main.cc
@@ -0,0 +1,35 @@
+--- electron/atom/app/atom_main.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/app/atom_main.cc
+@@ -25,12 +25,12 @@
+ #include "base/win/windows_version.h"
+ #include "content/public/app/sandbox_helper_win.h"
+ #include "sandbox/win/src/sandbox_types.h"
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+ #include <unistd.h>
+ #include <cstdio>
+ #include "atom/app/atom_main_delegate.h" // NOLINT
+ #include "content/public/app/content_main.h"
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+ #include <mach-o/dyld.h>
+ #include <unistd.h>
+ #include <cstdio>
+@@ -181,7 +181,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, w
+ return content::ContentMain(params);
+ }
+
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
+@@ -202,7 +202,7 @@ int main(int argc, char* argv[]) {
+ return content::ContentMain(params);
+ }
+
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
diff --git a/devel/electron5/files/patch-electron_atom_app_atom__main__delegate.cc b/devel/electron5/files/patch-electron_atom_app_atom__main__delegate.cc
new file mode 100644
index 000000000000..dac3eabea8cd
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_app_atom__main__delegate.cc
@@ -0,0 +1,29 @@
+--- electron/atom/app/atom_main_delegate.cc.orig 2019-12-17 03:11:25 UTC
++++ electron/atom/app/atom_main_delegate.cc
+@@ -8,7 +8,7 @@
+ #include <memory>
+ #include <string>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
+@@ -188,7 +188,7 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_
+ base::win::DisableHandleVerifier();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Check for --no-sandbox parameter when running as root.
+ if (getuid() == 0 && IsSandboxEnabled(command_line))
+ LOG(FATAL) << "Running as root without --"
+@@ -213,7 +213,7 @@ void AtomMainDelegate::PostEarlyInitialization(bool is
+ ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
+ if (!locale_file_path.empty()) {
+ custom_locale = locale;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
+ * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
+ g_setenv("LC_ALL", custom_locale.c_str(), TRUE);
diff --git a/devel/electron5/files/patch-electron_atom_browser_api_atom__api__app.cc b/devel/electron5/files/patch-electron_atom_browser_api_atom__api__app.cc
new file mode 100644
index 000000000000..97f47ba7a2f3
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_api_atom__api__app.cc
@@ -0,0 +1,38 @@
+--- electron/atom/browser/api/atom_api_app.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/api/atom_api_app.cc
+@@ -609,7 +609,7 @@ void App::OnWillFinishLaunching() {
+ }
+
+ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Set the application name for audio streams shown in external
+ // applications. Only affects pulseaudio currently.
+ media::AudioManager::SetGlobalAppName(Browser::Get()->GetName());
+@@ -864,7 +864,7 @@ void App::SetPath(mate::Arguments* args,
+ }
+
+ void App::SetDesktopName(const std::string& desktop_name) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ env->SetVar("CHROME_DESKTOP", desktop_name);
+ #endif
+@@ -1313,7 +1313,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
+ .SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("setAboutPanelOptions",
+ base::Bind(&Browser::SetAboutPanelOptions, browser))
+ .SetMethod("showAboutPanel",
+@@ -1324,7 +1324,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("getJumpListSettings", &App::GetJumpListSettings)
+ .SetMethod("setJumpList", &App::SetJumpList)
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("isUnityRunning",
+ base::Bind(&Browser::IsUnityRunning, browser))
+ #endif
diff --git a/devel/electron5/files/patch-electron_atom_browser_api_atom__api__web__contents.cc b/devel/electron5/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
new file mode 100644
index 000000000000..8e548542e2ee
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
@@ -0,0 +1,34 @@
+--- electron/atom/browser/api/atom_api_web_contents.cc.orig 2019-12-17 03:11:25 UTC
++++ electron/atom/browser/api/atom_api_web_contents.cc
+@@ -97,11 +97,11 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "content/public/common/renderer_preferences.h"
+ #include "ui/gfx/font_render_params.h"
+ #endif
+@@ -428,7 +428,7 @@ void WebContents::InitWithSessionAndOptions(
+ auto* prefs = web_contents()->GetMutableRendererPrefs();
+ prefs->accept_languages = g_browser_process->GetApplicationLocale();
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Update font settings.
+ static const base::NoDestructor<gfx::FontRenderParams> params(
+ gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr));
+@@ -445,7 +445,7 @@ void WebContents::InitWithSessionAndOptions(
+ base::TimeDelta interval;
+ if (ui::TextInsertionCaretBlinkPeriod(&interval))
+ prefs->caret_blink_interval = interval;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
+ prefs->caret_blink_interval = linux_ui->GetCursorBlinkInterval();
diff --git a/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts.cc b/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts.cc
new file mode 100644
index 000000000000..6aa2b67607b3
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- electron/atom/browser/atom_browser_main_parts.cc.orig 2019-12-19 06:05:28 UTC
++++ electron/atom/browser/atom_browser_main_parts.cc
+@@ -6,7 +6,7 @@
+
+ #include <utility>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
diff --git a/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc b/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
new file mode 100644
index 000000000000..6555d08f055e
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
@@ -0,0 +1,20 @@
+--- electron/atom/browser/atom_browser_main_parts_posix.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/atom_browser_main_parts_posix.cc
+@@ -182,6 +182,9 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+@@ -189,6 +192,7 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ // shadow stacks) bloat the stack frames, so we need to increase the stack
+ // size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ // TODO(viettrungluu,willchan): crbug.com/29675 - This currently leaks, so
+ // if you change this, you'll probably need to change the suppression.
diff --git a/devel/electron5/files/patch-electron_atom_browser_atom__paths.h b/devel/electron5/files/patch-electron_atom_browser_atom__paths.h
new file mode 100644
index 000000000000..3f7191c61ed9
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_atom__paths.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/atom_paths.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/atom_paths.h
+@@ -26,7 +26,7 @@ enum {
+ DIR_USER_CACHE, // Directory where user cache can be written.
+ DIR_APP_LOGS, // Directory where app logs live
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_APP_DATA, // Application Data directory under the user profile.
+ #else
+ DIR_APP_DATA = base::DIR_APP_DATA,
diff --git a/devel/electron5/files/patch-electron_atom_browser_browser.h b/devel/electron5/files/patch-electron_atom_browser_browser.h
new file mode 100644
index 000000000000..d7144305fcef
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_browser.h
@@ -0,0 +1,33 @@
+--- electron/atom/browser/browser.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/browser.h
+@@ -182,7 +182,7 @@ class Browser : public WindowListObserver {
+
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ void ShowAboutPanel();
+ void SetAboutPanelOptions(const base::DictionaryValue& options);
+ #endif
+@@ -210,10 +210,10 @@ class Browser : public WindowListObserver {
+ PCWSTR GetAppUserModelID();
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Whether Unity launcher is running.
+ bool IsUnityRunning();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Tell the application to open a file.
+ bool OpenFile(const std::string& file_path);
+@@ -294,7 +294,7 @@ class Browser : public WindowListObserver {
+
+ std::unique_ptr<util::Promise> ready_promise_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::DictionaryValue about_panel_options_;
+ #endif
+
diff --git a/devel/electron5/files/patch-electron_atom_browser_native__window__views.cc b/devel/electron5/files/patch-electron_atom_browser_native__window__views.cc
new file mode 100644
index 000000000000..684b3c62ad07
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_native__window__views.cc
@@ -0,0 +1,47 @@
+--- electron/atom/browser/native_window_views.cc.orig 2019-08-19 21:30:51 UTC
++++ electron/atom/browser/native_window_views.cc
+@@ -290,7 +290,7 @@ NativeWindowViews::NativeWindowViews(const mate::Dicti
+ last_normal_bounds_ = GetBounds();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Listen to move events.
+ aura::Window* window = GetNativeWindow();
+ if (window)
+@@ -306,7 +306,7 @@ NativeWindowViews::~NativeWindowViews() {
+ SetForwardMouseMessages(false);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1228,7 +1228,7 @@ void NativeWindowViews::OnWidgetBoundsChanged(views::W
+ }
+
+ void NativeWindowViews::OnWidgetDestroying(views::Widget* widget) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1321,7 +1321,7 @@ void NativeWindowViews::OnWidgetMove() {
+ void NativeWindowViews::HandleKeyboardEvent(
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (event.windows_key_code == ui::VKEY_BROWSER_BACK)
+ NotifyWindowExecuteAppCommand(kBrowserBackward);
+ else if (event.windows_key_code == ui::VKEY_BROWSER_FORWARD)
+@@ -1333,7 +1333,7 @@ void NativeWindowViews::HandleKeyboardEvent(
+ root_view_->HandleKeyEvent(event);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* event) {
+ if (event->type() != ui::ET_MOUSE_PRESSED)
+ return;
diff --git a/devel/electron5/files/patch-electron_atom_browser_native__window__views.h b/devel/electron5/files/patch-electron_atom_browser_native__window__views.h
new file mode 100644
index 000000000000..7ab9fa37ba58
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_native__window__views.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/native_window_views.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/native_window_views.h
+@@ -209,7 +209,7 @@ class NativeWindowViews : public NativeWindow,
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // ui::EventHandler:
+ void OnMouseEvent(ui::MouseEvent* event) override;
+ #endif
diff --git a/devel/electron5/files/patch-electron_atom_browser_relauncher__linux.cc b/devel/electron5/files/patch-electron_atom_browser_relauncher__linux.cc
new file mode 100644
index 000000000000..132838134d02
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_relauncher__linux.cc
@@ -0,0 +1,32 @@
+--- electron/atom/browser/relauncher_linux.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/relauncher_linux.cc
+@@ -6,8 +6,10 @@
+
+ #include <fcntl.h>
+ #include <signal.h>
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
+ #include <sys/signalfd.h>
++#endif
+
+ #include "base/files/file_util.h"
+ #include "base/files/scoped_file.h"
+@@ -26,6 +28,10 @@ void RelauncherSynchronizeWithParent() {
+ base::ScopedFD relauncher_sync_fd(kRelauncherSyncFD);
+ static const auto signum = SIGUSR2;
+
++#if defined(__FreeBSD__)
++ PLOG(ERROR) << "signalfd & prctl";
++ fprintf(stderr, "Not Implemented signalfd & prctl in atom/browser/relauncher_linux.cc");
++#else
+ // send signum to current process when parent process ends.
+ if (HANDLE_EINTR(prctl(PR_SET_PDEATHSIG, signum)) != 0) {
+ PLOG(ERROR) << "prctl";
+@@ -50,6 +56,7 @@ void RelauncherSynchronizeWithParent() {
+
+ // Wait for the parent to exit
+ parentWaiter.Wait();
++#endif
+ }
+
+ int LaunchProgram(const StringVector& relauncher_args,
diff --git a/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc b/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc
new file mode 100644
index 000000000000..2f4f2d4a5a61
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc
@@ -0,0 +1,38 @@
+--- electron/atom/browser/ui/views/atom_views_delegate.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/ui/views/atom_views_delegate.cc
+@@ -9,7 +9,7 @@
+ #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+ #include "ui/views/widget/native_widget_aura.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -17,7 +17,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool IsDesktopEnvironmentUnity() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::nix::DesktopEnvironment desktop_env =
+@@ -68,7 +68,7 @@ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow
+ return false;
+ }
+
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return NULL;
+ }
+@@ -100,7 +100,7 @@ void ViewsDelegate::OnBeforeWidgetInit(
+ }
+
+ bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Ubuntu Unity, the system always provides a title bar for maximized
+ // windows.
+ if (!maximized)
diff --git a/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h b/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h
new file mode 100644
index 000000000000..f282feba6bac
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/ui/views/atom_views_delegate.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/ui/views/atom_views_delegate.h
+@@ -37,7 +37,7 @@ class ViewsDelegate : public views::ViewsDelegate {
+ HICON GetDefaultWindowIcon() const override;
+ HICON GetSmallWindowIcon() const override;
+ bool IsWindowInMetro(gfx::NativeWindow window) const override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ #endif
+ views::NonClientFrameView* CreateDefaultNonClientFrameView(
diff --git a/devel/electron5/files/patch-electron_atom_browser_ui_views_submenu__button.cc b/devel/electron5/files/patch-electron_atom_browser_ui_views_submenu__button.cc
new file mode 100644
index 000000000000..a51eb62cdf35
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_browser_ui_views_submenu__button.cc
@@ -0,0 +1,11 @@
+--- electron/atom/browser/ui/views/submenu_button.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/browser/ui/views/submenu_button.cc
+@@ -25,7 +25,7 @@ SubmenuButton::SubmenuButton(const base::string16& tit
+ : views::MenuButton(gfx::RemoveAcceleratorChar(title, '&', NULL, NULL),
+ menu_button_listener),
+ background_color_(background_color) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dont' use native style border.
+ SetBorder(CreateDefaultBorder());
+ #endif
diff --git a/devel/electron5/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc b/devel/electron5/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
new file mode 100644
index 000000000000..40e69d413987
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
@@ -0,0 +1,42 @@
+--- electron/atom/common/api/atom_api_crash_reporter.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/api/atom_api_crash_reporter.cc
+@@ -35,15 +35,23 @@ struct Converter<CrashReporter::UploadReportResult> {
+ namespace {
+
+ void AddExtraParameter(const std::string& key, const std::string& value) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->AddExtraParameter(key, value);
++#endif
+ }
+
+ void RemoveExtraParameter(const std::string& key) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->RemoveExtraParameter(key);
++#endif
+ }
+
+ std::map<std::string, std::string> GetParameters() {
++#if !defined(OS_BSD)
+ return CrashReporter::GetInstance()->GetParameters();
++#else
++ return std::map<std::string, std::string>();
++#endif
+ }
+
+ void Initialize(v8::Local<v8::Object> exports,
+@@ -51,6 +59,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ v8::Local<v8::Context> context,
+ void* priv) {
+ mate::Dictionary dict(context->GetIsolate(), exports);
++#if !defined(OS_BSD)
+ auto reporter = base::Unretained(CrashReporter::GetInstance());
+ dict.SetMethod("start", base::Bind(&CrashReporter::Start, reporter));
+ dict.SetMethod("addExtraParameter", &AddExtraParameter);
+@@ -62,6 +71,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ base::Bind(&CrashReporter::SetUploadToServer, reporter));
+ dict.SetMethod("getUploadToServer",
+ base::Bind(&CrashReporter::GetUploadToServer, reporter));
++#endif
+ }
+
+ } // namespace
diff --git a/devel/electron5/files/patch-electron_atom_common_api_atom__bindings.cc b/devel/electron5/files/patch-electron_atom_common_api_atom__bindings.cc
new file mode 100644
index 000000000000..0d33a0aefeee
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_api_atom__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/api/atom_bindings.cc.orig 2019-12-19 06:08:26 UTC
++++ electron/atom/common/api/atom_bindings.cc
+@@ -273,7 +273,7 @@ void AtomBindings::DidReceiveMemoryDump(
+ if (base::GetCurrentProcId() == dump.pid()) {
+ mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
+ const auto& osdump = dump.os_dump();
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ dict.Set("residentSet", osdump.resident_set_kb);
+ #endif
+ dict.Set("private", osdump.private_footprint_kb);
diff --git a/devel/electron5/files/patch-electron_atom_common_atom__command__line.cc b/devel/electron5/files/patch-electron_atom_common_atom__command__line.cc
new file mode 100644
index 000000000000..a735ffad0884
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_atom__command__line.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/atom_command_line.cc
+@@ -26,7 +26,7 @@ void AtomCommandLine::Init(int argc, base::CommandLine
+ argv_.assign(argv, argv + argc);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AtomCommandLine::InitializeFromCommandLine() {
+ argv_ = base::CommandLine::ForCurrentProcess()->argv();
diff --git a/devel/electron5/files/patch-electron_atom_common_atom__command__line.h b/devel/electron5/files/patch-electron_atom_common_atom__command__line.h
new file mode 100644
index 000000000000..556a52335549
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_atom__command__line.h
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/atom_command_line.h
+@@ -21,7 +21,7 @@ class AtomCommandLine {
+
+ static void Init(int argc, base::CommandLine::CharType** argv);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux the command line has to be read from base::CommandLine since
+ // it is using zygote.
+ static void InitializeFromCommandLine();
diff --git a/devel/electron5/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc b/devel/electron5/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
new file mode 100644
index 000000000000..f0b4664f0b16
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
@@ -0,0 +1,14 @@
+--- electron/atom/common/crash_reporter/crash_reporter.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/crash_reporter/crash_reporter.cc
+@@ -102,7 +102,11 @@ CrashReporter* CrashReporter::GetInstance() {
+ #endif
+
+ void CrashReporter::StartInstance(const mate::Dictionary& options) {
++#if !defined(OS_BSD)
+ auto* reporter = GetInstance();
++#else
++ CrashReporter *reporter = NULL;
++#endif
+ if (!reporter)
+ return;
+
diff --git a/devel/electron5/files/patch-electron_atom_common_node__bindings.cc b/devel/electron5/files/patch-electron_atom_common_node__bindings.cc
new file mode 100644
index 000000000000..f54a497962e0
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_node__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/node_bindings.cc.orig 2019-06-26 20:05:00 UTC
++++ electron/atom/common/node_bindings.cc
+@@ -210,7 +210,7 @@ void NodeBindings::Initialize() {
+ node::g_standalone_mode = browser_env_ == BROWSER;
+ node::g_upstream_node_mode = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Get real command line in renderer process forked by zygote.
+ if (browser_env_ != BROWSER)
+ AtomCommandLine::InitializeFromCommandLine();
diff --git a/devel/electron5/files/patch-electron_atom_common_node__bindings__linux.cc b/devel/electron5/files/patch-electron_atom_common_node__bindings__linux.cc
new file mode 100644
index 000000000000..62927deda81e
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_node__bindings__linux.cc
@@ -0,0 +1,69 @@
+--- electron/atom/common/node_bindings_linux.cc.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/node_bindings_linux.cc
+@@ -4,17 +4,31 @@
+
+ #include "atom/common/node_bindings_linux.h"
+
++#if !defined(OS_BSD)
+ #include <sys/epoll.h>
++#else
++#include <errno.h>
++#include <sys/select.h>
++#include <sys/sysctl.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#endif
+
+ namespace atom {
+
+ NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironment browser_env)
++#if !defined(OS_BSD)
+ : NodeBindings(browser_env), epoll_(epoll_create(1)) {
++#else
++ : NodeBindings(browser_env) {
++#endif
++#if !defined(OS_BSD)
+ int backend_fd = uv_backend_fd(uv_loop_);
+ struct epoll_event ev = {0};
+ ev.events = EPOLLIN;
+ ev.data.fd = backend_fd;
+ epoll_ctl(epoll_, EPOLL_CTL_ADD, backend_fd, &ev);
++#endif
+ }
+
+ NodeBindingsLinux::~NodeBindingsLinux() {}
+@@ -37,6 +51,7 @@ void NodeBindingsLinux::OnWatcherQueueChanged(uv_loop_
+ }
+
+ void NodeBindingsLinux::PollEvents() {
++#if !defined(OS_BSD)
+ int timeout = uv_backend_timeout(uv_loop_);
+
+ // Wait for new libuv events.
+@@ -45,6 +60,26 @@ void NodeBindingsLinux::PollEvents() {
+ struct epoll_event ev;
+ r = epoll_wait(epoll_, &ev, 1, timeout);
+ } while (r == -1 && errno == EINTR);
++#else
++ struct timeval tv;
++ int timeout = uv_backend_timeout(uv_loop_);
++ if (timeout != -1) {
++ tv.tv_sec = timeout / 1000;
++ tv.tv_usec = (timeout % 1000) * 1000;
++ }
++
++ fd_set readset;
++ int fd = uv_backend_fd(uv_loop_);
++ FD_ZERO(&readset);
++ FD_SET(fd, &readset);
++
++ // Wait for new libuv events.
++ int r;
++ do {
++ r = select(fd + 1, &readset, nullptr, nullptr,
++ timeout == -1 ? nullptr : &tv);
++ } while (r == -1 && errno == EINTR);
++#endif
+ }
+
+ // static
diff --git a/devel/electron5/files/patch-electron_atom_common_platform__util.h b/devel/electron5/files/patch-electron_atom_common_platform__util.h
new file mode 100644
index 000000000000..15c526cf5e51
--- /dev/null
+++ b/devel/electron5/files/patch-electron_atom_common_platform__util.h
@@ -0,0 +1,11 @@
+--- electron/atom/common/platform_util.h.orig 2019-04-04 16:09:31 UTC
++++ electron/atom/common/platform_util.h
+@@ -64,7 +64,7 @@ bool GetLoginItemEnabled();
+ bool SetLoginItemEnabled(bool enabled);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a success flag.
+ // Unlike libgtkui, does *not* use "chromium-browser.desktop" as a fallback.
+ bool GetDesktopName(std::string* setme);
diff --git a/devel/electron5/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc b/devel/electron5/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..2d44062601e5
--- /dev/null
+++ b/devel/electron5/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,20 @@
+--- electron/chromium_src/chrome/browser/process_singleton_posix.cc.orig 2019-12-17 03:11:25 UTC
++++ electron/chromium_src/chrome/browser/process_singleton_posix.cc
+@@ -95,7 +95,7 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -862,7 +862,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ // The other process is shutting down, it's safe to start a new process.
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron5/files/patch-electron_default__app_default__app.js b/devel/electron5/files/patch-electron_default__app_default__app.js
new file mode 100644
index 000000000000..ad4007078dbd
--- /dev/null
+++ b/devel/electron5/files/patch-electron_default__app_default__app.js
@@ -0,0 +1,11 @@
+--- electron/default_app/default_app.js.orig 2019-12-19 06:10:58 UTC
++++ electron/default_app/default_app.js
+@@ -27,7 +27,7 @@ exports.load = async (appUrl) => {
+ show: false
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ options.icon = path.join(__dirname, 'icon.png')
+ }
+
diff --git a/devel/electron5/files/patch-electron_lib_browser_api_app.js b/devel/electron5/files/patch-electron_lib_browser_api_app.js
new file mode 100644
index 000000000000..2dbbfb776b86
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_browser_api_app.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/app.js.orig 2019-06-04 19:13:27 UTC
++++ electron/lib/browser/api/app.js
+@@ -84,7 +84,7 @@ if (process.platform === 'darwin') {
+ }
+ }
+
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ app.launcher = {
+ setBadgeCount: bindings.unityLauncherSetBadgeCount,
+ getBadgeCount: bindings.unityLauncherGetBadgeCount,
diff --git a/devel/electron5/files/patch-electron_lib_browser_api_dialog.js b/devel/electron5/files/patch-electron_lib_browser_api_dialog.js
new file mode 100644
index 000000000000..4f67fb9f9434
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_browser_api_dialog.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/dialog.js.orig 2019-05-23 04:03:08 UTC
++++ electron/lib/browser/api/dialog.js
+@@ -54,7 +54,7 @@ const normalizeAccessKey = (text) => {
+ // existing single underscores with a second underscore, replace double
+ // ampersands with a single ampersand, and replace a single ampersand with
+ // a single underscore
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return text.replace(/_/g, '__').replace(/&(.?)/g, (match, after) => {
+ if (after === '&') return after
+ return `_${after}`
diff --git a/devel/electron5/files/patch-electron_lib_browser_api_menu-item-roles.js b/devel/electron5/files/patch-electron_lib_browser_api_menu-item-roles.js
new file mode 100644
index 000000000000..2259913a86f7
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_browser_api_menu-item-roles.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/menu-item-roles.js.orig 2019-05-23 04:04:22 UTC
++++ electron/lib/browser/api/menu-item-roles.js
+@@ -4,7 +4,7 @@ const { app } = require('electron')
+
+ const isMac = process.platform === 'darwin'
+ const isWindows = process.platform === 'win32'
+-const isLinux = process.platform === 'linux'
++const isLinux = (process.platform === 'linux' || process.platform === 'freebsd')
+
+ const roles = {
+ about: {
diff --git a/devel/electron5/files/patch-electron_lib_browser_api_power-monitor.js b/devel/electron5/files/patch-electron_lib_browser_api_power-monitor.js
new file mode 100644
index 000000000000..3e130dc4bfc9
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_browser_api_power-monitor.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/power-monitor.js.orig 2019-05-23 04:05:25 UTC
++++ electron/lib/browser/api/power-monitor.js
+@@ -8,7 +8,7 @@ Object.setPrototypeOf(PowerMonitor.prototype, EventEmi
+ EventEmitter.call(powerMonitor)
+
+ // On Linux we need to call blockShutdown() to subscribe to shutdown event.
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ powerMonitor.on('newListener', (event) => {
+ if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
+ powerMonitor.blockShutdown()
diff --git a/devel/electron5/files/patch-electron_lib_browser_init.js b/devel/electron5/files/patch-electron_lib_browser_init.js
new file mode 100644
index 000000000000..46f3242ca52e
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_browser_init.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/init.js.orig 2019-05-23 04:06:34 UTC
++++ electron/lib/browser/init.js
+@@ -164,7 +164,7 @@ const mainStartupScript = packageJson.main || 'index.j
+ const KNOWN_XDG_DESKTOP_VALUES = ['Pantheon', 'Unity:Unity7', 'pop:GNOME']
+
+ function currentPlatformSupportsAppIndicator () {
+- if (process.platform !== 'linux') return false
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') return false
+ const currentDesktop = process.env.XDG_CURRENT_DESKTOP
+
+ if (!currentDesktop) return false
diff --git a/devel/electron5/files/patch-electron_lib_common_api_clipboard.js b/devel/electron5/files/patch-electron_lib_common_api_clipboard.js
new file mode 100644
index 000000000000..55a61b461274
--- /dev/null
+++ b/devel/electron5/files/patch-electron_lib_common_api_clipboard.js
@@ -0,0 +1,10 @@
+--- electron/lib/common/api/clipboard.js.orig 2019-05-23 04:07:30 UTC
++++ electron/lib/common/api/clipboard.js
+@@ -1,6 +1,6 @@
+ 'use strict'
+
+-if (process.platform === 'linux' && process.type === 'renderer') {
++if ((process.platform === 'linux' || process.platform === 'freebsd') && process.type === 'renderer') {
+ // On Linux we could not access clipboard in renderer process.
+ const { getRemote } = require('@electron/internal/renderer/remote')
+ module.exports = getRemote('clipboard')
diff --git a/devel/electron5/files/patch-electron_script_lib_config.py b/devel/electron5/files/patch-electron_script_lib_config.py
new file mode 100644
index 000000000000..5869a1ee8c2c
--- /dev/null
+++ b/devel/electron5/files/patch-electron_script_lib_config.py
@@ -0,0 +1,11 @@
+--- electron/script/lib/config.py.orig 2019-12-19 06:24:18 UTC
++++ electron/script/lib/config.py
+@@ -21,6 +21,8 @@ PLATFORM = {
+ 'cygwin': 'win32',
+ 'darwin': 'darwin',
+ 'linux2': 'linux',
++ 'freebsd11': 'freebsd',
++ 'freebsd12': 'freebsd',
+ 'win32': 'win32',
+ }[sys.platform]
+
diff --git a/devel/electron5/files/patch-electron_script_lib_utils.js b/devel/electron5/files/patch-electron_script_lib_utils.js
new file mode 100644
index 000000000000..9faa8173951e
--- /dev/null
+++ b/devel/electron5/files/patch-electron_script_lib_utils.js
@@ -0,0 +1,11 @@
+--- electron/script/lib/utils.js.orig 2019-12-17 03:11:25 UTC
++++ electron/script/lib/utils.js
+@@ -12,7 +12,7 @@ function getElectronExec () {
+ return `out/${OUT_DIR}/Electron.app/Contents/MacOS/Electron`
+ case 'win32':
+ return `out/${OUT_DIR}/electron.exe`
+- case 'linux':
++ case 'linux': case 'freebsd':
+ return `out/${OUT_DIR}/electron`
+ default:
+ throw new Error('Unknown platform')
diff --git a/devel/electron5/files/patch-electron_script_spec-runner.js b/devel/electron5/files/patch-electron_script_spec-runner.js
new file mode 100644
index 000000000000..a0651c1c5713
--- /dev/null
+++ b/devel/electron5/files/patch-electron_script_spec-runner.js
@@ -0,0 +1,11 @@
+--- electron/script/spec-runner.js.orig 2019-12-19 06:12:13 UTC
++++ electron/script/spec-runner.js
+@@ -40,7 +40,7 @@ function saveSpecHash ([newSpecHash, newSpecInstallHas
+ async function runElectronTests () {
+ let exe = path.resolve(BASE, utils.getElectronExec())
+ const args = process.argv.slice(2)
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ args.unshift(path.resolve(__dirname, 'dbus_mock.py'), exe)
+ exe = 'python'
+ }
diff --git a/devel/electron5/files/patch-electron_spec_api-app-spec.js b/devel/electron5/files/patch-electron_spec_api-app-spec.js
new file mode 100644
index 000000000000..2dcca1b118eb
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-app-spec.js
@@ -0,0 +1,83 @@
+--- electron/spec/api-app-spec.js.orig 2019-12-17 03:11:25 UTC
++++ electron/spec/api-app-spec.js
+@@ -129,7 +129,7 @@ describe('app module', () => {
+ describe('app.getLocaleCountryCode()', () => {
+ it('should be empty or have length of two', () => {
+ let expectedLength = 2
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // Linux CI machines have no locale.
+ expectedLength = 0
+ }
+@@ -189,7 +189,7 @@ describe('app module', () => {
+ })
+
+ it('exits gracefully', async function () {
+- if (!['darwin', 'linux'].includes(process.platform)) {
++ if (!['darwin', 'linux', 'freebsd'].includes(process.platform)) {
+ this.skip()
+ return
+ }
+@@ -289,7 +289,7 @@ describe('app module', () => {
+ let w = null
+
+ before(function () {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -482,7 +482,7 @@ describe('app module', () => {
+ describe('app.setBadgeCount', () => {
+ const platformIsNotSupported =
+ (process.platform === 'win32') ||
+- (process.platform === 'linux' && !app.isUnityRunning())
++ (process.platform === 'linux' && !app.isUnityRunning()) || (process.platform === 'freebsd')
+ const platformIsSupported = !platformIsNotSupported
+
+ const expectedBadgeCount = 42
+@@ -536,7 +536,7 @@ describe('app module', () => {
+ ]
+
+ before(function () {
+- if (process.platform === 'linux' || process.mas) this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.mas) this.skip()
+ })
+
+ beforeEach(() => {
+@@ -665,7 +665,7 @@ describe('app module', () => {
+ let w = null
+
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -859,7 +859,7 @@ describe('app module', () => {
+ // doesn't affect nested `describe`s.
+ beforeEach(function () {
+ // FIXME Get these specs running on Linux CI
+- if (process.platform === 'linux' && isCI) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && isCI) {
+ this.skip()
+ }
+ })
+@@ -1011,7 +1011,7 @@ describe('app module', () => {
+
+ it('succeeds with complete GPUInfo', async () => {
+ const completeInfo = await getGPUInfo('complete')
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // For linux and macOS complete info is same as basic info
+ await verifyBasicGPUInfo(completeInfo)
+ const basicInfo = await getGPUInfo('basic')
+@@ -1039,7 +1039,7 @@ describe('app module', () => {
+ const socketPath = process.platform === 'win32' ? '\\\\.\\pipe\\electron-mixed-sandbox' : '/tmp/electron-mixed-sandbox'
+
+ beforeEach(function (done) {
+- if (process.platform === 'linux' && (process.arch === 'arm64' || process.arch === 'arm')) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && (process.arch === 'arm64' || process.arch === 'arm')) {
+ // Our ARM tests are run on VSTS rather than CircleCI, and the Docker
+ // setup on VSTS disallows syscalls that Chrome requires for setting up
+ // sandboxing.
diff --git a/devel/electron5/files/patch-electron_spec_api-auto-updater-spec.js b/devel/electron5/files/patch-electron_spec_api-auto-updater-spec.js
new file mode 100644
index 000000000000..fe4b4d3acd8c
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-auto-updater-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-auto-updater-spec.js.orig 2019-05-16 02:00:37 UTC
++++ electron/spec/api-auto-updater-spec.js
+@@ -140,7 +140,7 @@ describe('autoUpdater module', function () {
+
+ describe('error event', () => {
+ it('serializes correctly over the remote module', function (done) {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return done()
diff --git a/devel/electron5/files/patch-electron_spec_api-browser-window-spec.js b/devel/electron5/files/patch-electron_spec_api-browser-window-spec.js
new file mode 100644
index 000000000000..d89d39b5fb2f
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-browser-window-spec.js
@@ -0,0 +1,47 @@
+--- electron/spec/api-browser-window-spec.js.orig 2019-12-17 03:11:25 UTC
++++ electron/spec/api-browser-window-spec.js
+@@ -1174,7 +1174,7 @@ describe('BrowserWindow module', () => {
+ describe('BrowserWindow.setOpacity(opacity)', () => {
+ describe('Windows and Mac', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -1206,7 +1206,7 @@ describe('BrowserWindow module', () => {
+
+ describe('Linux', () => {
+ before(function () {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -1306,7 +1306,7 @@ describe('BrowserWindow module', () => {
+
+ describe('enableLargerThanScreen" option', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -2400,7 +2400,7 @@ describe('BrowserWindow module', () => {
+ w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
+ })
+ it('visibilityState changes when window is minimized', function (done) {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // FIXME(alexeykuzmin): Skip the test instead of marking it as passed.
+ // afterEach hook won't be run if a test is skipped dynamically.
+ // If afterEach isn't run current window won't be destroyed
+@@ -2833,7 +2833,7 @@ describe('BrowserWindow module', () => {
+ // - `.skip()` called in the 'beforeEach' hook prevents 'afterEach'
+ // hook from being called.
+ // Not implemented on Linux.
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return
+ }
+
diff --git a/devel/electron5/files/patch-electron_spec_api-clipboard-spec.js b/devel/electron5/files/patch-electron_spec_api-clipboard-spec.js
new file mode 100644
index 000000000000..2c86fc0089a7
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-clipboard-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-clipboard-spec.js.orig 2019-05-16 02:04:28 UTC
++++ electron/spec/api-clipboard-spec.js
+@@ -27,7 +27,7 @@ describe('clipboard module', () => {
+ describe('clipboard.readHTML()', () => {
+ it('returns markup correctly', () => {
+ const text = '<string>Hi</string>'
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
+ clipboard.writeHTML(text)
+ expect(clipboard.readHTML()).to.equal(markup)
+ })
+@@ -43,7 +43,7 @@ describe('clipboard module', () => {
+
+ describe('clipboard.readBookmark', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -69,7 +69,7 @@ describe('clipboard module', () => {
+ const rtf = '{\\rtf1\\utf8 text}'
+ const p = path.join(fixtures, 'assets', 'logo.png')
+ const i = nativeImage.createFromPath(p)
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
+ const bookmark = { title: 'a title', url: 'test' }
+ clipboard.write({
+ text: 'test',
+@@ -84,7 +84,7 @@ describe('clipboard module', () => {
+ expect(clipboard.readRTF()).to.equal(rtf)
+ expect(clipboard.readImage().toDataURL()).to.equal(i.toDataURL())
+
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ expect(clipboard.readBookmark()).to.deep.equal(bookmark)
+ }
+ })
diff --git a/devel/electron5/files/patch-electron_spec_api-content-tracing-spec.js b/devel/electron5/files/patch-electron_spec_api-content-tracing-spec.js
new file mode 100644
index 000000000000..faec2f2ff9e1
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-content-tracing-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-content-tracing-spec.js.orig 2019-12-19 06:17:05 UTC
++++ electron/spec/api-content-tracing-spec.js
+@@ -22,7 +22,7 @@ const getPathInATempFolder = (filename) => {
+ describe('contentTracing', () => {
+ beforeEach(function () {
+ // FIXME: The tests are skipped on arm/arm64.
+- if (process.platform === 'linux' &&
++ if ((process.platform === 'linux' || process.platform === 'freebsd') &&
+ ['arm', 'arm64'].includes(process.arch)) {
+ this.skip()
+ }
diff --git a/devel/electron5/files/patch-electron_spec_api-crash-reporter-spec.js b/devel/electron5/files/patch-electron_spec_api-crash-reporter-spec.js
new file mode 100644
index 000000000000..9caa2c7f8d7b
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-crash-reporter-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-crash-reporter-spec.js.orig 2019-05-16 02:07:53 UTC
++++ electron/spec/api-crash-reporter-spec.js
+@@ -16,7 +16,7 @@ describe('crashReporter module', () => {
+ if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return
+
+ // TODO(alexeykuzmin): [Ch66] Fails. Fix it and enable back.
+- if (process.platform === 'linux') return
++ if (process.platform === 'linux' || process.platform === 'freebsd') return
+
+ let originalTempDirectory = null
+ let tempDirectory = null
diff --git a/devel/electron5/files/patch-electron_spec_api-net-log-spec.js b/devel/electron5/files/patch-electron_spec_api-net-log-spec.js
new file mode 100644
index 000000000000..f5f7abf16bad
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-net-log-spec.js
@@ -0,0 +1,29 @@
+--- electron/spec/api-net-log-spec.js.orig 2019-05-16 02:08:40 UTC
++++ electron/spec/api-net-log-spec.js
+@@ -95,7 +95,7 @@ describe('netLog module', () => {
+ })
+
+ it('should begin and end logging automatically when --log-net-log is passed', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -116,7 +116,7 @@ describe('netLog module', () => {
+
+ // FIXME(deepak1556): Ch69 follow up.
+ it('should begin and end logging automtically when --log-net-log is passed, and behave correctly when .startLogging() and .stopLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -139,7 +139,7 @@ describe('netLog module', () => {
+ })
+
+ it('should end logging automatically when only .startLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
diff --git a/devel/electron5/files/patch-electron_spec_api-notification-dbus-spec.js b/devel/electron5/files/patch-electron_spec_api-notification-dbus-spec.js
new file mode 100644
index 000000000000..bc1852ba00be
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-notification-dbus-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-notification-dbus-spec.js.orig 2019-12-17 03:11:25 UTC
++++ electron/spec/api-notification-dbus-spec.js
+@@ -13,7 +13,7 @@ const Promise = require('bluebird')
+ const { remote } = require('electron')
+ const { app } = remote
+
+-const skip = process.platform !== 'linux' ||
++const skip = process.platform !== 'linux' || process.platform !== 'freebsd' ||
+ process.arch === 'ia32' ||
+ process.arch.indexOf('arm') === 0 ||
+ !process.env.DBUS_SESSION_BUS_ADDRESS;
diff --git a/devel/electron5/files/patch-electron_spec_api-power-monitor-spec.js b/devel/electron5/files/patch-electron_spec_api-power-monitor-spec.js
new file mode 100644
index 000000000000..edfa796f7a9d
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-power-monitor-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-power-monitor-spec.js.orig 2019-05-16 02:12:02 UTC
++++ electron/spec/api-power-monitor-spec.js
+@@ -14,7 +14,7 @@ const Promise = require('bluebird')
+ const { expect } = chai
+ chai.use(dirtyChai)
+
+-const skip = process.platform !== 'linux' || !process.env.DBUS_SYSTEM_BUS_ADDRESS
++const skip = process.platform !== 'linux' || process.platform === 'freebsd' || !process.env.DBUS_SYSTEM_BUS_ADDRESS
+
+ describe('powerMonitor', () => {
+ let logindMock, dbusMockPowerMonitor, getCalls, emitSignal, reset
diff --git a/devel/electron5/files/patch-electron_spec_api-process-spec.js b/devel/electron5/files/patch-electron_spec_api-process-spec.js
new file mode 100644
index 000000000000..1316a566cd6b
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-process-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-process-spec.js.orig 2019-12-19 06:18:31 UTC
++++ electron/spec/api-process-spec.js
+@@ -42,7 +42,7 @@ describe('process module', () => {
+ it('resolves promise successfully with valid data', async () => {
+ const memoryInfo = await process.getProcessMemoryInfo()
+ expect(memoryInfo).to.be.an('object')
+- if (process.platform === 'linux' || process.platform === 'windows') {
++ if (process.platform === 'linux' || process.platform === 'windows' || process.platform === 'freebsd') {
+ expect(memoryInfo.residentSet).to.be.a('number').greaterThan(0)
+ }
+ expect(memoryInfo.private).to.be.a('number').greaterThan(0)
diff --git a/devel/electron5/files/patch-electron_spec_api-shell-spec.js b/devel/electron5/files/patch-electron_spec_api-shell-spec.js
new file mode 100644
index 000000000000..87aace3f7828
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_api-shell-spec.js
@@ -0,0 +1,42 @@
+--- electron/spec/api-shell-spec.js.orig 2019-12-17 03:11:25 UTC
++++ electron/spec/api-shell-spec.js
+@@ -35,7 +35,7 @@ describe('shell module', () => {
+ await closeWindow(w)
+ w = null
+ // reset env vars to prevent side effects
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ process.env.DE = envVars.de
+ process.env.BROWSER = envVars.browser
+ process.env.DISPLAY = envVars.display
+@@ -48,6 +48,10 @@ describe('shell module', () => {
+ process.env.BROWSER = '/bin/true'
+ process.env.DE = 'generic'
+ process.env.DISPLAY = ''
++ } else if (process.platform === 'freebsd') {
++ process.env.BROWSER = '/usr/bin/true'
++ process.env.DE = 'generic'
++ process.env.DISPLAY = ''
+ }
+
+ // Ensure an external window is activated via a new window's blur event
+@@ -64,7 +68,7 @@ describe('shell module', () => {
+
+ shell.openExternal(url).then(() => {
+ promiseResolved = true
+- if (blurEventEmitted || process.platform === 'linux') {
++ if (blurEventEmitted || process.platform === 'linux' || process.platform === 'freebsd') {
+ done()
+ }
+ })
+@@ -75,6 +79,10 @@ describe('shell module', () => {
+ if (process.platform === 'linux') {
+ process.env.DE = 'generic'
+ process.env.DE = '/bin/true'
++ process.env.DISPLAY = ''
++ } else if (process.platform === 'freebsd') {
++ process.env.DE = 'generic'
++ process.env.DE = '/usr/bin/true'
+ process.env.DISPLAY = ''
+ }
+
diff --git a/devel/electron5/files/patch-electron_spec_chromium-spec.js b/devel/electron5/files/patch-electron_spec_chromium-spec.js
new file mode 100644
index 000000000000..e1c8eb62bfd4
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_chromium-spec.js
@@ -0,0 +1,27 @@
+--- electron/spec/chromium-spec.js.orig 2019-05-16 02:16:13 UTC
++++ electron/spec/chromium-spec.js
+@@ -849,7 +849,7 @@ describe('chromium feature', () => {
+ })
+
+ it('can be get as context in canvas', () => {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -1533,12 +1533,13 @@ describe('font fallback', () => {
+ expect(fonts[0].familyName).to.equal({
+ 'win32': 'Arial',
+ 'darwin': 'Helvetica',
+- 'linux': 'DejaVu Sans' // I think this depends on the distro? We don't specify a default.
++ 'linux': 'DejaVu Sans', // I think this depends on the distro? We don't specify a default.
++ 'freebsd': 'DejaVu Sans'
+ }[process.platform])
+ })
+
+ it('should fall back to Japanese font for sans-serif Japanese script', async function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return this.skip()
+ }
+ const html = `
diff --git a/devel/electron5/files/patch-electron_spec_version-bump-spec.js b/devel/electron5/files/patch-electron_spec_version-bump-spec.js
new file mode 100644
index 000000000000..2f9557c97349
--- /dev/null
+++ b/devel/electron5/files/patch-electron_spec_version-bump-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/version-bump-spec.js.orig 2019-12-19 06:19:49 UTC
++++ electron/spec/version-bump-spec.js
+@@ -51,7 +51,7 @@ describeFn('bump-version script', () => {
+ const betaPattern = /[0-9.]*(-beta[0-9.]*)/g
+
+ before(function () {
+- if (process.platform === 'linux' && process.arch === 'arm') {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && process.arch === 'arm') {
+ this.skip()
+ }
+ })
diff --git a/devel/electron5/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc b/devel/electron5/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
new file mode 100644
index 000000000000..b3fc09fc608d
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/declarative_webrequest/webrequest_action.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -28,7 +28,11 @@
+ #include "extensions/common/extension.h"
+ #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+ #include "net/http/http_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using content::ResourceRequestInfo;
+ using extension_web_request_api_helpers::EventResponseDelta;
diff --git a/devel/electron5/files/patch-extensions_browser_api_messaging_message__service.cc b/devel/electron5/files/patch-extensions_browser_api_messaging_message__service.cc
new file mode 100644
index 000000000000..fa865cd4321d
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_browser_api_messaging_message__service.cc
@@ -0,0 +1,35 @@
+--- extensions/browser/api/messaging/message_service.cc.orig 2019-04-08 08:32:56 UTC
++++ extensions/browser/api/messaging/message_service.cc
+@@ -58,7 +58,7 @@ namespace {
+
+ const char kReceivingEndDoesntExistError[] =
+ "Could not establish connection. Receiving end does not exist.";
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kMissingPermissionError[] =
+ "Access to native messaging requires nativeMessaging permission.";
+ const char kProhibitedByPoliciesError[] =
+@@ -318,7 +318,7 @@ void MessageService::OpenChannelToNativeApp(
+ if (!source)
+ return;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ content::WebContents* web_contents =
+ content::WebContents::FromRenderFrameHost(source);
+ ExtensionWebContentsObserver* extension_web_contents_observer =
+@@ -378,12 +378,12 @@ void MessageService::OpenChannelToNativeApp(
+ channel->opener->IncrementLazyKeepaliveCount();
+
+ AddChannel(std::move(channel), receiver_port_id);
+-#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ const char kNativeMessagingNotSupportedError[] =
+ "Native Messaging is not supported on this platform.";
+ DispatchOnDisconnect(
+ source, receiver_port_id, kNativeMessagingNotSupportedError);
+-#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ }
+
+ void MessageService::OpenChannelToTab(int source_process_id,
diff --git a/devel/electron5/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc b/devel/electron5/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
new file mode 100644
index 000000000000..c2c287d5ac0e
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/networking_private/networking_private_delegate_factory.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/browser/api/networking_private/networking_private_delegate_factory.cc
+@@ -11,7 +11,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "extensions/browser/api/networking_private/networking_private_linux.h"
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ #include "components/wifi/wifi_service.h"
+@@ -61,7 +61,7 @@ KeyedService* NetworkingPrivateDelegateFactory::BuildS
+ NetworkingPrivateDelegate* delegate;
+ #if defined(OS_CHROMEOS)
+ delegate = new NetworkingPrivateChromeOS(browser_context);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ delegate = new NetworkingPrivateLinux();
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ std::unique_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
diff --git a/devel/electron5/files/patch-extensions_browser_api_web__request_form__data__parser.cc b/devel/electron5/files/patch-extensions_browser_api_web__request_form__data__parser.cc
new file mode 100644
index 000000000000..69b1a7176fbd
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_browser_api_web__request_form__data__parser.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/web_request/form_data_parser.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/browser/api/web_request/form_data_parser.cc
+@@ -15,7 +15,11 @@
+ #include "base/values.h"
+ #include "net/base/escape.h"
+ #include "net/http/http_request_headers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::DictionaryValue;
+ using base::ListValue;
diff --git a/devel/electron5/files/patch-extensions_browser_browser__context__keyed__service__factories.cc b/devel/electron5/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..84d3d268c369
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
@@ -0,0 +1,11 @@
+--- extensions/browser/browser_context_keyed_service_factories.cc.orig 2019-04-08 08:32:56 UTC
++++ extensions/browser/browser_context_keyed_service_factories.cc
+@@ -85,7 +85,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ NetworkingConfigServiceFactory::GetInstance();
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ NetworkingPrivateEventRouterFactory::GetInstance();
+ #endif
+ PowerAPI::GetFactoryInstance();
diff --git a/devel/electron5/files/patch-extensions_common_api___permission__features.json b/devel/electron5/files/patch-extensions_common_api___permission__features.json
new file mode 100644
index 000000000000..4c3651e0b06d
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_api___permission__features.json
@@ -0,0 +1,29 @@
+--- extensions/common/api/_permission_features.json.orig 2019-04-08 08:32:56 UTC
++++ extensions/common/api/_permission_features.json
+@@ -135,7 +135,7 @@
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+- "platforms": ["chromeos", "win", "mac", "linux"],
++ "platforms": ["chromeos", "win", "mac", "linux", "bsd"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/387169
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/387169
+@@ -470,7 +470,7 @@
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+@@ -501,7 +501,7 @@
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ // DO NOT ADD ANY MORE ENTRIES HERE.
+ // networkingPrivate is being migrated to networking.onc.
diff --git a/devel/electron5/files/patch-extensions_common_api_runtime.json b/devel/electron5/files/patch-extensions_common_api_runtime.json
new file mode 100644
index 000000000000..9a25613be199
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_api_runtime.json
@@ -0,0 +1,11 @@
+--- extensions/common/api/runtime.json.orig 2019-04-08 08:32:56 UTC
++++ extensions/common/api/runtime.json
+@@ -66,7 +66,7 @@
+ "id": "PlatformOs",
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+- "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
++ "enum": ["mac", "win", "android", "cros", "linux", "freebsd", "openbsd"]
+ },
+ {
+ "id": "PlatformArch",
diff --git a/devel/electron5/files/patch-extensions_common_feature__switch.cc b/devel/electron5/files/patch-extensions_common_feature__switch.cc
new file mode 100644
index 000000000000..95eb7ed5dd72
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_feature__switch.cc
@@ -0,0 +1,14 @@
+--- extensions/common/feature_switch.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/common/feature_switch.cc
+@@ -44,11 +44,7 @@ class CommonSwitches {
+ FeatureSwitch::DEFAULT_ENABLED),
+ load_media_router_component_extension(
+ kLoadMediaRouterComponentExtensionFlag,
+-#if defined(GOOGLE_CHROME_BUILD)
+ FeatureSwitch::DEFAULT_ENABLED)
+-#else
+- FeatureSwitch::DEFAULT_DISABLED)
+-#endif // defined(GOOGLE_CHROME_BUILD)
+ {
+ }
+
diff --git a/devel/electron5/files/patch-extensions_common_features_feature.cc b/devel/electron5/files/patch-extensions_common_features_feature.cc
new file mode 100644
index 000000000000..0f316dd9f39e
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_features_feature.cc
@@ -0,0 +1,11 @@
+--- extensions/common/features/feature.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/common/features/feature.cc
+@@ -26,6 +26,8 @@ Feature::Platform Feature::GetCurrentPlatform() {
+ return MACOSX_PLATFORM;
+ #elif defined(OS_WIN)
+ return WIN_PLATFORM;
++#elif defined(OS_BSD)
++ return LINUX_PLATFORM;
+ #else
+ return UNSPECIFIED_PLATFORM;
+ #endif
diff --git a/devel/electron5/files/patch-extensions_common_image__util.cc b/devel/electron5/files/patch-extensions_common_image__util.cc
new file mode 100644
index 000000000000..def441ae2217
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_image__util.cc
@@ -0,0 +1,14 @@
+--- extensions/common/image_util.cc.orig 2019-04-08 08:32:56 UTC
++++ extensions/common/image_util.cc
+@@ -18,7 +18,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/time/time.h"
+ #include "base/timer/elapsed_timer.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkCanvas.h"
+ #include "third_party/skia/include/core/SkColor.h"
diff --git a/devel/electron5/files/patch-extensions_common_stack__frame.cc b/devel/electron5/files/patch-extensions_common_stack__frame.cc
new file mode 100644
index 000000000000..c6b9302e36e3
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_common_stack__frame.cc
@@ -0,0 +1,14 @@
+--- extensions/common/stack_frame.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/common/stack_frame.cc
+@@ -7,7 +7,11 @@
+ #include <string>
+
+ #include "base/strings/utf_string_conversions.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace extensions {
+
diff --git a/devel/electron5/files/patch-extensions_renderer_bindings_api__binding__util.cc b/devel/electron5/files/patch-extensions_renderer_bindings_api__binding__util.cc
new file mode 100644
index 000000000000..edd4646df31b
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_renderer_bindings_api__binding__util.cc
@@ -0,0 +1,11 @@
+--- extensions/renderer/bindings/api_binding_util.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/renderer/bindings/api_binding_util.cc
+@@ -129,6 +129,8 @@ std::string GetPlatformString() {
+ return "mac";
+ #elif defined(OS_WIN)
+ return "win";
++#elif defined(OS_BSD)
++ return "bsd";
+ #else
+ NOTREACHED();
+ return std::string();
diff --git a/devel/electron5/files/patch-extensions_shell_app_shell__main__delegate.cc b/devel/electron5/files/patch-extensions_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..cec6a956b1ad
--- /dev/null
+++ b/devel/electron5/files/patch-extensions_shell_app_shell__main__delegate.cc
@@ -0,0 +1,29 @@
+--- extensions/shell/app/shell_main_delegate.cc.orig 2019-04-08 08:18:20 UTC
++++ extensions/shell/app/shell_main_delegate.cc
+@@ -38,7 +38,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -52,7 +52,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ extensions::ShellCrashReporterClient* GetCrashReporterClient() {
+ static base::NoDestructor<extensions::ShellCrashReporterClient> instance;
+ return instance.get();
+@@ -70,7 +70,7 @@ base::FilePath GetDataPath() {
+ return cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
+
+ base::FilePath data_dir;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ data_dir = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron5/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc b/devel/electron5/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..d1f614ba85da
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/common/gpu_memory_buffer_support.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/command_buffer/common/gpu_memory_buffer_support.cc
+@@ -89,7 +89,7 @@ bool IsImageSizeValidForGpuMemoryBufferFormat(const gf
+ uint32_t GetPlatformSpecificTextureTarget() {
+ #if defined(OS_MACOSX)
+ return GL_TEXTURE_RECTANGLE_ARB;
+-#elif defined(OS_ANDROID) || defined(OS_LINUX)
++#elif defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ return GL_TEXTURE_EXTERNAL_OES;
+ #elif defined(OS_WIN)
+ return GL_TEXTURE_2D;
diff --git a/devel/electron5/files/patch-gpu_command__buffer_service_program__manager.cc b/devel/electron5/files/patch-gpu_command__buffer_service_program__manager.cc
new file mode 100644
index 000000000000..75e45fcc066b
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_command__buffer_service_program__manager.cc
@@ -0,0 +1,14 @@
+--- gpu/command_buffer/service/program_manager.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/command_buffer/service/program_manager.cc
+@@ -30,7 +30,11 @@
+ #include "gpu/command_buffer/service/program_cache.h"
+ #include "gpu/command_buffer/service/shader_manager.h"
+ #include "gpu/config/gpu_preferences.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/progress_reporter.h"
+
diff --git a/devel/electron5/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
new file mode 100644
index 000000000000..7cb781d9cfea
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
+@@ -562,7 +562,7 @@ class GLCopyTextureCHROMIUMES3Test : public GLCopyText
+
+ bool ShouldSkipNorm16() const {
+ DCHECK(!ShouldSkipTest());
+-#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)) && \
++#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)) && \
+ (defined(ARCH_CPU_X86) || defined(ARCH_CPU_X86_64))
+ // Make sure it's tested; it is safe to assume that the flag is always true
+ // on desktop.
diff --git a/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.cc b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
new file mode 100644
index 000000000000..c5b2286b5c5d
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/tests/gl_test_utils.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/command_buffer/tests/gl_test_utils.cc
+@@ -22,7 +22,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gl/init/gl_factory.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gl/gl_image_native_pixmap.h"
+ #endif
+
+@@ -425,7 +425,7 @@ void GpuCommandBufferTestEGL::RestoreGLDefault() {
+ window_system_binding_info_ = gl::GLWindowSystemBindingInfo();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ scoped_refptr<gl::GLImageNativePixmap>
+ GpuCommandBufferTestEGL::CreateGLImageNativePixmap(gfx::BufferFormat format,
+ gfx::Size size,
diff --git a/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.h b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.h
new file mode 100644
index 000000000000..eb7c32cf12dd
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_command__buffer_tests_gl__test__utils.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_test_utils.h.orig 2019-04-08 08:18:20 UTC
++++ gpu/command_buffer/tests/gl_test_utils.h
+@@ -112,7 +112,7 @@ class GpuCommandBufferTestEGL {
+ return gfx::HasExtension(gl_extensions_, extension);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Create GLImageNativePixmap filled in with the given pixels.
+ scoped_refptr<gl::GLImageNativePixmap> CreateGLImageNativePixmap(
+ gfx::BufferFormat format,
diff --git a/devel/electron5/files/patch-gpu_config_gpu__control__list.cc b/devel/electron5/files/patch-gpu_config_gpu__control__list.cc
new file mode 100644
index 000000000000..d5284e500ac5
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_config_gpu__control__list.cc
@@ -0,0 +1,32 @@
+--- gpu/config/gpu_control_list.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/config/gpu_control_list.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "build/build_config.h"
+ #include "gpu/config/gpu_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace gpu {
+ namespace {
+@@ -213,7 +217,7 @@ bool GpuControlList::More::GLVersionInfoMismatch(
+ GpuControlList::GLType GpuControlList::More::GetDefaultGLType() {
+ #if defined(OS_CHROMEOS)
+ return kGLTypeGL;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kGLTypeGL;
+ #elif defined(OS_MACOSX)
+ return kGLTypeGL;
+@@ -699,7 +703,7 @@ GpuControlList::OsType GpuControlList::GetOsType() {
+ return kOsAndroid;
+ #elif defined(OS_FUCHSIA)
+ return kOsFuchsia;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kOsLinux;
+ #elif defined(OS_MACOSX)
+ return kOsMacosx;
diff --git a/devel/electron5/files/patch-gpu_config_gpu__test__config.cc b/devel/electron5/files/patch-gpu_config_gpu__test__config.cc
new file mode 100644
index 000000000000..b169e7555541
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_config_gpu__test__config.cc
@@ -0,0 +1,11 @@
+--- gpu/config/gpu_test_config.cc.orig 2019-04-08 08:18:21 UTC
++++ gpu/config/gpu_test_config.cc
+@@ -25,7 +25,7 @@ namespace {
+ GPUTestConfig::OS GetCurrentOS() {
+ #if defined(OS_CHROMEOS)
+ return GPUTestConfig::kOsChromeOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return GPUTestConfig::kOsLinux;
+ #elif defined(OS_WIN)
+ int32_t major_version = 0;
diff --git a/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc b/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..a8c1a59e9642
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,47 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.h"
+ #include "ui/gfx/client_native_pixmap_factory.h"
+ #include "ui/gfx/linux/client_native_pixmap_factory_dmabuf.h"
+@@ -37,7 +37,7 @@ namespace gpu {
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport() {
+ #if defined(USE_OZONE)
+ client_native_pixmap_factory_ = ui::CreateClientNativePixmapFactoryOzone();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ client_native_pixmap_factory_.reset(
+ gfx::CreateClientNativePixmapFactoryDmabuf());
+ #endif
+@@ -51,7 +51,7 @@ GpuMemoryBufferSupport::GetNativeGpuMemoryBufferType()
+ return gfx::IO_SURFACE_BUFFER;
+ #elif defined(OS_ANDROID)
+ return gfx::ANDROID_HARDWARE_BUFFER;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return gfx::NATIVE_PIXMAP;
+ #elif defined(OS_WIN)
+ return gfx::DXGI_SHARED_HANDLE;
+@@ -109,7 +109,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferCo
+ #elif defined(USE_OZONE)
+ return ui::OzonePlatform::EnsureInstance()->IsNativePixmapConfigSupported(
+ format, usage);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return false; // TODO(julian.isorce): Add linux support.
+ #elif defined(OS_WIN)
+ switch (usage) {
+@@ -166,7 +166,7 @@ GpuMemoryBufferSupport::CreateGpuMemoryBufferImplFromH
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ std::move(handle), size, format, usage, std::move(callback));
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case gfx::NATIVE_PIXMAP:
+ return GpuMemoryBufferImplNativePixmap::CreateFromHandle(
+ client_native_pixmap_factory(), std::move(handle), size, format,
diff --git a/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h b/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
new file mode 100644
index 000000000000..9dabad770214
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
@@ -0,0 +1,29 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.h.orig 2019-04-08 08:18:21 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ namespace gfx {
+ class ClientNativePixmapFactory;
+ }
+@@ -38,7 +38,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format,
+ gfx::BufferUsage usage);
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ gfx::ClientNativePixmapFactory* client_native_pixmap_factory() {
+ return client_native_pixmap_factory_.get();
+ }
+@@ -61,7 +61,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ GpuMemoryBufferImpl::DestructionCallback callback);
+
+ private:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_;
+ #endif
+
diff --git a/devel/electron5/files/patch-gpu_ipc_service_gpu__init.cc b/devel/electron5/files/patch-gpu_ipc_service_gpu__init.cc
new file mode 100644
index 000000000000..d80d5b5ca9ea
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_service_gpu__init.cc
@@ -0,0 +1,29 @@
+--- gpu/ipc/service/gpu_init.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/ipc/service/gpu_init.cc
+@@ -87,7 +87,7 @@ void InitializeDirectCompositionOverlaySupport(GPUInfo
+ }
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ bool CanAccessNvidiaDeviceFile() {
+ bool res = true;
+ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::WILL_BLOCK);
+@@ -129,7 +129,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ // crash during feature collection.
+ gpu::SetKeysForCrashLogging(gpu_info_);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA
+ gpu_info_.gpu.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile())
+ return false;
+@@ -199,7 +199,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ sandbox_helper_->PreSandboxStartup();
+
+ bool attempted_startsandbox = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // On Chrome OS ARM Mali, GPU driver userspace creates threads when
+ // initializing a GL context, so start the sandbox early.
+ // TODO(zmo): Need to collect OS version before this.
diff --git a/devel/electron5/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc b/devel/electron5/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
new file mode 100644
index 000000000000..71374fdd34a3
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_memory_buffer_factory.cc.orig 2019-04-08 08:18:21 UTC
++++ gpu/ipc/service/gpu_memory_buffer_factory.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_native_pixmap.h"
+ #endif
+
+@@ -33,7 +33,7 @@ GpuMemoryBufferFactory::CreateNativeType() {
+ return base::WrapUnique(new GpuMemoryBufferFactoryIOSurface);
+ #elif defined(OS_ANDROID)
+ return base::WrapUnique(new GpuMemoryBufferFactoryAndroidHardwareBuffer);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return base::WrapUnique(new GpuMemoryBufferFactoryNativePixmap);
+ #elif defined(OS_WIN)
+ return base::WrapUnique(new GpuMemoryBufferFactoryDXGI);
diff --git a/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc b/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
new file mode 100644
index 000000000000..0a5145ee02db
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
@@ -0,0 +1,73 @@
+--- gpu/ipc/service/gpu_watchdog_thread.cc.orig 2019-04-08 08:32:57 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.cc
+@@ -51,8 +51,10 @@ const int kGpuTimeout = 10000;
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ const base::FilePath::CharType kTtyFilePath[] =
+ FILE_PATH_LITERAL("/sys/class/tty/tty0/active");
++#endif
+ const unsigned char text[20] = "check";
+ #endif
+
+@@ -75,8 +77,10 @@ GpuWatchdogThread::GpuWatchdogThread()
+ display_(nullptr),
+ window_(0),
+ atom_(x11::None),
++#if !defined(OS_BSD)
+ host_tty_(-1),
+ #endif
++#endif
+ weak_factory_(this) {
+ base::subtle::NoBarrier_Store(&awaiting_acknowledge_, false);
+
+@@ -91,7 +95,9 @@ GpuWatchdogThread::GpuWatchdogThread()
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ tty_file_ = base::OpenFile(base::FilePath(kTtyFilePath), "r");
++#endif
+ SetupXServer();
+ #endif
+ base::MessageLoopCurrent::Get()->AddTaskObserver(&task_observer_);
+@@ -238,8 +244,10 @@ GpuWatchdogThread::~GpuWatchdogThread() {
+ power_monitor->RemoveObserver(this);
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ if (tty_file_)
+ fclose(tty_file_);
++#endif
+ if (display_) {
+ DCHECK(window_);
+ XDestroyWindow(display_, window_);
+@@ -463,7 +471,7 @@ void GpuWatchdogThread::DeliberatelyTerminateToRecover
+ return;
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ // Don't crash if we're not on the TTY of our host X11 server.
+ int active_tty = GetActiveTTY();
+ if (host_tty_ != -1 && active_tty != -1 && host_tty_ != active_tty) {
+@@ -526,7 +534,9 @@ void GpuWatchdogThread::SetupXServer() {
+ CopyFromParent, InputOutput, CopyFromParent, 0, nullptr);
+ atom_ = XInternAtom(display_, "CHECK", x11::False);
+ }
++#if !defined(OS_BSD)
+ host_tty_ = GetActiveTTY();
++#endif
+ }
+
+ void GpuWatchdogThread::SetupXChangeProp() {
+@@ -627,7 +637,7 @@ base::ThreadTicks GpuWatchdogThread::GetWatchedThreadT
+ }
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ int GpuWatchdogThread::GetActiveTTY() const {
+ char tty_string[8] = {0};
+ if (tty_file_ && !fseek(tty_file_, 0, SEEK_SET) &&
diff --git a/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.h b/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
new file mode 100644
index 000000000000..cc2a3b4d121d
--- /dev/null
+++ b/devel/electron5/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
@@ -0,0 +1,13 @@
+--- gpu/ipc/service/gpu_watchdog_thread.h.orig 2019-04-08 08:32:57 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.h
+@@ -191,8 +191,10 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThread : publi
+ XDisplay* display_;
+ gfx::AcceleratedWidget window_;
+ XAtom atom_;
++#if !defined(OS_BSD)
+ FILE* tty_file_;
+ int host_tty_;
++#endif
+ #endif
+
+ base::RepeatingClosure alternative_terminate_for_testing_;
diff --git a/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.cc b/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.cc
new file mode 100644
index 000000000000..27fb859e4b7a
--- /dev/null
+++ b/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.cc
@@ -0,0 +1,20 @@
+--- headless/lib/browser/headless_content_browser_client.cc.orig 2019-04-08 08:32:57 UTC
++++ headless/lib/browser/headless_content_browser_client.cc
+@@ -187,7 +187,7 @@ HeadlessContentBrowserClient::GetGeneratedCodeCacheSet
+ return content::GeneratedCodeCacheSettings(true, 0, context->GetPath());
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void HeadlessContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -198,7 +198,7 @@ void HeadlessContentBrowserClient::GetAdditionalMapped
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(HEADLESS_USE_BREAKPAD)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void HeadlessContentBrowserClient::AppendExtraCommandLineSwitches(
+ base::CommandLine* command_line,
diff --git a/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.h b/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.h
new file mode 100644
index 000000000000..f3db145c0e95
--- /dev/null
+++ b/devel/electron5/files/patch-headless_lib_browser_headless__content__browser__client.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_content_browser_client.h.orig 2019-04-08 08:18:21 UTC
++++ headless/lib/browser/headless_content_browser_client.h
+@@ -34,7 +34,7 @@ class HeadlessContentBrowserClient : public content::C
+ ::storage::OptionalQuotaSettingsCallback callback) override;
+ content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
+ content::BrowserContext* context) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
diff --git a/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.cc b/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.cc
new file mode 100644
index 000000000000..a3d5c2f229de
--- /dev/null
+++ b/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.cc
@@ -0,0 +1,38 @@
+--- headless/lib/browser/headless_request_context_manager.cc.orig 2019-04-08 08:32:57 UTC
++++ headless/lib/browser/headless_request_context_manager.cc
+@@ -35,7 +35,7 @@ namespace headless {
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ static char kProductName[] = "HeadlessChrome";
+ #endif
+
+@@ -81,7 +81,7 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTraffic
+ return traffic_annotation;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr BuildCryptConfigOnce(
+ const base::FilePath& user_data_path) {
+ static bool done_once = false;
+@@ -290,7 +290,7 @@ HeadlessRequestContextManager::HeadlessRequestContextM
+ proxy_config_monitor_ =
+ std::make_unique<HeadlessProxyConfigMonitor>(proxy_monitor_task_runner);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ crypt_config_ = BuildCryptConfigOnce(user_data_path_);
+ if (network_service_enabled_ && crypt_config_)
+ content::GetNetworkService()->SetCryptConfig(std::move(crypt_config_));
+@@ -366,7 +366,7 @@ void HeadlessRequestContextManager::InitializeOnIO() {
+ std::move(protocol_handler.second));
+ }
+ protocol_handlers_.clear();
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (crypt_config_) {
+ content::GetNetworkServiceImpl()->SetCryptConfig(
+ std::move(crypt_config_));
diff --git a/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.h b/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.h
new file mode 100644
index 000000000000..6ad7e4b69bd1
--- /dev/null
+++ b/devel/electron5/files/patch-headless_lib_browser_headless__request__context__manager.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_request_context_manager.h.orig 2019-04-08 08:18:21 UTC
++++ headless/lib/browser/headless_request_context_manager.h
+@@ -69,7 +69,7 @@ class HeadlessRequestContextManager {
+ std::unique_ptr<HeadlessProxyConfigMonitor> proxy_config_monitor_;
+ bool is_system_context_;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr crypt_config_;
+ #endif
+
diff --git a/devel/electron5/files/patch-headless_lib_headless__macros.h b/devel/electron5/files/patch-headless_lib_headless__macros.h
new file mode 100644
index 000000000000..91de5d982ec9
--- /dev/null
+++ b/devel/electron5/files/patch-headless_lib_headless__macros.h
@@ -0,0 +1,13 @@
+--- headless/lib/headless_macros.h.orig 2019-04-08 08:18:21 UTC
++++ headless/lib/headless_macros.h
+@@ -7,8 +7,8 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #define HEADLESS_USE_BREAKPAD
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ #endif // HEADLESS_LIB_HEADLESS_MACROS_H_
diff --git a/devel/electron5/files/patch-ipc_ipc__channel.h b/devel/electron5/files/patch-ipc_ipc__channel.h
new file mode 100644
index 000000000000..bd2c82e7791e
--- /dev/null
+++ b/devel/electron5/files/patch-ipc_ipc__channel.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel.h.orig 2019-04-08 08:32:59 UTC
++++ ipc/ipc_channel.h
+@@ -244,7 +244,7 @@ class COMPONENT_EXPORT(IPC) Channel : public Sender {
+ static std::string GenerateUniqueRandomChannelID();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sandboxed processes live in a PID namespace, so when sending the IPC hello
+ // message from client to server we need to send the PID from the global
+ // PID namespace.
diff --git a/devel/electron5/files/patch-ipc_ipc__channel__common.cc b/devel/electron5/files/patch-ipc_ipc__channel__common.cc
new file mode 100644
index 000000000000..80a9eac25d53
--- /dev/null
+++ b/devel/electron5/files/patch-ipc_ipc__channel__common.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel_common.cc.orig 2019-04-08 08:18:22 UTC
++++ ipc/ipc_channel_common.cc
+@@ -9,7 +9,7 @@
+
+ namespace IPC {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+ int g_global_pid = 0;
diff --git a/devel/electron5/files/patch-ipc_ipc__channel__mojo.cc b/devel/electron5/files/patch-ipc_ipc__channel__mojo.cc
new file mode 100644
index 000000000000..23d22bf7228d
--- /dev/null
+++ b/devel/electron5/files/patch-ipc_ipc__channel__mojo.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel_mojo.cc.orig 2019-04-08 08:32:59 UTC
++++ ipc/ipc_channel_mojo.cc
+@@ -64,7 +64,7 @@ class MojoChannelFactory : public ChannelFactory {
+ };
+
+ base::ProcessId GetSelfPID() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (int global_pid = Channel::GetGlobalPid())
+ return global_pid;
+ #endif // OS_LINUX
diff --git a/devel/electron5/files/patch-ipc_ipc__message__utils.cc b/devel/electron5/files/patch-ipc_ipc__message__utils.cc
new file mode 100644
index 000000000000..49cd38da4230
--- /dev/null
+++ b/devel/electron5/files/patch-ipc_ipc__message__utils.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.cc.orig 2019-04-08 08:32:59 UTC
++++ ipc/ipc_message_utils.cc
+@@ -349,7 +349,7 @@ void ParamTraits<unsigned int>::Log(const param_type&
+ }
+
+ #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
+- (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
++ defined(OS_BSD) || (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ void ParamTraits<long>::Log(const param_type& p, std::string* l) {
+ l->append(base::NumberToString(p));
+ }
diff --git a/devel/electron5/files/patch-ipc_ipc__message__utils.h b/devel/electron5/files/patch-ipc_ipc__message__utils.h
new file mode 100644
index 000000000000..2586a2577eb5
--- /dev/null
+++ b/devel/electron5/files/patch-ipc_ipc__message__utils.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.h.orig 2019-04-08 08:32:59 UTC
++++ ipc/ipc_message_utils.h
+@@ -204,7 +204,7 @@ struct ParamTraits<unsigned int> {
+ // Since we want to support Android 32<>64 bit IPC, as long as we don't have
+ // these traits for 32 bit ARM then that'll catch any errors.
+ #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
+- (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
++ defined(OS_BSD) || (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ template <>
+ struct ParamTraits<long> {
+ typedef long param_type;
diff --git a/devel/electron5/files/patch-media_BUILD.gn b/devel/electron5/files/patch-media_BUILD.gn
new file mode 100644
index 000000000000..7a73dae0671b
--- /dev/null
+++ b/devel/electron5/files/patch-media_BUILD.gn
@@ -0,0 +1,12 @@
+--- media/BUILD.gn.orig 2019-04-08 08:32:59 UTC
++++ media/BUILD.gn
+@@ -59,6 +59,9 @@ config("media_config") {
+ defines += [ "DLOPEN_PULSEAUDIO" ]
+ }
+ }
++ if (use_sndio) {
++ defines += [ "USE_SNDIO" ]
++ }
+ if (use_cras) {
+ defines += [ "USE_CRAS" ]
+ }
diff --git a/devel/electron5/files/patch-media_audio_BUILD.gn b/devel/electron5/files/patch-media_audio_BUILD.gn
new file mode 100644
index 000000000000..fd28953c9bcc
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_BUILD.gn
@@ -0,0 +1,22 @@
+--- media/audio/BUILD.gn.orig 2019-04-09 12:48:19 UTC
++++ media/audio/BUILD.gn
+@@ -248,8 +248,18 @@ source_set("audio") {
+ deps += [ "//media/base/android:media_jni_headers" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !use_sndio) {
+ sources += [ "linux/audio_manager_linux.cc" ]
++ }
++ if (use_sndio) {
++ libs += [ "sndio" ]
++ sources += [
++ "openbsd/audio_manager_openbsd.cc",
++ "sndio/sndio_input.cc",
++ "sndio/sndio_input.h",
++ "sndio/sndio_output.cc",
++ "sndio/sndio_output.h"
++ ]
+ }
+
+ if (use_alsa) {
diff --git a/devel/electron5/files/patch-media_audio_alsa_audio__manager__alsa.cc b/devel/electron5/files/patch-media_audio_alsa_audio__manager__alsa.cc
new file mode 100644
index 000000000000..3d6bef4bdca2
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_alsa_audio__manager__alsa.cc
@@ -0,0 +1,54 @@
+--- media/audio/alsa/audio_manager_alsa.cc.orig 2019-04-08 08:18:22 UTC
++++ media/audio/alsa/audio_manager_alsa.cc
+@@ -92,7 +92,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ int card = -1;
+
+ // Loop through the sound cards to get ALSA device hints.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && card >= 0) {
++#endif
+ void** hints = NULL;
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+@@ -104,7 +106,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ DLOG(WARNING) << "GetAlsaAudioDevices: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+ }
+
+ void AudioManagerAlsa::GetAlsaDevicesInfo(AudioManagerAlsa::StreamType type,
+@@ -187,7 +191,11 @@ bool AudioManagerAlsa::IsAlsaDeviceAvailable(
+ // goes through software conversion if needed (e.g. incompatible
+ // sample rate).
+ // TODO(joi): Should we prefer "hw" instead?
++#ifdef OS_LINUX
+ static const char kDeviceTypeDesired[] = "plughw";
++#else
++ static const char kDeviceTypeDesired[] = "plug";
++#endif
+ return strncmp(kDeviceTypeDesired, device_name,
+ base::size(kDeviceTypeDesired) - 1) == 0;
+ }
+@@ -209,7 +217,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ // Loop through the sound cards.
+ // Don't use snd_device_name_hint(-1,..) since there is a access violation
+ // inside this ALSA API with libasound.so.2.0.0.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && (card >= 0) && !has_device) {
++#endif
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+ for (void** hint_iter = hints; *hint_iter != NULL; hint_iter++) {
+@@ -233,7 +243,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ DLOG(WARNING) << "HasAnyAudioDevice: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+
+ return has_device;
+ }
diff --git a/devel/electron5/files/patch-media_audio_audio__input__device.cc b/devel/electron5/files/patch-media_audio_audio__input__device.cc
new file mode 100644
index 000000000000..e0540ac98ef5
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_audio__input__device.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_input_device.cc.orig 2019-04-08 08:18:22 UTC
++++ media/audio/audio_input_device.cc
+@@ -248,7 +248,7 @@ void AudioInputDevice::OnStreamCreated(
+ // also a risk of false positives if we are suspending when starting the stream
+ // here. See comments in AliveChecker and PowerObserverHelper for details and
+ // todos.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const bool stop_at_first_alive_notification = true;
+ const bool pause_check_during_suspend = false;
+ #else
diff --git a/devel/electron5/files/patch-media_audio_audio__manager.cc b/devel/electron5/files/patch-media_audio_audio__manager.cc
new file mode 100644
index 000000000000..7aceb6038d07
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_audio__manager.cc
@@ -0,0 +1,29 @@
+--- media/audio/audio_manager.cc.orig 2019-04-08 08:18:22 UTC
++++ media/audio/audio_manager.cc
+@@ -48,7 +48,7 @@ class AudioManagerHelper {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void set_app_name(const std::string& app_name) { app_name_ = app_name; }
+ const std::string& app_name() const { return app_name_; }
+ #endif
+@@ -59,7 +59,7 @@ class AudioManagerHelper {
+ std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_for_testing_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string app_name_;
+ #endif
+
+@@ -128,7 +128,7 @@ std::unique_ptr<AudioManager> AudioManager::CreateForT
+ return Create(std::move(audio_thread), GetHelper()->fake_log_factory());
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AudioManager::SetGlobalAppName(const std::string& app_name) {
+ GetHelper()->set_app_name(app_name);
diff --git a/devel/electron5/files/patch-media_audio_audio__manager.h b/devel/electron5/files/patch-media_audio_audio__manager.h
new file mode 100644
index 000000000000..1206e1c0f003
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_audio__manager.h
@@ -0,0 +1,11 @@
+--- media/audio/audio_manager.h.orig 2019-04-08 08:18:22 UTC
++++ media/audio/audio_manager.h
+@@ -60,7 +60,7 @@ class MEDIA_EXPORT AudioManager {
+ static std::unique_ptr<AudioManager> CreateForTesting(
+ std::unique_ptr<AudioThread> audio_thread);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sets the name of the audio source as seen by external apps. Only actually
+ // used with PulseAudio as of this writing.
+ static void SetGlobalAppName(const std::string& app_name);
diff --git a/devel/electron5/files/patch-media_audio_audio__output__proxy__unittest.cc b/devel/electron5/files/patch-media_audio_audio__output__proxy__unittest.cc
new file mode 100644
index 000000000000..2edd7bc92e96
--- /dev/null
+++ b/devel/electron5/files/patch-media_audio_audio__output__proxy__unittest.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_output_proxy_unittest.cc.orig 2019-04-08 08:32:59 UTC
++++ media/audio/audio_output_proxy_unittest.cc
+@@ -410,7 +410,7 @@ class AudioOutputProxyTest : public testing::Test {
+ // |stream| is closed at this point. Start() should reopen it again.
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
+ .Times(2)
+- .WillRepeatedly(Return(reinterpret_cast<AudioOutputStream*>(NULL)));
++ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ EXPECT_CALL(callback_, OnError()).Times(2);
+
diff --git a/devel/electron5/files/patch-media_base_audio__latency.cc b/devel/electron5/files/patch-media_base_audio__latency.cc
new file mode 100644
index 000000000000..3e0733304ea8
--- /dev/null
+++ b/devel/electron5/files/patch-media_base_audio__latency.cc
@@ -0,0 +1,11 @@
+--- media/base/audio_latency.cc.orig 2019-04-08 08:18:22 UTC
++++ media/base/audio_latency.cc
+@@ -106,7 +106,7 @@ int AudioLatency::GetRtcBufferSize(int sample_rate, in
+ return frames_per_buffer;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // On Linux, MacOS and Fuchsia, the low level IO implementations on the
+ // browser side supports all buffer size the clients want. We use the native
+ // peer connection buffer size (10ms) to achieve best possible performance.
diff --git a/devel/electron5/files/patch-media_base_scopedfd__helper.h b/devel/electron5/files/patch-media_base_scopedfd__helper.h
new file mode 100644
index 000000000000..6ad60567ddf7
--- /dev/null
+++ b/devel/electron5/files/patch-media_base_scopedfd__helper.h
@@ -0,0 +1,19 @@
+--- media/base/scopedfd_helper.h.orig 2019-04-08 08:18:23 UTC
++++ media/base/scopedfd_helper.h
+@@ -14,14 +14,14 @@ namespace media {
+ // since the only current user is V4L2 we are limiting the scope to OS_LINUX so
+ // the binary size does not inflate on non-using systems. Feel free to adapt
+ // this and BUILD.gn as our needs evolve.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ // Return a new vector containing duplicates of |fds|, or an empty vector in
+ // case of error.
+ MEDIA_EXPORT std::vector<base::ScopedFD> DuplicateFDs(
+ const std::vector<base::ScopedFD>& fds);
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace media
+
diff --git a/devel/electron5/files/patch-media_base_video__frame.cc b/devel/electron5/files/patch-media_base_video__frame.cc
new file mode 100644
index 000000000000..c40ba7da4618
--- /dev/null
+++ b/devel/electron5/files/patch-media_base_video__frame.cc
@@ -0,0 +1,47 @@
+--- media/base/video_frame.cc.orig 2019-04-08 08:32:59 UTC
++++ media/base/video_frame.cc
+@@ -53,7 +53,7 @@ static std::string StorageTypeToString(
+ return "OWNED_MEMORY";
+ case VideoFrame::STORAGE_SHMEM:
+ return "SHMEM";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case VideoFrame::STORAGE_DMABUFS:
+ return "DMABUFS";
+ #endif
+@@ -68,7 +68,7 @@ static std::string StorageTypeToString(
+ // static
+ bool VideoFrame::IsStorageTypeMappable(VideoFrame::StorageType storage_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This is not strictly needed but makes explicit that, at VideoFrame
+ // level, DmaBufs are not mappable from userspace.
+ storage_type != VideoFrame::STORAGE_DMABUFS &&
+@@ -461,7 +461,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuva
+ return frame;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ scoped_refptr<VideoFrame> VideoFrame::WrapExternalDmabufs(
+ const VideoFrameLayout& layout,
+@@ -592,7 +592,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If there are any |dmabuf_fds_| plugged in, we should duplicate them.
+ if (frame->storage_type() == STORAGE_DMABUFS) {
+ wrapping_frame->dmabuf_fds_ = DuplicateFDs(frame->dmabuf_fds_);
+@@ -917,7 +917,7 @@ size_t VideoFrame::shared_memory_offset() const {
+ return shared_memory_offset_;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const std::vector<base::ScopedFD>& VideoFrame::DmabufFds() const {
+ DCHECK_EQ(storage_type_, STORAGE_DMABUFS);
+
diff --git a/devel/electron5/files/patch-media_base_video__frame.h b/devel/electron5/files/patch-media_base_video__frame.h
new file mode 100644
index 000000000000..754660888d92
--- /dev/null
+++ b/devel/electron5/files/patch-media_base_video__frame.h
@@ -0,0 +1,38 @@
+--- media/base/video_frame.h.orig 2019-04-08 08:32:59 UTC
++++ media/base/video_frame.h
+@@ -71,7 +71,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ STORAGE_UNOWNED_MEMORY = 2, // External, non owned data pointers.
+ STORAGE_OWNED_MEMORY = 3, // VideoFrame has allocated its own data buffer.
+ STORAGE_SHMEM = 4, // Pixels are backed by Shared Memory.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(mcasas): Consider turning this type into STORAGE_NATIVE
+ // based on the idea of using this same enum value for both DMA
+ // buffers on Linux and CVPixelBuffers on Mac (which currently use
+@@ -245,7 +245,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ uint8_t* a_data,
+ base::TimeDelta timestamp);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Wraps provided dmabufs
+ // (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html) with a
+ // VideoFrame. The frame will take ownership of |dmabuf_fds|, and will
+@@ -430,7 +430,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // Returns the offset into the shared memory where the frame data begins.
+ size_t shared_memory_offset() const;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a vector containing the backing DmaBufs for this frame. The number
+ // of returned DmaBufs will be equal or less than the number of planes of
+ // the frame. If there are less, this means that the last FD contains the
+@@ -624,7 +624,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // memory.
+ size_t shared_memory_offset_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dmabufs for the frame, used when storage is STORAGE_DMABUFS. Size is either
+ // equal or less than the number of planes of the frame. If it is less, then
+ // the memory area represented by the last FD contains the remaining planes.
diff --git a/devel/electron5/files/patch-media_capture_video_create__video__capture__device__factory.cc b/devel/electron5/files/patch-media_capture_video_create__video__capture__device__factory.cc
new file mode 100644
index 000000000000..c35af6d0cfd1
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_create__video__capture__device__factory.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/create_video_capture_device_factory.cc.orig 2019-04-08 08:18:23 UTC
++++ media/capture/video/create_video_capture_device_factory.cc
+@@ -10,7 +10,7 @@
+ #include "media/capture/video/fake_video_capture_device_factory.h"
+ #include "media/capture/video/file_video_capture_device_factory.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "media/capture/video/linux/video_capture_device_factory_linux.h"
+ #elif defined(OS_CHROMEOS)
+ #include "media/capture/video/chromeos/public/cros_features.h"
+@@ -33,7 +33,7 @@ namespace {
+ std::unique_ptr<VideoCaptureDeviceFactory>
+ CreatePlatformSpecificVideoCaptureDeviceFactory(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return std::make_unique<VideoCaptureDeviceFactoryLinux>(ui_task_runner);
+ #elif defined(OS_CHROMEOS)
+ // On Chrome OS we have to support two use cases:
diff --git a/devel/electron5/files/patch-media_capture_video_fake__video__capture__device__factory.cc b/devel/electron5/files/patch-media_capture_video_fake__video__capture__device__factory.cc
new file mode 100644
index 000000000000..0fe3b2b6e5f7
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_fake__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/fake_video_capture_device_factory.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/fake_video_capture_device_factory.cc
+@@ -204,7 +204,7 @@ void FakeVideoCaptureDeviceFactory::GetDeviceDescripto
+ for (const auto& entry : devices_config_) {
+ device_descriptors->emplace_back(
+ base::StringPrintf("fake_device_%d", entry_index), entry.device_id,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #elif defined(OS_MACOSX)
+ VideoCaptureApi::MACOSX_AVFOUNDATION
diff --git a/devel/electron5/files/patch-media_capture_video_file__video__capture__device__factory.cc b/devel/electron5/files/patch-media_capture_video_file__video__capture__device__factory.cc
new file mode 100644
index 000000000000..033e1da95914
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_file__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/file_video_capture_device_factory.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/file_video_capture_device_factory.cc
+@@ -53,7 +53,7 @@ void FileVideoCaptureDeviceFactory::GetDeviceDescripto
+ #elif defined(OS_MACOSX)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::MACOSX_AVFOUNDATION
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #else
diff --git a/devel/electron5/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc b/devel/electron5/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
new file mode 100644
index 000000000000..f8f5049ac9b3
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
@@ -0,0 +1,26 @@
+--- media/capture/video/linux/v4l2_capture_delegate.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -4,8 +4,10 @@
+
+ #include "media/capture/video/linux/v4l2_capture_delegate.h"
+
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #include <linux/videodev2.h>
++#endif
+ #include <poll.h>
+ #include <sys/fcntl.h>
+ #include <sys/ioctl.h>
+@@ -24,10 +26,10 @@
+
+ using media::mojom::MeteringMode;
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
++// #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+ // 16 bit depth, Realsense F200.
+ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
+-#endif
++// #endif
+
+ // TODO(aleksandar.stojiljkovic): Wrap this with kernel version check once the
+ // format is introduced to kernel.
diff --git a/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc b/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
new file mode 100644
index 000000000000..3d050521bb7a
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
@@ -0,0 +1,32 @@
+--- media/capture/video/linux/video_capture_device_factory_linux.cc.orig 2019-04-08 08:18:23 UTC
++++ media/capture/video/linux/video_capture_device_factory_linux.cc
+@@ -259,6 +259,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (!(capabilities & V4L2_CAP_VIDEO_CAPTURE))
+ return false;
+
++#if !defined(OS_FREEBSD)
+ const std::vector<uint32_t>& usable_fourccs =
+ VideoCaptureDeviceLinux::GetListOfUsableFourCCs(false);
+ v4l2_fmtdesc fmtdesc = {};
+@@ -267,6 +268,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (base::ContainsValue(usable_fourccs, fmtdesc.pixelformat))
+ return true;
+ }
++#endif
+
+ DVLOG(1) << "No usable formats found";
+ return false;
+@@ -312,9 +314,13 @@ void VideoCaptureDeviceFactoryLinux::GetSupportedForma
+ v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ for (; DoIoctl(fd, VIDIOC_ENUM_FMT, &v4l2_format) == 0; ++v4l2_format.index) {
+ VideoCaptureFormat supported_format;
++#if !defined(OS_FREEBSD)
+ supported_format.pixel_format =
+ VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+ v4l2_format.pixelformat);
++#else
++ supported_format.pixel_format = PIXEL_FORMAT_UNKNOWN;
++#endif
+
+ if (supported_format.pixel_format == PIXEL_FORMAT_UNKNOWN)
+ continue;
diff --git a/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__linux.cc b/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__linux.cc
new file mode 100644
index 000000000000..7de7520a8409
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_linux_video__capture__device__linux.cc
@@ -0,0 +1,60 @@
+--- media/capture/video/linux/video_capture_device_linux.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/linux/video_capture_device_linux.cc
+@@ -37,6 +37,7 @@ int TranslatePowerLineFrequencyToV4L2(PowerLineFrequen
+
+ } // namespace
+
++#if !defined(OS_FREEBSD)
+ // Translates Video4Linux pixel formats to Chromium pixel formats.
+ // static
+ VideoPixelFormat VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+@@ -50,6 +51,7 @@ std::vector<uint32_t> VideoCaptureDeviceLinux::GetList
+ bool favour_mjpeg) {
+ return V4L2CaptureDelegate::GetListOfUsableFourCcs(favour_mjpeg);
+ }
++#endif // !defined(OS_FREEBSD)
+
+ VideoCaptureDeviceLinux::VideoCaptureDeviceLinux(
+ scoped_refptr<V4L2CaptureDevice> v4l2,
+@@ -68,6 +70,7 @@ VideoCaptureDeviceLinux::~VideoCaptureDeviceLinux() {
+ void VideoCaptureDeviceLinux::AllocateAndStart(
+ const VideoCaptureParams& params,
+ std::unique_ptr<VideoCaptureDevice::Client> client) {
++#if !defined(OS_FREEBSD)
+ DCHECK(!capture_impl_);
+ if (v4l2_thread_.IsRunning())
+ return; // Wrong state.
+@@ -95,9 +98,11 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ for (auto& request : photo_requests_queue_)
+ v4l2_thread_.task_runner()->PostTask(FROM_HERE, std::move(request));
+ photo_requests_queue_.clear();
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
++#if !defined(OS_FREEBSD)
+ if (!v4l2_thread_.IsRunning())
+ return; // Wrong state.
+ v4l2_thread_.task_runner()->PostTask(
+@@ -107,6 +112,7 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ v4l2_thread_.Stop();
+
+ capture_impl_ = nullptr;
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
+@@ -149,11 +155,13 @@ void VideoCaptureDeviceLinux::SetPhotoOptions(
+ }
+
+ void VideoCaptureDeviceLinux::SetRotation(int rotation) {
++#if !defined(OS_FREEBSD)
+ if (v4l2_thread_.IsRunning()) {
+ v4l2_thread_.task_runner()->PostTask(
+ FROM_HERE, base::BindOnce(&V4L2CaptureDelegate::SetRotation,
+ capture_impl_->GetWeakPtr(), rotation));
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace media
diff --git a/devel/electron5/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc b/devel/electron5/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
new file mode 100644
index 000000000000..ea2cf0f3c02c
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/mock_gpu_memory_buffer_manager.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/mock_gpu_memory_buffer_manager.cc
+@@ -103,7 +103,7 @@ class FakeGpuMemoryBuffer : public gfx::GpuMemoryBuffe
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::NATIVE_PIXMAP;
+ handle.id = handle_.id;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.native_pixmap_handle =
+ gfx::CloneHandleForIPC(handle_.native_pixmap_handle);
+ #endif
diff --git a/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.cc b/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.cc
new file mode 100644
index 000000000000..6a23b69c4743
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/shared_memory_handle_provider.cc.orig 2019-04-08 08:18:23 UTC
++++ media/capture/video/shared_memory_handle_provider.cc
+@@ -63,7 +63,7 @@ bool SharedMemoryHandleProvider::InitFromMojoHandle(
+ return true;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool SharedMemoryHandleProvider::InitAsReadOnlyFromRawFileDescriptor(
+ mojo::ScopedHandle fd_handle,
+ uint32_t memory_size_in_bytes) {
diff --git a/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.h b/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.h
new file mode 100644
index 000000000000..e6aae89c4358
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_shared__memory__handle__provider.h
@@ -0,0 +1,11 @@
+--- media/capture/video/shared_memory_handle_provider.h.orig 2019-04-08 08:18:23 UTC
++++ media/capture/video/shared_memory_handle_provider.h
+@@ -38,7 +38,7 @@ class CAPTURE_EXPORT SharedMemoryHandleProvider
+
+ // This requires platforms where base::SharedMemoryHandle is backed by a
+ // file descriptor.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool InitAsReadOnlyFromRawFileDescriptor(mojo::ScopedHandle fd_handle,
+ uint32_t memory_size_in_bytes);
+ #endif // defined(OS_LINUX)
diff --git a/devel/electron5/files/patch-media_capture_video_video__capture__device__client.cc b/devel/electron5/files/patch-media_capture_video_video__capture__device__client.cc
new file mode 100644
index 000000000000..29b7a3c2b088
--- /dev/null
+++ b/devel/electron5/files/patch-media_capture_video_video__capture__device__client.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_device_client.cc.orig 2019-04-08 08:32:59 UTC
++++ media/capture/video/video_capture_device_client.cc
+@@ -236,7 +236,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
+ // see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
+ // Windows RGB24 defines blue at lowest byte,
+ // see https://msdn.microsoft.com/en-us/library/windows/desktop/dd407253
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ origin_colorspace = libyuv::FOURCC_RAW;
+ #elif defined(OS_WIN)
+ origin_colorspace = libyuv::FOURCC_24BG;
diff --git a/devel/electron5/files/patch-media_filters_vp9__parser.h b/devel/electron5/files/patch-media_filters_vp9__parser.h
new file mode 100644
index 000000000000..236d06463247
--- /dev/null
+++ b/devel/electron5/files/patch-media_filters_vp9__parser.h
@@ -0,0 +1,10 @@
+--- media/filters/vp9_parser.h.orig 2019-04-08 08:18:23 UTC
++++ media/filters/vp9_parser.h
+@@ -14,6 +14,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <unistd.h>
+ #include <sys/types.h>
+
+ #include <memory>
diff --git a/devel/electron5/files/patch-media_formats_common_offset__byte__queue.cc b/devel/electron5/files/patch-media_formats_common_offset__byte__queue.cc
new file mode 100644
index 000000000000..dd4a1c50da88
--- /dev/null
+++ b/devel/electron5/files/patch-media_formats_common_offset__byte__queue.cc
@@ -0,0 +1,20 @@
+--- media/formats/common/offset_byte_queue.cc.orig 2019-04-08 08:18:23 UTC
++++ media/formats/common/offset_byte_queue.cc
+@@ -46,13 +46,13 @@ void OffsetByteQueue::PeekAt(int64_t offset, const uin
+ *size = tail() - offset;
+ }
+
+-bool OffsetByteQueue::Trim(int64_t max_offset) {
+- if (max_offset < head_) return true;
+- if (max_offset > tail()) {
++bool OffsetByteQueue::Trim(int64_t _max_offset) {
++ if (_max_offset < head_) return true;
++ if (_max_offset > tail()) {
+ Pop(size_);
+ return false;
+ }
+- Pop(max_offset - head_);
++ Pop(_max_offset - head_);
+ return true;
+ }
+
diff --git a/devel/electron5/files/patch-media_formats_common_offset__byte__queue.h b/devel/electron5/files/patch-media_formats_common_offset__byte__queue.h
new file mode 100644
index 000000000000..ebfc7cbdb13f
--- /dev/null
+++ b/devel/electron5/files/patch-media_formats_common_offset__byte__queue.h
@@ -0,0 +1,22 @@
+--- media/formats/common/offset_byte_queue.h.orig 2019-04-08 08:18:23 UTC
++++ media/formats/common/offset_byte_queue.h
+@@ -36,15 +36,15 @@ class MEDIA_EXPORT OffsetByteQueue {
+ // a null |buf| and a |size| of zero.
+ void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
+- // Marks the bytes up to (but not including) |max_offset| as ready for
++ // Marks the bytes up to (but not including) |_max_offset| as ready for
+ // deletion. This is relatively inexpensive, but will not necessarily reduce
+ // the resident buffer size right away (or ever).
+ //
+ // Returns true if the full range of bytes were successfully trimmed,
+- // including the case where |max_offset| is less than the current head.
+- // Returns false if |max_offset| > tail() (although all bytes currently
++ // including the case where |_max_offset| is less than the current head.
++ // Returns false if |_max_offset| > tail() (although all bytes currently
+ // buffered are still cleared).
+- bool Trim(int64_t max_offset);
++ bool Trim(int64_t _max_offset);
+
+ // The head and tail positions, in terms of the file's absolute offsets.
+ // tail() is an exclusive bound.
diff --git a/devel/electron5/files/patch-media_formats_mp2t_es__parser__adts.cc b/devel/electron5/files/patch-media_formats_mp2t_es__parser__adts.cc
new file mode 100644
index 000000000000..018a9b784027
--- /dev/null
+++ b/devel/electron5/files/patch-media_formats_mp2t_es__parser__adts.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_adts.cc.orig 2019-04-08 08:32:59 UTC
++++ media/formats/mp2t/es_parser_adts.cc
+@@ -63,11 +63,11 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - kADTSHeaderMinSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - kADTSHeaderMinSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (!isAdtsSyncWord(cur_buf))
+ continue;
+@@ -107,7 +107,7 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron5/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc b/devel/electron5/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
new file mode 100644
index 000000000000..4c873d31d4f4
--- /dev/null
+++ b/devel/electron5/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_mpeg1audio.cc.orig 2019-04-08 08:18:23 UTC
++++ media/formats/mp2t/es_parser_mpeg1audio.cc
+@@ -108,11 +108,11 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (cur_buf[0] != 0xff)
+ continue;
+@@ -153,7 +153,7 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron5/files/patch-media_media__options.gni b/devel/electron5/files/patch-media_media__options.gni
new file mode 100644
index 000000000000..bfa30ca26d18
--- /dev/null
+++ b/devel/electron5/files/patch-media_media__options.gni
@@ -0,0 +1,12 @@
+--- media/media_options.gni.orig 2019-04-08 08:33:00 UTC
++++ media/media_options.gni
+@@ -100,6 +100,9 @@ declare_args() {
+ # Enables runtime selection of ALSA library for audio.
+ use_alsa = false
+
++ # Enable runtime selection of sndio(7)
++ use_sndio = false
++
+ # Alsa should be used on non-Android, non-Mac POSIX systems.
+ # Alsa should be used on desktop Chromecast and audio-only Chromecast builds.
+ if (is_posix && !is_android && !is_mac &&
diff --git a/devel/electron5/files/patch-media_mojo_services_gpu__mojo__media__client.cc b/devel/electron5/files/patch-media_mojo_services_gpu__mojo__media__client.cc
new file mode 100644
index 000000000000..3172827a9f0f
--- /dev/null
+++ b/devel/electron5/files/patch-media_mojo_services_gpu__mojo__media__client.cc
@@ -0,0 +1,20 @@
+--- media/mojo/services/gpu_mojo_media_client.cc.orig 2019-04-08 08:33:00 UTC
++++ media/mojo/services/gpu_mojo_media_client.cc
+@@ -55,7 +55,7 @@ namespace media {
+ namespace {
+
+ #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
+- defined(OS_WIN) || defined(OS_LINUX)
++ defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ gpu::CommandBufferStub* GetCommandBufferStub(
+ base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
+ base::UnguessableToken channel_token,
+@@ -172,7 +172,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::Crea
+ std::make_unique<VideoFrameFactoryImpl>(gpu_task_runner_,
+ std::move(get_stub_cb)));
+ #elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<VideoDecoder> vda_video_decoder = VdaVideoDecoder::Create(
+ task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
+ gpu_preferences_, gpu_workarounds_,
diff --git a/devel/electron5/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc b/devel/electron5/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
new file mode 100644
index 000000000000..53075d2de6e4
--- /dev/null
+++ b/devel/electron5/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
@@ -0,0 +1,11 @@
+--- media/video/gpu_memory_buffer_video_frame_pool.cc.orig 2019-04-08 08:33:00 UTC
++++ media/video/gpu_memory_buffer_video_frame_pool.cc
+@@ -633,7 +633,7 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHa
+ }
+
+ bool is_software_backed_video_frame = !video_frame->HasTextures();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ is_software_backed_video_frame &= !video_frame->HasDmaBufs();
+ #endif
+
diff --git a/devel/electron5/files/patch-mojo_public_c_system_thunks.cc b/devel/electron5/files/patch-mojo_public_c_system_thunks.cc
new file mode 100644
index 000000000000..3fe24aa3d915
--- /dev/null
+++ b/devel/electron5/files/patch-mojo_public_c_system_thunks.cc
@@ -0,0 +1,47 @@
+--- mojo/public/c/system/thunks.cc.orig 2019-04-08 08:18:24 UTC
++++ mojo/public/c/system/thunks.cc
+@@ -16,7 +16,7 @@
+ #include "build/build_config.h"
+ #include "mojo/public/c/system/core.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
+ #include "base/optional.h"
+@@ -28,7 +28,7 @@ namespace {
+
+ typedef void (*MojoGetSystemThunksFunction)(MojoSystemThunks* thunks);
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ PROTECTED_MEMORY_SECTION
+ base::ProtectedMemory<MojoGetSystemThunksFunction> g_get_thunks;
+ #endif
+@@ -65,7 +65,7 @@ namespace mojo {
+ class CoreLibraryInitializer {
+ public:
+ CoreLibraryInitializer(const MojoInitializeOptions* options) {
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ bool application_provided_path = false;
+ base::Optional<base::FilePath> library_path;
+ if (options && options->struct_size >= sizeof(*options) &&
+@@ -84,7 +84,7 @@ class CoreLibraryInitializer {
+
+ if (!library_path) {
+ // Default to looking for the library in the current working directory.
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::FilePath::CharType kDefaultLibraryPathValue[] =
+ FILE_PATH_LITERAL("./libmojo_core.so");
+ #elif defined(OS_WIN)
+@@ -147,7 +147,7 @@ class CoreLibraryInitializer {
+ ~CoreLibraryInitializer() = default;
+
+ private:
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ base::Optional<base::ScopedNativeLibrary> library_;
+ #endif
+
diff --git a/devel/electron5/files/patch-mojo_public_js_mojo__bindings__resources.grd b/devel/electron5/files/patch-mojo_public_js_mojo__bindings__resources.grd
new file mode 100644
index 000000000000..cce20626c908
--- /dev/null
+++ b/devel/electron5/files/patch-mojo_public_js_mojo__bindings__resources.grd
@@ -0,0 +1,11 @@
+--- mojo/public/js/mojo_bindings_resources.grd.orig 2019-04-08 08:33:00 UTC
++++ mojo/public/js/mojo_bindings_resources.grd
+@@ -23,7 +23,7 @@
+ use_base_dir="false"
+ type="BINDATA"
+ compress="gzip" />
+- <if expr="is_win or is_macosx or is_linux">
++ <if expr="is_win or is_macosx or is_posix">
+ <include name="IDR_MOJO_TIME_MOJOM_JS"
+ file="${root_gen_dir}/mojo/public/mojom/base/time.mojom.js"
+ use_base_dir="false"
diff --git a/devel/electron5/files/patch-net_BUILD.gn b/devel/electron5/files/patch-net_BUILD.gn
new file mode 100644
index 000000000000..f638d4205b9e
--- /dev/null
+++ b/devel/electron5/files/patch-net_BUILD.gn
@@ -0,0 +1,37 @@
+--- net/BUILD.gn.orig 2019-04-08 08:33:00 UTC
++++ net/BUILD.gn
+@@ -97,7 +97,7 @@ net_configs = [
+ "//build/config/compiler:wexit_time_destructors",
+ ]
+
+-if (is_linux) {
++if (is_linux && !is_bsd) {
+ net_configs += [ "//build/config/linux:libresolv" ]
+ }
+
+@@ -1900,7 +1900,7 @@ component("net") {
+ }
+
+ # Use getifaddrs() on POSIX platforms, except Linux and Android.
+- if (is_posix && !is_linux && !is_android) {
++ if (is_posix && ((!is_linux && !is_android) || (is_bsd))) {
+ sources += [
+ "base/network_interfaces_getifaddrs.cc",
+ "base/network_interfaces_getifaddrs.h",
+@@ -1993,6 +1993,16 @@ component("net") {
+ ]
+
+ sources -= [ "disk_cache/blockfile/file_posix.cc" ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "base/address_tracker_linux.cc",
++ "base/address_tracker_linux.h",
++ "base/network_change_notifier_linux.cc",
++ "base/network_change_notifier_linux.h",
++ "base/network_interfaces_linux.cc",
++ ]
+ }
+
+ if (is_ios || is_mac) {
diff --git a/devel/electron5/files/patch-net_base_address__tracker__linux.cc b/devel/electron5/files/patch-net_base_address__tracker__linux.cc
new file mode 100644
index 000000000000..a922c8691e46
--- /dev/null
+++ b/devel/electron5/files/patch-net_base_address__tracker__linux.cc
@@ -0,0 +1,360 @@
+--- net/base/address_tracker_linux.cc.orig 2019-04-08 08:33:00 UTC
++++ net/base/address_tracker_linux.cc
+@@ -21,96 +21,10 @@
+ namespace net {
+ namespace internal {
+
+-namespace {
+-
+-// Some kernel functions such as wireless_send_event and rtnetlink_ifinfo_prep
+-// may send spurious messages over rtnetlink. RTM_NEWLINK messages where
+-// ifi_change == 0 and rta_type == IFLA_WIRELESS should be ignored.
+-bool IgnoreWirelessChange(const struct nlmsghdr* header,
+- const struct ifinfomsg* msg) {
+- size_t length = IFLA_PAYLOAD(header);
+- for (const struct rtattr* attr = IFLA_RTA(msg); RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- if (attr->rta_type == IFLA_WIRELESS && msg->ifi_change == 0)
+- return true;
+- }
+- return false;
+-}
+-
+-// Retrieves address from NETLINK address message.
+-// Sets |really_deprecated| for IPv6 addresses with preferred lifetimes of 0.
+-bool GetAddress(const struct nlmsghdr* header,
+- IPAddress* out,
+- bool* really_deprecated) {
+- if (really_deprecated)
+- *really_deprecated = false;
+- const struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- size_t address_length = 0;
+- switch (msg->ifa_family) {
+- case AF_INET:
+- address_length = IPAddress::kIPv4AddressSize;
+- break;
+- case AF_INET6:
+- address_length = IPAddress::kIPv6AddressSize;
+- break;
+- default:
+- // Unknown family.
+- return false;
+- }
+- // Use IFA_ADDRESS unless IFA_LOCAL is present. This behavior here is based on
+- // getaddrinfo in glibc (check_pf.c). Judging from kernel implementation of
+- // NETLINK, IPv4 addresses have only the IFA_ADDRESS attribute, while IPv6
+- // have the IFA_LOCAL attribute.
+- uint8_t* address = NULL;
+- uint8_t* local = NULL;
+- size_t length = IFA_PAYLOAD(header);
+- for (const struct rtattr* attr =
+- reinterpret_cast<const struct rtattr*>(IFA_RTA(msg));
+- RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- switch (attr->rta_type) {
+- case IFA_ADDRESS:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- address = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_LOCAL:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- local = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_CACHEINFO: {
+- const struct ifa_cacheinfo *cache_info =
+- reinterpret_cast<const struct ifa_cacheinfo*>(RTA_DATA(attr));
+- if (really_deprecated)
+- *really_deprecated = (cache_info->ifa_prefered == 0);
+- } break;
+- default:
+- break;
+- }
+- }
+- if (local)
+- address = local;
+- if (!address)
+- return false;
+- *out = IPAddress(address, address_length);
+- return true;
+-}
+-
+-} // namespace
+-
+ // static
+ char* AddressTrackerLinux::GetInterfaceName(int interface_index, char* buf) {
+- memset(buf, 0, IFNAMSIZ);
+- base::ScopedFD ioctl_socket = GetSocketForIoctl();
+- if (!ioctl_socket.is_valid())
+- return buf;
+-
+- struct ifreq ifr = {};
+- ifr.ifr_ifindex = interface_index;
+-
+- if (ioctl(ioctl_socket.get(), SIOCGIFNAME, &ifr) == 0)
+- strncpy(buf, ifr.ifr_name, IFNAMSIZ - 1);
+- return buf;
++ NOTIMPLEMENTED();
++ return NULL;
+ }
+
+ AddressTrackerLinux::AddressTrackerLinux()
+@@ -153,93 +67,8 @@ AddressTrackerLinux::~AddressTrackerLinux() {
+ }
+
+ void AddressTrackerLinux::Init() {
+- netlink_fd_ = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+- if (netlink_fd_ < 0) {
+- PLOG(ERROR) << "Could not create NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- int rv;
+-
+- if (tracking_) {
+- // Request notifications.
+- struct sockaddr_nl addr = {};
+- addr.nl_family = AF_NETLINK;
+- addr.nl_pid = getpid();
+- // TODO(szym): Track RTMGRP_LINK as well for ifi_type,
+- // http://crbug.com/113993
+- addr.nl_groups =
+- RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR | RTMGRP_NOTIFY | RTMGRP_LINK;
+- rv = bind(
+- netlink_fd_, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not bind NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+- }
+-
+- // Request dump of addresses.
+- struct sockaddr_nl peer = {};
+- peer.nl_family = AF_NETLINK;
+-
+- struct {
+- struct nlmsghdr header;
+- struct rtgenmsg msg;
+- } request = {};
+-
+- request.header.nlmsg_len = NLMSG_LENGTH(sizeof(request.msg));
+- request.header.nlmsg_type = RTM_GETADDR;
+- request.header.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+- request.header.nlmsg_pid = getpid();
+- request.msg.rtgen_family = AF_UNSPEC;
+-
+- rv = HANDLE_EINTR(sendto(netlink_fd_, &request, request.header.nlmsg_len,
+- 0, reinterpret_cast<struct sockaddr*>(&peer),
+- sizeof(peer)));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not send NETLINK request";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- // Consume pending message to populate the AddressMap, but don't notify.
+- // Sending another request without first reading responses results in EBUSY.
+- bool address_changed;
+- bool link_changed;
+- bool tunnel_changed;
+- ReadMessages(&address_changed, &link_changed, &tunnel_changed);
+-
+- // Request dump of link state
+- request.header.nlmsg_type = RTM_GETLINK;
+-
+- rv = HANDLE_EINTR(sendto(netlink_fd_, &request, request.header.nlmsg_len, 0,
+- reinterpret_cast<struct sockaddr*>(&peer),
+- sizeof(peer)));
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not send NETLINK request";
+- AbortAndForceOnline();
+- return;
+- }
+-
+- // Consume pending message to populate links_online_, but don't notify.
+- ReadMessages(&address_changed, &link_changed, &tunnel_changed);
+- {
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- connection_type_initialized_ = true;
+- connection_type_initialized_cv_.Broadcast();
+- }
+-
+- if (tracking_) {
+- rv = base::MessageLoopCurrentForIO::Get()->WatchFileDescriptor(
+- netlink_fd_, true, base::MessagePumpForIO::WATCH_READ, &watcher_, this);
+- if (rv < 0) {
+- PLOG(ERROR) << "Could not watch NETLINK socket";
+- AbortAndForceOnline();
+- return;
+- }
+- }
++NOTIMPLEMENTED();
++AbortAndForceOnline();
+ }
+
+ void AddressTrackerLinux::AbortAndForceOnline() {
+@@ -250,25 +79,6 @@ void AddressTrackerLinux::AbortAndForceOnline() {
+ connection_type_initialized_cv_.Broadcast();
+ }
+
+-AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
+- AddressTrackerAutoLock lock(*this, address_map_lock_);
+- return address_map_;
+-}
+-
+-std::unordered_set<int> AddressTrackerLinux::GetOnlineLinks() const {
+- AddressTrackerAutoLock lock(*this, online_links_lock_);
+- return online_links_;
+-}
+-
+-bool AddressTrackerLinux::IsInterfaceIgnored(int interface_index) const {
+- if (ignored_interfaces_.empty())
+- return false;
+-
+- char buf[IFNAMSIZ] = {0};
+- const char* interface_name = get_interface_name_(interface_index, buf);
+- return ignored_interfaces_.find(interface_name) != ignored_interfaces_.end();
+-}
+-
+ NetworkChangeNotifier::ConnectionType
+ AddressTrackerLinux::GetCurrentConnectionType() {
+ // http://crbug.com/125097
+@@ -326,102 +136,7 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ bool* address_changed,
+ bool* link_changed,
+ bool* tunnel_changed) {
+- DCHECK(buffer);
+- for (struct nlmsghdr* header = reinterpret_cast<struct nlmsghdr*>(buffer);
+- NLMSG_OK(header, length);
+- header = NLMSG_NEXT(header, length)) {
+- switch (header->nlmsg_type) {
+- case NLMSG_DONE:
+- return;
+- case NLMSG_ERROR: {
+- const struct nlmsgerr* msg =
+- reinterpret_cast<struct nlmsgerr*>(NLMSG_DATA(header));
+- LOG(ERROR) << "Unexpected netlink error " << msg->error << ".";
+- } return;
+- case RTM_NEWADDR: {
+- IPAddress address;
+- bool really_deprecated;
+- struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- if (IsInterfaceIgnored(msg->ifa_index))
+- break;
+- if (GetAddress(header, &address, &really_deprecated)) {
+- AddressTrackerAutoLock lock(*this, address_map_lock_);
+- // Routers may frequently (every few seconds) output the IPv6 ULA
+- // prefix which can cause the linux kernel to frequently output two
+- // back-to-back messages, one without the deprecated flag and one with
+- // the deprecated flag but both with preferred lifetimes of 0. Avoid
+- // interpretting this as an actual change by canonicalizing the two
+- // messages by setting the deprecated flag based on the preferred
+- // lifetime also. http://crbug.com/268042
+- if (really_deprecated)
+- msg->ifa_flags |= IFA_F_DEPRECATED;
+- // Only indicate change if the address is new or ifaddrmsg info has
+- // changed.
+- auto it = address_map_.find(address);
+- if (it == address_map_.end()) {
+- address_map_.insert(it, std::make_pair(address, *msg));
+- *address_changed = true;
+- } else if (memcmp(&it->second, msg, sizeof(*msg))) {
+- it->second = *msg;
+- *address_changed = true;
+- }
+- }
+- } break;
+- case RTM_DELADDR: {
+- IPAddress address;
+- const struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- if (IsInterfaceIgnored(msg->ifa_index))
+- break;
+- if (GetAddress(header, &address, NULL)) {
+- AddressTrackerAutoLock lock(*this, address_map_lock_);
+- if (address_map_.erase(address))
+- *address_changed = true;
+- }
+- } break;
+- case RTM_NEWLINK: {
+- const struct ifinfomsg* msg =
+- reinterpret_cast<struct ifinfomsg*>(NLMSG_DATA(header));
+- if (IsInterfaceIgnored(msg->ifi_index))
+- break;
+- if (IgnoreWirelessChange(header, msg)) {
+- VLOG(2) << "Ignoring RTM_NEWLINK message";
+- break;
+- }
+- if (!(msg->ifi_flags & IFF_LOOPBACK) && (msg->ifi_flags & IFF_UP) &&
+- (msg->ifi_flags & IFF_LOWER_UP) && (msg->ifi_flags & IFF_RUNNING)) {
+- AddressTrackerAutoLock lock(*this, online_links_lock_);
+- if (online_links_.insert(msg->ifi_index).second) {
+- *link_changed = true;
+- if (IsTunnelInterface(msg->ifi_index))
+- *tunnel_changed = true;
+- }
+- } else {
+- AddressTrackerAutoLock lock(*this, online_links_lock_);
+- if (online_links_.erase(msg->ifi_index)) {
+- *link_changed = true;
+- if (IsTunnelInterface(msg->ifi_index))
+- *tunnel_changed = true;
+- }
+- }
+- } break;
+- case RTM_DELLINK: {
+- const struct ifinfomsg* msg =
+- reinterpret_cast<struct ifinfomsg*>(NLMSG_DATA(header));
+- if (IsInterfaceIgnored(msg->ifi_index))
+- break;
+- AddressTrackerAutoLock lock(*this, online_links_lock_);
+- if (online_links_.erase(msg->ifi_index)) {
+- *link_changed = true;
+- if (IsTunnelInterface(msg->ifi_index))
+- *tunnel_changed = true;
+- }
+- } break;
+- default:
+- break;
+- }
+- }
++ NOTIMPLEMENTED();
+ }
+
+ void AddressTrackerLinux::OnFileCanReadWithoutBlocking(int fd) {
+@@ -458,31 +173,7 @@ bool AddressTrackerLinux::IsTunnelInterfaceName(const
+ }
+
+ void AddressTrackerLinux::UpdateCurrentConnectionType() {
+- AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+- std::unordered_set<int> online_links = GetOnlineLinks();
+-
+- // Strip out tunnel interfaces from online_links
+- for (auto it = online_links.cbegin(); it != online_links.cend();) {
+- if (IsTunnelInterface(*it)) {
+- it = online_links.erase(it);
+- } else {
+- ++it;
+- }
+- }
+-
+- NetworkInterfaceList networks;
+- NetworkChangeNotifier::ConnectionType type =
+- NetworkChangeNotifier::CONNECTION_NONE;
+- if (GetNetworkListImpl(&networks, 0, online_links, address_map,
+- get_interface_name_)) {
+- type = NetworkChangeNotifier::ConnectionTypeFromInterfaceList(networks);
+- } else {
+- type = online_links.empty() ? NetworkChangeNotifier::CONNECTION_NONE
+- : NetworkChangeNotifier::CONNECTION_UNKNOWN;
+- }
+-
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- current_connection_type_ = type;
++ NOTIMPLEMENTED();
+ }
+
+ int AddressTrackerLinux::GetThreadsWaitingForConnectionTypeInitForTesting()
diff --git a/devel/electron5/files/patch-net_base_address__tracker__linux.h b/devel/electron5/files/patch-net_base_address__tracker__linux.h
new file mode 100644
index 000000000000..b9fde9d72f32
--- /dev/null
+++ b/devel/electron5/files/patch-net_base_address__tracker__linux.h
@@ -0,0 +1,12 @@
+--- net/base/address_tracker_linux.h.orig 2019-04-08 08:33:00 UTC
++++ net/base/address_tracker_linux.h
+@@ -7,9 +7,6 @@
+
+ #include <sys/socket.h> // Needed to include netlink.
+ // Mask superfluous definition of |struct net|. This is fixed in Linux 2.6.38.
+-#define net net_kernel
+-#include <linux/rtnetlink.h>
+-#undef net
+ #include <stddef.h>
+
+ #include <map>
diff --git a/devel/electron5/files/patch-net_base_address__tracker__linux__unittest.cc b/devel/electron5/files/patch-net_base_address__tracker__linux__unittest.cc
new file mode 100644
index 000000000000..c85866fb9652
--- /dev/null
+++ b/devel/electron5/files/patch-net_base_address__tracker__linux__unittest.cc
@@ -0,0 +1,14 @@
+--- net/base/address_tracker_linux_unittest.cc.orig 2019-04-08 08:18:25 UTC
++++ net/base/address_tracker_linux_unittest.cc
+@@ -4,7 +4,11 @@
+
+ #include "net/base/address_tracker_linux.h"
+
++#if defined(__linux__)
+ #include <linux/if.h>
++#else
++#include <net/if.h>
++#endif
+
+ #include <memory>
+ #include <unordered_set>
diff --git a/devel/electron5/files/patch-net_base_network__change__notifier.cc b/devel/electron5/files/patch-net_base_network__change__notifier.cc
new file mode 100644
index 000000000000..d20604193091
--- /dev/null
+++ b/devel/electron5/files/patch-net_base_network__change__notifier.cc
@@ -0,0 +1,10 @@
+--- net/base/network_change_notifier.cc.orig 2019-04-08 08:33:00 UTC
++++ net/base/network_change_notifier.cc
+@@ -221,7 +221,6 @@ NetworkChangeNotifier* NetworkChangeNotifier::Create()
+ #elif defined(OS_FUCHSIA)
+ return new NetworkChangeNotifierFuchsia(0 /* required_features */);
+ #else
+- NOTIMPLEMENTED();
+ return NULL;
+ #endif
+ }
diff --git a/devel/electron5/files/patch-net_base_network__interfaces__posix.h b/devel/electron5/files/patch-net_base_network__interfaces__posix.h
new file mode 100644
index 000000000000..27757bfa412e
--- /dev/null
+++ b/devel/electron5/files/patch-net_base_network__interfaces__posix.h
@@ -0,0 +1,11 @@
+--- net/base/network_interfaces_posix.h.orig 2019-04-08 08:18:25 UTC
++++ net/base/network_interfaces_posix.h
+@@ -8,6 +8,8 @@
+ // This file provides some basic functionality shared between
+ // network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
+
++#include <sys/socket.h>
++
+ #include <string>
+
+ struct sockaddr;
diff --git a/devel/electron5/files/patch-net_disk__cache_blockfile_disk__format.h b/devel/electron5/files/patch-net_disk__cache_blockfile_disk__format.h
new file mode 100644
index 000000000000..fe3f7204cb7d
--- /dev/null
+++ b/devel/electron5/files/patch-net_disk__cache_blockfile_disk__format.h
@@ -0,0 +1,12 @@
+--- net/disk_cache/blockfile/disk_format.h.orig 2019-04-08 08:18:25 UTC
++++ net/disk_cache/blockfile/disk_format.h
+@@ -149,7 +149,9 @@ struct RankingsNode {
+ };
+ #pragma pack(pop)
+
++#if !defined(OS_BSD)
+ static_assert(sizeof(RankingsNode) == 36, "bad RankingsNode");
++#endif
+
+ } // namespace disk_cache
+
diff --git a/devel/electron5/files/patch-net_dns_address__sorter__posix.cc b/devel/electron5/files/patch-net_dns_address__sorter__posix.cc
new file mode 100644
index 000000000000..fc4e9a208cde
--- /dev/null
+++ b/devel/electron5/files/patch-net_dns_address__sorter__posix.cc
@@ -0,0 +1,12 @@
+--- net/dns/address_sorter_posix.cc.orig 2019-04-08 08:33:00 UTC
++++ net/dns/address_sorter_posix.cc
+@@ -13,7 +13,9 @@
+ #include <sys/socket.h> // Must be included before ifaddrs.h.
+ #include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_var.h>
+ #include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #endif
diff --git a/devel/electron5/files/patch-net_dns_dns__config__service__posix__unittest.cc b/devel/electron5/files/patch-net_dns_dns__config__service__posix__unittest.cc
new file mode 100644
index 000000000000..b712096ff9d6
--- /dev/null
+++ b/devel/electron5/files/patch-net_dns_dns__config__service__posix__unittest.cc
@@ -0,0 +1,47 @@
+--- net/dns/dns_config_service_posix_unittest.cc.orig 2019-04-08 08:33:00 UTC
++++ net/dns/dns_config_service_posix_unittest.cc
+@@ -2,8 +2,6 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <resolv.h>
+-
+ #include <memory>
+
+ #include "base/cancelable_callback.h"
+@@ -46,7 +44,7 @@ const char* const kNameserversIPv4[] = {
+ "1.0.0.1",
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char* const kNameserversIPv6[] = {
+ NULL,
+ "2001:DB8:0::42",
+@@ -82,7 +80,7 @@ void InitializeResState(res_state res) {
+ ++res->nscount;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Install IPv6 addresses, replacing the corresponding IPv4 addresses.
+ unsigned nscount6 = 0;
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+@@ -103,7 +101,7 @@ void InitializeResState(res_state res) {
+ }
+
+ void CloseResState(res_state res) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (int i = 0; i < res->nscount; ++i) {
+ if (res->_u._ext.nsaddrs[i] != NULL)
+ free(res->_u._ext.nsaddrs[i]);
+@@ -128,7 +126,7 @@ void InitializeExpectedConfig(DnsConfig* config) {
+ config->nameservers.push_back(IPEndPoint(ip, NS_DEFAULTPORT + i));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+ if (!kNameserversIPv6[i])
+ continue;
diff --git a/devel/electron5/files/patch-net_dns_dns__reloader.cc b/devel/electron5/files/patch-net_dns_dns__reloader.cc
new file mode 100644
index 000000000000..f09b0f7482e0
--- /dev/null
+++ b/devel/electron5/files/patch-net_dns_dns__reloader.cc
@@ -0,0 +1,13 @@
+--- net/dns/dns_reloader.cc.orig 2019-04-08 08:18:25 UTC
++++ net/dns/dns_reloader.cc
+@@ -7,6 +7,10 @@
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+
++#if defined(OS_FREEBSD)
++#include <netinet/in.h>
++#endif
++
+ #include <resolv.h>
+
+ #include "base/lazy_instance.h"
diff --git a/devel/electron5/files/patch-net_dns_dns__util.cc b/devel/electron5/files/patch-net_dns_dns__util.cc
new file mode 100644
index 000000000000..7e82382e3190
--- /dev/null
+++ b/devel/electron5/files/patch-net_dns_dns__util.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_util.cc.orig 2019-04-08 08:33:00 UTC
++++ net/dns/dns_util.cc
+@@ -36,6 +36,8 @@ const uint16_t kFlagNamePointer = 0xc000;
+
+ } // namespace
+
++#include <sys/socket.h>
++
+ #if defined(OS_POSIX)
+ #include <netinet/in.h>
+ #if !defined(OS_NACL)
diff --git a/devel/electron5/files/patch-net_dns_host__resolver__proc.cc b/devel/electron5/files/patch-net_dns_host__resolver__proc.cc
new file mode 100644
index 000000000000..d2614e0359d5
--- /dev/null
+++ b/devel/electron5/files/patch-net_dns_host__resolver__proc.cc
@@ -0,0 +1,11 @@
+--- net/dns/host_resolver_proc.cc.orig 2019-04-08 08:33:00 UTC
++++ net/dns/host_resolver_proc.cc
+@@ -195,7 +195,7 @@ int SystemHostResolverCall(const std::string& host,
+ // current process during that time.
+ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::WILL_BLOCK);
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+ DnsReloaderMaybeReload();
+ #endif
diff --git a/devel/electron5/files/patch-net_features.gni b/devel/electron5/files/patch-net_features.gni
new file mode 100644
index 000000000000..2840a729638a
--- /dev/null
+++ b/devel/electron5/files/patch-net_features.gni
@@ -0,0 +1,11 @@
+--- net/features.gni.orig 2019-04-08 08:33:00 UTC
++++ net/features.gni
+@@ -27,7 +27,7 @@ declare_args() {
+ disable_brotli_filter = false
+
+ # Multicast DNS.
+- enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios
++ enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios || is_bsd
+
+ # Reporting not used on iOS.
+ enable_reporting = !is_ios
diff --git a/devel/electron5/files/patch-net_http_http__auth__gssapi__posix.cc b/devel/electron5/files/patch-net_http_http__auth__gssapi__posix.cc
new file mode 100644
index 000000000000..ab308b34295e
--- /dev/null
+++ b/devel/electron5/files/patch-net_http_http__auth__gssapi__posix.cc
@@ -0,0 +1,14 @@
+--- net/http/http_auth_gssapi_posix.cc.orig 2019-04-08 08:33:00 UTC
++++ net/http/http_auth_gssapi_posix.cc
+@@ -431,8 +431,9 @@ base::NativeLibrary GSSAPISharedLibrary::LoadSharedLib
+ static const char* const kDefaultLibraryNames[] = {
+ #if defined(OS_MACOSX)
+ "/System/Library/Frameworks/GSS.framework/GSS"
+-#elif defined(OS_OPENBSD)
+- "libgssapi.so" // Heimdal - OpenBSD
++#elif defined(OS_BSD)
++ "libgssapi_krb5.so.2", // MIT Kerberos - FreeBSD
++ "libgssapi.so" // Heimdal - OpenBSD, FreeBSD
+ #else
+ "libgssapi_krb5.so.2", // MIT Kerberos - FC, Suse10, Debian
+ "libgssapi.so.4", // Heimdal - Suse10, MDK
diff --git a/devel/electron5/files/patch-net_http_http__network__session.cc b/devel/electron5/files/patch-net_http_http__network__session.cc
new file mode 100644
index 000000000000..4a7a218f925d
--- /dev/null
+++ b/devel/electron5/files/patch-net_http_http__network__session.cc
@@ -0,0 +1,12 @@
+--- net/http/http_network_session.cc.orig 2019-04-08 08:33:01 UTC
++++ net/http/http_network_session.cc
+@@ -19,7 +19,9 @@
+ #include "base/trace_event/memory_dump_request_args.h"
+ #include "base/trace_event/process_memory_dump.h"
+ #include "base/values.h"
++#if defined(USE_KERBEROS)
+ #include "net/http/http_auth_handler_factory.h"
++#endif
+ #include "net/http/http_response_body_drainer.h"
+ #include "net/http/http_stream_factory.h"
+ #include "net/http/url_security_manager.h"
diff --git a/devel/electron5/files/patch-net_nqe_network__quality__estimator.cc b/devel/electron5/files/patch-net_nqe_network__quality__estimator.cc
new file mode 100644
index 000000000000..de1c9ebe8b2b
--- /dev/null
+++ b/devel/electron5/files/patch-net_nqe_network__quality__estimator.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator.cc.orig 2019-04-08 08:33:01 UTC
++++ net/nqe/network_quality_estimator.cc
+@@ -99,7 +99,7 @@ nqe::internal::NetworkID DoGetCurrentNetworkID() {
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET:
+ break;
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI:
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ network_id.id = GetWifiSSID();
+ #endif
+ break;
diff --git a/devel/electron5/files/patch-net_nqe_network__quality__estimator__unittest.cc b/devel/electron5/files/patch-net_nqe_network__quality__estimator__unittest.cc
new file mode 100644
index 000000000000..514541af29a0
--- /dev/null
+++ b/devel/electron5/files/patch-net_nqe_network__quality__estimator__unittest.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator_unittest.cc.orig 2019-04-08 08:33:01 UTC
++++ net/nqe/network_quality_estimator_unittest.cc
+@@ -2058,7 +2058,7 @@ TEST_F(NetworkQualityEstimatorTest, TestGlobalSocketWa
+
+ // TestTCPSocketRTT requires kernel support for tcp_info struct, and so it is
+ // enabled only on certain platforms.
+-#if defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #define MAYBE_TestTCPSocketRTT TestTCPSocketRTT
+ #else
+ #define MAYBE_TestTCPSocketRTT DISABLED_TestTCPSocketRTT
diff --git a/devel/electron5/files/patch-net_proxy__resolution_proxy__config__service__linux.cc b/devel/electron5/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
new file mode 100644
index 000000000000..bb246d01beb4
--- /dev/null
+++ b/devel/electron5/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
@@ -0,0 +1,39 @@
+--- net/proxy_resolution/proxy_config_service_linux.cc.orig 2019-04-08 08:33:01 UTC
++++ net/proxy_resolution/proxy_config_service_linux.cc
+@@ -6,7 +6,9 @@
+
+ #include <errno.h>
+ #include <limits.h>
++#if !defined(OS_BSD)
+ #include <sys/inotify.h>
++#endif
+ #include <unistd.h>
+
+ #include <map>
+@@ -495,6 +497,7 @@ int StringToIntOrDefault(base::StringPiece value, int
+ return default_value;
+ }
+
++#if !defined(OS_BSD)
+ // This is the KDE version that reads kioslaverc and simulates gsettings.
+ // Doing this allows the main Delegate code, as well as the unit tests
+ // for it, to stay the same - and the settings map fairly well besides.
+@@ -986,6 +989,7 @@ class SettingGetterImplKDE : public ProxyConfigService
+
+ DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
+ };
++#endif
+
+ } // namespace
+
+@@ -1197,8 +1201,10 @@ ProxyConfigServiceLinux::Delegate::Delegate(
+ case base::nix::DESKTOP_ENVIRONMENT_KDE3:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE4:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE5:
++#if !defined(OS_BSD)
+ setting_getter_.reset(new SettingGetterImplKDE(env_var_getter_.get()));
+ break;
++#endif
+ case base::nix::DESKTOP_ENVIRONMENT_XFCE:
+ case base::nix::DESKTOP_ENVIRONMENT_OTHER:
+ break;
diff --git a/devel/electron5/files/patch-net_proxy__resolution_proxy__resolution__service.cc b/devel/electron5/files/patch-net_proxy__resolution_proxy__resolution__service.cc
new file mode 100644
index 000000000000..8f7f26908d4f
--- /dev/null
+++ b/devel/electron5/files/patch-net_proxy__resolution_proxy__resolution__service.cc
@@ -0,0 +1,29 @@
+--- net/proxy_resolution/proxy_resolution_service.cc.orig 2019-04-08 08:33:01 UTC
++++ net/proxy_resolution/proxy_resolution_service.cc
+@@ -48,7 +48,7 @@
+ #elif defined(OS_MACOSX)
+ #include "net/proxy_resolution/proxy_config_service_mac.h"
+ #include "net/proxy_resolution/proxy_resolver_mac.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "net/proxy_resolution/proxy_config_service_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "net/proxy_resolution/proxy_config_service_android.h"
+@@ -62,7 +62,7 @@ namespace net {
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ constexpr net::NetworkTrafficAnnotationTag kSystemProxyConfigTrafficAnnotation =
+ net::DefineNetworkTrafficAnnotation("proxy_config_system", R"(
+ semantics {
+@@ -1577,7 +1577,7 @@ ProxyResolutionService::CreateSystemProxyConfigService
+ << "profile_io_data.cc::CreateProxyConfigService and this should "
+ << "be used only for examples.";
+ return std::make_unique<UnsetProxyConfigService>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
+ new ProxyConfigServiceLinux());
+
diff --git a/devel/electron5/files/patch-net_socket_socket__posix.cc b/devel/electron5/files/patch-net_socket_socket__posix.cc
new file mode 100644
index 000000000000..409de8cf7e7a
--- /dev/null
+++ b/devel/electron5/files/patch-net_socket_socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/socket_posix.cc.orig 2019-04-08 08:33:01 UTC
++++ net/socket/socket_posix.cc
+@@ -568,7 +568,7 @@ void SocketPosix::ReadCompleted() {
+ }
+
+ int SocketPosix::DoWrite(IOBuffer* buf, int buf_len) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Disable SIGPIPE for this write. Although Chromium globally disables
+ // SIGPIPE, the net stack may be used in other consumers which do not do
+ // this. MSG_NOSIGNAL is a Linux-only API. On OS X, this is a setsockopt on
diff --git a/devel/electron5/files/patch-net_socket_socks5__client__socket.cc b/devel/electron5/files/patch-net_socket_socks5__client__socket.cc
new file mode 100644
index 000000000000..80bb40867f0f
--- /dev/null
+++ b/devel/electron5/files/patch-net_socket_socks5__client__socket.cc
@@ -0,0 +1,13 @@
+--- net/socket/socks5_client_socket.cc.orig 2019-04-08 08:33:01 UTC
++++ net/socket/socks5_client_socket.cc
+@@ -4,6 +4,10 @@
+
+ #include "net/socket/socks5_client_socket.h"
+
++#if defined(OS_BSD)
++#include <netinet/in.h>
++#endif
++
+ #include <utility>
+
+ #include "base/callback_helpers.h"
diff --git a/devel/electron5/files/patch-net_socket_tcp__socket__posix.cc b/devel/electron5/files/patch-net_socket_tcp__socket__posix.cc
new file mode 100644
index 000000000000..bbe9bcaf664f
--- /dev/null
+++ b/devel/electron5/files/patch-net_socket_tcp__socket__posix.cc
@@ -0,0 +1,20 @@
+--- net/socket/tcp_socket_posix.cc.orig 2019-04-08 08:18:25 UTC
++++ net/socket/tcp_socket_posix.cc
+@@ -88,6 +88,17 @@ bool SetTCPKeepAlive(int fd, bool enable, int delay) {
+ PLOG(ERROR) << "Failed to set TCP_KEEPALIVE on fd: " << fd;
+ return false;
+ }
++#elif defined(OS_BSD)
++ // Set seconds until first TCP keep alive.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPIDLE on fd: " << fd;
++ return false;
++ }
++ // Set seconds between TCP keep alives.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPINTVL on fd: " << fd;
++ return false;
++ }
+ #endif
+ return true;
+ }
diff --git a/devel/electron5/files/patch-net_socket_udp__socket__posix.cc b/devel/electron5/files/patch-net_socket_udp__socket__posix.cc
new file mode 100644
index 000000000000..3433652f0c25
--- /dev/null
+++ b/devel/electron5/files/patch-net_socket_udp__socket__posix.cc
@@ -0,0 +1,115 @@
+--- net/socket/udp_socket_posix.cc.orig 2019-04-08 08:33:01 UTC
++++ net/socket/udp_socket_posix.cc
+@@ -68,7 +68,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+ const base::TimeDelta kActivityMonitorMsThreshold =
+ base::TimeDelta::FromMilliseconds(100);
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
+ // requires passing IPv4 address instead of interface index. This function
+ // resolves IPv4 address by interface index. The |address| is returned in
+@@ -97,7 +97,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
+ return OK;
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+
+@@ -644,13 +644,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ }
+
+ void UDPSocketPosix::SetMsgConfirm(bool confirm) {
+-#if !defined(OS_MACOSX) && !defined(OS_IOS)
++#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ if (confirm) {
+ sendto_flags_ |= MSG_CONFIRM;
+ } else {
+ sendto_flags_ &= ~MSG_CONFIRM;
+ }
+-#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
++#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ }
+
+ int UDPSocketPosix::AllowAddressReuse() {
+@@ -665,17 +665,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ int value = broadcast ? 1 : 0;
+ int rv;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // SO_REUSEPORT on OSX permits multiple processes to each receive
+ // UDP multicast or broadcast datagrams destined for the bound
+ // port.
+ // This is only being set on OSX because its behavior is platform dependent
+ // and we are playing it safe by only setting it on platforms where things
+ // break.
++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
++ if (rv != 0)
++ return MapSystemError(errno);
+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
+ if (rv != 0)
+ return MapSystemError(errno);
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
+
+ return rv == 0 ? OK : MapSystemError(errno);
+@@ -937,19 +940,24 @@ int UDPSocketPosix::SetMulticastOptions() {
+ if (multicast_interface_ != 0) {
+ switch (addr_family_) {
+ case AF_INET: {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+ if (error != OK)
+ return error;
+-#else // defined(OS_MACOSX)
++#else // defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = htonl(INADDR_ANY);
+-#endif // !defined(OS_MACOSX)
++#endif // !defined(OS_MACOSX) || defined(OS_BSD)
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
++#if defined(OS_BSD)
++ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr),
++ sizeof(mreq.imr_interface.s_addr));
++#else
+ reinterpret_cast<const char*>(&mreq), sizeof(mreq));
++#endif
+ if (rv)
+ return MapSystemError(errno);
+ break;
+@@ -1011,7 +1019,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -1059,9 +1067,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
+ case IPAddress::kIPv4AddressSize: {
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
++#if defined(OS_BSD)
++ ip_mreq mreq = {};
++ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
++ &mreq.imr_interface.s_addr);
++
++ if (error != OK)
++ return error;
++#else
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = INADDR_ANY;
++#endif
+ memcpy(&mreq.imr_multiaddr, group_address.bytes().data(),
+ IPAddress::kIPv4AddressSize);
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_DROP_MEMBERSHIP,
diff --git a/devel/electron5/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc b/devel/electron5/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc
new file mode 100644
index 000000000000..547ab5980c42
--- /dev/null
+++ b/devel/electron5/files/patch-net_third__party_quic_platform_impl_quic__ip__address__impl.cc
@@ -0,0 +1,10 @@
+--- net/third_party/quic/platform/impl/quic_ip_address_impl.cc.orig 2019-04-08 08:33:01 UTC
++++ net/third_party/quic/platform/impl/quic_ip_address_impl.cc
+@@ -13,6 +13,7 @@
+ #include <ws2bth.h>
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ #include <netinet/in.h>
++#include <sys/socket.h>
+ #endif
+
+ using std::string;
diff --git a/devel/electron5/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc b/devel/electron5/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
new file mode 100644
index 000000000000..669edf6f284c
--- /dev/null
+++ b/devel/electron5/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
@@ -0,0 +1,20 @@
+--- net/tools/cert_verify_tool/cert_verify_tool.cc.orig 2019-04-08 08:33:01 UTC
++++ net/tools/cert_verify_tool/cert_verify_tool.cc
+@@ -27,7 +27,7 @@
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "net/proxy_resolution/proxy_config.h"
+ #include "net/proxy_resolution/proxy_config_service_fixed.h"
+ #endif
+@@ -46,7 +46,7 @@ void SetUpOnNetworkThread(std::unique_ptr<net::URLRequ
+ base::WaitableEvent* initialization_complete_event) {
+ net::URLRequestContextBuilder url_request_context_builder;
+ url_request_context_builder.set_user_agent(GetUserAgent());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ //
diff --git a/devel/electron5/files/patch-net_tools_quic_quic__http__proxy__backend.cc b/devel/electron5/files/patch-net_tools_quic_quic__http__proxy__backend.cc
new file mode 100644
index 000000000000..ab751ee3acc4
--- /dev/null
+++ b/devel/electron5/files/patch-net_tools_quic_quic__http__proxy__backend.cc
@@ -0,0 +1,11 @@
+--- net/tools/quic/quic_http_proxy_backend.cc.orig 2019-04-08 08:33:01 UTC
++++ net/tools/quic/quic_http_proxy_backend.cc
+@@ -160,7 +160,7 @@ void QuicHttpProxyBackend::InitializeURLRequestContext
+ // Enable HTTP2, but disable QUIC on the backend
+ context_builder.SetSpdyAndQuicEnabled(true /* http2 */, false /* quic */);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ context_builder.set_proxy_config_service(
diff --git a/devel/electron5/files/patch-net_url__request_url__request__context__builder.cc b/devel/electron5/files/patch-net_url__request_url__request__context__builder.cc
new file mode 100644
index 000000000000..726efab0d3cd
--- /dev/null
+++ b/devel/electron5/files/patch-net_url__request_url__request__context__builder.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context_builder.cc.orig 2019-04-08 08:33:01 UTC
++++ net/url_request/url_request_context_builder.cc
+@@ -520,7 +520,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ }
+
+ if (!proxy_resolution_service_) {
+-#if !defined(OS_LINUX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // TODO(willchan): Switch to using this code when
+ // ProxyResolutionService::CreateSystemProxyConfigService()'s signature
+ // doesn't suck.
diff --git a/devel/electron5/files/patch-pdf_pdfium_pdfium__engine.cc b/devel/electron5/files/patch-pdf_pdfium_pdfium__engine.cc
new file mode 100644
index 000000000000..762a00cc9f74
--- /dev/null
+++ b/devel/electron5/files/patch-pdf_pdfium_pdfium__engine.cc
@@ -0,0 +1,74 @@
+--- pdf/pdfium/pdfium_engine.cc.orig 2019-04-08 08:33:02 UTC
++++ pdf/pdfium/pdfium_engine.cc
+@@ -133,7 +133,7 @@ constexpr base::TimeDelta kMaxInitialProgressivePaintT
+
+ PDFiumEngine* g_engine_for_fontmapper = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ PP_Instance g_last_instance_id;
+
+@@ -413,7 +413,7 @@ void Release(FPDF_SYSFONTINFO* sysfontinfo) {
+ fontinfo_with_metrics->default_sysfontinfo->Release(
+ fontinfo_with_metrics->default_sysfontinfo);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ PDFiumEngine::CreateDocumentLoaderFunction
+ g_create_document_loader_for_testing = nullptr;
+@@ -663,7 +663,7 @@ bool InitializeSDK() {
+ config.m_v8EmbedderSlot = gin::kEmbedderPDFium;
+ FPDF_InitLibraryWithConfig(&config);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Font loading doesn't work in the renderer sandbox in Linux.
+ FPDF_SetSystemFontInfo(&g_font_info);
+ #else
+@@ -688,7 +688,7 @@ bool InitializeSDK() {
+
+ void ShutdownSDK() {
+ FPDF_DestroyLibrary();
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ delete g_font_info;
+ #endif
+ TearDownV8();
+@@ -712,7 +712,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
+ IFSDK_PAUSE::user = nullptr;
+ IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreviewModeClient does not know its pp::Instance.
+ pp::Instance* instance = client_->GetPluginInstance();
+ if (instance)
+@@ -1176,7 +1176,7 @@ pp::Buffer_Dev PDFiumEngine::PrintPagesAsRasterPdf(
+
+ KillFormFocus();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -2973,7 +2973,7 @@ bool PDFiumEngine::ContinuePaint(int progressive_index
+ DCHECK(image_data);
+
+ last_progressive_start_time_ = base::Time::Now();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -3448,7 +3448,7 @@ void PDFiumEngine::SetCurrentPage(int index) {
+ FORM_DoPageAAction(old_page, form(), FPDFPAGE_AACTION_CLOSE);
+ }
+ most_visible_page_ = index;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+ if (most_visible_page_ != -1 && called_do_document_action_) {
diff --git a/devel/electron5/files/patch-ppapi_proxy_file__io__resource.cc b/devel/electron5/files/patch-ppapi_proxy_file__io__resource.cc
new file mode 100644
index 000000000000..c7239be8258d
--- /dev/null
+++ b/devel/electron5/files/patch-ppapi_proxy_file__io__resource.cc
@@ -0,0 +1,48 @@
+--- ppapi/proxy/file_io_resource.cc.orig 2019-04-08 08:33:02 UTC
++++ ppapi/proxy/file_io_resource.cc
+@@ -285,17 +285,19 @@ int32_t FileIOResource::Write(int64_t offset,
+
+ if (check_quota_) {
+ int64_t increase = 0;
+- uint64_t max_offset = 0;
++ uint64_t _max_offset = 0;
++ // (rene) avoid name collission with /usr/include/vm/vm_map.h on FreeBSD
++ // which also defines max_offset
+ bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
+ if (append) {
+ increase = bytes_to_write;
+ } else {
+- uint64_t max_offset = offset + bytes_to_write;
+- if (max_offset >
++ uint64_t _max_offset = offset + bytes_to_write;
++ if (_max_offset >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ return PP_ERROR_FAILED; // amount calculation would overflow.
+ }
+- increase = static_cast<int64_t>(max_offset) - max_written_offset_;
++ increase = static_cast<int64_t>(_max_offset) - max_written_offset_;
+ }
+
+ if (increase > 0) {
+@@ -319,7 +321,7 @@ int32_t FileIOResource::Write(int64_t offset,
+ if (append)
+ append_mode_write_amount_ += bytes_to_write;
+ else
+- max_written_offset_ = max_offset;
++ max_written_offset_ = _max_offset;
+ }
+ }
+ return WriteValidated(offset, buffer, bytes_to_write, callback);
+@@ -597,9 +599,9 @@ void FileIOResource::OnRequestWriteQuotaComplete(
+ } else {
+ DCHECK_LE(offset + bytes_to_write - max_written_offset_, granted);
+
+- int64_t max_offset = offset + bytes_to_write;
+- if (max_written_offset_ < max_offset)
+- max_written_offset_ = max_offset;
++ int64_t _max_offset = offset + bytes_to_write;
++ if (max_written_offset_ < _max_offset)
++ max_written_offset_ = _max_offset;
+ }
+
+ if (callback->is_blocking()) {
diff --git a/devel/electron5/files/patch-printing_backend_print__backend__cups.h b/devel/electron5/files/patch-printing_backend_print__backend__cups.h
new file mode 100644
index 000000000000..a4032c726618
--- /dev/null
+++ b/devel/electron5/files/patch-printing_backend_print__backend__cups.h
@@ -0,0 +1,11 @@
+--- printing/backend/print_backend_cups.h.orig 2019-04-08 08:18:26 UTC
++++ printing/backend/print_backend_cups.h
+@@ -5,6 +5,8 @@
+ #ifndef PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+ #define PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+
++#include <cups/ppd.h>
++
+ #include <string>
+
+ #include "base/files/file_util.h"
diff --git a/devel/electron5/files/patch-printing_cups__config__helper.py b/devel/electron5/files/patch-printing_cups__config__helper.py
new file mode 100644
index 000000000000..352b4c1df48d
--- /dev/null
+++ b/devel/electron5/files/patch-printing_cups__config__helper.py
@@ -0,0 +1,11 @@
+--- printing/cups_config_helper.py.orig 2019-04-08 08:18:26 UTC
++++ printing/cups_config_helper.py
+@@ -65,7 +65,7 @@ def main():
+ mode = sys.argv[1]
+ if len(sys.argv) > 2 and sys.argv[2]:
+ sysroot = sys.argv[2]
+- cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
++ cups_config = os.path.join(sysroot, 'bin', 'cups-config')
+ if not os.path.exists(cups_config):
+ print 'cups-config not found: %s' % cups_config
+ return 1
diff --git a/devel/electron5/files/patch-remoting_base_chromoting__event.cc b/devel/electron5/files/patch-remoting_base_chromoting__event.cc
new file mode 100644
index 000000000000..d51901efb459
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_base_chromoting__event.cc
@@ -0,0 +1,11 @@
+--- remoting/base/chromoting_event.cc.orig 2019-04-08 08:18:26 UTC
++++ remoting/base/chromoting_event.cc
+@@ -189,7 +189,7 @@ void ChromotingEvent::AddSystemInfo() {
+ SetString(kCpuKey, base::SysInfo::OperatingSystemArchitecture());
+ SetString(kOsVersionKey, GetOperatingSystemVersionString());
+ SetString(kWebAppVersionKey, STRINGIZE(VERSION));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ Os os = Os::CHROMOTING_LINUX;
+ #elif defined(OS_CHROMEOS)
+ Os os = Os::CHROMOTING_CHROMEOS;
diff --git a/devel/electron5/files/patch-remoting_client_display_sys__opengl.h b/devel/electron5/files/patch-remoting_client_display_sys__opengl.h
new file mode 100644
index 000000000000..bd53b213ca81
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_client_display_sys__opengl.h
@@ -0,0 +1,11 @@
+--- remoting/client/display/sys_opengl.h.orig 2019-04-08 08:18:26 UTC
++++ remoting/client/display/sys_opengl.h
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_IOS)
+ #include <OpenGLES/ES3/gl.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_GLEXT_PROTOTYPES
+ #include <GL/gl.h>
+ #include <GL/glext.h>
diff --git a/devel/electron5/files/patch-remoting_host_evaluate__capability.cc b/devel/electron5/files/patch-remoting_host_evaluate__capability.cc
new file mode 100644
index 000000000000..6878d19fb98e
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_evaluate__capability.cc
@@ -0,0 +1,11 @@
+--- remoting/host/evaluate_capability.cc.orig 2019-04-08 08:18:26 UTC
++++ remoting/host/evaluate_capability.cc
+@@ -50,7 +50,7 @@ base::FilePath BuildHostBinaryPath() {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (path.BaseName().value() ==
+ FILE_PATH_LITERAL("chrome-remote-desktop-host")) {
+ return path;
diff --git a/devel/electron5/files/patch-remoting_host_host__attributes.cc b/devel/electron5/files/patch-remoting_host_host__attributes.cc
new file mode 100644
index 000000000000..edcdae7daafd
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_host__attributes.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_attributes.cc.orig 2019-04-08 08:18:26 UTC
++++ remoting/host/host_attributes.cc
+@@ -123,7 +123,7 @@ std::string GetHostAttributes() {
+ media::InitializeMediaFoundation()) {
+ result.push_back("HWEncoder");
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ result.push_back("HWEncoder");
+ #endif
+
diff --git a/devel/electron5/files/patch-remoting_host_host__details.cc b/devel/electron5/files/patch-remoting_host_host__details.cc
new file mode 100644
index 000000000000..3341edbfbcb4
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_host__details.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_details.cc.orig 2019-04-08 08:18:26 UTC
++++ remoting/host/host_details.cc
+@@ -24,7 +24,7 @@ std::string GetHostOperatingSystemName() {
+ return "Mac";
+ #elif defined(OS_CHROMEOS)
+ return "ChromeOS";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return "Linux";
+ #elif defined(OS_ANDROID)
+ return "Android";
diff --git a/devel/electron5/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc b/devel/electron5/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
new file mode 100644
index 000000000000..954f9727f346
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
@@ -0,0 +1,35 @@
+--- remoting/host/it2me/it2me_native_messaging_host_main.cc.orig 2019-04-08 08:18:26 UTC
++++ remoting/host/it2me/it2me_native_messaging_host_main.cc
+@@ -27,12 +27,12 @@
+ #include "remoting/host/resources.h"
+ #include "remoting/host/usage_stats_consent.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+
+ #include "base/linux_util.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ #include "base/mac/scoped_nsautorelease_pool.h"
+@@ -106,7 +106,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+
+ remoting::LoadResources("");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Required in order for us to run multiple X11 threads.
+ XInitThreads();
+
+@@ -122,7 +122,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+ // Need to prime the host OS version value for linux to prevent IO on the
+ // network thread. base::GetLinuxDistro() caches the result.
+ base::GetLinuxDistro();
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ base::File read_file;
+ base::File write_file;
diff --git a/devel/electron5/files/patch-remoting_host_me2me__desktop__environment.cc b/devel/electron5/files/patch-remoting_host_me2me__desktop__environment.cc
new file mode 100644
index 000000000000..4ca0f3a738f7
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_me2me__desktop__environment.cc
@@ -0,0 +1,11 @@
+--- remoting/host/me2me_desktop_environment.cc.orig 2019-04-08 08:33:02 UTC
++++ remoting/host/me2me_desktop_environment.cc
+@@ -129,7 +129,7 @@ bool Me2MeDesktopEnvironment::InitializeSecurity(
+
+ // Otherwise, if the session is shared with the local user start monitoring
+ // the local input and create the in-session UI.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool want_user_interface = false;
+ #elif defined(OS_MACOSX)
+ // Don't try to display any UI on top of the system's login screen as this
diff --git a/devel/electron5/files/patch-remoting_host_remoting__me2me__host.cc b/devel/electron5/files/patch-remoting_host_remoting__me2me__host.cc
new file mode 100644
index 000000000000..5930a149e56c
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_host_remoting__me2me__host.cc
@@ -0,0 +1,108 @@
+--- remoting/host/remoting_me2me_host.cc.orig 2019-04-08 08:33:02 UTC
++++ remoting/host/remoting_me2me_host.cc
+@@ -117,13 +117,13 @@
+ #include "remoting/host/mac/permission_utils.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+ #include "base/linux_util.h"
+ #include "remoting/host/audio_capturer_linux.h"
+ #include "remoting/host/linux/certificate_watcher.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #include <commctrl.h>
+@@ -158,11 +158,11 @@ const char kApplicationName[] = "chromoting";
+ const char kStdinConfigPath[] = "-";
+ #endif // !defined(REMOTING_MULTI_PROCESS)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The command line switch used to pass name of the pipe to capture audio on
+ // linux.
+ const char kAudioPipeSwitchName[] = "audio-pipe-name";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // The command line switch used to pass name of the unix domain socket used to
+@@ -353,7 +353,7 @@ class HostProcess : public ConfigWatcher::Delegate,
+
+ std::unique_ptr<ChromotingHostContext> context_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Watch for certificate changes and kill the host when changes occur
+ std::unique_ptr<CertificateWatcher> cert_watcher_;
+ #endif
+@@ -567,10 +567,10 @@ bool HostProcess::InitWithCommandLine(const base::Comm
+ enable_window_capture_ = cmd_line->HasSwitch(kWindowIdSwitchName);
+ if (enable_window_capture_) {
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ LOG(WARNING) << "Window capturing is not fully supported on Linux or "
+ "Windows.";
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // uint32_t is large enough to hold window IDs on all platforms.
+ uint32_t window_id;
+@@ -763,7 +763,7 @@ void HostProcess::CreateAuthenticatorFactory() {
+ DCHECK(third_party_auth_config_.token_url.is_valid());
+ DCHECK(third_party_auth_config_.token_validation_url.is_valid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!cert_watcher_) {
+ cert_watcher_.reset(new CertificateWatcher(
+ base::Bind(&HostProcess::ShutdownHost, this, kSuccessExitCode),
+@@ -849,7 +849,7 @@ void HostProcess::StartOnUiThread() {
+ base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)),
+ base::Bind(&HostProcess::OnPolicyError, base::Unretained(this)));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If an audio pipe is specific on the command-line then initialize
+ // AudioCapturerLinux to capture from it.
+ base::FilePath audio_pipe_name = base::CommandLine::ForCurrentProcess()->
+@@ -858,7 +858,7 @@ void HostProcess::StartOnUiThread() {
+ remoting::AudioCapturerLinux::InitializePipeReader(
+ context_->audio_task_runner(), audio_pipe_name);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ base::FilePath security_key_socket_name =
+@@ -916,7 +916,7 @@ void HostProcess::ShutdownOnUiThread() {
+ // It is now safe for the HostProcess to be deleted.
+ self_ = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Cause the global AudioPipeReader to be freed, otherwise the audio
+ // thread will remain in-use and prevent the process from exiting.
+ // TODO(wez): DesktopEnvironmentFactory should own the pipe reader.
+@@ -1547,7 +1547,7 @@ void HostProcess::StartHost() {
+ host_->AddExtension(std::make_unique<TestEchoExtension>());
+
+ // TODO(simonmorris): Get the maximum session duration from a policy.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20));
+ #endif
+
+@@ -1719,7 +1719,7 @@ void HostProcess::OnCrash(const std::string& function_
+ int HostProcessMain() {
+ HOST_LOG << "Starting host process: version " << STRINGIZE(VERSION);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ kReportOfflineReasonSwitchName)) {
+ // Required in order for us to run multiple X11 threads.
diff --git a/devel/electron5/files/patch-remoting_webapp_base_js_platform.js b/devel/electron5/files/patch-remoting_webapp_base_js_platform.js
new file mode 100644
index 000000000000..7547e48f4090
--- /dev/null
+++ b/devel/electron5/files/patch-remoting_webapp_base_js_platform.js
@@ -0,0 +1,17 @@
+--- remoting/webapp/base/js/platform.js.orig 2019-04-08 08:18:26 UTC
++++ remoting/webapp/base/js/platform.js
+@@ -107,6 +107,14 @@ remoting.getSystemInfo = function() {
+ return result;
+ }
+
++ match = new RegExp('FreeBSD ([a-zA-Z0-9_]*)').exec(userAgent);
++ if (match && (match.length >= 2)) {
++ result.osName = remoting.Os.LINUX;
++ result.osVersion = '';
++ result.cpu = match[1];
++ return result;
++ }
++
+ match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(userAgent);
+ if (match && (match.length >= 3)) {
+ result.osName = remoting.Os.MAC;
diff --git a/devel/electron5/files/patch-sandbox_features.gni b/devel/electron5/files/patch-sandbox_features.gni
new file mode 100644
index 000000000000..98463e925bc5
--- /dev/null
+++ b/devel/electron5/files/patch-sandbox_features.gni
@@ -0,0 +1,10 @@
+--- sandbox/features.gni.orig 2019-04-08 08:18:26 UTC
++++ sandbox/features.gni
+@@ -12,6 +12,6 @@ use_seccomp_bpf =
+ (is_linux || is_android) &&
+ (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el")
++ current_cpu == "mips64el") && !is_bsd
+
+ use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
diff --git a/devel/electron5/files/patch-sandbox_linux_BUILD.gn b/devel/electron5/files/patch-sandbox_linux_BUILD.gn
new file mode 100644
index 000000000000..689e8c93fc41
--- /dev/null
+++ b/devel/electron5/files/patch-sandbox_linux_BUILD.gn
@@ -0,0 +1,47 @@
+--- sandbox/linux/BUILD.gn.orig 2019-04-08 08:18:26 UTC
++++ sandbox/linux/BUILD.gn
+@@ -12,12 +12,12 @@ if (is_android) {
+ }
+
+ declare_args() {
+- compile_suid_client = is_linux
++ compile_suid_client = is_linux && !is_bsd
+
+- compile_credentials = is_linux
++ compile_credentials = is_linux && !is_bsd
+
+ # On Android, use plain GTest.
+- use_base_test_suite = is_linux
++ use_base_test_suite = is_linux && !is_bsd
+ }
+
+ if (is_nacl_nonsfi) {
+@@ -379,7 +379,7 @@ component("sandbox_services") {
+ public_deps += [ ":sandbox_services_headers" ]
+ }
+
+- if (is_nacl_nonsfi) {
++ if (is_nacl_nonsfi || is_bsd) {
+ cflags = [ "-fgnu-inline-asm" ]
+
+ sources -= [
+@@ -387,6 +387,8 @@ component("sandbox_services") {
+ "services/init_process_reaper.h",
+ "services/scoped_process.cc",
+ "services/scoped_process.h",
++ "services/syscall_wrappers.cc",
++ "services/syscall_wrappers.h",
+ "services/yama.cc",
+ "services/yama.h",
+ "syscall_broker/broker_channel.cc",
+@@ -405,6 +407,10 @@ component("sandbox_services") {
+ "syscall_broker/broker_process.h",
+ "syscall_broker/broker_simple_message.cc",
+ "syscall_broker/broker_simple_message.h",
++ ]
++ sources += [
++ "services/libc_interceptor.cc",
++ "services/libc_interceptor.h",
+ ]
+ } else if (!is_android) {
+ sources += [
diff --git a/devel/electron5/files/patch-sandbox_linux_services_init__process__reaper.cc b/devel/electron5/files/patch-sandbox_linux_services_init__process__reaper.cc
new file mode 100644
index 000000000000..ea79d823e6cc
--- /dev/null
+++ b/devel/electron5/files/patch-sandbox_linux_services_init__process__reaper.cc
@@ -0,0 +1,15 @@
+--- sandbox/linux/services/init_process_reaper.cc.orig 2019-04-08 08:18:26 UTC
++++ sandbox/linux/services/init_process_reaper.cc
+@@ -1,6 +1,7 @@
+ // Copyright 2013 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "sandbox/linux/services/init_process_reaper.h"
+
+@@ -100,3 +101,4 @@ bool CreateInitProcessReaper(base::OnceClosure post_fo
+ }
+
+ } // namespace sandbox.
++#endif
diff --git a/devel/electron5/files/patch-sandbox_linux_services_libc__interceptor.cc b/devel/electron5/files/patch-sandbox_linux_services_libc__interceptor.cc
new file mode 100644
index 000000000000..f4182f3e0eb0
--- /dev/null
+++ b/devel/electron5/files/patch-sandbox_linux_services_libc__interceptor.cc
@@ -0,0 +1,21 @@
+--- sandbox/linux/services/libc_interceptor.cc.orig 2019-04-08 08:18:26 UTC
++++ sandbox/linux/services/libc_interceptor.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <time.h>
+@@ -94,7 +96,7 @@ bool ReadTimeStruct(base::PickleIterator* iter,
+ } else {
+ base::AutoLock lock(g_timezones_lock.Get());
+ auto ret_pair = g_timezones.Get().insert(timezone);
+- output->tm_zone = ret_pair.first->c_str();
++ output->tm_zone = (char *)ret_pair.first->c_str();
+ }
+
+ return true;
diff --git a/devel/electron5/files/patch-services_audio_BUILD.gn b/devel/electron5/files/patch-services_audio_BUILD.gn
new file mode 100644
index 000000000000..9a10a6778acc
--- /dev/null
+++ b/devel/electron5/files/patch-services_audio_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/audio/BUILD.gn.orig 2019-04-08 08:33:02 UTC
++++ services/audio/BUILD.gn
+@@ -106,7 +106,7 @@ source_set("lib") {
+ "//services/service_manager/sandbox:sandbox",
+ ]
+
+- if (is_linux) {
++ if ((is_linux) && (!is_bsd)) {
+ sources += [
+ "audio_sandbox_hook_linux.cc",
+ "audio_sandbox_hook_linux.h",
diff --git a/devel/electron5/files/patch-services_catalog_store.cc b/devel/electron5/files/patch-services_catalog_store.cc
new file mode 100644
index 000000000000..dee83ba8a8f0
--- /dev/null
+++ b/devel/electron5/files/patch-services_catalog_store.cc
@@ -0,0 +1,10 @@
+--- services/catalog/store.cc.orig 2019-04-08 08:33:02 UTC
++++ services/catalog/store.cc
+@@ -38,5 +38,7 @@ const char Store::kRequiredFilesKey_PlatformValue_MacO
+ const char Store::kRequiredFilesKey_PlatformValue_Android[] = "android";
+ // static
+ const char Store::kRequiredFilesKey_PlatformValue_Fuchsia[] = "fuchsia";
++// static
++const char Store::kRequiredFilesKey_PlatformValue_FreeBSD[] = "freebsd";
+
+ } // namespace catalog
diff --git a/devel/electron5/files/patch-services_catalog_store.h b/devel/electron5/files/patch-services_catalog_store.h
new file mode 100644
index 000000000000..bce9be21d3cd
--- /dev/null
+++ b/devel/electron5/files/patch-services_catalog_store.h
@@ -0,0 +1,10 @@
+--- services/catalog/store.h.orig 2019-04-08 08:33:02 UTC
++++ services/catalog/store.h
+@@ -38,6 +38,7 @@ class Store {
+ static const char kRequiredFilesKey_PlatformValue_MacOSX[];
+ static const char kRequiredFilesKey_PlatformValue_Android[];
+ static const char kRequiredFilesKey_PlatformValue_Fuchsia[];
++ static const char kRequiredFilesKey_PlatformValue_FreeBSD[];
+ };
+
+ } // namespace catalog
diff --git a/devel/electron5/files/patch-services_content_simple__browser_simple__browser__service.h b/devel/electron5/files/patch-services_content_simple__browser_simple__browser__service.h
new file mode 100644
index 000000000000..51f69d1e57a1
--- /dev/null
+++ b/devel/electron5/files/patch-services_content_simple__browser_simple__browser__service.h
@@ -0,0 +1,20 @@
+--- services/content/simple_browser/simple_browser_service.h.orig 2019-04-08 08:18:26 UTC
++++ services/content/simple_browser/simple_browser_service.h
+@@ -16,7 +16,7 @@
+ #include "services/service_manager/public/cpp/service_binding.h"
+ #include "services/service_manager/public/mojom/service.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #endif
+
+@@ -50,7 +50,7 @@ class COMPONENT_EXPORT(SIMPLE_BROWSER) SimpleBrowserSe
+ // service_manager::Service:
+ void OnStart() override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron5/files/patch-services_device_device__service.h b/devel/electron5/files/patch-services_device_device__service.h
new file mode 100644
index 000000000000..1c8f733c0f2c
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_device__service.h
@@ -0,0 +1,11 @@
+--- services/device/device_service.h.orig 2019-04-08 08:33:02 UTC
++++ services/device/device_service.h
+@@ -198,7 +198,7 @@ class DeviceService : public service_manager::Service
+ #endif
+
+ #if (defined(OS_LINUX) && defined(USE_UDEV)) || defined(OS_WIN) || \
+- defined(OS_MACOSX)
++ defined(OS_MACOSX) || defined(OS_BSD)
+ // Requests for the SerialPortManager interface must be bound to
+ // |serial_port_manager_| on |serial_port_manager_task_runner_| and it will
+ // be destroyed on that sequence.
diff --git a/devel/electron5/files/patch-services_device_geolocation_location__arbitrator.cc b/devel/electron5/files/patch-services_device_geolocation_location__arbitrator.cc
new file mode 100644
index 000000000000..139eb9b94180
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_geolocation_location__arbitrator.cc
@@ -0,0 +1,11 @@
+--- services/device/geolocation/location_arbitrator.cc.orig 2019-04-08 08:33:02 UTC
++++ services/device/geolocation/location_arbitrator.cc
+@@ -164,7 +164,7 @@ LocationArbitrator::NewNetworkLocationProvider(
+ std::unique_ptr<LocationProvider>
+ LocationArbitrator::NewSystemLocationProvider() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ return nullptr;
+ #else
+ return device::NewSystemLocationProvider();
diff --git a/devel/electron5/files/patch-services_device_hid_BUILD.gn b/devel/electron5/files/patch-services_device_hid_BUILD.gn
new file mode 100644
index 000000000000..68b3d4ed675a
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_BUILD.gn
@@ -0,0 +1,22 @@
+--- services/device/hid/BUILD.gn.orig 2019-04-08 08:33:02 UTC
++++ services/device/hid/BUILD.gn
+@@ -51,6 +51,19 @@ source_set("hid") {
+ deps += [ "//device/udev_linux" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "hid_connection_linux.cc",
++ "hid_connection_linux.h",
++ ]
++ sources += [
++ "hid_connection_freebsd.cc",
++ "hid_connection_freebsd.h",
++ "hid_service_freebsd.cc",
++ "hid_service_freebsd.h",
++ ]
++ }
++
+ if (is_chromeos) {
+ deps += [ "//chromeos/dbus" ]
+ }
diff --git a/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.cc b/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.cc
new file mode 100644
index 000000000000..053b6e4fa236
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.cc
@@ -0,0 +1,243 @@
+--- services/device/hid/hid_connection_freebsd.cc.orig 2019-04-09 12:48:48 UTC
++++ services/device/hid/hid_connection_freebsd.cc
+@@ -0,0 +1,240 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_connection_freebsd.h"
++
++#include <dev/usb/usbhid.h>
++#include <dev/usb/usb_ioctl.h>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/location.h"
++#include "base/numerics/safe_math.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/strings/stringprintf.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_service.h"
++
++namespace device {
++
++class HidConnectionFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::ScopedFD fd,
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::WeakPtr<HidConnectionFreeBSD> connection)
++ : fd_(std::move(fd)),
++ connection_(connection),
++ origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++ // Report buffers must always have room for the report ID.
++ report_buffer_size_ = device_info->max_input_report_size() + 1;
++ has_report_id_ = device_info->has_report_id();
++ }
++
++ ~BlockingTaskHelper() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
++
++ // Starts the FileDescriptorWatcher that reads input events from the device.
++ // Must be called on a thread that has a base::MessageLoopForIO.
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::internal::AssertBlockingAllowed();
++
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ fd_.get(), base::Bind(&BlockingTaskHelper::OnFileCanReadWithoutBlocking,
++ base::Unretained(this)));
++ }
++
++ void Write(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ base::BlockingType::MAY_BLOCK);
++
++ auto data = buffer->front();
++ size_t size = buffer->size();
++ // if report id is 0, it shouldn't be included
++ if (data[0] == 0) {
++ data++;
++ size--;
++ }
++
++ ssize_t result = HANDLE_EINTR(write(fd_.get(), data, size));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Write failed";
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), false));
++ } else {
++ if (static_cast<size_t>(result) != size)
++ HID_LOG(EVENT) << "Incomplete HID write: " << result << " != " << size;
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ void GetFeatureReport(uint8_t report_id,
++ scoped_refptr<base::RefCountedBytes> buffer,
++ ReadCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ base::BlockingType::MAY_BLOCK);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_GET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to get feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else if (result == 0) {
++ HID_LOG(EVENT) << "Get feature result too short.";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true, buffer, result));
++ }
++ }
++
++ void SendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ // FreeBSD does not require report id if it's not used
++ if (buffer->front()[0] == 0) {
++ ugd.ugd_data = buffer->front() + 1;
++ ugd.ugd_maxlen = buffer->size() - 1;
++ } else {
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ }
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_SET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to send feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ private:
++ void OnFileCanReadWithoutBlocking() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ scoped_refptr<base::RefCountedBytes> buffer(new base::RefCountedBytes(report_buffer_size_));
++ unsigned char* data = buffer->front();
++ size_t length = report_buffer_size_;
++ if (!has_report_id_) {
++ // FreeBSD will not prefix the buffer with a report ID if report IDs are not
++ // used by the device. Prefix the buffer with 0.
++ *data++ = 0;
++ length--;
++ }
++
++ ssize_t bytes_read = HANDLE_EINTR(read(fd_.get(), data, length));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_PLOG(EVENT) << "Read failed";
++ // This assumes that the error is unrecoverable and disables reading
++ // from the device until it has been re-opened.
++ // TODO(reillyg): Investigate starting and stopping the file descriptor
++ // watcher in response to pending read requests so that per-request
++ // errors can be returned to the client.
++ file_watcher_.reset();
++ }
++ return;
++ }
++ if (!has_report_id_) {
++ // Behave as if the byte prefixed above as the the report ID was read.
++ bytes_read++;
++ }
++
++ origin_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&HidConnectionFreeBSD::ProcessInputReport,
++ connection_, buffer, bytes_read));
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++ base::ScopedFD fd_;
++ size_t report_buffer_size_;
++ bool has_report_id_;
++ base::WeakPtr<HidConnectionFreeBSD> connection_;
++ const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidConnectionFreeBSD::HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
++ : HidConnection(device_info),
++ blocking_task_runner_(std::move(blocking_task_runner)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(std::move(fd), device_info,
++ weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&BlockingTaskHelper::Start,
++ base::Unretained(helper_.get())));
++}
++
++HidConnectionFreeBSD::~HidConnectionFreeBSD() {}
++
++void HidConnectionFreeBSD::PlatformClose() {
++ // By closing the device on the blocking task runner 1) the requirement that
++ // base::ScopedFD is destroyed on a thread where I/O is allowed is satisfied
++ // and 2) any tasks posted to this task runner that refer to this file will
++ // complete before it is closed.
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++void HidConnectionFreeBSD::PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::Write, base::Unretained(helper_.get()),
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) {
++ // The first byte of the destination buffer is the report ID being requested
++ // and is overwritten by the feature report.
++ DCHECK_GT(device_info()->max_feature_report_size(), 0u);
++ scoped_refptr<base::RefCountedBytes> buffer(
++ new base::RefCountedBytes(device_info()->max_feature_report_size() + 1));
++ if (report_id != 0)
++ buffer->data()[0] = report_id;
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::GetFeatureReport,
++ base::Unretained(helper_.get()), report_id,
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformSendFeatureReport(
++ scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ base::BlockingType::MAY_BLOCK);
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::SendFeatureReport,
++ base::Unretained(helper_.get()), buffer, std::move(callback)));
++}
++
++} // namespace device
diff --git a/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.h b/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.h
new file mode 100644
index 000000000000..00a0324b18c3
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_hid__connection__freebsd.h
@@ -0,0 +1,71 @@
+--- services/device/hid/hid_connection_freebsd.h.orig 2019-04-09 12:48:48 UTC
++++ services/device/hid/hid_connection_freebsd.h
+@@ -0,0 +1,68 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++#define DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++
++#include <stddef.h>
++#include <stdint.h>
++
++#include "base/files/scoped_file.h"
++#include "base/macros.h"
++#include "base/memory/ptr_util.h"
++#include "base/memory/ref_counted_memory.h"
++#include "base/memory/weak_ptr.h"
++#include "base/sequence_checker.h"
++#include "services/device/hid/hid_connection.h"
++
++namespace base {
++class SequencedTaskRunner;
++}
++
++namespace net {
++class IOBuffer;
++}
++
++namespace device {
++
++class HidConnectionFreeBSD : public HidConnection {
++ public:
++ HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
++
++ private:
++ friend class base::RefCountedThreadSafe<HidConnectionFreeBSD>;
++ class BlockingTaskHelper;
++
++ ~HidConnectionFreeBSD() override;
++
++ // HidConnection implementation.
++ void PlatformClose() override;
++ void PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) override;
++ void PlatformSendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++
++ // |helper_| lives on the sequence to which |blocking_task_runner_| posts
++ // tasks so all calls must be posted there including this object's
++ // destruction.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ base::WeakPtrFactory<HidConnectionFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidConnectionFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_CONNECTION_FREEBSD_H_
diff --git a/devel/electron5/files/patch-services_device_hid_hid__service.cc b/devel/electron5/files/patch-services_device_hid_hid__service.cc
new file mode 100644
index 000000000000..ee529eee0d39
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_hid__service.cc
@@ -0,0 +1,20 @@
+--- services/device/hid/hid_service.cc.orig 2019-04-08 08:18:26 UTC
++++ services/device/hid/hid_service.cc
+@@ -16,6 +16,8 @@
+
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ #include "services/device/hid/hid_service_linux.h"
++#elif defined(OS_BSD)
++#include "services/device/hid/hid_service_freebsd.h"
+ #elif defined(OS_MACOSX)
+ #include "services/device/hid/hid_service_mac.h"
+ #elif defined(OS_WIN)
+@@ -36,6 +38,8 @@ constexpr base::TaskTraits HidService::kBlockingTaskTr
+ std::unique_ptr<HidService> HidService::Create() {
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ return base::WrapUnique(new HidServiceLinux());
++#elif defined(OS_BSD)
++ return base::WrapUnique(new HidServiceFreeBSD());
+ #elif defined(OS_MACOSX)
+ return base::WrapUnique(new HidServiceMac());
+ #elif defined(OS_WIN)
diff --git a/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.cc b/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.cc
new file mode 100644
index 000000000000..6cc08096cb33
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.cc
@@ -0,0 +1,376 @@
+--- services/device/hid/hid_service_freebsd.cc.orig 2019-04-09 12:48:48 UTC
++++ services/device/hid/hid_service_freebsd.cc
+@@ -0,0 +1,373 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_service_freebsd.h"
++
++#include <dev/usb/usb_ioctl.h>
++#include <stdint.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <set>
++#include <string>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/files/file_enumerator.h"
++#include "base/location.h"
++#include "base/logging.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/stl_util.h"
++#include "base/strings/pattern.h"
++#include "base/strings/stringprintf.h"
++#include "base/strings/sys_string_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/string_split.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_connection_freebsd.h"
++
++const int kMaxPermissionChecks = 5;
++
++namespace device {
++
++struct HidServiceFreeBSD::ConnectParams {
++ ConnectParams(scoped_refptr<HidDeviceInfo> device_info,
++ const ConnectCallback& callback)
++ : device_info(std::move(device_info)),
++ callback(callback),
++ task_runner(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)) {}
++ ~ConnectParams() {}
++
++ scoped_refptr<HidDeviceInfo> device_info;
++ ConnectCallback callback;
++ scoped_refptr<base::SequencedTaskRunner> task_runner;
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
++ base::ScopedFD fd;
++};
++
++class HidServiceFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::WeakPtr<HidServiceFreeBSD> service)
++ : service_(std::move(service)),
++ task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++
++ timer_.reset(new base::RepeatingTimer());
++ devd_buffer_ = new net::IOBufferWithSize(1024);
++ }
++
++ ~BlockingTaskHelper() {
++ }
++
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const base::FilePath kDevRoot("/dev");
++ const std::string kUHIDPattern("/dev/uhid*");
++
++ base::FileEnumerator enumerator(kDevRoot, false, base::FileEnumerator::FILES);
++ do {
++ const base::FilePath next_device_path(enumerator.Next());
++ const std::string next_device = next_device_path.value();
++ if (next_device.empty())
++ break;
++
++ if (base::MatchPattern(next_device, kUHIDPattern))
++ OnDeviceAdded(next_device.substr(5));
++ } while (true);
++
++ SetupDevdMonitor();
++
++ task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::FirstEnumerationComplete, service_));
++ }
++
++ bool HaveReadWritePermissions(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid())
++ return false;
++
++ return true;
++ }
++
++ void OnDeviceAdded(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ base::BlockingType::MAY_BLOCK);
++ std::string device_node = "/dev/" + device_id;
++ uint16_t vendor_id = 0xffff;
++ uint16_t product_id = 0xffff;
++ std::string product_name = "";
++ std::string serial_number = "";
++
++ std::vector<uint8_t> report_descriptor;
++
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(ERROR) << "Failed to open '" << device_node
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ return;
++ }
++
++ base::ScopedFD fd;
++ fd.reset(device_file.TakePlatformFile());
++
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_data = NULL;
++ ugd.ugd_maxlen = 0xffff;
++ int result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor size";
++ return;
++ }
++
++ report_descriptor.resize(ugd.ugd_actlen);
++
++ ugd.ugd_data = report_descriptor.data();
++ ugd.ugd_maxlen = ugd.ugd_actlen;
++ result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor";
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo(
++ device_id, vendor_id, product_id, product_name, serial_number,
++ device::mojom::HidBusType::kHIDBusTypeUSB,
++ report_descriptor, device_node));
++
++ task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceFreeBSD::AddDevice,
++ service_, device_info));
++ }
++
++ void OnDeviceRemoved(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ base::BlockingType::MAY_BLOCK);
++ task_runner_->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::RemoveDevice, service_,
++ device_id));
++ }
++
++ private:
++
++ void CheckPendingPermissionChange() {
++ base::internal::AssertBlockingAllowed();
++ std::map<std::string, int>::iterator it;
++ for (it = permissions_checks_attempts_.begin(); it != permissions_checks_attempts_.end();) {
++ std::string device_name = it->first;
++ bool keep = true;
++ if (HaveReadWritePermissions(device_name)) {
++ OnDeviceAdded(device_name);
++ keep = false;
++ }
++ else if (it->second-- <= 0) {
++ HID_LOG(ERROR) << "Still don't have write permissions to '" << device_name
++ << "' after " << kMaxPermissionChecks << " attempts";
++ keep = false;
++ }
++
++ if (keep)
++ ++it;
++ else
++ permissions_checks_attempts_.erase(it++);
++ }
++
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++
++ void SetupDevdMonitor() {
++ base::internal::AssertBlockingAllowed();
++
++ int devd_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
++ if (devd_fd < 0)
++ return;
++
++ struct sockaddr_un sa;
++
++ sa.sun_family = AF_UNIX;
++ strlcpy(sa.sun_path, "/var/run/devd.seqpacket.pipe", sizeof(sa.sun_path));
++ if (connect(devd_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
++ close(devd_fd);
++ return;
++ }
++
++ devd_fd_.reset(devd_fd);
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ devd_fd_.get(), base::Bind(&BlockingTaskHelper::OnDevdMessageCanBeRead,
++ base::Unretained(this)));
++ }
++
++ void OnDevdMessageCanBeRead() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ ssize_t bytes_read = HANDLE_EINTR(recv(devd_fd_.get(), devd_buffer_->data(),
++ devd_buffer_->size() - 1, MSG_WAITALL));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_LOG(ERROR) << "Read failed";
++ file_watcher_.reset();
++ }
++ return;
++ }
++
++ devd_buffer_->data()[bytes_read] = 0;
++ char *data = devd_buffer_->data();
++ // It may take some time for devd to change permissions
++ // on /dev/uhidX node. So do not fail immediately if
++ // open fail. Retry each second for kMaxPermissionChecks
++ // times before giving up entirely
++ if (base::StartsWith(data, "+uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '+'
++ if (HaveReadWritePermissions(device_name))
++ OnDeviceAdded(parts[0].substr(1));
++ else {
++ // Do not re-add to checks
++ if (permissions_checks_attempts_.find(device_name) == permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.insert(std::pair<std::string, int>(device_name, kMaxPermissionChecks));
++ timer_->Start(FROM_HERE, base::TimeDelta::FromSeconds(1),
++ this, &BlockingTaskHelper::CheckPendingPermissionChange);
++ }
++ }
++ }
++ }
++
++ if (base::StartsWith(data, "-uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '-'
++ auto it = permissions_checks_attempts_.find(device_name);
++ if (it != permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.erase(it);
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++ OnDeviceRemoved(parts[0].substr(1));
++ }
++ }
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ // This weak pointer is only valid when checked on this task runner.
++ base::WeakPtr<HidServiceFreeBSD> service_;
++ scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++ std::unique_ptr<base::RepeatingTimer> timer_;
++ base::ScopedFD devd_fd_;
++ scoped_refptr<net::IOBufferWithSize> devd_buffer_;
++ std::map<std::string, int> permissions_checks_attempts_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidServiceFreeBSD::HidServiceFreeBSD()
++ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner_(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&BlockingTaskHelper::Start, base::Unretained(helper_.get())));
++}
++
++HidServiceFreeBSD::~HidServiceFreeBSD() {
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++base::WeakPtr<HidService> HidServiceFreeBSD::GetWeakPtr() {
++ return weak_factory_.GetWeakPtr();
++}
++
++// static
++void HidServiceFreeBSD::OpenOnBlockingThread(
++ std::unique_ptr<ConnectParams> params) {
++ base::ScopedBlockingCall scoped_blocking_call(base::BlockingType::MAY_BLOCK);
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ base::FilePath device_path(params->device_info->device_node());
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(EVENT) << "Failed to open '" << params->device_info->device_node()
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ task_runner->PostTask(FROM_HERE, base::Bind(params->callback, nullptr));
++ return;
++ }
++ params->fd.reset(device_file.TakePlatformFile());
++ FinishOpen(std::move(params));
++}
++
++void HidServiceFreeBSD::Connect(const std::string& device_guid,
++ const ConnectCallback& callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const auto& map_entry = devices().find(device_guid);
++ if (map_entry == devices().end()) {
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, base::Bind(callback, nullptr));
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info = map_entry->second;
++
++ auto params = std::make_unique<ConnectParams>(device_info, callback);
++
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
++ params->blocking_task_runner;
++ blocking_task_runner->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::OpenOnBlockingThread,
++ base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::FinishOpen(std::unique_ptr<ConnectParams> params) {
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ task_runner->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::CreateConnection, base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::CreateConnection(std::unique_ptr<ConnectParams> params) {
++ DCHECK(params->fd.is_valid());
++ params->callback.Run(base::MakeRefCounted<HidConnectionFreeBSD>(
++ std::move(params->device_info), std::move(params->fd),
++ std::move(params->blocking_task_runner)));
++}
++
++} // namespace device
diff --git a/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.h b/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.h
new file mode 100644
index 000000000000..74113a6fec3e
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_hid_hid__service__freebsd.h
@@ -0,0 +1,51 @@
+--- services/device/hid/hid_service_freebsd.h.orig 2019-04-09 12:48:48 UTC
++++ services/device/hid/hid_service_freebsd.h
+@@ -0,0 +1,48 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_SERVICE_FREEBSD_H_
++#define DEVICE_HID_HID_SERVICE_FREEBSD_H_
++
++#include <string>
++
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/memory/weak_ptr.h"
++#include "base/timer/timer.h"
++#include "services/device/hid/hid_service.h"
++#include "net/base/io_buffer.h"
++
++namespace device {
++
++class HidServiceFreeBSD : public HidService {
++ public:
++ HidServiceFreeBSD();
++ ~HidServiceFreeBSD() override;
++
++ void Connect(const std::string& device_guid,
++ const ConnectCallback& connect) override;
++ base::WeakPtr<HidService> GetWeakPtr() override;
++
++ private:
++ struct ConnectParams;
++ class BlockingTaskHelper;
++
++ static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
++ static void FinishOpen(std::unique_ptr<ConnectParams> params);
++ static void CreateConnection(std::unique_ptr<ConnectParams> params);
++
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ // |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
++ // a weak reference back to the service that owns it.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++ base::WeakPtrFactory<HidServiceFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidServiceFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_SERVICE_FREEBSD_H_
diff --git a/devel/electron5/files/patch-services_device_serial_BUILD.gn b/devel/electron5/files/patch-services_device_serial_BUILD.gn
new file mode 100644
index 000000000000..5c0d7ebd3a7f
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_serial_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/serial/BUILD.gn.orig 2019-04-08 08:33:02 UTC
++++ services/device/serial/BUILD.gn
+@@ -4,7 +4,7 @@
+
+ import("//build/config/features.gni")
+
+-if (is_win || (is_linux && use_udev) || is_mac) {
++if (is_win || (is_linux && use_udev) || is_mac || is_bsd) {
+ config("platform_support") {
+ visibility = [ ":serial" ]
+ if (is_win) {
diff --git a/devel/electron5/files/patch-services_device_serial_serial__io__handler__posix.cc b/devel/electron5/files/patch-services_device_serial_serial__io__handler__posix.cc
new file mode 100644
index 000000000000..8c06b77ca7f7
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_serial_serial__io__handler__posix.cc
@@ -0,0 +1,11 @@
+--- services/device/serial/serial_io_handler_posix.cc.orig 2019-04-08 08:33:02 UTC
++++ services/device/serial/serial_io_handler_posix.cc
+@@ -65,7 +65,7 @@ bool BitrateToSpeedConstant(int bitrate, speed_t* spee
+ BITRATE_TO_SPEED_CASE(9600)
+ BITRATE_TO_SPEED_CASE(19200)
+ BITRATE_TO_SPEED_CASE(38400)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ BITRATE_TO_SPEED_CASE(57600)
+ BITRATE_TO_SPEED_CASE(115200)
+ BITRATE_TO_SPEED_CASE(230400)
diff --git a/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc b/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
new file mode 100644
index 000000000000..85f64b960194
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
@@ -0,0 +1,20 @@
+--- services/device/time_zone_monitor/time_zone_monitor.cc.orig 2019-04-08 08:18:26 UTC
++++ services/device/time_zone_monitor/time_zone_monitor.cc
+@@ -29,7 +29,7 @@ void TimeZoneMonitor::Bind(device::mojom::TimeZoneMoni
+
+ void TimeZoneMonitor::NotifyClients() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(IS_CHROMECAST))
++#if defined(OS_CHROMEOS) || ((defined(OS_BSD) || defined(OS_LINUX)) && defined(IS_CHROMECAST))
+ // On CrOS (and Chromecast), ICU's default tz is already set to a new zone. No
+ // need to redetect it with detectHostTimeZone().
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::createDefault());
+@@ -41,7 +41,7 @@ void TimeZoneMonitor::NotifyClients() {
+ #else
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::detectHostTimeZone());
+ #endif
+-#if defined(OS_LINUX) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ // We get here multiple times on Linux per a single tz change, but
+ // want to update the ICU default zone and notify renderer only once.
+ std::unique_ptr<icu::TimeZone> current_zone(icu::TimeZone::createDefault());
diff --git a/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc b/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
new file mode 100644
index 000000000000..e24de2d95c5c
--- /dev/null
+++ b/devel/electron5/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
@@ -0,0 +1,14 @@
+--- services/device/time_zone_monitor/time_zone_monitor_linux.cc.orig 2019-04-08 08:33:02 UTC
++++ services/device/time_zone_monitor/time_zone_monitor_linux.cc
+@@ -104,7 +104,11 @@ class TimeZoneMonitorLinuxImpl
+ // false positives are harmless, assuming the false positive rate is
+ // reasonable.
+ const char* const kFilesToWatch[] = {
++#if defined(OS_BSD)
++ "/etc/localtime",
++#else
+ "/etc/localtime", "/etc/timezone", "/etc/TZ",
++#endif
+ };
+ for (size_t index = 0; index < base::size(kFilesToWatch); ++index) {
+ file_path_watchers_.push_back(std::make_unique<base::FilePathWatcher>());
diff --git a/devel/electron5/files/patch-services_network_BUILD.gn b/devel/electron5/files/patch-services_network_BUILD.gn
new file mode 100644
index 000000000000..81fdc4b77154
--- /dev/null
+++ b/devel/electron5/files/patch-services_network_BUILD.gn
@@ -0,0 +1,10 @@
+--- services/network/BUILD.gn.orig 2019-04-08 08:33:02 UTC
++++ services/network/BUILD.gn
+@@ -248,7 +248,6 @@ jumbo_component("network_service") {
+
+ if (is_linux) {
+ deps += [
+- "//sandbox/linux:sandbox_services",
+ "//services/service_manager/sandbox:sandbox",
+ ]
+ }
diff --git a/devel/electron5/files/patch-services_network_network__context.cc b/devel/electron5/files/patch-services_network_network__context.cc
new file mode 100644
index 000000000000..de3dfcd32138
--- /dev/null
+++ b/devel/electron5/files/patch-services_network_network__context.cc
@@ -0,0 +1,38 @@
+--- services/network/network_context.cc.orig 2019-04-08 08:33:02 UTC
++++ services/network/network_context.cc
+@@ -132,7 +132,7 @@
+ #endif // defined(USE_NSS_CERTS)
+
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ #include "net/cert/cert_net_fetcher.h"
+ #include "net/cert_net/cert_net_fetcher_impl.h"
+ #endif
+@@ -610,7 +610,7 @@ NetworkContext::~NetworkContext() {
+ #endif
+
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ net::ShutdownGlobalCertNetFetcher();
+ #endif
+ }
+@@ -1700,7 +1700,7 @@ URLRequestContextOwner NetworkContext::ApplyContextPar
+
+ net::CookieCryptoDelegate* crypto_delegate = nullptr;
+ if (params_->enable_encrypted_cookies) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
+ DCHECK(network_service_->os_crypt_config_set())
+ << "NetworkService::SetCryptConfig must be called before creating a "
+ "NetworkContext with encrypted cookies.";
+@@ -2015,7 +2015,7 @@ URLRequestContextOwner NetworkContext::ApplyContextPar
+ net::SetURLRequestContextForNSSHttpIO(result.url_request_context.get());
+ #endif
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
+ net::SetGlobalCertNetFetcher(
+ net::CreateCertNetFetcher(result.url_request_context.get()));
+ #endif
diff --git a/devel/electron5/files/patch-services_network_network__sandbox__hook__linux.cc b/devel/electron5/files/patch-services_network_network__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..4ad9e94f2116
--- /dev/null
+++ b/devel/electron5/files/patch-services_network_network__sandbox__hook__linux.cc
@@ -0,0 +1,18 @@
+--- services/network/network_sandbox_hook_linux.cc.orig 2019-04-08 08:18:26 UTC
++++ services/network/network_sandbox_hook_linux.cc
+@@ -14,6 +14,7 @@ using sandbox::syscall_broker::MakeBrokerCommandSet;
+ namespace network {
+
+ bool NetworkPreSandboxHook(service_manager::SandboxLinux::Options options) {
++#if !defined(OS_BSD)
+ auto* instance = service_manager::SandboxLinux::GetInstance();
+
+ // TODO(tsepez): remove universal permission under filesytem root.
+@@ -32,6 +33,7 @@ bool NetworkPreSandboxHook(service_manager::SandboxLin
+ service_manager::SandboxLinux::PreSandboxHook(), options);
+
+ instance->EngageNamespaceSandboxIfPossible();
++#endif // defined(OS_BSD)
+ return true;
+ }
+
diff --git a/devel/electron5/files/patch-services_network_network__service.cc b/devel/electron5/files/patch-services_network_network__service.cc
new file mode 100644
index 000000000000..411722a98c1c
--- /dev/null
+++ b/devel/electron5/files/patch-services_network_network__service.cc
@@ -0,0 +1,20 @@
+--- services/network/network_service.cc.orig 2019-04-08 08:33:02 UTC
++++ services/network/network_service.cc
+@@ -61,7 +61,7 @@
+ #include "third_party/boringssl/src/include/openssl/cpu.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ #include "components/os_crypt/key_storage_config_linux.h"
+ #endif
+
+@@ -605,7 +605,7 @@ void NetworkService::OnCertDBChanged() {
+ net::CertDatabase::GetInstance()->NotifyObserversCertDBChanged();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void NetworkService::SetCryptConfig(mojom::CryptConfigPtr crypt_config) {
+ #if !defined(IS_CHROMECAST)
+ DCHECK(!os_crypt_config_set_);
diff --git a/devel/electron5/files/patch-services_network_network__service.h b/devel/electron5/files/patch-services_network_network__service.h
new file mode 100644
index 000000000000..5307f12a689f
--- /dev/null
+++ b/devel/electron5/files/patch-services_network_network__service.h
@@ -0,0 +1,11 @@
+--- services/network/network_service.h.orig 2019-04-08 08:33:02 UTC
++++ services/network/network_service.h
+@@ -186,7 +186,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
+ #endif // !BUILDFLAG(IS_CT_SUPPORTED)
+ void UpdateCRLSet(base::span<const uint8_t> crl_set) override;
+ void OnCertDBChanged() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
+ #endif
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h b/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
new file mode 100644
index 000000000000..d66877b139bc
--- /dev/null
+++ b/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
@@ -0,0 +1,14 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h.orig 2019-04-08 08:33:03 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h
+@@ -26,9 +26,9 @@ class COMPONENT_EXPORT(
+ mojom::RawOSMemDump*);
+ static std::vector<mojom::VmRegionPtr> GetProcessMemoryMaps(base::ProcessId);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ static void SetProcSmapsForTesting(FILE*);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(OSMetricsTest, ParseProcSmaps);
diff --git a/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc b/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
new file mode 100644
index 000000000000..4aef77c49f4b
--- /dev/null
+++ b/devel/electron5/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
@@ -0,0 +1,80 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc.orig 2019-04-08 08:33:03 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc
+@@ -17,8 +17,10 @@
+ #include "build/build_config.h"
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
+
++#if !defined(OS_BSD)
+ // Symbol with virtual address of the start of ELF header of the current binary.
+ extern char __ehdr_start;
++#endif
+
+ namespace memory_instrumentation {
+
+@@ -67,6 +69,7 @@ struct ModuleData {
+
+ ModuleData GetMainModuleData() {
+ ModuleData module_data;
++#if !defined(OS_BSD)
+ Dl_info dl_info;
+ if (dladdr(&__ehdr_start, &dl_info)) {
+ base::Optional<std::string> build_id =
+@@ -76,6 +79,7 @@ ModuleData GetMainModuleData() {
+ module_data.build_id = *build_id;
+ }
+ }
++#endif
+ return module_data;
+ }
+
+@@ -123,14 +127,14 @@ bool ParseSmapsHeader(const char* header_line,
+ // Build ID is needed to symbolize heap profiles, and is generated only on
+ // official builds. Build ID is only added for the current library (chrome)
+ // since it is racy to read other libraries which can be unmapped any time.
+-#if defined(OFFICIAL_BUILD)
++#if defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+ if (!region->mapped_file.empty() &&
+ base::StartsWith(main_module_data.path, region->mapped_file,
+ base::CompareCase::SENSITIVE) &&
+ !main_module_data.build_id.empty()) {
+ region->module_debugid = main_module_data.build_id;
+ }
+-#endif // defined(OFFICIAL_BUILD)
++#endif // defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+
+ return res;
+ }
+@@ -217,6 +221,9 @@ void OSMetrics::SetProcSmapsForTesting(FILE* f) {
+ // static
+ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ mojom::RawOSMemDump* dump) {
++#if defined(OS_BSD)
++ return false;
++#else
+ base::ScopedFD autoclose = OpenStatm(pid);
+ int statm_fd = autoclose.get();
+
+@@ -242,10 +249,12 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ dump->resident_set_kb = process_metrics->GetResidentSetSize() / 1024;
+
+ return true;
++#endif
+ }
+
+ // static
+ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMaps(base::ProcessId pid) {
++#if defined(OS_BSD)
+ std::vector<VmRegionPtr> maps;
+ uint32_t res = 0;
+ if (g_proc_smaps_for_testing) {
+@@ -263,6 +272,10 @@ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMa
+ return std::vector<VmRegionPtr>();
+
+ return maps;
++#else
++ NOTIMPLEMENTED();
++ return std::vector<VmRegionPtr>();
++#endif
+ }
+
+ } // namespace memory_instrumentation
diff --git a/devel/electron5/files/patch-services_service__manager_embedder_main.cc b/devel/electron5/files/patch-services_service__manager_embedder_main.cc
new file mode 100644
index 000000000000..00d4deb34b71
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_embedder_main.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/embedder/main.cc.orig 2019-04-08 08:33:03 UTC
++++ services/service_manager/embedder/main.cc
+@@ -320,7 +320,7 @@ int Main(const MainParams& params) {
+ #endif
+ base::EnableTerminationOnOutOfMemory();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The various desktop environments set this environment variable that
+ // allows the dbus client library to connect directly to the bus. When this
+ // variable is not set (test environments like xvfb-run), the dbus client
diff --git a/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.cc b/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.cc
new file mode 100644
index 000000000000..804e4a124e26
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.cc
@@ -0,0 +1,19 @@
+--- services/service_manager/embedder/set_process_title_linux.cc.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/embedder/set_process_title_linux.cc
+@@ -49,6 +49,8 @@
+ extern char** environ;
+
+ static char** g_main_argv = NULL;
++
++#if !defined(OS_FREEBSD)
+ static char* g_orig_argv0 = NULL;
+
+ void setproctitle(const char* fmt, ...) {
+@@ -101,6 +103,7 @@ void setproctitle(const char* fmt, ...) {
+ va_end(ap);
+ g_main_argv[1] = NULL;
+ }
++#endif
+
+ // A version of this built into glibc would not need this function, since
+ // it could stash the argv pointer in __libc_start_main(). But we need it.
diff --git a/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.h b/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.h
new file mode 100644
index 000000000000..e3c7708c7be5
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_embedder_set__process__title__linux.h
@@ -0,0 +1,20 @@
+--- services/service_manager/embedder/set_process_title_linux.h.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/embedder/set_process_title_linux.h
+@@ -5,6 +5,9 @@
+ #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+ #define SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+
++#include "build/build_config.h"
++
++#if !defined(OS_FREEBSD)
+ // Set the process title that will show in "ps" and similar tools. Takes
+ // printf-style format string and arguments. After calling setproctitle()
+ // the original main() argv[] array should not be used. By default, the
+@@ -14,6 +17,7 @@
+ // This signature and naming is to be compatible with most other Unix
+ // implementations of setproctitle().
+ void setproctitle(const char* fmt, ...);
++#endif
+
+ // Initialize state needed for setproctitle() on Linux. Pass the argv pointer
+ // from main() to setproctitle_init() before calling setproctitle().
diff --git a/devel/electron5/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn b/devel/electron5/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
new file mode 100644
index 000000000000..30bd68867a08
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
@@ -0,0 +1,14 @@
+--- services/service_manager/public/cpp/service_executable/BUILD.gn.orig 2019-04-08 08:33:03 UTC
++++ services/service_manager/public/cpp/service_executable/BUILD.gn
+@@ -30,6 +30,11 @@ source_set("support") {
+ "//sandbox/linux:seccomp_bpf",
+ ]
+ }
++ if (is_bsd) {
++ deps -= [
++ "//sandbox/linux:seccomp_bpf"
++ ]
++ }
+ }
+
+ # Service executable targets should link against this to get a boilerplate entry
diff --git a/devel/electron5/files/patch-services_service__manager_runner_host_BUILD.gn b/devel/electron5/files/patch-services_service__manager_runner_host_BUILD.gn
new file mode 100644
index 000000000000..7d72747dadb8
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_runner_host_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/runner/host/BUILD.gn.orig 2019-04-08 08:33:03 UTC
++++ services/service_manager/runner/host/BUILD.gn
+@@ -30,7 +30,7 @@ source_set("lib") {
+ "//mojo/public/cpp/system",
+ ]
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//sandbox/linux:sandbox_services" ]
+ }
+
diff --git a/devel/electron5/files/patch-services_service__manager_sandbox_BUILD.gn b/devel/electron5/files/patch-services_service__manager_sandbox_BUILD.gn
new file mode 100644
index 000000000000..9d157b9e22e7
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_sandbox_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/BUILD.gn.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/sandbox/BUILD.gn
+@@ -28,7 +28,7 @@ component("sandbox") {
+ "//base",
+ "//sandbox:common",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/bpf_audio_policy_linux.cc",
+ "linux/bpf_audio_policy_linux.h",
diff --git a/devel/electron5/files/patch-services_service__manager_sandbox_sandbox__type.cc b/devel/electron5/files/patch-services_service__manager_sandbox_sandbox__type.cc
new file mode 100644
index 000000000000..dedc7c871451
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_sandbox_sandbox__type.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/sandbox_type.cc.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/sandbox/sandbox_type.cc
+@@ -25,7 +25,7 @@ bool IsUnsandboxedSandboxType(SandboxType sandbox_type
+ service_manager::features::kXRSandbox);
+ #endif
+ case SANDBOX_TYPE_AUDIO:
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return !base::FeatureList::IsEnabled(
+ service_manager::features::kAudioServiceSandbox);
+ #else
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_common_zygote__features.gni b/devel/electron5/files/patch-services_service__manager_zygote_common_zygote__features.gni
new file mode 100644
index 000000000000..2f9368bc966e
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_common_zygote__features.gni
@@ -0,0 +1,8 @@
+--- services/service_manager/zygote/common/zygote_features.gni.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/zygote/common/zygote_features.gni
+@@ -2,4 +2,4 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-use_zygote_handle = is_posix && !is_android && !is_mac
++use_zygote_handle = is_posix && !is_android && !is_mac && !is_bsd
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc b/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
new file mode 100644
index 000000000000..b699a32d8001
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
@@ -0,0 +1,40 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.cc.orig 2019-04-08 08:33:03 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.cc
+@@ -72,6 +72,7 @@ ZygoteHostImpl* ZygoteHostImpl::GetInstance() {
+ }
+
+ void ZygoteHostImpl::Init(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
+ return;
+ }
+@@ -122,6 +123,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& com
+ "you can try using --"
+ << service_manager::switches::kNoSandbox << ".";
+ }
++#endif
+ }
+
+ void ZygoteHostImpl::AddZygotePid(pid_t pid) {
+@@ -146,6 +148,7 @@ pid_t ZygoteHostImpl::LaunchZygote(
+ base::CommandLine* cmd_line,
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds) {
++#if !defined(OS_BSD)
+ int fds[2];
+ CHECK_EQ(0, socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds));
+ CHECK(base::UnixDomainSocket::EnableReceiveProcessId(fds[0]));
+@@ -210,9 +213,12 @@ pid_t ZygoteHostImpl::LaunchZygote(
+
+ AddZygotePid(pid);
+ return pid;
++#else
++ return 0;
++#endif
+ }
+
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ void ZygoteHostImpl::AdjustRendererOOMScore(base::ProcessHandle pid,
+ int score) {
+ // 1) You can't change the oom_score_adj of a non-dumpable process
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h b/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
new file mode 100644
index 000000000000..1e9b6ea59d20
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
@@ -0,0 +1,13 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.h.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.h
+@@ -44,8 +44,10 @@ class COMPONENT_EXPORT(SERVICE_MANAGER_ZYGOTE) ZygoteH
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds);
+
++#if !defined(OS_BSD)
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) override;
++#endif
+ bool HasZygote() { return !zygote_pids_.empty(); }
+
+ private:
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_zygote__host__linux.h b/devel/electron5/files/patch-services_service__manager_zygote_zygote__host__linux.h
new file mode 100644
index 000000000000..66040b07548b
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_zygote__host__linux.h
@@ -0,0 +1,16 @@
+--- services/service_manager/zygote/zygote_host_linux.h.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/zygote/zygote_host_linux.h
+@@ -30,11 +30,13 @@ class ZygoteHost {
+ // after the first render has been forked.
+ virtual int GetRendererSandboxStatus() const = 0;
+
++#if !defined(OS_BSD)
+ // Adjust the OOM score of the given renderer's PID. The allowed
+ // range for the score is [0, 1000], where higher values are more
+ // likely to be killed by the OOM killer.
+ virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) = 0;
++#endif
+ };
+
+ } // namespace service_manager
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_zygote__linux.cc b/devel/electron5/files/patch-services_service__manager_zygote_zygote__linux.cc
new file mode 100644
index 000000000000..929073a78dbb
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_zygote__linux.cc
@@ -0,0 +1,15 @@
+--- services/service_manager/zygote/zygote_linux.cc.orig 2019-04-08 08:33:03 UTC
++++ services/service_manager/zygote/zygote_linux.cc
+@@ -1,6 +1,7 @@
+ // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "services/service_manager/zygote/zygote_linux.h"
+
+@@ -664,3 +665,4 @@ bool Zygote::HandleGetSandboxStatus(int fd, base::Pick
+ }
+
+ } // namespace service_manager
++#endif
diff --git a/devel/electron5/files/patch-services_service__manager_zygote_zygote__main__linux.cc b/devel/electron5/files/patch-services_service__manager_zygote_zygote__main__linux.cc
new file mode 100644
index 000000000000..eaef4b039d37
--- /dev/null
+++ b/devel/electron5/files/patch-services_service__manager_zygote_zygote__main__linux.cc
@@ -0,0 +1,48 @@
+--- services/service_manager/zygote/zygote_main_linux.cc.orig 2019-04-08 08:18:26 UTC
++++ services/service_manager/zygote/zygote_main_linux.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -101,6 +103,7 @@ static bool CreateInitProcessReaper(
+ // created through the setuid sandbox.
+ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox,
+ base::OnceClosure post_fork_parent_callback) {
++#if !defined(OS_BSD)
+ DCHECK(setuid_sandbox);
+ DCHECK(setuid_sandbox->IsSuidSandboxChild());
+
+@@ -133,6 +136,9 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxCli
+
+ CHECK(service_manager::SandboxDebugHandling::SetDumpableStatusAndHandlers());
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ static void DropAllCapabilities(int proc_fd) {
+@@ -178,6 +184,7 @@ static void EnterLayerOneSandbox(service_manager::Sand
+
+ bool ZygoteMain(
+ std::vector<std::unique_ptr<ZygoteForkDelegate>> fork_delegates) {
++#if !defined(OS_BSD)
+ sandbox::SetAmZygoteOrRenderer(true, GetSandboxFD());
+
+ auto* linux_sandbox = service_manager::SandboxLinux::GetInstance();
+@@ -240,6 +247,9 @@ bool ZygoteMain(
+
+ // This function call can return multiple times, once per fork().
+ return zygote.ProcessRequests();
++#else
++ return false;
++#endif
+ }
+
+ } // namespace service_manager
diff --git a/devel/electron5/files/patch-skia_ext_SkMemory__new__handler.cpp b/devel/electron5/files/patch-skia_ext_SkMemory__new__handler.cpp
new file mode 100644
index 000000000000..5e5b3bfb755a
--- /dev/null
+++ b/devel/electron5/files/patch-skia_ext_SkMemory__new__handler.cpp
@@ -0,0 +1,20 @@
+--- skia/ext/SkMemory_new_handler.cpp.orig 2019-04-08 08:18:26 UTC
++++ skia/ext/SkMemory_new_handler.cpp
+@@ -77,7 +77,7 @@ static void* malloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = malloc(size);
+ #else
+ // It's the responsibility of the caller to check the return value.
+@@ -97,7 +97,7 @@ static void* calloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = calloc(1, size);
+ #else
+ // It's the responsibility of the caller to check the return value.
diff --git a/devel/electron5/files/patch-third__party_angle_BUILD.gn b/devel/electron5/files/patch-third__party_angle_BUILD.gn
new file mode 100644
index 000000000000..79678f044552
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_BUILD.gn
@@ -0,0 +1,21 @@
+--- third_party/angle/BUILD.gn.orig 2019-04-08 08:33:52 UTC
++++ third_party/angle/BUILD.gn
+@@ -276,6 +276,7 @@ angle_static_library("angle_gpu_info_util") {
+ "X11",
+ "Xi",
+ "Xext",
++ "GL",
+ ]
+ }
+ }
+@@ -842,10 +843,6 @@ foreach(is_shared_library,
+ libs = []
+ if (is_linux) {
+ sources += util_linux_sources
+- libs += [
+- "rt",
+- "dl",
+- ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
new file mode 100644
index 000000000000..d2f83501b635
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
@@ -0,0 +1,16 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_internal.h.orig 2019-04-08 08:20:00 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_internal.h
+@@ -14,8 +14,13 @@
+ namespace angle
+ {
+
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices);
++
+ // Defined in SystemInfo_libpci when GPU_INFO_USE_LIBPCI is defined.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices);
++#if defined(__FreeBSD__)
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices);
++#endif
+ // Defined in SystemInfo_x11 when GPU_INFO_USE_X11 is defined.
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version);
+
diff --git a/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
new file mode 100644
index 000000000000..32ad0de9e1d0
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
@@ -0,0 +1,90 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp.orig 2019-04-08 08:20:00 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp
+@@ -12,6 +12,11 @@
+ #include <pci/pci.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#include <sys/pciio.h>
++#endif
++
+ #include "common/angleutils.h"
+ #include "common/debug.h"
+
+@@ -82,6 +87,75 @@ struct LibPCI : private angle::NonCopyable
+ };
+
+ } // anonymous namespace
++
++#if defined(__FreeBSD__)
++// Adds an entry per PCI GPU found and fills the device and vendor ID.
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices)
++{
++ int fd;
++ struct pci_conf_io conf;
++ struct pci_conf *matches;
++ uint32_t offset = 0;
++
++ fd = open("/dev/pci", O_RDONLY);
++ if (fd < 0)
++ return false;
++
++ matches = new struct pci_conf[32];
++ conf.generation = 0;
++ do {
++ conf.pat_buf_len = 0;
++ conf.num_patterns = 0;
++ conf.patterns = NULL;
++ conf.match_buf_len = 32 * sizeof(struct pci_conf);
++ conf.num_matches = 32;
++ conf.matches = matches;
++ conf.offset = offset;
++ conf.status = PCI_GETCONF_ERROR;
++ if (ioctl(fd, PCIOCGETCONF, &conf) < 0) {
++ if (errno == ENODEV)
++ break;
++ }
++ /* PCI_GETCONF_LIST_CHANGED would require us to start over. */
++ if (conf.status == PCI_GETCONF_ERROR || conf.status == PCI_GETCONF_LIST_CHANGED) {
++ break;
++ }
++
++ for (unsigned int i = 0; i < conf.num_matches; i++) {
++ uint16_t device_class = (matches[i].pc_class << 8) | matches[i].pc_subclass;
++
++ // Skip non-GPU devices
++ switch (device_class)
++ {
++ case PCI_CLASS_DISPLAY_VGA:
++ case PCI_CLASS_DISPLAY_XGA:
++ case PCI_CLASS_DISPLAY_3D:
++ break;
++ default:
++ continue;
++ }
++
++ // Skip unknown devices
++ if (matches[i].pc_vendor == 0 || matches[i].pc_device == 0) {
++ continue;
++ }
++
++ GPUDeviceInfo info;
++ info.vendorId = matches[i].pc_vendor;
++ info.deviceId = matches[i].pc_device;
++
++ devices->push_back(info);
++ }
++ offset += conf.num_matches;
++ } while (conf.status == PCI_GETCONF_MORE_DEVS);
++
++ delete[] matches;
++
++ close(fd);
++
++ return true;
++}
++#endif
+
+ // Adds an entry per PCI GPU found and fills the device and vendor ID.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices)
diff --git a/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
new file mode 100644
index 000000000000..ffaa86d8fd39
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
@@ -0,0 +1,21 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp.orig 2019-04-08 08:33:53 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp
+@@ -71,10 +71,18 @@ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo
+
+ bool GetSystemInfo(SystemInfo *info)
+ {
++#if defined(__FreeBSD__)
++ if (!CollectMesaCardInfo(&(info->gpus)))
++ {
++ if (!GetPCIDevicesFreeBSD(&(info->gpus)))
++ return false;
++ }
++#else
+ if (!GetPCIDevicesWithLibPCI(&(info->gpus)))
+ {
+ return false;
+ }
++#endif
+
+ if (info->gpus.size() == 0)
+ {
diff --git a/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
new file mode 100644
index 000000000000..41da10ee0178
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
@@ -0,0 +1,55 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp.orig 2019-04-08 08:20:00 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp
+@@ -8,6 +8,8 @@
+
+ #include "gpu_info_util/SystemInfo_internal.h"
+
++#include <GL/glx.h>
++#include <GL/glxext.h>
+ #include <X11/Xlib.h>
+
+ #include "common/debug.h"
+@@ -18,8 +20,43 @@
+ # error SystemInfo_x11.cpp compiled without GPU_INFO_USE_X11
+ #endif
+
++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
++
+ namespace angle
+ {
++
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices)
++{
++
++ unsigned int vid[3], did[3];
++
++ Display *display = XOpenDisplay(NULL);
++ if (!display) {
++ return false;
++ }
++
++ PFNGLXQUERYRENDERERINTEGERMESAPROC queryInteger =
++ (PFNGLXQUERYRENDERERINTEGERMESAPROC) glXGetProcAddressARB((const GLubyte *)
++ "glXQueryRendererIntegerMESA");
++
++ if (!queryInteger)
++ return false;
++
++ bool vendor_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_VENDOR_ID_MESA, vid);
++ bool device_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_DEVICE_ID_MESA, did);
++
++ if (vendor_ret && device_ret) {
++ GPUDeviceInfo info;
++ info.vendorId = vid[0];
++ info.deviceId = did[0];
++ devices->push_back(info);
++ }
++
++ return true;
++}
+
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version)
+ {
diff --git a/devel/electron5/files/patch-third__party_angle_src_libANGLE_Display.cpp b/devel/electron5/files/patch-third__party_angle_src_libANGLE_Display.cpp
new file mode 100644
index 000000000000..37c505eb161d
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_libANGLE_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/angle/src/libANGLE/Display.cpp.orig 2019-04-08 08:33:54 UTC
++++ third_party/angle/src/libANGLE/Display.cpp
+@@ -64,7 +64,7 @@
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ # include "libANGLE/renderer/vulkan/win32/DisplayVkWin32.h"
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ # include "libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h"
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ # include "libANGLE/renderer/vulkan/android/DisplayVkAndroid.h"
+@@ -216,7 +216,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const Attrib
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ impl = new rx::DisplayVkWin32(state);
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ impl = new rx::DisplayVkXcb(state);
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ impl = new rx::DisplayVkAndroid(state);
diff --git a/devel/electron5/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h b/devel/electron5/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
new file mode 100644
index 000000000000..a3b134d5b6dd
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/renderer/driver_utils.h.orig 2019-04-08 08:20:00 UTC
++++ third_party/angle/src/libANGLE/renderer/driver_utils.h
+@@ -107,7 +107,7 @@ inline bool IsWindows()
+
+ inline bool IsLinux()
+ {
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron5/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h b/devel/electron5/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h
new file mode 100644
index 000000000000..f18a21e78616
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_third__party_glslang_src_glslang_Include_PoolAlloc.h
@@ -0,0 +1,10 @@
+--- third_party/angle/third_party/glslang/src/glslang/Include/PoolAlloc.h.orig 2020-03-15 13:45:58 UTC
++++ third_party/angle/third_party/glslang/src/glslang/Include/PoolAlloc.h
+@@ -304,7 +304,6 @@ class pool_allocator { (public)
+ size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
+ size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
+
+- void setAllocator(TPoolAllocator* a) { allocator = *a; }
+ TPoolAllocator& getAllocator() const { return allocator; }
+
+ protected:
diff --git a/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
new file mode 100644
index 000000000000..3cc5adee15d2
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/loader.c.orig 2019-04-08 08:34:43 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/loader.c
+@@ -215,7 +215,7 @@ void *loader_device_heap_realloc(const struct loader_d
+ }
+
+ // Environment variables
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+
+ static inline char *loader_getenv(const char *name, const struct loader_instance *inst) {
+ // No allocation of memory necessary for Linux, but we should at least touch
diff --git a/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
new file mode 100644
index 000000000000..4a5a8d7c7000
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h.orig 2019-04-08 08:34:43 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron5/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
new file mode 100644
index 000000000000..22f7728f2e6f
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h.orig 2019-04-08 08:23:49 UTC
++++ third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
new file mode 100644
index 000000000000..b3e5c5fa9c4d
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/editing/editing_behavior.cc.orig 2019-04-08 08:18:45 UTC
++++ third_party/blink/renderer/core/editing/editing_behavior.cc
+@@ -270,7 +270,7 @@ bool EditingBehavior::ShouldInsertCharacter(const Keyb
+ // unexpected behaviour
+ if (ch < ' ')
+ return false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // According to XKB map no keyboard combinations with ctrl key are mapped to
+ // printable characters, however we need the filter as the DomKey/text could
+ // contain printable characters.
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
new file mode 100644
index 000000000000..937666b67090
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc.orig 2019-04-08 08:33:04 UTC
++++ third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+@@ -39,7 +39,7 @@ constexpr TimeDelta kEncodeRowSlackBeforeDeadline =
+ TimeDelta::FromMicroseconds(100);
+
+ /* The value is based on user statistics on Nov 2017. */
+-#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN))
++#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)) || defined(OS_BSD)
+ const double kIdleTaskStartTimeoutDelayMs = 1000.0;
+ #else
+ const double kIdleTaskStartTimeoutDelayMs = 4000.0; // For ChromeOS, Mobile
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
new file mode 100644
index 000000000000..52c3d5bf3c55
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/forms/internal_popup_menu.cc.orig 2019-04-08 08:33:04 UTC
++++ third_party/blink/renderer/core/html/forms/internal_popup_menu.cc
+@@ -127,7 +127,7 @@ class InternalPopupMenu::ItemIterationContext {
+ is_in_group_(false),
+ buffer_(buffer) {
+ DCHECK(buffer_);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On other platforms, the <option> background color is the same as the
+ // <select> background color. On Linux, that makes the <option>
+ // background color very dark, so by default, try to use a lighter
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
new file mode 100644
index 000000000000..89b7f6ecaa0c
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/inspector/inspector_memory_agent.cc.orig 2019-04-08 08:33:05 UTC
++++ third_party/blink/renderer/core/inspector/inspector_memory_agent.cc
+@@ -171,7 +171,7 @@ InspectorMemoryAgent::GetSamplingProfileById(uint32_t
+
+ std::vector<std::string> InspectorMemoryAgent::Symbolize(
+ const std::vector<void*>& addresses) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(alph): Move symbolization to the client.
+ std::vector<void*> addresses_to_symbolize;
+ for (void* address : addresses) {
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_layout_layout__view.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
new file mode 100644
index 000000000000..1e42711f77c1
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/layout/layout_view.cc.orig 2019-04-08 08:33:05 UTC
++++ third_party/blink/renderer/core/layout/layout_view.cc
+@@ -58,7 +58,7 @@
+ #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+ #include "third_party/blink/renderer/platform/transforms/transform_state.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -321,7 +321,7 @@ void LayoutView::UpdateLayout() {
+ DCHECK(!layout_state_);
+ LayoutState root_layout_state(*this);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The font code in FontPlatformData does not have a direct connection to the
+ // document, the frame or anything from which we could retrieve the device
+ // scale factor. After using zoom for DSF, the GraphicsContext does only ever
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
new file mode 100644
index 000000000000..172fffdf91cd
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/paint/paint_layer.cc.orig 2019-04-08 08:33:05 UTC
++++ third_party/blink/renderer/core/paint/paint_layer.cc
+@@ -104,7 +104,7 @@ namespace {
+ static CompositingQueryMode g_compositing_query_mode =
+ kCompositingQueriesAreOnlyAllowedInCertainDocumentLifecyclePhases;
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct SameSizeAsPaintLayer : DisplayItemClient {
+ // The bit fields may fit into the machine word of DisplayItemClient which
+ // has only 8-bit data.
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc b/devel/electron5/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
new file mode 100644
index 000000000000..0df5cdde6338
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc.orig 2019-04-08 08:33:05 UTC
++++ third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
+@@ -332,7 +332,7 @@ ScrollbarPart ScrollbarThemeAura::InvalidateOnThumbPos
+
+ bool ScrollbarThemeAura::ShouldCenterOnThumb(const Scrollbar& scrollbar,
+ const WebMouseEvent& event) {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ if (event.button == WebPointerProperties::Button::kMiddle)
+ return true;
+ #endif
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_BUILD.gn b/devel/electron5/files/patch-third__party_blink_renderer_platform_BUILD.gn
new file mode 100644
index 000000000000..e0ac59a88c46
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/blink/renderer/platform/BUILD.gn.orig 2019-04-09 12:48:19 UTC
++++ third_party/blink/renderer/platform/BUILD.gn
+@@ -129,6 +129,7 @@ executable("character_data_generator") {
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ libs = [ "cxxrt" ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
new file mode 100644
index 000000000000..e772a18de3e6
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.cc
+@@ -66,7 +66,7 @@ namespace blink {
+
+ SkFontMgr* FontCache::static_font_manager_ = nullptr;
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float FontCache::device_scale_factor_ = 1.0;
+ #endif
+
+@@ -89,7 +89,7 @@ FontCache::FontCache()
+ FontPlatformData* FontCache::SystemFontPlatformData(
+ const FontDescription& font_description) {
+ const AtomicString& family = FontCache::SystemFontFamily();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (family.IsEmpty() || family == font_family_names::kSystemUi)
+ return nullptr;
+ #else
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
new file mode 100644
index 000000000000..bb2412e7d453
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
@@ -0,0 +1,53 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.h.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.h
+@@ -157,7 +157,7 @@ class PLATFORM_EXPORT FontCache {
+ sk_sp<SkFontMgr> FontManager() { return font_manager_; }
+ static void SetFontManager(sk_sp<SkFontMgr>);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // These are needed for calling QueryRenderStyleForStrike, since
+ // gfx::GetFontRenderParams makes distinctions based on DSF.
+ static float DeviceScaleFactor() { return device_scale_factor_; }
+@@ -218,7 +218,7 @@ class PLATFORM_EXPORT FontCache {
+ const FontDescription&);
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct PlatformFallbackFont {
+ String name;
+ CString filename;
+@@ -230,7 +230,7 @@ class PLATFORM_EXPORT FontCache {
+ static void GetFontForCharacter(UChar32,
+ const char* preferred_locale,
+ PlatformFallbackFont*);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FontDataFromFontPlatformData(
+ const FontPlatformData*,
+@@ -294,12 +294,12 @@ class PLATFORM_EXPORT FontCache {
+ const FontFaceCreationParams&,
+ CString& name);
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ static AtomicString GetFamilyNameForCharacter(SkFontMgr*,
+ UChar32,
+ const FontDescription&,
+ FontFallbackPriority);
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FallbackOnStandardFontStyle(const FontDescription&,
+ UChar32);
+@@ -330,7 +330,7 @@ class PLATFORM_EXPORT FontCache {
+ bool is_test_font_mgr_ = false;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ static float device_scale_factor_;
+ #endif
+
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
new file mode 100644
index 000000000000..a61452b04d27
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_description.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/fonts/font_description.cc
+@@ -38,7 +38,7 @@
+ #include "third_party/blink/renderer/platform/wtf/text/atomic_string_hash.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -223,7 +223,7 @@ FontCacheKey FontDescription::CacheKey(
+ static_cast<unsigned>(fields_.orientation_) << 1 | // bit 2-3
+ static_cast<unsigned>(fields_.subpixel_text_position_); // bit 1
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float device_scale_factor_for_key = FontCache::DeviceScaleFactor();
+ #else
+ float device_scale_factor_for_key = 1.0f;
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
new file mode 100644
index 000000000000..80dc79a8edc5
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/fonts/font_metrics.cc.orig 2019-04-08 08:18:48 UTC
++++ third_party/blink/renderer/platform/fonts/font_metrics.cc
+@@ -39,7 +39,7 @@
+
+ namespace blink {
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // This is the largest VDMX table which we'll try to load and parse.
+ static const size_t kMaxVDMXTableSize = 1024 * 1024; // 1 MB
+ #endif
+@@ -61,7 +61,7 @@ void FontMetrics::AscentDescentWithHacks(
+ int vdmx_ascent = 0, vdmx_descent = 0;
+ bool is_vdmx_valid = false;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Manually digging up VDMX metrics is only applicable when bytecode hinting
+ // using FreeType. With DirectWrite or CoreText, no bytecode hinting is ever
+ // done. This code should be pushed into FreeType (hinted font metrics).
+@@ -107,7 +107,7 @@ void FontMetrics::AscentDescentWithHacks(
+ visual_overflow_inflation_for_ascent = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent = 1;
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
new file mode 100644
index 000000000000..21c331e6dcf9
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
+@@ -10,7 +10,7 @@
+ #if defined(OS_ANDROID)
+ #include "third_party/blink/public/platform/modules/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h"
+ #include "third_party/blink/renderer/platform/fonts/android/font_unique_name_lookup_android.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/linux/font_unique_name_lookup_linux.h"
+ #elif defined(OS_WIN)
+ #include "third_party/blink/public/mojom/dwrite_font_proxy/dwrite_font_proxy.mojom-blink.h"
+@@ -26,7 +26,7 @@ std::unique_ptr<FontUniqueNameLookup>
+ FontUniqueNameLookup::GetPlatformUniqueNameLookup() {
+ #if defined(OS_ANDROID)
+ return std::make_unique<FontUniqueNameLookupAndroid>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<FontUniqueNameLookupLinux>();
+ #elif defined(OS_WIN)
+ return std::make_unique<FontUniqueNameLookupWin>();
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
new file mode 100644
index 000000000000..43ba1b65967a
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
@@ -0,0 +1,38 @@
+--- third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc.orig 2019-04-08 08:18:48 UTC
++++ third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc
+@@ -60,7 +60,7 @@ AtomicString ToAtomicString(const SkString& str) {
+ return AtomicString::FromUTF8(str.c_str(), str.size());
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Android special locale for retrieving the color emoji font
+ // based on the proposed changes in UTR #51 for introducing
+ // an Emoji script code:
+@@ -104,7 +104,7 @@ AtomicString FontCache::GetFamilyNameForCharacter(
+ typeface->getFamilyName(&skia_family_name);
+ return ToAtomicString(skia_family_name);
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+
+ void FontCache::PlatformInit() {}
+
+@@ -249,7 +249,7 @@ sk_sp<SkTypeface> FontCache::CreateTypeface(
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // On linux if the fontManager has been overridden then we should be calling
+ // the embedder provided font Manager rather than calling
+ // SkTypeface::CreateFromName which may redirect the call to the default font
+@@ -276,7 +276,7 @@ std::unique_ptr<FontPlatformData> FontCache::CreateFon
+ CString name;
+
+ sk_sp<SkTypeface> typeface;
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ if (alternate_name == AlternateFontName::kLocalUniqueFace &&
+ RuntimeEnabledFeatures::FontSrcLocalMatchingEnabled()) {
+ typeface = CreateTypefaceFromUniqueName(creation_params, name);
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc
new file mode 100644
index 000000000000..d8e75613913d
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_heap_stack__frame__depth.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/heap/stack_frame_depth.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/heap/stack_frame_depth.cc
+@@ -15,6 +15,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace blink {
+
+ static const char* g_avoid_optimization = nullptr;
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn
new file mode 100644
index 000000000000..cdfd30da8b9b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_BUILD.gn
@@ -0,0 +1,16 @@
+--- third_party/blink/renderer/platform/wtf/BUILD.gn.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/BUILD.gn
+@@ -267,8 +267,12 @@ jumbo_component("wtf") {
+ if (is_android) {
+ libs = [ "log" ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ libs = [ "dl" ]
++ }
++
++ if (is_bsd) {
++ libs = [ "execinfo" ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc
new file mode 100644
index 000000000000..fc15d052b5e4
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_assertions.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/platform/wtf/assertions.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/assertions.cc
+@@ -48,7 +48,7 @@
+ #include <windows.h>
+ #endif
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(__UCLIBC__))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(__UCLIBC__))
+ #include <cxxabi.h>
+ #include <dlfcn.h>
+ #include <execinfo.h>
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
new file mode 100644
index 000000000000..a074c8a3bd98
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/platform/wtf/container_annotations.h.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/container_annotations.h
+@@ -10,7 +10,7 @@
+
+ // TODO(ochang): Remove the ARCH_CPU_X86_64 condition to enable this for X86
+ // once the crashes there have been fixed: http://crbug.com/461406
+-#if defined(ADDRESS_SANITIZER) && defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if defined(ADDRESS_SANITIZER) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #define ANNOTATE_CONTIGUOUS_CONTAINER
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize) \
+ if (buffer) { \
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
new file mode 100644
index 000000000000..1ea1169b786c
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/wtf/stack_util.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/stack_util.cc
+@@ -18,6 +18,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ size_t GetUnderestimatedStackSize() {
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading.cc
new file mode 100644
index 000000000000..ce944b84e3f4
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/wtf/threading.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/threading.cc
+@@ -17,12 +17,16 @@
+ #error Blink does not support threading on your platform.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #elif defined(OS_ANDROID)
+ #include <sys/types.h>
+ #endif
+
++#if defined(OS_BSD)
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ // Current thread identity
+@@ -38,6 +42,8 @@ ThreadIdentifier CurrentThreadSyscall() {
+ return syscall(__NR_gettid);
+ #elif defined(OS_ANDROID)
+ return gettid();
++#elif defined(OS_BSD)
++ return pthread_getthreadid_np();
+ #else
+ return reinterpret_cast<uintptr_t>(pthread_self());
+ #endif
diff --git a/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
new file mode 100644
index 000000000000..941137bdc6b3
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
@@ -0,0 +1,22 @@
+--- third_party/blink/renderer/platform/wtf/threading_pthreads.cc.orig 2019-04-08 08:33:06 UTC
++++ third_party/blink/renderer/platform/wtf/threading_pthreads.cc
+@@ -52,12 +52,17 @@
+ #include <objc/objc-auto.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <unistd.h>
++#endif
++
++#if defined(OS_BSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
+ #endif
+
+ namespace WTF {
diff --git a/devel/electron5/files/patch-third__party_boringssl_BUILD.gn b/devel/electron5/files/patch-third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..9f542ecdcd1e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_boringssl_BUILD.gn
@@ -0,0 +1,36 @@
+--- third_party/boringssl/BUILD.gn.orig 2019-04-09 12:48:19 UTC
++++ third_party/boringssl/BUILD.gn
+@@ -84,7 +84,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x64") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86_64
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86_64
+ } else {
+ public_configs = [ ":no_asm_config" ]
+@@ -92,13 +92,13 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x86") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_arm
+ } else if (is_ios) {
+ sources += crypto_sources_ios_arm
+@@ -106,7 +106,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_aarch64
+ } else if (is_ios) {
+ sources += crypto_sources_ios_aarch64
diff --git a/devel/electron5/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c b/devel/electron5/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
new file mode 100644
index 000000000000..301402403373
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
@@ -0,0 +1,63 @@
+--- third_party/boringssl/src/crypto/cpu-aarch64-linux.c.orig 2019-04-20 10:47:08 UTC
++++ third_party/boringssl/src/crypto/cpu-aarch64-linux.c
+@@ -14,49 +14,35 @@
+
+ #include <openssl/cpu.h>
+
+-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
+- !defined(OPENSSL_STATIC_ARMCAP)
++#if defined(OPENSSL_AARCH64)
+
+-#include <sys/auxv.h>
+-
+ #include <openssl/arm_arch.h>
+
+ #include "internal.h"
+
+-
+ extern uint32_t OPENSSL_armcap_P;
+
++#include <sys/types.h>
++#include <machine/armreg.h>
++
+ void OPENSSL_cpuid_setup(void) {
+- unsigned long hwcap = getauxval(AT_HWCAP);
++ uint64_t id_aa64isar0;
+
+- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
+- // these values.
+- static const unsigned long kNEON = 1 << 1;
+- static const unsigned long kAES = 1 << 3;
+- static const unsigned long kPMULL = 1 << 4;
+- static const unsigned long kSHA1 = 1 << 5;
+- static const unsigned long kSHA256 = 1 << 6;
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
+
+- if ((hwcap & kNEON) == 0) {
+- // Matching OpenSSL, if NEON is missing, don't report other features
+- // either.
+- return;
+- }
+-
+ OPENSSL_armcap_P |= ARMV7_NEON;
+
+- if (hwcap & kAES) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_BASE) {
+ OPENSSL_armcap_P |= ARMV8_AES;
+ }
+- if (hwcap & kPMULL) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) {
+ OPENSSL_armcap_P |= ARMV8_PMULL;
+ }
+- if (hwcap & kSHA1) {
++ if (ID_AA64ISAR0_SHA1(id_aa64isar0) == ID_AA64ISAR0_SHA1_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+ }
+- if (hwcap & kSHA256) {
++ if(ID_AA64ISAR0_SHA2(id_aa64isar0) == ID_AA64ISAR0_SHA2_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
+ }
+-
+-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
++#endif // OPENSSL_AARCH64
diff --git a/devel/electron5/files/patch-third__party_boringssl_src_crypto_ex__data.c b/devel/electron5/files/patch-third__party_boringssl_src_crypto_ex__data.c
new file mode 100644
index 000000000000..2311dfba1b64
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_boringssl_src_crypto_ex__data.c
@@ -0,0 +1,13 @@
+--- third_party/boringssl/src/crypto/ex_data.c.orig 2019-04-08 08:20:18 UTC
++++ third_party/boringssl/src/crypto/ex_data.c
+@@ -186,7 +186,9 @@ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int index,
+ }
+ }
+
+- sk_void_set(ad->sk, index, val);
++ // expression result unused; should this cast be to 'void'?
++ // seems it should, feel free to investigate those #def
++ (void) sk_void_set(ad->sk, index, val);
+ return 1;
+ }
+
diff --git a/devel/electron5/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h b/devel/electron5/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
new file mode 100644
index 000000000000..747642a65399
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
@@ -0,0 +1,11 @@
+--- third_party/breakpad/breakpad/src/common/simple_string_dictionary.h.orig 2019-04-08 08:19:57 UTC
++++ third_party/breakpad/breakpad/src/common/simple_string_dictionary.h
+@@ -33,7 +33,7 @@
+ #include <assert.h>
+ #include <string.h>
+
+-#include "common/basictypes.h"
++#include "third_party/breakpad/breakpad/src/common/basictypes.h"
+
+ namespace google_breakpad {
+
diff --git a/devel/electron5/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h b/devel/electron5/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
new file mode 100644
index 000000000000..6082c62aa021
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
@@ -0,0 +1,11 @@
+--- third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h.orig 2019-04-08 08:19:06 UTC
++++ third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
+@@ -334,6 +334,8 @@ class Status {
+ */
+ PERMANENT_FAILURE
+ };
++
++ Status() : code_(SUCCESS), message_() {}
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni b/devel/electron5/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
new file mode 100644
index 000000000000..1610687b2c8e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/build/crashpad_buildconfig.gni.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/build/crashpad_buildconfig.gni
+@@ -38,7 +38,7 @@ crashpad_is_standalone = crashpad_dependencies == "sta
+ if (crashpad_is_in_chromium) {
+ crashpad_is_mac = is_mac
+ crashpad_is_win = is_win
+- crashpad_is_linux = is_linux
++ crashpad_is_linux = is_linux && !is_bsd
+ crashpad_is_android = is_android
+ crashpad_is_fuchsia = is_fuchsia
+
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_client_BUILD.gn b/devel/electron5/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
new file mode 100644
index 000000000000..4fb6b49e546b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
@@ -0,0 +1,15 @@
+--- third_party/crashpad/crashpad/client/BUILD.gn.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/client/BUILD.gn
+@@ -71,6 +71,12 @@ static_library("client") {
+ sources += [ "crashpad_client_fuchsia.cc" ]
+ }
+
++ if (crashpad_is_posix) {
++ sources += [
++ "crashpad_client_posix.cc",
++ ]
++ }
++
+ if (crashpad_is_linux || crashpad_is_android || crashpad_is_fuchsia) {
+ sources += [ "crash_report_database_generic.cc" ]
+ }
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
new file mode 100644
index 000000000000..deae8fe68399
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
@@ -0,0 +1,41 @@
+--- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2019-04-09 12:48:49 UTC
++++ third_party/crashpad/crashpad/client/crashpad_client_posix.cc
+@@ -0,0 +1,38 @@
++// Copyright 2017 The Crashpad Authors. All rights reserved.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++#include "client/crashpad_client.h"
++
++#include "base/logging.h"
++
++namespace crashpad {
++
++CrashpadClient::CrashpadClient() {}
++
++CrashpadClient::~CrashpadClient() {}
++
++bool CrashpadClient::StartHandler(
++ const base::FilePath& handler,
++ const base::FilePath& database,
++ const base::FilePath& metrics_dir,
++ const std::string& url,
++ const std::map<std::string, std::string>& annotations,
++ const std::vector<std::string>& arguments,
++ bool restartable,
++ bool asynchronous_start) {
++ NOTREACHED(); // TODO(scottmg): https://crashpad.chromium.org/bug/196
++ return false;
++}
++
++} // namespace crashpad
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
new file mode 100644
index 000000000000..87dc1a47e85b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/address_types.h.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/util/misc/address_types.h
+@@ -25,7 +25,7 @@
+ #include <mach/mach_types.h>
+ #elif defined(OS_WIN)
+ #include "util/win/address_types.h"
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "util/linux/address_types.h"
+ #elif defined(OS_FUCHSIA)
+ #include <zircon/types.h>
+@@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t;
+ using VMAddress = WinVMAddress;
+ using VMSize = WinVMSize;
+
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ using VMAddress = LinuxVMAddress;
+ using VMSize = LinuxVMSize;
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
new file mode 100644
index 000000000000..92cc4b47decc
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/capture_context.h.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -21,7 +21,7 @@
+ #include <mach/mach.h>
+ #elif defined(OS_WIN)
+ #include <windows.h>
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <ucontext.h>
+ #elif defined(OS_FUCHSIA)
+ #include <signal.h>
+@@ -35,7 +35,7 @@ using NativeCPUContext = x86_thread_state;
+ #endif
+ #elif defined(OS_WIN)
+ using NativeCPUContext = CONTEXT;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ using NativeCPUContext = ucontext_t;
+ #endif // OS_MACOSX
+
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
new file mode 100644
index 000000000000..74cc0a55ae5e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/metrics.cc.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/util/misc/metrics.cc
+@@ -25,7 +25,7 @@
+ #define METRICS_OS_NAME "Win"
+ #elif defined(OS_ANDROID)
+ #define METRICS_OS_NAME "Android"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define METRICS_OS_NAME "Linux"
+ #elif defined(OS_FUCHSIA)
+ #define METRICS_OS_NAME "Fuchsia"
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
new file mode 100644
index 000000000000..832c99d5cf4e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/uuid.cc.orig 2019-04-08 08:19:06 UTC
++++ third_party/crashpad/crashpad/util/misc/uuid.cc
+@@ -95,7 +95,7 @@ bool UUID::InitializeWithNew() {
+ InitializeFromBytes(uuid);
+ return true;
+ #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Linux, Android, and Fuchsia do not provide a UUID generator in a
+ // widely-available system library. On Linux and Android, uuid_generate()
+ // from libuuid is not available everywhere.
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
new file mode 100644
index 000000000000..7eeddd3fef9c
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
@@ -0,0 +1,29 @@
+--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2019-04-08 08:19:07 UTC
++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -31,7 +31,7 @@
+ #include "util/file/directory_reader.h"
+ #include "util/misc/implicit_cast.h"
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ #include <sys/sysctl.h>
+ #endif
+
+@@ -72,7 +72,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) {
+ // This is an advantage over looping over all possible file descriptors, because
+ // no attempt needs to be made to close file descriptors that are not open.
+ bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ static constexpr char kFDDir[] = "/dev/fd";
+ #elif defined(OS_LINUX) || defined(OS_ANDROID)
+ static constexpr char kFDDir[] = "/proc/self/fd";
+@@ -146,7 +146,7 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd)
+ // while the system is running, but it’s still a better upper bound than the
+ // current RLIMIT_NOFILE value.
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // See 10.11.6 xnu-3248.60.10/bsd/kern/kern_resource.c maxfilesperproc,
+ // referenced by dosetrlimit().
+ int oid[] = {CTL_KERN, KERN_MAXFILESPERPROC};
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
new file mode 100644
index 000000000000..e448d8c90254
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/drop_privileges.cc.orig 2019-04-08 08:19:07 UTC
++++ third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+@@ -23,7 +23,7 @@ void DropPrivileges() {
+ gid_t gid = getgid();
+ uid_t uid = getuid();
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Based on the POSIX.1-2008 2013 edition documentation for setreuid() and
+ // setregid(), setreuid() and setregid() alone should be sufficient to drop
+ // privileges. The standard specifies that the saved ID should be set to the
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
new file mode 100644
index 000000000000..c24f14bbdd7e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
@@ -0,0 +1,40 @@
+--- third_party/crashpad/crashpad/util/posix/signals.cc.orig 2019-04-08 08:19:07 UTC
++++ third_party/crashpad/crashpad/util/posix/signals.cc
+@@ -45,10 +45,10 @@ constexpr int kCrashSignals[] = {
+ #if defined(SIGEMT)
+ SIGEMT,
+ #endif // defined(SIGEMT)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGXCPU,
+ SIGXFSZ,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // These are the non-core-generating but terminating signals.
+@@ -85,9 +85,9 @@ constexpr int kTerminateSignals[] = {
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_MACOSX)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGIO,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ bool InstallHandlers(const std::vector<int>& signals,
+@@ -216,8 +216,12 @@ bool Signals::WillSignalReraiseAutonomously(const sigi
+ // remains. See 10.12.3 xnu-3789.41.3/bsd/kern/kern_sig.c
+ // psignal_internal().
+ (code > 0 &&
++#if defined(SI_ASYNCIO)
+ code != SI_ASYNCIO &&
++#endif
++#if defined(SI_MESGQ)
+ code != SI_MESGQ &&
++#endif
+ code != SI_QUEUE &&
+ code != SI_TIMER &&
+ code != SI_USER &&
diff --git a/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
new file mode 100644
index 000000000000..f1602bf0fefb
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc.orig 2019-04-08 08:19:07 UTC
++++ third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc
+@@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = {
+ "INFO",
+ "USR1",
+ "USR2",
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #if defined(ARCH_CPU_MIPS_FAMILY)
+ "HUP",
+ "INT",
+@@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = {
+ #endif // defined(ARCH_CPU_MIPS_FAMILY)
+ #endif
+ };
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // NSIG is 64 to account for real-time signals.
+ static_assert(base::size(kSignalNames) == 32, "kSignalNames length");
+ #else
diff --git a/devel/electron5/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h b/devel/electron5/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
new file mode 100644
index 000000000000..55f002d1bd79
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
@@ -0,0 +1,53 @@
+--- third_party/crc32c/src/src/crc32c_arm64_linux_check.h.orig 2019-04-20 10:46:48 UTC
++++ third_party/crc32c/src/src/crc32c_arm64_linux_check.h
+@@ -7,8 +7,6 @@
+ #ifndef CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+ #define CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+
+-// X86-specific code checking for the availability of SSE4.2 instructions.
+-
+ #include <cstddef>
+ #include <cstdint>
+
+@@ -16,30 +14,19 @@
+
+ #if HAVE_ARM64_CRC32C
+
+-#if HAVE_STRONG_GETAUXVAL
+-#include <sys/auxv.h>
+-#elif HAVE_WEAK_GETAUXVAL
+-// getauxval() is not available on Android until API level 20. Link it as a weak
+-// symbol.
+-extern "C" unsigned long getauxval(unsigned long type) __attribute__((weak));
+-
+-#define AT_HWCAP 16
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-
++#include <machine/armreg.h>
++#include <sys/types.h>
+ namespace crc32c {
+
+-inline bool CanUseArm64Linux() {
+-#if HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+- // From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
+- constexpr unsigned long kHWCAP_PMULL = 1 << 4;
+- constexpr unsigned long kHWCAP_CRC32 = 1 << 7;
+- unsigned long hwcap = (&getauxval != nullptr) ? getauxval(AT_HWCAP) : 0;
+- return (hwcap & (kHWCAP_PMULL | kHWCAP_CRC32)) ==
+- (kHWCAP_PMULL | kHWCAP_CRC32);
+-#else
+- return false;
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-}
++ inline bool CanUseArm64Linux() {
++ uint64_t id_aa64isar0;
++
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if ((ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) && \
++ (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE))
++ return true;
++ return false;
++ }
+
+ } // namespace crc32c
+
diff --git a/devel/electron5/files/patch-third__party_electron__node_deps_uv_BUILD.gn b/devel/electron5/files/patch-third__party_electron__node_deps_uv_BUILD.gn
new file mode 100644
index 000000000000..d83be9372341
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_electron__node_deps_uv_BUILD.gn
@@ -0,0 +1,45 @@
+--- third_party/electron_node/deps/uv/BUILD.gn.orig 2019-03-05 17:17:42 UTC
++++ third_party/electron_node/deps/uv/BUILD.gn
+@@ -3,7 +3,7 @@ config("libuv_config") {
+
+ defines = []
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_POSIX_C_SOURCE=200112" ]
+ }
+ if (!is_win) {
+@@ -147,7 +147,7 @@ static_library("uv") {
+ libs += [ "m" ]
+ ldflags += [ "-pthread" ]
+ }
+- if (is_mac || is_linux) {
++ if (is_mac || (is_linux && !is_bsd)) {
+ sources += [ "src/unix/proctitle.c" ]
+ }
+ if (is_mac) {
+@@ -161,7 +161,7 @@ static_library("uv") {
+ "_DARWIN_UNLIMITED_SELECT=1",
+ ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_GNU_SOURCE" ]
+ sources += [
+ "src/unix/linux-core.c",
+@@ -181,6 +181,15 @@ static_library("uv") {
+ sources += [
+ "src/unix/bsd-ifaddrs.c",
+ "src/unix/kqueue.c",
++ ]
++ }
++ if (is_bsd) {
++ sources += [
++ "src/unix/bsd-ifaddrs.c",
++ "src/unix/bsd-proctitle.c",
++ "src/unix/freebsd.c",
++ "src/unix/kqueue.c",
++ "src/unix/posix-hrtime.c",
+ ]
+ }
+ }
diff --git a/devel/electron5/files/patch-third__party_ffmpeg_libavutil_mem.c b/devel/electron5/files/patch-third__party_ffmpeg_libavutil_mem.c
new file mode 100644
index 000000000000..7304d1869b3f
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_ffmpeg_libavutil_mem.c
@@ -0,0 +1,12 @@
+--- third_party/ffmpeg/libavutil/mem.c.orig 2019-04-08 08:34:04 UTC
++++ third_party/ffmpeg/libavutil/mem.c
+@@ -32,9 +32,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#if HAVE_MALLOC_H
+-#include <malloc.h>
+-#endif
+
+ #include "avassert.h"
+ #include "avutil.h"
diff --git a/devel/electron5/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h b/devel/electron5/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h
new file mode 100644
index 000000000000..3a14afec3e86
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_googletest_src_googletest_include_gtest_internal_gtest-port.h
@@ -0,0 +1,11 @@
+--- third_party/googletest/src/googletest/include/gtest/internal/gtest-port.h.orig 2019-04-08 08:34:16 UTC
++++ third_party/googletest/src/googletest/include/gtest/internal/gtest-port.h
+@@ -623,7 +623,7 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SE
+ (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_AIX || GTEST_OS_OS2)
+
+ // Determines whether test results can be streamed to a socket.
+-#if GTEST_OS_LINUX
++#if GTEST_OS_LINUX || GTEST_OS_FREEBSD
+ # define GTEST_CAN_STREAM_RESULTS_ 1
+ #endif
+
diff --git a/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc b/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
new file mode 100644
index 000000000000..975546cfb897
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
@@ -0,0 +1,43 @@
+--- third_party/googletest/src/googletest/src/gtest-port.cc.orig 2019-04-08 08:34:16 UTC
++++ third_party/googletest/src/googletest/src/gtest-port.cc
+@@ -55,6 +55,11 @@
+ # include <mach/vm_map.h>
+ #endif // GTEST_OS_MAC
+
++#if GTEST_OS_FREEBSD
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ #if GTEST_OS_QNX
+ # include <devctl.h>
+ # include <fcntl.h>
+@@ -129,6 +134,28 @@ size_t GetThreadCount() {
+ } else {
+ return 0;
+ }
++}
++
++#elif GTEST_OS_FREEBSD
++
++#define KP_NLWP(kp) (kp.ki_numthreads)
++
++// Return the number of threads running in the process, or 0 to indicate that
++// we cannot detect it.
++size_t GetThreadCount() {
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ struct kinfo_proc(info);
++ size_t size = sizeof(info);
++ if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
++ return 0;
++ }
++ return KP_NLWP(info);
+ }
+
+ #elif GTEST_OS_QNX
diff --git a/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest.cc b/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest.cc
new file mode 100644
index 000000000000..8965b5c8a4f6
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_googletest_src_googletest_src_gtest.cc
@@ -0,0 +1,10 @@
+--- third_party/googletest/src/googletest/src/gtest.cc.orig 2019-04-08 08:34:16 UTC
++++ third_party/googletest/src/googletest/src/gtest.cc
+@@ -114,6 +114,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ # include <sys/socket.h> // NOLINT
+ # include <sys/types.h> // NOLINT
diff --git a/devel/electron5/files/patch-third__party_googletest_src_googletest_test_googletest-port-test.cc b/devel/electron5/files/patch-third__party_googletest_src_googletest_test_googletest-port-test.cc
new file mode 100644
index 000000000000..9b63ca59ceac
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_googletest_src_googletest_test_googletest-port-test.cc
@@ -0,0 +1,11 @@
+--- third_party/googletest/src/googletest/test/googletest-port-test.cc.orig 2019-04-08 08:34:16 UTC
++++ third_party/googletest/src/googletest/test/googletest-port-test.cc
+@@ -286,7 +286,7 @@ TEST(FormatCompilerIndependentFileLocationTest, Format
+ EXPECT_EQ("unknown file", FormatCompilerIndependentFileLocation(nullptr, -1));
+ }
+
+-#if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_FUCHSIA
++#if GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_QNX || GTEST_OS_FUCHSIA || GTEST_OS_FREEBSD
+ void* ThreadFunc(void* data) {
+ internal::Mutex* mutex = static_cast<internal::Mutex*>(data);
+ mutex->Lock();
diff --git a/devel/electron5/files/patch-third__party_leveldatabase_env__chromium.cc b/devel/electron5/files/patch-third__party_leveldatabase_env__chromium.cc
new file mode 100644
index 000000000000..e6c2135d1aa1
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_leveldatabase_env__chromium.cc
@@ -0,0 +1,14 @@
+--- third_party/leveldatabase/env_chromium.cc.orig 2019-04-08 08:33:17 UTC
++++ third_party/leveldatabase/env_chromium.cc
+@@ -39,7 +39,11 @@
+ #include "third_party/leveldatabase/leveldb_chrome.h"
+ #include "third_party/leveldatabase/leveldb_features.h"
+ #include "third_party/leveldatabase/src/include/leveldb/options.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::FilePath;
+ using base::trace_event::MemoryAllocatorDump;
diff --git a/devel/electron5/files/patch-third__party_libXNVCtrl_NVCtrl.c b/devel/electron5/files/patch-third__party_libXNVCtrl_NVCtrl.c
new file mode 100644
index 000000000000..a8e1b30f7938
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libXNVCtrl_NVCtrl.c
@@ -0,0 +1,25 @@
+--- third_party/libXNVCtrl/NVCtrl.c.orig 2019-04-08 08:19:07 UTC
++++ third_party/libXNVCtrl/NVCtrl.c
+@@ -27,10 +27,6 @@
+ * libXNVCtrl library properly protects the Display connection.
+ */
+
+-#if !defined(XTHREADS)
+-#define XTHREADS
+-#endif /* XTHREADS */
+-
+ #define NEED_EVENTS
+ #define NEED_REPLIES
+ #include <stdint.h>
+@@ -39,6 +35,11 @@
+ #include <X11/Xutil.h>
+ #include <X11/extensions/Xext.h>
+ #include <X11/extensions/extutil.h>
++
++#if !defined(XTHREADS)
++#define XTHREADS
++#endif /* XTHREADS */
++
+ #include "NVCtrlLib.h"
+ #include "nv_control.h"
+
diff --git a/devel/electron5/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc b/devel/electron5/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc
new file mode 100644
index 000000000000..b0cec81984e5
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libjingle__xmpp_task__runner_taskrunner.cc
@@ -0,0 +1,11 @@
+--- third_party/libjingle_xmpp/task_runner/taskrunner.cc.orig 2019-04-08 08:33:17 UTC
++++ third_party/libjingle_xmpp/task_runner/taskrunner.cc
+@@ -80,7 +80,7 @@ void TaskRunner::InternalRunTasks(bool in_destructor)
+ std::vector<Task *>::iterator it;
+ it = std::remove(tasks_.begin(),
+ tasks_.end(),
+- reinterpret_cast<Task *>(NULL));
++ static_cast<Task *>(NULL));
+
+ tasks_.erase(it, tasks_.end());
+ tasks_running_ = false;
diff --git a/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
new file mode 100644
index 000000000000..a51c272ab418
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h.orig 2019-04-08 08:21:36 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h
+@@ -56,7 +56,7 @@ template <class T> boost::once_flag Singleton<T>::flag
+ #include "phonenumbers/base/logging.h"
+ #include "phonenumbers/base/thread_checker.h"
+
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
new file mode 100644
index 000000000000..8dd61badaf0b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h.orig 2019-04-08 08:21:36 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h
+@@ -37,7 +37,7 @@ typedef boost::mutex::scoped_lock AutoLock;
+ // Dummy lock implementation on non-POSIX platforms. If you are running on a
+ // different platform and care about thread-safety, please compile with
+ // -DI18N_PHONENUMBERS_USE_BOOST.
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
new file mode 100644
index 000000000000..aedc6260ca23
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
@@ -0,0 +1,19 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h.orig 2019-04-08 08:21:36 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h
+@@ -23,6 +23,7 @@
+ // user of the library know that it can't be used in a thread-safe manner when
+ // it is not depending on Boost.
+ #if !defined(__linux__) && !defined(__APPLE__) && \
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
+ !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
+ #error Building without Boost, please provide \
+ -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
+@@ -31,7 +32,7 @@
+ #endif
+
+ #if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
+- (defined(__linux__) || defined(__apple__))
++ (defined(__linux__) || defined(__apple__)) || defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ #include <pthread.h>
+
diff --git a/devel/electron5/files/patch-third__party_libyuv_include_libyuv_row.h b/devel/electron5/files/patch-third__party_libyuv_include_libyuv_row.h
new file mode 100644
index 000000000000..28476ef11186
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_libyuv_include_libyuv_row.h
@@ -0,0 +1,37 @@
+--- third_party/libyuv/include/libyuv/row.h.orig 2019-04-08 08:21:44 UTC
++++ third_party/libyuv/include/libyuv/row.h
+@@ -157,10 +157,14 @@ extern "C" {
+ #define HAS_ARGBSHADEROW_SSE2
+ #define HAS_ARGBSUBTRACTROW_SSE2
+ #define HAS_ARGBUNATTENUATEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_SSSE3
++#endif
+ #define HAS_COMPUTECUMULATIVESUMROW_SSE2
+ #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_SSSE3
++#endif
+ #define HAS_RGBCOLORTABLEROW_X86
+ #define HAS_SOBELROW_SSE2
+ #define HAS_SOBELTOPLANEROW_SSE2
+@@ -206,7 +210,9 @@ extern "C" {
+ #define HAS_I422TORGB565ROW_AVX2
+ #define HAS_I422TORGBAROW_AVX2
+ #define HAS_I444TOARGBROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_AVX2
++#endif
+ #define HAS_J422TOARGBROW_AVX2
+ #define HAS_MERGEUVROW_AVX2
+ #define HAS_MIRRORROW_AVX2
+@@ -231,7 +237,9 @@ extern "C" {
+ #define HAS_ARGBMULTIPLYROW_AVX2
+ #define HAS_ARGBSUBTRACTROW_AVX2
+ #define HAS_ARGBUNATTENUATEROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_AVX2
++#endif
+
+ #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
+ defined(_MSC_VER)
diff --git a/devel/electron5/files/patch-third__party_node_node.py b/devel/electron5/files/patch-third__party_node_node.py
new file mode 100644
index 000000000000..2774d7caba08
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_node_node.py
@@ -0,0 +1,10 @@
+--- third_party/node/node.py.orig 2019-04-08 08:19:08 UTC
++++ third_party/node/node.py
+@@ -12,6 +12,7 @@ import sys
+ def GetBinaryPath():
+ return os_path.join(os_path.dirname(__file__), *{
+ 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ 'FreeBSD': ('freebsd', 'node-freebsd-x64', 'bin', 'node'),
+ 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+ 'Windows': ('win', 'node.exe'),
+ }[platform.system()])
diff --git a/devel/electron5/files/patch-third__party_pdfium_core_fxcrt_fx__system.h b/devel/electron5/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
new file mode 100644
index 000000000000..b260cf1f371b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/fx_system.h.orig 2019-04-08 08:34:28 UTC
++++ third_party/pdfium/core/fxcrt/fx_system.h
+@@ -41,7 +41,7 @@
+ #elif defined(_WIN64)
+ #define _FX_OS_ _FX_OS_WIN64_
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define _FX_OS_ _FX_OS_LINUX_
+ #define _FX_PLATFORM_ _FX_PLATFORM_LINUX_
+ #elif defined(__APPLE__)
diff --git a/devel/electron5/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp b/devel/electron5/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
new file mode 100644
index 000000000000..28feaf5b8e6d
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/core/fxge/fx_ge_linux.cpp.orig 2019-04-08 08:34:28 UTC
++++ third_party/pdfium/core/fxge/fx_ge_linux.cpp
+@@ -146,9 +146,8 @@ std::unique_ptr<SystemFontInfoIface> SystemFontInfoIfa
+ const char** pUserPaths) {
+ auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
+ if (!pInfo->ParseFontCfg(pUserPaths)) {
+- pInfo->AddPath("/usr/share/fonts");
+- pInfo->AddPath("/usr/share/X11/fonts/Type1");
+- pInfo->AddPath("/usr/share/X11/fonts/TTF");
++ pInfo->AddPath("/usr/local/share/fonts/Type1");
++ pInfo->AddPath("/usr/local/share/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return std::move(pInfo);
diff --git a/devel/electron5/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp b/devel/electron5/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
new file mode 100644
index 000000000000..673106a701da
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
@@ -0,0 +1,106 @@
+--- third_party/pdfium/fxjs/cjs_publicmethods.cpp.orig 2019-04-08 08:34:28 UTC
++++ third_party/pdfium/fxjs/cjs_publicmethods.cpp
+@@ -85,6 +85,103 @@ constexpr const wchar_t* kDateFormats[] = {L"m/d",
+ constexpr const wchar_t* kTimeFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
++#if defined(__FreeBSD__)
++/*
++ * cvt.c - IEEE floating point formatting routines for FreeBSD
++ * from GNU libc-4.6.27
++ */
++
++/*
++ * ap_ecvt converts to decimal
++ * the number of digits is specified by ndigit
++ * decpt is set to the position of the decimal point
++ * sign is set to 0 for positive, 1 for negative
++ */
++
++#define NDIG 80
++
++static char *
++ ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
++{
++ register int r2;
++ double fi, fj;
++ register char *p, *p1;
++ static char buf[NDIG];
++
++ if (ndigits >= NDIG - 1)
++ ndigits = NDIG - 2;
++ r2 = 0;
++ *sign = 0;
++ p = &buf[0];
++ if (arg < 0) {
++ *sign = 1;
++ arg = -arg;
++ }
++ arg = modf(arg, &fi);
++ p1 = &buf[NDIG];
++ /*
++ * Do integer part
++ */
++ if (fi != 0) {
++ p1 = &buf[NDIG];
++ while (fi != 0) {
++ fj = modf(fi / 10, &fi);
++ *--p1 = (int) ((fj + .03) * 10) + '0';
++ r2++;
++ }
++ while (p1 < &buf[NDIG])
++ *p++ = *p1++;
++ }
++ else if (arg > 0) {
++ while ((fj = arg * 10) < 1) {
++ arg = fj;
++ r2--;
++ }
++ }
++ p1 = &buf[ndigits];
++ if (eflag == 0)
++ p1 += r2;
++ *decpt = r2;
++ if (p1 < &buf[0]) {
++ buf[0] = '\0';
++ return (buf);
++ }
++ while (p <= p1 && p < &buf[NDIG]) {
++ arg *= 10;
++ arg = modf(arg, &fj);
++ *p++ = (int) fj + '0';
++ }
++ if (p1 >= &buf[NDIG]) {
++ buf[NDIG - 1] = '\0';
++ return (buf);
++ }
++ p = p1;
++ *p1 += 5;
++ while (*p1 > '9') {
++ *p1 = '0';
++ if (p1 > buf)
++ ++ * --p1;
++ else {
++ *p1 = '1';
++ (*decpt)++;
++ if (eflag == 0) {
++ if (p > buf)
++ *p = '0';
++ p++;
++ }
++ }
++ }
++ *p = '\0';
++ return (buf);
++}
++
++static char *
++ fcvt(double arg, int ndigits, int *decpt, int *sign)
++{
++ return (ap_cvt(arg, ndigits, decpt, sign, 0));
++}
++#endif // defined(__FreeBSD__)
++
+ template <typename T>
+ T StrTrim(const T& str) {
+ T result = str;
diff --git a/devel/electron5/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp b/devel/electron5/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
new file mode 100644
index 000000000000..b4c0a7c66579
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
@@ -0,0 +1,22 @@
+--- third_party/pdfium/fxjs/fx_date_helpers.cpp.orig 2019-04-08 08:34:28 UTC
++++ third_party/pdfium/fxjs/fx_date_helpers.cpp
+@@ -34,6 +34,11 @@ double GetLocalTZA() {
+ return 0;
+ time_t t = 0;
+ FXSYS_time(&t);
++#ifdef __FreeBSD__
++ struct tm lt;
++ localtime_r(&t, &lt);
++ return (double)(-(lt.tm_gmtoff * 1000));
++#else
+ FXSYS_localtime(&t);
+ #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
+ // In gcc 'timezone' is a global variable declared in time.h. In VC++, that
+@@ -42,6 +47,7 @@ double GetLocalTZA() {
+ _get_timezone(&timezone);
+ #endif // _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_
+ return (double)(-(timezone * 1000));
++#endif // __FreeBSD__
+ }
+
+ int GetDaylightSavingTA(double d) {
diff --git a/devel/electron5/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp b/devel/electron5/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
new file mode 100644
index 000000000000..53c6f880525a
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp.orig 2019-04-08 08:34:28 UTC
++++ third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp
+@@ -14,8 +14,9 @@ constexpr char kFolderSeparator = '/';
+
+ constexpr const char* g_FontFolders[] = {
+ #if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
+- "/usr/share/fonts", "/usr/share/X11/fonts/Type1",
+- "/usr/share/X11/fonts/TTF", "/usr/local/share/fonts",
++ "/usr/local/share/fonts/Type1",
++ "/usr/local/share/fonts/TTF",
++ "/usr/local/share/fonts",
+ #elif _FX_PLATFORM_ == _FX_PLATFORM_APPLE_
+ "~/Library/Fonts", "/Library/Fonts", "/System/Library/Fonts",
+ #elif _FX_PLATFORM_ == _FX_PLATFORM_ANDROID_
diff --git a/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_build__config.h b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
new file mode 100644
index 000000000000..6fd1c8c35c5e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
@@ -0,0 +1,51 @@
+--- third_party/perfetto/include/perfetto/base/build_config.h.orig 2019-04-08 08:34:47 UTC
++++ third_party/perfetto/include/perfetto/base/build_config.h
+@@ -28,6 +28,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -35,13 +36,15 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -49,6 +52,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -56,6 +60,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -63,6 +68,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 1
diff --git a/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_event.h b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_event.h
new file mode 100644
index 000000000000..7257341b171e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_event.h
@@ -0,0 +1,14 @@
+--- third_party/perfetto/include/perfetto/base/event.h.orig 2019-04-08 08:22:17 UTC
++++ third_party/perfetto/include/perfetto/base/event.h
+@@ -20,8 +20,9 @@
+ #include "perfetto/base/build_config.h"
+ #include "perfetto/base/scoped_file.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ #define PERFETTO_USE_EVENTFD() 1
+ #else
+ #define PERFETTO_USE_EVENTFD() 0
diff --git a/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_time.h b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_time.h
new file mode 100644
index 000000000000..32654ee09276
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_time.h
@@ -0,0 +1,20 @@
+--- third_party/perfetto/include/perfetto/base/time.h.orig 2019-04-08 08:22:17 UTC
++++ third_party/perfetto/include/perfetto/base/time.h
+@@ -123,6 +123,9 @@ inline TimeNanos GetTimeInternalNs(clockid_t clk_id) {
+ // Return ns from boot. Conversely to GetWallTimeNs, this clock counts also time
+ // during suspend (when supported).
+ inline TimeNanos GetBootTimeNs() {
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ return GetTimeInternalNs(kWallTimeClockSource);
++#else
+ // Determine if CLOCK_BOOTTIME is available on the first call.
+ static const clockid_t kBootTimeClockSource = [] {
+ struct timespec ts = {};
+@@ -130,6 +133,7 @@ inline TimeNanos GetBootTimeNs() {
+ return res == 0 ? CLOCK_BOOTTIME : kWallTimeClockSource;
+ }();
+ return GetTimeInternalNs(kBootTimeClockSource);
++#endif
+ }
+
+ inline TimeNanos GetWallTimeNs() {
diff --git a/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
new file mode 100644
index 000000000000..11a9e6542618
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
@@ -0,0 +1,11 @@
+--- third_party/perfetto/include/perfetto/base/watchdog_posix.h.orig 2019-04-08 08:22:17 UTC
++++ third_party/perfetto/include/perfetto/base/watchdog_posix.h
+@@ -46,7 +46,7 @@ class Watchdog {
+ Timer(const Timer&) = delete;
+ Timer& operator=(const Timer&) = delete;
+
+- timer_t timerid_ = nullptr;
++ timer_t timerid_ = 0;
+ };
+ virtual ~Watchdog();
+
diff --git a/devel/electron5/files/patch-third__party_perfetto_src_base_unix__socket.cc b/devel/electron5/files/patch-third__party_perfetto_src_base_unix__socket.cc
new file mode 100644
index 000000000000..9a4029449558
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_src_base_unix__socket.cc
@@ -0,0 +1,12 @@
+--- third_party/perfetto/src/base/unix_socket.cc.orig 2019-04-08 08:34:47 UTC
++++ third_party/perfetto/src/base/unix_socket.cc
+@@ -502,7 +502,8 @@ void UnixSocket::DoConnect(const std::string& socket_n
+
+ void UnixSocket::ReadPeerCredentials() {
+ #if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct ucred user_cred;
+ socklen_t len = sizeof(user_cred);
+ int fd = sock_raw_.fd();
diff --git a/devel/electron5/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc b/devel/electron5/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
new file mode 100644
index 000000000000..c56d0895324a
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
@@ -0,0 +1,22 @@
+--- third_party/perfetto/src/tracing/core/tracing_service_impl.cc.orig 2019-04-08 08:34:47 UTC
++++ third_party/perfetto/src/tracing/core/tracing_service_impl.cc
+@@ -1494,7 +1494,8 @@ TraceBuffer* TracingServiceImpl::GetBufferByID(BufferI
+
+ void TracingServiceImpl::UpdateMemoryGuardrail() {
+ #if !PERFETTO_BUILDFLAG(PERFETTO_EMBEDDER_BUILD) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ uint64_t total_buffer_bytes = 0;
+
+ // Sum up all the shared memory buffers.
+@@ -1545,7 +1546,8 @@ void TracingServiceImpl::SnapshotClocks(std::vector<Tr
+ protos::ClockSnapshot* clock_snapshot = packet.mutable_clock_snapshot();
+
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct {
+ clockid_t id;
+ protos::ClockSnapshot::Clock::Type type;
diff --git a/devel/electron5/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h b/devel/electron5/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
new file mode 100644
index 000000000000..8a3ebc80977d
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
@@ -0,0 +1,11 @@
+--- third_party/protobuf/src/google/protobuf/stubs/platform_macros.h.orig 2019-04-08 08:19:09 UTC
++++ third_party/protobuf/src/google/protobuf/stubs/platform_macros.h
+@@ -117,7 +117,7 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+ #undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+-#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__)
++#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__FreeBSD__)
+ // Android ndk does not support the __thread keyword very well yet. Here
+ // we use pthread_key_create()/pthread_getspecific()/... methods for
+ // TLS support on android.
diff --git a/devel/electron5/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc b/devel/electron5/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
new file mode 100644
index 000000000000..eae95fe49404
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
@@ -0,0 +1,47 @@
+--- third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc.orig 2019-04-08 08:22:32 UTC
++++ third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc
+@@ -439,7 +439,7 @@ CMapTable::CMapFormat0::Builder::Builder(
+ }
+
+ CMapTable::CMapFormat0::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat0,
+ cmap_id) {
+ }
+@@ -563,7 +563,7 @@ CMapTable::CMapFormat2::Builder::Builder(WritableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<WritableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<WritableFontData*>(NULL),
++ : static_cast<WritableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -574,7 +574,7 @@ CMapTable::CMapFormat2::Builder::Builder(ReadableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<ReadableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<ReadableFontData*>(NULL),
++ : static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -958,7 +958,7 @@ CMapTable::CMapFormat4::Builder::Builder(WritableFontD
+ CMapTable::CMapFormat4::Builder::Builder(SegmentList* segments,
+ std::vector<int32_t>* glyph_id_array,
+ const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id),
+ segments_(segments->begin(), segments->end()),
+ glyph_id_array_(glyph_id_array->begin(), glyph_id_array->end()) {
+@@ -966,7 +966,7 @@ CMapTable::CMapFormat4::Builder::Builder(SegmentList*
+ }
+
+ CMapTable::CMapFormat4::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id) {
+ }
+
diff --git a/devel/electron5/files/patch-third__party_skia_src_core_SkCpu.cpp b/devel/electron5/files/patch-third__party_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..a66fb7466947
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_core_SkCpu.cpp
@@ -0,0 +1,19 @@
+--- third_party/skia/src/core/SkCpu.cpp.orig 2019-04-08 08:24:20 UTC
++++ third_party/skia/src/core/SkCpu.cpp
+@@ -74,6 +74,8 @@
+ #include <sys/auxv.h>
+
+ static uint32_t read_cpu_features() {
++return 0;
++#if 0
+ const uint32_t kHWCAP_CRC32 = (1<< 7),
+ kHWCAP_ASIMDHP = (1<<10);
+
+@@ -82,6 +84,7 @@
+ if (hwcaps & kHWCAP_CRC32 ) { features |= SkCpu::CRC32; }
+ if (hwcaps & kHWCAP_ASIMDHP) { features |= SkCpu::ASIMDHP; }
+ return features;
++#endif
+ }
+
+ #elif defined(SK_CPU_ARM32) && __has_include(<sys/auxv.h>) && \
diff --git a/devel/electron5/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h b/devel/electron5/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
new file mode 100644
index 000000000000..0934db382469
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/gpu/GrAutoLocaleSetter.h.orig 2019-04-08 08:24:20 UTC
++++ third_party/skia/src/gpu/GrAutoLocaleSetter.h
+@@ -27,7 +27,7 @@
+ #define HAVE_XLOCALE 0
+ #endif
+
+-#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION)
++#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION) || defined(__FreeBSD__)
+ #define HAVE_LOCALE_T 0
+ #else
+ #define HAVE_LOCALE_T 1
diff --git a/devel/electron5/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp b/devel/electron5/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
new file mode 100644
index 000000000000..0f9ed1001591
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
@@ -0,0 +1,41 @@
+--- third_party/skia/src/images/SkJpegEncoder.cpp.orig 2019-04-08 08:24:20 UTC
++++ third_party/skia/src/images/SkJpegEncoder.cpp
+@@ -75,9 +75,14 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ return (transform_scanline_proc) nullptr;
+ };
+
++#ifdef JCS_EXTENSIONS
+ J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
++#else
++ J_COLOR_SPACE jpegColorType = JCS_RGB;
++#endif
+ int numComponents = 0;
+ switch (srcInfo.colorType()) {
++#ifdef JCS_EXTENSIONS
+ case kRGBA_8888_SkColorType:
+ fProc = chooseProc8888();
+ jpegColorType = JCS_EXT_RGBA;
+@@ -88,6 +93,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_BGRA;
+ numComponents = 4;
+ break;
++#endif
+ case kRGB_565_SkColorType:
+ fProc = transform_scanline_565;
+ jpegColorType = JCS_RGB;
+@@ -107,6 +113,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_GRAYSCALE;
+ numComponents = 1;
+ break;
++#ifdef JCS_EXTENSIONS
+ case kRGBA_F16_SkColorType:
+ if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
+ options.fAlphaOption == SkJpegEncoder::AlphaOption::kBlendOnBlack) {
+@@ -117,6 +124,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_RGBA;
+ numComponents = 4;
+ break;
++#endif
+ default:
+ return false;
+ }
diff --git a/devel/electron5/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h b/devel/electron5/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
new file mode 100644
index 000000000000..73e5f6bb9315
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
@@ -0,0 +1,20 @@
+--- third_party/skia/src/opts/SkRasterPipeline_opts.h.orig 2019-04-08 08:34:33 UTC
++++ third_party/skia/src/opts/SkRasterPipeline_opts.h
+@@ -729,7 +729,7 @@ SI F approx_powf(F x, F y) {
+ }
+
+ SI F from_half(U16 h) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f32_f16(h);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
+@@ -749,7 +749,7 @@ SI F from_half(U16 h) {
+ }
+
+ SI U16 to_half(F f) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f16_f32(f);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/devel/electron5/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp b/devel/electron5/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp
new file mode 100644
index 000000000000..f941b52961c5
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_ports_SkFontHost__FreeType.cpp
@@ -0,0 +1,77 @@
+--- third_party/skia/src/ports/SkFontHost_FreeType.cpp.orig 2019-04-08 08:34:33 UTC
++++ third_party/skia/src/ports/SkFontHost_FreeType.cpp
+@@ -122,8 +122,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ : fGetVarDesignCoordinates(nullptr)
+ , fGetVarAxisFlags(nullptr)
+ , fLibrary(nullptr)
+- , fIsLCDSupported(false)
+- , fLCDExtra(0)
+ {
+ if (FT_New_Library(&gFTMemory, &fLibrary)) {
+ return;
+@@ -183,12 +181,7 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ }
+ #endif
+
+- // Setup LCD filtering. This reduces color fringes for LCD smoothed glyphs.
+- // The default has changed over time, so this doesn't mean the same thing to all users.
+- if (FT_Library_SetLcdFilter(fLibrary, FT_LCD_FILTER_DEFAULT) == 0) {
+- fIsLCDSupported = true;
+- fLCDExtra = 2; //Using a filter adds one full pixel to each side.
+- }
++ FT_Library_SetLcdFilter(fLibrary, FT_LCD_FILTER_DEFAULT);
+ }
+ ~FreeTypeLibrary() {
+ if (fLibrary) {
+@@ -197,8 +190,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+ }
+
+ FT_Library library() { return fLibrary; }
+- bool isLCDSupported() { return fIsLCDSupported; }
+- int lcdExtra() { return fLCDExtra; }
+
+ // FT_Get_{MM,Var}_{Blend,Design}_Coordinates were added in FreeType 2.7.1.
+ // Prior to this there was no way to get the coordinates out of the FT_Face.
+@@ -215,8 +206,6 @@ class FreeTypeLibrary : SkNoncopyable { (public)
+
+ private:
+ FT_Library fLibrary;
+- bool fIsLCDSupported;
+- int fLCDExtra;
+
+ // FT_Library_SetLcdFilterWeights was introduced in FreeType 2.4.0.
+ // The following platforms provide FreeType of at least 2.4.0.
+@@ -713,17 +702,6 @@ void SkTypeface_FreeType::onFilterRec(SkScalerContextR
+ rec->fTextSize = SkIntToScalar(1 << 14);
+ }
+
+- if (isLCD(*rec)) {
+- // TODO: re-work so that FreeType is set-up and selected by the SkFontMgr.
+- SkAutoMutexAcquire ama(gFTMutex);
+- ref_ft_library();
+- if (!gFTLibrary->isLCDSupported()) {
+- // If the runtime Freetype library doesn't support LCD, disable it here.
+- rec->fMaskFormat = SkMask::kA8_Format;
+- }
+- unref_ft_library();
+- }
+-
+ SkFontHinting h = rec->getHinting();
+ if (kFull_SkFontHinting == h && !isLCD(*rec)) {
+ // collapse full->normal hinting if we're not doing LCD
+@@ -1121,11 +1099,11 @@ bool SkScalerContext_FreeType::getCBoxForLetter(char l
+ void SkScalerContext_FreeType::updateGlyphIfLCD(SkGlyph* glyph) {
+ if (glyph->fMaskFormat == SkMask::kLCD16_Format) {
+ if (fLCDIsVert) {
+- glyph->fHeight += gFTLibrary->lcdExtra();
+- glyph->fTop -= gFTLibrary->lcdExtra() >> 1;
++ glyph->fHeight += 2;
++ glyph->fTop -= 1;
+ } else {
+- glyph->fWidth += gFTLibrary->lcdExtra();
+- glyph->fLeft -= gFTLibrary->lcdExtra() >> 1;
++ glyph->fWidth += 2;
++ glyph->fLeft -= 1;
+ }
+ }
+ }
diff --git a/devel/electron5/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp b/devel/electron5/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
new file mode 100644
index 000000000000..3b6ecd162363
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
@@ -0,0 +1,11 @@
+--- third_party/skia/src/ports/SkOSFile_stdio.cpp.orig 2019-04-08 08:24:21 UTC
++++ third_party/skia/src/ports/SkOSFile_stdio.cpp
+@@ -129,7 +129,7 @@ void sk_fflush(FILE* f) {
+
+ void sk_fsync(FILE* f) {
+ #if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \
+- && !defined(_NEWLIB_VERSION)
++ && !defined(_NEWLIB_VERSION) && !defined(__FreeBSD__)
+ int fd = fileno(f);
+ fsync(fd);
+ #endif
diff --git a/devel/electron5/files/patch-third__party_skia_src_sksl_SkSLString.h b/devel/electron5/files/patch-third__party_skia_src_sksl_SkSLString.h
new file mode 100644
index 000000000000..9d4eef0772db
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_src_sksl_SkSLString.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/sksl/SkSLString.h.orig 2019-04-08 08:24:21 UTC
++++ third_party/skia/src/sksl/SkSLString.h
+@@ -22,6 +22,8 @@
+ #include "SkString.h"
+ #endif
+
++#include <stdarg.h>
++
+ namespace SkSL {
+
+ // Represents a (not necessarily null-terminated) slice of a string.
diff --git a/devel/electron5/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h b/devel/electron5/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
new file mode 100644
index 000000000000..b0764d404b47
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
@@ -0,0 +1,11 @@
+--- third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h.orig 2019-04-09 12:48:19 UTC
++++ third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+@@ -2232,7 +2232,7 @@ remove them if not needed.
+ #include <mutex> // for std::mutex
+ #include <atomic> // for std::atomic
+
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h> // for aligned_alloc()
+ #endif
+
diff --git a/devel/electron5/files/patch-third__party_snappy_src_snappy.h b/devel/electron5/files/patch-third__party_snappy_src_snappy.h
new file mode 100644
index 000000000000..0720557b3dad
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_snappy_src_snappy.h
@@ -0,0 +1,20 @@
+--- third_party/snappy/src/snappy.h.orig 2019-05-05 07:27:10 UTC
++++ third_party/snappy/src/snappy.h
+@@ -73,7 +73,7 @@ namespace snappy {
+ // Original contents of *output are lost.
+ //
+ // REQUIRES: "input[]" is not an alias of "*output".
+- size_t Compress(const char* input, size_t input_length, string* output);
++ size_t Compress(const char* input, size_t input_length, std::string* output);
+
+ // Decompresses "compressed[0,compressed_length-1]" to "*uncompressed".
+ // Original contents of "*uncompressed" are lost.
+@@ -82,7 +82,7 @@ namespace snappy {
+ //
+ // returns false if the message is corrupted and could not be decompressed
+ bool Uncompress(const char* compressed, size_t compressed_length,
+- string* uncompressed);
++ std::string* uncompressed);
+
+ // Decompresses "compressed" to "*uncompressed".
+ //
diff --git a/devel/electron5/files/patch-third__party_sqlite_BUILD.gn b/devel/electron5/files/patch-third__party_sqlite_BUILD.gn
new file mode 100644
index 000000000000..edf714137bd6
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_sqlite_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/sqlite/BUILD.gn.orig 2019-04-08 08:33:18 UTC
++++ third_party/sqlite/BUILD.gn
+@@ -251,7 +251,7 @@ config("sqlite_warnings") {
+ ]
+ }
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ cflags += [
+ # SQLite doesn't believe in compiler warnings, preferring testing.
+ # http://www.sqlite.org/faq.html#q17
diff --git a/devel/electron5/files/patch-third__party_swiftshader_BUILD.gn b/devel/electron5/files/patch-third__party_swiftshader_BUILD.gn
new file mode 100644
index 000000000000..83c8ea6ed84b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_BUILD.gn
@@ -0,0 +1,24 @@
+--- third_party/swiftshader/BUILD.gn.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/BUILD.gn
+@@ -126,9 +126,6 @@ config("swiftshader_config") {
+ ldflags = [ "-Wl,--gc-sections" ]
+
+ if (target_cpu == "mipsel") {
+- ldflags += [
+- "-Wl,--hash-style=sysv",
+- ]
+ if (mips_arch_variant == "r1") {
+ ldflags += [
+ "-mips32",
+@@ -140,11 +137,8 @@ config("swiftshader_config") {
+ }
+ } else if (target_cpu == "mips64el") {
+ ldflags += [
+- "-Wl,--hash-style=sysv",
+ "-mips64r2",
+ ]
+- } else {
+- ldflags += [ "-Wl,--hash-style=both" ]
+ }
+
+ # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_Common_Configurator.cpp b/devel/electron5/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
new file mode 100644
index 000000000000..dd0ef4d02a8a
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
@@ -0,0 +1,12 @@
+--- third_party/swiftshader/src/Common/Configurator.cpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/Common/Configurator.cpp
+@@ -42,6 +42,9 @@ namespace sw
+
+ bool Configurator::readFile()
+ {
++#if defined(__FreeBSD__)
++ return false;
++#endif
+ #if defined(__unix__)
+ if(access(path.c_str(), R_OK) != 0)
+ {
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp b/devel/electron5/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
new file mode 100644
index 000000000000..2b16263ea211
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/MutexLock.hpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/Common/MutexLock.hpp
+@@ -17,7 +17,7 @@
+
+ #include "Thread.hpp"
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ // Use a pthread mutex on Linux. Since many processes may use SwiftShader
+ // at the same time it's best to just have the scheduler overhead.
+ #include <pthread.h>
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp b/devel/electron5/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
new file mode 100644
index 000000000000..7439cd3efffd
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/SharedLibrary.hpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/Common/SharedLibrary.hpp
+@@ -97,7 +97,7 @@ void *loadLibrary(const std::string &libraryDirectory,
+
+ inline void *getLibraryHandle(const char *path)
+ {
+- #ifdef __ANDROID__
++ #if defined( __ANDROID__) || defined(__FreeBSD__)
+ // bionic doesn't support RTLD_NOLOAD before L
+ return dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp b/devel/electron5/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
new file mode 100644
index 000000000000..dfa0a43ac45e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
@@ -0,0 +1,14 @@
+--- third_party/swiftshader/src/Main/SwiftConfig.cpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/Main/SwiftConfig.cpp
+@@ -762,7 +762,11 @@ namespace sw
+ struct stat status;
+ int lastModified = ini.getInteger("LastModified", "Time", 0);
+
++#if !defined(__FreeBSD__)
+ bool noConfig = stat("SwiftShader.ini", &status) != 0;
++#else
++ bool noConfig = false;
++#endif
+ newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;
+
+ if(disableServerOverride)
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
new file mode 100644
index 000000000000..6fba1579182e
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Display.cpp.orig 2019-04-08 08:34:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Display.cpp
+@@ -686,7 +686,7 @@ bool Display::isValidWindow(EGLNativeWindowType window
+ return status != 0;
+ }
+ return false;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ return false; // Non X11 linux is headless only
+ #elif defined(__APPLE__)
+ return sw::OSX::IsValidWindow(window);
+@@ -862,7 +862,7 @@ sw::Format Display::getDisplayFormat() const
+ {
+ return sw::FORMAT_X8R8G8B8;
+ }
+- #elif defined(__linux__) // Non X11 linux is headless only
++ #elif defined(__linux__) || defined(__FreeBSD__) // Non X11 linux is headless only
+ return sw::FORMAT_A8B8G8R8;
+ #elif defined(__APPLE__)
+ return sw::FORMAT_A8B8G8R8;
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
new file mode 100644
index 000000000000..e11e8a0c9078
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp.orig 2019-04-08 08:34:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp
+@@ -352,7 +352,7 @@ bool WindowSurface::checkForResize()
+
+ int windowWidth = windowAttributes.width;
+ int windowHeight = windowAttributes.height;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ // Non X11 linux is headless only
+ int windowWidth = 100;
+ int windowHeight = 100;
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
new file mode 100644
index 000000000000..8e06c35f05f2
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp.orig 2019-04-08 08:34:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp
+@@ -148,7 +148,7 @@ EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
+ // FIXME: Check if display_id is the default display
+ }
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD)) && !defined(__ANDROID__)
+ #if defined(USE_X11)
+ if(!libX11)
+ #endif // Non X11 linux is headless only
+@@ -207,7 +207,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name)
+ {
+ return success(
+ "EGL_KHR_client_get_all_proc_addresses "
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ "EGL_KHR_platform_gbm "
+ #endif
+ #if defined(USE_X11)
+@@ -1248,7 +1248,7 @@ EGLDisplay GetPlatformDisplay(EGLenum platform, void *
+ {
+ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ switch(platform)
+ {
+ #if defined(USE_X11)
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
new file mode 100644
index 000000000000..8f29f2b58604
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp
+@@ -100,7 +100,7 @@ class LibEGL (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
+ #else
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
new file mode 100644
index 000000000000..ceaf4f1c8f65
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+@@ -261,7 +261,7 @@ class LibGLES_CM (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
+ #else
diff --git a/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
new file mode 100644
index 000000000000..14832c8a7c80
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp.orig 2019-04-08 08:23:02 UTC
++++ third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp
+@@ -286,7 +286,7 @@ class LibGLESv2 (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+ #else
diff --git a/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..aee312637a97
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
@@ -0,0 +1,152 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h.orig 2019-04-20 12:09:44 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h
+@@ -8,15 +8,15 @@
+ #define BUG_REPORT_URL "https://bugs.llvm.org/"
+
+ /* Define to 1 to enable backtraces, and to 0 otherwise. */
+-/* #undef ENABLE_BACKTRACES */
++#define ENABLE_BACKTRACES 1
+
+ /* Define to 1 to enable crash overrides, and to 0 otherwise. */
+-/* #undef ENABLE_CRASH_OVERRIDES */
++#define ENABLE_CRASH_OVERRIDES 1
+
+ /* Define to 1 if you have the `backtrace' function. */
+-/* #undef HAVE_BACKTRACE */
++#define HAVE_BACKTRACE TRUE
+
+-/* #undef BACKTRACE_HEADER */
++#define BACKTRACE_HEADER <execinfo.h>
+
+ /* Define to 1 if you have the <CrashReporterClient.h> header file. */
+ /* #undef HAVE_CRASHREPORTERCLIENT_H */
+@@ -26,7 +26,7 @@
+
+ /* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+ don't. */
+-#define HAVE_DECL_ARC4RANDOM 0
++#define HAVE_DECL_ARC4RANDOM 1
+
+ /* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
+ don't. */
+@@ -50,7 +50,7 @@
+ #define HAVE_DLOPEN 1
+
+ /* Define if dladdr() is available on this platform. */
+-/* #undef HAVE_DLADDR */
++#define HAVE_DLADDR 1
+
+ /* Define to 1 if you have the <errno.h> header file. */
+ #define HAVE_ERRNO_H 1
+@@ -89,7 +89,7 @@
+ #define HAVE_ISATTY 1
+
+ /* Define to 1 if you have the `edit' library (-ledit). */
+-/* #undef HAVE_LIBEDIT */
++#define HAVE_LIBEDIT 1
+
+ /* Define to 1 if you have the `pfm' library (-lpfm). */
+ /* #undef HAVE_LIBPFM */
+@@ -107,25 +107,25 @@
+ /* #undef HAVE_PTHREAD_SETNAME_NP */
+
+ /* Define to 1 if you have the `z' library (-lz). */
+-/* #undef HAVE_LIBZ */
++#define HAVE_LIBZ 1
+
+ /* Define to 1 if you have the <link.h> header file. */
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+
+ /* Define to 1 if you have the `mallctl' function. */
+-/* #undef HAVE_MALLCTL */
++#define HAVE_MALLCTL 1
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+-#define HAVE_MALLOC_H 1
++/* #undef HAVE_MALLOC_H */
+
+ /* Define to 1 if you have the <malloc/malloc.h> header file. */
+ /* #undef HAVE_MALLOC_MALLOC_H */
+@@ -137,7 +137,7 @@
+ #define HAVE_POSIX_FALLOCATE 1
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+-/* #undef HAVE_POSIX_SPAWN */
++#define HAVE_POSIX_SPAWN 1
+
+ /* Define to 1 if you have the `pread' function. */
+ #define HAVE_PREAD 1
+@@ -158,16 +158,16 @@
+ #define HAVE_REALPATH 1
+
+ /* Define to 1 if you have the `sbrk' function. */
+-#define HAVE_SBRK 1
++/* #undef HAVE_SBRK */
+
+ /* Define to 1 if you have the `setenv' function. */
+ #define HAVE_SETENV 1
+
+ /* Define to 1 if you have the `sched_getaffinity' function. */
+-#define HAVE_SCHED_GETAFFINITY 1
++/* #undef HAVE_SCHED_GETAFFINITY */
+
+ /* Define to 1 if you have the `CPU_COUNT' macro. */
+-#define HAVE_CPU_COUNT 1
++/* #undef HAVE_CPU_COUNT */
+
+ /* Define to 1 if you have the `setrlimit' function. */
+ #define HAVE_SETRLIMIT 1
+@@ -209,13 +209,13 @@
+ #define HAVE_SYS_TYPES_H 1
+
+ /* Define if the setupterm() function is supported this platform. */
+-/* #undef HAVE_TERMINFO */
++#define HAVE_TERMINFO 1
+
+ /* Define if the xar_open() function is supported this platform. */
+ /* #undef HAVE_LIBXAR */
+
+ /* Define to 1 if you have the <termios.h> header file. */
+-/* #undef HAVE_TERMIOS_H */
++#define HAVE_TERMIOS_H 1
+
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #define HAVE_UNISTD_H 1
+@@ -224,7 +224,7 @@
+ /* #undef HAVE_VALGRIND_VALGRIND_H */
+
+ /* Define to 1 if you have the <zlib.h> header file. */
+-/* #undef HAVE_ZLIB_H */
++#define HAVE_ZLIB_H 1
+
+ /* Have host's _alloca */
+ /* #undef HAVE__ALLOCA */
+@@ -298,7 +298,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -308,7 +308,7 @@
+ #endif
+
+ /* Define if zlib compression is available */
+-#define LLVM_ENABLE_ZLIB 0
++#define LLVM_ENABLE_ZLIB 1
+
+ /* Define if overriding target triple is enabled */
+ /* #undef LLVM_TARGET_TRIPLE_ENV */
diff --git a/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
new file mode 100644
index 000000000000..6f38970074b7
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h.orig 2019-04-20 12:09:44 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h
+@@ -28,7 +28,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -51,7 +51,7 @@
+ #elif defined(__arm__)
+ #define LLVM_HOST_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_HOST_TRIPLE "aarch64-linux-gnu"
++#define LLVM_HOST_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_HOST_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
diff --git a/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..052a60d5ba96
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h.orig 2019-04-08 08:34:34 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h
+@@ -121,7 +121,7 @@
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+@@ -130,7 +130,7 @@
+ /* #undef HAVE_MALLCTL */
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+ #define HAVE_MALLOC_H 1
+@@ -154,7 +154,7 @@
+ /* #undef HAVE_NDIR_H */
+
+ /* Define to 1 if you have the `posix_fallocate' function. */
+-#define HAVE_POSIX_FALLOCATE 1
++/* #undef HAVE_POSIX_FALLOCATE */
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+ #define HAVE_POSIX_SPAWN 1
diff --git a/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
new file mode 100644
index 000000000000..bab9e6bf6efd
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc.orig 2019-04-08 08:23:16 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc
+@@ -35,7 +35,7 @@
+ // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for
+ // <stdlib.h> instead. Unix.h includes this for us already.
+ #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \
+- !defined(__OpenBSD__) && !defined(__Bitrig__)
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__Bitrig__)
+ #include <malloc.h>
+ #endif
+ #if defined(HAVE_MALLCTL)
diff --git a/devel/electron5/files/patch-third__party_usrsctp_BUILD.gn b/devel/electron5/files/patch-third__party_usrsctp_BUILD.gn
new file mode 100644
index 000000000000..cc9ff01dff6b
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_usrsctp_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/usrsctp/BUILD.gn.orig 2019-04-08 08:19:10 UTC
++++ third_party/usrsctp/BUILD.gn
+@@ -116,11 +116,16 @@ static_library("usrsctp") {
+ "-UINET6",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android ) {
+ defines += [
+ "__Userspace_os_Linux",
+ "_GNU_SOURCE",
+ ]
++ } else if (is_bsd) {
++ defines += [
++ "__Userspace_os_FreeBSD",
++ ]
++ cflags += [ "-U__FreeBSD__" ]
+ } else if (is_mac || is_ios) {
+ defines += [
+ "HAVE_SA_LEN",
diff --git a/devel/electron5/files/patch-third__party_webrtc_BUILD.gn b/devel/electron5/files/patch-third__party_webrtc_BUILD.gn
new file mode 100644
index 000000000000..df6d07394993
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_BUILD.gn
@@ -0,0 +1,12 @@
+--- third_party/webrtc/BUILD.gn.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/BUILD.gn
+@@ -153,6 +153,9 @@ config("common_inherited_config") {
+ if (is_linux) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
diff --git a/devel/electron5/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn b/devel/electron5/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
new file mode 100644
index 000000000000..1bdc699cee40
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/modules/audio_device/BUILD.gn.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/modules/audio_device/BUILD.gn
+@@ -312,7 +312,7 @@ rtc_source_set("audio_device_impl") {
+ if (rtc_use_dummy_audio_file_devices) {
+ defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
+ } else {
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/alsasymboltable_linux.cc",
+ "linux/alsasymboltable_linux.h",
diff --git a/devel/electron5/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/devel/electron5/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..0d7f4c30f924
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -12,6 +12,7 @@
+
+ #include <string.h>
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "modules/include/module_common_types_public.h"
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_BUILD.gn b/devel/electron5/files/patch-third__party_webrtc_rtc__base_BUILD.gn
new file mode 100644
index 000000000000..286ae9aaa2d9
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/webrtc/rtc_base/BUILD.gn.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/rtc_base/BUILD.gn
+@@ -1088,8 +1088,6 @@ rtc_static_library("rtc_base") {
+
+ if (rtc_use_x11) {
+ libs += [
+- "dl",
+- "rt",
+ "Xext",
+ "X11",
+ "Xcomposite",
+@@ -1097,7 +1095,7 @@ rtc_static_library("rtc_base") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ libs += [
+ "dl",
+ "rt",
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_byte__order.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_byte__order.h
new file mode 100644
index 000000000000..7b3df0bef5a4
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/byte_order.h.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/rtc_base/byte_order.h
+@@ -79,7 +79,7 @@
+ #error WEBRTC_ARCH_BIG_ENDIAN or WEBRTC_ARCH_LITTLE_ENDIAN must be defined.
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #endif
+
+ namespace rtc {
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..b39ab2dbb609
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/ifaddrs_converter.h.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.cc b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..95878be40f5f
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- third_party/webrtc/rtc_base/ip_address.cc.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+ #ifdef OPENBSD
+ #include <netinet/in_systm.h>
+ #endif
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.h
new file mode 100644
index 000000000000..8ef9855678a4
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/ip_address.h.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.cc b/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.cc
new file mode 100644
index 000000000000..239c5f0c46b2
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.cc
@@ -0,0 +1,29 @@
+--- third_party/webrtc/rtc_base/network.cc.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/rtc_base/network.cc
+@@ -14,7 +14,7 @@
+ // linux/if.h can't be included at the same time as the posix sys/if.h, and
+ // it's transitively required by linux/route.h, so include that version on
+ // linux instead of the standard posix one.
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/if.h>
+ #include <linux/route.h>
+ #elif !defined(__native_client__)
+@@ -762,7 +762,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_
+ }
+ #endif // WEBRTC_WIN
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ bool IsDefaultRoute(const std::string& network_name) {
+ FILE* f = fopen("/proc/net/route", "r");
+ if (!f) {
+@@ -805,7 +805,7 @@ bool BasicNetworkManager::IsIgnoredNetwork(const Netwo
+ strncmp(network.name().c_str(), "vboxnet", 7) == 0) {
+ return true;
+ }
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // Make sure this is a default route, if we're ignoring non-defaults.
+ if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
+ return true;
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.h
new file mode 100644
index 000000000000..723b73e68139
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/network.h.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/network.h
+@@ -25,6 +25,10 @@
+ #include "rtc_base/network_monitor.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc b/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..e3c0b18f4ec0
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
@@ -0,0 +1,56 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.cc.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.cc
+@@ -66,7 +66,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -286,7 +286,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ socklen_t optlen = sizeof(*value);
+ int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+ if (ret != -1 && opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ }
+@@ -299,7 +299,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ }
+@@ -309,7 +309,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ int PhysicalSocket::Send(const void* pv, size_t cb) {
+ int sent = DoSend(
+ s_, reinterpret_cast<const char*>(pv), static_cast<int>(cb),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. Without this, attempting to send on a socket whose
+ // other end is closed will result in a SIGPIPE signal being raised to
+ // our process, which by default will terminate the process, which we
+@@ -338,7 +338,7 @@ int PhysicalSocket::SendTo(const void* buffer,
+ size_t len = addr.ToSockAddrStorage(&saddr);
+ int sent =
+ DoSendTo(s_, static_cast<const char*>(buffer), static_cast<int>(length),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. See above for explanation.
+ MSG_NOSIGNAL,
+ #else
+@@ -529,7 +529,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..16161d71b201
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.h.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc b/devel/electron5/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..15dbd9b9a753
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
@@ -0,0 +1,40 @@
+--- third_party/webrtc/rtc_base/platform_thread_types.cc.orig 2019-04-08 08:23:51 UTC
++++ third_party/webrtc/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,9 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -27,8 +29,10 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
+-#elif defined(WEBRTC_LINUX)
++#elif defined(WEBRTC_LINUX) && !defined(__FreeBSD__)
+ return syscall(__NR_gettid);
++#elif defined(__FreeBSD__)
++ return reinterpret_cast<uint64_t>(pthread_self());
+ #else
+ // Default implementation for nacl and solaris.
+ return reinterpret_cast<pid_t>(pthread_self());
+@@ -55,6 +59,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ struct {
+ DWORD dwType;
+@@ -72,6 +77,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/devel/electron5/files/patch-third__party_webrtc_rtc__base_string__utils.h b/devel/electron5/files/patch-third__party_webrtc_rtc__base_string__utils.h
new file mode 100644
index 000000000000..5cf060732450
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_rtc__base_string__utils.h
@@ -0,0 +1,17 @@
+--- third_party/webrtc/rtc_base/string_utils.h.orig 2019-04-08 08:34:47 UTC
++++ third_party/webrtc/rtc_base/string_utils.h
+@@ -25,11 +25,11 @@
+ #endif // WEBRTC_WIN
+
+ #if defined(WEBRTC_POSIX)
+-#ifdef BSD
++#if defined(WEBRTC_BSD) || defined(BSD)
+ #include <stdlib.h>
+-#else // BSD
++#else // WEBRTC_BSD
+ #include <alloca.h>
+-#endif // !BSD
++#endif // !WEBRTC_BSD
+ #include <strings.h>
+ #endif // WEBRTC_POSIX
+
diff --git a/devel/electron5/files/patch-third__party_webrtc_system__wrappers_BUILD.gn b/devel/electron5/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..210ad8eba53a
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/system_wrappers/BUILD.gn.orig 2019-04-08 08:34:48 UTC
++++ third_party/webrtc/system_wrappers/BUILD.gn
+@@ -59,8 +59,6 @@ rtc_static_library("system_wrappers") {
+ if (!build_with_chromium) {
+ deps += [ ":cpu_features_linux" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/devel/electron5/files/patch-third__party_yasm_yasm__assemble.gni b/devel/electron5/files/patch-third__party_yasm_yasm__assemble.gni
new file mode 100644
index 000000000000..9b4a433a44d9
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_yasm_yasm__assemble.gni
@@ -0,0 +1,159 @@
+--- third_party/yasm/yasm_assemble.gni.orig 2019-04-08 08:19:10 UTC
++++ third_party/yasm/yasm_assemble.gni
+@@ -1,105 +1,23 @@
+-# Copyright 2014 The Chromium Authors. All rights reserved.
++# Copyright 2016 The Chromium Authors. All rights reserved.
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-# This provides the yasm_assemble() template which uses YASM to assemble
+-# assembly files.
+-#
+-# Files to be assembled with YASM should have an extension of .asm.
+-#
+-# Parameters
+-#
+-# yasm_flags (optional)
+-# [list of strings] Pass additional flags into YASM. These are appended
+-# to the command line. Note that the target machine type and system is
+-# already set up based on the current toolchain so you don't need to
+-# specify these things (see below).
+-#
+-# Example: yasm_flags = [ "--force-strict" ]
+-#
+-# include_dirs (optional)
+-# [list of dir names] List of additional include dirs. Note that the
+-# source root and the root generated file dir is always added, just like
+-# our C++ build sets up.
+-#
+-# Example: include_dirs = [ "//some/other/path", target_gen_dir ]
+-#
+-# defines (optional)
+-# [list of strings] List of defines, as with the native code defines.
+-#
+-# Example: defines = [ "FOO", "BAR=1" ]
+-#
+-# inputs, deps, visibility (optional)
+-# These have the same meaning as in an action.
+-#
+-# Example
+-#
+-# yasm_assemble("my_yasm_target") {
+-# sources = [
+-# "ultra_optimized_awesome.asm",
+-# ]
+-# include_dirs = [ "assembly_include" ]
+-# }
+-
+-if (is_mac || is_ios) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-fmacho32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fmacho64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_posix || is_fuchsia) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-felf32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-DPIC",
+- "-felf64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_win) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-DPREFIX",
+- "-fwin32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fwin64",
+- "-m",
+- "amd64",
+- ]
+- }
++if (current_cpu == "x86") {
++ _yasm_flags = [
++ "-felf32",
++ "-m",
++ "x86",
++ ]
++} else if (current_cpu == "x64") {
++ _yasm_flags = [
++ "-DPIC",
++ "-felf64",
++ "-m",
++ "amd64",
++ ]
+ }
+
+-if (is_win) {
+- asm_obj_extension = "obj"
+-} else {
+- asm_obj_extension = "o"
+-}
+-
+ template("yasm_assemble") {
+- assert(defined(invoker.sources), "Need sources defined for $target_name")
+-
+- # Only depend on YASM on x86 systems. Force compilation of .asm files for
+- # ARM to fail.
+- assert(current_cpu == "x86" || current_cpu == "x64")
+-
+ action_name = "${target_name}_action"
+ source_set_name = target_name
+
+@@ -114,24 +32,12 @@ template("yasm_assemble") {
+ inputs = invoker.inputs
+ }
+
+- # Executable (first in the args). The binary might be in the root build dir
+- # (no cross-compiling) or in a toolchain-specific subdirectory of that
+- # (when cross-compiling).
+- yasm_label = "//third_party/yasm($host_toolchain)"
+- args = [ "./" + # Force current dir.
+- rebase_path(get_label_info(yasm_label, "root_out_dir") + "/yasm",
+- root_build_dir) ]
+-
+- # Deps.
+- deps = [
+- yasm_label,
+- ]
++ deps = []
+ if (defined(invoker.deps)) {
+ deps += invoker.deps
+ }
+
+- # Flags.
+- args += _yasm_flags
++ args = [ "yasm" ] + _yasm_flags
+ if (defined(invoker.yasm_flags)) {
+ args += invoker.yasm_flags
+ }
+@@ -188,9 +94,6 @@ template("yasm_assemble") {
+ }
+
+ sources = get_target_outputs(":$action_name")
+-
+- # Do not publicize any header to remove build dependency.
+- public = []
+
+ deps = [
+ ":$action_name",
diff --git a/devel/electron5/files/patch-third__party_zlib_arm__features.c b/devel/electron5/files/patch-third__party_zlib_arm__features.c
new file mode 100644
index 000000000000..3710c3fd1a5f
--- /dev/null
+++ b/devel/electron5/files/patch-third__party_zlib_arm__features.c
@@ -0,0 +1,97 @@
+--- third_party/zlib/arm_features.c.orig 2019-04-20 12:09:23 UTC
++++ third_party/zlib/arm_features.c
+@@ -8,83 +8,30 @@
+
+ #include "zutil.h"
+
+-int ZLIB_INTERNAL arm_cpu_enable_crc32 = 0;
+-int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+-
+-#if !defined(_MSC_VER)
+ #include <pthread.h>
+ #include <stdint.h>
++#include <machine/armreg.h>
++#include <sys/types.h>
+
+-#if defined(ARMV8_OS_ANDROID)
+-#include <cpu-features.h>
+-#elif defined(ARMV8_OS_LINUX)
+-#include <asm/hwcap.h>
+-#include <sys/auxv.h>
+-#else
+-#error ### No ARM CPU features detection in your platform/OS
+-#endif
++int ZLIB_INTERNAL arm_cpu_enable_crc32 = 0;
++int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+
+ static pthread_once_t cpu_check_inited_once = PTHREAD_ONCE_INIT;
+
+ static void init_arm_features(void)
+ {
+- uint64_t flag_crc32 = 0, flag_pmull = 0, capabilities = 0;
++#if defined (__aarch64__)
++ uint64_t id_aa64isar0;
+
+-#if defined(ARMV8_OS_ANDROID)
+- flag_crc32 = ANDROID_CPU_ARM_FEATURE_CRC32;
+- flag_pmull = ANDROID_CPU_ARM_FEATURE_PMULL;
+- capabilities = android_getCpuFeatures();
+-#elif defined(ARMV8_OS_LINUX)
+- #if defined(__aarch64__)
+- flag_crc32 = HWCAP_CRC32;
+- flag_pmull = HWCAP_PMULL;
+- capabilities = getauxval(AT_HWCAP);
+- #elif defined(__ARM_NEON) || defined(__ARM_NEON__)
+- /* The use of HWCAP2 is for getting features of newer ARMv8-A SoCs
+- * while running in 32bits mode (i.e. aarch32).
+- */
+- flag_crc32 = HWCAP2_CRC32;
+- flag_pmull = HWCAP2_PMULL;
+- capabilities = getauxval(AT_HWCAP2);
+- #endif
+-#endif
+-
+- if (capabilities & flag_crc32)
+- arm_cpu_enable_crc32 = 1;
+-
+- if (capabilities & flag_pmull)
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL)
+ arm_cpu_enable_pmull = 1;
++ if (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE)
++ arm_cpu_enable_crc32 = 1;
++#endif
+ }
+
+ void ZLIB_INTERNAL arm_check_features(void)
+ {
+ pthread_once(&cpu_check_inited_once, init_arm_features);
+ }
+-#else
+-#include <windows.h>
+-
+-static BOOL CALLBACK _arm_check_features(PINIT_ONCE once,
+- PVOID param,
+- PVOID *context);
+-static INIT_ONCE cpu_check_inited_once = INIT_ONCE_STATIC_INIT;
+-
+-
+-void ZLIB_INTERNAL arm_check_features(void)
+-{
+- InitOnceExecuteOnce(&cpu_check_inited_once, _arm_check_features,
+- NULL, NULL);
+-}
+-
+-static BOOL CALLBACK _arm_check_features(PINIT_ONCE once,
+- PVOID param,
+- PVOID *context)
+-{
+- if (IsProcessorFeaturePresent(PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE))
+- arm_cpu_enable_crc32 = 1;
+-
+- if (IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE))
+- arm_cpu_enable_pmull = 1;
+-
+- return TRUE;
+-}
+-#endif /* _MSC_VER */
diff --git a/devel/electron5/files/patch-tools_gn_base_files_file__posix.cc b/devel/electron5/files/patch-tools_gn_base_files_file__posix.cc
new file mode 100644
index 000000000000..b96ca30305db
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_base_files_file__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_posix.cc.orig 2019-03-11 22:12:13 UTC
++++ tools/gn/base/files/file_posix.cc
+@@ -414,7 +414,7 @@ void File::DoInitialize(const FilePath& path, uint32_t
+ bool File::Flush() {
+ DCHECK(IsValid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !HANDLE_EINTR(fdatasync(file_.get()));
+ #else
+ return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/devel/electron5/files/patch-tools_gn_base_files_file__util.h b/devel/electron5/files/patch-tools_gn_base_files_file__util.h
new file mode 100644
index 000000000000..142ec10db26a
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_base_files_file__util.h
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util.h.orig 2019-06-04 19:02:25 UTC
++++ tools/gn/base/files/file_util.h
+@@ -361,7 +361,7 @@ bool VerifyPathControlledByAdmin(const base::FilePath&
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron5/files/patch-tools_gn_base_files_file__util__posix.cc b/devel/electron5/files/patch-tools_gn_base_files_file__util__posix.cc
new file mode 100644
index 000000000000..32498b74dcef
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util_posix.cc.orig 2019-06-04 19:02:25 UTC
++++ tools/gn/base/files/file_util_posix.cc
+@@ -254,7 +254,7 @@ bool ReplaceFile(const FilePath& from_path,
+ #endif // !defined(OS_NACL_NONSFI)
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron5/files/patch-tools_gn_base_files_scoped__file.cc b/devel/electron5/files/patch-tools_gn_base_files_scoped__file.cc
new file mode 100644
index 000000000000..8364317cad57
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/scoped_file.cc.orig 2019-06-04 19:02:25 UTC
++++ tools/gn/base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron5/files/patch-tools_gn_build_gen.py b/devel/electron5/files/patch-tools_gn_build_gen.py
new file mode 100644
index 000000000000..34b612046ca9
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_build_gen.py
@@ -0,0 +1,33 @@
+--- tools/gn/build/gen.py.orig 2019-07-24 19:05:33 UTC
++++ tools/gn/build/gen.py
+@@ -46,7 +46,7 @@ class Platform(object):
+
+ @staticmethod
+ def known_platforms():
+- return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd']
++ return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd', 'freebsd']
+
+ def platform(self):
+ return self._platform
+@@ -69,6 +69,9 @@ class Platform(object):
+ def is_aix(self):
+ return self._platform == 'aix'
+
++ def is_freebsd(self):
++ return self._platform == 'freebsd'
++
+ def is_posix(self):
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd']
+
+@@ -335,6 +338,11 @@ def WriteGNNinja(path, platform, host, options):
+ elif platform.is_aix():
+ cflags_cc.append('-maix64')
+ ldflags.append('-maix64')
++ elif platform.is_freebsd():
++ cflags.extend(['-Wno-deprecated-register', '-Wno-parentheses-equality'])
++ ldflags.extend(['-pthread'])
++ libs.extend(['-lexecinfo', '-lkvm', '-lutil'])
++ include_dirs += ['/usr/local/include']
+
+ if platform.is_posix():
+ ldflags.append('-pthread')
diff --git a/devel/electron5/files/patch-tools_gn_tools_gn_exec__process.cc b/devel/electron5/files/patch-tools_gn_tools_gn_exec__process.cc
new file mode 100644
index 000000000000..bd6d48b4274e
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_tools_gn_exec__process.cc
@@ -0,0 +1,13 @@
+--- tools/gn/tools/gn/exec_process.cc.orig 2019-03-11 22:12:13 UTC
++++ tools/gn/tools/gn/exec_process.cc
+@@ -29,6 +29,10 @@
+ #include "base/posix/file_descriptor_shuffle.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
++
+ namespace internal {
+
+ #if defined(OS_WIN)
diff --git a/devel/electron5/files/patch-tools_gn_util_sys__info.cc b/devel/electron5/files/patch-tools_gn_util_sys__info.cc
new file mode 100644
index 000000000000..fdc4849fc8da
--- /dev/null
+++ b/devel/electron5/files/patch-tools_gn_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- tools/gn/util/sys_info.cc.orig 2019-04-30 22:29:37 UTC
++++ tools/gn/util/sys_info.cc
+@@ -28,6 +28,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron5/files/patch-tools_json__schema__compiler_feature__compiler.py b/devel/electron5/files/patch-tools_json__schema__compiler_feature__compiler.py
new file mode 100644
index 000000000000..488bccb0394e
--- /dev/null
+++ b/devel/electron5/files/patch-tools_json__schema__compiler_feature__compiler.py
@@ -0,0 +1,10 @@
+--- tools/json_schema_compiler/feature_compiler.py.orig 2019-04-08 08:19:10 UTC
++++ tools/json_schema_compiler/feature_compiler.py
+@@ -205,6 +205,7 @@ FEATURE_GRAMMAR = (
+ 'enum_map': {
+ 'chromeos': 'Feature::CHROMEOS_PLATFORM',
+ 'linux': 'Feature::LINUX_PLATFORM',
++ 'bsd': 'Feature::LINUX_PLATFORM',
+ 'mac': 'Feature::MACOSX_PLATFORM',
+ 'win': 'Feature::WIN_PLATFORM',
+ }
diff --git a/devel/electron5/files/patch-tools_json__schema__compiler_model.py b/devel/electron5/files/patch-tools_json__schema__compiler_model.py
new file mode 100644
index 000000000000..848fee403a4e
--- /dev/null
+++ b/devel/electron5/files/patch-tools_json__schema__compiler_model.py
@@ -0,0 +1,11 @@
+--- tools/json_schema_compiler/model.py.orig 2019-04-08 08:19:10 UTC
++++ tools/json_schema_compiler/model.py
+@@ -602,7 +602,7 @@ class Platforms(object):
+ """
+ CHROMEOS = _PlatformInfo("chromeos")
+ CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
+- LINUX = _PlatformInfo("linux")
++ LINUX = _PlatformInfo("bsd")
+ MAC = _PlatformInfo("mac")
+ WIN = _PlatformInfo("win")
+
diff --git a/devel/electron5/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn b/devel/electron5/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
new file mode 100644
index 000000000000..88722ef311f7
--- /dev/null
+++ b/devel/electron5/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
@@ -0,0 +1,11 @@
+--- tools/perf/chrome_telemetry_build/BUILD.gn.orig 2019-04-08 08:33:22 UTC
++++ tools/perf/chrome_telemetry_build/BUILD.gn
+@@ -40,7 +40,7 @@ group("telemetry_chrome_test") {
+ data_deps += [ "//chrome:reorder_imports" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
diff --git a/devel/electron5/files/patch-tools_variations_fieldtrial__to__struct.py b/devel/electron5/files/patch-tools_variations_fieldtrial__to__struct.py
new file mode 100644
index 000000000000..706ffac6183f
--- /dev/null
+++ b/devel/electron5/files/patch-tools_variations_fieldtrial__to__struct.py
@@ -0,0 +1,10 @@
+--- tools/variations/fieldtrial_to_struct.py.orig 2019-04-08 08:33:22 UTC
++++ tools/variations/fieldtrial_to_struct.py
+@@ -24,6 +24,7 @@ finally:
+ _platforms = [
+ 'android',
+ 'android_webview',
++ 'freebsd',
+ 'chromeos',
+ 'fuchsia',
+ 'ios',
diff --git a/devel/electron5/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc b/devel/electron5/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
new file mode 100644
index 000000000000..ff07767527fd
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
@@ -0,0 +1,20 @@
+--- ui/base/dragdrop/os_exchange_data_provider_factory.cc.orig 2019-04-08 08:19:15 UTC
++++ ui/base/dragdrop/os_exchange_data_provider_factory.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(USE_X11)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+ #elif defined(OS_MACOSX)
+ #include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
+@@ -42,7 +42,7 @@ OSExchangeDataProviderFactory::CreateProvider() {
+
+ #if defined(USE_X11)
+ return std::make_unique<OSExchangeDataProviderAuraX11>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<OSExchangeDataProviderAura>();
+ #elif defined(OS_MACOSX)
+ return ui::BuildOSExchangeDataProviderMac();
diff --git a/devel/electron5/files/patch-ui_base_ime_ime__engine__handler__interface.h b/devel/electron5/files/patch-ui_base_ime_ime__engine__handler__interface.h
new file mode 100644
index 000000000000..a4a7db01d0fd
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_ime_ime__engine__handler__interface.h
@@ -0,0 +1,11 @@
+--- ui/base/ime/ime_engine_handler_interface.h.orig 2019-04-08 08:33:23 UTC
++++ ui/base/ime/ime_engine_handler_interface.h
+@@ -166,7 +166,7 @@ class UI_BASE_IME_EXPORT IMEEngineHandlerInterface {
+ virtual void SetMirroringEnabled(bool mirroring_enabled) = 0;
+ virtual void SetCastingEnabled(bool casting_enabled) = 0;
+
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // Get the id of the IME extension.
+ virtual std::string GetExtensionId() const = 0;
diff --git a/devel/electron5/files/patch-ui_base_ime_input__method__initializer.cc b/devel/electron5/files/patch-ui_base_ime_input__method__initializer.cc
new file mode 100644
index 000000000000..2903d4d49231
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_ime_input__method__initializer.cc
@@ -0,0 +1,38 @@
+--- ui/base/ime/input_method_initializer.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/base/ime/input_method_initializer.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/base/ime/ime_bridge.h"
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/logging.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
+ #elif defined(OS_WIN)
+@@ -18,7 +18,7 @@
+
+ namespace {
+
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const ui::LinuxInputMethodContextFactory*
+ g_linux_input_method_context_factory_for_testing;
+ #endif
+@@ -46,7 +46,7 @@ void ShutdownInputMethod() {
+ void InitializeInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Initialize();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ if (!g_linux_input_method_context_factory_for_testing)
+ g_linux_input_method_context_factory_for_testing =
+ new FakeInputMethodContextFactory();
+@@ -67,7 +67,7 @@ void InitializeInputMethodForTesting() {
+ void ShutdownInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Shutdown();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxInputMethodContextFactory* factory =
+ LinuxInputMethodContextFactory::instance();
+ CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
diff --git a/devel/electron5/files/patch-ui_base_resource_resource__bundle.cc b/devel/electron5/files/patch-ui_base_resource_resource__bundle.cc
new file mode 100644
index 000000000000..15d469a7d779
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_resource_resource__bundle.cc
@@ -0,0 +1,20 @@
+--- ui/base/resource/resource_bundle.cc.orig 2019-04-08 08:19:15 UTC
++++ ui/base/resource/resource_bundle.cc
+@@ -692,7 +692,7 @@ void ResourceBundle::ReloadFonts() {
+ }
+
+ ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ return max_scale_factor_;
+ #else
+ return GetSupportedScaleFactors().back();
+@@ -745,7 +745,7 @@ void ResourceBundle::InitSharedInstance(Delegate* dele
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ // For Windows we have a separate case in this function.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ #endif
+ #endif
diff --git a/devel/electron5/files/patch-ui_base_resource_resource__bundle__freebsd.cc b/devel/electron5/files/patch-ui_base_resource_resource__bundle__freebsd.cc
new file mode 100644
index 000000000000..ed169d7cecdd
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_resource_resource__bundle__freebsd.cc
@@ -0,0 +1,24 @@
+--- ui/base/resource/resource_bundle_freebsd.cc.orig 2019-04-09 12:48:54 UTC
++++ ui/base/resource/resource_bundle_freebsd.cc
+@@ -0,0 +1,21 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ui/base/resource/resource_bundle.h"
++
++#include "base/logging.h"
++#include "base/macros.h"
++#include "ui/gfx/image/image.h"
++
++namespace ui {
++
++void ResourceBundle::LoadCommonResources() {
++ LoadChromeResources();
++}
++
++gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id) {
++ return GetImageNamed(resource_id);
++}
++
++} // namespace ui
diff --git a/devel/electron5/files/patch-ui_base_ui__base__features.cc b/devel/electron5/files/patch-ui_base_ui__base__features.cc
new file mode 100644
index 000000000000..10935e0e8e64
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_ui__base__features.cc
@@ -0,0 +1,20 @@
+--- ui/base/ui_base_features.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/base/ui_base_features.cc
+@@ -111,7 +111,7 @@ const base::Feature kEnableAutomaticUiAdjustmentsForTo
+ "EnableAutomaticUiAdjustmentsForTouch", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables stylus appearing as touch when in contact with digitizer.
+ const base::Feature kDirectManipulationStylus = {
+ "DirectManipulationStylus",
+@@ -121,7 +121,7 @@ const base::Feature kDirectManipulationStylus = {
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #endif
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const base::Feature kMash = {"Mash", base::FEATURE_DISABLED_BY_DEFAULT};
+
diff --git a/devel/electron5/files/patch-ui_base_ui__base__features.h b/devel/electron5/files/patch-ui_base_ui__base__features.h
new file mode 100644
index 000000000000..fd2100167607
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_ui__base__features.h
@@ -0,0 +1,14 @@
+--- ui/base/ui_base_features.h.orig 2019-04-08 08:33:23 UTC
++++ ui/base/ui_base_features.h
+@@ -46,9 +46,9 @@ UI_BASE_EXPORT bool IsUsingWMPointerForTouch();
+ UI_BASE_EXPORT extern const base::Feature kEnableAutomaticUiAdjustmentsForTouch;
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ UI_BASE_EXPORT extern const base::Feature kDirectManipulationStylus;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Used to have ash (Chrome OS system UI) run in its own process.
+ // TODO(jamescook): Make flag only available in Chrome OS.
diff --git a/devel/electron5/files/patch-ui_base_webui_web__ui__util.cc b/devel/electron5/files/patch-ui_base_webui_web__ui__util.cc
new file mode 100644
index 000000000000..6861df5eb46a
--- /dev/null
+++ b/devel/electron5/files/patch-ui_base_webui_web__ui__util.cc
@@ -0,0 +1,11 @@
+--- ui/base/webui/web_ui_util.cc.orig 2019-04-08 08:19:15 UTC
++++ ui/base/webui/web_ui_util.cc
+@@ -217,7 +217,7 @@ std::string GetFontFamily() {
+
+ // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced
+ // into Ozone: crbug.com/320050
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ font_family = ui::ResourceBundle::GetSharedInstance().GetFont(
+ ui::ResourceBundle::BaseFont).GetFontName() + ", " + font_family;
+ #endif
diff --git a/devel/electron5/files/patch-ui_events_devices_x11_device__data__manager__x11.cc b/devel/electron5/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
new file mode 100644
index 000000000000..f9d8ee9e9c0e
--- /dev/null
+++ b/devel/electron5/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
@@ -0,0 +1,19 @@
+--- ui/events/devices/x11/device_data_manager_x11.cc.orig 2019-04-08 08:19:16 UTC
++++ ui/events/devices/x11/device_data_manager_x11.cc
+@@ -828,6 +828,8 @@ void DeviceDataManagerX11::SetDisabledKeyboardAllowedK
+ }
+
+ void DeviceDataManagerX11::DisableDevice(int deviceid) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ blocked_devices_.set(deviceid, true);
+ // TODO(rsadam@): Support blocking touchscreen devices.
+ std::vector<InputDevice> keyboards = GetKeyboardDevices();
+@@ -838,6 +840,7 @@ void DeviceDataManagerX11::DisableDevice(int deviceid)
+ keyboards.erase(it);
+ DeviceDataManager::OnKeyboardDevicesUpdated(keyboards);
+ }
++#endif
+ }
+
+ void DeviceDataManagerX11::EnableDevice(int deviceid) {
diff --git a/devel/electron5/files/patch-ui_events_event__switches.cc b/devel/electron5/files/patch-ui_events_event__switches.cc
new file mode 100644
index 000000000000..3295c4f061d7
--- /dev/null
+++ b/devel/electron5/files/patch-ui_events_event__switches.cc
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.cc.orig 2019-04-08 08:19:16 UTC
++++ ui/events/event_switches.cc
+@@ -14,7 +14,7 @@ namespace switches {
+ const char kCompensateForUnstablePinchZoom[] =
+ "compensate-for-unstable-pinch-zoom";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ // Tells chrome to interpret events from these devices as touch events. Only
+ // available with XInput 2 (i.e. X server 1.8 or above). The id's of the
+ // devices can be retrieved from 'xinput list'.
diff --git a/devel/electron5/files/patch-ui_events_event__switches.h b/devel/electron5/files/patch-ui_events_event__switches.h
new file mode 100644
index 000000000000..8e001da4f46e
--- /dev/null
+++ b/devel/electron5/files/patch-ui_events_event__switches.h
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.h.orig 2019-04-08 08:19:16 UTC
++++ ui/events/event_switches.h
+@@ -13,7 +13,7 @@ namespace switches {
+
+ EVENTS_BASE_EXPORT extern const char kCompensateForUnstablePinchZoom[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ EVENTS_BASE_EXPORT extern const char kTouchDevices[];
+ EVENTS_BASE_EXPORT extern const char kPenDevices[];
+ #endif
diff --git a/devel/electron5/files/patch-ui_events_keycodes_dom_keycode__converter.cc b/devel/electron5/files/patch-ui_events_keycodes_dom_keycode__converter.cc
new file mode 100644
index 000000000000..3b1ea5f38c7b
--- /dev/null
+++ b/devel/electron5/files/patch-ui_events_keycodes_dom_keycode__converter.cc
@@ -0,0 +1,11 @@
+--- ui/events/keycodes/dom/keycode_converter.cc.orig 2019-04-08 08:19:16 UTC
++++ ui/events/keycodes/dom/keycode_converter.cc
+@@ -19,7 +19,7 @@ namespace {
+ // and DOM Level 3 |code| strings.
+ #if defined(OS_WIN)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, win, code}
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, xkb, code}
+ #elif defined(OS_MACOSX)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, mac, code}
diff --git a/devel/electron5/files/patch-ui_gfx_BUILD.gn b/devel/electron5/files/patch-ui_gfx_BUILD.gn
new file mode 100644
index 000000000000..07f7379d0f1a
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gfx/BUILD.gn.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/BUILD.gn
+@@ -532,7 +532,7 @@ jumbo_source_set("memory_buffer_sources") {
+ deps += [ "//build/config/linux/libdrm" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux || is_android) && !is_bsd) {
+ deps += [ "//third_party/libsync" ]
+ }
+
diff --git a/devel/electron5/files/patch-ui_gfx_canvas__skia.cc b/devel/electron5/files/patch-ui_gfx_canvas__skia.cc
new file mode 100644
index 000000000000..75513ccc572f
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_canvas__skia.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/canvas_skia.cc.orig 2019-04-08 08:19:17 UTC
++++ ui/gfx/canvas_skia.cc
+@@ -209,7 +209,7 @@ void Canvas::DrawStringRectWithFlags(const base::strin
+ Range range = StripAcceleratorChars(flags, &adjusted_text);
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, eliding really means fading the end of the string. But only
+ // for LTR text. RTL text is still elided (on the left) with "...".
+ if (elide_text) {
diff --git a/devel/electron5/files/patch-ui_gfx_codec_jpeg__codec.cc b/devel/electron5/files/patch-ui_gfx_codec_jpeg__codec.cc
new file mode 100644
index 000000000000..59e02aa35a05
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_codec_jpeg__codec.cc
@@ -0,0 +1,20 @@
+--- ui/gfx/codec/jpeg_codec.cc.orig 2019-04-08 08:19:17 UTC
++++ ui/gfx/codec/jpeg_codec.cc
+@@ -207,6 +207,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // Choose an output colorspace and return if it is an unsupported one.
+ // Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+@@ -223,6 +224,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ NOTREACHED() << "Invalid pixel format";
+ return false;
+ }
++#else
++ cinfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
diff --git a/devel/electron5/files/patch-ui_gfx_font__fallback__linux.cc b/devel/electron5/files/patch-ui_gfx_font__fallback__linux.cc
new file mode 100644
index 000000000000..e10e982002fe
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_font__fallback__linux.cc
@@ -0,0 +1,13 @@
+--- ui/gfx/font_fallback_linux.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/font_fallback_linux.cc
+@@ -15,6 +15,10 @@
+ #include "base/memory/ptr_util.h"
+ #include "ui/gfx/font.h"
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ namespace gfx {
+
+ namespace {
diff --git a/devel/electron5/files/patch-ui_gfx_font__list.cc b/devel/electron5/files/patch-ui_gfx_font__list.cc
new file mode 100644
index 000000000000..42bd4cb4e179
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_font__list.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/font_list.cc.orig 2019-04-08 08:19:17 UTC
++++ ui/gfx/font_list.cc
+@@ -24,7 +24,7 @@ base::LazyInstance<scoped_refptr<gfx::FontListImpl>>::
+ bool g_default_impl_initialized = false;
+
+ bool IsFontFamilyAvailable(const std::string& family, SkFontMgr* fontManager) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !!fontManager->legacyMakeTypeface(family.c_str(), SkFontStyle());
+ #else
+ sk_sp<SkFontStyleSet> set(fontManager->matchFamily(family.c_str()));
diff --git a/devel/electron5/files/patch-ui_gfx_font__render__params.h b/devel/electron5/files/patch-ui_gfx_font__render__params.h
new file mode 100644
index 000000000000..3a783e6ab518
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_font__render__params.h
@@ -0,0 +1,18 @@
+--- ui/gfx/font_render_params.h.orig 2019-04-08 08:19:17 UTC
++++ ui/gfx/font_render_params.h
+@@ -111,13 +111,13 @@ GFX_EXPORT FontRenderParams GetFontRenderParams(
+ const FontRenderParamsQuery& query,
+ std::string* family_out);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are
+ // changing Fontconfig's configuration.
+ GFX_EXPORT void ClearFontRenderParamsCacheForTest();
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Gets the device scale factor to query the FontRenderParams.
+ GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
+
diff --git a/devel/electron5/files/patch-ui_gfx_gpu__memory__buffer.h b/devel/electron5/files/patch-ui_gfx_gpu__memory__buffer.h
new file mode 100644
index 000000000000..eac3577d07b1
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_gpu__memory__buffer.h
@@ -0,0 +1,20 @@
+--- ui/gfx/gpu_memory_buffer.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/gpu_memory_buffer.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ #include "ui/gfx/mac/io_surface.h"
+@@ -65,7 +65,7 @@ struct GFX_EXPORT GpuMemoryBufferHandle {
+ base::UnsafeSharedMemoryRegion region;
+ uint32_t offset;
+ int32_t stride;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(crbug.com/863011): convert this to a scoped handle.
+ NativePixmapHandle native_pixmap_handle;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron5/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h b/devel/electron5/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
new file mode 100644
index 000000000000..53d1475df00a
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
@@ -0,0 +1,29 @@
+--- ui/gfx/ipc/gfx_param_traits_macros.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/ipc/gfx_param_traits_macros.h
+@@ -18,7 +18,7 @@
+ #include "ui/gfx/selection_bound.h"
+ #include "ui/gfx/swap_result.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #endif
+
+@@ -51,7 +51,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferHandle)
+ IPC_STRUCT_TRAITS_MEMBER(region)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(native_pixmap_handle)
+ #elif defined(OS_MACOSX)
+ IPC_STRUCT_TRAITS_MEMBER(mach_port)
+@@ -66,7 +66,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferId)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_END()
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapPlane)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
diff --git a/devel/electron5/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc b/devel/electron5/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
new file mode 100644
index 000000000000..835785882d88
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/linux/client_native_pixmap_dmabuf.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/linux/client_native_pixmap_dmabuf.cc
+@@ -5,7 +5,9 @@
+ #include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
+
+ #include <fcntl.h>
++#if !defined(__FreeBSD__)
+ #include <linux/version.h>
++#endif
+ #include <stddef.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+@@ -18,11 +20,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+-#include <linux/dma-buf.h>
+-#else
+-#include <linux/types.h>
+-
++#if defined(__FreeBSD__)
+ struct dma_buf_sync {
+ __u64 flags;
+ };
diff --git a/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc b/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
new file mode 100644
index 000000000000..8a6e9d34ccbf
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
@@ -0,0 +1,38 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.cc
+@@ -28,7 +28,7 @@ bool StructTraits<gfx::mojom::BufferUsageAndFormatData
+ return data.ReadUsage(&out->usage) && data.ReadFormat(&out->format);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::vector<mojo::ScopedHandle>
+ StructTraits<gfx::mojom::NativePixmapHandleDataView, gfx::NativePixmapHandle>::
+ fds(const gfx::NativePixmapHandle& pixmap_handle) {
+@@ -55,7 +55,7 @@ bool StructTraits<
+ }
+ return data.ReadPlanes(&out->planes);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTraits<
+ gfx::mojom::GpuMemoryBufferHandleDataView,
+@@ -68,7 +68,7 @@ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTra
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewSharedMemoryHandle(
+ std::move(handle.region));
+ case gfx::NATIVE_PIXMAP:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewNativePixmapHandle(
+ handle.native_pixmap_handle);
+ #else
+@@ -144,7 +144,7 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDat
+ out->type = gfx::SHARED_MEMORY_BUFFER;
+ out->region = std::move(platform_handle->get_shared_memory_handle());
+ return true;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case gfx::mojom::GpuMemoryBufferPlatformHandleDataView::Tag::
+ NATIVE_PIXMAP_HANDLE:
+ out->type = gfx::NATIVE_PIXMAP;
diff --git a/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h b/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
new file mode 100644
index 000000000000..b35531dad1b3
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
@@ -0,0 +1,20 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.h
+@@ -189,7 +189,7 @@ struct StructTraits<gfx::mojom::GpuMemoryBufferIdDataV
+ }
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ template <>
+ struct StructTraits<gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane> {
+@@ -229,7 +229,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ static bool Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out);
+ };
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ template <>
+ struct StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
diff --git a/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.cc b/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.cc
new file mode 100644
index 000000000000..b106d01b1212
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.cc
@@ -0,0 +1,28 @@
+--- ui/gfx/native_pixmap_handle.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/native_pixmap_handle.cc
+@@ -4,14 +4,14 @@
+
+ #include "ui/gfx/native_pixmap_handle.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <drm_fourcc.h>
+ #include "base/posix/eintr_wrapper.h"
+ #endif
+
+ namespace gfx {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static_assert(NativePixmapPlane::kNoModifier == DRM_FORMAT_MOD_INVALID,
+ "gfx::NativePixmapPlane::kNoModifier should be an alias for"
+ "DRM_FORMAT_MOD_INVALID");
+@@ -36,7 +36,7 @@ NativePixmapHandle::NativePixmapHandle(const NativePix
+
+ NativePixmapHandle::~NativePixmapHandle() {}
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
+ NativePixmapHandle clone;
+ std::vector<base::ScopedFD> scoped_fds;
diff --git a/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.h b/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.h
new file mode 100644
index 000000000000..9505cee94540
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_native__pixmap__handle.h
@@ -0,0 +1,28 @@
+--- ui/gfx/native_pixmap_handle.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/native_pixmap_handle.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/file_descriptor_posix.h"
+ #endif
+
+@@ -54,14 +54,14 @@ struct GFX_EXPORT NativePixmapHandle {
+
+ ~NativePixmapHandle();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // File descriptors for the underlying memory objects (usually dmabufs).
+ std::vector<base::FileDescriptor> fds;
+ #endif
+ std::vector<NativePixmapPlane> planes;
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns an instance of |handle| which can be sent over IPC. This duplicates
+ // the file-handles, so that the IPC code take ownership of them, without
+ // invalidating |handle|.
diff --git a/devel/electron5/files/patch-ui_gfx_render__text.cc b/devel/electron5/files/patch-ui_gfx_render__text.cc
new file mode 100644
index 000000000000..14187cc4744e
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gfx_render__text.cc
@@ -0,0 +1,46 @@
+--- ui/gfx/render_text.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gfx/render_text.cc
+@@ -934,32 +934,33 @@ void RenderText::SetDisplayOffset(int horizontal_offse
+ const int extra_content = GetContentWidth() - display_rect_.width();
+ const int cursor_width = cursor_enabled_ ? 1 : 0;
+
+- int min_offset = 0;
+- int max_offset = 0;
++ // avoid collisions with vm_map.h on FreeBSD --cmt
++ int _min_offset = 0;
++ int _max_offset = 0;
+ if (extra_content > 0) {
+ switch (GetCurrentHorizontalAlignment()) {
+ case ALIGN_LEFT:
+- min_offset = -extra_content;
++ _min_offset = -extra_content;
+ break;
+ case ALIGN_RIGHT:
+- max_offset = extra_content;
++ _max_offset = extra_content;
+ break;
+ case ALIGN_CENTER:
+ // The extra space reserved for cursor at the end of the text is ignored
+ // when centering text. So, to calculate the valid range for offset, we
+ // exclude that extra space, calculate the range, and add it back to the
+ // range (if cursor is enabled).
+- min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
+- max_offset = (extra_content - cursor_width) / 2;
++ _min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
++ _max_offset = (extra_content - cursor_width) / 2;
+ break;
+ default:
+ break;
+ }
+ }
+- if (horizontal_offset < min_offset)
+- horizontal_offset = min_offset;
+- else if (horizontal_offset > max_offset)
+- horizontal_offset = max_offset;
++ if (horizontal_offset < _min_offset)
++ horizontal_offset = _min_offset;
++ else if (horizontal_offset > _max_offset)
++ horizontal_offset = _max_offset;
+
+ cached_bounds_and_offset_valid_ = true;
+ display_offset_.set_x(horizontal_offset);
diff --git a/devel/electron5/files/patch-ui_gl_BUILD.gn b/devel/electron5/files/patch-ui_gl_BUILD.gn
new file mode 100644
index 000000000000..eb92bd407b50
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gl/BUILD.gn.orig 2019-04-09 12:48:20 UTC
++++ ui/gl/BUILD.gn
+@@ -212,7 +212,7 @@ jumbo_component("gl") {
+ ]
+ }
+
+- if (is_posix && !is_fuchsia && !is_mac) {
++ if (is_posix && !is_fuchsia && !is_mac && !is_bsd) {
+ # Windows has USE_EGL but doesn't support base::FileDescriptor.
+ # libsync isn't supported or needed on MacOSX.
+ # Fuchsia is excluded due to a libsync dependency and because it's
diff --git a/devel/electron5/files/patch-ui_gl_generate__bindings.py b/devel/electron5/files/patch-ui_gl_generate__bindings.py
new file mode 100644
index 000000000000..fc0eadcba2a1
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_generate__bindings.py
@@ -0,0 +1,12 @@
+--- ui/gl/generate_bindings.py.orig 2019-04-08 08:33:23 UTC
++++ ui/gl/generate_bindings.py
+@@ -2624,6 +2624,9 @@ GLX_FUNCTIONS = [
+ 'arguments':
+ 'Display* dpy, GLXDrawable drawable, int32_t* numerator, '
+ 'int32_t* denominator' },
++{ 'return_type': '__GLXextFuncPtr',
++ 'names': ['glXGetProcAddressARB'],
++ 'arguments': 'const GLubyte* procName', },
+ { 'return_type': 'void',
+ 'names': ['glXGetSelectedEvent'],
+ 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
diff --git a/devel/electron5/files/patch-ui_gl_gl__bindings__api__autogen__glx.h b/devel/electron5/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
new file mode 100644
index 000000000000..785f1d44c419
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
@@ -0,0 +1,10 @@
+--- ui/gl/gl_bindings_api_autogen_glx.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gl/gl_bindings_api_autogen_glx.h
+@@ -88,6 +88,7 @@ bool glXGetMscRateOMLFn(Display* dpy,
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) override;
++__GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) override;
+ void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) override;
diff --git a/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.cc b/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.cc
new file mode 100644
index 000000000000..14200bfd1d76
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.cc
@@ -0,0 +1,61 @@
+--- ui/gl/gl_bindings_autogen_glx.cc.orig 2019-04-08 08:19:17 UTC
++++ ui/gl/gl_bindings_autogen_glx.cc
+@@ -115,6 +115,8 @@ void DriverGLX::InitializeExtensionBindings() {
+
+ ext.b_GLX_ARB_create_context =
+ gfx::HasExtension(extensions, "GLX_ARB_create_context");
++ ext.b_GLX_ARB_get_proc_address =
++ gfx::HasExtension(extensions, "GLX_ARB_get_proc_address");
+ ext.b_GLX_EXT_swap_control =
+ gfx::HasExtension(extensions, "GLX_EXT_swap_control");
+ ext.b_GLX_EXT_texture_from_pixmap =
+@@ -145,6 +147,11 @@ void DriverGLX::InitializeExtensionBindings() {
+ GetGLProcAddress("glXCreateContextAttribsARB"));
+ }
+
++ if (ext.b_GLX_ARB_get_proc_address) {
++ fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
++ GetGLProcAddress("glXGetProcAddressARB"));
++ }
++
+ if (ext.b_GLX_SGIX_fbconfig) {
+ fn.glXGetFBConfigFromVisualSGIXFn =
+ reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+@@ -346,6 +353,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
+ return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
++ return driver_->fn.glXGetProcAddressARBFn(procName);
++}
++
+ void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -646,6 +657,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
++ return glx_api_->glXGetProcAddressARBFn(procName);
++}
++
+ void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -1068,6 +1084,14 @@ bool DebugGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ << static_cast<const void*>(denominator) << ")");
+ bool result =
+ glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
++ GL_SERVICE_LOG("GL_RESULT: " << result);
++ return result;
++}
++
++__GLXextFuncPtr DebugGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ GL_SERVICE_LOG("glXGetProcAddressARB"
++ << "(" << static_cast<const void*>(procName) << ")");
++ __GLXextFuncPtr result = glx_api_->glXGetProcAddressARBFn(procName);
+ GL_SERVICE_LOG("GL_RESULT: " << result);
+ return result;
+ }
diff --git a/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.h b/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.h
new file mode 100644
index 000000000000..f31d727ea5d0
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_gl__bindings__autogen__glx.h
@@ -0,0 +1,43 @@
+--- ui/gl/gl_bindings_autogen_glx.h.orig 2019-04-08 08:19:17 UTC
++++ ui/gl/gl_bindings_autogen_glx.h
+@@ -104,6 +104,8 @@ typedef bool(GL_BINDING_CALL* glXGetMscRateOMLProc)(Di
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator);
++typedef __GLXextFuncPtr(GL_BINDING_CALL* glXGetProcAddressARBProc)(
++ const GLubyte* procName);
+ typedef void(GL_BINDING_CALL* glXGetSelectedEventProc)(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask);
+@@ -166,6 +168,7 @@ typedef void(GL_BINDING_CALL* glXWaitXProc)(void);
+
+ struct ExtensionsGLX {
+ bool b_GLX_ARB_create_context;
++ bool b_GLX_ARB_get_proc_address;
+ bool b_GLX_EXT_swap_control;
+ bool b_GLX_EXT_texture_from_pixmap;
+ bool b_GLX_MESA_copy_sub_buffer;
+@@ -203,6 +206,7 @@ struct ProcsGLX {
+ glXGetFBConfigFromVisualSGIXProc glXGetFBConfigFromVisualSGIXFn;
+ glXGetFBConfigsProc glXGetFBConfigsFn;
+ glXGetMscRateOMLProc glXGetMscRateOMLFn;
++ glXGetProcAddressARBProc glXGetProcAddressARBFn;
+ glXGetSelectedEventProc glXGetSelectedEventFn;
+ glXGetSyncValuesOMLProc glXGetSyncValuesOMLFn;
+ glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigFn;
+@@ -310,6 +314,7 @@ class GL_EXPORT GLXApi {
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) = 0;
++ virtual __GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) = 0;
+ virtual void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) = 0;
+@@ -394,6 +399,7 @@ class GL_EXPORT GLXApi {
+ ::gl::g_current_glx_context->glXGetFBConfigFromVisualSGIXFn
+ #define glXGetFBConfigs ::gl::g_current_glx_context->glXGetFBConfigsFn
+ #define glXGetMscRateOML ::gl::g_current_glx_context->glXGetMscRateOMLFn
++#define glXGetProcAddressARB ::gl::g_current_glx_context->glXGetProcAddressARBFn
+ #define glXGetSelectedEvent ::gl::g_current_glx_context->glXGetSelectedEventFn
+ #define glXGetSyncValuesOML ::gl::g_current_glx_context->glXGetSyncValuesOMLFn
+ #define glXGetVisualFromFBConfig \
diff --git a/devel/electron5/files/patch-ui_gl_gl__fence.cc b/devel/electron5/files/patch-ui_gl_gl__fence.cc
new file mode 100644
index 000000000000..e76adcbe9d77
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_gl__fence.cc
@@ -0,0 +1,11 @@
+--- ui/gl/gl_fence.cc.orig 2019-04-08 08:19:17 UTC
++++ ui/gl/gl_fence.cc
+@@ -18,7 +18,7 @@
+ #include "ui/gl/gl_fence_apple.h"
+ #endif
+
+-#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ #define USE_GL_FENCE_ANDROID_NATIVE_FENCE_SYNC
+ #include "ui/gl/gl_fence_android_native_fence_sync.h"
+ #include "ui/gl/gl_surface_egl.h"
diff --git a/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.cc b/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.cc
new file mode 100644
index 000000000000..039c8d485d00
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.cc
@@ -0,0 +1,43 @@
+--- ui/gl/sync_control_vsync_provider.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/gl/sync_control_vsync_provider.cc
+@@ -11,7 +11,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // These constants define a reasonable range for a calculated refresh interval.
+ // Calculating refreshes out of this range will be considered a fatal error.
+ const int64_t kMinVsyncIntervalUs = base::Time::kMicrosecondsPerSecond / 400;
+@@ -26,7 +26,7 @@ const double kRelativeIntervalDifferenceThreshold = 0.
+ namespace gl {
+
+ SyncControlVSyncProvider::SyncControlVSyncProvider() : gfx::VSyncProvider() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On platforms where we can't get an accurate reading on the refresh
+ // rate we fall back to the assumption that we're displaying 60 frames
+ // per second.
+@@ -48,7 +48,7 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ base::TimeTicks* timebase_out,
+ base::TimeDelta* interval_out) {
+ TRACE_EVENT0("gpu", "SyncControlVSyncProvider::GetVSyncParameters");
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The actual clock used for the system time returned by glXGetSyncValuesOML
+ // is unspecified. In practice, the clock used is likely to be either
+ // CLOCK_REALTIME or CLOCK_MONOTONIC, so we compare the returned time to the
+@@ -157,11 +157,11 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool SyncControlVSyncProvider::SupportGetVSyncParametersIfAvailable() const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.h b/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.h
new file mode 100644
index 000000000000..e113b28ecf49
--- /dev/null
+++ b/devel/electron5/files/patch-ui_gl_sync__control__vsync__provider.h
@@ -0,0 +1,34 @@
+--- ui/gl/sync_control_vsync_provider.h.orig 2019-04-08 08:33:23 UTC
++++ ui/gl/sync_control_vsync_provider.h
+@@ -26,11 +26,11 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ bool SupportGetVSyncParametersIfAvailable() const override;
+
+ static constexpr bool IsSupported() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ protected:
+@@ -41,7 +41,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0;
+
+ private:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeTicks last_timebase_;
+ uint64_t last_media_stream_counter_ = 0;
+ base::TimeDelta last_good_interval_;
+@@ -52,7 +52,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ // from configuration change (monitor reconfiguration, moving windows
+ // between monitors, suspend and resume, etc.).
+ base::queue<base::TimeDelta> last_computed_intervals_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
+ };
diff --git a/devel/electron5/files/patch-ui_message__center_public_cpp_message__center__constants.h b/devel/electron5/files/patch-ui_message__center_public_cpp_message__center__constants.h
new file mode 100644
index 000000000000..0608ec2a2107
--- /dev/null
+++ b/devel/electron5/files/patch-ui_message__center_public_cpp_message__center__constants.h
@@ -0,0 +1,11 @@
+--- ui/message_center/public/cpp/message_center_constants.h.orig 2019-04-08 08:33:23 UTC
++++ ui/message_center/public/cpp/message_center_constants.h
+@@ -101,7 +101,7 @@ const int kButtonHorizontalPadding = 16; // In DIPs.
+ const int kButtonIconTopPadding = 11; // In DIPs.
+ const int kButtonIconToTitlePadding = 16; // In DIPs.
+
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ constexpr SkColor kButtonSeparatorColor = SkColorSetRGB(234, 234, 234);
+ constexpr SkColor kHoveredButtonBackgroundColor = SkColorSetRGB(243, 243, 243);
+ #endif
diff --git a/devel/electron5/files/patch-ui_message__center_views_message__popup__view.cc b/devel/electron5/files/patch-ui_message__center_views_message__popup__view.cc
new file mode 100644
index 000000000000..8028f1841d1f
--- /dev/null
+++ b/devel/electron5/files/patch-ui_message__center_views_message__popup__view.cc
@@ -0,0 +1,11 @@
+--- ui/message_center/views/message_popup_view.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/message_center/views/message_popup_view.cc
+@@ -114,7 +114,7 @@ void MessagePopupView::AutoCollapse() {
+ void MessagePopupView::Show() {
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ params.keep_on_top = true;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ params.opacity = views::Widget::InitParams::OPAQUE_WINDOW;
+ #else
+ params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
diff --git a/devel/electron5/files/patch-ui_native__theme_native__theme.h b/devel/electron5/files/patch-ui_native__theme_native__theme.h
new file mode 100644
index 000000000000..224a44acdce1
--- /dev/null
+++ b/devel/electron5/files/patch-ui_native__theme_native__theme.h
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme.h.orig 2019-04-08 08:33:23 UTC
++++ ui/native_theme/native_theme.h
+@@ -48,7 +48,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
+ // The part to be painted / sized.
+ enum Part {
+ kCheckbox,
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ kFrameTopArea,
+ #endif
+ kInnerSpinButton,
diff --git a/devel/electron5/files/patch-ui_native__theme_native__theme__base.cc b/devel/electron5/files/patch-ui_native__theme_native__theme__base.cc
new file mode 100644
index 000000000000..5d4023386285
--- /dev/null
+++ b/devel/electron5/files/patch-ui_native__theme_native__theme__base.cc
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme_base.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/native_theme/native_theme_base.cc
+@@ -172,7 +172,7 @@ void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
+ case kCheckbox:
+ PaintCheckbox(canvas, state, rect, extra.button);
+ break;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case kFrameTopArea:
+ PaintFrameTopArea(canvas, state, rect, extra.frame_top_area);
+ break;
diff --git a/devel/electron5/files/patch-ui_strings_app__locale__settings.grd b/devel/electron5/files/patch-ui_strings_app__locale__settings.grd
new file mode 100644
index 000000000000..8cf98ec05f98
--- /dev/null
+++ b/devel/electron5/files/patch-ui_strings_app__locale__settings.grd
@@ -0,0 +1,11 @@
+--- ui/strings/app_locale_settings.grd.orig 2019-04-08 08:19:17 UTC
++++ ui/strings/app_locale_settings.grd
+@@ -187,7 +187,7 @@
+ 75%
+ </message>
+ </if>
+- <if expr="(is_linux or is_android or is_bsd) and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <!-- The font used in Web UI (e.g. History). Note that these are only
+ backups. We try to use the system font if possible. -->
+ <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true">
diff --git a/devel/electron5/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc b/devel/electron5/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
new file mode 100644
index 000000000000..2b7574f2be16
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/bubble/bubble_dialog_delegate_view.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/bubble/bubble_dialog_delegate_view.cc
+@@ -112,7 +112,7 @@ Widget* BubbleDialogDelegateView::CreateBubble(
+ bubble_delegate->SetAnchorView(bubble_delegate->GetAnchorView());
+ Widget* bubble_widget = CreateBubbleWidget(bubble_delegate);
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Linux clips bubble windows that extend outside their parent window bounds.
+ // Mac never adjusts.
+ bubble_delegate->set_adjust_if_offscreen(false);
diff --git a/devel/electron5/files/patch-ui_views_controls_label.cc b/devel/electron5/files/patch-ui_views_controls_label.cc
new file mode 100644
index 000000000000..cd96a1096ab7
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_controls_label.cc
@@ -0,0 +1,20 @@
+--- ui/views/controls/label.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/controls/label.cc
+@@ -542,7 +542,7 @@ bool Label::OnMousePressed(const ui::MouseEvent& event
+ GetFocusManager()->SetFocusedView(this);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (event.IsOnlyMiddleMouseButton() && GetFocusManager() && !had_focus)
+ GetFocusManager()->SetFocusedView(this);
+ #endif
+@@ -727,7 +727,7 @@ bool Label::PasteSelectionClipboard() {
+ }
+
+ void Label::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!obscured()) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron5/files/patch-ui_views_controls_textfield_textfield.cc b/devel/electron5/files/patch-ui_views_controls_textfield_textfield.cc
new file mode 100644
index 000000000000..21aa5d89b843
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_controls_textfield_textfield.cc
@@ -0,0 +1,73 @@
+--- ui/views/controls/textfield/textfield.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/controls/textfield/textfield.cc
+@@ -59,7 +59,7 @@
+ #include "base/win/win_util.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "base/strings/utf_string_conversions.h"
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+@@ -162,14 +162,14 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::Ke
+ case ui::VKEY_BACK:
+ if (!control)
+ return ui::TextEditCommand::DELETE_BACKWARD;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift)
+ return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
+ #endif
+ return ui::TextEditCommand::DELETE_WORD_BACKWARD;
+ case ui::VKEY_DELETE:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift && control)
+ return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
+@@ -228,7 +228,7 @@ bool IsControlKeyModifier(int flags) {
+ // Control-modified key combination, but we cannot extend it to other platforms
+ // as Control has different meanings and behaviors.
+ // https://crrev.com/2580483002/#msg46
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return flags & ui::EF_CONTROL_DOWN;
+ #else
+ return false;
+@@ -682,7 +682,7 @@ bool Textfield::OnMousePressed(const ui::MouseEvent& e
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!handled && !had_focus && event.IsOnlyMiddleMouseButton())
+ RequestFocusWithPointer(ui::EventPointerType::POINTER_TYPE_MOUSE);
+ #endif
+@@ -726,7 +726,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event
+ if (!textfield)
+ return handled;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
+@@ -894,7 +894,7 @@ void Textfield::AboutToRequestFocusFromTabTraversal(bo
+ }
+
+ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Skip any accelerator handling that conflicts with custom keybindings.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+@@ -2076,7 +2076,7 @@ bool Textfield::PasteSelectionClipboard() {
+ }
+
+ void Textfield::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron5/files/patch-ui_views_corewm_tooltip__aura.cc b/devel/electron5/files/patch-ui_views_corewm_tooltip__aura.cc
new file mode 100644
index 000000000000..a79d1cf880df
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_corewm_tooltip__aura.cc
@@ -0,0 +1,11 @@
+--- ui/views/corewm/tooltip_aura.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/corewm/tooltip_aura.cc
+@@ -34,7 +34,7 @@ const int kCursorOffsetY = 15;
+
+ // TODO(varkha): Update if native widget can be transparent on Linux.
+ bool CanUseTranslucentTooltipWidget() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ return false;
+ #else
+ return true;
diff --git a/devel/electron5/files/patch-ui_views_examples_widget__example.cc b/devel/electron5/files/patch-ui_views_examples_widget__example.cc
new file mode 100644
index 000000000000..0535628576ce
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_examples_widget__example.cc
@@ -0,0 +1,11 @@
+--- ui/views/examples/widget_example.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/examples/widget_example.cc
+@@ -79,7 +79,7 @@ void WidgetExample::CreateExampleView(View* container)
+ BuildButton(container, "Popup widget", POPUP);
+ BuildButton(container, "Dialog widget", DIALOG);
+ BuildButton(container, "Modal Dialog", MODAL_DIALOG);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Windows does not support TYPE_CONTROL top-level widgets.
+ BuildButton(container, "Child widget", CHILD);
+ #endif
diff --git a/devel/electron5/files/patch-ui_views_selection__controller.cc b/devel/electron5/files/patch-ui_views_selection__controller.cc
new file mode 100644
index 000000000000..88c625fe68ba
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_selection__controller.cc
@@ -0,0 +1,11 @@
+--- ui/views/selection_controller.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/selection_controller.cc
+@@ -20,7 +20,7 @@ SelectionController::SelectionController(SelectionCont
+ delegate_(delegate),
+ handles_selection_clipboard_(false) {
+ // On Linux, update the selection clipboard on a text selection.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_handles_selection_clipboard(true);
+ #endif
+
diff --git a/devel/electron5/files/patch-ui_views_style_platform__style.cc b/devel/electron5/files/patch-ui_views_style_platform__style.cc
new file mode 100644
index 000000000000..bf650a418e06
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_style_platform__style.cc
@@ -0,0 +1,11 @@
+--- ui/views/style/platform_style.cc.orig 2019-04-08 08:19:19 UTC
++++ ui/views/style/platform_style.cc
+@@ -18,7 +18,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define DESKTOP_LINUX
+ #endif
+
diff --git a/devel/electron5/files/patch-ui_views_views__delegate.cc b/devel/electron5/files/patch-ui_views_views__delegate.cc
new file mode 100644
index 000000000000..a608f985187b
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_views__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/views_delegate.cc
+@@ -85,7 +85,7 @@ HICON ViewsDelegate::GetSmallWindowIcon() const {
+ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return nullptr;
+ }
diff --git a/devel/electron5/files/patch-ui_views_views__delegate.h b/devel/electron5/files/patch-ui_views_views__delegate.h
new file mode 100644
index 000000000000..9b724836d4c8
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.h.orig 2019-04-08 08:33:23 UTC
++++ ui/views/views_delegate.h
+@@ -146,7 +146,7 @@ class VIEWS_EXPORT ViewsDelegate {
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_FREEBSD)
+ virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
+ #endif
+
diff --git a/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc b/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
new file mode 100644
index 000000000000..eea463ebd9be
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
@@ -0,0 +1,20 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+@@ -89,7 +89,7 @@ void DesktopWindowTreeHostPlatform::OnNativeWidgetCrea
+ const Widget::InitParams& params) {
+ native_widget_delegate_->OnNativeWidgetCreated();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Setup a non_client_window_event_filter, which handles resize/move, double
+ // click and other events.
+ DCHECK(!non_client_window_event_filter_);
+@@ -540,7 +540,7 @@ void DesktopWindowTreeHostPlatform::Relayout() {
+ }
+
+ void DesktopWindowTreeHostPlatform::RemoveNonClientEventFilter() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!non_client_window_event_filter_)
+ return;
+
diff --git a/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h b/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
new file mode 100644
index 000000000000..c0bd14af5505
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
@@ -0,0 +1,11 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h.orig 2019-04-08 08:19:19 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
+@@ -119,7 +119,7 @@ class VIEWS_EXPORT DesktopWindowTreeHostPlatform
+
+ bool is_active_ = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A handler for events intended for non client area.
+ std::unique_ptr<WindowEventFilter> non_client_window_event_filter_;
+ #endif
diff --git a/devel/electron5/files/patch-ui_views_window_custom__frame__view.cc b/devel/electron5/files/patch-ui_views_window_custom__frame__view.cc
new file mode 100644
index 000000000000..6edd78d825db
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_window_custom__frame__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/custom_frame_view.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/window/custom_frame_view.cc
+@@ -305,7 +305,7 @@ int CustomFrameView::NonClientTopBorderHeight() const
+ int CustomFrameView::CaptionButtonY() const {
+ // Maximized buttons start at window top so that even if their images aren't
+ // drawn flush with the screen edge, they still obey Fitts' Law.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD)
+ return FrameBorderThickness();
+ #else
+ return frame_->IsMaximized() ? FrameBorderThickness() : kFrameShadowThickness;
diff --git a/devel/electron5/files/patch-ui_views_window_dialog__delegate.cc b/devel/electron5/files/patch-ui_views_window_dialog__delegate.cc
new file mode 100644
index 000000000000..c5cdd41aa27c
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_window_dialog__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/dialog_delegate.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/window/dialog_delegate.cc
+@@ -64,7 +64,7 @@ Widget::InitParams DialogDelegate::GetDialogWidgetInit
+ params.bounds = bounds;
+ DialogDelegate* dialog = delegate->AsDialogDelegate();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // The new style doesn't support unparented dialogs on Linux desktop.
+ if (dialog)
+ dialog->supports_custom_frame_ &= parent != NULL;
diff --git a/devel/electron5/files/patch-ui_views_window_frame__background.cc b/devel/electron5/files/patch-ui_views_window_frame__background.cc
new file mode 100644
index 000000000000..e05c5cfbd54f
--- /dev/null
+++ b/devel/electron5/files/patch-ui_views_window_frame__background.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/frame_background.cc.orig 2019-04-08 08:33:23 UTC
++++ ui/views/window/frame_background.cc
+@@ -122,7 +122,7 @@ void FrameBackground::PaintMaximized(gfx::Canvas* canv
+ const View* view) const {
+ // Fill the top with the frame color first so we have a constant background
+ // for areas not covered by the theme image.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ auto* native_theme = view->GetNativeTheme();
+ ui::NativeTheme::ExtraParams params;
+ params.frame_top_area.use_custom_frame = use_custom_frame_;
diff --git a/devel/electron5/files/patch-ui_webui_resources_js_cr.js b/devel/electron5/files/patch-ui_webui_resources_js_cr.js
new file mode 100644
index 000000000000..d40813627944
--- /dev/null
+++ b/devel/electron5/files/patch-ui_webui_resources_js_cr.js
@@ -0,0 +1,14 @@
+--- ui/webui/resources/js/cr.js.orig 2019-04-08 08:19:20 UTC
++++ ui/webui/resources/js/cr.js
+@@ -463,6 +463,11 @@ var cr = cr || function(global) {
+ get doc() {
+ return document;
+ },
++
++ /** Whether this is on *BSD. */
++ get isBSD() {
++ return /BSD/.test(navigator.userAgent);
++ },
+
+ /** Whether we are using a Mac or not. */
+ get isMac() {
diff --git a/devel/electron5/files/patch-ui_webui_resources_js_icon.js b/devel/electron5/files/patch-ui_webui_resources_js_icon.js
new file mode 100644
index 000000000000..4572999d12ab
--- /dev/null
+++ b/devel/electron5/files/patch-ui_webui_resources_js_icon.js
@@ -0,0 +1,11 @@
+--- ui/webui/resources/js/icon.js.orig 2019-04-08 08:19:20 UTC
++++ ui/webui/resources/js/icon.js
+@@ -14,7 +14,7 @@ cr.define('cr.icon', function() {
+ // supports SCALE_FACTOR_100P on all non-iOS platforms.
+ supportedScaleFactors.push(1);
+ }
+- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
++ if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux || cr.isBSD) {
+ // All desktop platforms support zooming which also updates the renderer's
+ // device scale factors (a.k.a devicePixelRatio), and these platforms have
+ // high DPI assets for 2x. Let the renderer pick the closest image for
diff --git a/devel/electron5/files/patch-v8_BUILD.gn b/devel/electron5/files/patch-v8_BUILD.gn
new file mode 100644
index 000000000000..0daa98351092
--- /dev/null
+++ b/devel/electron5/files/patch-v8_BUILD.gn
@@ -0,0 +1,32 @@
+--- v8/BUILD.gn.orig 2019-06-10 07:45:01 UTC
++++ v8/BUILD.gn
+@@ -3177,7 +3177,7 @@ v8_component("v8_libbase") {
+ }
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/base/debug/stack_trace_posix.cc",
+ "src/base/platform/platform-linux.cc",
+@@ -3197,6 +3197,12 @@ v8_component("v8_libbase") {
+ "dl",
+ "rt",
+ ]
++ } else if (is_bsd) {
++ sources += [
++ "src/base/debug/stack_trace_posix.cc",
++ "src/base/platform/platform-freebsd.cc",
++ ]
++ libs = [ "rt", "execinfo" ]
+ } else if (is_android) {
+ if (current_toolchain == host_toolchain) {
+ libs = [
+@@ -3399,6 +3405,7 @@ if (v8_use_snapshot && current_toolchain == v8_snapsho
+ "src/snapshot/embedded-file-writer.h",
+ "src/snapshot/mksnapshot.cc",
+ ]
++ libs = ["execinfo"]
+
+ configs = [ ":internal_config" ]
+
diff --git a/devel/electron5/files/patch-v8_src_api.cc b/devel/electron5/files/patch-v8_src_api.cc
new file mode 100644
index 000000000000..ac092b1698aa
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_api.cc
@@ -0,0 +1,20 @@
+--- v8/src/api.cc.orig 2019-04-09 12:48:20 UTC
++++ v8/src/api.cc
+@@ -107,7 +107,7 @@
+ #include "src/wasm/wasm-result.h"
+ #include "src/wasm/wasm-serialization.h"
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ #include <signal.h>
+ #include "include/v8-wasm-trap-handler-posix.h"
+ #include "src/trap-handler/handler-inside-posix.h"
+@@ -5835,7 +5835,7 @@ bool v8::V8::Initialize() {
+ return true;
+ }
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
+ void* context) {
+ #if V8_TARGET_ARCH_X64 && !V8_OS_ANDROID
diff --git a/devel/electron5/files/patch-v8_src_base_cpu.cc b/devel/electron5/files/patch-v8_src_base_cpu.cc
new file mode 100644
index 000000000000..7faa79f7ae34
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- v8/src/base/cpu.cc.orig 2019-04-08 08:26:55 UTC
++++ v8/src/base/cpu.cc
+@@ -424,6 +424,7 @@ CPU::CPU()
+
+ #if V8_OS_LINUX
+
++#if V8_OS_LINUX
+ CPUInfo cpu_info;
+
+ // Extract implementor from the "CPU implementer" field.
+@@ -457,6 +458,7 @@ CPU::CPU()
+ }
+ delete[] part;
+ }
++#endif
+
+ // Extract architecture from the "CPU Architecture" field.
+ // The list is well-known, unlike the the output of
diff --git a/devel/electron5/files/patch-v8_src_base_platform_platform-posix.cc b/devel/electron5/files/patch-v8_src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..b336d56e7650
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_base_platform_platform-posix.cc
@@ -0,0 +1,24 @@
+--- v8/src/base/platform/platform-posix.cc.orig 2019-04-08 08:34:40 UTC
++++ v8/src/base/platform/platform-posix.cc
+@@ -376,7 +376,7 @@ bool OS::DiscardSystemPages(void* address, size_t size
+
+ // static
+ bool OS::HasLazyCommits() {
+-#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX || V8_OS_FREEBSD
+ return true;
+ #else
+ // TODO(bbudge) Return true for all POSIX platforms.
+@@ -501,6 +501,12 @@ int OS::GetCurrentThreadId() {
+ return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+ return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++ return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++ return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++ return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+ return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/devel/electron5/files/patch-v8_src_external-reference-table.cc b/devel/electron5/files/patch-v8_src_external-reference-table.cc
new file mode 100644
index 000000000000..3badf885bec1
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_external-reference-table.cc
@@ -0,0 +1,11 @@
+--- v8/src/external-reference-table.cc.orig 2019-04-08 08:34:40 UTC
++++ v8/src/external-reference-table.cc
+@@ -9,7 +9,7 @@
+ #include "src/external-reference.h"
+ #include "src/ic/stub-cache.h"
+
+-#if defined(DEBUG) && defined(V8_OS_LINUX) && !defined(V8_OS_ANDROID)
++#if defined(DEBUG) && (defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)) && !defined(V8_OS_ANDROID)
+ #define SYMBOLIZE_FUNCTION
+ #include <execinfo.h>
+ #include <vector>
diff --git a/devel/electron5/files/patch-v8_src_log-utils.h b/devel/electron5/files/patch-v8_src_log-utils.h
new file mode 100644
index 000000000000..dc2ecb7eb5db
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_log-utils.h
@@ -0,0 +1,11 @@
+--- v8/src/log-utils.h.orig 2019-04-08 08:34:40 UTC
++++ v8/src/log-utils.h
+@@ -16,6 +16,8 @@
+ #include "src/flags.h"
+ #include "src/ostreams.h"
+
++#include <stdarg.h>
++
+ namespace v8 {
+ namespace internal {
+
diff --git a/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.cc b/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.cc
new file mode 100644
index 000000000000..d277319f093e
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.cc
@@ -0,0 +1,20 @@
+--- v8/src/trap-handler/handler-inside-posix.cc.orig 2019-04-08 08:26:55 UTC
++++ v8/src/trap-handler/handler-inside-posix.cc
+@@ -27,7 +27,7 @@
+
+ #include <signal.h>
+
+-#ifdef V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ #include <ucontext.h>
+ #elif V8_OS_MACOSX
+ #include <sys/ucontext.h>
+@@ -112,6 +112,8 @@ bool TryHandleSignal(int signum, siginfo_t* info, void
+ auto* context_rip = &uc->uc_mcontext.gregs[REG_RIP];
+ #elif V8_OS_MACOSX
+ auto* context_rip = &uc->uc_mcontext->__ss.__rip;
++#elif V8_OS_FREEBSD
++ auto* context_rip = &uc->uc_mcontext.mc_rip;
+ #else
+ #error Unsupported platform
+ #endif
diff --git a/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.h b/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.h
new file mode 100644
index 000000000000..9cd2bffa84a3
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_trap-handler_handler-inside-posix.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/handler-inside-posix.h.orig 2019-04-08 08:26:55 UTC
++++ v8/src/trap-handler/handler-inside-posix.h
+@@ -12,7 +12,7 @@ namespace v8 {
+ namespace internal {
+ namespace trap_handler {
+
+-#if V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ constexpr int kOobSignal = SIGSEGV;
+ #elif V8_OS_MACOSX
+ constexpr int kOobSignal = SIGBUS;
diff --git a/devel/electron5/files/patch-v8_src_trap-handler_trap-handler.h b/devel/electron5/files/patch-v8_src_trap-handler_trap-handler.h
new file mode 100644
index 000000000000..ed7aa9b98d2d
--- /dev/null
+++ b/devel/electron5/files/patch-v8_src_trap-handler_trap-handler.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/trap-handler.h.orig 2019-04-08 08:26:55 UTC
++++ v8/src/trap-handler/trap-handler.h
+@@ -23,6 +23,8 @@ namespace trap_handler {
+ #define V8_TRAP_HANDLER_SUPPORTED true
+ #elif V8_TARGET_ARCH_X64 && V8_OS_MACOSX
+ #define V8_TRAP_HANDLER_SUPPORTED true
++#elif V8_TARGET_ARCH_X64 && V8_OS_FREEBSD
++#define V8_TRAP_HANDLER_SUPPORTED true
+ #else
+ #define V8_TRAP_HANDLER_SUPPORTED false
+ #endif
diff --git a/devel/electron5/pkg-descr b/devel/electron5/pkg-descr
new file mode 100644
index 000000000000..bb5485e9e735
--- /dev/null
+++ b/devel/electron5/pkg-descr
@@ -0,0 +1,10 @@
+Build cross platform desktop apps with JavaScript, HTML, and CSS.
+
+It's easier than you think.
+
+If you can build a website, you can build a desktop app. Electron is a
+framework for creating native applications with web technologies like
+JavaScript, HTML, and CSS. It takes care of the hard parts so you can
+focus on the core of your application.
+
+WWW: https://electronjs.org/
diff --git a/devel/electron5/pkg-plist b/devel/electron5/pkg-plist
new file mode 100644
index 000000000000..73456e413aad
--- /dev/null
+++ b/devel/electron5/pkg-plist
@@ -0,0 +1,124 @@
+bin/electron%%ELECTRON_VER_MAJOR%%
+%%DATADIR%%/LICENSE
+%%DATADIR%%/LICENSES.chromium.html
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DRIVER%%%%DATADIR%%/chromedriver
+%%DATADIR%%/electron
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/mksnapshot
+%%DATADIR%%/natives_blob.bin
+%%DATADIR%%/node_headers/include/node/common.gypi
+%%DATADIR%%/node_headers/include/node/config.gypi
+%%DATADIR%%/node_headers/include/node/js_native_api.h
+%%DATADIR%%/node_headers/include/node/js_native_api_types.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform-export.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform.h
+%%DATADIR%%/node_headers/include/node/libplatform/v8-tracing.h
+%%DATADIR%%/node_headers/include/node/node.h
+%%DATADIR%%/node_headers/include/node/node_api.h
+%%DATADIR%%/node_headers/include/node/node_api_types.h
+%%DATADIR%%/node_headers/include/node/node_buffer.h
+%%DATADIR%%/node_headers/include/node/node_object_wrap.h
+%%DATADIR%%/node_headers/include/node/node_version.h
+%%DATADIR%%/node_headers/include/node/uv.h
+%%DATADIR%%/node_headers/include/node/uv/aix.h
+%%DATADIR%%/node_headers/include/node/uv/android-ifaddrs.h
+%%DATADIR%%/node_headers/include/node/uv/bsd.h
+%%DATADIR%%/node_headers/include/node/uv/darwin.h
+%%DATADIR%%/node_headers/include/node/uv/errno.h
+%%DATADIR%%/node_headers/include/node/uv/linux.h
+%%DATADIR%%/node_headers/include/node/uv/os390.h
+%%DATADIR%%/node_headers/include/node/uv/posix.h
+%%DATADIR%%/node_headers/include/node/uv/stdint-msvc2008.h
+%%DATADIR%%/node_headers/include/node/uv/sunos.h
+%%DATADIR%%/node_headers/include/node/uv/threadpool.h
+%%DATADIR%%/node_headers/include/node/uv/tree.h
+%%DATADIR%%/node_headers/include/node/uv/unix.h
+%%DATADIR%%/node_headers/include/node/uv/version.h
+%%DATADIR%%/node_headers/include/node/uv/win.h
+%%DATADIR%%/node_headers/include/node/v8-internal.h
+%%DATADIR%%/node_headers/include/node/v8-platform.h
+%%DATADIR%%/node_headers/include/node/v8-profiler.h
+%%DATADIR%%/node_headers/include/node/v8-testing.h
+%%DATADIR%%/node_headers/include/node/v8-util.h
+%%DATADIR%%/node_headers/include/node/v8-value-serializer-version.h
+%%DATADIR%%/node_headers/include/node/v8-version-string.h
+%%DATADIR%%/node_headers/include/node/v8-version.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-posix.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-win.h
+%%DATADIR%%/node_headers/include/node/v8.h
+%%DATADIR%%/node_headers/include/node/v8config.h
+%%DATADIR%%/node_headers/include/node/zconf.h
+%%DATADIR%%/node_headers/include/node/zlib.h
+%%DIST%%%%DATADIR%%/releases/SHASUMS256.txt
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/default_app.asar
+%%DATADIR%%/resources/electron.asar
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DATADIR%%/v8_context_snapshot_generator
+%%DATADIR%%/version
diff --git a/devel/electron6/Makefile b/devel/electron6/Makefile
new file mode 100644
index 000000000000..8a7ffd868151
--- /dev/null
+++ b/devel/electron6/Makefile
@@ -0,0 +1,302 @@
+# $FreeBSD$
+
+PORTNAME= electron
+DISTVERSIONPREFIX= v
+DISTVERSION= ${ELECTRON_VER:S/-beta./.b/}
+PORTREVISION= 1
+CATEGORIES= devel java
+MASTER_SITES= https://github.com/tagattie/FreeBSD-Electron/releases/download/v6.0.9/:chromium \
+ https://commondatastorage.googleapis.com/chromium-browser-official/:chromium_official \
+ https://commondatastorage.googleapis.com/chromium-nodejs/:chromium_node \
+ https://commondatastorage.googleapis.com/chromium-fonts/:chromium_testfonts
+PKGNAMESUFFIX= ${ELECTRON_VER_MAJOR}
+DISTFILES= chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
+ chromium-${CHROMIUM_OFFICIAL_VER}${EXTRACT_SUFX}:chromium_official \
+ ${CHROMIUM_NODE_MODULES_HASH}:chromium_node \
+ ${CHROMIUM_TEST_FONTS_HASH}:chromium_testfonts \
+ electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= tagattie@FreeBSD.org
+COMMENT= Build cross-platform desktop apps with JavaScript, HTML, and CSS
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/electron/LICENSE
+
+FETCH_DEPENDS= yarn-node12>0:www/yarn-node12
+EXTRACT_DEPENDS= yarn-node12>0:www/yarn-node12
+PATCH_DEPENDS= git:devel/git
+BUILD_DEPENDS= ${LOCALBASE}/bin/ar:devel/binutils \
+ gperf:devel/gperf \
+ yasm:devel/yasm \
+ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
+ node12>0:www/node12 \
+ npm-node12>0:www/npm-node12
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libatspi.so:accessibility/at-spi2-core \
+ libsnappy.so:archivers/snappy \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libdbus-1.so:devel/dbus \
+ libnotify.so:devel/libnotify \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libre2.so:devel/re2 \
+ liblcms2.so:graphics/lcms2 \
+ libdrm.so:graphics/libdrm \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libvpx.so:multimedia/libvpx \
+ libopenh264.so:multimedia/openh264 \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+RUN_DEPENDS= xdg-open:devel/xdg-utils
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}python-dbusmock>0:devel/py-python-dbusmock@${PY_FLAVOR} \
+ npm-node12>0:www/npm-node12
+
+USES= bison dos2unix gettext-tools gl gnome jpeg localbase:ldflags \
+ ninja pkgconfig python:2.7,build,test tar:xz xorg
+
+USE_GITHUB= yes
+GH_TAGNAME= ${DISTVERSIONPREFIX}${ELECTRON_VER}
+GH_TUPLE= nodejs:node:v${NODE_VER}:node
+
+# Official chromium version containing "gn" which is known to work
+CHROMIUM_OFFICIAL_VER= 76.0.3809.132
+# See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
+CHROMIUM_VER= 76.0.3809.146
+# See ${WRKSRC}/third_party/node/node_modules.tar.gz.sha1 for CHROMIUM_NODE_MODULES_HASH
+CHROMIUM_NODE_MODULES_HASH= 2dd750e768cec597fc018509009637819ae4549c
+# See ${WRKSRC}/third_party/test_fonts/test_fonts.tar.gz.sha1 for CHROMIUM_TEST_FONTS_HASH
+CHROMIUM_TEST_FONTS_HASH= a22de844e32a3f720d219e3911c3da3478039f89
+# See ${WRKSRC}/electron/DEPS for NODE_VER
+NODE_VER= 12.4.0
+
+NO_WRKSUBDIR= yes
+WRKSRC_SUBDIR= src
+
+DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
+
+DOS2UNIX_FILES= third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrandr \
+ xrender xscrnsaver xtst
+USE_GL= gl glesv2
+USE_GNOME= atk cairo pango gdkpixbuf2 gtk30 libxml2 libxslt
+USE_JAVA= yes
+JAVA_VERSION= 1.8
+JAVA_BUILD= yes
+
+USE_LDCONFIG= ${DATADIR}
+
+GN_ARGS+= clang_use_chrome_plugins=false \
+ enable_hangout_services_extension=true \
+ enable_nacl=false \
+ enable_one_click_signin=true \
+ enable_remoting=false \
+ fieldtrial_testing_like_official_build=true \
+ is_clang=true \
+ toolkit_views=true \
+ treat_warnings_as_errors=false \
+ use_allocator="none" \
+ use_allocator_shim=false \
+ use_aura=true \
+ use_custom_libcxx=false \
+ use_gnome_keyring=false \
+ use_jumbo_build=true \
+ use_lld=true \
+ use_sysroot=false \
+ use_system_freetype=true \
+ use_system_harfbuzz=true \
+ use_system_lcms2=true \
+ use_system_libdrm=true \
+ use_system_libjpeg=true \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
+
+ALL_TARGET= electron third_party/electron_node:headers
+MAKE_ARGS= -C out/${BUILDTYPE}
+MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
+ CPLUS_INCLUDE_PATH=${LOCALBASE}/include
+
+OPTIONS_DEFINE= CUPS DEBUG DIST DRIVER KERBEROS
+DIST_DESC= Build distribution zip files
+DRIVER_DESC= Install chromedriver
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO
+OPTIONS_DEFAULT= CUPS DRIVER KERBEROS ALSA
+OPTIONS_SUB= yes
+
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
+ALSA_VARS= GN_ARGS+=use_alsa=true
+ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
+
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+CUPS_VARS= GN_ARGS+=use_cups=true
+CUPS_VARS_OFF= GN_ARGS+=use_cups=false
+
+DEBUG_VARS= BUILDTYPE=Debug \
+ GN_ARGS+=is_component_build=false
+DEBUG_VARS_OFF= BUILDTYPE=Release
+
+DIST_IMPLIES= DRIVER
+
+DRIVER_ALL_TARGET= chromedriver
+
+KERBEROS_VARS= GN_ARGS+=use_kerberos=true
+KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
+PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
+
+POST_BUILD_TARGETS= licenses version
+POST_BUILD_DIST_TARGETS= electron_dist_zip electron_chromedriver_zip electron_mksnapshot_zip
+
+YARN_TIMESTAMP= 1589883499
+
+PLIST_SUB= ELECTRON_VER=${ELECTRON_VER} \
+ ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR}
+
+.include "Makefile.version"
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "amd64"
+PLIST_SUB+= AMD64=""
+.else
+PLIST_SUB+= AMD64="@comment "
+.endif
+
+.if ${ARCH} == "i386"
+PLIST_SUB+= I386=""
+.else
+PLIST_SUB+= I386="@comment "
+.endif
+
+pre-fetch:
+ @${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
+ if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} ]; \
+ then ${MKDIR} ${WRKDIR}; \
+ ${ECHO_CMD} 'yarn-offline-mirror "./yarn-offline-cache"' >> \
+ ${WRKDIR}/.yarnrc; \
+ ${CP} ${FILESDIR}/package.json ${FILESDIR}/yarn.lock ${WRKDIR}; \
+ cd ${WRKDIR} && ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache \
+ yarn --frozen-lockfile --ignore-scripts; \
+ ${MTREE_CMD} -cbnSp yarn-offline-cache | ${MTREE_CMD} -C | ${SED} \
+ -e 's:time=[0-9.]*:time=${YARN_TIMESTAMP}.000000000:' \
+ -e 's:\([gu]id\)=[0-9]*:\1=0:g' \
+ -e 's:flags=.*:flags=none:' \
+ -e 's:^\.:./yarn-offline-cache:' > yarn-offline-cache.mtree; \
+ ${TAR} cJf ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} \
+ @yarn-offline-cache.mtree; \
+ ${RM} -r ${WRKDIR}; \
+ fi
+
+post-extract:
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
+ ${RM} -r ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_OFFICIAL_VER}/tools/gn \
+ ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${PORTNAME}-${ELECTRON_VER} ${WRKSRC}/electron
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_node}-${NODE_VER} \
+ ${WRKSRC}/third_party/electron_node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/yarn-offline-cache ${WRKDIR}
+ ${ECHO_CMD} 'yarn-offline-mirror "../../../yarn-offline-cache"' >> ${WRKSRC}/electron/.yarnrc
+ cd ${WRKSRC}/electron && \
+ ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache yarn --frozen-lockfile --offline
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/node_modules ${WRKSRC}/third_party/node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/test_fonts ${WRKSRC}/third_party/test_fonts
+
+pre-patch:
+ ${SH} ${FILESDIR}/apply-electron-patches.sh ${WRKSRC}
+ # ${FIND} ${WRKSRC} -type f -name '*.orig' -print -delete
+ # ${FIND} ${WRKSRC} -type f -name '*~' -print -delete
+
+pre-configure:
+ # We used to remove bundled libraries to be sure that chromium uses
+ # system libraries and not shipped ones.
+ # cd ${WRKSRC} && ${PYTHON_CMD} \
+ #./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
+ ./build/linux/unbundle/replace_gn_files.py --system-libraries \
+ ffmpeg flac fontconfig freetype harfbuzz-ng libdrm libjpeg \
+ libusb libvpx libwebp libxml libxslt openh264 opus re2 snappy \
+ yasm || ${FALSE}
+
+do-configure:
+ # GN generator bootstrapping and generating ninja files
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
+ READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
+ ./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn gen out/${BUILDTYPE} \
+ --args='import("//electron/build/args/${BUILDTYPE:tl}.gn") ${GN_ARGS}'
+ # Setup nodejs dependency
+ ${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin
+ ${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin/node
+ # Setup java dependency
+ ${MKDIR} ${WRKDIR}/bin
+ ${LN} -sf ${LOCALBASE}/openjdk8/bin/java ${WRKDIR}/bin/java
+
+post-build:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_TARGETS}
+
+post-build-DIST-on:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_DIST_TARGETS}
+ cd ${WRKSRC}/out/${BUILDTYPE} && \
+ ${CP} chromedriver.zip chromedriver-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} dist.zip electron-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} mksnapshot.zip mksnapshot-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | ${SED} -e 's/ / */' > SHASUMS256.txt
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+.for f in electron mksnapshot v8_context_snapshot_generator
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/swiftshader
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/swiftshader/${f} ${STAGEDIR}${DATADIR}/swiftshader
+.endfor
+.for f in LICENSE LICENSES.chromium.html icudtl.dat natives_blob.bin snapshot_blob.bin v8_context_snapshot.bin version
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/locales
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/locales/*.pak ${STAGEDIR}${DATADIR}/locales
+ ${MKDIR} ${STAGEDIR}${DATADIR}/resources
+.for f in default_app.asar electron.asar
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/resources/${f} ${STAGEDIR}${DATADIR}/resources
+.endfor
+ cd ${WRKSRC}/out/${BUILDTYPE}/gen && ${COPYTREE_SHARE} node_headers ${STAGEDIR}${DATADIR}
+ ${RLN} ${STAGEDIR}${DATADIR}/electron ${STAGEDIR}${PREFIX}/bin/electron${PKGNAMESUFFIX}
+
+post-install-DIST-on:
+ ${MKDIR} ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/SHASUMS256.txt ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*-v${ELECTRON_VER}-freebsd-*.zip ${STAGEDIR}${DATADIR}/releases
+
+post-install-DRIVER-on:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chromedriver ${STAGEDIR}${DATADIR}
+
+do-test:
+ # Note 1: "npm install" will run before actual tests are executed
+ # Note 2: Xvfb or something similar is necessary for headless testing
+ cd ${WRKSRC}/electron && \
+ ${SETENV} ${TEST_ENV} ELECTRON_OUT_DIR=${BUILDTYPE} \
+ npm run test -- --ci
+
+.include <bsd.port.post.mk>
diff --git a/devel/electron6/Makefile.version b/devel/electron6/Makefile.version
new file mode 100644
index 000000000000..495941237b0c
--- /dev/null
+++ b/devel/electron6/Makefile.version
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+ELECTRON_VER= 6.1.12
+ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron6/distinfo b/devel/electron6/distinfo
new file mode 100644
index 000000000000..686cd68d484a
--- /dev/null
+++ b/devel/electron6/distinfo
@@ -0,0 +1,15 @@
+TIMESTAMP = 1589884179
+SHA256 (electron/chromium-76.0.3809.146.tar.xz) = 1538c7118fb94c1ba6b6da18f4b8f6a6d303dee855ee0e5c3f9025f17563f3cd
+SIZE (electron/chromium-76.0.3809.146.tar.xz) = 1355929024
+SHA256 (electron/chromium-76.0.3809.132.tar.xz) = d54e4640b5e399d170dffbc5bcff65157eb1b29314b94b5d808f727d9ce45241
+SIZE (electron/chromium-76.0.3809.132.tar.xz) = 728899912
+SHA256 (electron/2dd750e768cec597fc018509009637819ae4549c) = d63b5953e3e8a0d6b7ed344043f9ffe7a49ddcf4e591d59aebaf87e299360730
+SIZE (electron/2dd750e768cec597fc018509009637819ae4549c) = 4182260
+SHA256 (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 6e331676d098a57c53c1250821dc47ed84c47f823901bf30c4704df90d8a34be
+SIZE (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 17469927
+SHA256 (electron/electron-yarn-cache-6.1.12.tar.xz) = aa696f113e4f6a1a58621f9cc82d3980c4bc0cc7fefce5c4ea4157afea538bc4
+SIZE (electron/electron-yarn-cache-6.1.12.tar.xz) = 36875692
+SHA256 (electron/electron-electron-v6.1.12_GH0.tar.gz) = decf86dfc2e53f17d87b80f0922b5ce10cbd46a33fe1633743adbf65b10edf3a
+SIZE (electron/electron-electron-v6.1.12_GH0.tar.gz) = 4209015
+SHA256 (electron/nodejs-node-v12.4.0_GH0.tar.gz) = fc7df2a5cdb43b7a186f07a04e6b0f5c5c3b4c117f08185ffec3345613c71d94
+SIZE (electron/nodejs-node-v12.4.0_GH0.tar.gz) = 70296027
diff --git a/devel/electron6/files/apply-electron-patches.sh b/devel/electron6/files/apply-electron-patches.sh
new file mode 100644
index 000000000000..300c8166f223
--- /dev/null
+++ b/devel/electron6/files/apply-electron-patches.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+PATH=/bin:/usr/bin:/usr/local/bin
+
+PATCH_CMD="git apply"
+#PATCH_FLAGS="--numstat --check" # for debugging
+PATCH_FLAGS="--verbose --reject"
+
+WRKSRC=$1
+PATCH_CONF=${WRKSRC}/electron/patches/common/config.json
+
+PATCHD_REPOD_PAIRS=$(sed -e '1d; $d; /^$/d; s/[",]//g; s/: */:/' "${PATCH_CONF}")
+for prp in ${PATCHD_REPOD_PAIRS}; do
+ pd=$(echo "${prp}" | awk -F: '{print $1}' | sed -e 's/src/./')
+ rd=$(echo "${prp}" | awk -F: '{print $2}' | sed -e 's/src/./')
+ (cd "${WRKSRC}/${rd}" && \
+ while read -r p; do
+ ${PATCH_CMD} ${PATCH_FLAGS} "${WRKSRC}/${pd}/${p}"
+ done < "${WRKSRC}/${pd}/.patches")
+done
diff --git a/devel/electron6/files/package.json b/devel/electron6/files/package.json
new file mode 100644
index 000000000000..f5c5742f1eed
--- /dev/null
+++ b/devel/electron6/files/package.json
@@ -0,0 +1,135 @@
+{
+ "name": "electron",
+ "version": "6.1.12",
+ "repository": "https://github.com/electron/electron",
+ "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
+ "devDependencies": {
+ "@octokit/rest": "^16.3.2",
+ "@types/chai": "^4.1.7",
+ "@types/chai-as-promised": "^7.1.0",
+ "@types/express": "^4.16.1",
+ "@types/fs-extra": "^5.0.5",
+ "@types/mocha": "^5.2.6",
+ "@types/node": "^10.12.21",
+ "@types/split": "^1.0.0",
+ "@typescript-eslint/eslint-plugin": "^1.4.2",
+ "@typescript-eslint/parser": "^1.4.2",
+ "aliasify": "^2.1.0",
+ "asar": "^1.0.0",
+ "browserify": "^16.2.3",
+ "check-for-leaks": "^1.0.2",
+ "clang-format": "^1.2.3",
+ "colors": "^1.1.2",
+ "dotenv-safe": "^4.0.4",
+ "dugite": "^1.45.0",
+ "electron-docs-linter": "^3.0.1",
+ "electron-typescript-definitions": "^8.2.2",
+ "eslint": "^5.13.0",
+ "eslint-config-standard": "^12.0.0",
+ "eslint-plugin-import": "^2.17.2",
+ "eslint-plugin-mocha": "^5.2.0",
+ "eslint-plugin-node": "^8.0.1",
+ "eslint-plugin-standard": "^4.0.0",
+ "eslint-plugin-typescript": "^0.14.0",
+ "express": "^4.16.4",
+ "folder-hash": "^2.1.1",
+ "fs-extra": "^7.0.1",
+ "husky": "^0.14.3",
+ "klaw": "^3.0.0",
+ "lint": "^1.1.2",
+ "lint-staged": "^8.1.0",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "octicons": "^7.3.0",
+ "plist": "^3.0.1",
+ "pre-flight": "^1.1.0",
+ "remark-cli": "^4.0.0",
+ "remark-preset-lint-markdown-style-guide": "^2.1.1",
+ "request": "^2.88.0",
+ "semver": "^5.6.0",
+ "serve": "^6.5.8",
+ "shx": "^0.3.2",
+ "standard-markdown": "^5.0.0",
+ "sumchecker": "^2.0.2",
+ "temp": "^0.8.3",
+ "ts-node": "^6.0.3",
+ "tsify": "^4.0.1",
+ "typescript": "~3.3.3333"
+ },
+ "private": true,
+ "scripts": {
+ "asar": "asar",
+ "browserify": "browserify",
+ "bump-version": "./script/bump-version.js",
+ "check-tls": "python ./script/tls.py",
+ "clang-format": "find atom/ chromium_src/ -iname *.h -o -iname *.cc -o -iname *.mm | xargs clang-format -i",
+ "lint": "node ./script/lint.js && npm run lint:clang-format && npm run lint:docs",
+ "lint:js": "node ./script/lint.js --js",
+ "lint:clang-format": "python script/run-clang-format.py -r -c atom/ chromium_src/ || (echo \"\\nCode not formatted correctly.\" && exit 1)",
+ "lint:cpp": "node ./script/lint.js --cc",
+ "lint:py": "node ./script/lint.js --py",
+ "lint:gn": "node ./script/lint.js --gn",
+ "lint:docs": "remark docs -qf && npm run lint:js-in-markdown && npm run create-typescript-definitions && npm run lint:docs-relative-links && npm run lint:check-trailing-whitespace",
+ "lint:docs-relative-links": "python ./script/check-relative-doc-links.py",
+ "lint:check-trailing-whitespace": "python ./script/check-trailing-whitespace.py",
+ "lint:js-in-markdown": "standard-markdown docs",
+ "create-api-json": "electron-docs-linter docs --outfile=electron-api.json",
+ "create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --in=electron-api.json --out=electron.d.ts && node spec/ts-smoke/runner.js",
+ "gn-typescript-definitions": "npm run create-typescript-definitions && shx cp electron.d.ts",
+ "pre-flight": "pre-flight",
+ "preinstall": "node -e 'process.exit(0)'",
+ "precommit": "lint-staged",
+ "prepack": "check-for-leaks",
+ "prepush": "check-for-leaks",
+ "repl": "node ./script/start.js --interactive",
+ "start": "node ./script/start.js",
+ "test": "node ./script/spec-runner.js",
+ "tsc": "tsc"
+ },
+ "license": "MIT",
+ "author": "Electron Community",
+ "keywords": [
+ "electron"
+ ],
+ "aliasify": {
+ "replacements": {
+ "@electron/internal/(.+)": "./lib/$1"
+ },
+ "appliesTo": {
+ "includeExtensions": [
+ ".js",
+ ".ts"
+ ]
+ }
+ },
+ "lint-staged": {
+ "*.{js,ts}": [
+ "node script/lint.js --js --fix --only --",
+ "git add"
+ ],
+ "*.{js,ts,d.ts}": [
+ "node script/gen-filenames.js",
+ "git add"
+ ],
+ "*.{cc,mm,c,h}": [
+ "python script/run-clang-format.py -r -c --fix",
+ "git add"
+ ],
+ "*.md": [
+ "remark -qf"
+ ],
+ "*.{gn,gni}": [
+ "python script/run-gn-format.py",
+ "git add"
+ ],
+ "*.py": [
+ "node script/lint.js --py --fix --only --",
+ "git add"
+ ],
+ "docs/api/**/*.md": [
+ "node script/gen-filenames.js",
+ "python script/check-trailing-whitespace.py --fix",
+ "git add filenames.auto.gni"
+ ]
+ }
+}
diff --git a/devel/electron6/files/patch-BUILD.gn b/devel/electron6/files/patch-BUILD.gn
new file mode 100644
index 000000000000..a796b070c41e
--- /dev/null
+++ b/devel/electron6/files/patch-BUILD.gn
@@ -0,0 +1,95 @@
+--- BUILD.gn.orig 2019-09-10 11:13:30 UTC
++++ BUILD.gn
+@@ -386,7 +386,7 @@ group("gn_all") {
+ ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ deps += [
+ "//third_party/breakpad:breakpad_unittests",
+ "//third_party/breakpad:core-2-minidump",
+@@ -427,8 +427,6 @@ group("gn_all") {
+ "//net:disk_cache_memory_test",
+ "//net:quic_client",
+ "//net:quic_server",
+- "//sandbox/linux:chrome_sandbox",
+- "//sandbox/linux:sandbox_linux_unittests",
+ "//testing:empty_main",
+ ]
+
+@@ -483,10 +481,6 @@ group("gn_all") {
+ "//chrome/test:load_library_perf_tests",
+ "//chrome/test:sync_performance_tests",
+ "//chrome/test/chromedriver:chromedriver",
+- "//courgette:courgette",
+- "//courgette:courgette_fuzz",
+- "//courgette:courgette_minimal_tool",
+- "//courgette:courgette_unittests",
+ "//media/cast:generate_barcode_video",
+ "//media/cast:generate_timecode_audio",
+ "//net:crash_cache",
+@@ -541,10 +535,6 @@ group("gn_all") {
+ "//mojo:mojo_perftests",
+ "//services/service_manager/public/cpp",
+ "//testing/gmock:gmock_main",
+- "//third_party/breakpad:dump_syms($host_toolchain)",
+- "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+- "//third_party/breakpad:minidump_dump($host_toolchain)",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+
+ if (!is_android) {
+@@ -619,7 +609,7 @@ group("gn_all") {
+ host_os == "win") {
+ deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
+ }
+- } else if (!is_android && !is_ios && !is_fuchsia) {
++ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
+ deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+ }
+
+@@ -758,7 +748,6 @@ group("gn_all") {
+ "//chrome/browser/vr:vr_common_perftests",
+ "//chrome/browser/vr:vr_common_unittests",
+ "//chrome/browser/vr:vr_pixeltests",
+- "//tools/perf/contrib/vr_benchmarks:vr_perf_tests",
+ ]
+ if (is_desktop_linux && use_ozone) {
+ deps += [ "//chrome/browser/vr/testapp:vr_testapp" ]
+@@ -877,7 +866,6 @@ if (is_chromeos) {
+ "//ppapi/examples/video_decode",
+ "//sandbox/linux:chrome_sandbox",
+ "//sandbox/linux:sandbox_linux_unittests",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+
+ # Blocked on https://github.com/catapult-project/catapult/issues/2297
+ #"//third_party/catapult/telemetry:bitmaptools",
+@@ -1033,7 +1021,7 @@ if (!is_ios) {
+ ]
+ }
+
+- if (!is_win && !is_android) {
++ if (!is_win && !is_android && !is_bsd) {
+ data_deps +=
+ [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+@@ -1042,7 +1030,7 @@ if (!is_ios) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+@@ -1185,9 +1173,6 @@ group("chromium_builder_perf") {
+
+ if (is_win) {
+ data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
+- } else {
+- data_deps +=
+- [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+ if (is_win || is_android) {
+ data_deps += [
diff --git a/devel/electron6/files/patch-apps_ui_views_app__window__frame__view.cc b/devel/electron6/files/patch-apps_ui_views_app__window__frame__view.cc
new file mode 100644
index 000000000000..0a2a0a44c935
--- /dev/null
+++ b/devel/electron6/files/patch-apps_ui_views_app__window__frame__view.cc
@@ -0,0 +1,11 @@
+--- apps/ui/views/app_window_frame_view.cc.orig 2019-09-10 10:42:26 UTC
++++ apps/ui/views/app_window_frame_view.cc
+@@ -125,7 +125,7 @@ gfx::Rect AppWindowFrameView::GetBoundsForClientView()
+ gfx::Rect AppWindowFrameView::GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ gfx::Rect window_bounds = client_bounds;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Get the difference between the widget's client area bounds and window
+ // bounds, and grow |window_bounds| by that amount.
+ gfx::Insets native_frame_insets =
diff --git a/devel/electron6/files/patch-ash_display_mirror__window__controller.cc b/devel/electron6/files/patch-ash_display_mirror__window__controller.cc
new file mode 100644
index 000000000000..8b7a0cd355e9
--- /dev/null
+++ b/devel/electron6/files/patch-ash_display_mirror__window__controller.cc
@@ -0,0 +1,14 @@
+--- ash/display/mirror_window_controller.cc.orig 2019-09-10 10:42:26 UTC
++++ ash/display/mirror_window_controller.cc
+@@ -274,7 +274,11 @@ void MirrorWindowController::UpdateWindow(
+ return info.id() == iter->first;
+ }) == display_info_list.end()) {
+ CloseAndDeleteHost(iter->second, true);
++#if defined(__llvm__)
++ mirroring_host_info_map_.erase(iter++);
++#else
+ iter = mirroring_host_info_map_.erase(iter);
++#endif
+ } else {
+ ++iter;
+ }
diff --git a/devel/electron6/files/patch-base_BUILD.gn b/devel/electron6/files/patch-base_BUILD.gn
new file mode 100644
index 000000000000..ec0075851862
--- /dev/null
+++ b/devel/electron6/files/patch-base_BUILD.gn
@@ -0,0 +1,67 @@
+--- base/BUILD.gn.orig 2019-09-10 11:13:31 UTC
++++ base/BUILD.gn
+@@ -1258,7 +1258,7 @@ jumbo_component("base") {
+ # Needed for <atomic> if using newer C++ library than sysroot, except if
+ # building inside the cros_sdk environment - use host_toolchain as a
+ # more robust check for this.
+- if (!use_sysroot && (is_android || (is_linux && !is_chromecast)) &&
++ if (!use_sysroot && (is_android || (is_linux && !is_chromecast) && !is_clang) &&
+ host_toolchain != "//build/toolchain/cros:host") {
+ libs += [ "atomic" ]
+ }
+@@ -1284,7 +1284,7 @@ jumbo_component("base") {
+ "allocator/allocator_shim_override_glibc_weak_symbols.h",
+ ]
+ deps += [ "//base/allocator:tcmalloc" ]
+- } else if (is_linux && use_allocator == "none") {
++ } else if ((is_linux && !is_bsd) && use_allocator == "none") {
+ sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
+ } else if (is_android && use_allocator == "none") {
+ sources += [
+@@ -1862,6 +1862,33 @@ jumbo_component("base") {
+ }
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "files/file_path_watcher_linux.cc",
++ "files/file_util_linux.cc",
++ "process/memory_linux.cc",
++ "process/process_handle_linux.cc",
++ "process/process_iterator_linux.cc",
++ "process/process_metrics_linux.cc",
++ "system/sys_info_linux.cc"
++ ]
++ sources += [
++ "files/file_path_watcher_kqueue.cc",
++ "files/file_path_watcher_kqueue.h",
++ "files/file_path_watcher_stub.cc",
++ "process/memory_stubs.cc",
++ "process/process_handle_freebsd.cc",
++ "process/process_iterator_freebsd.cc",
++ "process/process_metrics_freebsd.cc",
++ "system/sys_info_freebsd.cc",
++ ]
++ libs = [
++ "execinfo", # logging.cc
++ "kvm", # process_metrics_freebsd
++ "util" # process_metrics_freebsd
++ ]
++ }
++
+ # iOS
+ if (is_ios) {
+ set_sources_assignment_filter([])
+@@ -2999,6 +3026,12 @@ test("base_unittests") {
+ ]
+ set_sources_assignment_filter(sources_assignment_filter)
+ }
++
++ if (is_bsd) {
++ sources -= [
++ "debug/proc_maps_linux_unittest.cc",
++ ]
++ }
+
+ if (is_win) {
+ deps += [ "//base:scoped_handle_test_dll" ]
diff --git a/devel/electron6/files/patch-base_allocator_allocator__shim.cc b/devel/electron6/files/patch-base_allocator_allocator__shim.cc
new file mode 100644
index 000000000000..adac3317fa52
--- /dev/null
+++ b/devel/electron6/files/patch-base_allocator_allocator__shim.cc
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim.cc.orig 2019-09-10 11:13:31 UTC
++++ base/allocator/allocator_shim.cc
+@@ -70,7 +70,7 @@ inline const base::allocator::AllocatorDispatch* GetCh
+ // Unfortunately due to that bug NoBarrier_Load() is mistakenly fully
+ // barriered on Linux+Clang, and that causes visible perf regressons.
+ return reinterpret_cast<const base::allocator::AllocatorDispatch*>(
+-#if defined(OS_LINUX) && defined(__clang__)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(__clang__)
+ *static_cast<const volatile base::subtle::AtomicWord*>(&g_chain_head)
+ #else
+ base::subtle::NoBarrier_Load(&g_chain_head)
diff --git a/devel/electron6/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc b/devel/electron6/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
new file mode 100644
index 000000000000..7fe4a32e0d17
--- /dev/null
+++ b/devel/electron6/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
@@ -0,0 +1,76 @@
+--- base/allocator/allocator_shim_default_dispatch_to_glibc.cc.orig 2019-09-10 10:42:26 UTC
++++ base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+@@ -5,18 +5,28 @@
+ #include "base/allocator/allocator_shim.h"
+
+ #include <dlfcn.h>
+-#include <malloc.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc_np.h>
+
+ // This translation unit defines a default dispatch for the allocator shim which
+ // routes allocations to libc functions.
+-// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
++// The code here is strongly inspired from tcmalloc's override_glibc.h.
+
+ extern "C" {
+-void* __libc_malloc(size_t size);
+-void* __libc_calloc(size_t n, size_t size);
+-void* __libc_realloc(void* address, size_t size);
+-void* __libc_memalign(size_t alignment, size_t size);
+-void __libc_free(void* ptr);
++void* __malloc(size_t size);
++void* __calloc(size_t n, size_t size);
++void* __realloc(void* address, size_t len);
++void* __memalign(size_t alignment, size_t size) {
++ void *ret;
++ if (__posix_memalign(&ret, alignment, size) != 0) {
++ return nullptr;
++ } else {
++ return ret;
++ }
++}
++int __posix_memalign(void **ptr, size_t alignment, size_t size);
++void __free(void* ptr);
+ } // extern "C"
+
+ namespace {
+@@ -24,32 +34,32 @@ namespace {
+ using base::allocator::AllocatorDispatch;
+
+ void* GlibcMalloc(const AllocatorDispatch*, size_t size, void* context) {
+- return __libc_malloc(size);
++ return __malloc(size);
+ }
+
+ void* GlibcCalloc(const AllocatorDispatch*,
+ size_t n,
+ size_t size,
+ void* context) {
+- return __libc_calloc(n, size);
++ return __calloc(n, size);
+ }
+
+ void* GlibcRealloc(const AllocatorDispatch*,
+ void* address,
+ size_t size,
+ void* context) {
+- return __libc_realloc(address, size);
++ return __realloc(address, size);
+ }
+
+ void* GlibcMemalign(const AllocatorDispatch*,
+ size_t alignment,
+ size_t size,
+ void* context) {
+- return __libc_memalign(alignment, size);
++ return __memalign(alignment, size);
+ }
+
+ void GlibcFree(const AllocatorDispatch*, void* address, void* context) {
+- __libc_free(address);
++ __free(address);
+ }
+
+ size_t GlibcGetSizeEstimate(const AllocatorDispatch*,
diff --git a/devel/electron6/files/patch-base_allocator_allocator__shim__override__libc__symbols.h b/devel/electron6/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
new file mode 100644
index 000000000000..f82530fb8050
--- /dev/null
+++ b/devel/electron6/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim_override_libc_symbols.h.orig 2019-09-10 10:42:26 UTC
++++ base/allocator/allocator_shim_override_libc_symbols.h
+@@ -10,7 +10,7 @@
+ #endif
+ #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_LIBC_SYMBOLS_H_
+
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "base/allocator/allocator_shim_internals.h"
+
diff --git a/devel/electron6/files/patch-base_allocator_allocator__shim__unittest.cc b/devel/electron6/files/patch-base_allocator_allocator__shim__unittest.cc
new file mode 100644
index 000000000000..f9259057a4ca
--- /dev/null
+++ b/devel/electron6/files/patch-base_allocator_allocator__shim__unittest.cc
@@ -0,0 +1,36 @@
+--- base/allocator/allocator_shim_unittest.cc.orig 2019-09-10 10:42:26 UTC
++++ base/allocator/allocator_shim_unittest.cc
+@@ -348,7 +348,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_size[61], 1u);
+ #endif // !OS_WIN
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void* memalign_ptr = memalign(128, 53);
+ ASSERT_NE(nullptr, memalign_ptr);
+ ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(memalign_ptr) % 128);
+@@ -361,7 +361,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_alignment[kPageSize], 1u);
+ // pvalloc rounds the size up to the next page.
+ ASSERT_GE(aligned_allocs_intercepted_by_size[kPageSize], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ char* realloc_ptr = static_cast<char*>(malloc(10));
+ strcpy(realloc_ptr, "foobar");
+@@ -377,13 +377,13 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ free(zero_alloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(zero_alloc_ptr)], 1u);
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ free(memalign_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
+
+ free(pvalloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ #if !defined(OS_WIN)
+ free(posix_memalign_ptr);
diff --git a/devel/electron6/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h b/devel/electron6/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..bd3157dd56b5
--- /dev/null
+++ b/devel/electron6/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,11 @@
+--- base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-09-10 11:13:31 UTC
++++ base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -16,7 +16,7 @@
+
+ #include <mach/mach.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_BSD) || defined(OS_LINUX)
+ #include <sys/resource.h>
+
+ #include <algorithm>
diff --git a/devel/electron6/files/patch-base_base__switches.cc b/devel/electron6/files/patch-base_base__switches.cc
new file mode 100644
index 000000000000..e9e2538d3252
--- /dev/null
+++ b/devel/electron6/files/patch-base_base__switches.cc
@@ -0,0 +1,20 @@
+--- base/base_switches.cc.orig 2019-09-10 11:13:31 UTC
++++ base/base_switches.cc
+@@ -107,7 +107,7 @@ const char kProfilingFlush[] = "profiling-flush";
+ const char kDisableUsbKeyboardDetect[] = "disable-usb-keyboard-detect";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The /dev/shm partition is too small in certain VM environments, causing
+ // Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
+ // work-around this issue (a temporary directory will always be used to create
+@@ -128,7 +128,7 @@ const char kEnableCrashReporterForTesting[] =
+ const char kEnableReachedCodeProfiler[] = "enable-reached-code-profiler";
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Controls whether or not retired instruction counts are surfaced for threads
+ // in trace events on Linux.
+ //
diff --git a/devel/electron6/files/patch-base_base__switches.h b/devel/electron6/files/patch-base_base__switches.h
new file mode 100644
index 000000000000..783350718c07
--- /dev/null
+++ b/devel/electron6/files/patch-base_base__switches.h
@@ -0,0 +1,20 @@
+--- base/base_switches.h.orig 2019-09-10 11:13:31 UTC
++++ base/base_switches.h
+@@ -36,7 +36,7 @@ extern const char kWaitForDebugger[];
+ extern const char kDisableUsbKeyboardDetect[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kDisableDevShmUsage[];
+ #endif
+
+@@ -49,7 +49,7 @@ extern const char kEnableReachedCodeProfiler[];
+ extern const char kOrderfileMemoryOptimization[];
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kEnableThreadInstructionCount[];
+ #endif
+
diff --git a/devel/electron6/files/patch-base_cpu.cc b/devel/electron6/files/patch-base_cpu.cc
new file mode 100644
index 000000000000..9fcc9b111de7
--- /dev/null
+++ b/devel/electron6/files/patch-base_cpu.cc
@@ -0,0 +1,38 @@
+--- base/cpu.cc.orig 2019-09-10 11:13:31 UTC
++++ base/cpu.cc
+@@ -15,7 +15,7 @@
+ #include "base/stl_util.h"
+ #include "build/build_config.h"
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/files/file_util.h"
+ #endif
+
+@@ -97,7 +97,7 @@ uint64_t xgetbv(uint32_t xcr) {
+
+ #endif // ARCH_CPU_X86_FAMILY
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ std::string* CpuInfoBrand() {
+ static std::string* brand = []() {
+ // This function finds the value from /proc/cpuinfo under the key "model
+@@ -127,7 +127,7 @@ std::string* CpuInfoBrand() {
+ return brand;
+ }
+ #endif // defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) ||
+- // defined(OS_LINUX))
++ // defined(OS_LINUX) || defined(OS_BSD))
+
+ } // namespace
+
+@@ -252,7 +252,7 @@ void CPU::Initialize() {
+ }
+ }
+ #elif defined(ARCH_CPU_ARM_FAMILY)
+-#if (defined(OS_ANDROID) || defined(OS_LINUX))
++#if (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ cpu_brand_ = *CpuInfoBrand();
+ #elif defined(OS_WIN)
+ // Windows makes high-resolution thread timing information available in
diff --git a/devel/electron6/files/patch-base_debug_debugger__posix.cc b/devel/electron6/files/patch-base_debug_debugger__posix.cc
new file mode 100644
index 000000000000..1c7702c70ed6
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_debugger__posix.cc
@@ -0,0 +1,56 @@
+--- base/debug/debugger_posix.cc.orig 2019-09-10 11:13:31 UTC
++++ base/debug/debugger_posix.cc
+@@ -87,7 +87,7 @@ bool BeingDebugged() {
+ KERN_PROC,
+ KERN_PROC_PID,
+ getpid()
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ , sizeof(struct kinfo_proc),
+ 0
+ #endif
+@@ -95,33 +95,35 @@ bool BeingDebugged() {
+
+ // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
+ // binary interfaces may change.
+- struct kinfo_proc info;
+- size_t info_size = sizeof(info);
++ struct kinfo_proc *info;
++ size_t info_size;
+
+-#if defined(OS_OPENBSD)
+ if (sysctl(mib, base::size(mib), NULL, &info_size, NULL, 0) < 0)
+ return -1;
+
++ info = (struct kinfo_proc *)malloc(info_size);
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+-#endif
+
+- int sysctl_result = sysctl(mib, base::size(mib), &info, &info_size, NULL, 0);
++ int sysctl_result = sysctl(mib, base::size(mib), info, &info_size, NULL, 0);
+ DCHECK_EQ(sysctl_result, 0);
+ if (sysctl_result != 0) {
+ is_set = true;
+ being_debugged = false;
+- return being_debugged;
++ goto out;
+ }
+
+ // This process is being debugged if the P_TRACED flag is set.
+ is_set = true;
+ #if defined(OS_FREEBSD)
+- being_debugged = (info.ki_flag & P_TRACED) != 0;
++ being_debugged = (info->ki_flag & P_TRACED) != 0;
+ #elif defined(OS_BSD)
+- being_debugged = (info.p_flag & P_TRACED) != 0;
++ being_debugged = (info->p_flag & P_TRACED) != 0;
+ #else
+- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
++ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0;
+ #endif
++
++out:
++ free(info);
+ return being_debugged;
+ }
+
diff --git a/devel/electron6/files/patch-base_debug_elf__reader.cc b/devel/electron6/files/patch-base_debug_elf__reader.cc
new file mode 100644
index 000000000000..f9d6f2fa0a2e
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_elf__reader.cc
@@ -0,0 +1,18 @@
+--- base/debug/elf_reader.cc.orig 2019-09-10 10:42:27 UTC
++++ base/debug/elf_reader.cc
+@@ -83,6 +83,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ reinterpret_cast<const Nhdr*>(elf_base + header.p_vaddr);
+ bool found = false;
+ while (current_note < section_end) {
++#if !defined(OS_BSD)
+ if (current_note->n_type == NT_GNU_BUILD_ID) {
+ const char* note_name =
+ reinterpret_cast<const char*>(current_note) + sizeof(Nhdr);
+@@ -92,6 +93,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ break;
+ }
+ }
++#endif
+
+ current_note = reinterpret_cast<const Nhdr*>(
+ reinterpret_cast<const char*>(current_note) + sizeof(Nhdr) +
diff --git a/devel/electron6/files/patch-base_debug_proc__maps__linux.cc b/devel/electron6/files/patch-base_debug_proc__maps__linux.cc
new file mode 100644
index 000000000000..f00b430389aa
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_proc__maps__linux.cc
@@ -0,0 +1,11 @@
+--- base/debug/proc_maps_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/debug/proc_maps_linux.cc
+@@ -12,7 +12,7 @@
+ #include "base/strings/string_split.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_ANDROID)
+ #include <inttypes.h>
+ #endif
+
diff --git a/devel/electron6/files/patch-base_debug_stack__trace.cc b/devel/electron6/files/patch-base_debug_stack__trace.cc
new file mode 100644
index 000000000000..dc573d9ddf69
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_stack__trace.cc
@@ -0,0 +1,11 @@
+--- base/debug/stack_trace.cc.orig 2019-09-10 10:42:27 UTC
++++ base/debug/stack_trace.cc
+@@ -14,7 +14,7 @@
+
+ #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <pthread.h>
+ #include "base/process/process_handle.h"
+ #include "base/threading/platform_thread.h"
diff --git a/devel/electron6/files/patch-base_debug_stack__trace.h b/devel/electron6/files/patch-base_debug_stack__trace.h
new file mode 100644
index 000000000000..b29a41e77e09
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_stack__trace.h
@@ -0,0 +1,10 @@
+--- base/debug/stack_trace.h.orig 2019-09-10 11:13:31 UTC
++++ base/debug/stack_trace.h
+@@ -16,6 +16,7 @@
+ #include "build/build_config.h"
+
+ #if defined(OS_POSIX)
++#include <sys/stdint.h>
+ #include <unistd.h>
+ #endif
+
diff --git a/devel/electron6/files/patch-base_debug_stack__trace__posix.cc b/devel/electron6/files/patch-base_debug_stack__trace__posix.cc
new file mode 100644
index 000000000000..1e89ec696670
--- /dev/null
+++ b/devel/electron6/files/patch-base_debug_stack__trace__posix.cc
@@ -0,0 +1,31 @@
+--- base/debug/stack_trace_posix.cc.orig 2019-09-10 11:13:31 UTC
++++ base/debug/stack_trace_posix.cc
+@@ -35,7 +35,7 @@
+ #include <AvailabilityMacros.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/debug/proc_maps_linux.h"
+ #endif
+
+@@ -653,6 +653,11 @@ class SandboxSymbolizeHelper {
+ // for the modules that are loaded in the current process.
+ // Returns true on success.
+ bool CacheMemoryRegions() {
++#if defined(OS_BSD)
++ // TODO (rene) avoid link error, implement something?
++ NOTIMPLEMENTED();
++ return false;
++#else
+ // Reads /proc/self/maps.
+ std::string contents;
+ if (!ReadProcMaps(&contents)) {
+@@ -670,6 +675,7 @@ class SandboxSymbolizeHelper {
+
+ is_initialized_ = true;
+ return true;
++#endif
+ }
+
+ // Opens all object files and caches their file descriptors.
diff --git a/devel/electron6/files/patch-base_files_file__path__unittest.cc b/devel/electron6/files/patch-base_files_file__path__unittest.cc
new file mode 100644
index 000000000000..4f2fb9153233
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__path__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/files/file_path_unittest.cc
+@@ -1139,7 +1139,7 @@ TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe)
+ "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
+ };
+
+-#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX)
++#if !defined(SYSTEM_NATIVE_UTF8) && (defined(OS_LINUX) || defined(OS_BSD))
+ ScopedLocale locale("en_US.UTF-8");
+ #endif
+
diff --git a/devel/electron6/files/patch-base_files_file__path__watcher.cc b/devel/electron6/files/patch-base_files_file__path__watcher.cc
new file mode 100644
index 000000000000..0887616e47da
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__path__watcher.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher.cc.orig 2019-09-10 10:42:27 UTC
++++ base/files/file_path_watcher.cc
+@@ -20,7 +20,7 @@ FilePathWatcher::~FilePathWatcher() {
+ // static
+ bool FilePathWatcher::RecursiveWatchAvailable() {
+ #if (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_WIN) || \
+- defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++ defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ return true;
+ #else
+ // FSEvents isn't available on iOS.
diff --git a/devel/electron6/files/patch-base_files_file__path__watcher__kqueue.h b/devel/electron6/files/patch-base_files_file__path__watcher__kqueue.h
new file mode 100644
index 000000000000..70c1d4a9870c
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__path__watcher__kqueue.h
@@ -0,0 +1,13 @@
+--- base/files/file_path_watcher_kqueue.h.orig 2019-09-10 10:42:27 UTC
++++ base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,10 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
+ #include <sys/event.h>
+
+ #include <memory>
diff --git a/devel/electron6/files/patch-base_files_file__path__watcher__stub.cc b/devel/electron6/files/patch-base_files_file__path__watcher__stub.cc
new file mode 100644
index 000000000000..22b0a9df5193
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__path__watcher__stub.cc
@@ -0,0 +1,51 @@
+--- base/files/file_path_watcher_stub.cc.orig 2019-09-10 10:42:27 UTC
++++ base/files/file_path_watcher_stub.cc
+@@ -1,14 +1,15 @@
+-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
++// Copyright 2014 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-// This file exists for Unix systems which don't have the inotify headers, and
+-// thus cannot build file_watcher_inotify.cc
+
+-#include "base/files/file_path_watcher.h"
++#include <memory>
+
++#include "base/files/file_path_watcher.h"
++#include "base/files/file_path_watcher_kqueue.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
++#include "build/build_config.h"
+
+ namespace base {
+
+@@ -22,12 +23,26 @@ class FilePathWatcherImpl : public FilePathWatcher::Pl
+ bool Watch(const FilePath& path,
+ bool recursive,
+ const FilePathWatcher::Callback& callback) override {
+- return false;
++ DCHECK(!impl_.get());
++ if (recursive) {
++ if (!FilePathWatcher::RecursiveWatchAvailable())
++ return false;
++ } else {
++ impl_ = std::make_unique<FilePathWatcherKQueue>();
++ }
++ DCHECK(impl_.get());
++ return impl_->Watch(path, recursive, callback);
+ }
+
+- void Cancel() override {}
++ void Cancel() override {
++ if (impl_.get())
++ impl_->Cancel();
++ set_cancelled();
++ }
+
+ private:
++ std::unique_ptr<PlatformDelegate> impl_;
++
+ DISALLOW_COPY_AND_ASSIGN(FilePathWatcherImpl);
+ };
+
diff --git a/devel/electron6/files/patch-base_files_file__path__watcher__unittest.cc b/devel/electron6/files/patch-base_files_file__path__watcher__unittest.cc
new file mode 100644
index 000000000000..1f43ef0299b4
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__path__watcher__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/files/file_path_watcher_unittest.cc
+@@ -436,7 +436,7 @@ TEST_F(FilePathWatcherTest, WatchDirectory) {
+ VLOG(1) << "Waiting for file1 creation";
+ ASSERT_TRUE(WaitForEvents());
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Mac implementation does not detect files modified in a directory.
+ ASSERT_TRUE(WriteFile(file1, "content v2"));
+ VLOG(1) << "Waiting for file1 modification";
diff --git a/devel/electron6/files/patch-base_files_file__util.h b/devel/electron6/files/patch-base_files_file__util.h
new file mode 100644
index 000000000000..4f3b9d590a3d
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__util.h
@@ -0,0 +1,11 @@
+--- base/files/file_util.h.orig 2019-09-10 11:13:31 UTC
++++ base/files/file_util.h
+@@ -476,7 +476,7 @@ BASE_EXPORT bool VerifyPathControlledByAdmin(const bas
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ BASE_EXPORT int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron6/files/patch-base_files_file__util__posix.cc b/devel/electron6/files/patch-base_files_file__util__posix.cc
new file mode 100644
index 000000000000..0280c0e5cc65
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/file_util_posix.cc.orig 2019-09-10 11:13:31 UTC
++++ base/files/file_util_posix.cc
+@@ -419,7 +419,7 @@ bool CreatePipe(ScopedFD* read_fd, ScopedFD* write_fd,
+ }
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron6/files/patch-base_files_scoped__file.cc b/devel/electron6/files/patch-base_files_scoped__file.cc
new file mode 100644
index 000000000000..7ddee9104d01
--- /dev/null
+++ b/devel/electron6/files/patch-base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- base/files/scoped_file.cc.orig 2019-09-10 10:42:27 UTC
++++ base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron6/files/patch-base_i18n_icu__util.cc b/devel/electron6/files/patch-base_i18n_icu__util.cc
new file mode 100644
index 000000000000..a5209430a706
--- /dev/null
+++ b/devel/electron6/files/patch-base_i18n_icu__util.cc
@@ -0,0 +1,20 @@
+--- base/i18n/icu_util.cc.orig 2019-09-10 10:42:27 UTC
++++ base/i18n/icu_util.cc
+@@ -20,7 +20,7 @@
+ #include "build/build_config.h"
+ #include "third_party/icu/source/common/unicode/putil.h"
+ #include "third_party/icu/source/common/unicode/udata.h"
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
++#if (defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
+ #include "third_party/icu/source/i18n/unicode/timezone.h"
+ #endif
+
+@@ -285,7 +285,7 @@ bool InitializeICU() {
+ // TODO(jungshik): Some callers do not care about tz at all. If necessary,
+ // add a boolean argument to this function to init'd the default tz only
+ // when requested.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (result)
+ std::unique_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
+ #endif
diff --git a/devel/electron6/files/patch-base_linux__util.cc b/devel/electron6/files/patch-base_linux__util.cc
new file mode 100644
index 000000000000..5440aa6dd760
--- /dev/null
+++ b/devel/electron6/files/patch-base_linux__util.cc
@@ -0,0 +1,18 @@
+--- base/linux_util.cc.orig 2019-09-10 10:42:27 UTC
++++ base/linux_util.cc
+@@ -90,12 +90,14 @@ char g_linux_distro[kDistroSize] =
+ "CrOS";
+ #elif defined(OS_ANDROID)
+ "Android";
++#elif defined(OS_BSD)
++ "BSD";
+ #else // if defined(OS_LINUX)
+ "Unknown";
+ #endif
+
+ std::string GetLinuxDistro() {
+-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ return g_linux_distro;
+ #elif defined(OS_LINUX)
+ LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
diff --git a/devel/electron6/files/patch-base_logging__unittest.cc b/devel/electron6/files/patch-base_logging__unittest.cc
new file mode 100644
index 000000000000..220ec7e65bad
--- /dev/null
+++ b/devel/electron6/files/patch-base_logging__unittest.cc
@@ -0,0 +1,11 @@
+--- base/logging_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/logging_unittest.cc
+@@ -444,7 +444,7 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
+ // need the arch-specific boilerplate below, which is inspired by breakpad.
+ // At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
+ uintptr_t crash_addr = 0;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
+ #else // OS_POSIX && !OS_MACOSX
+ ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
diff --git a/devel/electron6/files/patch-base_memory_protected__memory__posix.cc b/devel/electron6/files/patch-base_memory_protected__memory__posix.cc
new file mode 100644
index 000000000000..af81d832c693
--- /dev/null
+++ b/devel/electron6/files/patch-base_memory_protected__memory__posix.cc
@@ -0,0 +1,31 @@
+--- base/memory/protected_memory_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/memory/protected_memory_posix.cc
+@@ -8,9 +8,9 @@
+ #include <sys/mman.h>
+ #include <unistd.h>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ #include <mach/mach.h>
+@@ -44,7 +44,7 @@ bool AutoWritableMemory::SetMemoryReadOnly(void* start
+ return SetMemory(start, end, PROT_READ);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void AssertMemoryIsReadOnly(const void* ptr) {
+ #if DCHECK_IS_ON()
+ const uintptr_t page_mask = ~(base::GetPageSize() - 1);
+@@ -74,6 +74,6 @@ void AssertMemoryIsReadOnly(const void* ptr) {
+ DCHECK_EQ(region_info.protection, VM_PROT_READ);
+ #endif // DCHECK_IS_ON()
+ }
+-#endif // defined(OS_LINUX) || (defined(OS_MACOSX) && !defined(OS_IOS))
++#endif // defined(OS_LINUX) || (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_BSD)
+
+ } // namespace base
diff --git a/devel/electron6/files/patch-base_native__library__posix.cc b/devel/electron6/files/patch-base_native__library__posix.cc
new file mode 100644
index 000000000000..7c0440464d56
--- /dev/null
+++ b/devel/electron6/files/patch-base_native__library__posix.cc
@@ -0,0 +1,11 @@
+--- base/native_library_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/native_library_posix.cc
+@@ -29,7 +29,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
+ // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
+ // and http://crbug.com/40794.
+ int flags = RTLD_LAZY;
+-#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND)
++#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND) || defined(OS_BSD)
+ // Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
+ // further investigation, as it might vary across versions. Crash here to
+ // warn developers that they're trying to rely on uncertain behavior.
diff --git a/devel/electron6/files/patch-base_native__library__unittest.cc b/devel/electron6/files/patch-base_native__library__unittest.cc
new file mode 100644
index 000000000000..6d808ba54fc8
--- /dev/null
+++ b/devel/electron6/files/patch-base_native__library__unittest.cc
@@ -0,0 +1,11 @@
+--- base/native_library_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/native_library_unittest.cc
+@@ -120,7 +120,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
+ // Android dlopen() requires further investigation, as it might vary across
+ // versions with respect to symbol resolution scope.
+ // TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
+-#if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
++#if !defined(OS_ANDROID) && !defined(OS_BSD) && !defined(THREAD_SANITIZER) && \
+ !defined(MEMORY_SANITIZER)
+
+ // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
diff --git a/devel/electron6/files/patch-base_numerics_safe__math__shared__impl.h b/devel/electron6/files/patch-base_numerics_safe__math__shared__impl.h
new file mode 100644
index 000000000000..c18190d0ead6
--- /dev/null
+++ b/devel/electron6/files/patch-base_numerics_safe__math__shared__impl.h
@@ -0,0 +1,13 @@
+--- base/numerics/safe_math_shared_impl.h.orig 2019-09-10 11:13:31 UTC
++++ base/numerics/safe_math_shared_impl.h
+@@ -19,9 +19,7 @@
+
+ // Where available use builtin math overflow support on Clang and GCC.
+ #if !defined(__native_client__) && \
+- ((defined(__clang__) && \
+- ((__clang_major__ > 3) || \
+- (__clang_major__ == 3 && __clang_minor__ >= 4))) || \
++ ((defined(__clang__) && (__clang_major__ > 6)) || \
+ (defined(__GNUC__) && __GNUC__ >= 5))
+ #include "base/numerics/safe_math_clang_gcc_impl.h"
+ #define BASE_HAS_OPTIMIZED_SAFE_MATH (1)
diff --git a/devel/electron6/files/patch-base_posix_can__lower__nice__to.cc b/devel/electron6/files/patch-base_posix_can__lower__nice__to.cc
new file mode 100644
index 000000000000..37ccec83ab7d
--- /dev/null
+++ b/devel/electron6/files/patch-base_posix_can__lower__nice__to.cc
@@ -0,0 +1,20 @@
+--- base/posix/can_lower_nice_to.cc.orig 2019-09-10 10:42:27 UTC
++++ base/posix/can_lower_nice_to.cc
+@@ -31,6 +31,9 @@ bool CanLowerNiceTo(int nice_value) {
+ if (geteuid() == 0)
+ return true;
+
++#if defined(OS_BSD)
++ return false;
++#else
+ // 2. Skip checking the CAP_SYS_NICE permission because it would require
+ // libcap.so.
+
+@@ -54,6 +57,7 @@ bool CanLowerNiceTo(int nice_value) {
+ // And lowering niceness to |nice_value| is allowed if it is greater than or
+ // equal to the limit:
+ return nice_value >= lowest_nice_allowed;
++#endif
+ }
+
+ } // namespace internal
diff --git a/devel/electron6/files/patch-base_posix_unix__domain__socket.cc b/devel/electron6/files/patch-base_posix_unix__domain__socket.cc
new file mode 100644
index 000000000000..a4691b9effe2
--- /dev/null
+++ b/devel/electron6/files/patch-base_posix_unix__domain__socket.cc
@@ -0,0 +1,49 @@
+--- base/posix/unix_domain_socket.cc.orig 2019-09-10 10:42:27 UTC
++++ base/posix/unix_domain_socket.cc
+@@ -5,7 +5,10 @@
+ #include "base/posix/unix_domain_socket.h"
+
+ #include <errno.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/ucred.h>
+ #if !defined(OS_NACL_NONSFI)
+ #include <sys/un.h>
+ #endif
+@@ -28,6 +31,14 @@ namespace base {
+
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+
++#ifndef SCM_CREDENTIALS
++# define SCM_CREDENTIALS 0x9001
++#endif
++
++#ifndef SO_PASSCRED
++# define SO_PASSCRED 0x9002
++#endif
++
+ #if !defined(OS_NACL_NONSFI)
+ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+ int raw_socks[2];
+@@ -150,7 +161,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ #if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ // The PNaCl toolchain for Non-SFI binary build and macOS do not support
+ // ucred. macOS supports xucred, but this structure is insufficient.
+- + CMSG_SPACE(sizeof(struct ucred))
++ + CMSG_SPACE(sizeof(struct cmsgcred))
+ #endif // OS_NACL_NONSFI or OS_MACOSX
+ ;
+ char control_buffer[kControlBufferSize];
+@@ -180,9 +191,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ // SCM_CREDENTIALS.
+ if (cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
+- DCHECK_EQ(payload_len, sizeof(struct ucred));
++ DCHECK_EQ(payload_len, sizeof(struct cmsgcred));
+ DCHECK_EQ(pid, -1);
+- pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
++ pid = getpid();
+ }
+ #endif // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ }
diff --git a/devel/electron6/files/patch-base_posix_unix__domain__socket__unittest.cc b/devel/electron6/files/patch-base_posix_unix__domain__socket__unittest.cc
new file mode 100644
index 000000000000..7e4d9d7bf2d2
--- /dev/null
+++ b/devel/electron6/files/patch-base_posix_unix__domain__socket__unittest.cc
@@ -0,0 +1,12 @@
+--- base/posix/unix_domain_socket_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/posix/unix_domain_socket_unittest.cc
+@@ -8,6 +8,9 @@
+ #include <stdint.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
+ #include <unistd.h>
+
+ #include "base/bind.h"
diff --git a/devel/electron6/files/patch-base_process_internal__linux.cc b/devel/electron6/files/patch-base_process_internal__linux.cc
new file mode 100644
index 000000000000..c5d97bd968f5
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_internal__linux.cc
@@ -0,0 +1,16 @@
+--- base/process/internal_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/internal_linux.cc
+@@ -60,10 +60,13 @@ bool ReadProcFile(const FilePath& file, std::string* b
+ // Synchronously reading files in /proc is safe.
+ ThreadRestrictions::ScopedAllowIO allow_io;
+
++#if !defined(OS_BSD)
+ if (!ReadFileToString(file, buffer)) {
+ DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
+ return false;
+ }
++#endif
++
+ return !buffer->empty();
+ }
+
diff --git a/devel/electron6/files/patch-base_process_internal__linux.h b/devel/electron6/files/patch-base_process_internal__linux.h
new file mode 100644
index 000000000000..6d7b3291ce21
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_internal__linux.h
@@ -0,0 +1,11 @@
+--- base/process/internal_linux.h.orig 2019-09-10 10:42:27 UTC
++++ base/process/internal_linux.h
+@@ -14,6 +14,8 @@
+
+ #include "base/files/file_path.h"
+
++#include <unistd.h> /* pid_t */
++
+ namespace base {
+
+ class Time;
diff --git a/devel/electron6/files/patch-base_process_kill.h b/devel/electron6/files/patch-base_process_kill.h
new file mode 100644
index 000000000000..3033cb958c26
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_kill.h
@@ -0,0 +1,16 @@
+--- base/process/kill.h.orig 2019-09-10 10:42:27 UTC
++++ base/process/kill.h
+@@ -111,11 +111,11 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
+ BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
+ ProcessHandle handle, int* exit_code);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Spawns a thread to wait asynchronously for the child |process| to exit
+ // and then reaps it.
+ BASE_EXPORT void EnsureProcessGetsReaped(Process process);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #endif // defined(OS_POSIX)
+
+ // Registers |process| to be asynchronously monitored for termination, forcibly
diff --git a/devel/electron6/files/patch-base_process_kill__posix.cc b/devel/electron6/files/patch-base_process_kill__posix.cc
new file mode 100644
index 000000000000..4a2b6a0300f4
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_kill__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/kill_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/kill_posix.cc
+@@ -168,7 +168,7 @@ void EnsureProcessTerminated(Process process) {
+ 0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void EnsureProcessGetsReaped(Process process) {
+ DCHECK(!process.is_current());
+
+@@ -179,7 +179,7 @@ void EnsureProcessGetsReaped(Process process) {
+ PlatformThread::CreateNonJoinable(
+ 0, new BackgroundReaper(std::move(process), TimeDelta()));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #endif // !defined(OS_MACOSX)
+ #endif // !defined(OS_NACL_NONSFI)
diff --git a/devel/electron6/files/patch-base_process_launch.cc b/devel/electron6/files/patch-base_process_launch.cc
new file mode 100644
index 000000000000..5963a42c8a32
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_launch.cc
@@ -0,0 +1,11 @@
+--- base/process/launch.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/launch.cc
+@@ -15,7 +15,7 @@ LaunchOptions::~LaunchOptions() = default;
+
+ LaunchOptions LaunchOptionsForTest() {
+ LaunchOptions options;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // To prevent accidental privilege sharing to an untrusted child, processes
+ // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
+ // new child will be used for testing only.
diff --git a/devel/electron6/files/patch-base_process_launch.h b/devel/electron6/files/patch-base_process_launch.h
new file mode 100644
index 000000000000..471f975026dc
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_launch.h
@@ -0,0 +1,20 @@
+--- base/process/launch.h.orig 2019-09-10 11:13:31 UTC
++++ base/process/launch.h
+@@ -181,7 +181,7 @@ struct BASE_EXPORT LaunchOptions {
+ bool clear_environment = false;
+ #endif // OS_WIN || OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If non-zero, start the process using clone(), using flags as provided.
+ // Unlike in clone, clone_flags may not contain a custom termination signal
+ // that is sent to the parent when the child dies. The termination signal will
+@@ -194,7 +194,7 @@ struct BASE_EXPORT LaunchOptions {
+
+ // Sets parent process death signal to SIGKILL.
+ bool kill_on_parent_death = false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ // Mach ports that will be accessible to the child process. These are not
diff --git a/devel/electron6/files/patch-base_process_launch__posix.cc b/devel/electron6/files/patch-base_process_launch__posix.cc
new file mode 100644
index 000000000000..9c0f57699832
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_launch__posix.cc
@@ -0,0 +1,10 @@
+--- base/process/launch_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/launch_posix.cc
+@@ -65,6 +65,7 @@
+ #error "macOS should use launch_mac.cc"
+ #endif
+
++#pragma weak environ
+ extern char** environ;
+
+ namespace base {
diff --git a/devel/electron6/files/patch-base_process_memory.cc b/devel/electron6/files/patch-base_process_memory.cc
new file mode 100644
index 000000000000..4fbfd71d9399
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_memory.cc
@@ -0,0 +1,20 @@
+--- base/process/memory.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/memory.cc
+@@ -10,7 +10,7 @@
+ namespace base {
+
+ // Defined in memory_win.cc for Windows.
+-#if !defined(OS_WIN)
++#if !defined(OS_WIN) && !defined(OS_BSD)
+
+ namespace {
+
+@@ -31,7 +31,7 @@ void TerminateBecauseOutOfMemory(size_t size) {
+ #endif
+
+ // Defined in memory_mac.mm for Mac.
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+ const size_t alloc_size = num_items * size;
diff --git a/devel/electron6/files/patch-base_process_memory.h b/devel/electron6/files/patch-base_process_memory.h
new file mode 100644
index 000000000000..e6f1024d76ce
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_memory.h
@@ -0,0 +1,11 @@
+--- base/process/memory.h.orig 2019-09-10 11:13:31 UTC
++++ base/process/memory.h
+@@ -32,7 +32,7 @@ BASE_EXPORT void EnableTerminationOnOutOfMemory();
+ // Crash reporting classifies such crashes as OOM.
+ BASE_EXPORT void TerminateBecauseOutOfMemory(size_t size);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ BASE_EXPORT extern size_t g_oom_size;
+
+ // The maximum allowed value for the OOM score.
diff --git a/devel/electron6/files/patch-base_process_memory__unittest.cc b/devel/electron6/files/patch-base_process_memory__unittest.cc
new file mode 100644
index 000000000000..4ef793aa5df3
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_memory__unittest.cc
@@ -0,0 +1,18 @@
+--- base/process/memory_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/process/memory_unittest.cc
+@@ -104,7 +104,7 @@ TEST(MemoryTest, AllocatorShimWorking) {
+ // OpenBSD does not support these tests. Don't test these on ASan/TSan/MSan
+ // configurations: only test the real allocator.
+ // Windows only supports these tests with the allocator shim in place.
+-#if !defined(OS_OPENBSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
++#if !defined(OS_BSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
+ !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+
+ namespace {
+@@ -529,5 +529,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
+ EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
+ EXPECT_TRUE(value_ == nullptr);
+ }
+-#endif // !defined(OS_OPENBSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
++#endif // !defined(OS_BSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
+ // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/devel/electron6/files/patch-base_process_process__handle.cc b/devel/electron6/files/patch-base_process_process__handle.cc
new file mode 100644
index 000000000000..b7acb7b0249a
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__handle.cc
@@ -0,0 +1,11 @@
+--- base/process/process_handle.cc.orig 2019-09-10 11:13:31 UTC
++++ base/process/process_handle.cc
+@@ -39,7 +39,7 @@ uint32_t GetUniqueIdForProcess() {
+ return g_unique_id;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
+ g_unique_id = MangleProcessId(pid_outside_of_namespace);
diff --git a/devel/electron6/files/patch-base_process_process__handle.h b/devel/electron6/files/patch-base_process_process__handle.h
new file mode 100644
index 000000000000..0d966d2e7997
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__handle.h
@@ -0,0 +1,11 @@
+--- base/process/process_handle.h.orig 2019-09-10 11:13:31 UTC
++++ base/process/process_handle.h
+@@ -64,7 +64,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
+ // a process's PID.
+ BASE_EXPORT uint32_t GetUniqueIdForProcess();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // When a process is started in a different PID namespace from the browser
+ // process, this function must be called with the process's PID in the browser's
+ // PID namespace in order to initialize its unique ID. Not thread safe.
diff --git a/devel/electron6/files/patch-base_process_process__handle__freebsd.cc b/devel/electron6/files/patch-base_process_process__handle__freebsd.cc
new file mode 100644
index 000000000000..34da38ffcf3c
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__handle__freebsd.cc
@@ -0,0 +1,17 @@
+--- base/process/process_handle_freebsd.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_handle_freebsd.cc
+@@ -16,10 +16,13 @@ namespace base {
+
+ ProcessId GetParentProcessId(ProcessHandle process) {
+ struct kinfo_proc info;
+- size_t length;
++ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
+
+ if (sysctl(mib, base::size(mib), &info, &length, NULL, 0) < 0)
++ return -1;
++
++ if (length < sizeof(struct kinfo_proc))
+ return -1;
+
+ return info.ki_ppid;
diff --git a/devel/electron6/files/patch-base_process_process__iterator__freebsd.cc b/devel/electron6/files/patch-base_process_process__iterator__freebsd.cc
new file mode 100644
index 000000000000..a8db39e07923
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__iterator__freebsd.cc
@@ -0,0 +1,44 @@
+--- base/process/process_iterator_freebsd.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_iterator_freebsd.cc
+@@ -10,6 +10,10 @@
+ #include <sys/sysctl.h>
+ #include <unistd.h>
+
++/* getuid() */
++#include <unistd.h>
++#include <sys/types.h>
++
+ #include "base/logging.h"
+ #include "base/stl_util.h"
+ #include "base/strings/string_split.h"
+@@ -40,7 +44,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
+ num_of_kinfo_proc += 16;
+ kinfo_procs_.resize(num_of_kinfo_proc);
+ len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
+- if (sysctl(mib, base::size(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
++ if (sysctl(mib, base::size(mib), kinfo_procs_.data(), &len, NULL, 0) < 0) {
+ // If we get a mem error, it just means we need a bigger buffer, so
+ // loop around again. Anything else is a real error and give up.
+ if (errno != ENOMEM) {
+@@ -72,18 +76,13 @@ bool ProcessIterator::CheckForNextProcess() {
+ for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
+ size_t length;
+ struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
+- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
+
+ if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
+ continue;
+
+- length = 0;
+- if (sysctl(mib, base::size(mib), NULL, &length, NULL, 0) < 0) {
+- LOG(ERROR) << "failed to figure out the buffer size for a command line";
+- continue;
+- }
+-
+- data.resize(length);
++ data.resize(ARG_MAX);
++ length = ARG_MAX;
+
+ if (sysctl(mib, base::size(mib), &data[0], &length, NULL, 0) < 0) {
+ LOG(ERROR) << "failed to fetch a commandline";
diff --git a/devel/electron6/files/patch-base_process_process__linux.cc b/devel/electron6/files/patch-base_process_process__linux.cc
new file mode 100644
index 000000000000..5cb802db33c2
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__linux.cc
@@ -0,0 +1,18 @@
+--- base/process/process_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_linux.cc
+@@ -88,6 +88,7 @@ Time Process::CreationTime() const {
+ return Time(boot_time + start_offset);
+ }
+
++#if !defined(OS_BSD)
+ // static
+ bool Process::CanBackgroundProcesses() {
+ #if defined(OS_CHROMEOS)
+@@ -139,6 +140,7 @@ bool Process::SetProcessBackgrounded(bool background)
+ DPCHECK(result == 0);
+ return result == 0;
+ }
++#endif // !defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ bool IsProcessBackgroundedCGroup(const StringPiece& cgroup_contents) {
diff --git a/devel/electron6/files/patch-base_process_process__metrics.cc b/devel/electron6/files/patch-base_process_process__metrics.cc
new file mode 100644
index 000000000000..cb415df9ad5d
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__metrics.cc
@@ -0,0 +1,38 @@
+--- base/process/process_metrics.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_metrics.cc
+@@ -57,7 +57,7 @@ SystemMetrics SystemMetrics::Sample() {
+ SystemMetrics system_metrics;
+
+ system_metrics.committed_memory_ = GetSystemCommitCharge();
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ GetSystemMemoryInfo(&system_metrics.memory_info_);
+ GetVmStatInfo(&system_metrics.vmstat_info_);
+ GetSystemDiskInfo(&system_metrics.disk_info_);
+@@ -75,7 +75,7 @@ std::unique_ptr<Value> SystemMetrics::ToValue() const
+ std::unique_ptr<DictionaryValue> res(new DictionaryValue());
+
+ res->SetIntKey("committed_memory", static_cast<int>(committed_memory_));
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ std::unique_ptr<DictionaryValue> meminfo = memory_info_.ToValue();
+ std::unique_ptr<DictionaryValue> vmstat = vmstat_info_.ToValue();
+ meminfo->MergeDictionary(vmstat.get());
+@@ -126,7 +126,7 @@ double ProcessMetrics::GetPlatformIndependentCPUUsage(
+ }
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int ProcessMetrics::CalculateIdleWakeupsPerSecond(
+ uint64_t absolute_idle_wakeups) {
+ return CalculateEventsPerSecond(absolute_idle_wakeups,
+@@ -138,7 +138,7 @@ int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED(); // http://crbug.com/120488
+ return 0;
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ int ProcessMetrics::CalculatePackageIdleWakeupsPerSecond(
diff --git a/devel/electron6/files/patch-base_process_process__metrics.h b/devel/electron6/files/patch-base_process_process__metrics.h
new file mode 100644
index 000000000000..6533c2c46542
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__metrics.h
@@ -0,0 +1,131 @@
+--- base/process/process_metrics.h.orig 2019-09-10 11:13:31 UTC
++++ base/process/process_metrics.h
+@@ -41,7 +41,7 @@ namespace base {
+ // Full declaration is in process_metrics_iocounters.h.
+ struct IoCounters;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Minor and major page fault counts since the process creation.
+ // Both counts are process-wide, and exclude child processes.
+ //
+@@ -51,7 +51,7 @@ struct PageFaultCounts {
+ int64_t minor;
+ int64_t major;
+ };
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Convert a POSIX timeval to microseconds.
+ BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv);
+@@ -92,7 +92,7 @@ class BASE_EXPORT ProcessMetrics {
+ // convenience wrapper for CreateProcessMetrics().
+ static std::unique_ptr<ProcessMetrics> CreateCurrentProcessMetrics();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Resident Set Size is a Linux/Android specific memory concept. Do not
+ // attempt to extend this to other platforms.
+ BASE_EXPORT size_t GetResidentSetSize() const;
+@@ -199,14 +199,14 @@ class BASE_EXPORT ProcessMetrics {
+ int GetOpenFdSoftLimit() const;
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Bytes of swap as reported by /proc/[pid]/status.
+ uint64_t GetVmSwapBytes() const;
+
+ // Minor and major page fault count as reported by /proc/[pid]/stat.
+ // Returns true for success.
+ bool GetPageFaultCounts(PageFaultCounts* counts) const;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns total memory usage of malloc.
+ size_t GetMallocUsage();
+@@ -218,7 +218,7 @@ class BASE_EXPORT ProcessMetrics {
+ ProcessMetrics(ProcessHandle process, PortProvider* port_provider);
+ #endif // !defined(OS_MACOSX) || defined(OS_IOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -247,7 +247,7 @@ class BASE_EXPORT ProcessMetrics {
+ // Number of bytes transferred to/from disk in bytes.
+ uint64_t last_cumulative_disk_usage_ = 0;
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Same thing for idle wakeups.
+ TimeTicks last_idle_wakeups_time_;
+ uint64_t last_absolute_idle_wakeups_;
+@@ -292,7 +292,7 @@ BASE_EXPORT size_t GetMaxFds();
+ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_descriptors);
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+ // Data about system-wide memory consumption. Values are in KB. Available on
+ // Windows, Mac, Linux, Android and Chrome OS.
+@@ -326,7 +326,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int avail_phys = 0;
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // This provides an estimate of available memory as described here:
+ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
+ // NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
+@@ -340,7 +340,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int swap_free = 0;
+ #endif
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ int buffers = 0;
+ int cached = 0;
+@@ -350,7 +350,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int inactive_file = 0;
+ int dirty = 0;
+ int reclaimable = 0;
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) ||
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) ||
+ // defined(OS_FUCHSIA)
+
+ #if defined(OS_CHROMEOS)
+@@ -376,10 +376,10 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ // Exposed for memory debugging widget.
+ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo);
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // Parse the data found in /proc/<pid>/stat and return the sum of the
+ // CPU-related ticks. Returns -1 on parse error.
+ // Exposed for testing.
+@@ -452,7 +452,7 @@ BASE_EXPORT bool GetSystemDiskInfo(SystemDiskInfo* dis
+ // Returns the amount of time spent in user space since boot across all CPUs.
+ BASE_EXPORT TimeDelta GetUserCpuTimeSinceBoot();
+
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // Data from files in directory /sys/block/zram0 about ZRAM usage.
+@@ -547,7 +547,7 @@ class BASE_EXPORT SystemMetrics {
+ FRIEND_TEST_ALL_PREFIXES(SystemMetricsTest, SystemMetrics);
+
+ size_t committed_memory_;
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ SystemMemoryInfoKB memory_info_;
+ VmStatInfo vmstat_info_;
+ SystemDiskInfo disk_info_;
diff --git a/devel/electron6/files/patch-base_process_process__metrics__freebsd.cc b/devel/electron6/files/patch-base_process_process__metrics__freebsd.cc
new file mode 100644
index 000000000000..aebb0088725b
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__metrics__freebsd.cc
@@ -0,0 +1,259 @@
+--- base/process/process_metrics_freebsd.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_metrics_freebsd.cc
+@@ -5,6 +5,7 @@
+ #include "base/process/process_metrics.h"
+
+ #include <stddef.h>
++#include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <sys/user.h>
+ #include <unistd.h>
+@@ -14,11 +15,29 @@
+ #include "base/process/process_metrics_iocounters.h"
+ #include "base/stl_util.h"
+
++#include <unistd.h> /* getpagesize() */
++#include <fcntl.h> /* O_RDONLY */
++#include <kvm.h>
++#include <libutil.h>
++
+ namespace base {
++namespace {
+
++int GetPageShift() {
++ int pagesize = getpagesize();
++ int pageshift = 0;
++
++ while (pagesize > 1) {
++ pageshift++;
++ pagesize >>= 1;
++ }
++
++ return pageshift;
++}
++}
++
+ ProcessMetrics::ProcessMetrics(ProcessHandle process)
+- : process_(process),
+- last_cpu_(0) {}
++ : process_(process) {}
+
+ // static
+ std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
+@@ -69,4 +88,216 @@ size_t GetSystemCommitCharge() {
+ return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
+ }
+
++int GetNumberOfThreads(ProcessHandle process) {
++ // Taken from FreeBSD top (usr.bin/top/machine.c)
++
++ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
++ if (kd == NULL)
++ return 0;
++
++ struct kinfo_proc* pbase;
++ int nproc;
++ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
++ if (pbase == NULL)
++ return 0;
++
++ if (kvm_close(kd) == -1)
++ return 0;
++
++ return nproc;
++}
++
++bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
++ unsigned int mem_total, mem_free, swap_total, swap_used;
++ size_t length;
++ int pagesizeKB;
++
++ pagesizeKB = getpagesize() / 1024;
++
++ length = sizeof(mem_total);
++ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
++ &length, NULL, 0) != 0 || length != sizeof(mem_total))
++ return false;
++
++ length = sizeof(mem_free);
++ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
++ != 0 || length != sizeof(mem_free))
++ return false;
++
++ length = sizeof(swap_total);
++ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
++ != 0 || length != sizeof(swap_total))
++ return false;
++
++ length = sizeof(swap_used);
++ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
++ != 0 || length != sizeof(swap_used))
++ return false;
++
++ meminfo->total = mem_total * pagesizeKB;
++ meminfo->free = mem_free * pagesizeKB;
++ meminfo->swap_total = swap_total * pagesizeKB;
++ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
++
++ return true;
++}
++
++int ProcessMetrics::GetOpenFdCount() const {
++ struct kinfo_file * kif;
++ int cnt;
++
++ if ((kif = kinfo_getfile(process_, &cnt)) == NULL)
++ return -1;
++
++ free(kif);
++
++ return cnt;
++}
++
++int ProcessMetrics::GetOpenFdSoftLimit() const {
++ size_t length;
++ int total_count = 0;
++ int mib[] = { CTL_KERN, KERN_MAXFILESPERPROC };
++
++ length = sizeof(total_count);
++
++ if (sysctl(mib, base::size(mib), &total_count, &length, NULL, 0) < 0) {
++ total_count = -1;
++ }
++
++ return total_count;
++}
++
++size_t ProcessMetrics::GetResidentSetSize() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t rss;
++
++ if (nproc > 0) {
++ rss = pp->ki_rssize << GetPageShift();
++ } else {
++ rss = 0;
++ }
++
++ kvm_close(kd);
++ return rss;
++}
++
++uint64_t ProcessMetrics::GetVmSwapBytes() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t swrss;
++
++ if (nproc > 0) {
++ swrss = pp->ki_swrss > pp->ki_rssize
++ ? (pp->ki_swrss - pp->ki_rssize) << GetPageShift()
++ : 0;
++ } else {
++ swrss = 0;
++ }
++
++ kvm_close(kd);
++ return swrss;
++}
++
++int ProcessMetrics::GetIdleWakeupsPerSecond() {
++ NOTIMPLEMENTED();
++ return 0;
++}
++
++bool GetSystemDiskInfo(SystemDiskInfo* diskinfo) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++bool GetVmStatInfo(VmStatInfo* vmstat) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++SystemDiskInfo::SystemDiskInfo() {
++ reads = 0;
++ reads_merged = 0;
++ sectors_read = 0;
++ read_time = 0;
++ writes = 0;
++ writes_merged = 0;
++ sectors_written = 0;
++ write_time = 0;
++ io = 0;
++ io_time = 0;
++ weighted_io_time = 0;
++}
++
++SystemDiskInfo::SystemDiskInfo(const SystemDiskInfo& other) = default;
++
++std::unique_ptr<Value> SystemDiskInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++
++ // Write out uint64_t variables as doubles.
++ // Note: this may discard some precision, but for JS there's no other option.
++ res->SetDouble("reads", static_cast<double>(reads));
++ res->SetDouble("reads_merged", static_cast<double>(reads_merged));
++ res->SetDouble("sectors_read", static_cast<double>(sectors_read));
++ res->SetDouble("read_time", static_cast<double>(read_time));
++ res->SetDouble("writes", static_cast<double>(writes));
++ res->SetDouble("writes_merged", static_cast<double>(writes_merged));
++ res->SetDouble("sectors_written", static_cast<double>(sectors_written));
++ res->SetDouble("write_time", static_cast<double>(write_time));
++ res->SetDouble("io", static_cast<double>(io));
++ res->SetDouble("io_time", static_cast<double>(io_time));
++ res->SetDouble("weighted_io_time", static_cast<double>(weighted_io_time));
++
++ return std::move(res);
++}
++
++std::unique_ptr<DictionaryValue> SystemMemoryInfoKB::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("total", total);
++ res->SetIntKey("free", free);
++ res->SetIntKey("available", available);
++ res->SetIntKey("buffers", buffers);
++ res->SetIntKey("cached", cached);
++ res->SetIntKey("active_anon", active_anon);
++ res->SetIntKey("inactive_anon", inactive_anon);
++ res->SetIntKey("active_file", active_file);
++ res->SetIntKey("inactive_file", inactive_file);
++ res->SetIntKey("swap_total", swap_total);
++ res->SetIntKey("swap_free", swap_free);
++ res->SetIntKey("swap_used", swap_total - swap_free);
++ res->SetIntKey("dirty", dirty);
++ res->SetIntKey("reclaimable", reclaimable);
++
++ return res;
++}
++
++std::unique_ptr<DictionaryValue> VmStatInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("pswpin", pswpin);
++ res->SetIntKey("pswpout", pswpout);
++ res->SetIntKey("pgmajfault", pgmajfault);
++ return res;
++}
+ } // namespace base
diff --git a/devel/electron6/files/patch-base_process_process__metrics__posix.cc b/devel/electron6/files/patch-base_process_process__metrics__posix.cc
new file mode 100644
index 000000000000..5bb95f40e403
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__metrics__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics_posix.cc.orig 2019-09-10 11:13:31 UTC
++++ base/process/process_metrics_posix.cc
+@@ -19,6 +19,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_FREEBSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -107,7 +109,7 @@ size_t ProcessMetrics::GetMallocUsage() {
+ #else
+ return minfo.hblkhd + minfo.arena;
+ #endif
+-#elif defined(OS_FUCHSIA)
++#elif defined(OS_FUCHSIA) || defined(OS_BSD)
+ // TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
+ return 0;
+ #endif
diff --git a/devel/electron6/files/patch-base_process_process__unittest.cc b/devel/electron6/files/patch-base_process_process__unittest.cc
new file mode 100644
index 000000000000..0bc720f373e3
--- /dev/null
+++ b/devel/electron6/files/patch-base_process_process__unittest.cc
@@ -0,0 +1,11 @@
+--- base/process/process_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/process/process_unittest.cc
+@@ -148,7 +148,7 @@ TEST_F(ProcessTest, CreationTimeOtherProcess) {
+ // was spawned and a time recorded after it was spawned. However, since the
+ // base::Time and process creation clocks don't match, tolerate some error.
+ constexpr base::TimeDelta kTolerance =
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, process creation time is relative to boot time which has a
+ // 1-second resolution. Tolerate 1 second for the imprecise boot time and
+ // 100 ms for the imprecise clock.
diff --git a/devel/electron6/files/patch-base_profiler_stack__sampling__profiler__unittest.cc b/devel/electron6/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
new file mode 100644
index 000000000000..0308930a37ce
--- /dev/null
+++ b/devel/electron6/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
@@ -0,0 +1,11 @@
+--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/profiler/stack_sampling_profiler_unittest.cc
+@@ -41,7 +41,7 @@
+ #include <intrin.h>
+ #include <malloc.h>
+ #include <windows.h>
+-#else
++#elif !defined(OS_BSD)
+ #include <alloca.h>
+ #endif
+
diff --git a/devel/electron6/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc b/devel/electron6/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
new file mode 100644
index 000000000000..6b79044cf15c
--- /dev/null
+++ b/devel/electron6/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
@@ -0,0 +1,24 @@
+--- base/sampling_heap_profiler/sampling_heap_profiler.cc.orig 2019-09-10 11:13:31 UTC
++++ base/sampling_heap_profiler/sampling_heap_profiler.cc
+@@ -30,6 +30,10 @@
+ #include <sys/prctl.h>
+ #endif
+
++#if defined(OS_BSD)
++#include <pthread_np.h>
++#endif
++
+ #if defined(OS_ANDROID) && BUILDFLAG(CAN_UNWIND_WITH_CFI_TABLE) && \
+ defined(OFFICIAL_BUILD)
+ #include "base/trace_event/cfi_backtrace_android.h"
+@@ -65,6 +69,10 @@ const char* GetAndLeakThreadName() {
+ #elif defined(OS_MACOSX)
+ int err = pthread_getname_np(pthread_self(), name, kBufferLen);
+ if (err == 0 && *name != '\0')
++ return strdup(name);
++#elif defined(OS_BSD) && __FreeBSD__ >= 12
++ pthread_get_name_np(pthread_self(), name, kBufferLen);
++ if (*name != '\0')
+ return strdup(name);
+ #endif // defined(OS_LINUX) || defined(OS_ANDROID)
+
diff --git a/devel/electron6/files/patch-base_security__unittest.cc b/devel/electron6/files/patch-base_security__unittest.cc
new file mode 100644
index 000000000000..7337e79d5f74
--- /dev/null
+++ b/devel/electron6/files/patch-base_security__unittest.cc
@@ -0,0 +1,11 @@
+--- base/security_unittest.cc.orig 2019-09-10 11:13:31 UTC
++++ base/security_unittest.cc
+@@ -60,7 +60,7 @@ NOINLINE Type HideValueFromCompiler(volatile Type valu
+ // FAILS_ is too clunky.
+ void OverflowTestsSoftExpectTrue(bool overflow_detected) {
+ if (!overflow_detected) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_NACL)
+ // Sadly, on Linux, Android, and OSX we don't have a good story yet. Don't
+ // fail the test, but report.
+ printf("Platform has overflow: %s\n",
diff --git a/devel/electron6/files/patch-base_strings_safe__sprintf__unittest.cc b/devel/electron6/files/patch-base_strings_safe__sprintf__unittest.cc
new file mode 100644
index 000000000000..8c971ef5bc42
--- /dev/null
+++ b/devel/electron6/files/patch-base_strings_safe__sprintf__unittest.cc
@@ -0,0 +1,18 @@
+--- base/strings/safe_sprintf_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/strings/safe_sprintf_unittest.cc
+@@ -730,6 +730,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
+ }
+
+ TEST(SafeSPrintfTest, EmitNULL) {
++/* Avoid compiler error: http://pastebin.com/1edWUE84
+ char buf[40];
+ #if defined(__GNUC__)
+ #pragma GCC diagnostic push
+@@ -741,6 +742,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
+ EXPECT_EQ("0x0", std::string(buf));
+ EXPECT_EQ(6, SafeSPrintf(buf, "%s", NULL));
+ EXPECT_EQ("<NULL>", std::string(buf));
++*/
+ #if defined(__GCC__)
+ #pragma GCC diagnostic pop
+ #endif
diff --git a/devel/electron6/files/patch-base_syslog__logging.cc b/devel/electron6/files/patch-base_syslog__logging.cc
new file mode 100644
index 000000000000..22909dec40d2
--- /dev/null
+++ b/devel/electron6/files/patch-base_syslog__logging.cc
@@ -0,0 +1,20 @@
+--- base/syslog_logging.cc.orig 2019-09-10 11:13:31 UTC
++++ base/syslog_logging.cc
+@@ -9,7 +9,7 @@
+ #include "base/bind.h"
+ #include "base/callback_helpers.h"
+ #include "base/debug/stack_trace.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // <syslog.h> defines LOG_INFO, LOG_WARNING macros that could conflict with
+ // base::LOG_INFO, base::LOG_WARNING.
+ #include <syslog.h>
+@@ -94,7 +94,7 @@ EventLogMessage::~EventLogMessage() {
+ 1, 0, strings, nullptr)) {
+ stream() << " !!NOT ADDED TO EVENTLOG!!";
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kEventSource[] = "chrome";
+ openlog(kEventSource, LOG_NOWAIT | LOG_PID, LOG_USER);
+ // We can't use the defined names for the logging severity from syslog.h
diff --git a/devel/electron6/files/patch-base_system_sys__info.h b/devel/electron6/files/patch-base_system_sys__info.h
new file mode 100644
index 000000000000..74c59cc8ca84
--- /dev/null
+++ b/devel/electron6/files/patch-base_system_sys__info.h
@@ -0,0 +1,11 @@
+--- base/system/sys_info.h.orig 2019-09-10 10:42:27 UTC
++++ base/system/sys_info.h
+@@ -192,7 +192,7 @@ class BASE_EXPORT SysInfo {
+ static bool IsLowEndDeviceImpl();
+ static HardwareInfo GetHardwareInfoSync();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ static int64_t AmountOfAvailablePhysicalMemory(
+ const SystemMemoryInfoKB& meminfo);
+ #endif
diff --git a/devel/electron6/files/patch-base_system_sys__info__freebsd.cc b/devel/electron6/files/patch-base_system_sys__info__freebsd.cc
new file mode 100644
index 000000000000..caf063d4da0a
--- /dev/null
+++ b/devel/electron6/files/patch-base_system_sys__info__freebsd.cc
@@ -0,0 +1,71 @@
+--- base/system/sys_info_freebsd.cc.orig 2019-09-10 10:42:27 UTC
++++ base/system/sys_info_freebsd.cc
+@@ -13,26 +13,58 @@
+ namespace base {
+
+ int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
+- int pages, page_size;
++ int pages, page_size, r = 0;
+ size_t size = sizeof(pages);
+- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+- if (pages == -1 || page_size == -1) {
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
++ if(r == 0)
++ r =sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+ }
+
+-// static
+-uint64_t SysInfo::MaxSharedMemorySize() {
+- size_t limit;
+- size_t size = sizeof(limit);
+- if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
++int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
++ int page_size, r = 0;
++ unsigned pgfree, pginact, pgcache;
++ size_t size = sizeof(page_size);
++ size_t szpg = sizeof(pgfree);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+- return static_cast<uint64_t>(limit);
++ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
++}
++
++// static
++std::string SysInfo::CPUModelName() {
++ int mib[] = { CTL_HW, HW_MODEL };
++ char name[256];
++ size_t size = base::size(name);
++ if (sysctl(mib, base::size(mib), &name, &size, NULL, 0) == 0)
++ return name;
++ return std::string();
++}
++
++int SysInfo::NumberOfProcessors() {
++ int mib[] = { CTL_HW, HW_NCPU };
++ int ncpu;
++ size_t size = sizeof(ncpu);
++ if (sysctl(mib, base::size(mib), &ncpu, &size, NULL, 0) == -1) {
++ NOTREACHED();
++ return 1;
++ }
++ return ncpu;
+ }
+
+ } // namespace base
diff --git a/devel/electron6/files/patch-base_system_sys__info__posix.cc b/devel/electron6/files/patch-base_system_sys__info__posix.cc
new file mode 100644
index 000000000000..921d6a5ffde1
--- /dev/null
+++ b/devel/electron6/files/patch-base_system_sys__info__posix.cc
@@ -0,0 +1,38 @@
+--- base/system/sys_info_posix.cc.orig 2019-09-10 11:13:31 UTC
++++ base/system/sys_info_posix.cc
+@@ -38,7 +38,7 @@
+
+ namespace {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ int NumberOfProcessors() {
+ // sysconf returns the number of "logical" (not "physical") processors on both
+ // Mac and Linux. So we get the number of max available "logical" processors.
+@@ -64,7 +64,7 @@ int NumberOfProcessors() {
+
+ base::LazyInstance<base::internal::LazySysInfoValue<int, NumberOfProcessors>>::
+ Leaky g_lazy_number_of_processors = LAZY_INSTANCE_INITIALIZER;
+-#endif // !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#endif // !defined(OS_FUCHSIA) && !defined(OS_BSD)
+
+ #if !defined(OS_FUCHSIA)
+ int64_t AmountOfVirtualMemory() {
+@@ -132,7 +132,7 @@ bool GetDiskSpaceInfo(const base::FilePath& path,
+
+ namespace base {
+
+-#if !defined(OS_OPENBSD) && !defined(OS_FUCHSIA)
++#if !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ int SysInfo::NumberOfProcessors() {
+ return g_lazy_number_of_processors.Get().value();
+ }
+@@ -227,6 +227,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron6/files/patch-base_task_thread__pool_environment__config__unittest.cc b/devel/electron6/files/patch-base_task_thread__pool_environment__config__unittest.cc
new file mode 100644
index 000000000000..b5b813ab5c37
--- /dev/null
+++ b/devel/electron6/files/patch-base_task_thread__pool_environment__config__unittest.cc
@@ -0,0 +1,11 @@
+--- base/task/thread_pool/environment_config_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/task/thread_pool/environment_config_unittest.cc
+@@ -14,7 +14,7 @@ namespace internal {
+ TEST(ThreadPoolEnvironmentConfig, CanUseBackgroundPriorityForWorker) {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
+ EXPECT_TRUE(CanUseBackgroundPriorityForWorkerThread());
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS) || defined(OS_NACL)
+ EXPECT_FALSE(CanUseBackgroundPriorityForWorkerThread());
+ #else
diff --git a/devel/electron6/files/patch-base_test_fontconfig__util__linux.cc b/devel/electron6/files/patch-base_test_fontconfig__util__linux.cc
new file mode 100644
index 000000000000..792f57840d80
--- /dev/null
+++ b/devel/electron6/files/patch-base_test_fontconfig__util__linux.cc
@@ -0,0 +1,408 @@
+--- base/test/fontconfig_util_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/test/fontconfig_util_linux.cc
+@@ -6,24 +6,397 @@
+
+ #include <fontconfig/fontconfig.h>
+
+-#include <memory>
+-
+ #include "base/base_paths.h"
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
++#include "base/files/file_util.h"
+ #include "base/logging.h"
++#include "base/macros.h"
+ #include "base/path_service.h"
++#include "base/strings/string_util.h"
+
+ namespace base {
+
++namespace {
++
++const char kFontsConfTemplate[] = R"(<?xml version="1.0"?>
++<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
++<fontconfig>
++
++ <!-- Cache location. -->
++ <cachedir>$1</cachedir>
++
++ <!-- GCS-synced fonts. -->
++ <dir>$2</dir>
++
++ <!-- Default properties. -->
++ <match target="font">
++ <edit name="embeddedbitmap" mode="append_last">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- Some layout tests specify Helvetica as a family and we need to make sure
++ that we don't fallback to Tinos for them -->
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Helvetica</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans-serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>mono</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>monospace</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>cursive</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Comic Sans MS</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>fantasy</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Impact</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Monaco</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Arial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier New</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Georgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times New Roman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Verdana</string>
++ </test>
++ <!-- NOT metrically compatible! -->
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- TODO(thomasanderson): Move these configs to be test-specific. -->
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonAntiAliasedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="antialias" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedGeorgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonHintedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <!-- These deliberately contradict each other. The 'hinting' preference
++ should take priority -->
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>AutohintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>HintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>false</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>FullAndAutoHintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelEnabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>rgb</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelDisabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>none</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- FontConfig doesn't currently provide a well-defined way to turn on
++ subpixel positioning. This is just an arbitrary pattern to use after
++ turning subpixel positioning on globally to ensure that we don't have
++ issues with our style getting cached for other tests. -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioning</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- See comments above -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioningAhem</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>ahem</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedTimesNewRoman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <!-- When we encounter a character that the current font doesn't
++ support, gfx::GetFallbackFontForChar() returns the first font
++ that does have a glyph for the character. The list of fonts is
++ sorted by a pattern that includes the current locale, but doesn't
++ include a font family (which means that the fallback font depends
++ on the locale but not on the current font).
++
++ DejaVu Sans is commonly the only font that supports some
++ characters, such as "⇧", and even when other candidates are
++ available, DejaVu Sans is commonly first among them, because of
++ the way Fontconfig is ordinarily configured. For example, the
++ configuration in the Fonconfig source lists DejaVu Sans under the
++ sans-serif generic family, and appends sans-serif to patterns
++ that don't already include a generic family (such as the pattern
++ in gfx::GetFallbackFontForChar()).
++
++ To get the same fallback font in the layout tests, we could
++ duplicate this configuration here, or more directly, simply
++ append DejaVu Sans to all patterns. -->
++ <match target="pattern">
++ <edit name="family" mode="append_last">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++</fontconfig>
++)";
++
++} // namespace
++
+ void SetUpFontconfig() {
+- FilePath dir_module;
+- CHECK(PathService::Get(DIR_MODULE, &dir_module));
++ std::unique_ptr<Environment> env = Environment::Create();
++ if (!env->HasVar("FONTCONFIG_FILE")) {
++ // fonts.conf must be generated on-the-fly since it contains absolute paths
++ // which may be different if
++ // 1. The user moves/renames their build directory (or any parent dirs).
++ // 2. The build directory is mapped on a swarming bot at a location
++ // different from the one the buildbot used.
++ FilePath dir_module;
++ PathService::Get(DIR_MODULE, &dir_module);
++ FilePath font_cache = dir_module.Append("fontconfig_caches");
++ FilePath test_fonts = dir_module.Append("test_fonts");
++ std::string fonts_conf = ReplaceStringPlaceholders(
++ kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr);
+
+- std::unique_ptr<Environment> env(Environment::Create());
+- // TODO(thomasanderson): This still stat()'s the real /etc/fonts/fonts.conf.
+- // Prevent fontconfig from doing this.
+- CHECK(env->SetVar("FONTCONFIG_SYSROOT", dir_module.value().c_str()));
++ // Write the data to a different file and then atomically rename it to
++ // fonts.conf. This avoids the file being in a bad state when different
++ // parallel tests call this function at the same time.
++ FilePath fonts_conf_file_temp;
++ if(!CreateTemporaryFileInDir(dir_module, &fonts_conf_file_temp))
++ CHECK(CreateTemporaryFile(&fonts_conf_file_temp));
++ CHECK(
++ WriteFile(fonts_conf_file_temp, fonts_conf.c_str(), fonts_conf.size()));
++ FilePath fonts_conf_file = dir_module.Append("fonts.conf");
++ if (ReplaceFile(fonts_conf_file_temp, fonts_conf_file, nullptr))
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file.value());
++ else
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file_temp.value());
++ }
+ }
+
+ } // namespace base
diff --git a/devel/electron6/files/patch-base_test_generate__fontconfig__caches.cc b/devel/electron6/files/patch-base_test_generate__fontconfig__caches.cc
new file mode 100644
index 000000000000..53f2e4bfcee5
--- /dev/null
+++ b/devel/electron6/files/patch-base_test_generate__fontconfig__caches.cc
@@ -0,0 +1,25 @@
+--- base/test/generate_fontconfig_caches.cc.orig 2019-09-10 10:42:27 UTC
++++ base/test/generate_fontconfig_caches.cc
+@@ -52,14 +52,21 @@ int main() {
+
+ // Delete directory before generating fontconfig caches. This will notify
+ // future fontconfig_caches changes.
+- CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true));
+
++ CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true));
+ base::SetUpFontconfig();
+ FcInit();
+ FcFini();
+
+ // Check existence of intended fontconfig cache file.
++#if defined(OS_BSD)
++ // Our version of fontconfig is too old to respect .uuid files in font directories,
++ // so we check for the CACHEDIR.TAG file instead
+ CHECK(base::PathExists(
++ fontconfig_caches.Append("CACHEDIR.TAG")));
++#else
++ CHECK(base::PathExists(
+ fontconfig_caches.Append(base::StrCat({uuid, "-le64.cache-7"}))));
++#endif
+ return 0;
+ }
diff --git a/devel/electron6/files/patch-base_test_launcher_test__launcher.cc b/devel/electron6/files/patch-base_test_launcher_test__launcher.cc
new file mode 100644
index 000000000000..974714483b30
--- /dev/null
+++ b/devel/electron6/files/patch-base_test_launcher_test__launcher.cc
@@ -0,0 +1,10 @@
+--- base/test/launcher/test_launcher.cc.orig 2019-09-10 11:13:31 UTC
++++ base/test/launcher/test_launcher.cc
+@@ -53,6 +53,7 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+
+ #if defined(OS_POSIX)
++#include <signal.h>
+ #include <fcntl.h>
+
+ #include "base/files/file_descriptor_watcher_posix.h"
diff --git a/devel/electron6/files/patch-base_test_test__file__util__linux.cc b/devel/electron6/files/patch-base_test_test__file__util__linux.cc
new file mode 100644
index 000000000000..72effb5b877b
--- /dev/null
+++ b/devel/electron6/files/patch-base_test_test__file__util__linux.cc
@@ -0,0 +1,13 @@
+--- base/test/test_file_util_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/test/test_file_util_linux.cc
+@@ -51,8 +51,10 @@ bool EvictFileFromSystemCache(const FilePath& file) {
+ return false;
+ if (fdatasync(fd.get()) != 0)
+ return false;
++#if !defined(OS_BSD)
+ if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
+ return false;
++#endif
+ return true;
+ }
+
diff --git a/devel/electron6/files/patch-base_test_test__file__util__posix.cc b/devel/electron6/files/patch-base_test_test__file__util__posix.cc
new file mode 100644
index 000000000000..7e78e3eb7711
--- /dev/null
+++ b/devel/electron6/files/patch-base_test_test__file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/test/test_file_util_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/test/test_file_util_posix.cc
+@@ -85,7 +85,7 @@ void SyncPageCacheToDisk() {
+ sync();
+ }
+
+-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ bool EvictFileFromSystemCache(const FilePath& file) {
+ // There doesn't seem to be a POSIX way to cool the disk cache.
+ NOTIMPLEMENTED();
diff --git a/devel/electron6/files/patch-base_third__party_libevent_BUILD.gn b/devel/electron6/files/patch-base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..6720b6ba96dc
--- /dev/null
+++ b/devel/electron6/files/patch-base_third__party_libevent_BUILD.gn
@@ -0,0 +1,24 @@
+--- base/third_party/libevent/BUILD.gn.orig 2019-09-10 10:42:27 UTC
++++ base/third_party/libevent/BUILD.gn
+@@ -43,13 +43,20 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
+- } else if (is_linux) {
++ } else if (is_linux && !is_bsd) {
+ sources += [
+ "epoll.c",
+ "linux/config.h",
+ "linux/event-config.h",
+ ]
+ include_dirs = [ "linux" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_android) {
+ sources += [
+ "android/config.h",
diff --git a/devel/electron6/files/patch-base_threading_platform__thread.h b/devel/electron6/files/patch-base_threading_platform__thread.h
new file mode 100644
index 000000000000..a3b866a6ee3b
--- /dev/null
+++ b/devel/electron6/files/patch-base_threading_platform__thread.h
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread.h.orig 2019-09-10 11:13:31 UTC
++++ base/threading/platform_thread.h
+@@ -220,7 +220,7 @@ class BASE_EXPORT PlatformThread {
+
+ static ThreadPriority GetCurrentThreadPriority();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Toggles a specific thread's priority at runtime. This can be used to
+ // change the priority of a thread in a different process and will fail
+ // if the calling process does not have proper permissions. The
diff --git a/devel/electron6/files/patch-base_threading_platform__thread__linux.cc b/devel/electron6/files/patch-base_threading_platform__thread__linux.cc
new file mode 100644
index 000000000000..e91cd08201a6
--- /dev/null
+++ b/devel/electron6/files/patch-base_threading_platform__thread__linux.cc
@@ -0,0 +1,30 @@
+--- base/threading/platform_thread_linux.cc.orig 2019-09-10 10:42:27 UTC
++++ base/threading/platform_thread_linux.cc
+@@ -18,7 +18,9 @@
+
+ #if !defined(OS_NACL) && !defined(OS_AIX)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -99,7 +101,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToN
+
+ Optional<bool> CanIncreaseCurrentThreadPriorityForPlatform(
+ ThreadPriority priority) {
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // A non-zero soft-limit on RLIMIT_RTPRIO is required to be allowed to invoke
+ // pthread_setschedparam in SetCurrentThreadPriorityForPlatform().
+ struct rlimit rlim;
+@@ -141,7 +143,7 @@ Optional<ThreadPriority> GetCurrentThreadPriorityForPl
+ void PlatformThread::SetName(const std::string& name) {
+ ThreadIdNameManager::GetInstance()->SetName(name);
+
+-#if !defined(OS_NACL) && !defined(OS_AIX)
++#if !defined(OS_NACL) && !defined(OS_AIX) && !defined(OS_BSD)
+ // On linux we can get the thread names to show up in the debugger by setting
+ // the process name for the LWP. We don't want to do this for the main
+ // thread because that would rename the process, causing tools like killall
diff --git a/devel/electron6/files/patch-base_threading_platform__thread__posix.cc b/devel/electron6/files/patch-base_threading_platform__thread__posix.cc
new file mode 100644
index 000000000000..126b24a3c18a
--- /dev/null
+++ b/devel/electron6/files/patch-base_threading_platform__thread__posix.cc
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread_posix.cc.orig 2019-09-10 10:42:27 UTC
++++ base/threading/platform_thread_posix.cc
+@@ -66,7 +66,7 @@ void* ThreadFunc(void* params) {
+ if (!thread_params->joinable)
+ base::ThreadRestrictions::SetSingletonAllowed(false);
+
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // Threads on linux/android may inherit their priority from the thread
+ // where they were created. This explicitly sets the priority of all new
+ // threads.
diff --git a/devel/electron6/files/patch-base_threading_thread__local__storage__unittest.cc b/devel/electron6/files/patch-base_threading_thread__local__storage__unittest.cc
new file mode 100644
index 000000000000..64c8dc88a3a5
--- /dev/null
+++ b/devel/electron6/files/patch-base_threading_thread__local__storage__unittest.cc
@@ -0,0 +1,11 @@
+--- base/threading/thread_local_storage_unittest.cc.orig 2019-09-10 10:42:27 UTC
++++ base/threading/thread_local_storage_unittest.cc
+@@ -86,7 +86,7 @@ class ThreadLocalStorageRunner : public DelegateSimple
+ void ThreadLocalStorageCleanup(void *value) {
+ int *ptr = reinterpret_cast<int*>(value);
+ // Destructors should never be called with a NULL.
+- ASSERT_NE(reinterpret_cast<int*>(NULL), ptr);
++ ASSERT_NE(static_cast<int*>(NULL), ptr);
+ if (*ptr == kFinalTlsValue)
+ return; // We've been called enough times.
+ ASSERT_LT(kFinalTlsValue, *ptr);
diff --git a/devel/electron6/files/patch-base_threading_thread__task__runner__handle.cc b/devel/electron6/files/patch-base_threading_thread__task__runner__handle.cc
new file mode 100644
index 000000000000..54a572404ad7
--- /dev/null
+++ b/devel/electron6/files/patch-base_threading_thread__task__runner__handle.cc
@@ -0,0 +1,26 @@
+--- base/threading/thread_task_runner_handle.cc.orig 2019-09-10 10:42:27 UTC
++++ base/threading/thread_task_runner_handle.cc
+@@ -8,6 +8,7 @@
+ #include <utility>
+
+ #include "base/bind.h"
++#include "base/callback_helpers.h"
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/run_loop.h"
+@@ -37,6 +38,7 @@ bool ThreadTaskRunnerHandle::IsSet() {
+ return !!thread_task_runner_tls.Pointer()->Get();
+ }
+
++#if defined(OS_BSD)
+ // static
+ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideForTesting(
+ scoped_refptr<SingleThreadTaskRunner> overriding_task_runner) {
+@@ -81,6 +83,7 @@ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideFo
+ base::Unretained(ttrh->task_runner_.get()),
+ std::move(no_running_during_override)));
+ }
++#endif
+
+ ThreadTaskRunnerHandle::ThreadTaskRunnerHandle(
+ scoped_refptr<SingleThreadTaskRunner> task_runner)
diff --git a/devel/electron6/files/patch-base_trace__event_malloc__dump__provider.cc b/devel/electron6/files/patch-base_trace__event_malloc__dump__provider.cc
new file mode 100644
index 000000000000..460e7c80e458
--- /dev/null
+++ b/devel/electron6/files/patch-base_trace__event_malloc__dump__provider.cc
@@ -0,0 +1,21 @@
+--- base/trace_event/malloc_dump_provider.cc.orig 2019-09-10 11:13:31 UTC
++++ base/trace_event/malloc_dump_provider.cc
+@@ -17,6 +17,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_BSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -132,6 +134,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
+ }
+ #elif defined(OS_FUCHSIA)
+ // TODO(fuchsia): Port, see https://crbug.com/706592.
++#elif defined(OS_BSD)
++ total_virtual_size = 0;
++ allocated_objects_size = 0;
+ #else
+ struct mallinfo info = mallinfo();
+ DCHECK_GE(info.arena + info.hblkhd, info.uordblks);
diff --git a/devel/electron6/files/patch-base_trace__event_process__memory__dump.cc b/devel/electron6/files/patch-base_trace__event_process__memory__dump.cc
new file mode 100644
index 000000000000..797561ed0b25
--- /dev/null
+++ b/devel/electron6/files/patch-base_trace__event_process__memory__dump.cc
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.cc.orig 2019-09-10 10:42:27 UTC
++++ base/trace_event/process_memory_dump.cc
+@@ -94,7 +94,7 @@ size_t ProcessMemoryDump::CountResidentBytes(void* sta
+ #if defined(OS_WIN)
+ std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
+ new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<char[]> vec(new char[max_vec_size]);
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
diff --git a/devel/electron6/files/patch-base_trace__event_process__memory__dump.h b/devel/electron6/files/patch-base_trace__event_process__memory__dump.h
new file mode 100644
index 000000000000..15e8996c3844
--- /dev/null
+++ b/devel/electron6/files/patch-base_trace__event_process__memory__dump.h
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.h.orig 2019-09-10 10:42:27 UTC
++++ base/trace_event/process_memory_dump.h
+@@ -22,7 +22,7 @@
+
+ // Define COUNT_RESIDENT_BYTES_SUPPORTED if platform supports counting of the
+ // resident memory.
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ #define COUNT_RESIDENT_BYTES_SUPPORTED
+ #endif
+
diff --git a/devel/electron6/files/patch-build_config_BUILD.gn b/devel/electron6/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..c9bc3faf1bc9
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig 2019-09-10 11:13:31 UTC
++++ build/config/BUILD.gn
+@@ -161,7 +161,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
++ } else if ((is_linux || is_bsd) && current_cpu == "x64" && enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+ # TODO(phajdan.jr): Should we enable this for all of POSIX?
+@@ -259,9 +259,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -349,7 +347,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_config" ]
+ if (is_chromecast) {
+ configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/devel/electron6/files/patch-build_config_BUILDCONFIG.gn b/devel/electron6/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..789168df9ce2
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,48 @@
+--- build/config/BUILDCONFIG.gn.orig 2019-09-16 09:24:24 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -134,10 +134,10 @@ declare_args() {
+ is_official_build = false
+
+ # Whether we're a traditional desktop unix.
+- is_desktop_linux = current_os == "linux"
++ is_desktop_linux = current_os == "linux" || current_os == "freebsd"
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64")
+@@ -189,8 +189,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" && target_os != "freebsd") {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+ } else if (is_clang) {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -227,7 +227,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -291,10 +291,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "chromeos" || current_os == "linux"
++is_linux = current_os == "chromeos" || current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+
+ is_posix = !is_win && !is_fuchsia
+
diff --git a/devel/electron6/files/patch-build_config_allocator.gni b/devel/electron6/files/patch-build_config_allocator.gni
new file mode 100644
index 000000000000..cb963a2bb89b
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_allocator.gni
@@ -0,0 +1,20 @@
+--- build/config/allocator.gni.orig 2019-09-10 11:13:31 UTC
++++ build/config/allocator.gni
+@@ -6,7 +6,7 @@ import("//build/config/sanitizers/sanitizers.gni")
+
+ # Temporarily disable tcmalloc on arm64 linux to get rid of compilation errors.
+ if (is_android || is_mac || is_ios || is_asan || is_lsan || is_tsan ||
+- is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64")) {
++ is_msan || is_win || is_fuchsia || (is_linux && target_cpu == "arm64") || is_bsd) {
+ _default_allocator = "none"
+ } else {
+ _default_allocator = "tcmalloc"
+@@ -17,7 +17,7 @@ if (is_android || is_mac || is_ios || is_asan || is_ls
+ # against the debug CRT with "is_nacl=false".
+ if ((is_linux || is_android || is_mac ||
+ (is_win && !is_component_build && !is_debug)) && !is_asan && !is_hwasan &&
+- !is_lsan && !is_tsan && !is_msan) {
++ !is_lsan && !is_tsan && !is_msan && !is_bsd) {
+ _default_use_allocator_shim = true
+ } else {
+ _default_use_allocator_shim = false
diff --git a/devel/electron6/files/patch-build_config_compiler_BUILD.gn b/devel/electron6/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..6adaadb95efa
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,92 @@
+--- build/config/compiler/BUILD.gn.orig 2019-09-10 11:13:31 UTC
++++ build/config/compiler/BUILD.gn
+@@ -54,7 +54,7 @@ declare_args() {
+ # only two architectures that are currently checked in). Turn this off when
+ # you are using a custom toolchain and need to control -B in cflags.
+ linux_use_bundled_binutils =
+- linux_use_bundled_binutils_override && is_linux &&
++ linux_use_bundled_binutils_override && (is_linux && !is_bsd) &&
+ (current_cpu == "x64" || current_cpu == "x86")
+ binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
+ root_build_dir)
+@@ -269,7 +269,7 @@ config("compiler") {
+ # Linker warnings.
+ if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
+ !(is_android && use_order_profiling) && !is_mac && !is_ios &&
+- current_os != "aix") {
++ current_os != "aix" && !is_bsd) {
+ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
+ # TODO(lizeb,pasko): Fix link errors when linking with order_profiling=1
+ # crbug.com/485542
+@@ -363,7 +363,7 @@ config("compiler") {
+
+ # Compiler instrumentation can introduce dependencies in DSOs to symbols in
+ # the executable they are loaded into, so they are unresolved at link-time.
+- if (!using_sanitizer) {
++ if (!using_sanitizer && !is_bsd) {
+ ldflags += [
+ "-Wl,-z,defs",
+ "-Wl,--as-needed",
+@@ -471,7 +471,7 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
++ if (is_clang && !is_nacl && !use_xcode_clang && !is_bsd) {
+ cflags += [ "-fcrash-diagnostics-dir=" +
+ rebase_path("//tools/clang/crashreports", root_build_dir) ]
+
+@@ -741,7 +741,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1102,7 +1102,7 @@ config("compiler_deterministic") {
+ "-Xclang",
+ ".",
+ ]
+- if (!is_win) {
++ if (!is_win && !is_bsd) {
+ # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+ asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+ }
+@@ -1492,7 +1492,7 @@ config("default_warnings") {
+ cflags += [ "-Wno-nonportable-include-path" ]
+ }
+
+- if (current_toolchain == host_toolchain || !use_xcode_clang) {
++ if ((current_toolchain == host_toolchain || !use_xcode_clang) && !is_bsd) {
+ # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
+ # recognize.
+ cflags += [
+@@ -1701,7 +1701,7 @@ config("thin_archive") {
+ # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
+ # have a "thin archive" mode (it does accept -T, but it means truncating
+ # archive names to 16 characters, which is not what we want).
+- if ((is_posix && !is_nacl && !is_mac && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_mac && !is_ios && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ } else if (is_win && use_lld) {
+ arflags = [ "/llvmlibthin" ]
+@@ -2288,7 +2288,7 @@ config("symbols") {
+ # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+ # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+ if (!is_nacl || is_clang) {
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+
+ if (use_debug_fission && !is_nacl && !is_android) {
+@@ -2309,7 +2309,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ if (!is_mac && !is_ios && !is_nacl && current_cpu != "x86" &&
+- (use_gold || use_lld)) {
++ (use_gold || use_lld) && !is_bsd) {
+ if (is_clang) {
+ # This flag enables the GNU-format pubnames and pubtypes sections,
+ # which lld needs in order to generate a correct GDB index.
diff --git a/devel/electron6/files/patch-build_config_compiler_compiler.gni b/devel/electron6/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..92b64565c1b2
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- build/config/compiler/compiler.gni.orig 2019-09-10 11:13:31 UTC
++++ build/config/compiler/compiler.gni
+@@ -179,7 +179,7 @@ declare_args() {
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+ use_gold =
+- !use_lld && !(is_chromecast && is_linux &&
++ !is_bsd && !use_lld && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ ((is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
diff --git a/devel/electron6/files/patch-build_config_features.gni b/devel/electron6/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..834c9637a5db
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig 2019-09-10 11:13:32 UTC
++++ build/config/features.gni
+@@ -45,7 +45,7 @@ declare_args() {
+ }
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = is_linux && !is_chromecast
++ use_udev = is_linux && !is_chromecast && !is_bsd
+
+ use_dbus = is_linux && !is_chromecast
+
diff --git a/devel/electron6/files/patch-build_config_freetype_freetype.gni b/devel/electron6/files/patch-build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..4dd88cdc4a20
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- build/config/freetype/freetype.gni.orig 2019-09-10 10:42:27 UTC
++++ build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/devel/electron6/files/patch-build_config_linux_BUILD.gn b/devel/electron6/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..975dfdd1f96e
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig 2019-09-10 10:42:27 UTC
++++ build/config/linux/BUILD.gn
+@@ -28,7 +28,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/devel/electron6/files/patch-build_config_linux_pkg-config.py b/devel/electron6/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..51d73283252c
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig 2019-09-10 10:42:27 UTC
++++ build/config/linux/pkg-config.py
+@@ -59,8 +59,12 @@ def SetConfigPath(options):
+ print("You must specify an architecture via -a if using a sysroot.")
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -109,7 +113,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print("[[],[],[],[],[]]")
+ return 0
+
diff --git a/devel/electron6/files/patch-build_config_sysroot.gni b/devel/electron6/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..5836c542a813
--- /dev/null
+++ b/devel/electron6/files/patch-build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- build/config/sysroot.gni.orig 2019-09-10 11:13:32 UTC
++++ build/config/sysroot.gni
+@@ -15,9 +15,10 @@ declare_args() {
+ # The absolute path to directory containing linux sysroot images
+ target_sysroot_dir = "//build/linux"
+
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (
++ current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (current_os == target_os && current_cpu == target_cpu &&
diff --git a/devel/electron6/files/patch-build_detect__host__arch.py b/devel/electron6/files/patch-build_detect__host__arch.py
new file mode 100644
index 000000000000..609d0cbc48bd
--- /dev/null
+++ b/devel/electron6/files/patch-build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- build/detect_host_arch.py.orig 2019-09-10 10:42:27 UTC
++++ build/detect_host_arch.py
+@@ -21,6 +21,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/devel/electron6/files/patch-build_gn__run__binary.py b/devel/electron6/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..df5a65dc910f
--- /dev/null
+++ b/devel/electron6/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig 2019-09-10 10:42:27 UTC
++++ build/gn_run_binary.py
+@@ -24,7 +24,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/devel/electron6/files/patch-build_linux_chrome.map b/devel/electron6/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..3fd5dce03090
--- /dev/null
+++ b/devel/electron6/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig 2019-09-10 10:42:27 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -81,7 +88,4 @@ global:
+ localtime64;
+ localtime64_r;
+ localtime_r;
+-
+-local:
+- *;
+ };
diff --git a/devel/electron6/files/patch-build_linux_libpci_BUILD.gn b/devel/electron6/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..e6b5d78f81ab
--- /dev/null
+++ b/devel/electron6/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig 2019-09-10 10:42:27 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/devel/electron6/files/patch-build_linux_unbundle_libusb.gn b/devel/electron6/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..e4d1bb15f11d
--- /dev/null
+++ b/devel/electron6/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig 2019-09-16 09:25:10 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/devel/electron6/files/patch-build_linux_unbundle_replace__gn__files.py b/devel/electron6/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..310b08490351
--- /dev/null
+++ b/devel/electron6/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig 2019-09-10 10:42:27 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/devel/electron6/files/patch-build_toolchain_gcc__toolchain.gni b/devel/electron6/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..de9f6ffbe48b
--- /dev/null
+++ b/devel/electron6/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig 2019-09-10 11:13:32 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -36,6 +36,11 @@ if (is_linux && target_os == "android") {
+ enable_resource_whitelist_generation = false
+ }
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -617,13 +622,23 @@ template("clang_toolchain") {
+ }
+
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "$prefix/clang"
+- cxx = "$prefix/clang++"
+- ld = cxx
+- readelf = "${toolprefix}readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${toolprefix}nm"
++ if (is_bsd) {
++ prefix = "/usr/local/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ readelf = "readelf"
++ ar = "${prefix}/ar"
++ nm = "${toolprefix}nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${toolprefix}readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${toolprefix}nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/devel/electron6/files/patch-build_toolchain_get__concurrent__links.py b/devel/electron6/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..a0b276ce8036
--- /dev/null
+++ b/devel/electron6/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig 2019-09-10 10:42:27 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -48,6 +48,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/devel/electron6/files/patch-build_toolchain_linux_BUILD.gn b/devel/electron6/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..248c492da700
--- /dev/null
+++ b/devel/electron6/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig 2019-09-10 10:42:27 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -22,7 +22,6 @@ clang_toolchain("clang_arm") {
+ }
+
+ clang_toolchain("clang_arm64") {
+- toolprefix = "aarch64-linux-gnu-"
+ toolchain_args = {
+ current_cpu = "arm64"
+ current_os = "linux"
diff --git a/devel/electron6/files/patch-cc_BUILD.gn b/devel/electron6/files/patch-cc_BUILD.gn
new file mode 100644
index 000000000000..44ac52da9549
--- /dev/null
+++ b/devel/electron6/files/patch-cc_BUILD.gn
@@ -0,0 +1,21 @@
+--- cc/BUILD.gn.orig 2019-09-10 11:13:32 UTC
++++ cc/BUILD.gn
+@@ -566,7 +566,7 @@ cc_test_static_library("test_support") {
+ if (enable_vulkan) {
+ deps += [ "//gpu/vulkan/init" ]
+ }
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ data_deps = [
+ "//third_party/mesa_headers",
+ ]
+@@ -767,9 +767,6 @@ cc_test("cc_unittests") {
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ "//ui/gl:test_support",
+- ]
+- data_deps = [
+- "//third_party/mesa_headers",
+ ]
+ }
+
diff --git a/devel/electron6/files/patch-cc_layers_scrollbar__layer__impl__base.cc b/devel/electron6/files/patch-cc_layers_scrollbar__layer__impl__base.cc
new file mode 100644
index 000000000000..4224dd142bf9
--- /dev/null
+++ b/devel/electron6/files/patch-cc_layers_scrollbar__layer__impl__base.cc
@@ -0,0 +1,13 @@
+--- cc/layers/scrollbar_layer_impl_base.cc.orig 2019-09-10 11:13:32 UTC
++++ cc/layers/scrollbar_layer_impl_base.cc
+@@ -218,8 +218,8 @@ gfx::Rect ScrollbarLayerImplBase::ComputeThumbQuadRect
+ int thumb_offset = TrackStart();
+ if (maximum > 0) {
+ float ratio = clamped_current_pos / maximum;
+- float max_offset = track_length - thumb_length;
+- thumb_offset += static_cast<int>(ratio * max_offset);
++ float _max_offset = track_length - thumb_length;
++ thumb_offset += static_cast<int>(ratio * _max_offset);
+ }
+
+ float thumb_thickness_adjustment =
diff --git a/devel/electron6/files/patch-cc_trees_property__tree.cc b/devel/electron6/files/patch-cc_trees_property__tree.cc
new file mode 100644
index 000000000000..81e150be23a2
--- /dev/null
+++ b/devel/electron6/files/patch-cc_trees_property__tree.cc
@@ -0,0 +1,20 @@
+--- cc/trees/property_tree.cc.orig 2019-09-10 11:13:33 UTC
++++ cc/trees/property_tree.cc
+@@ -1348,13 +1348,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scro
+
+ gfx::Size clip_layer_bounds = container_bounds(scroll_node->id);
+
+- gfx::ScrollOffset max_offset(
++ gfx::ScrollOffset _max_offset(
+ scaled_scroll_bounds.width() - clip_layer_bounds.width(),
+ scaled_scroll_bounds.height() - clip_layer_bounds.height());
+
+- max_offset.Scale(1 / scale_factor);
+- max_offset.SetToMax(gfx::ScrollOffset());
+- return max_offset;
++ _max_offset.Scale(1 / scale_factor);
++ _max_offset.SetToMax(gfx::ScrollOffset());
++ return _max_offset;
+ }
+
+ gfx::SizeF ScrollTree::scroll_bounds(int scroll_node_id) const {
diff --git a/devel/electron6/files/patch-chrome_app_chrome__command__ids.h b/devel/electron6/files/patch-chrome_app_chrome__command__ids.h
new file mode 100644
index 000000000000..5fd254d7ee57
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_chrome__command__ids.h
@@ -0,0 +1,11 @@
+--- chrome/app/chrome_command_ids.h.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/chrome_command_ids.h
+@@ -63,7 +63,7 @@
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_2 34049
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_3 34050
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #define IDC_USE_SYSTEM_TITLE_BAR 34051
+ #define IDC_RESTORE_WINDOW 34052
+ #endif
diff --git a/devel/electron6/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc b/devel/electron6/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc
new file mode 100644
index 000000000000..041395feabcc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc
@@ -0,0 +1,20 @@
+--- chrome/app/chrome_content_browser_overlay_manifest.cc.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/chrome_content_browser_overlay_manifest.cc
+@@ -79,7 +79,7 @@
+ #include "chrome/services/app_service/public/cpp/manifest.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ #include "chrome/browser/performance_manager/webui_graph_dump.mojom.h" // nogncheck
+ #include "chrome/browser/ui/webui/discards/discards.mojom.h"
+@@ -240,7 +240,7 @@ const service_manager::Manifest& GetChromeContentBrows
+ #else
+ app_management::mojom::PageHandlerFactory,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ mojom::DiscardsDetailsProvider,
+ performance_manager::mojom::WebUIGraphDump,
diff --git a/devel/electron6/files/patch-chrome_app_chrome__main.cc b/devel/electron6/files/patch-chrome_app_chrome__main.cc
new file mode 100644
index 000000000000..3a27ea7058cf
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_chrome__main.cc
@@ -0,0 +1,16 @@
+--- chrome/app/chrome_main.cc.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/chrome_main.cc
+@@ -94,11 +94,11 @@ int ChromeMain(int argc, const char** argv) {
+ #endif
+
+ // Chrome-specific process modes.
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ if (command_line->HasSwitch(switches::kHeadless)) {
+ return headless::HeadlessShellMain(params);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ int rv = content::ContentMain(params);
+
diff --git a/devel/electron6/files/patch-chrome_app_chrome__main__delegate.cc b/devel/electron6/files/patch-chrome_app_chrome__main__delegate.cc
new file mode 100644
index 000000000000..20d645e2d045
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_chrome__main__delegate.cc
@@ -0,0 +1,137 @@
+--- chrome/app/chrome_main_delegate.cc.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/chrome_main_delegate.cc
+@@ -100,7 +100,7 @@
+ #include "chrome/app/shutdown_signal_handlers_posix.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ #include "components/nacl/common/nacl_paths.h"
+ #include "components/nacl/zygote/nacl_fork_delegate_linux.h"
+ #endif
+@@ -137,7 +137,7 @@
+ #include "v8/include/v8.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #endif
+
+@@ -241,7 +241,7 @@ bool UseHooks() {
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ void AdjustLinuxOOMScore(const std::string& process_type) {
+ // Browsers and zygotes should still be killable, but killed last.
+ const int kZygoteScore = 0;
+@@ -300,7 +300,7 @@ void AdjustLinuxOOMScore(const std::string& process_ty
+ if (score > -1)
+ base::AdjustOOMScore(base::GetCurrentProcId(), score);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ // Returns true if this subprocess type needs the ResourceBundle initialized
+ // and resources loaded.
+@@ -345,7 +345,7 @@ bool HandleVersionSwitches(const base::CommandLine& co
+ return false;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Show the man page if --help or -h is on the command line.
+ void HandleHelpSwitches(const base::CommandLine& command_line) {
+ if (command_line.HasSwitch(switches::kHelp) ||
+@@ -355,7 +355,7 @@ void HandleHelpSwitches(const base::CommandLine& comma
+ PLOG(FATAL) << "execlp failed";
+ }
+ }
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ void SIGTERMProfilingShutdown(int signal) {
+@@ -409,7 +409,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, Chrome does not support running multiple copies under different
+ // DISPLAYs, so the profile directory can be specified in the environment to
+ // support the virtual desktop use-case.
+@@ -421,7 +421,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ user_data_dir = base::FilePath::FromUTF8Unsafe(user_data_dir_string);
+ }
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_MACOSX)
+ policy::path_parser::CheckUserDataDirPolicy(&user_data_dir);
+ #endif // OS_MAC
+@@ -478,7 +478,7 @@ void InitLogging(const std::string& process_type) {
+ void RecordMainStartupMetrics(base::TimeTicks exe_entry_point_ticks) {
+ if (!exe_entry_point_ticks.is_null())
+ startup_metric_utils::RecordExeMainEntryPointTicks(exe_entry_point_ticks);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Record the startup process creation time on supported platforms.
+ startup_metric_utils::RecordStartupProcessCreationTime(
+ base::Process::Current().CreationTime());
+@@ -650,7 +650,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ *exit_code = 0;
+ return true; // Got a --version switch; exit with a success error code.
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This will directly exit if the user asked for help.
+ HandleHelpSwitches(command_line);
+ #endif
+@@ -674,7 +674,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ #if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+ #endif
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ nacl::RegisterPathProvider();
+ #endif
+
+@@ -868,7 +868,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ #if defined(OS_WIN)
+ child_process_logging::Init();
+ #endif
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
+@@ -996,7 +996,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ InitializePDF();
+ #endif
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Zygote needs to call InitCrashReporter() in RunZygote().
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ #if defined(OS_ANDROID)
+@@ -1011,7 +1011,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ breakpad::InitCrashReporter(process_type);
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // After all the platform Breakpads have been initialized, store the command
+ // line for crash reporting.
+@@ -1021,7 +1021,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
+ // Note: If you are adding a new process type below, be sure to adjust the
+ // AdjustLinuxOOMScore function too.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ AdjustLinuxOOMScore(process_type);
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron6/files/patch-chrome_app_chromium__strings.grd b/devel/electron6/files/patch-chrome_app_chromium__strings.grd
new file mode 100644
index 000000000000..6fb62dfcf696
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_chromium__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/chromium_strings.grd.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/chromium_strings.grd
+@@ -690,7 +690,7 @@ Signing in anyway will merge Chromium information like
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured Chromium to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -815,7 +815,7 @@ Signing in anyway will merge Chromium information like
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Chromium process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
+ </message>
+@@ -1074,7 +1074,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL">$2
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chromium to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron6/files/patch-chrome_app_generated__resources.grd b/devel/electron6/files/patch-chrome_app_generated__resources.grd
new file mode 100644
index 000000000000..cfab296a2170
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_generated__resources.grd
@@ -0,0 +1,29 @@
+--- chrome/app/generated_resources.grd.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/generated_resources.grd
+@@ -4805,7 +4805,7 @@ Keep your key file in a safe place. You will need it t
+ </if>
+
+ <!-- chrome://browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_TITLE" desc="about:browser-switch page title">
+ Legacy Browser Support
+ </message>
+@@ -6370,7 +6370,7 @@ the Bookmarks menu.">
+ Google Pay
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+ Use system title bar and borders
+ </message>
+@@ -7223,7 +7223,7 @@ Please help our engineers fix this problem. Tell us wh
+ Set as default
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_MINIMIZE_WINDOW_MENU" desc="The Linux browser window menu item text for minimizing the window.">
+ Minimize
+ </message>
diff --git a/devel/electron6/files/patch-chrome_app_google__chrome__strings.grd b/devel/electron6/files/patch-chrome_app_google__chrome__strings.grd
new file mode 100644
index 000000000000..53f102c48e87
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_google__chrome__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/google_chrome_strings.grd.orig 2019-09-10 11:13:35 UTC
++++ chrome/app/google_chrome_strings.grd
+@@ -702,7 +702,7 @@ Signing in anyway will merge Chrome information like b
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured Google Chrome to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -827,7 +827,7 @@ Signing in anyway will merge Chrome information like b
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Google Chrome process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chrome has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chrome.
+ </message>
+@@ -1093,7 +1093,7 @@ Please check your email at <ph name="ACCOUNT_EMAIL">$2
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chrome to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron6/files/patch-chrome_app_settings__strings.grdp b/devel/electron6/files/patch-chrome_app_settings__strings.grdp
new file mode 100644
index 000000000000..d79f857c0a5e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_settings__strings.grdp
@@ -0,0 +1,20 @@
+--- chrome/app/settings_strings.grdp.orig 2019-09-10 11:13:37 UTC
++++ chrome/app/settings_strings.grdp
+@@ -653,7 +653,7 @@
+ Themes
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SETTINGS_SYSTEM_THEME" desc="Text of the label describing the system (GTK+) browser theme on Linux">
+ GTK+
+ </message>
+@@ -667,7 +667,7 @@
+ Use Classic
+ </message>
+ </if>
+- <if expr="not is_linux or chromeos">
++ <if expr="not is_posix or chromeos">
+ <message name="IDS_SETTINGS_RESET_TO_DEFAULT_THEME" desc="Name of the control which resets the browser theme back to the default theme.">
+ Reset to default
+ </message>
diff --git a/devel/electron6/files/patch-chrome_app_shutdown__signal__handlers__posix.cc b/devel/electron6/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
new file mode 100644
index 000000000000..515ca276ffd1
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
@@ -0,0 +1,21 @@
+--- chrome/app/shutdown_signal_handlers_posix.cc.orig 2019-09-10 10:42:28 UTC
++++ chrome/app/shutdown_signal_handlers_posix.cc
+@@ -186,12 +186,18 @@ void InstallShutdownSignalHandlers(
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ // PTHREAD_STACK_MIN causes chromium to crash under FreeBSD,
++ // we request the default pthread stack size by specifying 0 here.
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+ // ASan instrumentation bloats the stack frames, so we need to increase the
+ // stack size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ ShutdownDetector* detector = new ShutdownDetector(
+ g_shutdown_pipe_read_fd, std::move(shutdown_callback), task_runner);
diff --git a/devel/electron6/files/patch-chrome_app_theme_chrome__unscaled__resources.grd b/devel/electron6/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
new file mode 100644
index 000000000000..7e8eb90d5609
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
@@ -0,0 +1,20 @@
+--- chrome/app/theme/chrome_unscaled_resources.grd.orig 2019-09-10 11:13:37 UTC
++++ chrome/app/theme/chrome_unscaled_resources.grd
+@@ -18,7 +18,7 @@
+ <include name="IDR_PRODUCT_LOGO_64" file="google_chrome/product_logo_64.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128" file="google_chrome/product_logo_128.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_256" file="google_chrome/product_logo_256.png" type="BINDATA" />
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <include name="IDR_PRODUCT_LOGO_128_BETA" file="google_chrome/product_logo_128_beta.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128_DEV" file="google_chrome/product_logo_128_dev.png" type="BINDATA" />
+ </if>
+@@ -100,7 +100,7 @@
+ <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/common/profile_avatar_sun_cloud.png" type="BINDATA" />
+ <include name="IDR_PROFILE_AVATAR_2X_26" file="default_200_percent/common/profile_avatar_placeholder.png" type="BINDATA" />
+ </if>
+- <if expr="is_linux and enable_app_list">
++ <if expr="is_posix and enable_app_list">
+ <!-- App Launcher icons for desktop icon. -->
+ <if expr="_google_chrome">
+ <then>
diff --git a/devel/electron6/files/patch-chrome_browser_about__flags.cc b/devel/electron6/files/patch-chrome_browser_about__flags.cc
new file mode 100644
index 000000000000..dadc7717233c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_about__flags.cc
@@ -0,0 +1,183 @@
+--- chrome/browser/about_flags.cc.orig 2019-09-10 11:13:37 UTC
++++ chrome/browser/about_flags.cc
+@@ -621,7 +621,7 @@ const FeatureEntry::FeatureVariation
+ nullptr}};
+ #endif // OS_ANDROID
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const FeatureEntry::FeatureParam
+ kAutofillSaveCreditCardUsesImprovedMessagingStoreCard[] = {
+ {autofill::features::
+@@ -668,7 +668,7 @@ const FeatureEntry::FeatureVariation
+ kAutofillSaveCreditCardUsesImprovedMessagingConfirmAndSaveCard),
+ nullptr},
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const FeatureEntry::Choice kMemlogModeChoices[] = {
+ {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
+@@ -776,7 +776,7 @@ const FeatureEntry::FeatureVariation kOmniboxMaxURLMat
+ {"6 matches", kOmniboxMaxURLMatches6, base::size(kOmniboxMaxURLMatches6),
+ nullptr}};
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const FeatureEntry::FeatureParam kTranslateBubbleUIButton[] = {
+ {language::kTranslateUIBubbleKey, language::kTranslateUIBubbleButtonValue}};
+@@ -792,7 +792,7 @@ const FeatureEntry::FeatureVariation kTranslateBubbleU
+ {"Tab", kTranslateBubbleUITab, base::size(kTranslateBubbleUITab), nullptr},
+ {"Button_GM2", kTranslateBubbleUIButtonGM2,
+ base::size(kTranslateBubbleUIButton), nullptr}};
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_BSD || OS_CHROMEOS
+
+ const FeatureEntry::FeatureParam kOmniboxUIVerticalMargin0px[] = {
+ {OmniboxFieldTrial::kUIVerticalMarginParam, "0"}};
+@@ -1567,13 +1567,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kCloudPrintXpsDescription, kOsWin,
+ SINGLE_VALUE_TYPE(switches::kEnableCloudPrintXps)},
+ #endif // OS_WIN
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl2-compute-context",
+ flag_descriptions::kWebGL2ComputeContextName,
+ flag_descriptions::kWebGL2ComputeContextDescription,
+ kOsWin | kOsLinux | kOsCrOS,
+ SINGLE_VALUE_TYPE(switches::kEnableWebGL2ComputeContext)},
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl-draft-extensions",
+ flag_descriptions::kWebglDraftExtensionsName,
+ flag_descriptions::kWebglDraftExtensionsDescription, kOsAll,
+@@ -1614,14 +1614,14 @@ const FeatureEntry kFeatureEntries[] = {
+ "OverrideTranslateTriggerInIndia")},
+ #endif // OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"translate-ui-bubble-options", flag_descriptions::kTranslateBubbleUIName,
+ flag_descriptions::kTranslateBubbleUIDescription, kOsDesktop,
+ FEATURE_WITH_PARAMS_VALUE_TYPE(language::kUseButtonTranslateBubbleUI,
+ kTranslateBubbleUIVariations,
+ "UseButtonTranslateBubbleUI")},
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_BSD || OS_CHROMEOS
+
+ #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
+ {"enable-native-notifications",
+@@ -1762,7 +1762,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(
+ previews::features::kHTTPSServerPreviewsUsingURLLoader)},
+ #endif // OS_ANDROID
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-save-data", flag_descriptions::kEnableSaveDataName,
+ flag_descriptions::kEnableSaveDataDescription, kOsCrOS,
+ SINGLE_VALUE_TYPE(
+@@ -2091,12 +2091,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(chrome::android::kAndroidNightMode)},
+ #endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE)
+ #endif // OS_ANDROID
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"passwords-migrate-linux-to-login-db",
+ flag_descriptions::kPasswordsMigrateLinuxToLoginDBName,
+ flag_descriptions::kPasswordsMigrateLinuxToLoginDBDescription, kOsLinux,
+ FEATURE_VALUE_TYPE(password_manager::features::kMigrateLinuxToLoginDB)},
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"enable-experimental-accessibility-features",
+ flag_descriptions::kExperimentalAccessibilityFeaturesName,
+ flag_descriptions::kExperimentalAccessibilityFeaturesDescription, kOsCrOS,
+@@ -2423,7 +2423,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kOmniboxLocalEntitySuggestionsDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kOmniboxLocalEntitySuggestions)},
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ {"omnibox-experimental-keyword-mode",
+ flag_descriptions::kOmniboxExperimentalKeywordModeName,
+ flag_descriptions::kOmniboxExperimentalKeywordModeDescription, kOsDesktop,
+@@ -2470,7 +2470,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kOmniboxDeduplicateDriveUrlsName,
+ flag_descriptions::kOmniboxDeduplicateDriveUrlsDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kDedupeGoogleDriveURLs)},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ {"enable-speculative-service-worker-start-on-query-input",
+ flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputName,
+@@ -2696,7 +2696,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kClickToOpenPDFDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"direct-manipulation-stylus",
+ flag_descriptions::kDirectManipulationStylusName,
+ flag_descriptions::kDirectManipulationStylusDescription,
+@@ -2707,7 +2707,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kShowManagedUiDescription,
+ kOsWin | kOsMac | kOsLinux | kOsCrOS,
+ FEATURE_VALUE_TYPE(features::kShowManagedUi)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if !defined(OS_ANDROID)
+ {"chrome-colors", flag_descriptions::kChromeColorsName,
+@@ -3514,7 +3514,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(features::kForceEnableSystemAec)},
+ #endif // defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"autofill-always-show-server-cards-in-sync-transport",
+ flag_descriptions::kAutofillAlwaysShowServerCardsInSyncTransportName,
+ flag_descriptions::
+@@ -3522,7 +3522,7 @@ const FeatureEntry kFeatureEntries[] = {
+ kOsMac | kOsWin | kOsLinux,
+ FEATURE_VALUE_TYPE(
+ autofill::features::kAutofillAlwaysShowServerCardsInSyncTransport)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_MACOSX)
+ {"enable-custom-mac-paper-sizes",
+@@ -3562,13 +3562,13 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(features::kCrostiniAppSearch)},
+ #endif // OS_CHROMEOS
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"autofill-settings-split-by-card-type",
+ flag_descriptions::kAutofillSettingsSplitByCardTypeName,
+ flag_descriptions::kAutofillSettingsSplitByCardTypeDescription,
+ kOsMac | kOsWin | kOsLinux,
+ FEATURE_VALUE_TYPE(autofill::features::kAutofillSettingsCardTypeSplit)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if !defined(OS_ANDROID)
+ {"hardware-media-key-handling",
+@@ -3895,7 +3895,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kAudioWorkletRealtimeThreadDescription, kOsAll,
+ FEATURE_VALUE_TYPE(blink::features::kAudioWorkletRealtimeThread)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-autofill-save-credit-card-uses-improved-messaging",
+ flag_descriptions::kEnableAutofillSaveCreditCardUsesImprovedMessagingName,
+ flag_descriptions::
+@@ -3905,7 +3905,7 @@ const FeatureEntry kFeatureEntries[] = {
+ autofill::features::kAutofillSaveCreditCardUsesImprovedMessaging,
+ kAutofillSaveCreditCardUsesImprovedMessagingVariations,
+ "AutofillSaveCreditCardUsesImprovedMessaging")},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ {"smart-dim-model-v3", flag_descriptions::kSmartDimModelV3Name,
diff --git a/devel/electron6/files/patch-chrome_browser_after__startup__task__utils.cc b/devel/electron6/files/patch-chrome_browser_after__startup__task__utils.cc
new file mode 100644
index 000000000000..1e4ca09babf0
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_after__startup__task__utils.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/after_startup_task_utils.cc.orig 2019-09-10 11:13:37 UTC
++++ chrome/browser/after_startup_task_utils.cc
+@@ -32,7 +32,7 @@
+ #include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -118,7 +118,7 @@ void QueueTask(std::unique_ptr<AfterStartupTask> queue
+
+ void SetBrowserStartupIsComplete() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Process::Current().CreationTime() is not available on all platforms.
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+@@ -126,7 +126,7 @@ void SetBrowserStartupIsComplete() {
+ UMA_HISTOGRAM_LONG_TIMES("Startup.AfterStartupTaskDelayedUntilTime",
+ base::Time::Now() - process_creation_time);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("Startup.AfterStartupTaskCount",
+ g_after_startup_tasks.Get().size());
+ g_startup_complete_flag.Get().Set();
+@@ -135,7 +135,7 @@ void SetBrowserStartupIsComplete() {
+ g_after_startup_tasks.Get().clear();
+ g_after_startup_tasks.Get().shrink_to_fit();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make sure we complete the startup notification sequence, or launchers will
+ // get confused by not receiving the expected message from the main process.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/devel/electron6/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc b/devel/electron6/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
new file mode 100644
index 000000000000..8a9d677d4a18
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
@@ -0,0 +1,70 @@
+--- chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc
+@@ -4,6 +4,11 @@
+
+ #include "chrome/browser/apps/platform_apps/api/music_manager_private/device_id.h"
+
++#if defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <net/if_dl.h>
++#endif
++
+ #include <ifaddrs.h>
+ #include <net/if.h>
+ #include <stddef.h>
+@@ -106,9 +111,36 @@ class MacAddressProcessor {
+ const char* const prefixes[],
+ size_t prefixes_count) {
+ const int MAC_LENGTH = 6;
++#if defined(OS_FREEBSD)
++ struct ifaddrs *ifap, *ifinfo;
++#else
+ struct ifreq ifinfo;
++#endif
+
+ memset(&ifinfo, 0, sizeof(ifinfo));
++
++#if defined(OS_FREEBSD)
++ int result = getifaddrs(&ifap);
++
++ if (result != 0)
++ return true;
++
++ result = 1; // no MAC found yet
++
++ for (ifinfo = ifap; ifinfo != NULL; ifinfo = ifinfo->ifa_next) {
++ struct sockaddr* sa = ifinfo->ifa_addr;
++ if (sa->sa_family == AF_LINK &&
++ !strncmp(ifinfo->ifa_name, ifaddr->ifa_name,
++ sizeof(ifinfo->ifa_name) - 1)) {
++ result = 0;
++ break;
++ }
++ }
++
++ char mac_address[6];
++
++ strncpy(mac_address, (const char*)LLADDR((struct sockaddr_dl*)ifinfo->ifa_addr), sizeof(mac_address));
++#else
+ strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1);
+
+ int sd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -120,11 +152,18 @@ class MacAddressProcessor {
+
+ const char* mac_address =
+ static_cast<const char*>(ifinfo.ifr_hwaddr.sa_data);
++#endif
++
+ if (!is_valid_mac_address_.Run(mac_address, MAC_LENGTH))
+ return true;
+
++#if defined(OS_FREEBSD)
++ if (!IsValidPrefix(ifinfo->ifa_name, prefixes, prefixes_count))
++ return true;
++#else
+ if (!IsValidPrefix(ifinfo.ifr_name, prefixes, prefixes_count))
+ return true;
++#endif
+
+ // Got one!
+ found_mac_address_ =
diff --git a/devel/electron6/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc b/devel/electron6/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
new file mode 100644
index 000000000000..abe212f15752
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+@@ -59,12 +59,12 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForSch
+ return metrics::OmniboxInputType::QUERY;
+
+ case ExternalProtocolHandler::UNKNOWN: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Linux impl of GetApplicationNameForProtocol doesn't distinguish
+ // between URL schemes with handers and those without. This will
+ // make the default behaviour be search on Linux.
+ return metrics::OmniboxInputType::INVALID;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // If block state is unknown, check if there is an application registered
+ // for the url scheme.
+ GURL url(scheme + "://");
diff --git a/devel/electron6/files/patch-chrome_browser_background_background__mode__optimizer.cc b/devel/electron6/files/patch-chrome_browser_background_background__mode__optimizer.cc
new file mode 100644
index 000000000000..3aaecb96ba66
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_background_background__mode__optimizer.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/background/background_mode_optimizer.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/background/background_mode_optimizer.cc
+@@ -30,10 +30,10 @@ std::unique_ptr<BackgroundModeOptimizer> BackgroundMod
+ switches::kKeepAliveForTest))
+ return nullptr;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kBackgroundModeAllowRestart))
+ return base::WrapUnique(new BackgroundModeOptimizer());
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ return nullptr;
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_browser__resources.grd b/devel/electron6/files/patch-chrome_browser_browser__resources.grd
new file mode 100644
index 000000000000..8f1a0c69870c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_browser__resources.grd
@@ -0,0 +1,20 @@
+--- chrome/browser/browser_resources.grd.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/browser_resources.grd
+@@ -77,7 +77,7 @@
+ <include name="IDR_DISCARDS_SORTED_TABLE_BEHAVIOR_JS" file="resources\discards\sorted_table_behavior.js" compress="gzip" type="BINDATA" />
+ <include name="IDR_DISCARDS_WEBUI_GRAPH_DUMP_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\performance_manager\webui_graph_dump.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" />
+ </if>
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <include name="IDR_BROWSER_SWITCH_APP_HTML" file="resources\browser_switch\app.html" compress="gzip" allowexternalscript="true" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_APP_JS" file="resources\browser_switch\app.js" compress="gzip" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_PROXY_HTML" file="resources\browser_switch\browser_switch_proxy.html" compress="gzip" allowexternalscript="true" type="BINDATA" />
+@@ -666,7 +666,7 @@
+ <include name="IDR_WELCOME_WIN10_PIN_WEBP" file="resources\welcome\pin.webp" type="BINDATA" />
+ </if>
+ <include name="IDR_SSL_ERROR_ASSISTANT_PB" file="${root_gen_dir}/chrome/browser/resources/ssl/ssl_error_assistant/ssl_error_assistant.pb" use_base_dir="false" type="BINDATA" />
+- <if expr="is_android or is_linux">
++ <if expr="is_android or is_posix">
+ <include name="IDR_SANDBOX_INTERNALS_HTML" file="resources\sandbox_internals\sandbox_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_SANDBOX_INTERNALS_JS" file="resources\sandbox_internals\sandbox_internals.js" type="BINDATA" compress="gzip" />
+ </if>
diff --git a/devel/electron6/files/patch-chrome_browser_chrome__browser__main.cc b/devel/electron6/files/patch-chrome_browser_chrome__browser__main.cc
new file mode 100644
index 000000000000..27d75ad1ec0d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_chrome__browser__main.cc
@@ -0,0 +1,75 @@
+--- chrome/browser/chrome_browser_main.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/chrome_browser_main.cc
+@@ -220,9 +220,9 @@
+ #include "components/arc/metrics/stability_metrics_manager.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/first_run/upgrade_util_linux.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ #if defined(OS_LINUX)
+ #include "components/crash/content/app/breakpad_linux.h"
+@@ -260,7 +260,7 @@
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+ #include "chrome/browser/profiles/profile_activity_metrics_recorder.h"
+ #endif
+@@ -1079,7 +1079,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Create directory for user-level Native Messaging manifest files. This
+ // makes it less likely that the directory will be created by third-party
+ // software with incorrect owner or permission. See crbug.com/725513 .
+@@ -1088,14 +1088,14 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ &user_native_messaging_dir));
+ if (!base::PathExists(user_native_messaging_dir))
+ base::CreateDirectory(user_native_messaging_dir);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ // Set the product channel for crash reports.
+ breakpad::SetChannelCrashKey(chrome::GetChannelName());
+-#endif // defined(OS_LINUX) || defined(OS_OPENBSD)
++#endif // defined(OS_LINUX)
+
+ #if defined(OS_MACOSX)
+ // Get the Keychain API to register for distributed notifications on the main
+@@ -1125,7 +1125,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ metrics::DesktopSessionDurationTracker::Initialize();
+ ProfileActivityMetricsRecorder::Initialize();
+ #endif
+@@ -1291,6 +1291,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::TimeDelta::FromMinutes(1));
+
+ #if !defined(OS_ANDROID)
++#if !defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kWebUsb)) {
+ web_usb_detector_.reset(new WebUsbDetector());
+ BrowserThread::PostAfterStartupTask(
+@@ -1299,6 +1300,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::BindOnce(&WebUsbDetector::Initialize,
+ base::Unretained(web_usb_detector_.get())));
+ }
++#endif
+ if (base::FeatureList::IsEnabled(features::kTabMetricsLogging)) {
+ // Initialize the TabActivityWatcher to begin logging tab activity events.
+ resource_coordinator::TabActivityWatcher::GetInstance();
diff --git a/devel/electron6/files/patch-chrome_browser_chrome__browser__main__linux.cc b/devel/electron6/files/patch-chrome_browser_chrome__browser__main__linux.cc
new file mode 100644
index 000000000000..b267f596dea8
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_chrome__browser__main__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/chrome_browser_main_linux.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/chrome_browser_main_linux.cc
+@@ -90,12 +90,14 @@ void ChromeBrowserMainPartsLinux::PreProfileInit() {
+ void ChromeBrowserMainPartsLinux::PostProfileInit() {
+ ChromeBrowserMainPartsPosix::PostProfileInit();
+
++#if !defined(OS_BSD)
+ g_browser_process->metrics_service()->RecordBreakpadRegistration(
+ breakpad::IsCrashReporterEnabled());
++#endif
+ }
+
+ void ChromeBrowserMainPartsLinux::PostMainMessageLoopStart() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Initialize(nullptr /* system_bus */);
+ #endif
+
+@@ -103,7 +105,7 @@ void ChromeBrowserMainPartsLinux::PostMainMessageLoopS
+ }
+
+ void ChromeBrowserMainPartsLinux::PostDestroyThreads() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Shutdown();
+ bluez::BluezDBusThreadManager::Shutdown();
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_chrome__browser__main__posix.cc b/devel/electron6/files/patch-chrome_browser_chrome__browser__main__posix.cc
new file mode 100644
index 000000000000..fb5d828c47fc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_chrome__browser__main__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/chrome_browser_main_posix.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/chrome_browser_main_posix.cc
+@@ -70,7 +70,7 @@ void ExitHandler::ExitWhenPossibleOnUIThread(int signa
+ // ExitHandler takes care of deleting itself.
+ new ExitHandler();
+ } else {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ switch (signal) {
+ case SIGINT:
+ case SIGHUP:
+@@ -166,7 +166,7 @@ void ChromeBrowserMainPartsPosix::PostMainMessageLoopS
+ void ChromeBrowserMainPartsPosix::ShowMissingLocaleMessageBox() {
+ #if defined(OS_CHROMEOS)
+ NOTREACHED(); // Should not ever happen on ChromeOS.
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+ #elif defined(USE_AURA)
diff --git a/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.cc b/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.cc
new file mode 100644
index 000000000000..8543d17771fa
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.cc
@@ -0,0 +1,92 @@
+--- chrome/browser/chrome_content_browser_client.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/chrome_content_browser_client.cc
+@@ -429,7 +429,7 @@
+ #include "chromeos/services/secure_channel/secure_channel_service.h"
+ #include "components/user_manager/user_manager.h"
+ #include "services/service_manager/public/mojom/interface_provider_spec.mojom.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/chrome_browser_main_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "base/android/application_status_listener.h"
+@@ -484,7 +484,7 @@
+ #endif // !defined(OS_ANDROID)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_navigation_throttle.h"
+ #endif
+
+@@ -510,7 +510,7 @@
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux_x11.h"
+ #else
+@@ -1250,7 +1250,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ #elif defined(OS_CHROMEOS)
+ main_parts = std::make_unique<chromeos::ChromeBrowserMainPartsChromeos>(
+ parameters, startup_data_);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ main_parts =
+ std::make_unique<ChromeBrowserMainPartsLinux>(parameters, startup_data_);
+ #elif defined(OS_ANDROID)
+@@ -1276,7 +1276,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ // Construct additional browser parts. Stages are called in the order in
+ // which they are added.
+ #if defined(TOOLKIT_VIEWS)
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViewsLinuxX11());
+ #else
+@@ -2093,7 +2093,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ command_line->AppendSwitchASCII(switches::kMetricsClientID,
+ client_info->client_id);
+ }
+-#elif defined(OS_POSIX)
++#elif defined(OS_POSIX) && !defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ bool enable_crash_reporter = true;
+ #else
+@@ -2318,7 +2318,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ process_type,
+ command_line);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Processes may only query perf_event_open with the BPF sandbox disabled.
+ if (browser_command_line.HasSwitch(switches::kEnableThreadInstructionCount) &&
+ command_line->HasSwitch(service_manager::switches::kNoSandbox)) {
+@@ -3660,7 +3660,7 @@ void ChromeContentBrowserClient::GetAdditionalFileSyst
+ }
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -4362,7 +4362,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigati
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<content::NavigationThrottle> browser_switcher_throttle =
+ browser_switcher::BrowserSwitcherNavigationThrottle ::
+ MaybeCreateThrottleFor(handle);
+@@ -5205,7 +5205,7 @@ bool ChromeContentBrowserClient::HandleExternalProtoco
+ std::unique_ptr<content::OverlayWindow>
+ ChromeContentBrowserClient::CreateWindowForPictureInPicture(
+ content::PictureInPictureWindowController* controller) {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // Note: content::OverlayWindow::Create() is defined by platform-specific
+ // implementation in chrome/browser/ui/views. This layering hack, which goes
diff --git a/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.h b/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.h
new file mode 100644
index 000000000000..501089b6acc7
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_chrome__content__browser__client.h
@@ -0,0 +1,17 @@
+--- chrome/browser/chrome_content_browser_client.h.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/chrome_content_browser_client.h
+@@ -380,12 +380,12 @@ class ChromeContentBrowserClient : public content::Con
+ void OverridePageVisibilityState(
+ content::RenderFrameHost* render_frame_host,
+ content::PageVisibilityState* visibility_state) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #if defined(OS_WIN)
+ bool PreSpawnRenderer(sandbox::TargetPolicy* policy) override;
+ base::string16 GetAppContainerSidForSandboxType(
diff --git a/devel/electron6/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc b/devel/electron6/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
new file mode 100644
index 000000000000..4cb0dfb25897
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/custom_handlers/protocol_handler_registry.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/custom_handlers/protocol_handler_registry.cc
+@@ -48,7 +48,7 @@ const ProtocolHandler& LookupHandler(
+ // If true default protocol handlers will be removed if the OS level
+ // registration for a protocol is no longer Chrome.
+ bool ShouldRemoveHandlersNotInOS() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // We don't do this on Linux as the OS registration there is not reliable,
+ // and Chrome OS doesn't have any notion of OS registration.
+ // TODO(benwells): When Linux support is more reliable remove this
diff --git a/devel/electron6/files/patch-chrome_browser_defaults.cc b/devel/electron6/files/patch-chrome_browser_defaults.cc
new file mode 100644
index 000000000000..b230d044577c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_defaults.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/defaults.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/defaults.cc
+@@ -43,7 +43,7 @@ const bool kSyncAutoStarts = true;
+ const bool kSyncAutoStarts = false;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const bool kScrollEventChangesTab = true;
+ #else
+ const bool kScrollEventChangesTab = false;
diff --git a/devel/electron6/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc b/devel/electron6/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
new file mode 100644
index 000000000000..6a47447c722c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/devtools/devtools_eye_dropper.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/devtools/devtools_eye_dropper.cc
+@@ -164,7 +164,7 @@ void DevToolsEyeDropper::UpdateCursor() {
+ // magnified projection only with centered hotspot.
+ // Mac Retina requires cursor to be > 120px in order to render smoothly.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const float kCursorSize = 63;
+ const float kDiameter = 63;
+ const float kHotspotOffset = 32;
diff --git a/devel/electron6/files/patch-chrome_browser_diagnostics_diagnostics__writer.h b/devel/electron6/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
new file mode 100644
index 000000000000..0749a35d7e3e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
@@ -0,0 +1,11 @@
+--- chrome/browser/diagnostics/diagnostics_writer.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/diagnostics/diagnostics_writer.h
+@@ -15,6 +15,8 @@ namespace diagnostics {
+ // Console base class used internally.
+ class SimpleConsole;
+
++#undef MACHINE
++
+ class DiagnosticsWriter : public DiagnosticsModel::Observer {
+ public:
+ // The type of formatting done by this writer.
diff --git a/devel/electron6/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc b/devel/electron6/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
new file mode 100644
index 000000000000..3a70a92ef1c1
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/chrome_download_manager_delegate.cc.orig 2019-09-10 11:13:38 UTC
++++ chrome/browser/download/chrome_download_manager_delegate.cc
+@@ -1237,7 +1237,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+ target_info->is_filetype_handled_safely)
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (item->GetOriginalMimeType() == "application/x-x509-user-cert")
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+ #endif
+@@ -1267,7 +1267,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+
+ bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile(
+ const base::FilePath& path) {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) {
+ return !download_prefs_->ShouldOpenPdfInSystemReader();
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__commands.cc b/devel/electron6/files/patch-chrome_browser_download_download__commands.cc
new file mode 100644
index 000000000000..72442f45864e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__commands.cc
@@ -0,0 +1,35 @@
+--- chrome/browser/download/download_commands.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/download/download_commands.cc
+@@ -30,7 +30,7 @@
+ #include "net/base/url_util.h"
+ #include "ui/base/clipboard/scoped_clipboard_writer.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser.h"
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
+@@ -157,7 +157,7 @@ void DownloadCommands::ExecuteCommand(Command command)
+ model_->ExecuteCommand(this, command);
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ Browser* DownloadCommands::GetBrowser() const {
+ chrome::ScopedTabbedBrowserDisplayer browser_displayer(model_->profile());
+@@ -180,12 +180,12 @@ bool DownloadCommands::CanOpenPdfInSystemViewer() cons
+ return IsDownloadPdf() &&
+ (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date
+ : true);
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return IsDownloadPdf();
+ #endif
+ }
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void DownloadCommands::CopyFileAsImageToClipboard() {
+ if (model_->GetState() != download::DownloadItem::COMPLETE ||
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__commands.h b/devel/electron6/files/patch-chrome_browser_download_download__commands.h
new file mode 100644
index 000000000000..c77927d6d86f
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__commands.h
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_commands.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_commands.h
+@@ -45,7 +45,7 @@ class DownloadCommands {
+ bool IsCommandVisible(Command command) const;
+ void ExecuteCommand(Command command);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool IsDownloadPdf() const;
+ bool CanOpenPdfInSystemViewer() const;
+ Browser* GetBrowser() const;
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__item__model.cc b/devel/electron6/files/patch-chrome_browser_download_download__item__model.cc
new file mode 100644
index 000000000000..f7712c15701d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__item__model.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_item_model.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/download/download_item_model.cc
+@@ -560,7 +560,7 @@ bool DownloadItemModel::IsCommandChecked(
+ return download_->GetOpenWhenComplete() ||
+ download_crx_util::IsExtensionDownload(*download_);
+ case DownloadCommands::ALWAYS_OPEN_TYPE:
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+ return prefs->ShouldOpenPdfInSystemReader();
+@@ -597,7 +597,7 @@ void DownloadItemModel::ExecuteCommand(DownloadCommand
+ bool is_checked = IsCommandChecked(download_commands,
+ DownloadCommands::ALWAYS_OPEN_TYPE);
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ prefs->SetShouldOpenPdfInSystemReader(!is_checked);
+ SetShouldPreferOpeningInBrowser(is_checked);
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__prefs.cc b/devel/electron6/files/patch-chrome_browser_download_download__prefs.cc
new file mode 100644
index 000000000000..08d1b758ab98
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__prefs.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/download/download_prefs.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_prefs.cc
+@@ -62,7 +62,7 @@ namespace {
+ // Consider downloads 'dangerous' if they go to the home directory on Linux and
+ // to the desktop on any platform.
+ bool DownloadPathIsDangerous(const base::FilePath& download_path) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath home_dir = base::GetHomeDir();
+ if (download_path == home_dir) {
+ return true;
+@@ -155,7 +155,7 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profi
+ GetDefaultDownloadDirectoryForProfile()));
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ should_open_pdf_in_system_reader_ =
+ prefs->GetBoolean(prefs::kOpenPdfDownloadInSystemReader);
+ #endif
+@@ -257,7 +257,7 @@ void DownloadPrefs::RegisterProfilePrefs(
+ default_download_path);
+ registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ default_download_path);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
+ #endif
+ #if defined(OS_ANDROID)
+@@ -354,7 +354,7 @@ bool DownloadPrefs::IsDownloadPathManaged() const {
+ }
+
+ bool DownloadPrefs::IsAutoOpenUsed() const {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (ShouldOpenPdfInSystemReader())
+ return true;
+ #endif
+@@ -368,7 +368,7 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension(
+ return false;
+ DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
+ extension.erase(0, 1);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (base::FilePath::CompareEqualIgnoreCase(extension,
+ FILE_PATH_LITERAL("pdf")) &&
+ ShouldOpenPdfInSystemReader())
+@@ -405,7 +405,7 @@ void DownloadPrefs::DisableAutoOpenBasedOnExtension(
+ SaveAutoOpenState();
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void DownloadPrefs::SetShouldOpenPdfInSystemReader(bool should_open) {
+ if (should_open_pdf_in_system_reader_ == should_open)
+ return;
+@@ -426,7 +426,7 @@ bool DownloadPrefs::ShouldOpenPdfInSystemReader() cons
+ #endif
+
+ void DownloadPrefs::ResetAutoOpen() {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ SetShouldOpenPdfInSystemReader(false);
+ #endif
+ auto_open_.clear();
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__prefs.h b/devel/electron6/files/patch-chrome_browser_download_download__prefs.h
new file mode 100644
index 000000000000..73421d200546
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__prefs.h
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_prefs.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_prefs.h
+@@ -102,7 +102,7 @@ class DownloadPrefs {
+ // Disables auto-open based on file extension.
+ void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Store the user preference to disk. If |should_open| is true, also disable
+ // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
+ void SetShouldOpenPdfInSystemReader(bool should_open);
+@@ -150,7 +150,7 @@ class DownloadPrefs {
+ AutoOpenCompareFunctor> AutoOpenSet;
+ AutoOpenSet auto_open_;
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool should_open_pdf_in_system_reader_;
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__query.cc b/devel/electron6/files/patch-chrome_browser_download_download__query.cc
new file mode 100644
index 000000000000..f883759552e7
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__query.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/download/download_query.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_query.cc
+@@ -27,7 +27,11 @@
+ #include "components/download/public/common/download_item.h"
+ #include "components/url_formatter/url_formatter.h"
+ #include "content/public/browser/content_browser_client.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using download::DownloadDangerType;
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__shelf__context__menu.cc b/devel/electron6/files/patch-chrome_browser_download_download__shelf__context__menu.cc
new file mode 100644
index 000000000000..fe88ac0897a6
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__shelf__context__menu.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_shelf_context_menu.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_shelf_context_menu.cc
+@@ -127,7 +127,7 @@ base::string16 DownloadShelfContextMenu::GetLabelForCo
+ : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
+ }
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (can_open_pdf_in_system_viewer) {
+ id = IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
diff --git a/devel/electron6/files/patch-chrome_browser_download_download__status__updater.cc b/devel/electron6/files/patch-chrome_browser_download_download__status__updater.cc
new file mode 100644
index 000000000000..3653d2237302
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_download_download__status__updater.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_status_updater.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/download/download_status_updater.cc
+@@ -13,7 +13,7 @@
+ #include "base/memory/ptr_util.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -136,7 +136,7 @@ void DownloadStatusUpdater::OnDownloadUpdated(content:
+ #if defined(OS_ANDROID) || (defined(USE_AURA) && !defined(OS_WIN))
+ void DownloadStatusUpdater::UpdateAppIconDownloadProgress(
+ download::DownloadItem* download) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ float progress = 0;
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_BUILD.gn b/devel/electron6/files/patch-chrome_browser_extensions_BUILD.gn
new file mode 100644
index 000000000000..ab29792d9d46
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_BUILD.gn
@@ -0,0 +1,15 @@
+--- chrome/browser/extensions/BUILD.gn.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/BUILD.gn
+@@ -1135,6 +1135,12 @@ jumbo_static_library("extensions") {
+ deps += [ "//chrome/common:service_process_mojom" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "api/image_writer_private/removable_storage_provider_linux.cc",
++ ]
++ }
++
+ if (enable_service_discovery) {
+ sources += [
+ "api/mdns/mdns_api.cc",
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_activity__log_activity__log.cc b/devel/electron6/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
new file mode 100644
index 000000000000..b07f5b4ff44f
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/extensions/activity_log/activity_log.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/activity_log/activity_log.cc
+@@ -53,7 +53,11 @@
+ #include "extensions/browser/extensions_browser_client.h"
+ #include "extensions/common/extension.h"
+ #include "extensions/common/extension_messages.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ namespace constants = activity_log_constants;
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc b/devel/electron6/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
new file mode 100644
index 000000000000..446d8a085346
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc
+@@ -21,6 +21,7 @@ static base::LazyInstance<scoped_refptr<StorageDeviceL
+
+ void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
++#if !defined(OS_BSD)
+ if (g_test_device_list.Get().get() != nullptr) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+@@ -34,6 +35,9 @@ void RemovableStorageProvider::GetAllDevices(DeviceLis
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+ base::BindOnce(&RemovableStorageProvider::PopulateDeviceList),
+ std::move(callback));
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ // static
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h b/devel/electron6/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
new file mode 100644
index 000000000000..03bd5385657c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/input_ime/input_ime_api.h.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/api/input_ime/input_ime_api.h
+@@ -31,7 +31,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_nonchromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc b/devel/electron6/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
new file mode 100644
index 000000000000..bdb45568bf73
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+@@ -299,6 +299,8 @@ bool ChromeRuntimeAPIDelegate::GetPlatformInfo(Platfor
+ info->os = extensions::api::runtime::PLATFORM_OS_CROS;
+ } else if (strcmp(os, "linux") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_LINUX;
++ } else if (strcmp(os, "freebsd") == 0) {
++ info->os = extensions::api::runtime::PLATFORM_OS_FREEBSD;
+ } else if (strcmp(os, "openbsd") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_OPENBSD;
+ } else {
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc b/devel/electron6/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
new file mode 100644
index 000000000000..9d50b8e138c8
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/settings_private/prefs_util.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -128,7 +128,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUseCustomChromeFrame] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
+@@ -138,7 +138,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ // Appearance settings.
+ (*s_whitelist)[::prefs::kCurrentThemeID] =
+ settings_api::PrefType::PREF_TYPE_STRING;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUsesSystemTheme] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc b/devel/electron6/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
new file mode 100644
index 000000000000..202f4e4b9d66
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
@@ -0,0 +1,43 @@
+--- chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc
+@@ -29,7 +29,7 @@
+ #include "extensions/browser/process_manager.h"
+ #include "extensions/common/error_utils.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "extensions/common/permissions/permissions_data.h"
+ #endif
+
+@@ -38,7 +38,7 @@ namespace {
+ bool CanEnableAudioDebugRecordingsFromExtension(
+ const extensions::Extension* extension) {
+ bool enabled_by_permissions = false;
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ if (extension) {
+ enabled_by_permissions =
+ extension->permissions_data()->active_permissions().HasAPIPermission(
+@@ -609,7 +609,7 @@ void WebrtcLoggingPrivateStartEventLoggingFunction::Fi
+ }
+
+ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::RunAsync() {
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Unlike other WebrtcLoggingPrivate functions that take a RequestInfo object,
+ // this function shouldn't be called by a component extension on behalf of
+ // some web code. It returns a DirectoryEntry for use directly in the calling
+@@ -633,11 +633,11 @@ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::Run
+ &WebrtcLoggingPrivateGetLogsDirectoryFunction::FireErrorCallback,
+ this));
+ return true;
+-#else // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#else // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ SetError("Not supported on the current OS");
+ SendResponse(false);
+ return false;
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void WebrtcLoggingPrivateGetLogsDirectoryFunction::FireCallback(
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_bookmark__app__extension__util.cc b/devel/electron6/files/patch-chrome_browser_extensions_bookmark__app__extension__util.cc
new file mode 100644
index 000000000000..281691145c84
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_bookmark__app__extension__util.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/bookmark_app_extension_util.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/bookmark_app_extension_util.cc
+@@ -34,7 +34,7 @@ namespace {
+
+ #if !defined(OS_CHROMEOS)
+ bool CanOsAddDesktopShortcuts() {
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc b/devel/electron6/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..af7143471e43
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/browser_context_keyed_service_factories.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/browser_context_keyed_service_factories.cc
+@@ -54,7 +54,7 @@
+ #include "chrome/browser/chromeos/extensions/input_method_api.h"
+ #include "chrome/browser/chromeos/extensions/media_player_api.h"
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #endif
+
+@@ -92,7 +92,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ extensions::InputImeAPI::GetFactoryInstance();
+ extensions::InputMethodAPI::GetFactoryInstance();
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ extensions::InputImeAPI::GetFactoryInstance();
+ #endif
+ extensions::LanguageSettingsPrivateDelegateFactory::GetInstance();
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_external__provider__impl.cc b/devel/electron6/files/patch-chrome_browser_extensions_external__provider__impl.cc
new file mode 100644
index 000000000000..f9d3932d5447
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_external__provider__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/external_provider_impl.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/extensions/external_provider_impl.cc
+@@ -755,7 +755,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ chromeos::DemoSession::Get()->SetExtensionsExternalLoader(loader);
+ provider_list->push_back(std::move(demo_apps_provider));
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ new ExternalPrefLoader(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS,
+@@ -782,7 +782,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ bundled_extension_creation_flags));
+
+ // Define a per-user source of external extensions.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD))
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS,
diff --git a/devel/electron6/files/patch-chrome_browser_extensions_install__signer.cc b/devel/electron6/files/patch-chrome_browser_extensions_install__signer.cc
new file mode 100644
index 000000000000..c090765e209d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_extensions_install__signer.cc
@@ -0,0 +1,18 @@
+--- chrome/browser/extensions/install_signer.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/extensions/install_signer.cc
+@@ -293,13 +293,13 @@ void LogRequestStartHistograms() {
+ DCHECK(g_single_thread_checker.Get().CalledOnValidThread());
+
+ // Process::Current().CreationTime is only defined on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+ UMA_HISTOGRAM_COUNTS_1M(
+ "ExtensionInstallSigner.UptimeAtTimeOfRequest",
+ (base::Time::Now() - process_creation_time).InSeconds());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ base::TimeDelta delta;
+ base::TimeTicks now = base::TimeTicks::Now();
diff --git a/devel/electron6/files/patch-chrome_browser_first__run_first__run__dialog.h b/devel/electron6/files/patch-chrome_browser_first__run_first__run__dialog.h
new file mode 100644
index 000000000000..9f551cdbd093
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_first__run_first__run__dialog.h
@@ -0,0 +1,11 @@
+--- chrome/browser/first_run/first_run_dialog.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/first_run/first_run_dialog.h
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+
+ // Hide this function on platforms where the dialog does not exist.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ class Profile;
+
diff --git a/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal.h b/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal.h
new file mode 100644
index 000000000000..ac2c6417b8db
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal.h
@@ -0,0 +1,18 @@
+--- chrome/browser/first_run/first_run_internal.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/first_run/first_run_internal.h
+@@ -64,13 +64,13 @@ FirstRunState DetermineFirstRunState(bool has_sentinel
+ bool force_first_run,
+ bool no_first_run);
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For testing, forces the first run dialog to either be shown or not. If not
+ // called, the decision to show the dialog or not will be made by Chrome based
+ // on a number of factors (such as install type, whether it's a Chrome-branded
+ // build, etc).
+ void ForceFirstRunDialogShownForTesting(bool shown);
+-#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace internal
+ } // namespace first_run
diff --git a/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal__posix.cc b/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
new file mode 100644
index 000000000000..b18d0dd1f115
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/first_run/first_run_internal_posix.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/first_run/first_run_internal_posix.cc
+@@ -44,7 +44,7 @@ enum class ForcedShowDialogState {
+ ForcedShowDialogState g_forced_show_dialog_state =
+ ForcedShowDialogState::kNotForced;
+
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ // Returns whether the first run dialog should be shown. This is only true for
+ // certain builds, and only if the user has not already set preferences. In a
+ // real, official-build first run, initializes the default metrics reporting if
+@@ -95,7 +95,7 @@ void ForceFirstRunDialogShownForTesting(bool shown) {
+ }
+
+ void DoPostImportPlatformSpecificTasks(Profile* profile) {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (!ShouldShowFirstRunDialog())
+ return;
+
diff --git a/devel/electron6/files/patch-chrome_browser_flag__descriptions.cc b/devel/electron6/files/patch-chrome_browser_flag__descriptions.cc
new file mode 100644
index 000000000000..4bf61bbb05cc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_flag__descriptions.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/flag_descriptions.cc.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/flag_descriptions.cc
+@@ -3256,21 +3256,21 @@ const char kInstallableInkDropDescription[] =
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ const char kWebGL2ComputeContextName[] = "WebGL 2.0 Compute";
+ const char kWebGL2ComputeContextDescription[] =
+ "Enable the use of WebGL 2.0 Compute API.";
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kDirectManipulationStylusName[] = "Direct Manipulation Stylus";
+ const char kDirectManipulationStylusDescription[] =
+ "If enabled, Chrome will scroll web pages on stylus drag.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/devel/electron6/files/patch-chrome_browser_flag__descriptions.h b/devel/electron6/files/patch-chrome_browser_flag__descriptions.h
new file mode 100644
index 000000000000..8642932a488a
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_flag__descriptions.h
@@ -0,0 +1,26 @@
+--- chrome/browser/flag_descriptions.h.orig 2019-09-10 11:13:39 UTC
++++ chrome/browser/flag_descriptions.h
+@@ -1963,19 +1963,19 @@ extern const char kInstallableInkDropDescription[];
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ extern const char kWebGL2ComputeContextName[];
+ extern const char kWebGL2ComputeContextDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kDirectManipulationStylusName[];
+ extern const char kDirectManipulationStylusDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/devel/electron6/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc b/devel/electron6/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
new file mode 100644
index 000000000000..164a94a5399e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc
+@@ -39,10 +39,12 @@ void MTPDeviceMapService::RegisterMTPFileSystem(
+ // Note that this initializes the delegate asynchronously, but since
+ // the delegate will only be used from the IO thread, it is guaranteed
+ // to be created before use of it expects it to be there.
++#if !defined(OS_FREEBSD)
+ CreateMTPDeviceAsyncDelegate(
+ device_location, read_only,
+ base::Bind(&MTPDeviceMapService::AddAsyncDelegate,
+ base::Unretained(this), device_location, read_only));
++#endif
+ mtp_device_usage_map_[key] = 0;
+ }
+
diff --git a/devel/electron6/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc b/devel/electron6/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
new file mode 100644
index 000000000000..93b803ccb112
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/media_galleries/media_file_system_registry.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media_galleries/media_file_system_registry.cc
+@@ -732,7 +732,10 @@ class MediaFileSystemRegistry::MediaFileSystemContextI
+ // Constructor in 'private' section because depends on private class definition.
+ MediaFileSystemRegistry::MediaFileSystemRegistry()
+ : file_system_context_(new MediaFileSystemContextImpl) {
+- StorageMonitor::GetInstance()->AddObserver(this);
++ // This conditional is needed for shutdown. Destructors
++ // try to get the media file system registry.
++ if (StorageMonitor::GetInstance())
++ StorageMonitor::GetInstance()->AddObserver(this);
+ }
+
+ MediaFileSystemRegistry::~MediaFileSystemRegistry() {
diff --git a/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc b/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
new file mode 100644
index 000000000000..11b31c5d3eb4
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_posix.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_posix.cc
+@@ -10,6 +10,7 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <sys/time.h>
+
+ #include <algorithm>
+
+@@ -19,7 +20,7 @@
+ #include "chrome/browser/media/router/discovery/discovery_network_list_wifi.h"
+ #include "net/base/net_errors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include <netpacket/packet.h>
+ #else
+ #include <net/if_dl.h>
+@@ -28,7 +29,7 @@
+ namespace media_router {
+ namespace {
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ using sll = struct sockaddr_ll;
+ #define SOCKET_ARP_TYPE(s) ((s)->sll_hatype)
+ #define SOCKET_ADDRESS_LEN(s) ((s)->sll_halen)
diff --git a/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc b/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
new file mode 100644
index 000000000000..39153a755e3e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc
+@@ -9,8 +9,6 @@
+ #include <sys/socket.h>
+ #include <sys/types.h>
+
+-#include <linux/wireless.h>
+-
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"
+ #include "net/base/network_interfaces_linux.h"
+@@ -20,6 +18,7 @@ namespace media_router {
+ bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) {
+ DCHECK(ssid_out);
+
++#if !defined(OS_BSD)
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+ if (!ioctl_socket.is_valid()) {
+ // AF_INET is for IPv4, so it may fail for IPv6-only hosts even when there
+@@ -41,6 +40,7 @@ bool MaybeGetWifiSSID(const std::string& if_name, std:
+ ssid_out->assign(ssid);
+ return true;
+ }
++#endif
+ return false;
+ }
+
diff --git a/devel/electron6/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc b/devel/electron6/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
new file mode 100644
index 000000000000..75c038403333
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
@@ -0,0 +1,23 @@
+--- chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc
+@@ -112,6 +112,12 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ bool incognito,
+ CreateRouteCallback callback) {
+ DCHECK(!base::ContainsKey(presentations_, presentation_id));
++#if defined(OS_BSD) // XXX
++ std::move(callback).Run(base::nullopt, nullptr,
++ std::string("Not implemented"),
++ RouteRequestResult::UNKNOWN_ERROR);
++ return;
++#else
+ base::Optional<Display> display = GetDisplayBySinkId(sink_id);
+ if (!display) {
+ std::move(callback).Run(base::nullopt, nullptr,
+@@ -138,6 +144,7 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ std::move(callback).Run(route, nullptr, base::nullopt,
+ RouteRequestResult::OK);
+ NotifyRouteObservers();
++#endif
+ }
+
+ void WiredDisplayMediaRouteProvider::JoinRoute(
diff --git a/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
new file mode 100644
index 000000000000..07c95966e5e1
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_event_log_uploader.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+@@ -36,7 +36,7 @@ constexpr size_t kExpectedMimeOverheadBytes = 1000; /
+ const char kProduct[] = "Chrome";
+ #elif defined(OS_MACOSX)
+ const char kProduct[] = "Chrome_Mac";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kProduct[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char kProduct[] = "Chrome_Android";
diff --git a/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
new file mode 100644
index 000000000000..01e831b60f3c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_log_uploader.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media/webrtc/webrtc_log_uploader.cc
+@@ -393,6 +393,8 @@ void WebRtcLogUploader::SetupMultipart(
+ const char product[] = "Chrome_Android";
+ #elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc
new file mode 100644
index 000000000000..e77f4111ae56
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.cc
@@ -0,0 +1,33 @@
+--- chrome/browser/media/webrtc/webrtc_logging_handler_host.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_handler_host.cc
+@@ -26,10 +26,10 @@
+ #include "content/public/browser/content_browser_client.h"
+ #include "content/public/browser/render_process_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "content/public/browser/child_process_security_policy.h"
+ #include "storage/browser/fileapi/isolated_context.h"
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ using content::BrowserThread;
+ using webrtc_event_logging::WebRtcEventLogManager;
+@@ -281,7 +281,7 @@ void WebRtcLoggingHandlerHost::StartEventLogging(
+ web_app_id, callback);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ void WebRtcLoggingHandlerHost::GetLogsDirectory(
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback) {
+@@ -328,7 +328,7 @@ void WebRtcLoggingHandlerHost::GrantLogsDirectoryAcces
+ FROM_HERE, {BrowserThread::UI},
+ base::BindOnce(callback, file_system.id(), registered_name));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD
+
+ void WebRtcLoggingHandlerHost::OnRtpPacket(
+ std::unique_ptr<uint8_t[]> packet_header,
diff --git a/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h
new file mode 100644
index 000000000000..02dfc1b9b6c7
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_media_webrtc_webrtc__logging__handler__host.h
@@ -0,0 +1,36 @@
+--- chrome/browser/media/webrtc/webrtc_logging_handler_host.h.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_handler_host.h
+@@ -153,13 +153,13 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ size_t web_app_id,
+ const StartEventLoggingCallback& callback);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Ensures that the WebRTC Logs directory exists and then grants render
+ // process access to the 'WebRTC Logs' directory, and invokes |callback| with
+ // the ids necessary to create a DirectoryEntry object.
+ void GetLogsDirectory(const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ private:
+ friend class content::BrowserThread;
+@@ -226,7 +226,7 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ bool success,
+ const std::string& error_message);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Grants the render process access to the 'WebRTC Logs' directory, and
+ // invokes |callback| with the ids necessary to create a DirectoryEntry
+ // object. If the |logs_path| couldn't be created or found, |error_callback|
+@@ -235,7 +235,7 @@ class WebRtcLoggingHandlerHost : public content::Brows
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback,
+ const base::FilePath& logs_path);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // The render process ID this object belongs to.
+ const int render_process_id_;
diff --git a/devel/electron6/files/patch-chrome_browser_memory__details.cc b/devel/electron6/files/patch-chrome_browser_memory__details.cc
new file mode 100644
index 000000000000..5aebd4178839
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_memory__details.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/memory_details.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/memory_details.cc
+@@ -38,7 +38,7 @@
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/zygote_host_linux.h"
+ #endif
+
+@@ -336,7 +336,7 @@ void MemoryDetails::CollectChildInfoOnUIThread() {
+ process.titles.push_back(title);
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ if (service_manager::ZygoteHost::GetInstance()->IsZygotePid(process.pid)) {
+ process.process_type = content::PROCESS_TYPE_ZYGOTE;
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_memory__details__linux.cc b/devel/electron6/files/patch-chrome_browser_memory__details__linux.cc
new file mode 100644
index 000000000000..53913d34622b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_memory__details__linux.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/memory_details_linux.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/memory_details_linux.cc
+@@ -72,8 +72,10 @@ ProcessData GetProcessDataMemoryInformation(
+
+ std::unique_ptr<base::ProcessMetrics> metrics(
+ base::ProcessMetrics::CreateProcessMetrics(pid));
++#if !defined(OS_BSD)
+ pmi.num_open_fds = metrics->GetOpenFdCount();
+ pmi.open_fds_soft_limit = metrics->GetOpenFdSoftLimit();
++#endif
+
+ process_data.processes.push_back(pmi);
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc b/devel/electron6/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
new file mode 100644
index 000000000000..62d63769bbcc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/metrics/bluetooth_available_utility.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/metrics/bluetooth_available_utility.cc
+@@ -76,8 +76,10 @@ void ReportBluetoothAvailability() {
+ return;
+ }
+
++#if !defined(OS_BSD)
+ device::BluetoothAdapterFactory::Get().GetAdapter(
+ base::BindOnce(&OnGetAdapter));
++#endif
+ }
+
+ } // namespace bluetooth_utility
diff --git a/devel/electron6/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc b/devel/electron6/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
new file mode 100644
index 000000000000..e851f993f802
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
@@ -0,0 +1,21 @@
+--- chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+@@ -44,7 +44,9 @@
+
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include <gnu/libc-version.h>
++#endif
+
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+@@ -52,7 +54,7 @@
+ #if defined(USE_X11)
+ #include "ui/base/x/x11_util.h"
+ #endif
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(USE_OZONE) || defined(USE_X11)
+ #include "ui/events/devices/input_device_event_observer.h"
diff --git a/devel/electron6/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc b/devel/electron6/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
new file mode 100644
index 000000000000..2ba7a25f3eb6
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/metrics/chrome_metrics_service_client.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/metrics/chrome_metrics_service_client.cc
+@@ -902,7 +902,7 @@ bool ChromeMetricsServiceClient::RegisterForProfileEve
+ }
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This creates the DesktopProfileSessionDurationsServices if it didn't exist
+ // already.
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetForBrowserContext(
diff --git a/devel/electron6/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc b/devel/electron6/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
new file mode 100644
index 000000000000..f928454a9733
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/metrics/process_memory_metrics_emitter.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/metrics/process_memory_metrics_emitter.cc
+@@ -360,7 +360,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+
+ builder->SetPrivateMemoryFootprint(pmd.os_dump().private_footprint_kb / 1024);
+ builder->SetSharedMemoryFootprint(pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ builder->SetPrivateSwapFootprint(pmd.os_dump().private_footprint_swap_kb /
+ 1024);
+ #endif
+@@ -383,7 +383,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+ MEMORY_METRICS_HISTOGRAM_MB(
+ std::string(UMA_PREFIX) + process_name + ".SharedMemoryFootprint",
+ pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ MEMORY_METRICS_HISTOGRAM_MB(
+ std::string(UMA_PREFIX) + process_name + ".PrivateSwapFootprint",
+ pmd.os_dump().private_footprint_swap_kb / 1024);
diff --git a/devel/electron6/files/patch-chrome_browser_net_system__network__context__manager.cc b/devel/electron6/files/patch-chrome_browser_net_system__network__context__manager.cc
new file mode 100644
index 000000000000..e3848ffb689c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_net_system__network__context__manager.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/net/system_network_context_manager.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/net/system_network_context_manager.cc
+@@ -72,12 +72,12 @@
+ #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/chrome_paths_internal.h"
+ #include "chrome/common/chrome_switches.h"
+ #include "chrome/grit/chromium_strings.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ namespace {
+
+@@ -191,10 +191,10 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAut
+ auth_dynamic_params->enable_negotiate_port =
+ local_state->GetBoolean(prefs::kEnableAuthNegotiatePort);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ auth_dynamic_params->delegate_by_kdc_policy =
+ local_state->GetBoolean(prefs::kAuthNegotiateDelegateByKdcPolicy);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ auth_dynamic_params->ntlm_v2_enabled =
+@@ -434,10 +434,10 @@ SystemNetworkContextManager::SystemNetworkContextManag
+ pref_change_registrar_.Add(prefs::kEnableAuthNegotiatePort,
+ auth_pref_callback);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ pref_change_registrar_.Add(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ auth_pref_callback);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ pref_change_registrar_.Add(prefs::kNtlmV2Enabled, auth_pref_callback);
+@@ -486,10 +486,10 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRe
+ registry->RegisterStringPref(prefs::kAuthServerWhitelist, std::string());
+ registry->RegisterStringPref(prefs::kAuthNegotiateDelegateWhitelist,
+ std::string());
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ false);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ registry->RegisterBooleanPref(
+@@ -586,7 +586,7 @@ void SystemNetworkContextManager::OnNetworkServiceCrea
+ content::GetNetworkService()->ConfigureStubHostResolver(
+ stub_resolver_enabled, std::move(dns_over_https_servers));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ const base::CommandLine& command_line =
+ *base::CommandLine::ForCurrentProcess();
+
diff --git a/devel/electron6/files/patch-chrome_browser_notifications_notification__display__service__impl.cc b/devel/electron6/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
new file mode 100644
index 000000000000..93e5a0aee1b9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/notifications/notification_display_service_impl.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/notifications/notification_display_service_impl.cc
+@@ -31,7 +31,7 @@
+ #include "chrome/browser/notifications/notification_platform_bridge_message_center.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -121,7 +121,7 @@ NotificationDisplayServiceImpl::NotificationDisplaySer
+ AddNotificationHandler(NotificationHandler::Type::WEB_PERSISTENT,
+ std::make_unique<PersistentNotificationHandler>());
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ AddNotificationHandler(
+ NotificationHandler::Type::SEND_TAB_TO_SELF,
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(
diff --git a/devel/electron6/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc b/devel/electron6/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
new file mode 100644
index 000000000000..8fe5641d2b42
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/password_manager/chrome_password_manager_client.cc.orig 2019-09-10 11:13:40 UTC
++++ chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -82,7 +82,11 @@
+ #include "net/cert/cert_status_flags.h"
+ #include "services/identity/public/cpp/identity_manager.h"
+ #include "services/metrics/public/cpp/ukm_recorder.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/url_constants.h"
+
+ #if defined(FULL_SAFE_BROWSING)
diff --git a/devel/electron6/files/patch-chrome_browser_password__manager_password__store__factory.cc b/devel/electron6/files/patch-chrome_browser_password__manager_password__store__factory.cc
new file mode 100644
index 000000000000..85d3eb4aa9a9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_password__manager_password__store__factory.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/password_manager/password_store_factory.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/password_manager/password_store_factory.cc
+@@ -302,7 +302,7 @@ PasswordStoreFactory::BuildServiceInstanceFor(
+ network_context_getter);
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<password_manager::PasswordStoreSigninNotifier> notifier =
+ std::make_unique<password_manager::PasswordStoreSigninNotifierImpl>(
+ profile);
diff --git a/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc b/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
new file mode 100644
index 000000000000..60d639e8b91f
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/performance_monitor/process_metrics_history.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.cc
+@@ -47,7 +47,7 @@ void ProcessMetricsHistory::SampleMetrics() {
+ #if defined(OS_WIN)
+ disk_usage_ = process_metrics_->GetDiskUsageBytesPerSecond();
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ idle_wakeups_ = process_metrics_->GetIdleWakeupsPerSecond();
+ #endif
+ #if defined(OS_MACOSX)
+@@ -87,7 +87,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kDiskUsageHistogramMin, kDiskUsageHistogramMax,
+ kDiskUsageHistogramBucketCount);
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.BrowserProcess", idle_wakeups_);
+ #endif
+@@ -105,7 +105,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.RendererProcess",
+ true);
+ }
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.RendererProcess", idle_wakeups_);
+ #endif
+@@ -122,7 +122,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kHistogramBucketCount);
+ if (cpu_usage_ > kHighCPUUtilizationThreshold)
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.GPUProcess", true);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("PerformanceMonitor.IdleWakeups.GPUProcess",
+ idle_wakeups_);
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.h b/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
new file mode 100644
index 000000000000..0d3a4d09d36e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
@@ -0,0 +1,11 @@
+--- chrome/browser/performance_monitor/process_metrics_history.h.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.h
+@@ -72,7 +72,7 @@ class ProcessMetricsHistory {
+ uint64_t disk_usage_ = 0;
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int idle_wakeups_ = 0;
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-chrome_browser_platform__util.h b/devel/electron6/files/patch-chrome_browser_platform__util.h
new file mode 100644
index 000000000000..4f985533045f
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_platform__util.h
@@ -0,0 +1,11 @@
+--- chrome/browser/platform_util.h.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/platform_util.h
+@@ -41,7 +41,7 @@ enum OpenOperationResult {
+ enum OpenItemType {
+ OPEN_FILE,
+ OPEN_FOLDER,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SHOW_ITEM_IN_FOLDER
+ #endif
+ };
diff --git a/devel/electron6/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc b/devel/electron6/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
new file mode 100644
index 000000000000..2efd5767ba74
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugin_info_host_impl.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/plugins/plugin_info_host_impl.cc
+@@ -411,7 +411,7 @@ void PluginInfoHostImpl::ComponentPluginLookupDone(
+ std::unique_ptr<component_updater::ComponentInfo> cus_plugin_info) {
+ if (cus_plugin_info) {
+ output->status = chrome::mojom::PluginStatus::kComponentUpdateRequired;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (cus_plugin_info->version != base::Version("0")) {
+ output->status = chrome::mojom::PluginStatus::kRestartRequired;
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_plugins_plugins__resource__service.cc b/devel/electron6/files/patch-chrome_browser_plugins_plugins__resource__service.cc
new file mode 100644
index 000000000000..6ea3237d18c5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_plugins_plugins__resource__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugins_resource_service.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/plugins/plugins_resource_service.cc
+@@ -63,7 +63,7 @@ GURL GetPluginsServerURL() {
+ filename = "plugins_win.json";
+ #elif defined(OS_CHROMEOS)
+ filename = "plugins_chromeos.json";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ filename = "plugins_linux.json";
+ #elif defined(OS_MACOSX)
+ filename = "plugins_mac.json";
diff --git a/devel/electron6/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc b/devel/electron6/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
new file mode 100644
index 000000000000..c4bf9fc723c8
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/policy/configuration_policy_handler_list_factory.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/policy/configuration_policy_handler_list_factory.cc
+@@ -109,7 +109,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -321,11 +321,11 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ { key::kSafeSitesFilterBehavior,
+ policy_prefs::kSafeSitesFilterBehavior,
+ base::Value::Type::INTEGER},
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ { key::kAuthNegotiateDelegateByKdcPolicy,
+ prefs::kAuthNegotiateDelegateByKdcPolicy,
+ base::Value::Type::BOOLEAN },
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #if defined(OS_POSIX)
+ { key::kNtlmV2Enabled,
+ prefs::kNtlmV2Enabled,
+@@ -1021,7 +1021,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ base::Value::Type::BOOLEAN },
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ { key::kAlternativeBrowserPath,
+ browser_switcher::prefs::kAlternativeBrowserPath,
+ base::Value::Type::STRING },
diff --git a/devel/electron6/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc b/devel/electron6/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
new file mode 100644
index 000000000000..43c8ae92e4e1
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/policy_prefs_browsertest.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/policy/policy_prefs_browsertest.cc
+@@ -183,6 +183,8 @@ class PolicyTestCase {
+ const std::string os("chromeos");
+ #elif defined(OS_LINUX)
+ const std::string os("linux");
++#elif defined(OS_FREEBSD)
++ const std::string os("freebsd");
+ #else
+ #error "Unknown platform"
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_prefs_browser__prefs.cc b/devel/electron6/files/patch-chrome_browser_prefs_browser__prefs.cc
new file mode 100644
index 000000000000..a98a5fff5b89
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_prefs_browser__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/prefs/browser_prefs.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/prefs/browser_prefs.cc
+@@ -338,7 +338,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -872,7 +872,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySync
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc b/devel/electron6/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
new file mode 100644
index 000000000000..73fb9a2ac2a0
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/prefs/pref_service_incognito_whitelist.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/prefs/pref_service_incognito_whitelist.cc
+@@ -183,7 +183,7 @@ const char* const kPersistentPrefNames[] = {
+ prefs::kShowFullscreenToolbar,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Toggleing custom frames affects all open windows in the profile, hence
+ // should be written to the regular profile when changed in incognito mode.
+ prefs::kUseCustomChromeFrame,
diff --git a/devel/electron6/files/patch-chrome_browser_process__singleton__posix.cc b/devel/electron6/files/patch-chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..6021f2492e63
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/process_singleton_posix.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/process_singleton_posix.cc
+@@ -94,11 +94,11 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/process_singleton_dialog_linux.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -325,7 +325,7 @@ bool DisplayProfileInUseError(const base::FilePath& lo
+ if (g_disable_prompt)
+ return g_user_opted_unlock_in_use_profile;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::string16 relaunch_button_text = l10n_util::GetStringUTF16(
+ IDS_PROFILE_IN_USE_LINUX_RELAUNCH);
+ return ShowProcessSingletonDialog(error, relaunch_button_text);
+@@ -901,7 +901,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ SendRemoteProcessInteractionResultHistogram(REMOTE_PROCESS_SHUTTING_DOWN);
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron6/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc b/devel/electron6/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
new file mode 100644
index 000000000000..d44e1d48f224
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+@@ -330,7 +330,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ MediaGalleriesPreferencesFactory::GetInstance();
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetInstance();
+ #endif
+ ModelTypeStoreServiceFactory::GetInstance();
diff --git a/devel/electron6/files/patch-chrome_browser_profiles_profile__attributes__entry.cc b/devel/electron6/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
new file mode 100644
index 000000000000..334aee2acb6f
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/profile_attributes_entry.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/profiles/profile_attributes_entry.cc
+@@ -83,7 +83,7 @@ void ProfileAttributesEntry::Initialize(ProfileInfoCac
+ if (is_force_signin_enabled_) {
+ if (!IsAuthenticated())
+ is_force_signin_profile_locked_ = true;
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ } else if (IsSigninRequired()) {
+ // Profiles that require signin in the absence of an enterprise policy are
+ // left-overs from legacy supervised users. Just unlock them, so users can
diff --git a/devel/electron6/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc b/devel/electron6/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
new file mode 100644
index 000000000000..4e31893ed033
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_context_menu/render_view_context_menu.cc.orig 2019-09-10 11:13:41 UTC
++++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
+@@ -1672,7 +1672,7 @@ void RenderViewContextMenu::AppendEditableItems() {
+ // 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+ // We make an exception for OS X as context clicking will select the closest
+ // word. In this case both items are always shown.
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
+ IDS_CONTENT_CONTEXT_UNDO);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
+@@ -1714,7 +1714,7 @@ void RenderViewContextMenu::AppendLanguageSettings() {
+ if (!use_spelling)
+ return;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS,
+ IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS);
+ #else
+@@ -1994,7 +1994,7 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id)
+ case IDC_CHECK_SPELLING_WHILE_TYPING:
+ return prefs->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
+
+-#if !defined(OS_MACOSX) && defined(OS_POSIX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD) && defined(OS_POSIX)
+ // TODO(suzhe): this should not be enabled for password fields.
+ case IDC_INPUT_METHODS_MENU:
+ return true;
diff --git a/devel/electron6/files/patch-chrome_browser_renderer__preferences__util.cc b/devel/electron6/files/patch-chrome_browser_renderer__preferences__util.cc
new file mode 100644
index 000000000000..3a399fbf326b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_renderer__preferences__util.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_preferences_util.cc.orig 2019-09-10 10:42:29 UTC
++++ chrome/browser/renderer_preferences_util.cc
+@@ -30,7 +30,7 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/themes/theme_service.h"
+ #include "chrome/browser/themes/theme_service_factory.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -130,7 +130,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ prefs->caret_blink_interval = interval;
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
+@@ -149,7 +149,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_BSD)
+ content::UpdateFontRendererPreferencesFromSystemSettings(prefs);
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py b/devel/electron6/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
new file mode 100644
index 000000000000..ea3dccc6f3c2
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
@@ -0,0 +1,19 @@
+--- chrome/browser/resources/safe_browsing/gen_file_type_proto.py.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/resources/safe_browsing/gen_file_type_proto.py
+@@ -31,6 +31,7 @@ def PlatformTypes():
+ "android": download_file_types_pb2.DownloadFileType.PLATFORM_ANDROID,
+ "chromeos": download_file_types_pb2.DownloadFileType.PLATFORM_CHROME_OS,
+ "linux": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
++ "bsd": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
+ "mac": download_file_types_pb2.DownloadFileType.PLATFORM_MAC,
+ "win": download_file_types_pb2.DownloadFileType.PLATFORM_WINDOWS,
+ }
+@@ -169,7 +170,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenera
+ 'Outfile must have a %d for version and %s for platform.')
+ parser.add_option('-t', '--type',
+ help='The platform type. One of android, chromeos, ' +
+- 'linux, mac, win')
++ 'linux, bsd, mac, win')
+
+ def AddExtraCommandLineArgsForVirtualEnvRun(self, opts, command):
+ if opts.type is not None:
diff --git a/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
new file mode 100644
index 000000000000..96a34fa994d2
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
@@ -0,0 +1,20 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js
+@@ -35,7 +35,7 @@ cr.define('settings', function() {
+
+ useDefaultTheme() {}
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ useSystemTheme() {}
+
+ // </if>
+@@ -93,7 +93,7 @@ cr.define('settings', function() {
+ chrome.send('useDefaultTheme');
+ }
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /** @override */
+ useSystemTheme() {
+ chrome.send('useSystemTheme');
diff --git a/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
new file mode 100644
index 000000000000..304136750d27
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
@@ -0,0 +1,29 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.html.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.html
+@@ -64,7 +64,7 @@
+ <cr-link-row class="first" hidden="[[!pageVisibility.setTheme]]"
+ label="$i18n{themes}" sub-label="[[themeSublabel_]]"
+ on-click="openThemeUrl_" external></cr-link-row>
+-<if expr="not is_linux or chromeos">
++<if expr="not is_posix or chromeos">
+ <template is="dom-if" if="[[prefs.extensions.theme.id.value]]">
+ <div class="separator"></div>
+ <paper-button id="useDefault" on-click="onUseDefaultTap_"
+@@ -73,7 +73,7 @@
+ </paper-button>
+ </template>
+ </if>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <div class="settings-row continuation"
+ hidden="[[!showThemesSecondary_(
+ prefs.extensions.theme.id.value, useSystemTheme_)]]"
+@@ -138,7 +138,7 @@
+ pref="{{prefs.bookmark_bar.show_on_all_tabs}}"
+ label="$i18n{showBookmarksBar}">
+ </settings-toggle-button>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <settings-toggle-button
+ class$="[[getFirst_(pageVisibility.bookmarksBar)]]"
+ pref="{{prefs.browser.custom_chrome_frame}}"
diff --git a/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
new file mode 100644
index 000000000000..7124f1a9c0a4
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
@@ -0,0 +1,33 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.js.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.js
+@@ -125,7 +125,7 @@ Polymer({
+ 'defaultFontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
+ 'themeChanged_(prefs.extensions.theme.id.value, useSystemTheme_)',
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ // NOTE: this pref only exists on Linux.
+ 'useSystemThemePrefChanged_(prefs.extensions.theme.use_system.value)',
+ // </if>
+@@ -228,7 +228,7 @@ Polymer({
+ this.browserProxy_.useDefaultTheme();
+ },
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /**
+ * @param {boolean} useSystemTheme
+ * @private
+@@ -304,10 +304,10 @@ Polymer({
+ }
+
+ let i18nId;
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ i18nId = useSystemTheme ? 'systemTheme' : 'classicTheme';
+ // </if>
+- // <if expr="not is_linux or chromeos">
++ // <if expr="not is_bsd or chromeos">
+ i18nId = 'chooseFromWebStore';
+ // </if>
+ this.themeSublabel_ = this.i18n(i18nId);
diff --git a/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc b/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
new file mode 100644
index 000000000000..402180c12971
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc
+@@ -8,7 +8,12 @@
+
+ #include "base/hash/hash.h"
+ #include "base/logging.h"
++//XXX(rene) needs shim headers?
++#if defined(USE_SYSTEM_PROTOBUF)
++#include <google/protobuf/message_lite.h>
++#else
+ #include "third_party/protobuf/src/google/protobuf/message_lite.h"
++#endif
+
+ namespace safe_browsing {
+
diff --git a/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc b/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
new file mode 100644
index 000000000000..59192f39e3d3
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+@@ -716,7 +716,7 @@ void IncidentReportingService::OnEnvironmentDataCollec
+ environment_collection_pending_ = false;
+
+ // Process::Current().CreationTime() is missing on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeDelta uptime =
+ first_incident_time_ - base::Process::Current().CreationTime();
+ environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/devel/electron6/files/patch-chrome_browser_search_local__files__ntp__source.cc b/devel/electron6/files/patch-chrome_browser_search_local__files__ntp__source.cc
new file mode 100644
index 000000000000..37cccabe590a
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_search_local__files__ntp__source.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/search/local_files_ntp_source.cc.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/search/local_files_ntp_source.cc
+@@ -20,8 +20,13 @@
+ #include "build/build_config.h"
+ #include "chrome/common/url_constants.h"
+ #include "content/public/browser/url_data_source.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#include <re2/stringpiece.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
+ #include "third_party/re2/src/re2/stringpiece.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron6/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc b/devel/electron6/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
new file mode 100644
index 000000000000..9521e61d874d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
+@@ -11,7 +11,7 @@
+ #include "chrome/browser/profiles/profile.h"
+ #include "chrome/browser/send_tab_to_self/receiving_ui_handler.h"
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -32,7 +32,7 @@ ReceivingUiHandlerRegistry* ReceivingUiHandlerRegistry
+ // Instantiates all the handlers relevant to this platform.
+ void ReceivingUiHandlerRegistry::InstantiatePlatformSpecificHandlers(
+ Profile* profile) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ applicable_handlers_.push_back(
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(profile));
+ #elif defined(OS_ANDROID)
diff --git a/devel/electron6/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc b/devel/electron6/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
new file mode 100644
index 000000000000..bc338a2c34e6
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc
+@@ -41,7 +41,7 @@ void SendTabToSelfClientService::SendTabToSelfModelLoa
+ void SendTabToSelfClientService::EntriesAddedRemotely(
+ const std::vector<const SendTabToSelfEntry*>& new_entries) {
+ for (const std::unique_ptr<ReceivingUiHandler>& handler : GetHandlers()) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ // Only respond to notifications corresponding to this service's profile
+ // for these OSes; mobile does not have a Profile.
+ // Cast note: on desktop, handlers are guaranteed to be the derived class
diff --git a/devel/electron6/files/patch-chrome_browser_signin_signin__util.cc b/devel/electron6/files/patch-chrome_browser_signin_signin__util.cc
new file mode 100644
index 000000000000..b80cb996d55d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_signin_signin__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/signin/signin_util.cc.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/signin/signin_util.cc
+@@ -33,7 +33,7 @@
+ #include "services/identity/public/cpp/primary_account_mutator.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/browser_list.h"
+ #include "chrome/browser/ui/browser_list_observer.h"
+@@ -45,7 +45,7 @@ namespace {
+
+ constexpr char kSignoutSettingKey[] = "signout_setting";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #define CAN_DELETE_PROFILE
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc b/devel/electron6/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc
new file mode 100644
index 000000000000..ed56fcf76d33
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ssl/captive_portal_blocking_page.cc.orig 2019-09-10 11:13:42 UTC
++++ chrome/browser/ssl/captive_portal_blocking_page.cc
+@@ -124,7 +124,7 @@ std::string CaptivePortalBlockingPage::GetWiFiSSID() c
+ wifi_service->GetConnectedNetworkSSID(&ssid, &error);
+ if (!error.empty())
+ return std::string();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ssid = net::GetWifiSSID();
+ #elif defined(OS_ANDROID)
+ ssid = net::android::GetWifiSSID();
diff --git a/devel/electron6/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc b/devel/electron6/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
new file mode 100644
index 000000000000..7ac4a5134155
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ssl/ssl_error_controller_client.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ssl/ssl_error_controller_client.cc
+@@ -79,7 +79,7 @@ void LaunchDateAndTimeSettingsImpl() {
+ #if defined(OS_ANDROID)
+ chrome::android::OpenDateAndTimeSettings();
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ struct ClockCommand {
+ const char* const pathname;
+ const char* const argument;
+@@ -218,7 +218,7 @@ void SSLErrorControllerClient::Proceed() {
+ }
+
+ bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_WIN)
+ return true;
+ #else
diff --git a/devel/electron6/files/patch-chrome_browser_sync_chrome__sync__client.cc b/devel/electron6/files/patch-chrome_browser_sync_chrome__sync__client.cc
new file mode 100644
index 000000000000..948f7a5c5e42
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_sync_chrome__sync__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/sync/chrome_sync_client.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/sync/chrome_sync_client.cc
+@@ -372,7 +372,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ dump_stack));
+ #endif // BUILDFLAG(ENABLE_APP_LIST)
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Dictionary sync is enabled by default.
+ if (!disabled_types.Has(syncer::DICTIONARY)) {
+ controllers.push_back(
+@@ -382,7 +382,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ base::Unretained(this), syncer::DICTIONARY),
+ dump_stack));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ if (arc::IsArcAllowedForProfile(profile_) &&
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.cc b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.cc
new file mode 100644
index 000000000000..2549ba58e92e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.cc
@@ -0,0 +1,56 @@
+--- chrome/browser/task_manager/sampling/task_group.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/task_manager/sampling/task_group.cc
+@@ -33,9 +33,9 @@ const int kBackgroundRefreshTypesMask =
+ #if defined(OS_WIN)
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME |
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if BUILDFLAG(ENABLE_NACL)
+ REFRESH_TYPE_NACL |
+ #endif // BUILDFLAG(ENABLE_NACL)
+@@ -114,9 +114,9 @@ TaskGroup::TaskGroup(
+ #if BUILDFLAG(ENABLE_NACL)
+ nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown),
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ open_fd_count_(-1),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ idle_wakeups_per_second_(-1),
+ gpu_memory_has_duplicates_(false),
+ is_backgrounded_(false),
+@@ -130,10 +130,10 @@ TaskGroup::TaskGroup(
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnOpenFdCountRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnProcessPriorityDone,
+ weak_ptr_factory_.GetWeakPtr()));
+
+@@ -301,14 +301,14 @@ void TaskGroup::OnRefreshNaClDebugStubPortDone(int nac
+ }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void TaskGroup::OnOpenFdCountRefreshDone(int open_fd_count) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ open_fd_count_ = open_fd_count;
+ OnBackgroundRefreshTypeFinished(REFRESH_TYPE_FD_COUNT);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void TaskGroup::OnCpuRefreshDone(double cpu_usage) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.h b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.h
new file mode 100644
index 000000000000..1a29f1d67f58
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group.h
@@ -0,0 +1,48 @@
+--- chrome/browser/task_manager/sampling/task_group.h.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/task_manager/sampling/task_group.h
+@@ -36,7 +36,7 @@ constexpr int kUnsupportedVMRefreshFlags =
+ REFRESH_TYPE_WEBCACHE_STATS | REFRESH_TYPE_NETWORK_USAGE |
+ REFRESH_TYPE_NACL | REFRESH_TYPE_IDLE_WAKEUPS | REFRESH_TYPE_HANDLES |
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME | REFRESH_TYPE_PRIORITY |
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+ #endif
+ REFRESH_TYPE_HARD_FAULTS;
+@@ -119,9 +119,9 @@ class TaskGroup {
+ int nacl_debug_stub_port() const { return nacl_debug_stub_port_; }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int open_fd_count() const { return open_fd_count_; }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ int idle_wakeups_per_second() const { return idle_wakeups_per_second_; }
+
+@@ -135,9 +135,9 @@ class TaskGroup {
+ void RefreshNaClDebugStubPort(int child_process_unique_id);
+ void OnRefreshNaClDebugStubPortDone(int port);
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void OnOpenFdCountRefreshDone(int open_fd_count);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void OnCpuRefreshDone(double cpu_usage);
+ void OnSwappedMemRefreshDone(int64_t swapped_mem_bytes);
+@@ -206,10 +206,10 @@ class TaskGroup {
+ #if BUILDFLAG(ENABLE_NACL)
+ int nacl_debug_stub_port_;
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // The number of file descriptors currently open by the process.
+ int open_fd_count_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int idle_wakeups_per_second_;
+ bool gpu_memory_has_duplicates_;
+ bool is_backgrounded_;
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
new file mode 100644
index 000000000000..cee676d9b408
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.cc
+@@ -43,9 +43,9 @@ TaskGroupSampler::TaskGroupSampler(
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_swapped_mem_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority)
+ : process_(std::move(process)),
+ process_metrics_(CreateProcessMetrics(process_.Handle())),
+@@ -53,9 +53,9 @@ TaskGroupSampler::TaskGroupSampler(
+ on_cpu_refresh_callback_(on_cpu_refresh),
+ on_swapped_mem_refresh_callback_(on_swapped_mem_refresh),
+ on_idle_wakeups_callback_(on_idle_wakeups),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_open_fd_count_callback_(on_open_fd_count),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_process_priority_callback_(on_process_priority) {
+ DCHECK(blocking_pool_runner.get());
+
+@@ -86,7 +86,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ on_swapped_mem_refresh_callback_);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_IDLE_WAKEUPS,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -95,9 +95,9 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshIdleWakeupsPerSecond, this),
+ on_idle_wakeups_callback_);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_FD_COUNT,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -106,7 +106,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshOpenFdCount, this),
+ on_open_fd_count_callback_);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_PRIORITY,
+ refresh_flags)) {
+@@ -151,13 +151,13 @@ int TaskGroupSampler::RefreshIdleWakeupsPerSecond() {
+ return process_metrics_->GetIdleWakeupsPerSecond();
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int TaskGroupSampler::RefreshOpenFdCount() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
+
+ return process_metrics_->GetOpenFdCount();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ bool TaskGroupSampler::RefreshProcessPriority() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
new file mode 100644
index 000000000000..10dabafa003a
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
@@ -0,0 +1,50 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.h.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.h
+@@ -32,9 +32,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ using OnCpuRefreshCallback = base::Callback<void(double)>;
+ using OnSwappedMemRefreshCallback = base::Callback<void(int64_t)>;
+ using OnIdleWakeupsCallback = base::Callback<void(int)>;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnOpenFdCountCallback = base::Callback<void(int)>;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnProcessPriorityCallback = base::Callback<void(bool)>;
+
+ TaskGroupSampler(
+@@ -43,9 +43,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_memory_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority);
+
+ // Refreshes the expensive process' stats (CPU usage, memory usage, and idle
+@@ -60,9 +60,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ double RefreshCpuUsage();
+ int64_t RefreshSwappedMem();
+ int RefreshIdleWakeupsPerSecond();
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int RefreshOpenFdCount();
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool RefreshProcessPriority();
+
+ // The process that holds the handle that we own so that we can use it for
+@@ -84,9 +84,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback on_cpu_refresh_callback_;
+ const OnSwappedMemRefreshCallback on_swapped_mem_refresh_callback_;
+ const OnIdleWakeupsCallback on_idle_wakeups_callback_;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback on_open_fd_count_callback_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback on_process_priority_callback_;
+
+ // To assert we're running on the correct thread.
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
new file mode 100644
index 000000000000..2baf596031da
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/sampling/task_manager_impl.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/task_manager/sampling/task_manager_impl.cc
+@@ -210,11 +210,11 @@ void TaskManagerImpl::GetUSERHandles(TaskId task_id,
+ }
+
+ int TaskManagerImpl::GetOpenFdCount(TaskId task_id) const {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return GetTaskGroupByTaskId(task_id)->open_fd_count();
+ #else
+ return -1;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ }
+
+ bool TaskManagerImpl::IsTaskOnBackgroundedProcess(TaskId task_id) const {
diff --git a/devel/electron6/files/patch-chrome_browser_task__manager_task__manager__observer.h b/devel/electron6/files/patch-chrome_browser_task__manager_task__manager__observer.h
new file mode 100644
index 000000000000..6af6b1489594
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_task__manager_task__manager__observer.h
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/task_manager_observer.h.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/task_manager/task_manager_observer.h
+@@ -43,11 +43,11 @@ enum RefreshType {
+ // or backgrounded.
+ REFRESH_TYPE_PRIORITY = 1 << 13,
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // For observers interested in getting the number of open file descriptors of
+ // processes.
+ REFRESH_TYPE_FD_COUNT = 1 << 14,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ REFRESH_TYPE_KEEPALIVE_COUNT = 1 << 15,
+ REFRESH_TYPE_MEMORY_FOOTPRINT = 1 << 16,
diff --git a/devel/electron6/files/patch-chrome_browser_tracing_crash__service__uploader.cc b/devel/electron6/files/patch-chrome_browser_tracing_crash__service__uploader.cc
new file mode 100644
index 000000000000..5dae904c84de
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_tracing_crash__service__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/tracing/crash_service_uploader.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/tracing/crash_service_uploader.cc
+@@ -162,6 +162,8 @@ void TraceCrashServiceUploader::DoCompressOnBackground
+ const char product[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_browser__command__controller.cc b/devel/electron6/files/patch-chrome_browser_ui_browser__command__controller.cc
new file mode 100644
index 000000000000..7fef540bcfc7
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_browser__command__controller.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/browser_command_controller.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/browser_command_controller.cc
+@@ -81,7 +81,7 @@
+ #include "chrome/browser/ui/browser_commands_chromeos.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+
+@@ -251,7 +251,7 @@ bool BrowserCommandController::IsReservedCommandOrKey(
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // If this key was registered by the user as a content editing hotkey, then
+ // it is not reserved.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+@@ -461,7 +461,7 @@ bool BrowserCommandController::ExecuteCommandWithDispo
+ break;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case IDC_MINIMIZE_WINDOW:
+ browser_->window()->Minimize();
+ break;
+@@ -911,7 +911,7 @@ void BrowserCommandController::InitCommandState() {
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_2, true);
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_3, true);
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ command_updater_.UpdateCommandEnabled(IDC_MINIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_MAXIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_RESTORE_WINDOW, true);
diff --git a/devel/electron6/files/patch-chrome_browser_ui_browser__view__prefs.cc b/devel/electron6/files/patch-chrome_browser_ui_browser__view__prefs.cc
new file mode 100644
index 000000000000..662bc0244e87
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_browser__view__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/browser_view_prefs.cc.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/ui/browser_view_prefs.cc
+@@ -34,7 +34,7 @@ void RegisterBrowserViewLocalPrefs(PrefRegistrySimple*
+
+ void RegisterBrowserViewProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool custom_frame_pref_default = false;
+ #if defined(USE_X11)
+ custom_frame_pref_default = ui::GetCustomFramePrefDefault();
+@@ -45,7 +45,7 @@ void RegisterBrowserViewProfilePrefs(
+ #endif
+ registry->RegisterBooleanPref(prefs::kUseCustomChromeFrame,
+ custom_frame_pref_default);
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX && !OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void MigrateBrowserTabStripPrefs(PrefService* prefs) {
diff --git a/devel/electron6/files/patch-chrome_browser_ui_browser__window.h b/devel/electron6/files/patch-chrome_browser_ui_browser__window.h
new file mode 100644
index 000000000000..5d4fa3f0f891
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_browser__window.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/browser_window.h.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/browser_window.h
+@@ -448,7 +448,7 @@ class BrowserWindow : public ui::BaseWindow {
+ bool is_source_keyboard) = 0;
+
+ #if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ virtual void ShowHatsBubbleFromAppMenuButton() = 0;
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc b/devel/electron6/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
new file mode 100644
index 000000000000..ae97a01055ef
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc.orig 2019-09-10 10:42:30 UTC
++++ chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc
+@@ -16,7 +16,7 @@
+
+ // NOTE(koz): Linux doesn't use the thick shadowed border, so we add padding
+ // here.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const int ExclusiveAccessBubble::kPaddingPx = 8;
+ #else
+ const int ExclusiveAccessBubble::kPaddingPx = 15;
diff --git a/devel/electron6/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc b/devel/electron6/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
new file mode 100644
index 000000000000..3a712c6f0eb6
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine_base.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/input_method/input_method_engine_base.cc
+@@ -30,7 +30,7 @@
+ #include "ui/base/ime/chromeos/ime_keymap.h"
+ #elif defined(OS_WIN)
+ #include "ui/events/keycodes/keyboard_codes_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/keycodes/keyboard_codes_posix.h"
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc b/devel/electron6/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
new file mode 100644
index 000000000000..3f90d355f9f8
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
@@ -0,0 +1,10 @@
+--- chrome/browser/ui/libgtkui/print_dialog_gtk.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/libgtkui/print_dialog_gtk.cc
+@@ -333,6 +333,7 @@ void PrintDialogGtk::ShowDialog(
+ // Since we only generate PDF, only show printers that support PDF.
+ // TODO(thestig) Add more capabilities to support?
+ GtkPrintCapabilities cap = static_cast<GtkPrintCapabilities>(
++ GTK_PRINT_CAPABILITY_GENERATE_PS |
+ GTK_PRINT_CAPABILITY_GENERATE_PDF |
+ GTK_PRINT_CAPABILITY_PAGE_SET |
+ GTK_PRINT_CAPABILITY_COPIES |
diff --git a/devel/electron6/files/patch-chrome_browser_ui_sad__tab.cc b/devel/electron6/files/patch-chrome_browser_ui_sad__tab.cc
new file mode 100644
index 000000000000..c854cf547faf
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_sad__tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/sad_tab.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/sad_tab.cc
+@@ -180,7 +180,7 @@ std::vector<int> SadTab::GetSubMessages() {
+ // Only show incognito suggestion if not already in Incognito mode.
+ if (!web_contents_->GetBrowserContext()->IsOffTheRecord())
+ message_ids.insert(message_ids.begin(), IDS_SAD_TAB_RELOAD_INCOGNITO);
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Note: on macOS, Linux and ChromeOS, the first bullet is either one of
+ // IDS_SAD_TAB_RELOAD_CLOSE_TABS or IDS_SAD_TAB_RELOAD_CLOSE_NOTABS
+ // followed by one of the above suggestions.
diff --git a/devel/electron6/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc b/devel/electron6/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
new file mode 100644
index 000000000000..486260ec53b0
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/startup/bad_flags_prompt.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/startup/bad_flags_prompt.cc
+@@ -88,7 +88,7 @@ static const char* kBadFlags[] = {
+ extensions::switches::kExtensionsOnChromeURLs,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
+ // http://crbug.com/327295
+ switches::kEnableSpeechDispatcher,
diff --git a/devel/electron6/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc b/devel/electron6/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
new file mode 100644
index 000000000000..a04b15d16e3b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
@@ -0,0 +1,22 @@
+--- chrome/browser/ui/startup/startup_browser_creator.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/startup/startup_browser_creator.cc
+@@ -82,7 +82,7 @@
+ #include "chrome/browser/ui/user_manager.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+
+@@ -663,8 +663,10 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
+ }
+ #endif // OS_CHROMEOS
+
++#if 0 /* XXX */
+ #if defined(TOOLKIT_VIEWS) && defined(USE_X11)
+ ui::TouchFactory::SetTouchDeviceListFromCommandLine();
++#endif
+ #endif
+
+ #if defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-chrome_browser_ui_tab__helpers.cc b/devel/electron6/files/patch-chrome_browser_ui_tab__helpers.cc
new file mode 100644
index 000000000000..d6b26a736d65
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_tab__helpers.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/ui/tab_helpers.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/tab_helpers.cc
+@@ -119,7 +119,7 @@
+ #include "components/zoom/zoom_controller.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
+ #include "chrome/browser/ui/hats/hats_helper.h"
+ #endif
+@@ -307,11 +307,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_con
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopSessionDurationObserver::CreateForWebContents(web_contents);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ features::kHappinessTrackingSurveysForDesktop)) {
+ HatsHelper::CreateForWebContents(web_contents);
diff --git a/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc b/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
new file mode 100644
index 000000000000..a574d6c70a1c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/ui/task_manager/task_manager_columns.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/task_manager/task_manager_columns.cc
+@@ -93,10 +93,10 @@ const TableColumnData kColumns[] = {
+ base::size("100000") * kCharWidth, -1, true, false, false},
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
+ base::size("999") * kCharWidth, -1, true, false, false},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN, ui::TableColumn::LEFT, -1, 0,
+ base::size("background") * kCharWidth, -1, true, true, false},
+ {IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
diff --git a/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc b/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
new file mode 100644
index 000000000000..4c4a1fd013c2
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
@@ -0,0 +1,50 @@
+--- chrome/browser/ui/task_manager/task_manager_table_model.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/task_manager/task_manager_table_model.cc
+@@ -451,13 +451,13 @@ base::string16 TaskManagerTableModel::GetText(int row,
+ ? stringifier_->backgrounded_string()
+ : stringifier_->foregrounded_string();
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
+ return fd_count >= 0 ? base::FormatNumber(fd_count)
+ : stringifier_->n_a_string();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ case IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN: {
+ return stringifier_->GetKeepaliveCountText(
+@@ -617,7 +617,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ return BooleanCompare(is_proc1_bg, is_proc2_bg);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int proc1_fd_count =
+ observed_task_manager()->GetOpenFdCount(tasks_[row1]);
+@@ -625,7 +625,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ observed_task_manager()->GetOpenFdCount(tasks_[row2]);
+ return ValueCompare(proc1_fd_count, proc2_fd_count);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
+@@ -791,11 +791,11 @@ void TaskManagerTableModel::UpdateRefreshTypes(int col
+ type = REFRESH_TYPE_KEEPALIVE_COUNT;
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
+ type = REFRESH_TYPE_FD_COUNT;
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
diff --git a/devel/electron6/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc b/devel/electron6/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
new file mode 100644
index 000000000000..baa7c460cec5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/toolbar/app_menu_model.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/toolbar/app_menu_model.cc
+@@ -671,7 +671,7 @@ bool AppMenuModel::IsCommandIdVisible(int command_id)
+ return app_menu_icon_controller_->GetTypeAndSeverity().type ==
+ AppMenuIconController::IconType::UPGRADE_NOTIFICATION;
+ }
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ case IDC_BOOKMARK_PAGE:
+ return !chrome::ShouldRemoveBookmarkThisPageUI(browser_->profile());
+ case IDC_BOOKMARK_ALL_TABS:
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_accelerator__table.cc b/devel/electron6/files/patch-chrome_browser_ui_views_accelerator__table.cc
new file mode 100644
index 000000000000..76a1d927fa1b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_accelerator__table.cc
@@ -0,0 +1,46 @@
+--- chrome/browser/ui/views/accelerator_table.cc.orig 2019-09-10 11:13:43 UTC
++++ chrome/browser/ui/views/accelerator_table.cc
+@@ -50,7 +50,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR, IDC_SAVE_PAGE},
+ {ui::VKEY_9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT},
+@@ -80,7 +80,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_NUMPAD7, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_6},
+ {ui::VKEY_8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1},
+@@ -98,7 +98,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR},
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX || OS_BSD) && !OS_CHROMEOS
+ {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
+ IDC_SHOW_BOOKMARK_BAR},
+ {ui::VKEY_OEM_MINUS, ui::EF_PLATFORM_ACCELERATOR, IDC_ZOOM_MINUS},
+@@ -124,14 +124,14 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ IDC_SHOW_AVATAR_MENU},
+
+ // Platform-specific key maps.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK},
+ {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD},
+ {ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash.
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc b/devel/electron6/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
new file mode 100644
index 000000000000..04715a9d4f83
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
+@@ -32,7 +32,7 @@
+ #include "ui/wm/core/wm_state.h"
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -42,7 +42,7 @@
+ #include "chrome/grit/generated_resources.h"
+ #include "content/public/common/content_switches.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ ChromeBrowserMainExtraPartsViews::ChromeBrowserMainExtraPartsViews() {}
+
+@@ -87,7 +87,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ g_browser_process->system_network_context_manager()->GetContext());
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // On the Linux desktop, we want to prevent the user from logging in as root,
+ // so that we don't destroy the profile. Now that we have some minimal ui
+ // initialized, check to see if we're running as root and bail if we are.
+@@ -118,7 +118,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ base::RunLoop().RunUntilIdle();
+
+ exit(EXIT_FAILURE);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ }
+
+ void ChromeBrowserMainExtraPartsViews::PostBrowserStart() {
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_chrome__views__delegate.h b/devel/electron6/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
new file mode 100644
index 000000000000..f10c381e65f5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/chrome_views_delegate.h.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/views/chrome_views_delegate.h
+@@ -44,7 +44,7 @@ class ChromeViewsDelegate : public views::ViewsDelegat
+ HICON GetSmallWindowIcon() const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ base::OnceClosure callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ bool WindowManagerProvidesTitleBar(bool maximized) override;
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_first__run__dialog.cc b/devel/electron6/files/patch-chrome_browser_ui_views_first__run__dialog.cc
new file mode 100644
index 000000000000..524e710df24d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_first__run__dialog.cc
@@ -0,0 +1,24 @@
+--- chrome/browser/ui/views/first_run_dialog.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/first_run_dialog.cc
+@@ -37,8 +37,10 @@
+ namespace {
+
+ void InitCrashReporterIfEnabled(bool enabled) {
++#if !defined(OS_BSD)
+ if (enabled)
+ breakpad::InitCrashReporter(std::string());
++#endif
+ }
+
+ } // namespace
+@@ -111,8 +113,10 @@ views::View* FirstRunDialog::CreateExtraView() {
+ bool FirstRunDialog::Accept() {
+ GetWidget()->Hide();
+
++#if !defined(OS_BSD)
+ ChangeMetricsReportingStateWithReply(report_crashes_->GetChecked(),
+ base::Bind(&InitCrashReporterIfEnabled));
++#endif
+
+ if (make_default_->GetChecked())
+ shell_integration::SetAsDefaultBrowser();
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__frame.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
new file mode 100644
index 000000000000..de0479f602e3
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/browser_frame.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/frame/browser_frame.cc
+@@ -39,7 +39,7 @@
+ #include "components/user_manager/user_manager.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/views/frame/browser_command_handler_linux.h"
+ #endif
+
+@@ -50,7 +50,7 @@
+ namespace {
+
+ bool IsUsingGtkTheme(Profile* profile) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme();
+ #else
+ return false;
+@@ -111,7 +111,7 @@ void BrowserFrame::InitBrowserFrame() {
+ non_client_view()->set_context_menu_controller(this);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ browser_command_handler_.reset(new BrowserCommandHandlerLinux(browser_view_));
+ #endif
+ }
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
new file mode 100644
index 000000000000..b2553ed67db0
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+@@ -13,7 +13,7 @@
+ #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -32,7 +32,7 @@ OpaqueBrowserFrameView* CreateOpaqueBrowserFrameView(
+ BrowserView* browser_view) {
+ #if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
+ std::unique_ptr<views::NavButtonProvider> nav_button_provider;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (ThemeServiceFactory::GetForProfile(browser_view->browser()->profile())
+ ->UsingSystemTheme() &&
+ views::LinuxUI::instance()) {
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__view.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__view.cc
new file mode 100644
index 000000000000..6f4ce648bd81
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_browser__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_view.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/frame/browser_view.cc
+@@ -1557,7 +1557,7 @@ void BrowserView::UserChangedTheme(BrowserThemeChangeT
+ const bool should_use_native_frame = frame_->ShouldUseNativeFrame();
+
+ bool must_regenerate_frame;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // GTK and user theme changes can both change frame buttons, so the frame
+ // always needs to be regenerated on Linux.
+ must_regenerate_frame = true;
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
new file mode 100644
index 000000000000..d024ba59ec01
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+@@ -47,7 +47,7 @@
+ #include "ui/views/window/vector_icons/vector_icons.h"
+ #include "ui/views/window/window_shape.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/controls/menu/menu_runner.h"
+ #endif
+
+@@ -353,7 +353,7 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Butt
+ void OpaqueBrowserFrameView::OnMenuButtonClicked(views::Button* source,
+ const gfx::Point& point,
+ const ui::Event* event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ views::MenuRunner menu_runner(frame()->GetSystemMenuModel(),
+ views::MenuRunner::HAS_MNEMONICS);
+ menu_runner.RunMenuAt(
+@@ -479,7 +479,7 @@ bool OpaqueBrowserFrameView::EverHasVisibleBackgroundT
+
+ OpaqueBrowserFrameView::FrameButtonStyle
+ OpaqueBrowserFrameView::GetFrameButtonStyle() const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return FrameButtonStyle::kMdButton;
+ #else
+ return FrameButtonStyle::kImageButton;
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
new file mode 100644
index 000000000000..5878f6c74be5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc
+@@ -6,7 +6,7 @@
+
+ #include "build/build_config.h"
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_FREEBSD)
+
+ // static
+ std::unique_ptr<OpaqueBrowserFrameViewPlatformSpecific>
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
new file mode 100644
index 000000000000..1735ae7cd330
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_builder.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_builder.cc
+@@ -79,7 +79,7 @@ void SystemMenuModelBuilder::BuildMenu(ui::SimpleMenuM
+
+ void SystemMenuModelBuilder::BuildSystemMenuForBrowserWindow(
+ ui::SimpleMenuModel* model) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ model->AddItemWithStringId(IDC_MINIMIZE_WINDOW, IDS_MINIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_MAXIMIZE_WINDOW, IDS_MAXIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_RESTORE_WINDOW, IDS_RESTORE_WINDOW_MENU);
+@@ -91,7 +91,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForBrowser
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddCheckItemWithStringId(IDC_USE_SYSTEM_TITLE_BAR,
+ IDS_SHOW_WINDOW_DECORATIONS_MENU);
+@@ -127,7 +127,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForAppOrPo
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_CLOSE_WINDOW, IDS_CLOSE);
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc b/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
new file mode 100644
index 000000000000..791e697dadf9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_delegate.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_delegate.cc
+@@ -15,7 +15,7 @@
+ #include "components/sessions/core/tab_restore_service.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/pref_names.h"
+ #include "components/prefs/pref_service.h"
+ #endif
+@@ -30,7 +30,7 @@ SystemMenuModelDelegate::SystemMenuModelDelegate(
+ SystemMenuModelDelegate::~SystemMenuModelDelegate() {}
+
+ bool SystemMenuModelDelegate::IsCommandIdChecked(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (command_id == IDC_USE_SYSTEM_TITLE_BAR) {
+ PrefService* prefs = browser_->profile()->GetPrefs();
+ return !prefs->GetBoolean(prefs::kUseCustomChromeFrame);
+@@ -44,7 +44,7 @@ bool SystemMenuModelDelegate::IsCommandIdEnabled(int c
+ }
+
+ bool SystemMenuModelDelegate::IsCommandIdVisible(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool is_maximized = browser_->window()->IsMaximized();
+ switch (command_id) {
+ case IDC_MAXIMIZE_WINDOW:
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_hung__renderer__view.cc b/devel/electron6/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
new file mode 100644
index 000000000000..ddd7cdd9fa51
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/hung_renderer_view.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/hung_renderer_view.cc
+@@ -390,7 +390,7 @@ bool HungRendererDialogView::Cancel() {
+ content::RenderProcessHost* rph =
+ hung_pages_table_model_->GetRenderWidgetHost()->GetProcess();
+ if (rph) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A generic |CrashDumpHungChildProcess()| is not implemented for Linux.
+ // Instead we send an explicit IPC to crash on the renderer's IO thread.
+ rph->ForceCrash();
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
new file mode 100644
index 000000000000..5139da57a524
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/new_tab_button.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/tabs/new_tab_button.cc
+@@ -69,7 +69,7 @@ const gfx::Size NewTabButton::kButtonSize{28, 28};
+ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
+ : views::ImageButton(listener), tab_strip_(tab_strip) {
+ set_animate_on_state_change(true);
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_triggerable_event_flags(triggerable_event_flags() |
+ ui::EF_MIDDLE_MOUSE_BUTTON);
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab.cc b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab.cc
new file mode 100644
index 000000000000..3f2baf888361
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/tabs/tab.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/tabs/tab.cc
+@@ -525,7 +525,7 @@ void Tab::OnMouseCaptureLost() {
+ void Tab::OnMouseMoved(const ui::MouseEvent& event) {
+ tab_style_->SetHoverLocation(event.location());
+ controller_->OnMouseEventInTab(this, event);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ MaybeUpdateHoverStatus(event);
+ #endif
+ }
+@@ -535,7 +535,7 @@ void Tab::OnMouseEntered(const ui::MouseEvent& event)
+ }
+
+ void Tab::MaybeUpdateHoverStatus(const ui::MouseEvent& event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Move the hit test area for hovering up so that it is not overlapped by tab
+ // hover cards when they are shown.
+ // TODO(crbug/978134): Once Linux/CrOS widget transparency is solved, remove
diff --git a/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
new file mode 100644
index 000000000000..18a89332a8b5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/tabs/tab_drag_controller.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/views/tabs/tab_drag_controller.cc
+@@ -444,7 +444,7 @@ void TabDragController::Init(TabDragContext* source_co
+ // synchronous on desktop Linux, so use that.
+ // - Chrome OS
+ // Releasing capture on Ash cancels gestures so avoid it.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ can_release_capture_ = false;
+ #endif
+ start_point_in_screen_ = gfx::Point(source_tab_offset, mouse_offset.y());
+@@ -872,7 +872,7 @@ TabDragController::DragBrowserToNewTabStrip(TabDragCon
+ else
+ SetCapture(target_context);
+
+-#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if (!defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(OS_BSD)
+ // EndMoveLoop is going to snap the window back to its original location.
+ // Hide it so users don't see this. Hiding a window in Linux aura causes
+ // it to lose capture so skip it.
+@@ -2023,7 +2023,7 @@ TabDragController::Liveness TabDragController::GetLoca
+ exclude.insert(dragged_window);
+ }
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Exclude windows which are pending deletion via Browser::TabStripEmpty().
+ // These windows can be returned in the Linux Aura port because the browser
+ // window which was used for dragging is not hidden once all of its tabs are
diff --git a/devel/electron6/files/patch-chrome_browser_ui_webui_about__ui.cc b/devel/electron6/files/patch-chrome_browser_ui_webui_about__ui.cc
new file mode 100644
index 000000000000..c7a9dc5e48bc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_webui_about__ui.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/about_ui.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/webui/about_ui.cc
+@@ -552,7 +552,7 @@ std::string ChromeURLs() {
+ return html;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string AboutLinuxProxyConfig() {
+ std::string data;
+ AppendHeader(&data, 0,
+@@ -607,7 +607,7 @@ void AboutUIHTMLSource::StartDataRequest(
+ .GetRawDataResource(idr)
+ .as_string();
+ }
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc b/devel/electron6/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
new file mode 100644
index 000000000000..75c0f6272ca5
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
@@ -0,0 +1,55 @@
+--- chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -205,11 +205,11 @@
+ #include "chrome/browser/ui/webui/welcome/welcome_win10_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/sandbox_internals_ui.h"
+ #endif
+
+@@ -325,7 +325,7 @@ bool IsAboutUI(const GURL& url) {
+ #if !defined(OS_ANDROID)
+ || url.host_piece() == chrome::kChromeUITermsHost
+ #endif
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ || url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -627,7 +627,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ if (url.host_piece() == chrome::kChromeUINaClHost)
+ return &NewWebUI<NaClUI>;
+ #endif
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUITabModalConfirmDialogHost)
+ return &NewWebUI<ConstrainedWebDialogUI>;
+ #endif
+@@ -672,17 +672,17 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ return &NewWebUI<CastUI>;
+ }
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUISandboxHost) {
+ return &NewWebUI<SandboxInternalsUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIDiscardsHost)
+ return &NewWebUI<DiscardsUI>;
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIBrowserSwitchHost)
+ return &NewWebUI<BrowserSwitchUI>;
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
new file mode 100644
index 000000000000..99d4f241ed68
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.cc
+@@ -31,7 +31,7 @@ void AppearanceHandler::RegisterMessages() {
+ "useDefaultTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme,
+ base::Unretained(this)));
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ web_ui()->RegisterMessageCallback(
+ "useSystemTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme,
+@@ -59,7 +59,7 @@ void AppearanceHandler::HandleUseDefaultTheme(const ba
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
+ if (profile_->IsSupervised())
+ NOTREACHED();
diff --git a/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
new file mode 100644
index 000000000000..9907cecd4ff2
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.h.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.h
+@@ -36,7 +36,7 @@ class AppearanceHandler : public SettingsPageUIHandler
+ // Changes the UI theme of the browser to the default theme.
+ void HandleUseDefaultTheme(const base::ListValue* args);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Changes the UI theme of the browser to the system (GTK+) theme.
+ void HandleUseSystemTheme(const base::ListValue* args);
+ #endif
diff --git a/devel/electron6/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
new file mode 100644
index 000000000000..4be265ebfb00
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+@@ -585,7 +585,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
+ {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
+ {"themes", IDS_SETTINGS_THEMES},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
+ {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
+ {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
+@@ -605,7 +605,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"openWallpaperApp", IDS_OS_SETTINGS_OPEN_WALLPAPER_APP},
+ {"setWallpaper", IDS_OS_SETTINGS_SET_WALLPAPER},
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc b/devel/electron6/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
new file mode 100644
index 000000000000..670f103ae9bc
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc.orig 2019-09-10 11:13:44 UTC
++++ chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc
+@@ -50,7 +50,7 @@ namespace {
+ #if defined(OS_MACOSX)
+ const int kDesiredSizes[] = {16, 32, 128, 256, 512};
+ const size_t kNumDesiredSizes = base::size(kDesiredSizes);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux supports icons of any size. FreeDesktop Icon Theme Specification states
+ // that "Minimally you should install a 48x48 icon in the hicolor theme."
+ const int kDesiredSizes[] = {16, 32, 48, 128, 256, 512};
diff --git a/devel/electron6/files/patch-chrome_common_BUILD.gn b/devel/electron6/files/patch-chrome_common_BUILD.gn
new file mode 100644
index 000000000000..0da1bb32eaf4
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_BUILD.gn
@@ -0,0 +1,13 @@
+--- chrome/common/BUILD.gn.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/BUILD.gn
+@@ -298,6 +298,10 @@ static_library("common") {
+ public_deps += [ "//ppapi/shared_impl" ]
+ }
+
++ if (is_bsd) {
++ sources -= [ "component_flash_hint_file_linux.cc" ]
++ }
++
+ if (enable_extensions) {
+ sources += [
+ "cast_messages.cc",
diff --git a/devel/electron6/files/patch-chrome_common_chrome__features.cc b/devel/electron6/files/patch-chrome_common_chrome__features.cc
new file mode 100644
index 000000000000..6e912c525ff9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__features.cc
@@ -0,0 +1,27 @@
+--- chrome/common/chrome_features.cc.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_features.cc
+@@ -98,13 +98,13 @@ const base::Feature kAutoFetchOnNetErrorPage{"AutoFetc
+ base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables the Restart background mode optimization. When all Chrome UI is
+ // closed and it goes in the background, allows to restart the browser to
+ // discard memory.
+ const base::Feature kBackgroundModeAllowRestart{
+ "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Enables or disables whether permission prompts are automatically blocked
+ // after the user has explicitly dismissed them too many times.
+@@ -150,7 +150,7 @@ const base::Feature kThirdPartyModulesBlocking{
+ "ThirdPartyModulesBlocking", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Enables the dual certificate verification trial feature.
+ // https://crbug.com/649026
+ const base::Feature kCertDualVerificationTrialFeature{
diff --git a/devel/electron6/files/patch-chrome_common_chrome__features.h b/devel/electron6/files/patch-chrome_common_chrome__features.h
new file mode 100644
index 000000000000..749954954f4c
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__features.h
@@ -0,0 +1,24 @@
+--- chrome/common/chrome_features.h.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_features.h
+@@ -65,10 +65,10 @@ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kAutoFetchOnNetErrorPage;
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBackgroundModeAllowRestart;
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBlockPromptsIfDismissedOften;
+@@ -84,7 +84,7 @@ extern const base::Feature kBrowserHangFixesExperiment
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBundledConnectionHelpFeature;
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kCertDualVerificationTrialFeature;
+ #endif
diff --git a/devel/electron6/files/patch-chrome_common_chrome__paths.cc b/devel/electron6/files/patch-chrome_common_chrome__paths.cc
new file mode 100644
index 000000000000..1061b9d4b9be
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__paths.cc
@@ -0,0 +1,113 @@
+--- chrome/common/chrome_paths.cc.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_paths.cc
+@@ -52,21 +52,21 @@ const base::FilePath::CharType kPepperFlashSystemBaseD
+ FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer");
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The path to the external extension <id>.json files.
+ // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
+ const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
+ #if defined(GOOGLE_CHROME_BUILD)
+ FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
+ #else
+- FILE_PATH_LITERAL("/usr/share/chromium/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/chromium/extensions");
+ #endif // defined(GOOGLE_CHROME_BUILD)
+
+ // The path to the hint file that tells the pepper plugin loader
+ // where it can find the latest component updated flash.
+ const base::FilePath::CharType kComponentUpdatedFlashHint[] =
+ FILE_PATH_LITERAL("latest-component-updated-flash");
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ const base::FilePath::CharType kChromeOSComponentFlash[] = FILE_PATH_LITERAL(
+@@ -197,7 +197,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ break;
+ case chrome::DIR_DEFAULT_DOWNLOADS_SAFE:
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (!GetUserDownloadsDirectorySafe(&cur))
+ return false;
+ break;
+@@ -459,17 +459,19 @@ bool PathProvider(int key, base::FilePath* result) {
+ if (!base::PathExists(cur)) // We don't want to create this
+ return false;
+ break;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
++#if defined(OS_POSIX) && !defined(OS_MACOSX)
+ case chrome::DIR_POLICY_FILES: {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/opt/chrome/policies"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL("/usr/local/etc/chrome/policies"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/chromium/policies"));
+ #endif
+ break;
+ }
+ #endif
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
++#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || defined(OS_BSD) || \
+ defined(OS_MACOSX)
+ case chrome::DIR_USER_EXTERNAL_EXTENSIONS: {
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+@@ -478,7 +480,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ }
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
+ break;
+@@ -513,7 +515,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ #endif
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_NATIVE_MESSAGING:
+ #if defined(OS_MACOSX)
+ #if defined(GOOGLE_CHROME_BUILD)
+@@ -527,6 +529,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ #if defined(GOOGLE_CHROME_BUILD)
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/opt/chrome/native-messaging-hosts"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/native-messaging-hosts"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/chromium/native-messaging-hosts"));
+@@ -539,7 +544,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ cur = cur.Append(FILE_PATH_LITERAL("NativeMessagingHosts"));
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if !defined(OS_ANDROID)
+ case chrome::DIR_GLOBAL_GCM_STORE:
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+@@ -547,7 +552,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ cur = cur.Append(kGCMStoreDirname);
+ break;
+ #endif // !defined(OS_ANDROID)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::FILE_COMPONENT_FLASH_HINT:
+ if (!base::PathService::Get(
+ chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &cur)) {
+@@ -555,7 +560,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ cur = cur.Append(kComponentUpdatedFlashHint);
+ break;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ case chrome::FILE_CHROME_OS_COMPONENT_FLASH:
+ cur = base::FilePath(kChromeOSComponentFlash);
diff --git a/devel/electron6/files/patch-chrome_common_chrome__paths.h b/devel/electron6/files/patch-chrome_common_chrome__paths.h
new file mode 100644
index 000000000000..0b16bf9d1ae7
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__paths.h
@@ -0,0 +1,42 @@
+--- chrome/common/chrome_paths.h.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_paths.h
+@@ -51,7 +51,7 @@ enum {
+ // to set policies for chrome. This directory
+ // contains subdirectories.
+ #endif
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) || \
++#if defined(OS_CHROMEOS) || ((defined(OS_LINUX) || defined(OS_BSD)) && defined(CHROMIUM_BUILD)) || \
+ defined(OS_MACOSX)
+ DIR_USER_EXTERNAL_EXTENSIONS, // Directory for per-user external extensions
+ // on Chrome Mac and Chromium Linux.
+@@ -60,7 +60,7 @@ enum {
+ // create it.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_STANDALONE_EXTERNAL_EXTENSIONS, // Directory for 'per-extension'
+ // definition manifest files that
+ // describe extensions which are to be
+@@ -107,7 +107,7 @@ enum {
+ DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, // Directory where sanitized
+ // supervised user whitelists are
+ // installed.
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_MACOSX)
+ DIR_NATIVE_MESSAGING, // System directory where native messaging host
+ // manifest files are stored.
+ DIR_USER_NATIVE_MESSAGING, // Directory with Native Messaging Hosts
+@@ -122,10 +122,10 @@ enum {
+ DIR_GEN_TEST_DATA, // Directory where generated test data resides.
+ DIR_TEST_DATA, // Directory where unit test data resides.
+ DIR_TEST_TOOLS, // Directory where unit test tools reside.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ FILE_COMPONENT_FLASH_HINT, // A file in a known location that points to
+ // the component updated flash plugin.
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ FILE_CHROME_OS_COMPONENT_FLASH, // The location of component updated Flash on
+ // Chrome OS.
diff --git a/devel/electron6/files/patch-chrome_common_chrome__paths__internal.h b/devel/electron6/files/patch-chrome_common_chrome__paths__internal.h
new file mode 100644
index 000000000000..02afef4a6c29
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__paths__internal.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_paths_internal.h.orig 2019-09-10 10:42:31 UTC
++++ chrome/common/chrome_paths_internal.h
+@@ -45,7 +45,7 @@ void GetUserCacheDirectory(const base::FilePath& profi
+ // Get the path to the user's documents directory.
+ bool GetUserDocumentsDirectory(base::FilePath* result);
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Gets the path to a safe default download directory for a user.
+ bool GetUserDownloadsDirectorySafe(base::FilePath* result);
+ #endif
diff --git a/devel/electron6/files/patch-chrome_common_chrome__switches.cc b/devel/electron6/files/patch-chrome_common_chrome__switches.cc
new file mode 100644
index 000000000000..a60ab2d47923
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__switches.cc
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.cc.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_switches.cc
+@@ -853,7 +853,7 @@ const char kAllowNaClFileHandleAPI[] = "allow-n
+ const char kAllowNaClSocketAPI[] = "allow-nacl-socket-api";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const char kEnableNewAppMenuIcon[] = "enable-new-app-menu-icon";
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_common_chrome__switches.h b/devel/electron6/files/patch-chrome_common_chrome__switches.h
new file mode 100644
index 000000000000..5ff4d96cad3d
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_chrome__switches.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.h.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/chrome_switches.h
+@@ -265,7 +265,7 @@ extern const char kAllowNaClFileHandleAPI[];
+ extern const char kAllowNaClSocketAPI[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const char kEnableNewAppMenuIcon[];
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_common_extensions_api_api__sources.gni b/devel/electron6/files/patch-chrome_common_extensions_api_api__sources.gni
new file mode 100644
index 000000000000..3d4bd49179b9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_extensions_api_api__sources.gni
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/api/api_sources.gni.orig 2019-09-10 11:13:45 UTC
++++ chrome/common/extensions/api/api_sources.gni
+@@ -106,7 +106,7 @@ if (is_chromeos) {
+ "wallpaper.json",
+ "wallpaper_private.json",
+ ]
+-} else if (is_linux || is_win) {
++} else if (is_linux || is_bsd || is_win) {
+ schema_sources_ += [ "input_ime.json" ]
+ }
+
diff --git a/devel/electron6/files/patch-chrome_common_extensions_command.cc b/devel/electron6/files/patch-chrome_common_extensions_command.cc
new file mode 100644
index 000000000000..5ded7faa8cff
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_extensions_command.cc
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/command.cc.orig 2019-09-10 10:42:31 UTC
++++ chrome/common/extensions/command.cc
+@@ -300,7 +300,7 @@ std::string Command::CommandPlatform() {
+ return values::kKeybindingPlatformMac;
+ #elif defined(OS_CHROMEOS)
+ return values::kKeybindingPlatformChromeOs;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return values::kKeybindingPlatformLinux;
+ #else
+ return "";
diff --git a/devel/electron6/files/patch-chrome_common_features.gni b/devel/electron6/files/patch-chrome_common_features.gni
new file mode 100644
index 000000000000..86098f230f74
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_features.gni
@@ -0,0 +1,14 @@
+--- chrome/common/features.gni.orig 2019-09-10 11:13:46 UTC
++++ chrome/common/features.gni
+@@ -41,9 +41,9 @@ declare_args() {
+ (is_desktop_linux && use_dbus) || is_chromeos
+
+ enable_one_click_signin =
+- is_win || is_mac || (is_linux && !is_chromeos && !is_chromecast)
++ is_win || is_mac || is_bsd || (is_linux && !is_chromeos && !is_chromecast)
+
+- enable_service_discovery = (enable_mdns && !is_android) || is_mac
++ enable_service_discovery = (enable_mdns && !is_android) || is_mac || is_bsd
+
+ # Enables use of the session service, which is enabled by default.
+ # Android stores them separately on the Java side.
diff --git a/devel/electron6/files/patch-chrome_common_pref__names.cc b/devel/electron6/files/patch-chrome_common_pref__names.cc
new file mode 100644
index 000000000000..107fbe7f3b5b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_pref__names.cc
@@ -0,0 +1,44 @@
+--- chrome/common/pref_names.cc.orig 2019-09-10 11:13:46 UTC
++++ chrome/common/pref_names.cc
+@@ -982,7 +982,7 @@ const char kForceYouTubeRestrict[] = "settings.force_y
+ // only using an account that belongs to one of the domains from this pref.
+ const char kAllowedDomainsForApps[] = "settings.allowed_domains_for_apps";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Linux specific preference on whether we should match the system theme.
+ const char kUsesSystemTheme[] = "extensions.theme.use_system";
+ #endif
+@@ -1076,7 +1076,7 @@ const char kShowUpdatePromotionInfoBar[] =
+ "browser.show_update_promotion_info_bar";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Boolean that is false if we should show window manager decorations. If
+ // true, we draw a custom chrome frame (thicker title bar and blue border).
+ const char kUseCustomChromeFrame[] = "browser.custom_chrome_frame";
+@@ -1468,7 +1468,7 @@ const char kDownloadDefaultDirectory[] = "download.def
+ // upgrade a unsafe location to a safe location.
+ const char kDownloadDirUpgraded[] = "download.directory_upgrade";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const char kOpenPdfDownloadInSystemReader[] =
+ "download.open_pdf_in_system_reader";
+ #endif
+@@ -1730,12 +1730,12 @@ const char kAuthAndroidNegotiateAccountType[] =
+ // domain sub-content requests.
+ const char kAllowCrossOriginAuthPrompt[] = "auth.allow_cross_origin_prompt";
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Boolean that specifies whether OK-AS-DELEGATE flag from KDC is respected
+ // along with kAuthNegotiateDelegateWhitelist.
+ const char kAuthNegotiateDelegateByKdcPolicy[] =
+ "auth.negotiate_delegate_by_kdc_policy";
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // Boolean that specifies whether NTLMv2 is enabled.
diff --git a/devel/electron6/files/patch-chrome_common_pref__names.h b/devel/electron6/files/patch-chrome_common_pref__names.h
new file mode 100644
index 000000000000..920035029f8b
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_pref__names.h
@@ -0,0 +1,41 @@
+--- chrome/common/pref_names.h.orig 2019-09-10 11:13:46 UTC
++++ chrome/common/pref_names.h
+@@ -309,7 +309,7 @@ extern const char kHistoryMenuPromoShown[];
+ extern const char kForceGoogleSafeSearch[];
+ extern const char kForceYouTubeRestrict[];
+ extern const char kAllowedDomainsForApps[];
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUsesSystemTheme[];
+ #endif
+ extern const char kCurrentThemePackFilename[];
+@@ -339,7 +339,7 @@ extern const char kDefaultBrowserSettingEnabled[];
+ #if defined(OS_MACOSX)
+ extern const char kShowUpdatePromotionInfoBar[];
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUseCustomChromeFrame[];
+ #endif
+ #if BUILDFLAG(ENABLE_PLUGINS)
+@@ -496,7 +496,7 @@ extern const char kAppWindowPlacement[];
+ extern const char kDownloadDefaultDirectory[];
+ extern const char kDownloadExtensionsToOpen[];
+ extern const char kDownloadDirUpgraded[];
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const char kOpenPdfDownloadInSystemReader[];
+ #endif
+ #if defined(OS_ANDROID)
+@@ -696,9 +696,9 @@ extern const char kGSSAPILibraryName[];
+ extern const char kAuthAndroidNegotiateAccountType[];
+ extern const char kAllowCrossOriginAuthPrompt[];
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ extern const char kAuthNegotiateDelegateByKdcPolicy[];
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ extern const char kNtlmV2Enabled[];
diff --git a/devel/electron6/files/patch-chrome_common_webui__url__constants.cc b/devel/electron6/files/patch-chrome_common_webui__url__constants.cc
new file mode 100644
index 000000000000..63324304eb65
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_webui__url__constants.cc
@@ -0,0 +1,48 @@
+--- chrome/common/webui_url_constants.cc.orig 2019-09-10 11:13:46 UTC
++++ chrome/common/webui_url_constants.cc
+@@ -299,7 +299,7 @@ const char kChromeUIMetroFlowURL[] = "chrome://make-me
+ const char kChromeUICastHost[] = "cast";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kChromeUIDiscardsHost[] = "discards";
+ const char kChromeUIDiscardsURL[] = "chrome://discards/";
+ const char kChromeUIHatsHost[] = "hats";
+@@ -310,17 +310,17 @@ const char kChromeUIHatsURL[] = "chrome://hats/";
+ const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const char kChromeUISandboxHost[] = "sandbox";
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ const char kChromeUIBrowserSwitchHost[] = "browser-switch";
+ const char kChromeUIBrowserSwitchURL[] = "chrome://browser-switch/";
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+ #endif
+
+@@ -525,13 +525,13 @@ const char* const kChromeHostURLs[] = {
+ kChromeUIInternetDetailDialogHost,
+ kChromeUIAssistantOptInHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ kChromeUIDiscardsHost,
+ #endif
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ kChromeUILinuxProxyConfigHost,
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ kChromeUISandboxHost,
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron6/files/patch-chrome_common_webui__url__constants.h b/devel/electron6/files/patch-chrome_common_webui__url__constants.h
new file mode 100644
index 000000000000..bce6dced691e
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_common_webui__url__constants.h
@@ -0,0 +1,32 @@
+--- chrome/common/webui_url_constants.h.orig 2019-09-10 11:13:46 UTC
++++ chrome/common/webui_url_constants.h
+@@ -262,7 +262,7 @@ extern const char kChromeUIMetroFlowURL[];
+ extern const char kChromeUICastHost[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kChromeUIDiscardsHost[];
+ extern const char kChromeUIDiscardsURL[];
+ extern const char kChromeUIHatsHost[];
+@@ -274,17 +274,17 @@ extern const char kChromeUIHatsURL[];
+ extern const char kChromeUILinuxProxyConfigHost[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ extern const char kChromeUISandboxHost[];
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kChromeUIBrowserSwitchHost[];
+ extern const char kChromeUIBrowserSwitchURL[];
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ extern const char kChromeUITabModalConfirmDialogHost[];
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_renderer_chrome__content__renderer__client.cc b/devel/electron6/files/patch-chrome_renderer_chrome__content__renderer__client.cc
new file mode 100644
index 000000000000..8256c6e80159
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_renderer_chrome__content__renderer__client.cc
@@ -0,0 +1,11 @@
+--- chrome/renderer/chrome_content_renderer_client.cc.orig 2019-09-10 11:13:46 UTC
++++ chrome/renderer/chrome_content_renderer_client.cc
+@@ -1011,7 +1011,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
+ }
+
+ case chrome::mojom::PluginStatus::kRestartRequired: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ placeholder = create_blocked_plugin(
+ IDR_BLOCKED_PLUGIN_HTML,
+ l10n_util::GetStringFUTF16(IDS_PLUGIN_RESTART_REQUIRED,
diff --git a/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc b/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
new file mode 100644
index 000000000000..1b33e38d44f9
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
@@ -0,0 +1,29 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.cc.orig 2019-09-10 10:42:32 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.cc
+@@ -15,7 +15,7 @@
+ #include "ppapi/proxy/ppapi_messages.h"
+ #include "ppapi/proxy/serialized_structs.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "content/public/common/common_sandbox_support_linux.h"
+ #elif defined(OS_WIN)
+@@ -29,7 +29,7 @@ PepperFlashFontFileHost::PepperFlashFontFileHost(
+ const ppapi::proxy::SerializedFontDescription& description,
+ PP_PrivateFontCharset charset)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The global SkFontConfigInterface is configured and initialized with a
+ // SkFontconfigInterface compatible font_service::FontLoader in
+ // RendererBlinkPlatformImpl (called from RenderThreadImpl::Init) at startup
+@@ -74,7 +74,7 @@ bool PepperFlashFontFileHost::GetFontData(uint32_t tab
+ void* buffer,
+ size_t* length) {
+ bool result = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (font_file_.IsValid()) {
+ result = content::GetFontTable(font_file_.GetPlatformFile(), table,
+ 0 /* offset */,
diff --git a/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h b/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
new file mode 100644
index 000000000000..5d6a842f6e79
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
@@ -0,0 +1,20 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.h.orig 2019-09-10 10:42:32 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.h
+@@ -14,7 +14,7 @@
+ #include "ppapi/c/private/pp_private_font_charset.h"
+ #include "ppapi/host/resource_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file.h"
+ #elif defined(OS_WIN)
+ #include "third_party/skia/include/core/SkRefCnt.h"
+@@ -50,7 +50,7 @@ class PepperFlashFontFileHost : public ppapi::host::Re
+ uint32_t table);
+ bool GetFontData(uint32_t table, void* buffer, size_t* length);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::File font_file_;
+ #elif defined(OS_WIN)
+ sk_sp<SkTypeface> typeface_;
diff --git a/devel/electron6/files/patch-chrome_service_cloud__print_print__system.cc b/devel/electron6/files/patch-chrome_service_cloud__print_print__system.cc
new file mode 100644
index 000000000000..c733bf90aea1
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_service_cloud__print_print__system.cc
@@ -0,0 +1,11 @@
+--- chrome/service/cloud_print/print_system.cc.orig 2019-09-10 10:42:32 UTC
++++ chrome/service/cloud_print/print_system.cc
+@@ -36,7 +36,7 @@ std::string PrintSystem::GenerateProxyId() {
+ return base::GenerateGUID();
+ }
+
+-#if defined(OS_LINUX) && !defined(USE_CUPS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(USE_CUPS)
+ scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
+ const base::DictionaryValue*) {
+ return nullptr;
diff --git a/devel/electron6/files/patch-chrome_test_BUILD.gn b/devel/electron6/files/patch-chrome_test_BUILD.gn
new file mode 100644
index 000000000000..4366d0dae98a
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_test_BUILD.gn
@@ -0,0 +1,11 @@
+--- chrome/test/BUILD.gn.orig 2019-09-10 11:13:47 UTC
++++ chrome/test/BUILD.gn
+@@ -5475,7 +5475,7 @@ test("chrome_app_unittests") {
+ "//components/crash/core/common",
+ "//components/flags_ui:switches",
+ ]
+- if (!is_fuchsia) {
++ if (!is_fuchsia && !is_bsd) {
+ # TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
+ deps += [ "//third_party/breakpad:client" ]
+ }
diff --git a/devel/electron6/files/patch-chrome_test_base_in__process__browser__test.cc b/devel/electron6/files/patch-chrome_test_base_in__process__browser__test.cc
new file mode 100644
index 000000000000..eb143501adbe
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_test_base_in__process__browser__test.cc
@@ -0,0 +1,22 @@
+--- chrome/test/base/in_process_browser_test.cc.orig 2019-09-10 11:13:47 UTC
++++ chrome/test/base/in_process_browser_test.cc
+@@ -75,6 +75,10 @@
+ #include "chrome/test/base/scoped_bundle_swizzler_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <signal.h>
++#endif
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -101,7 +105,7 @@
+ #include "ui/events/test/event_generator.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/test/test_desktop_screen_x11.h"
+ #endif
+
diff --git a/devel/electron6/files/patch-chrome_test_base_testing__browser__process.h b/devel/electron6/files/patch-chrome_test_base_testing__browser__process.h
new file mode 100644
index 000000000000..69df67671045
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_test_base_testing__browser__process.h
@@ -0,0 +1,13 @@
+--- chrome/test/base/testing_browser_process.h.orig 2019-09-10 11:13:47 UTC
++++ chrome/test/base/testing_browser_process.h
+@@ -120,8 +120,8 @@ class TestingBrowserProcess : public BrowserProcess {
+ DownloadRequestLimiter* download_request_limiter() override;
+ StartupData* startup_data() override;
+
+-#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+- void StartAutoupdateTimer() override {}
++#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
++ void StartAutoupdateTimer() /*override*/ {}
+ #endif
+
+ net_log::ChromeNetLog* net_log() override;
diff --git a/devel/electron6/files/patch-chrome_test_chromedriver_chrome__launcher.cc b/devel/electron6/files/patch-chrome_test_chromedriver_chrome__launcher.cc
new file mode 100644
index 000000000000..ff94b0563919
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_test_chromedriver_chrome__launcher.cc
@@ -0,0 +1,13 @@
+--- chrome/test/chromedriver/chrome_launcher.cc.orig 2019-09-10 11:13:47 UTC
++++ chrome/test/chromedriver/chrome_launcher.cc
+@@ -66,6 +66,10 @@
+ #include "chrome/test/chromedriver/keycode_text_conversion.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <sys/wait.h>
++#endif
++
+ namespace {
+
+ // TODO(eseckler): Remove --ignore-certificate-errors for newer Chrome versions
diff --git a/devel/electron6/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc b/devel/electron6/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
new file mode 100644
index 000000000000..d61ebc6a4334
--- /dev/null
+++ b/devel/electron6/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
@@ -0,0 +1,20 @@
+--- chrome/test/chromedriver/chrome/chrome_finder.cc.orig 2019-09-10 10:42:32 UTC
++++ chrome/test/chromedriver/chrome/chrome_finder.cc
+@@ -48,7 +48,7 @@ void GetApplicationDirs(std::vector<base::FilePath>* l
+ installation_locations[i].Append(L"Chromium\\Application"));
+ }
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ void GetApplicationDirs(std::vector<base::FilePath>* locations) {
+ // TODO: Respect users' PATH variables.
+ // Until then, we use an approximation of the most common defaults.
+@@ -135,7 +135,7 @@ bool FindChrome(base::FilePath* browser_exe) {
+ #elif defined(OS_MACOSX)
+ base::FilePath("Google Chrome.app/Contents/MacOS/Google Chrome"),
+ base::FilePath("Chromium.app/Contents/MacOS/Chromium")
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath("google-chrome"),
+ base::FilePath("chrome"),
+ base::FilePath("chromium"),
diff --git a/devel/electron6/files/patch-chromecast_browser_cast__browser__main__parts.cc b/devel/electron6/files/patch-chromecast_browser_cast__browser__main__parts.cc
new file mode 100644
index 000000000000..b8fc92112102
--- /dev/null
+++ b/devel/electron6/files/patch-chromecast_browser_cast__browser__main__parts.cc
@@ -0,0 +1,38 @@
+--- chromecast/browser/cast_browser_main_parts.cc.orig 2019-09-10 11:13:48 UTC
++++ chromecast/browser/cast_browser_main_parts.cc
+@@ -68,7 +68,7 @@
+ #include "ui/base/ui_base_switches.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include <signal.h>
+ #include <sys/prctl.h>
+@@ -280,7 +280,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {cc::switches::kDisableThreadedAnimation, ""},
+ #endif // defined(OS_ANDROID)
+ #endif // BUILDFLAG(IS_CAST_AUDIO_ONLY)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(ARCH_CPU_X86_FAMILY)
+ // This is needed for now to enable the x11 Ozone platform to work with
+ // current Linux/NVidia OpenGL drivers.
+@@ -290,7 +290,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {switches::kEnableHardwareOverlays, "cast"},
+ #endif
+ #endif
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // It's better to start GPU process on demand. For example, for TV platforms
+ // cast starts in background and can't render until TV switches to cast
+ // input.
+@@ -435,7 +435,7 @@ void CastBrowserMainParts::ToolkitInitialized() {
+ views_delegate_ = std::make_unique<CastViewsDelegate>();
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Without this call, the FontConfig library gets implicitly initialized
+ // on the first call to FontConfig. Since it's not safe to initialize it
+ // concurrently from multiple threads, we explicitly initialize it here
diff --git a/devel/electron6/files/patch-chromecast_browser_cast__content__browser__client.cc b/devel/electron6/files/patch-chromecast_browser_cast__content__browser__client.cc
new file mode 100644
index 000000000000..1ce039cf8e7c
--- /dev/null
+++ b/devel/electron6/files/patch-chromecast_browser_cast__content__browser__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/browser/cast_content_browser_client.cc.orig 2019-09-10 11:13:48 UTC
++++ chromecast/browser/cast_content_browser_client.cc
+@@ -576,7 +576,7 @@ void CastContentBrowserClient::AppendExtraCommandLineS
+ switches::kAudioOutputChannels));
+ }
+ } else if (process_type == switches::kGpuProcess) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Necessary for accelerated 2d canvas. By default on Linux, Chromium assumes
+ // GLES2 contexts can be lost to a power-save mode, which breaks GPU canvas
+ // apps.
diff --git a/devel/electron6/files/patch-chromecast_browser_metrics_BUILD.gn b/devel/electron6/files/patch-chromecast_browser_metrics_BUILD.gn
new file mode 100644
index 000000000000..962a895f5829
--- /dev/null
+++ b/devel/electron6/files/patch-chromecast_browser_metrics_BUILD.gn
@@ -0,0 +1,11 @@
+--- chromecast/browser/metrics/BUILD.gn.orig 2019-09-10 10:42:34 UTC
++++ chromecast/browser/metrics/BUILD.gn
+@@ -32,7 +32,7 @@ cast_source_set("metrics") {
+ "//third_party/metrics_proto",
+ ]
+
+- if (is_linux) {
++ if (is_linux || is_bsd) {
+ sources += [
+ "external_metrics.cc",
+ "external_metrics.h",
diff --git a/devel/electron6/files/patch-chromecast_browser_tts_tts__controller__impl.cc b/devel/electron6/files/patch-chromecast_browser_tts_tts__controller__impl.cc
new file mode 100644
index 000000000000..d80dfe7cca5b
--- /dev/null
+++ b/devel/electron6/files/patch-chromecast_browser_tts_tts__controller__impl.cc
@@ -0,0 +1,14 @@
+--- chromecast/browser/tts/tts_controller_impl.cc.orig 2019-09-10 11:13:48 UTC
++++ chromecast/browser/tts/tts_controller_impl.cc
+@@ -390,7 +390,11 @@ int TtsControllerImpl::QueueSize() {
+ }
+
+ TtsPlatformImpl* TtsControllerImpl::GetPlatformImpl() {
++#if defined(OS_BSD)
++ return NULL;
++#else
+ return platform_impl_.get();
++#endif // defined(OS_BSD)
+ }
+
+ std::string TtsControllerImpl::GetApplicationLocale() const {
diff --git a/devel/electron6/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc b/devel/electron6/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc
new file mode 100644
index 000000000000..9da2af310b78
--- /dev/null
+++ b/devel/electron6/files/patch-chromecast_media_cma_backend_media__pipeline__backend__for__mixer.cc
@@ -0,0 +1,23 @@
+--- chromecast/media/cma/backend/media_pipeline_backend_for_mixer.cc.orig 2019-09-10 11:13:49 UTC
++++ chromecast/media/cma/backend/media_pipeline_backend_for_mixer.cc
+@@ -16,9 +16,9 @@
+ #include "chromecast/media/cma/backend/av_sync.h"
+ #include "chromecast/media/cma/backend/video_decoder_for_mixer.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chromecast/media/cma/backend/audio_buildflags.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #include <zircon/syscalls.h>
+@@ -239,7 +239,7 @@ MediaPipelineBackendForMixer::GetTaskRunner() const {
+ return static_cast<TaskRunnerImpl*>(params_.task_runner)->runner();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int64_t MediaPipelineBackendForMixer::MonotonicClockNow() const {
+ timespec now = {0, 0};
+ #if BUILDFLAG(MEDIA_CLOCK_MONOTONIC_RAW)
diff --git a/devel/electron6/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc b/devel/electron6/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
new file mode 100644
index 000000000000..04054a1be166
--- /dev/null
+++ b/devel/electron6/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
@@ -0,0 +1,14 @@
+--- components/autofill/content/renderer/password_form_conversion_utils.cc.orig 2019-09-10 11:13:49 UTC
++++ components/autofill/content/renderer/password_form_conversion_utils.cc
+@@ -36,7 +36,11 @@
+ #include "third_party/blink/public/web/web_form_control_element.h"
+ #include "third_party/blink/public/web/web_input_element.h"
+ #include "third_party/blink/public/web/web_local_frame.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using blink::WebFormControlElement;
diff --git a/devel/electron6/files/patch-components_autofill_core_browser_autofill__experiments.cc b/devel/electron6/files/patch-components_autofill_core_browser_autofill__experiments.cc
new file mode 100644
index 000000000000..b0064cb6b072
--- /dev/null
+++ b/devel/electron6/files/patch-components_autofill_core_browser_autofill__experiments.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/browser/autofill_experiments.cc.orig 2019-09-10 11:13:49 UTC
++++ components/autofill/core/browser/autofill_experiments.cc
+@@ -215,7 +215,7 @@ bool IsAutofillNoLocalSaveOnUploadSuccessExperimentEna
+ }
+
+ bool OfferStoreUnmaskedCards(bool is_off_the_record) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The checkbox can be forced on with a flag, but by default we don't store
+ // on Linux due to lack of system keychain integration. See crbug.com/162735
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/devel/electron6/files/patch-components_autofill_core_browser_personal__data__manager.cc b/devel/electron6/files/patch-components_autofill_core_browser_personal__data__manager.cc
new file mode 100644
index 000000000000..2abb59c985d3
--- /dev/null
+++ b/devel/electron6/files/patch-components_autofill_core_browser_personal__data__manager.cc
@@ -0,0 +1,15 @@
+--- components/autofill/core/browser/personal_data_manager.cc.orig 2019-09-10 11:13:50 UTC
++++ components/autofill/core/browser/personal_data_manager.cc
+@@ -1940,10 +1940,10 @@ bool PersonalDataManager::IsServerCard(const CreditCar
+
+ bool PersonalDataManager::ShouldShowCardsFromAccountOption() const {
+ // The feature is only for Linux, Windows and Mac.
+-#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) || \
++#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) || \
+ defined(OS_CHROMEOS)
+ return false;
+-#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) ||
++#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) ||
+ // defined(OS_CHROMEOS)
+
+ // This option should only be shown for users that have not enabled the Sync
diff --git a/devel/electron6/files/patch-components_autofill_core_common_autofill__util.cc b/devel/electron6/files/patch-components_autofill_core_common_autofill__util.cc
new file mode 100644
index 000000000000..2ff0fc28d15d
--- /dev/null
+++ b/devel/electron6/files/patch-components_autofill_core_common_autofill__util.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_util.cc.orig 2019-09-10 11:13:50 UTC
++++ components/autofill/core/common/autofill_util.cc
+@@ -203,7 +203,7 @@ bool SanitizedFieldIsEmpty(const base::string16& value
+ }
+
+ bool ShouldAutoselectFirstSuggestionOnArrowDown() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron6/files/patch-components_content__settings_core_browser_website__settings__registry.cc b/devel/electron6/files/patch-components_content__settings_core_browser_website__settings__registry.cc
new file mode 100644
index 000000000000..5e1f8b9fdf49
--- /dev/null
+++ b/devel/electron6/files/patch-components_content__settings_core_browser_website__settings__registry.cc
@@ -0,0 +1,11 @@
+--- components/content_settings/core/browser/website_settings_registry.cc.orig 2019-09-10 10:42:34 UTC
++++ components/content_settings/core/browser/website_settings_registry.cc
+@@ -66,7 +66,7 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Re
+ #if defined(OS_WIN)
+ if (!(platform & PLATFORM_WINDOWS))
+ return nullptr;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!(platform & PLATFORM_LINUX))
+ return nullptr;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron6/files/patch-components_cookie__config_cookie__store__util.cc b/devel/electron6/files/patch-components_cookie__config_cookie__store__util.cc
new file mode 100644
index 000000000000..5aad97e04e3e
--- /dev/null
+++ b/devel/electron6/files/patch-components_cookie__config_cookie__store__util.cc
@@ -0,0 +1,24 @@
+--- components/cookie_config/cookie_store_util.cc.orig 2019-09-10 10:42:34 UTC
++++ components/cookie_config/cookie_store_util.cc
+@@ -11,7 +11,7 @@
+
+ namespace cookie_config {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ namespace {
+
+ // Use the operating system's mechanisms to encrypt cookies before writing
+@@ -63,10 +63,10 @@ base::LazyInstance<CookieOSCryptoDelegate>::Destructor
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return g_cookie_crypto_delegate.Pointer();
+ }
+-#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return NULL;
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace cookie_config
diff --git a/devel/electron6/files/patch-components_crash_content_app_BUILD.gn b/devel/electron6/files/patch-components_crash_content_app_BUILD.gn
new file mode 100644
index 000000000000..3b320f5f240c
--- /dev/null
+++ b/devel/electron6/files/patch-components_crash_content_app_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/crash/content/app/BUILD.gn.orig 2019-09-10 11:13:50 UTC
++++ components/crash/content/app/BUILD.gn
+@@ -37,7 +37,7 @@ static_library("app") {
+ sources += [ "crashpad.cc" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "breakpad_linux.cc",
+ "breakpad_linux.h",
+@@ -78,7 +78,7 @@ static_library("app") {
+ "//sandbox",
+ ]
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+ }
diff --git a/devel/electron6/files/patch-components_crash_content_app_crashpad.cc b/devel/electron6/files/patch-components_crash_content_app_crashpad.cc
new file mode 100644
index 000000000000..ba0b46182002
--- /dev/null
+++ b/devel/electron6/files/patch-components_crash_content_app_crashpad.cc
@@ -0,0 +1,43 @@
+--- components/crash/content/app/crashpad.cc.orig 2019-09-10 10:42:34 UTC
++++ components/crash/content/app/crashpad.cc
+@@ -104,6 +104,12 @@ void InitializeCrashpadImpl(bool initial_client,
+ const base::FilePath& exe_path,
+ const std::vector<std::string>& initial_arguments,
+ bool embedded_handler) {
++
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return;
++#endif
++
+ static bool initialized = false;
+ DCHECK(!initialized);
+ initialized = true;
+@@ -124,7 +130,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ DCHECK(browser_process || process_type == "Chrome Installer" ||
+ process_type == "notification-helper" ||
+ process_type == "GCPW Installer" || process_type == "GCPW DLL");
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ DCHECK(browser_process);
+ #else
+ #error Port.
+@@ -192,7 +198,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // other "main, first process" to initialize things. There is no "relauncher"
+ // on Windows, so this is synonymous with initial_client.
+ const bool should_initialize_database_and_set_upload_policy = initial_client;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const bool should_initialize_database_and_set_upload_policy = browser_process;
+ #endif
+ if (should_initialize_database_and_set_upload_policy) {
+@@ -272,7 +278,9 @@ bool GetUploadsEnabled() {
+
+ #if !defined(OS_ANDROID)
+ void DumpWithoutCrashing() {
++#if !defined(OS_BSD)
+ CRASHPAD_SIMULATE_CRASH();
++#endif
+ }
+ #endif
+
diff --git a/devel/electron6/files/patch-components_crash_content_browser_BUILD.gn b/devel/electron6/files/patch-components_crash_content_browser_BUILD.gn
new file mode 100644
index 000000000000..d951d6ad4fec
--- /dev/null
+++ b/devel/electron6/files/patch-components_crash_content_browser_BUILD.gn
@@ -0,0 +1,27 @@
+--- components/crash/content/browser/BUILD.gn.orig 2019-09-10 10:42:34 UTC
++++ components/crash/content/browser/BUILD.gn
+@@ -28,7 +28,7 @@ source_set("browser") {
+ "//content/public/common",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ set_sources_assignment_filter([])
+
+ # Want this file on both Linux and Android.
+@@ -42,13 +42,13 @@ source_set("browser") {
+ deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
+
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
+ # This is not in the GYP build but this target includes breakpad client
+ # headers, so add the dependency here.
+- if ((is_posix && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_ios && !is_bsd) || is_fuchsia) {
+ configs += [ "//third_party/breakpad:client_config" ]
+ public_configs = [ "//third_party/breakpad:client_config" ]
+ }
diff --git a/devel/electron6/files/patch-components_crash_core_common_BUILD.gn b/devel/electron6/files/patch-components_crash_core_common_BUILD.gn
new file mode 100644
index 000000000000..8cc3451c5a3e
--- /dev/null
+++ b/devel/electron6/files/patch-components_crash_core_common_BUILD.gn
@@ -0,0 +1,28 @@
+--- components/crash/core/common/BUILD.gn.orig 2019-09-10 11:13:50 UTC
++++ components/crash/core/common/BUILD.gn
+@@ -7,7 +7,7 @@ import("//components/gwp_asan/buildflags/buildflags.gn
+
+ declare_args() {
+ # If set to true, this will stub out and disable the entire crash key system.
+- use_crash_key_stubs = is_fuchsia
++ use_crash_key_stubs = is_fuchsia || is_bsd
+ }
+
+ group("common") {
+@@ -93,7 +93,6 @@ target(crash_key_target_type, "crash_key") {
+ ]
+ }
+
+- deps += [ "//third_party/breakpad:client" ]
+ }
+ }
+
+@@ -153,7 +152,7 @@ source_set("unit_tests") {
+ sources += [ "objc_zombie_unittest.mm" ]
+ }
+
+- if (!is_mac && !is_win && !is_fuchsia && !is_android) {
++ if (!is_mac && !is_win && !is_fuchsia && !is_android && !is_bsd) {
+ include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
+ sources += [ "crash_key_breakpad_unittest.cc" ]
+ }
diff --git a/devel/electron6/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc b/devel/electron6/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
new file mode 100644
index 000000000000..c65e1dcad327
--- /dev/null
+++ b/devel/electron6/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
@@ -0,0 +1,20 @@
+--- components/discardable_memory/service/discardable_shared_memory_manager.cc.orig 2019-09-10 11:13:51 UTC
++++ components/discardable_memory/service/discardable_shared_memory_manager.cc
+@@ -32,7 +32,7 @@
+ #include "components/discardable_memory/common/discardable_shared_memory_heap.h"
+ #include "mojo/public/cpp/bindings/strong_binding.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file_path.h"
+ #include "base/files/file_util.h"
+ #include "base/metrics/histogram_macros.h"
+@@ -170,7 +170,7 @@ int64_t GetDefaultMemoryLimit() {
+ max_default_memory_limit /= 8;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath shmem_dir;
+ if (base::GetShmemTempDir(false, &shmem_dir)) {
+ int64_t shmem_dir_amount_of_free_space =
diff --git a/devel/electron6/files/patch-components_download_internal_common_base__file.cc b/devel/electron6/files/patch-components_download_internal_common_base__file.cc
new file mode 100644
index 000000000000..24b0d89c8dfe
--- /dev/null
+++ b/devel/electron6/files/patch-components_download_internal_common_base__file.cc
@@ -0,0 +1,20 @@
+--- components/download/internal/common/base_file.cc.orig 2019-09-10 11:13:51 UTC
++++ components/download/internal/common/base_file.cc
+@@ -516,7 +516,7 @@ DownloadInterruptReason BaseFile::PublishDownload() {
+ }
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+
+@@ -600,7 +600,7 @@ DownloadInterruptReason BaseFile::AnnotateWithSourceIn
+ }
+ return DOWNLOAD_INTERRUPT_REASON_FILE_FAILED;
+ }
+-#else // !OS_WIN && !OS_MACOSX && !OS_LINUX
++#else // !OS_WIN && !OS_MACOSX && !OS_LINUX && !OS_BSD
+ DownloadInterruptReason BaseFile::AnnotateWithSourceInformation(
+ const std::string& client_guid,
+ const GURL& source_url,
diff --git a/devel/electron6/files/patch-components_feature__engagement_public_event__constants.cc b/devel/electron6/files/patch-components_feature__engagement_public_event__constants.cc
new file mode 100644
index 000000000000..d2d3b25ac32b
--- /dev/null
+++ b/devel/electron6/files/patch-components_feature__engagement_public_event__constants.cc
@@ -0,0 +1,14 @@
+--- components/feature_engagement/public/event_constants.cc.orig 2019-09-10 11:13:51 UTC
++++ components/feature_engagement/public/event_constants.cc
+@@ -29,9 +29,9 @@ const char kFocusModeOpened[] = "focus_mode_opened";
+ const char kFocusModeConditionsMet[] = "focus_mode_conditions_met";
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ const char kNewTabOpened[] = "new_tab_opened";
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ const char kChromeOpened[] = "chrome_opened";
diff --git a/devel/electron6/files/patch-components_feature__engagement_public_event__constants.h b/devel/electron6/files/patch-components_feature__engagement_public_event__constants.h
new file mode 100644
index 000000000000..6a8f8bc0de41
--- /dev/null
+++ b/devel/electron6/files/patch-components_feature__engagement_public_event__constants.h
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/event_constants.h.orig 2019-09-10 11:13:51 UTC
++++ components/feature_engagement/public/event_constants.h
+@@ -57,7 +57,7 @@ extern const char kFocusModeOpened[];
+ extern const char kFocusModeConditionsMet[];
+ #endif // BUILDFLAG(ENABLE_DESKTOP_IN_PRODUCT_HELP)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+ // This event is included in the deferred onboarding events for the New Tab
+ // described above, but it is also used on iOS, so it must be compiled
+ // separately.
+@@ -65,7 +65,7 @@ extern const char kFocusModeConditionsMet[];
+ // The user has explicitly opened a new tab via an entry point from inside of
+ // Chrome.
+ extern const char kNewTabOpened[];
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_IOS) || defined(OS_BSD)
+
+ #if defined(OS_IOS)
+ // The user has opened Chrome (cold start or from background).
diff --git a/devel/electron6/files/patch-components_feedback_anonymizer__tool.cc b/devel/electron6/files/patch-components_feedback_anonymizer__tool.cc
new file mode 100644
index 000000000000..28c9d6bf5e3f
--- /dev/null
+++ b/devel/electron6/files/patch-components_feedback_anonymizer__tool.cc
@@ -0,0 +1,14 @@
+--- components/feedback/anonymizer_tool.cc.orig 2019-09-10 11:13:51 UTC
++++ components/feedback/anonymizer_tool.cc
+@@ -13,7 +13,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "content/public/browser/browser_thread.h"
+ #include "net/base/ip_address.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using re2::RE2;
+
diff --git a/devel/electron6/files/patch-components_flags__ui_flags__state.cc b/devel/electron6/files/patch-components_flags__ui_flags__state.cc
new file mode 100644
index 000000000000..9314cfe80ddd
--- /dev/null
+++ b/devel/electron6/files/patch-components_flags__ui_flags__state.cc
@@ -0,0 +1,11 @@
+--- components/flags_ui/flags_state.cc.orig 2019-09-10 11:13:52 UTC
++++ components/flags_ui/flags_state.cc
+@@ -616,7 +616,7 @@ int FlagsState::GetCurrentPlatform() {
+ return kOsWin;
+ #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check.
+ return kOsCrOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_FREEBSD)
+ return kOsLinux;
+ #elif defined(OS_ANDROID)
+ return kOsAndroid;
diff --git a/devel/electron6/files/patch-components_gcm__driver_gcm__client.h b/devel/electron6/files/patch-components_gcm__driver_gcm__client.h
new file mode 100644
index 000000000000..6fb13d1031b1
--- /dev/null
+++ b/devel/electron6/files/patch-components_gcm__driver_gcm__client.h
@@ -0,0 +1,10 @@
+--- components/gcm_driver/gcm_client.h.orig 2019-09-10 11:13:52 UTC
++++ components/gcm_driver/gcm_client.h
+@@ -85,6 +85,7 @@ class GCMClient {
+ PLATFORM_CROS,
+ PLATFORM_IOS,
+ PLATFORM_ANDROID,
++ PLATFORM_BSD,
+ PLATFORM_UNSPECIFIED
+ };
+
diff --git a/devel/electron6/files/patch-components_gcm__driver_gcm__client__impl.cc b/devel/electron6/files/patch-components_gcm__driver_gcm__client__impl.cc
new file mode 100644
index 000000000000..236c2f05ab98
--- /dev/null
+++ b/devel/electron6/files/patch-components_gcm__driver_gcm__client__impl.cc
@@ -0,0 +1,12 @@
+--- components/gcm_driver/gcm_client_impl.cc.orig 2019-09-10 11:13:52 UTC
++++ components/gcm_driver/gcm_client_impl.cc
+@@ -149,6 +149,9 @@ void ToCheckinProtoVersion(
+ case GCMClient::PLATFORM_CROS:
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS;
+ break;
++ case GCMClient::PLATFORM_BSD:
++ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
++ break;
+ case GCMClient::PLATFORM_UNSPECIFIED:
+ // For unknown platform, return as LINUX.
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
diff --git a/devel/electron6/files/patch-components_keyed__service_core_dependency__graph__unittest.cc b/devel/electron6/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
new file mode 100644
index 000000000000..6598619bec1a
--- /dev/null
+++ b/devel/electron6/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
@@ -0,0 +1,14 @@
+--- components/keyed_service/core/dependency_graph_unittest.cc.orig 2019-09-10 10:42:35 UTC
++++ components/keyed_service/core/dependency_graph_unittest.cc
+@@ -9,7 +9,11 @@
+ #include "components/keyed_service/core/dependency_graph.h"
+ #include "components/keyed_service/core/dependency_node.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron6/files/patch-components_metrics_BUILD.gn b/devel/electron6/files/patch-components_metrics_BUILD.gn
new file mode 100644
index 000000000000..c10759e3cec3
--- /dev/null
+++ b/devel/electron6/files/patch-components_metrics_BUILD.gn
@@ -0,0 +1,14 @@
+--- components/metrics/BUILD.gn.orig 2019-09-10 11:13:53 UTC
++++ components/metrics/BUILD.gn
+@@ -146,6 +146,11 @@ jumbo_static_library("metrics") {
+ if (is_fuchsia) {
+ sources += [ "drive_metrics_provider_fuchsia.cc" ]
+ }
++
++ if (is_bsd) {
++ sources -= [ "system_memory_stats_recorder_linux.cc" ]
++ }
++
+ }
+
+ # The component metrics provider is a separate target because it depends upon
diff --git a/devel/electron6/files/patch-components_metrics_drive__metrics__provider__linux.cc b/devel/electron6/files/patch-components_metrics_drive__metrics__provider__linux.cc
new file mode 100644
index 000000000000..c2088a908602
--- /dev/null
+++ b/devel/electron6/files/patch-components_metrics_drive__metrics__provider__linux.cc
@@ -0,0 +1,16 @@
+--- components/metrics/drive_metrics_provider_linux.cc.orig 2019-09-10 10:42:35 UTC
++++ components/metrics/drive_metrics_provider_linux.cc
+@@ -4,7 +4,13 @@
+
+ #include "components/metrics/drive_metrics_provider.h"
+
++#if defined(OS_BSD)
++#include <sys/types.h>
++#define MAJOR(dev) major(dev)
++#define MINOR(dev) minor(dev)
++#else
+ #include <linux/kdev_t.h> // For MAJOR()/MINOR().
++#endif
+ #include <sys/stat.h>
+ #include <string>
+
diff --git a/devel/electron6/files/patch-components_metrics_metrics__log.cc b/devel/electron6/files/patch-components_metrics_metrics__log.cc
new file mode 100644
index 000000000000..b17cb8179e36
--- /dev/null
+++ b/devel/electron6/files/patch-components_metrics_metrics__log.cc
@@ -0,0 +1,11 @@
+--- components/metrics/metrics_log.cc.orig 2019-09-10 11:13:53 UTC
++++ components/metrics/metrics_log.cc
+@@ -210,7 +210,7 @@ void MetricsLog::RecordCoreSystemProfile(
+ // OperatingSystemVersion refers to the ChromeOS release version.
+ #if defined(OS_CHROMEOS)
+ os->set_kernel_version(base::SysInfo::KernelVersion());
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux operating system version is copied over into kernel version to be
+ // consistent.
+ os->set_kernel_version(base::SysInfo::OperatingSystemVersion());
diff --git a/devel/electron6/files/patch-components_metrics_system__memory__stats__recorder__linux.cc b/devel/electron6/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
new file mode 100644
index 000000000000..61acf3813328
--- /dev/null
+++ b/devel/electron6/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
@@ -0,0 +1,18 @@
+--- components/metrics/system_memory_stats_recorder_linux.cc.orig 2019-09-10 11:13:53 UTC
++++ components/metrics/system_memory_stats_recorder_linux.cc
+@@ -30,6 +30,7 @@ namespace metrics {
+ UMA_HISTOGRAM_LINEAR(name, sample, 2500, 50)
+
+ void RecordMemoryStats(RecordMemoryStatsType type) {
++#if !defined(OS_FREEBSD)
+ base::SystemMemoryInfoKB memory;
+ if (!base::GetSystemMemoryInfo(&memory))
+ return;
+@@ -93,6 +94,7 @@ void RecordMemoryStats(RecordMemoryStatsType type) {
+ break;
+ }
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace metrics
diff --git a/devel/electron6/files/patch-components_neterror_resources_neterror.js b/devel/electron6/files/patch-components_neterror_resources_neterror.js
new file mode 100644
index 000000000000..f04c714a1ae2
--- /dev/null
+++ b/devel/electron6/files/patch-components_neterror_resources_neterror.js
@@ -0,0 +1,11 @@
+--- components/neterror/resources/neterror.js.orig 2019-09-10 11:13:53 UTC
++++ components/neterror/resources/neterror.js
+@@ -160,7 +160,7 @@ function setUpCachedButton(buttonStrings) {
+ }
+
+ var primaryControlOnLeft = true;
+-// <if expr="is_macosx or is_ios or is_linux or is_android">
++// <if expr="is_macosx or is_ios or is_linux or is_android or is_bsd">
+ primaryControlOnLeft = false;
+ // </if>
+
diff --git a/devel/electron6/files/patch-components_network__session__configurator_browser_network__session__configurator.cc b/devel/electron6/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
new file mode 100644
index 000000000000..ece4d2c922ea
--- /dev/null
+++ b/devel/electron6/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
@@ -0,0 +1,11 @@
+--- components/network_session_configurator/browser/network_session_configurator.cc.orig 2019-09-10 11:13:53 UTC
++++ components/network_session_configurator/browser/network_session_configurator.cc
+@@ -716,7 +716,7 @@ net::URLRequestContextBuilder::HttpCacheParams::Type C
+ }
+ #endif // #if !defined(OS_ANDROID)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE;
+ #else
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE;
diff --git a/devel/electron6/files/patch-components_new__or__sad__tab__strings.grdp b/devel/electron6/files/patch-components_new__or__sad__tab__strings.grdp
new file mode 100644
index 000000000000..7a50f367a8fb
--- /dev/null
+++ b/devel/electron6/files/patch-components_new__or__sad__tab__strings.grdp
@@ -0,0 +1,38 @@
+--- components/new_or_sad_tab_strings.grdp.orig 2019-09-10 11:13:53 UTC
++++ components/new_or_sad_tab_strings.grdp
+@@ -51,7 +51,7 @@
+ Open page in a new Incognito window (⇧⌘N)
+ </message>
+ </if>
+- <if expr="is_win or is_linux or chromeos">
++ <if expr="is_win or is_posix or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_INCOGNITO" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to open the web page in Chrome's Incognito mode.">
+ Open page in a new Incognito window (Ctrl-Shift-N)
+ </message>
+@@ -69,7 +69,7 @@
+ Close other tabs or apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_TABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other Chrome tabs or programs running on their computer.">
+ Close other tabs or programs
+ </message>
+@@ -79,7 +79,7 @@
+ Close other apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_NOTABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other programs running on their computer (Linux).">
+ Close other programs
+ </message>
+@@ -94,7 +94,7 @@
+ Restart Chromium
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_RESTART_DEVICE" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to restart their computer.">
+ Restart your computer
+ </message>
diff --git a/devel/electron6/files/patch-components_os__crypt_os__crypt.h b/devel/electron6/files/patch-components_os__crypt_os__crypt.h
new file mode 100644
index 000000000000..5943afa1aa2e
--- /dev/null
+++ b/devel/electron6/files/patch-components_os__crypt_os__crypt.h
@@ -0,0 +1,48 @@
+--- components/os_crypt/os_crypt.h.orig 2019-09-10 10:42:35 UTC
++++ components/os_crypt/os_crypt.h
+@@ -15,9 +15,9 @@
+ #include "base/strings/string16.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ class KeyStorageLinux;
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ class PrefRegistrySimple;
+@@ -34,13 +34,13 @@ struct Config;
+ // true for Linux, if a password management tool is available.
+ class OSCrypt {
+ public:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Set the configuration of OSCrypt.
+ static COMPONENT_EXPORT(OS_CRYPT) void SetConfig(
+ std::unique_ptr<os_crypt::Config> config);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // On Linux returns true iff the real secret key (not hardcoded one) is
+ // available. On MacOS returns true if Keychain is available (for mock
+ // Keychain it returns true if not using locked Keychain, false if using
+@@ -112,7 +112,7 @@ class OSCrypt {
+ DISALLOW_IMPLICIT_CONSTRUCTORS(OSCrypt);
+ };
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For unit testing purposes, inject methods to be used.
+ // |get_key_storage_mock| provides the desired |KeyStorage| implementation.
+ // If the provider returns |nullptr|, a hardcoded password will be used.
+@@ -127,6 +127,6 @@ void UseMockKeyStorageForTesting(
+ // Clears any caching and most lazy initialisations performed by the production
+ // code. Should be used after any test which required a password.
+ COMPONENT_EXPORT(OS_CRYPT) void ClearCacheForTesting();
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #endif // COMPONENTS_OS_CRYPT_OS_CRYPT_H_
diff --git a/devel/electron6/files/patch-components_os__crypt_os__crypt__unittest.cc b/devel/electron6/files/patch-components_os__crypt_os__crypt__unittest.cc
new file mode 100644
index 000000000000..32727982e130
--- /dev/null
+++ b/devel/electron6/files/patch-components_os__crypt_os__crypt__unittest.cc
@@ -0,0 +1,11 @@
+--- components/os_crypt/os_crypt_unittest.cc.orig 2019-09-10 10:42:35 UTC
++++ components/os_crypt/os_crypt_unittest.cc
+@@ -18,7 +18,7 @@
+ #include "components/os_crypt/os_crypt_mocker.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "components/os_crypt/os_crypt_mocker_linux.h"
+ #endif
+
diff --git a/devel/electron6/files/patch-components_plugins_renderer_plugin__placeholder.cc b/devel/electron6/files/patch-components_plugins_renderer_plugin__placeholder.cc
new file mode 100644
index 000000000000..c1993bfe7acf
--- /dev/null
+++ b/devel/electron6/files/patch-components_plugins_renderer_plugin__placeholder.cc
@@ -0,0 +1,14 @@
+--- components/plugins/renderer/plugin_placeholder.cc.orig 2019-09-10 10:42:35 UTC
++++ components/plugins/renderer/plugin_placeholder.cc
+@@ -17,7 +17,11 @@
+ #include "third_party/blink/public/web/web_plugin_container.h"
+ #include "third_party/blink/public/web/web_script_source.h"
+ #include "third_party/blink/public/web/web_serialized_script_value.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace plugins {
+
diff --git a/devel/electron6/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc b/devel/electron6/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
new file mode 100644
index 000000000000..192efaa7aa3f
--- /dev/null
+++ b/devel/electron6/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
@@ -0,0 +1,73 @@
+--- components/policy/core/common/cloud/cloud_policy_util.cc.orig 2019-09-10 10:42:35 UTC
++++ components/policy/core/common/cloud/cloud_policy_util.cc
+@@ -16,7 +16,7 @@
+ #include <wincred.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include <pwd.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -28,7 +28,7 @@
+ #include <sys/sysctl.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include <limits.h> // For HOST_NAME_MAX
+ #endif
+
+@@ -52,7 +52,7 @@
+ #include "base/system/sys_info.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/system/sys_info.h"
+ #endif
+
+@@ -61,11 +61,24 @@ namespace policy {
+ namespace em = enterprise_management;
+
+ std::string GetMachineName() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
+ return hostname;
+ return std::string();
++#elif defined(OS_BSD)
++ long host_name_max = sysconf(_SC_HOST_NAME_MAX);
++ if (host_name_max != -1) {
++ char *hostname = new char[host_name_max + 1]();
++ std::string hostname_r;
++
++ if (gethostname(hostname, host_name_max) == 0)
++ hostname_r = hostname;
++
++ delete[] hostname;
++ return hostname_r;
++ }
++ return std::string();
+ #elif defined(OS_MACOSX)
+ // Do not use NSHost currentHost, as it's very slow. http://crbug.com/138570
+ SCDynamicStoreContext context = {0, NULL, NULL, NULL};
+@@ -111,7 +124,7 @@ std::string GetMachineName() {
+ }
+
+ std::string GetOSVersion() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ return base::SysInfo::OperatingSystemVersion();
+ #elif defined(OS_WIN)
+ base::win::OSInfo::VersionNumber version_number =
+@@ -134,7 +147,7 @@ std::string GetOSArchitecture() {
+ }
+
+ std::string GetOSUsername() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ struct passwd* creds = getpwuid(getuid());
+ if (!creds || !creds->pw_name)
+ return std::string();
diff --git a/devel/electron6/files/patch-components_policy_core_common_schema.cc b/devel/electron6/files/patch-components_policy_core_common_schema.cc
new file mode 100644
index 000000000000..8fd3460a00da
--- /dev/null
+++ b/devel/electron6/files/patch-components_policy_core_common_schema.cc
@@ -0,0 +1,14 @@
+--- components/policy/core/common/schema.cc.orig 2019-09-10 11:13:54 UTC
++++ components/policy/core/common/schema.cc
+@@ -23,7 +23,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "components/policy/core/common/json_schema_constants.h"
+ #include "components/policy/core/common/schema_internal.h"
++#if defined(OS_FREEBSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace schema = json_schema_constants;
+
diff --git a/devel/electron6/files/patch-components_policy_resources_policy__templates.json b/devel/electron6/files/patch-components_policy_resources_policy__templates.json
new file mode 100644
index 000000000000..bf87e5b6586c
--- /dev/null
+++ b/devel/electron6/files/patch-components_policy_resources_policy__templates.json
@@ -0,0 +1,83 @@
+--- components/policy/resources/policy_templates.json.orig 2019-09-10 11:13:54 UTC
++++ components/policy/resources/policy_templates.json
+@@ -1019,7 +1019,7 @@
+ 'name': 'HomepageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1048,7 +1048,7 @@
+ 'name': 'HomepageIsNewTabPage',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1074,7 +1074,7 @@
+ 'name': 'NewTabPageLocation',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
++ 'supported_on': ['chrome.*:58-', 'chrome_os:58-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1767,7 +1767,7 @@
+ 'name': 'RemoteAccessHostMatchUsername',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
++ 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-', 'chrome.freebsd:25-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -3399,7 +3399,7 @@
+ 'name': 'GSSAPILibraryName',
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.linux:9-'],
++ 'supported_on': ['chrome.linux:9-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'dynamic_refresh': False,
+ 'per_profile': False,
+@@ -3450,7 +3450,7 @@
+ 'name': 'NtlmV2Enabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
++ 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-', 'chrome.freebsd:63-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -6637,7 +6637,7 @@
+ 'name': 'RequireOnlineRevocationChecksForLocalAnchors',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
++ 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-', 'chrome.freebsd:30-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -7761,7 +7761,7 @@
+ 'name': 'BackgroundModeEnabled',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
++ 'supported_on': ['chrome.win:19-', 'chrome.linux:19-', 'chrome.freebsd:19-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -8277,7 +8277,7 @@
+ 'name': 'FullscreenAllowed',
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
++ 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-', 'chrome.freebsd:31-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': True,
diff --git a/devel/electron6/files/patch-components_policy_tools_generate__policy__source.py b/devel/electron6/files/patch-components_policy_tools_generate__policy__source.py
new file mode 100644
index 000000000000..a403f5414fac
--- /dev/null
+++ b/devel/electron6/files/patch-components_policy_tools_generate__policy__source.py
@@ -0,0 +1,20 @@
+--- components/policy/tools/generate_policy_source.py.orig 2019-09-10 11:13:57 UTC
++++ components/policy/tools/generate_policy_source.py
+@@ -86,7 +86,7 @@ class PolicyDetails:
+ if platform not in [
+ 'chrome_frame', 'chrome_os', 'android', 'webview_android',
+ 'chrome.win', 'chrome.linux', 'chrome.mac', 'chrome.fuchsia',
+- 'chrome.*'
++ 'chrome.freebsd', 'chrome.*'
+ ]:
+ raise RuntimeError('Platform "%s" is not supported' % platform)
+
+@@ -105,7 +105,7 @@ class PolicyDetails:
+ if platform.startswith('chrome.'):
+ platform_sub = platform[7:]
+ if platform_sub == '*':
+- self.platforms.extend(['win', 'mac', 'linux', 'fuchsia'])
++ self.platforms.extend(['win', 'mac', 'linux', 'fuchsia', 'freebsd'])
+ else:
+ self.platforms.append(platform_sub)
+ else:
diff --git a/devel/electron6/files/patch-components_previews_core_previews__features.cc b/devel/electron6/files/patch-components_previews_core_previews__features.cc
new file mode 100644
index 000000000000..04d099c9483b
--- /dev/null
+++ b/devel/electron6/files/patch-components_previews_core_previews__features.cc
@@ -0,0 +1,18 @@
+--- components/previews/core/previews_features.cc.orig 2019-09-10 11:13:57 UTC
++++ components/previews/core/previews_features.cc
+@@ -14,12 +14,12 @@ namespace features {
+ // are enabled are controlled by other features.
+ const base::Feature kPreviews {
+ "Previews",
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Previews allowed for Android (but also allow on Linux for dev/debug).
+ base::FEATURE_ENABLED_BY_DEFAULT
+-#else // !defined(OS_ANDROID) || defined(OS_LINUX)
++#else // !defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Enables the Offline previews on android slow connections.
diff --git a/devel/electron6/files/patch-components_services_filesystem_file__system__app.cc b/devel/electron6/files/patch-components_services_filesystem_file__system__app.cc
new file mode 100644
index 000000000000..917b4203e281
--- /dev/null
+++ b/devel/electron6/files/patch-components_services_filesystem_file__system__app.cc
@@ -0,0 +1,20 @@
+--- components/services/filesystem/file_system_app.cc.orig 2019-09-10 11:13:58 UTC
++++ components/services/filesystem/file_system_app.cc
+@@ -19,7 +19,7 @@
+ #elif defined(OS_ANDROID)
+ #include "base/base_paths_android.h"
+ #include "base/path_service.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+@@ -68,7 +68,7 @@ base::FilePath FileSystemApp::GetUserDataDir() {
+ CHECK(base::PathService::Get(base::DIR_APP_DATA, &path));
+ #elif defined(OS_ANDROID)
+ CHECK(base::PathService::Get(base::DIR_ANDROID_APP_DATA, &path));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ path = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron6/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc b/devel/electron6/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc
new file mode 100644
index 000000000000..ffa1cfaac029
--- /dev/null
+++ b/devel/electron6/files/patch-components_startup__metric__utils_browser_startup__metric__utils.cc
@@ -0,0 +1,20 @@
+--- components/startup_metric_utils/browser/startup_metric_utils.cc.orig 2019-09-10 11:13:58 UTC
++++ components/startup_metric_utils/browser/startup_metric_utils.cc
+@@ -456,7 +456,7 @@ void AddStartupEventsForTelemetry()
+ // RecordBrowserMainMessageLoopStart, the time since last startup is also logged
+ // to a histogram suffixed with the startup temperature.
+ void RecordTimeSinceLastStartup(PrefService* pref_service) {
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(pref_service);
+
+ // Get the timestamp of the current startup.
+@@ -485,7 +485,7 @@ void RecordTimeSinceLastStartup(PrefService* pref_serv
+ // Write the timestamp of the current startup in |pref_service|.
+ pref_service->SetInt64(prefs::kLastStartupTimestamp,
+ process_start_time.ToInternalValue());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ // Logs the Startup.SameVersionStartupCount histogram. Relies on |pref_service|
diff --git a/devel/electron6/files/patch-components_storage__monitor_BUILD.gn b/devel/electron6/files/patch-components_storage__monitor_BUILD.gn
new file mode 100644
index 000000000000..6116b1e39b93
--- /dev/null
+++ b/devel/electron6/files/patch-components_storage__monitor_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/storage_monitor/BUILD.gn.orig 2019-09-10 11:13:58 UTC
++++ components/storage_monitor/BUILD.gn
+@@ -65,6 +65,17 @@ static_library("storage_monitor") {
+ ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "mtab_watcher_linux.cc",
++ "mtab_watcher_linux.h",
++ ]
++ sources += [
++ "storage_monitor_freebsd.cc",
++ "storage_monitor_freebsd.h",
++ ]
++ }
++
+ if (use_udev) {
+ deps += [ "//device/udev_linux" ]
+ } else if (is_linux) {
diff --git a/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.cc b/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.cc
new file mode 100644
index 000000000000..936c2438ee2a
--- /dev/null
+++ b/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.cc
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.cc.orig 2019-09-10 10:42:35 UTC
++++ components/storage_monitor/removable_device_constants.cc
+@@ -10,7 +10,7 @@ namespace storage_monitor {
+ const char kFSUniqueIdPrefix[] = "UUID:";
+ const char kVendorModelSerialPrefix[] = "VendorModelSerial:";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kVendorModelVolumeStoragePrefix[] = "VendorModelVolumeStorage:";
+ #endif
+
diff --git a/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.h b/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.h
new file mode 100644
index 000000000000..443b37cce6c4
--- /dev/null
+++ b/devel/electron6/files/patch-components_storage__monitor_removable__device__constants.h
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.h.orig 2019-09-10 10:42:35 UTC
++++ components/storage_monitor/removable_device_constants.h
+@@ -15,7 +15,7 @@ namespace storage_monitor {
+ extern const char kFSUniqueIdPrefix[];
+ extern const char kVendorModelSerialPrefix[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kVendorModelVolumeStoragePrefix[];
+ #endif
+
diff --git a/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.cc b/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
new file mode 100644
index 000000000000..eb27a2b1ea57
--- /dev/null
+++ b/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
@@ -0,0 +1,57 @@
+--- components/storage_monitor/storage_monitor_freebsd.cc.orig 2019-09-16 09:25:13 UTC
++++ components/storage_monitor/storage_monitor_freebsd.cc
+@@ -0,0 +1,54 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD implementation.
++
++#include "components/storage_monitor/storage_monitor_freebsd.h"
++
++#include <stdio.h>
++
++#include <list>
++
++#include "base/bind.h"
++#include "base/metrics/histogram.h"
++#include "base/process/kill.h"
++#include "base/process/launch.h"
++#include "base/stl_util.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/utf_string_conversions.h"
++#include "components/storage_monitor/media_storage_util.h"
++#include "components/storage_monitor/removable_device_constants.h"
++#include "components/storage_monitor/storage_info.h"
++
++using content::BrowserThread;
++
++namespace storage_monitor {
++
++namespace {
++
++} // namespace
++
++StorageMonitorFreeBSD::StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++StorageMonitorFreeBSD::~StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++void StorageMonitorFreeBSD::Init() {
++}
++
++bool StorageMonitorFreeBSD::GetStorageInfoForPath(
++ const base::FilePath& path,
++ StorageInfo* device_info) const {
++ return false; // TODO
++}
++
++StorageMonitor* StorageMonitor::CreateInternal() {
++ return new StorageMonitorFreeBSD();
++}
++
++} // namespace storage_monitor
diff --git a/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.h b/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.h
new file mode 100644
index 000000000000..48695cbf80c8
--- /dev/null
+++ b/devel/electron6/files/patch-components_storage__monitor_storage__monitor__freebsd.h
@@ -0,0 +1,48 @@
+--- components/storage_monitor/storage_monitor_freebsd.h.orig 2019-09-16 09:25:13 UTC
++++ components/storage_monitor/storage_monitor_freebsd.h
+@@ -0,0 +1,45 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD processes mount point change events, notifies listeners
++// about the addition and deletion of media devices, and answers queries about
++// mounted devices.
++// StorageMonitorFreeBSD lives on the UI thread, and uses ???
++// the FILE thread to get mount point change events.
++
++#ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++#define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++
++#include <map>
++#include <string>
++
++#include "base/compiler_specific.h"
++#include "base/files/file_path.h"
++#include "base/files/file_path_watcher.h"
++#include "base/memory/weak_ptr.h"
++#include "components/storage_monitor/storage_monitor.h"
++#include "content/public/browser/browser_thread.h"
++
++namespace storage_monitor {
++
++class StorageMonitorFreeBSD : public StorageMonitor {
++ public:
++ // Should only be called by browser start up code.
++ // Use StorageMonitor::GetInstance() instead.
++ explicit StorageMonitorFreeBSD();
++ virtual ~StorageMonitorFreeBSD();
++
++ // Must be called for StorageMonitorFreeBSD to work.
++ virtual void Init() override;
++ private:
++ // StorageMonitor implementation.
++ virtual bool GetStorageInfoForPath(const base::FilePath& path,
++ StorageInfo* device_info) const override;
++
++ DISALLOW_COPY_AND_ASSIGN(StorageMonitorFreeBSD);
++};
++
++} // namespace storage_monitor
++
++#endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
diff --git a/devel/electron6/files/patch-components_sync__device__info_local__device__info__util__linux.cc b/devel/electron6/files/patch-components_sync__device__info_local__device__info__util__linux.cc
new file mode 100644
index 000000000000..b6464c2b46c3
--- /dev/null
+++ b/devel/electron6/files/patch-components_sync__device__info_local__device__info__util__linux.cc
@@ -0,0 +1,26 @@
+--- components/sync_device_info/local_device_info_util_linux.cc.orig 2019-09-10 10:42:36 UTC
++++ components/sync_device_info/local_device_info_util_linux.cc
+@@ -30,6 +30,23 @@ std::string GetSessionNameInternal() {
+ break;
+ }
+ return "Chromebook";
++#elif defined(OS_BSD)
++ long len = sysconf(_SC_HOST_NAME_MAX);
++
++ if (len == -1)
++ return "FreeBSD";
++
++ char *hostname = new (std::nothrow) char[len]();
++
++ if ((hostname == nullptr) || (gethostname(hostname, len) == -1)) {
++ delete[](hostname);
++ return "FreeBSD";
++ }
++
++ std::string res{hostname};
++
++ delete[](hostname);
++ return res;
+ #else
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
diff --git a/devel/electron6/files/patch-components_update__client_update__query__params.cc b/devel/electron6/files/patch-components_update__client_update__query__params.cc
new file mode 100644
index 000000000000..65c957a2c660
--- /dev/null
+++ b/devel/electron6/files/patch-components_update__client_update__query__params.cc
@@ -0,0 +1,11 @@
+--- components/update_client/update_query_params.cc.orig 2019-09-10 11:14:00 UTC
++++ components/update_client/update_query_params.cc
+@@ -38,6 +38,8 @@ const char kOs[] =
+ "fuchsia";
+ #elif defined(OS_OPENBSD)
+ "openbsd";
++#elif defined(OS_FREEBSD)
++ "freebsd";
+ #else
+ #error "unknown os"
+ #endif
diff --git a/devel/electron6/files/patch-components_url__matcher_regex__set__matcher.cc b/devel/electron6/files/patch-components_url__matcher_regex__set__matcher.cc
new file mode 100644
index 000000000000..c579a6b2dce6
--- /dev/null
+++ b/devel/electron6/files/patch-components_url__matcher_regex__set__matcher.cc
@@ -0,0 +1,16 @@
+--- components/url_matcher/regex_set_matcher.cc.orig 2019-09-10 10:42:36 UTC
++++ components/url_matcher/regex_set_matcher.cc
+@@ -11,8 +11,13 @@
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+ #include "components/url_matcher/substring_set_matcher.h"
++#if defined(OS_BSD)
++#include <re2/filtered_re2.h>
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/filtered_re2.h"
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron6/files/patch-components_url__matcher_url__matcher__factory.cc b/devel/electron6/files/patch-components_url__matcher_url__matcher__factory.cc
new file mode 100644
index 000000000000..6750e9c91e60
--- /dev/null
+++ b/devel/electron6/files/patch-components_url__matcher_url__matcher__factory.cc
@@ -0,0 +1,14 @@
+--- components/url_matcher/url_matcher_factory.cc.orig 2019-09-10 10:42:36 UTC
++++ components/url_matcher/url_matcher_factory.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "components/url_matcher/url_matcher_constants.h"
+ #include "components/url_matcher/url_matcher_helpers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron6/files/patch-components_webcrypto_algorithms_test__helpers.cc b/devel/electron6/files/patch-components_webcrypto_algorithms_test__helpers.cc
new file mode 100644
index 000000000000..611dba399766
--- /dev/null
+++ b/devel/electron6/files/patch-components_webcrypto_algorithms_test__helpers.cc
@@ -0,0 +1,14 @@
+--- components/webcrypto/algorithms/test_helpers.cc.orig 2019-09-10 10:42:36 UTC
++++ components/webcrypto/algorithms/test_helpers.cc
+@@ -25,7 +25,11 @@
+ #include "components/webcrypto/status.h"
+ #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
+ #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace webcrypto {
+
diff --git a/devel/electron6/files/patch-content_app_content__main__runner__impl.cc b/devel/electron6/files/patch-content_app_content__main__runner__impl.cc
new file mode 100644
index 000000000000..c698fb2ca1c9
--- /dev/null
+++ b/devel/electron6/files/patch-content_app_content__main__runner__impl.cc
@@ -0,0 +1,73 @@
+--- content/app/content_main_runner_impl.cc.orig 2019-09-16 09:24:25 UTC
++++ content/app/content_main_runner_impl.cc
+@@ -99,17 +99,17 @@
+ #include "base/posix/global_descriptors.h"
+ #include "content/public/common/content_descriptors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_fork_delegate_linux.h"
+ #endif
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "sandbox/linux/services/libc_interceptor.h"
+ #include "services/service_manager/zygote/zygote_main.h"
+ #endif
+
+ #endif // OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/native_library.h"
+ #include "base/rand_util.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
+@@ -130,7 +130,7 @@
+ #include "content/public/common/content_client.h"
+ #endif
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || defined(OS_BSD)
+
+ #if !defined(CHROME_MULTIPLE_DLL_BROWSER)
+ #include "content/child/field_trial.h"
+@@ -322,7 +322,7 @@ void InitializeZygoteSandboxForBrowserProcess(
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ // Loads the (native) libraries but does not initialize them (i.e., does not
+@@ -419,7 +419,7 @@ void PreSandboxInit() {
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace
+
+@@ -477,7 +477,7 @@ int RunZygote(ContentMainDelegate* delegate) {
+ delegate->ZygoteStarting(&zygote_fork_delegates);
+ media::InitializeMediaLibrary();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PreSandboxInit();
+ #endif
+
+@@ -642,11 +642,11 @@ int ContentMainRunnerImpl::Initialize(const ContentMai
+ base::GlobalDescriptors::kBaseDescriptor);
+ #endif // !OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ g_fds->Set(service_manager::kCrashDumpSignal,
+ service_manager::kCrashDumpSignal +
+ base::GlobalDescriptors::kBaseDescriptor);
+-#endif // OS_LINUX || OS_OPENBSD
++#endif // OS_LINUX
+
+ #endif // !OS_WIN
+
diff --git a/devel/electron6/files/patch-content_browser_BUILD.gn b/devel/electron6/files/patch-content_browser_BUILD.gn
new file mode 100644
index 000000000000..45b023cbf458
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/browser/BUILD.gn.orig 2019-09-10 11:14:00 UTC
++++ content/browser/BUILD.gn
+@@ -2058,7 +2058,7 @@ jumbo_source_set("browser") {
+ "//chromeos/resources",
+ "//components/chromeos_camera:mojo_mjpeg_decode_accelerator",
+ ]
+- } else {
++ } else if (!is_bsd) {
+ sources += [
+ "memory/memory_monitor_linux.cc",
+ "memory/memory_monitor_linux.h",
diff --git a/devel/electron6/files/patch-content_browser_browser__main__loop.cc b/devel/electron6/files/patch-content_browser_browser__main__loop.cc
new file mode 100644
index 000000000000..67f1c88327c0
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_browser__main__loop.cc
@@ -0,0 +1,46 @@
+--- content/browser/browser_main_loop.cc.orig 2019-09-16 09:24:25 UTC
++++ content/browser/browser_main_loop.cc
+@@ -251,6 +251,13 @@
+ #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h"
+ #endif
+
++#if defined(OS_BSD)
++#include "content/browser/sandbox_host_linux.h"
++#include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#include "content/public/common/common_sandbox_support_linux.h"
++#include "services/service_manager/sandbox/sandbox.h"
++#endif
++
+ // One of the linux specific headers defines this as a macro.
+ #ifdef DestroyAll
+ #undef DestroyAll
+@@ -576,6 +583,11 @@ int BrowserMainLoop::EarlyInitialization() {
+ // by now since a thread to start the ServiceManager has been created
+ // before the browser main loop starts.
+ DCHECK(SandboxHostLinux::GetInstance()->IsInitialized());
++#elif defined(OS_BSD)
++ SandboxHostLinux::GetInstance()->Init();
++ base::FileHandleMappingVector fds_to_map;
++ const int sfd = SandboxHostLinux::GetInstance()->GetChildSocket();
++ fds_to_map.push_back(std::make_pair(sfd, service_manager::GetSandboxFD()));
+ #endif
+
+ #if defined(USE_X11)
+@@ -619,7 +631,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ }
+ #endif // defined(OS_ANDROID) || defined(OS_CHROMEOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // We use quite a few file descriptors for our IPC as well as disk the disk
+ // cache,and the default limit on the Mac is low (256), so bump it up.
+@@ -629,7 +641,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ // users can easily hit this limit with many open tabs. Bump up the limit to
+ // an arbitrarily high number. See https://crbug.com/539567
+ base::IncreaseFdLimitTo(8192);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) ||
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) ||
+ // defined(OS_ANDROID)
+
+ #if defined(OS_WIN)
diff --git a/devel/electron6/files/patch-content_browser_builtin__service__manifests.cc b/devel/electron6/files/patch-content_browser_builtin__service__manifests.cc
new file mode 100644
index 000000000000..3f653b2b55be
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_builtin__service__manifests.cc
@@ -0,0 +1,20 @@
+--- content/browser/builtin_service_manifests.cc.orig 2019-09-10 11:14:00 UTC
++++ content/browser/builtin_service_manifests.cc
+@@ -33,7 +33,7 @@
+ #include "services/video_capture/public/cpp/manifest.h"
+ #include "services/viz/public/cpp/manifest.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/manifest.h" // nogncheck
+ #endif
+
+@@ -99,7 +99,7 @@ const std::vector<service_manager::Manifest>& GetBuilt
+ : service_manager::Manifest::ExecutionMode::
+ kInProcessBuiltin),
+ viz::GetManifest(),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_service::GetManifest(),
+ #endif
+ #if defined(OS_CHROMEOS)
diff --git a/devel/electron6/files/patch-content_browser_child__process__launcher__helper__linux.cc b/devel/electron6/files/patch-content_browser_child__process__launcher__helper__linux.cc
new file mode 100644
index 000000000000..e29d44d41d26
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_child__process__launcher__helper__linux.cc
@@ -0,0 +1,92 @@
+--- content/browser/child_process_launcher_helper_linux.cc.orig 2019-11-13 10:42:36 UTC
++++ content/browser/child_process_launcher_helper_linux.cc
+@@ -17,7 +17,9 @@
+ #include "content/public/common/sandboxed_process_launcher_delegate.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#if !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_handle.h"
++#endif
+ #include "services/service_manager/zygote/host/zygote_communication_linux.h"
+ #include "services/service_manager/zygote/host/zygote_host_impl_linux.h"
+
+@@ -55,6 +57,7 @@ bool ChildProcessLauncherHelper::BeforeLaunchOnLaunche
+ options->fds_to_remap.push_back(
+ std::make_pair(sandbox_fd, service_manager::GetSandboxFD()));
+
++#if !defined(OS_BSD)
+ // (For Electron), if we're launching without zygote, that means we're
+ // launching an unsandboxed process (since all sandboxed processes are
+ // forked from the zygote). Relax the allow_new_privs option to permit
+@@ -66,6 +69,7 @@ bool ChildProcessLauncherHelper::BeforeLaunchOnLaunche
+ if (!zygote_handle) {
+ options->allow_new_privs = true;
+ }
++#endif
+ }
+
+ options->environment = delegate_->GetEnvironment();
+@@ -81,6 +85,7 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ int* launch_result) {
+ *is_synchronous_launch = true;
+
++#if !defined(OS_BSD)
+ service_manager::ZygoteHandle zygote_handle =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoZygote)
+ ? nullptr
+@@ -94,7 +99,6 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ GetProcessType());
+ *launch_result = LAUNCH_RESULT_SUCCESS;
+
+-#if !defined(OS_OPENBSD)
+ if (handle) {
+ // This is just a starting score for a renderer or extension (the
+ // only types of processes that will be started this way). It will
+@@ -105,13 +109,13 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ service_manager::ZygoteHostImpl::GetInstance()->AdjustRendererOOMScore(
+ handle, kLowestRendererOomScore);
+ }
+-#endif
+
+ Process process;
+ process.process = base::Process(handle);
+ process.zygote = zygote_handle;
+ return process;
+ }
++#endif
+
+ Process process;
+ process.process = base::LaunchProcess(*command_line(), options);
+@@ -129,10 +133,14 @@ ChildProcessTerminationInfo ChildProcessLauncherHelper
+ const ChildProcessLauncherHelper::Process& process,
+ bool known_dead) {
+ ChildProcessTerminationInfo info;
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ info.status = process.zygote->GetTerminationStatus(
+ process.process.Handle(), known_dead, &info.exit_code);
+ } else if (known_dead) {
++#else
++ if (known_dead) {
++#endif
+ info.status = base::GetKnownDeadTerminationStatus(process.process.Handle(),
+ &info.exit_code);
+ } else {
+@@ -156,13 +164,17 @@ void ChildProcessLauncherHelper::ForceNormalProcessTer
+ DCHECK(CurrentlyOnProcessLauncherTaskRunner());
+ process.process.Terminate(service_manager::RESULT_CODE_NORMAL_EXIT, false);
+ // On POSIX, we must additionally reap the child.
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ // If the renderer was created via a zygote, we have to proxy the reaping
+ // through the zygote process.
+ process.zygote->EnsureProcessTerminated(process.process.Handle());
+ } else {
++#endif
+ base::EnsureProcessTerminated(std::move(process.process));
++#if !defined(OS_BSD)
+ }
++#endif
+ }
+
+ void ChildProcessLauncherHelper::SetProcessPriorityOnLauncherThread(
diff --git a/devel/electron6/files/patch-content_browser_devtools_protocol_system__info__handler.cc b/devel/electron6/files/patch-content_browser_devtools_protocol_system__info__handler.cc
new file mode 100644
index 000000000000..1a9127567830
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_devtools_protocol_system__info__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/devtools/protocol/system_info_handler.cc.orig 2019-09-10 11:14:00 UTC
++++ content/browser/devtools/protocol/system_info_handler.cc
+@@ -40,7 +40,7 @@ using GetInfoCallback = SystemInfo::Backend::GetInfoCa
+ // Give the GPU process a few seconds to provide GPU info.
+ // Linux Debug builds need more time -- see Issue 796437.
+ // Windows builds need more time -- see Issue 873112.
+-#if (defined(OS_LINUX) && !defined(NDEBUG)) || defined(OS_WIN)
++#if ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(NDEBUG)) || defined(OS_WIN)
+ const int kGPUInfoWatchdogTimeoutMs = 20000;
+ #else
+ const int kGPUInfoWatchdogTimeoutMs = 5000;
diff --git a/devel/electron6/files/patch-content_browser_gpu_gpu__process__host.cc b/devel/electron6/files/patch-content_browser_gpu_gpu__process__host.cc
new file mode 100644
index 000000000000..3ff05a3d82a0
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_gpu_gpu__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/gpu/gpu_process_host.cc.orig 2019-09-16 09:24:25 UTC
++++ content/browser/gpu/gpu_process_host.cc
+@@ -1063,7 +1063,7 @@ bool GpuProcessHost::LaunchGpuProcess() {
+ std::unique_ptr<base::CommandLine> cmd_line =
+ std::make_unique<base::CommandLine>(base::CommandLine::NO_PROGRAM);
+ #else
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int child_flags = gpu_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-content_browser_media_media__internals.cc b/devel/electron6/files/patch-content_browser_media_media__internals.cc
new file mode 100644
index 000000000000..58180dfe6dbb
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_media_media__internals.cc
@@ -0,0 +1,11 @@
+--- content/browser/media/media_internals.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/media/media_internals.cc
+@@ -785,7 +785,7 @@ void MediaInternals::UpdateVideoCaptureDeviceCapabilit
+ device_dict->SetString("id", descriptor.device_id);
+ device_dict->SetString("name", descriptor.GetNameAndModel());
+ device_dict->Set("formats", std::move(format_list));
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ device_dict->SetString("captureApi", descriptor.GetCaptureApiTypeString());
+ #endif
diff --git a/devel/electron6/files/patch-content_browser_memory_memory__monitor.cc b/devel/electron6/files/patch-content_browser_memory_memory__monitor.cc
new file mode 100644
index 000000000000..75e460e6df82
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_memory_memory__monitor.cc
@@ -0,0 +1,11 @@
+--- content/browser/memory/memory_monitor.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/memory/memory_monitor.cc
+@@ -22,7 +22,7 @@ void MemoryMonitorDelegate::GetSystemMemoryInfo(
+ base::GetSystemMemoryInfo(mem_info);
+ }
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // TODO(bashi,bcwhite): Remove when memory monitor for mac is available.
+ std::unique_ptr<MemoryMonitor> CreateMemoryMonitor() {
+ NOTREACHED();
diff --git a/devel/electron6/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc b/devel/electron6/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
new file mode 100644
index 000000000000..629490440f40
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
@@ -0,0 +1,27 @@
+--- content/browser/memory/swap_metrics_driver_impl_linux.cc.orig 2019-09-10 10:42:36 UTC
++++ content/browser/memory/swap_metrics_driver_impl_linux.cc
+@@ -43,6 +43,7 @@ SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinu
+
+ SwapMetricsDriver::SwapMetricsUpdateResult
+ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
++#if !defined(OS_BSD)
+ base::VmStatInfo vmstat;
+ if (!base::GetVmStatInfo(&vmstat)) {
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
+@@ -55,12 +56,15 @@ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base
+
+ if (interval.is_zero())
+ return SwapMetricsDriver::SwapMetricsUpdateResult::
+- kSwapMetricsUpdateSuccess;
++ kSwapMetricsUpdateSuccess;
+
+ delegate_->OnSwapInCount(in_counts, interval);
+ delegate_->OnSwapOutCount(out_counts, interval);
+
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateSuccess;
++#else
++ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
++#endif
+ }
+
+ } // namespace content
diff --git a/devel/electron6/files/patch-content_browser_ppapi__plugin__process__host.cc b/devel/electron6/files/patch-content_browser_ppapi__plugin__process__host.cc
new file mode 100644
index 000000000000..99e6fd7f2fe5
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_ppapi__plugin__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/ppapi_plugin_process_host.cc.orig 2019-09-16 09:24:25 UTC
++++ content/browser/ppapi_plugin_process_host.cc
+@@ -364,7 +364,7 @@ bool PpapiPluginProcessHost::Init(const PepperPluginIn
+ base::CommandLine::StringType plugin_launcher =
+ browser_command_line.GetSwitchValueNative(switches::kPpapiPluginLauncher);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = plugin_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF :
+ ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc b/devel/electron6/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
new file mode 100644
index 000000000000..03cb506da0ef
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/input/input_device_change_observer.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/input/input_device_change_observer.cc
+@@ -10,7 +10,7 @@
+
+ #if defined(OS_WIN)
+ #include "ui/events/devices/input_device_observer_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/devices/input_device_manager.h"
+ #elif defined(OS_ANDROID)
+ #include "ui/events/devices/input_device_observer_android.h"
+@@ -22,7 +22,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ render_view_host_impl_ = rvhi;
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->AddObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
+@@ -32,7 +32,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ InputDeviceChangeObserver::~InputDeviceChangeObserver() {
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::InputDeviceManager::GetInstance()->RemoveObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc b/devel/electron6/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
new file mode 100644
index 000000000000..4bfcd19e4682
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
@@ -0,0 +1,20 @@
+--- content/browser/renderer_host/pepper/pepper_file_io_host.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/pepper/pepper_file_io_host.cc
+@@ -432,7 +432,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
+ base::File::Error error_code) {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Quarantining a file before its contents are available is only supported on
+ // Windows and Linux.
+ if (!FileOpenForWrite(open_flags_) || error_code != base::File::FILE_OK) {
+@@ -452,7 +452,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ #endif
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ void PepperFileIOHost::OnLocalFileQuarantined(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.cc b/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.cc
new file mode 100644
index 000000000000..eb21458f13d7
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_message_filter.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_message_filter.cc
+@@ -71,7 +71,7 @@
+ #if defined(OS_MACOSX)
+ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/threading/platform_thread.h"
+ #endif
+@@ -151,7 +151,7 @@ void RenderMessageFilter::CreateFullscreenWidget(
+ std::move(callback).Run(route_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriorityOnFileThread(
+ base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority) {
+@@ -172,7 +172,7 @@ void RenderMessageFilter::SetThreadPriorityOnFileThrea
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) {
+ constexpr base::TaskTraits kTraits = {
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.h b/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.h
new file mode 100644
index 000000000000..8110f9d8ac25
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__message__filter.h
@@ -0,0 +1,19 @@
+--- content/browser/renderer_host/render_message_filter.h.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_message_filter.h
+@@ -87,14 +87,14 @@ class CONTENT_EXPORT RenderMessageFilter
+ mojom::WidgetPtr widget,
+ CreateFullscreenWidgetCallback callback) override;
+ void HasGpuProcess(HasGpuProcessCallback callback) override;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) override;
+ #endif
+
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority);
+ #endif
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.cc b/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.cc
new file mode 100644
index 000000000000..21636af7644a
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.cc
@@ -0,0 +1,38 @@
+--- content/browser/renderer_host/render_process_host_impl.cc.orig 2019-09-16 09:24:25 UTC
++++ content/browser/renderer_host/render_process_host_impl.cc
+@@ -230,7 +230,7 @@
+ #include "content/browser/compositor/image_transport_factory.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #endif
+@@ -1244,7 +1244,7 @@ static constexpr size_t kUnknownPlatformProcessLimit =
+ // to indicate failure and std::numeric_limits<size_t>::max() to indicate
+ // unlimited.
+ size_t GetPlatformProcessLimit() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct rlimit limit;
+ if (getrlimit(RLIMIT_NPROC, &limit) != 0)
+ return kUnknownPlatformProcessLimit;
+@@ -1255,7 +1255,7 @@ size_t GetPlatformProcessLimit() {
+ #else
+ // TODO(https://crbug.com/104689): Implement on other platforms.
+ return kUnknownPlatformProcessLimit;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+@@ -1667,7 +1667,7 @@ bool RenderProcessHostImpl::Init() {
+ renderer_prefix =
+ browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = renderer_prefix.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.h b/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.h
new file mode 100644
index 000000000000..c29b191fa106
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__process__host__impl.h
@@ -0,0 +1,15 @@
+--- content/browser/renderer_host/render_process_host_impl.h.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_process_host_impl.h
+@@ -400,10 +400,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
+ is_for_guests_only_ = is_for_guests_only;
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Launch the zygote early in the browser startup.
+ static void EarlyZygoteLaunch();
+-#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ RendererAudioOutputStreamFactoryContext*
+ GetRendererAudioOutputStreamFactoryContext() override;
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__view__host__impl.cc b/devel/electron6/files/patch-content_browser_renderer__host_render__view__host__impl.cc
new file mode 100644
index 000000000000..195ee10b67ed
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__view__host__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_view_host_impl.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_view_host_impl.cc
+@@ -163,7 +163,7 @@ void GetPlatformSpecificPrefs(blink::mojom::RendererPr
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CYVSCROLL);
+ prefs->arrow_bitmap_width_horizontal_scroll_bar_in_dips =
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXHSCROLL);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ prefs->system_font_family_name = gfx::Font().GetFontName();
+ #endif
+ }
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc b/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
new file mode 100644
index 000000000000..08aff83170ac
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_widget_host_view_aura.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_widget_host_view_aura.cc
+@@ -117,7 +117,7 @@
+ #include "content/browser/accessibility/browser_accessibility_auralinux.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+@@ -2200,7 +2200,7 @@ bool RenderWidgetHostViewAura::NeedsInputGrab() {
+ }
+
+ bool RenderWidgetHostViewAura::NeedsMouseCapture() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ return NeedsInputGrab();
+ #endif
+ return false;
+@@ -2397,7 +2397,7 @@ void RenderWidgetHostViewAura::ForwardKeyboardEventWit
+ if (!target_host)
+ return;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* keybinding_delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
diff --git a/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc b/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
new file mode 100644
index 000000000000..6bc1b3e108d7
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_widget_host_view_event_handler.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/renderer_host/render_widget_host_view_event_handler.cc
+@@ -609,7 +609,7 @@ bool RenderWidgetHostViewEventHandler::CanRendererHand
+ if (event->type() == ui::ET_MOUSE_EXITED) {
+ if (mouse_locked || selection_popup)
+ return false;
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Don't forward the mouse leave message which is received when the context
+ // menu is displayed by the page. This confuses the page and causes state
+ // changes.
diff --git a/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc b/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
new file mode 100644
index 000000000000..70c43b3f6a63
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.cc.orig 2019-09-10 10:42:36 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.cc
+@@ -15,7 +15,7 @@
+
+ #include "ui/events/platform/platform_event_source.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/env.h"
+ #include "ui/events/event.h"
+ #endif
+@@ -39,7 +39,7 @@ NativeEventObserver::~NativeEventObserver() {
+ DeregisterObserver();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeEventObserver::RegisterObserver() {
+ aura::Env::GetInstance()->AddWindowEventDispatcherObserver(this);
+ }
+@@ -61,7 +61,7 @@ void NativeEventObserver::OnWindowEventDispatcherFinis
+ did_run_event_callback_.Run(info.unique_id);
+ events_being_processed_.pop_back();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ void NativeEventObserver::RegisterObserver() {
diff --git a/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h b/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
new file mode 100644
index 000000000000..0c136526733d
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
@@ -0,0 +1,47 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.h.orig 2019-09-10 10:42:36 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.h
+@@ -14,7 +14,7 @@
+ #include "content/public/browser/native_event_processor_observer_mac.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/window_event_dispatcher_observer.h"
+ #endif
+
+@@ -39,7 +39,7 @@ namespace responsiveness {
+ class CONTENT_EXPORT NativeEventObserver
+ #if defined(OS_MACOSX)
+ : public NativeEventProcessorObserver
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ : public aura::WindowEventDispatcherObserver
+ #elif defined(OS_WIN)
+ : public base::MessagePumpForUI::Observer
+@@ -56,7 +56,7 @@ class CONTENT_EXPORT NativeEventObserver
+ NativeEventObserver(WillRunEventCallback will_run_event_callback,
+ DidRunEventCallback did_run_event_callback);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ~NativeEventObserver() override;
+ #else
+ virtual ~NativeEventObserver();
+@@ -68,7 +68,7 @@ class CONTENT_EXPORT NativeEventObserver
+ // Exposed for tests.
+ void WillRunNativeEvent(const void* opaque_identifier) override;
+ void DidRunNativeEvent(const void* opaque_identifier) override;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // aura::WindowEventDispatcherObserver overrides:
+ void OnWindowEventDispatcherStartedProcessing(
+ aura::WindowEventDispatcher* dispatcher,
+@@ -85,7 +85,7 @@ class CONTENT_EXPORT NativeEventObserver
+ void RegisterObserver();
+ void DeregisterObserver();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct EventInfo {
+ const void* unique_id;
+ };
diff --git a/devel/electron6/files/patch-content_browser_service__manager_service__manager__context.cc b/devel/electron6/files/patch-content_browser_service__manager_service__manager__context.cc
new file mode 100644
index 000000000000..582d4aed8497
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_service__manager_service__manager__context.cc
@@ -0,0 +1,35 @@
+--- content/browser/service_manager/service_manager_context.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/service_manager/service_manager_context.cc
+@@ -98,7 +98,7 @@
+ #include "jni/ContentNfcDelegate_jni.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/font_service_app.h"
+ #include "components/services/font/public/interfaces/constants.mojom.h" // nogncheck
+ #endif
+@@ -342,12 +342,12 @@ void CreateInProcessAudioService(
+ BrowserMainLoop::GetAudioManager(), std::move(request)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<service_manager::Service> CreateFontService(
+ service_manager::mojom::ServiceRequest request) {
+ return std::make_unique<font_service::FontServiceApp>(std::move(request));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ std::unique_ptr<service_manager::Service> CreateResourceCoordinatorService(
+ service_manager::mojom::ServiceRequest request) {
+@@ -665,7 +665,7 @@ ServiceManagerContext::ServiceManagerContext(
+ base::BindRepeating(&CreateVideoCaptureService));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ RegisterInProcessService(
+ font_service::mojom::kServiceName,
+ base::CreateSequencedTaskRunnerWithTraits(
diff --git a/devel/electron6/files/patch-content_browser_utility__process__host.cc b/devel/electron6/files/patch-content_browser_utility__process__host.cc
new file mode 100644
index 000000000000..845b84926054
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_utility__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/utility_process_host.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/utility_process_host.cc
+@@ -213,7 +213,7 @@ UtilityProcessHost::UtilityProcessHost(
+ : client_(client),
+ client_task_runner_(client_task_runner),
+ sandbox_type_(service_manager::SANDBOX_TYPE_UTILITY),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ child_flags_(ChildProcessHost::CHILD_ALLOW_SELF),
+ #else
+ child_flags_(ChildProcessHost::CHILD_NORMAL),
diff --git a/devel/electron6/files/patch-content_browser_webui_shared__resources__data__source.cc b/devel/electron6/files/patch-content_browser_webui_shared__resources__data__source.cc
new file mode 100644
index 000000000000..ef5e37d8ba5c
--- /dev/null
+++ b/devel/electron6/files/patch-content_browser_webui_shared__resources__data__source.cc
@@ -0,0 +1,17 @@
+--- content/browser/webui/shared_resources_data_source.cc.orig 2019-09-10 11:14:02 UTC
++++ content/browser/webui/shared_resources_data_source.cc
+@@ -119,12 +119,12 @@ const std::map<int, std::string> CreateMojoResourceIdT
+ "mojo/mojo/public/mojom/base/string16.mojom.html"},
+ {IDR_MOJO_STRING16_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/string16.mojom-lite.js"},
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {IDR_MOJO_TIME_MOJOM_HTML,
+ "mojo/mojo/public/mojom/base/time.mojom.html"},
+ {IDR_MOJO_TIME_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/time.mojom-lite.js"},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+ }
+
diff --git a/devel/electron6/files/patch-content_common_BUILD.gn b/devel/electron6/files/patch-content_common_BUILD.gn
new file mode 100644
index 000000000000..40fe9c147aa8
--- /dev/null
+++ b/devel/electron6/files/patch-content_common_BUILD.gn
@@ -0,0 +1,15 @@
+--- content/common/BUILD.gn.orig 2019-09-10 11:14:02 UTC
++++ content/common/BUILD.gn
+@@ -381,6 +381,12 @@ source_set("common") {
+ libs += [ "android" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "sandbox_init_linux.cc",
++ ]
++ }
++
+ if (is_debug && !is_component_build && enable_plugins) {
+ # Content depends on the PPAPI message logging stuff; if this isn't here,
+ # some unit test binaries won't compile. This only worked in release mode
diff --git a/devel/electron6/files/patch-content_common_common__sandbox__support__linux.cc b/devel/electron6/files/patch-content_common_common__sandbox__support__linux.cc
new file mode 100644
index 000000000000..4dc909737019
--- /dev/null
+++ b/devel/electron6/files/patch-content_common_common__sandbox__support__linux.cc
@@ -0,0 +1,10 @@
+--- content/common/common_sandbox_support_linux.cc.orig 2019-09-10 10:42:37 UTC
++++ content/common/common_sandbox_support_linux.cc
+@@ -5,6 +5,7 @@
+ #include "content/public/common/common_sandbox_support_linux.h"
+
+ #include <sys/stat.h>
++#include <unistd.h>
+
+ #include <limits>
+ #include <memory>
diff --git a/devel/electron6/files/patch-content_common_user__agent.cc b/devel/electron6/files/patch-content_common_user__agent.cc
new file mode 100644
index 000000000000..ab6ed6986369
--- /dev/null
+++ b/devel/electron6/files/patch-content_common_user__agent.cc
@@ -0,0 +1,17 @@
+--- content/common/user_agent.cc.orig 2019-09-10 11:14:02 UTC
++++ content/common/user_agent.cc
+@@ -131,6 +131,14 @@ std::string BuildOSCpuInfo(bool include_android_build_
+ #endif
+ ); // NOLINT
+
++#if defined(OS_BSD)
++#if defined(__x86_64__)
++ base::StringAppendF(&os_cpu, "; Linux x86_64");
++#else
++ base::StringAppendF(&os_cpu, "; Linux i686");
++#endif
++#endif
++
+ return os_cpu;
+ }
+
diff --git a/devel/electron6/files/patch-content_gpu_BUILD.gn b/devel/electron6/files/patch-content_gpu_BUILD.gn
new file mode 100644
index 000000000000..c2b2607165ae
--- /dev/null
+++ b/devel/electron6/files/patch-content_gpu_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/gpu/BUILD.gn.orig 2019-09-10 11:14:02 UTC
++++ content/gpu/BUILD.gn
+@@ -124,7 +124,7 @@ target(link_target_type, "gpu_sources") {
+
+ # Use DRI on desktop Linux builds.
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+- (!is_chromecast || is_cast_desktop_build)) {
++ (!is_chromecast || is_cast_desktop_build) && !is_bsd) {
+ configs += [ "//build/config/linux/dri" ]
+ }
+ }
diff --git a/devel/electron6/files/patch-content_gpu_gpu__main.cc b/devel/electron6/files/patch-content_gpu_gpu__main.cc
new file mode 100644
index 000000000000..db081e0ad9e9
--- /dev/null
+++ b/devel/electron6/files/patch-content_gpu_gpu__main.cc
@@ -0,0 +1,47 @@
+--- content/gpu/gpu_main.cc.orig 2019-09-16 09:24:25 UTC
++++ content/gpu/gpu_main.cc
+@@ -79,7 +79,7 @@
+ #include "ui/gfx/x/x11_switches.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/gpu/gpu_sandbox_hook_linux.h"
+ #include "content/public/common/sandbox_init.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+@@ -112,7 +112,7 @@ namespace content {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread*,
+ const gpu::GPUInfo*,
+ const gpu::GpuPreferences&);
+@@ -173,7 +173,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHel
+ bool EnsureSandboxInitialized(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ return StartSandboxLinux(watchdog_thread, gpu_info, gpu_prefs);
+ #elif defined(OS_WIN)
+ return StartSandboxWindows(sandbox_info_);
+@@ -374,7 +374,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) {
+@@ -409,7 +409,7 @@ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdo
+
+ return res;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ bool StartSandboxWindows(const sandbox::SandboxInterfaceInfo* sandbox_info) {
diff --git a/devel/electron6/files/patch-content_gpu_gpu__sandbox__hook__linux.cc b/devel/electron6/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..598ad0c43a17
--- /dev/null
+++ b/devel/electron6/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
@@ -0,0 +1,58 @@
+--- content/gpu/gpu_sandbox_hook_linux.cc.orig 2019-09-10 11:14:02 UTC
++++ content/gpu/gpu_sandbox_hook_linux.cc
+@@ -95,8 +95,9 @@ static const char kLibV4lEncPluginPath[] =
+ "/usr/lib/libv4l/plugins/libv4l-encplugin.so";
+ #endif
+
+-constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
++constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL;
+
++#if !defined(OS_BSD)
+ void AddV4L2GpuWhitelist(
+ std::vector<BrokerFilePermission>* permissions,
+ const service_manager::SandboxSeccompBPF::Options& options) {
+@@ -287,8 +288,10 @@ std::vector<BrokerFilePermission> FilePermissionsForGp
+ AddStandardGpuWhiteList(&permissions);
+ return permissions;
+ }
++#endif
+
+ void LoadArmGpuLibraries() {
++#if !defined(OS_BSD)
+ // Preload the Mali library.
+ if (UseChromecastSandboxWhitelist()) {
+ for (const char* path : kWhitelistedChromecastPaths) {
+@@ -303,6 +306,7 @@ void LoadArmGpuLibraries() {
+ // Preload the Tegra V4L2 (video decode acceleration) library.
+ dlopen(kLibTegraPath, dlopen_flag);
+ }
++#endif
+ }
+
+ bool LoadAmdGpuLibraries() {
+@@ -358,6 +362,7 @@ bool LoadLibrariesForGpu(
+ return true;
+ }
+
++#if !defined(OS_BSD)
+ sandbox::syscall_broker::BrokerCommandSet CommandSetForGPU(
+ const service_manager::SandboxLinux::Options& options) {
+ sandbox::syscall_broker::BrokerCommandSet command_set;
+@@ -378,13 +383,17 @@ bool BrokerProcessPreSandboxHook(
+ service_manager::SetProcessTitleFromCommandLine(nullptr);
+ return true;
+ }
++#endif
+
+ } // namespace
+
+ bool GpuProcessPreSandboxHook(service_manager::SandboxLinux::Options options) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ service_manager::SandboxLinux::GetInstance()->StartBrokerProcess(
+ CommandSetForGPU(options), FilePermissionsForGpu(options),
+ base::BindOnce(BrokerProcessPreSandboxHook), options);
++#endif
+
+ if (!LoadLibrariesForGpu(options))
+ return false;
diff --git a/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc b/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
new file mode 100644
index 000000000000..81db41535b00
--- /dev/null
+++ b/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
@@ -0,0 +1,38 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.cc.orig 2019-09-10 11:14:02 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.cc
+@@ -20,7 +20,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -34,7 +34,7 @@ typedef struct CGFont* CGFontRef;
+ namespace content {
+
+ PpapiBlinkPlatformImpl::PpapiBlinkPlatformImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ =
+ sk_make_sp<font_service::FontLoader>(ChildThread::Get()->GetConnector());
+ SkFontConfigInterface::SetGlobal(font_loader_);
+@@ -49,7 +49,7 @@ PpapiBlinkPlatformImpl::~PpapiBlinkPlatformImpl() {
+ }
+
+ void PpapiBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -59,7 +59,7 @@ void PpapiBlinkPlatformImpl::Shutdown() {
+ }
+
+ blink::WebSandboxSupport* PpapiBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h b/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
new file mode 100644
index 000000000000..a23b18276861
--- /dev/null
+++ b/devel/electron6/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
@@ -0,0 +1,25 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.h.orig 2019-09-10 11:14:02 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "content/child/blink_platform_impl.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -41,11 +41,11 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImp
+ bool sync_dir) override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron6/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc b/devel/electron6/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
new file mode 100644
index 000000000000..efcbdbbaeb83
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
@@ -0,0 +1,11 @@
+--- content/public/app/v8_snapshot_overlay_manifest.cc.orig 2019-09-10 11:14:02 UTC
++++ content/public/app/v8_snapshot_overlay_manifest.cc
+@@ -15,7 +15,7 @@ namespace content {
+ const service_manager::Manifest& GetV8SnapshotOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest {
+ service_manager::ManifestBuilder()
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .PreloadFile(kV8NativesDataDescriptor,
+ base::FilePath(FILE_PATH_LITERAL("natives_blob.bin")))
+ #if defined(USE_V8_CONTEXT_SNAPSHOT)
diff --git a/devel/electron6/files/patch-content_public_common_child__process__host.h b/devel/electron6/files/patch-content_public_common_child__process__host.h
new file mode 100644
index 000000000000..9d280913ec74
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_child__process__host.h
@@ -0,0 +1,11 @@
+--- content/public/common/child_process_host.h.orig 2019-09-10 11:14:02 UTC
++++ content/public/common/child_process_host.h
+@@ -51,7 +51,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // No special behavior requested.
+ CHILD_NORMAL = 0,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Indicates that the child execed after forking may be execced from
+ // /proc/self/exe rather than using the "real" app path. This prevents
+ // autoupdate from confusing us if it changes the file out from under us.
diff --git a/devel/electron6/files/patch-content_public_common_common__param__traits__macros.h b/devel/electron6/files/patch-content_public_common_common__param__traits__macros.h
new file mode 100644
index 000000000000..5c231d8344f1
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_common__param__traits__macros.h
@@ -0,0 +1,11 @@
+--- content/public/common/common_param_traits_macros.h.orig 2019-09-10 11:14:02 UTC
++++ content/public/common/common_param_traits_macros.h
+@@ -329,7 +329,7 @@ IPC_STRUCT_TRAITS_BEGIN(blink::mojom::RendererPreferen
+ IPC_STRUCT_TRAITS_MEMBER(disable_client_blocked_error_page)
+ IPC_STRUCT_TRAITS_MEMBER(plugin_fullscreen_allowed)
+ IPC_STRUCT_TRAITS_MEMBER(network_contry_iso)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(system_font_family_name)
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron6/files/patch-content_public_common_content__features.cc b/devel/electron6/files/patch-content_public_common_content__features.cc
new file mode 100644
index 000000000000..ee5c8285b479
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_content__features.cc
@@ -0,0 +1,20 @@
+--- content/public/common/content_features.cc.orig 2019-09-10 11:14:02 UTC
++++ content/public/common/content_features.cc
+@@ -577,7 +577,7 @@ const base::Feature kWebAssemblyThreads {
+ };
+
+ // Enable WebAssembly trap handler.
+-#if (defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
++#if (defined(OS_BSD) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
+ defined(ARCH_CPU_X86_64)
+ const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+@@ -612,7 +612,7 @@ const base::Feature kWebAuthBle{"WebAuthenticationBle"
+ // https://w3c.github.io/webauthn
+ const base::Feature kWebAuthCable {
+ "WebAuthenticationCable",
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #else
+ base::FEATURE_ENABLED_BY_DEFAULT
diff --git a/devel/electron6/files/patch-content_public_common_content__switches.cc b/devel/electron6/files/patch-content_public_common_content__switches.cc
new file mode 100644
index 000000000000..ab4fbfb6ce59
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_content__switches.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.cc.orig 2019-09-10 11:14:02 UTC
++++ content/public/common/content_switches.cc
+@@ -949,7 +949,7 @@ const char kEnableAutomation[] = "enable-automation";
+ const char kDisablePanelFitting[] = "disable-panel-fitting";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ // Allows sending text-to-speech requests to speech-dispatcher, a common
+ // Linux speech service. Because it's buggy, the user must explicitly
+ // enable it so that visiting a random webpage can't cause instability.
diff --git a/devel/electron6/files/patch-content_public_common_content__switches.h b/devel/electron6/files/patch-content_public_common_content__switches.h
new file mode 100644
index 000000000000..48badac3cf24
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_content__switches.h
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.h.orig 2019-09-10 11:14:02 UTC
++++ content/public/common/content_switches.h
+@@ -268,7 +268,7 @@ CONTENT_EXPORT extern const char kRendererWaitForJavaD
+ CONTENT_EXPORT extern const char kDisablePanelFitting[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
+ #endif
+
diff --git a/devel/electron6/files/patch-content_public_common_use__zoom__for__dsf__policy.cc b/devel/electron6/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
new file mode 100644
index 000000000000..d04357175d12
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
@@ -0,0 +1,11 @@
+--- content/public/common/use_zoom_for_dsf_policy.cc.orig 2019-09-10 10:42:37 UTC
++++ content/public/common/use_zoom_for_dsf_policy.cc
+@@ -25,7 +25,7 @@ const base::Feature kUseZoomForDsfEnabledByDefault{
+ #endif
+
+ bool IsUseZoomForDSFEnabledByDefault() {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return true;
+ #elif defined(OS_WIN) || defined(OS_ANDROID)
+ return base::FeatureList::IsEnabled(kUseZoomForDsfEnabledByDefault);
diff --git a/devel/electron6/files/patch-content_public_test_browser__test__base.cc b/devel/electron6/files/patch-content_public_test_browser__test__base.cc
new file mode 100644
index 000000000000..9da10c001714
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_test_browser__test__base.cc
@@ -0,0 +1,13 @@
+--- content/public/test/browser_test_base.cc.orig 2019-09-10 11:14:02 UTC
++++ content/public/test/browser_test_base.cc
+@@ -75,6 +75,10 @@
+ #include "ui/views/test/event_generator_delegate_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#endif
++
+ #if defined(OS_POSIX)
+ #include "base/process/process_handle.h"
+ #endif
diff --git a/devel/electron6/files/patch-content_public_test_mock__render__thread.cc b/devel/electron6/files/patch-content_public_test_mock__render__thread.cc
new file mode 100644
index 000000000000..38b23cfb5045
--- /dev/null
+++ b/devel/electron6/files/patch-content_public_test_mock__render__thread.cc
@@ -0,0 +1,11 @@
+--- content/public/test/mock_render_thread.cc.orig 2019-09-10 11:14:02 UTC
++++ content/public/test/mock_render_thread.cc
+@@ -74,7 +74,7 @@ class MockRenderMessageFilterImpl : public mojom::Rend
+ std::move(callback).Run(false);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t platform_thread_id,
+ base::ThreadPriority thread_priority) override {}
+ #endif
diff --git a/devel/electron6/files/patch-content_renderer_media_audio_audio__device__factory.cc b/devel/electron6/files/patch-content_renderer_media_audio_audio__device__factory.cc
new file mode 100644
index 000000000000..5f0dbdc83610
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_media_audio_audio__device__factory.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/audio/audio_device_factory.cc.orig 2019-09-10 11:14:02 UTC
++++ content/renderer/media/audio/audio_device_factory.cc
+@@ -35,7 +35,7 @@ AudioDeviceFactory* AudioDeviceFactory::factory_ = nul
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Due to driver deadlock issues on Windows (http://crbug/422522) there is a
+ // chance device authorization response is never received from the browser side.
+ // In this case we will time out, to avoid renderer hang forever waiting for
diff --git a/devel/electron6/files/patch-content_renderer_media_stream_processed__local__audio__source.cc b/devel/electron6/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
new file mode 100644
index 000000000000..29bd870cdfd2
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_media_stream_processed__local__audio__source.cc
@@ -0,0 +1,20 @@
+--- content/renderer/media/stream/processed_local_audio_source.cc.orig 2019-09-10 11:14:03 UTC
++++ content/renderer/media/stream/processed_local_audio_source.cc
+@@ -80,7 +80,7 @@ void LogAudioProcesingProperties(
+ } // namespace
+
+ bool IsApmInAudioServiceEnabled() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return base::FeatureList::IsEnabled(features::kWebRtcApmInAudioService);
+ #else
+ return false;
+@@ -406,7 +406,7 @@ void ProcessedLocalAudioSource::CaptureUsingProcessor(
+ bool key_pressed) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ DCHECK_LE(volume, 1.0);
+-#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_OPENBSD)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // We have a special situation on Linux where the microphone volume can be
+ // "higher than maximum". The input volume slider in the sound preference
+ // allows the user to set a scaling that is higher than 100%. It means that
diff --git a/devel/electron6/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc b/devel/electron6/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
new file mode 100644
index 000000000000..24d24a010049
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc.orig 2019-09-10 11:14:03 UTC
++++ content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc
+@@ -204,7 +204,7 @@ TEST_F(WebRtcAudioRendererTest, MultipleRenderers) {
+ TEST_F(WebRtcAudioRendererTest, VerifySinkParameters) {
+ SetupRenderer(kDefaultOutputDeviceId);
+ renderer_proxy_->Start();
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ static const int kExpectedBufferSize = kHardwareSampleRate / 100;
+ #elif defined(OS_ANDROID)
+ static const int kExpectedBufferSize = 2 * kHardwareSampleRate / 100;
diff --git a/devel/electron6/files/patch-content_renderer_render__process__impl.cc b/devel/electron6/files/patch-content_renderer_render__process__impl.cc
new file mode 100644
index 000000000000..15abfa6a8793
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_render__process__impl.cc
@@ -0,0 +1,11 @@
+--- content/renderer/render_process_impl.cc.orig 2019-09-10 11:14:03 UTC
++++ content/renderer/render_process_impl.cc
+@@ -157,7 +157,7 @@ RenderProcessImpl::RenderProcessImpl()
+
+ SetV8FlagIfNotFeature(features::kWebAssemblyTrapHandler,
+ "--no-wasm-trap-handler");
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ if (base::FeatureList::IsEnabled(features::kWebAssemblyTrapHandler)) {
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ if (!command_line->HasSwitch(
diff --git a/devel/electron6/files/patch-content_renderer_render__thread__impl.cc b/devel/electron6/files/patch-content_renderer_render__thread__impl.cc
new file mode 100644
index 000000000000..8db6c3daf4bd
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_render__thread__impl.cc
@@ -0,0 +1,51 @@
+--- content/renderer/render_thread_impl.cc.orig 2019-09-16 09:24:24 UTC
++++ content/renderer/render_thread_impl.cc
+@@ -187,12 +187,21 @@
+ #include "mojo/public/cpp/bindings/message_dumper.h"
+ #endif
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
+ #endif
++#endif
+
++#if defined(OS_BSD)
++#include <stddef.h>
++#include <stdint.h>
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#endif
++
+ using base::ThreadRestrictions;
+ using blink::WebDocument;
+ using blink::WebFrame;
+@@ -907,7 +916,7 @@ void RenderThreadImpl::Init() {
+ DCHECK(parsed_num_raster_threads) << string_value;
+ DCHECK_GT(num_raster_threads, 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ categorized_worker_pool_->SetBackgroundingCallback(
+ main_thread_scheduler_->DefaultTaskRunner(),
+ base::BindOnce(
+@@ -939,7 +948,7 @@ void RenderThreadImpl::Init() {
+ GetConnector()->BindInterface(mojom::kBrowserServiceName,
+ mojo::MakeRequest(&storage_partition_service_));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ render_message_filter()->SetThreadPriority(
+ ChildProcess::current()->io_thread_id(), base::ThreadPriority::DISPLAY);
+ #endif
+@@ -1321,7 +1330,7 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl:
+ !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames);
+ #else
+ cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ const bool enable_media_stream_gpu_memory_buffers =
+ enable_gpu_memory_buffers &&
+ base::FeatureList::IsEnabled(
diff --git a/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.cc b/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.cc
new file mode 100644
index 000000000000..4c6b9b805a20
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/renderer_blink_platform_impl.cc.orig 2019-09-16 09:24:24 UTC
++++ content/renderer/renderer_blink_platform_impl.cc
+@@ -108,7 +108,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -199,7 +199,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ ->Clone();
+ thread_safe_sender_ = RenderThreadImpl::current()->thread_safe_sender();
+ blob_registry_.reset(new WebBlobRegistryImpl(thread_safe_sender_.get()));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ = sk_make_sp<font_service::FontLoader>(connector_.get());
+ SkFontConfigInterface::SetGlobal(font_loader_);
+ #endif
+@@ -208,7 +208,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ connector_ = service_manager::Connector::Create(&request);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (g_sandbox_enabled && sandboxEnabled()) {
+ #if defined(OS_MACOSX)
+ sandbox_support_.reset(new WebSandboxSupportMac(connector_.get()));
+@@ -236,7 +236,7 @@ RendererBlinkPlatformImpl::~RendererBlinkPlatformImpl(
+ }
+
+ void RendererBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -311,7 +311,7 @@ RendererBlinkPlatformImpl::CreateNetworkURLLoaderFacto
+
+ void RendererBlinkPlatformImpl::SetDisplayThreadPriority(
+ base::PlatformThreadId thread_id) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) {
+ render_thread->render_message_filter()->SetThreadPriority(
+ thread_id, base::ThreadPriority::DISPLAY);
+@@ -324,7 +324,7 @@ blink::BlameContext* RendererBlinkPlatformImpl::GetTop
+ }
+
+ blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ // These platforms do not require sandbox support.
diff --git a/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.h b/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.h
new file mode 100644
index 000000000000..cbd8752fe67f
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_renderer__blink__platform__impl.h
@@ -0,0 +1,29 @@
+--- content/renderer/renderer_blink_platform_impl.h.orig 2019-09-16 09:24:24 UTC
++++ content/renderer/renderer_blink_platform_impl.h
+@@ -30,7 +30,7 @@
+ #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
+ #include "third_party/blink/public/mojom/webdatabase/web_database.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -259,7 +259,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ std::unique_ptr<service_manager::Connector> connector_;
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+@@ -297,7 +297,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ std::unique_ptr<blink::WebTransmissionEncodingInfoHandler>
+ web_transmission_encoding_info_handler_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron6/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc b/devel/electron6/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
new file mode 100644
index 000000000000..63558a880f4d
--- /dev/null
+++ b/devel/electron6/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
@@ -0,0 +1,19 @@
+--- content/renderer/renderer_main_platform_delegate_linux.cc.orig 2019-09-10 10:42:37 UTC
++++ content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -30,6 +30,7 @@ void RendererMainPlatformDelegate::PlatformUninitializ
+ }
+
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if !defined(OS_BSD)
+ // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+ // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md
+ //
+@@ -65,7 +66,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
+ CHECK_EQ(errno, EPERM);
+ }
+ #endif // __x86_64__
+-
++#endif // ! OS_BSD
+ return true;
+ }
+
diff --git a/devel/electron6/files/patch-content_shell_BUILD.gn b/devel/electron6/files/patch-content_shell_BUILD.gn
new file mode 100644
index 000000000000..f1c4fb629328
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/shell/BUILD.gn.orig 2019-09-10 11:14:03 UTC
++++ content/shell/BUILD.gn
+@@ -961,7 +961,7 @@ group("content_shell_crash_test") {
+ if (is_win) {
+ data_deps += [ "//build/win:copy_cdb_to_output" ]
+ }
+- if (is_posix) {
++ if (is_posix && !is_bsd) {
+ data_deps += [
+ "//third_party/breakpad:dump_syms",
+ "//third_party/breakpad:minidump_stackwalk",
diff --git a/devel/electron6/files/patch-content_shell_app_shell__main__delegate.cc b/devel/electron6/files/patch-content_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..c25ca57b4a98
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_app_shell__main__delegate.cc
@@ -0,0 +1,20 @@
+--- content/shell/app/shell_main_delegate.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/app/shell_main_delegate.cc
+@@ -170,7 +170,7 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit
+
+ v8_crashpad_support::SetUp();
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ breakpad::SetFirstChanceExceptionHandler(v8::TryHandleWebAssemblyTrapPosix);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -314,7 +314,7 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit
+ }
+
+ void ShellMainDelegate::PreSandboxStartup() {
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
diff --git a/devel/electron6/files/patch-content_shell_browser_shell__browser__context.cc b/devel/electron6/files/patch-content_shell_browser_shell__browser__context.cc
new file mode 100644
index 000000000000..0672c8cd4988
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_browser_shell__browser__context.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_context.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/browser/shell_browser_context.cc
+@@ -32,7 +32,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -115,7 +115,7 @@ void ShellBrowserContext::InitWhileIOAllowed() {
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
+ path_ = path_.Append(std::wstring(L"content_shell"));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(
+ base::nix::GetXDGDirectory(env.get(),
diff --git a/devel/electron6/files/patch-content_shell_browser_shell__browser__main__parts.cc b/devel/electron6/files/patch-content_shell_browser_shell__browser__main__parts.cc
new file mode 100644
index 000000000000..b1eee7379aba
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_browser_shell__browser__main__parts.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_main_parts.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/browser/shell_browser_main_parts.cc
+@@ -48,7 +48,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -126,7 +126,7 @@ int ShellBrowserMainParts::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__context.cc b/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
new file mode 100644
index 000000000000..f988a15f7aee
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_context.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/browser/web_test/web_test_browser_context.cc
+@@ -27,7 +27,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
diff --git a/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc b/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
new file mode 100644
index 000000000000..773a827ec24f
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_main_parts.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/browser/web_test/web_test_browser_main_parts.cc
+@@ -37,7 +37,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
diff --git a/devel/electron6/files/patch-content_shell_test__runner_test__runner.cc b/devel/electron6/files/patch-content_shell_test__runner_test__runner.cc
new file mode 100644
index 000000000000..097c838a63eb
--- /dev/null
+++ b/devel/electron6/files/patch-content_shell_test__runner_test__runner.cc
@@ -0,0 +1,29 @@
+--- content/shell/test_runner/test_runner.cc.orig 2019-09-10 11:14:03 UTC
++++ content/shell/test_runner/test_runner.cc
+@@ -66,7 +66,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/skia_util.h"
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "third_party/blink/public/platform/web_font_render_style.h"
+ #endif
+
+@@ -1538,7 +1538,7 @@ void TestRunner::Reset() {
+ drag_image_.reset();
+
+ blink::WebSecurityPolicy::ClearOriginAccessList();
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ blink::WebFontRenderStyle::SetSubpixelPositioning(false);
+ #endif
+
+@@ -2065,7 +2065,7 @@ void TestRunner::AddOriginAccessAllowListEntry(
+ }
+
+ void TestRunner::SetTextSubpixelPositioning(bool value) {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Since FontConfig doesn't provide a variable to control subpixel
+ // positioning, we'll fall back to setting it globally for all fonts.
+ blink::WebFontRenderStyle::SetSubpixelPositioning(value);
diff --git a/devel/electron6/files/patch-content_test_content__test__suite.cc b/devel/electron6/files/patch-content_test_content__test__suite.cc
new file mode 100644
index 000000000000..c964c5f83822
--- /dev/null
+++ b/devel/electron6/files/patch-content_test_content__test__suite.cc
@@ -0,0 +1,18 @@
+--- content/test/content_test_suite.cc.orig 2019-09-10 10:42:37 UTC
++++ content/test/content_test_suite.cc
+@@ -81,6 +81,7 @@ void ContentTestSuite::Initialize() {
+ // to initialize GL, so don't do it here.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_child_process = command_line->HasSwitch(switches::kTestChildProcess);
++#if !defined(OS_BSD)
+ if (!is_child_process) {
+ gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
+ auto* gpu_feature_info = gpu::GetTestGpuThreadHolder()->GetGpuFeatureInfo();
+@@ -88,6 +89,7 @@ void ContentTestSuite::Initialize() {
+ gpu_feature_info->disabled_extensions);
+ gl::init::InitializeExtensionSettingsOneOffPlatform();
+ }
++#endif
+ testing::TestEventListeners& listeners =
+ testing::UnitTest::GetInstance()->listeners();
+ listeners.Append(new TestInitializationListener);
diff --git a/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc b/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
new file mode 100644
index 000000000000..58d2bd64c284
--- /dev/null
+++ b/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
@@ -0,0 +1,29 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.cc.orig 2019-09-10 11:14:03 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -17,7 +17,7 @@ namespace content {
+ UtilityBlinkPlatformWithSandboxSupportImpl::
+ UtilityBlinkPlatformWithSandboxSupportImpl(
+ service_manager::Connector* connector) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ = sk_make_sp<font_service::FontLoader>(connector);
+ SkFontConfigInterface::SetGlobal(font_loader_);
+ sandbox_support_ = std::make_unique<WebSandboxSupportLinux>(font_loader_);
+@@ -31,7 +31,7 @@ UtilityBlinkPlatformWithSandboxSupportImpl::
+
+ blink::WebSandboxSupport*
+ UtilityBlinkPlatformWithSandboxSupportImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h b/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
new file mode 100644
index 000000000000..9c80a85b3294
--- /dev/null
+++ b/devel/electron6/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
@@ -0,0 +1,24 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.h.orig 2019-09-10 10:42:37 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.h
+@@ -11,7 +11,7 @@
+ #include "build/build_config.h"
+ #include "third_party/blink/public/platform/platform.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -39,10 +39,10 @@ class UtilityBlinkPlatformWithSandboxSupportImpl : pub
+ blink::WebSandboxSupport* GetSandboxSupport() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron6/files/patch-device_bluetooth_BUILD.gn b/devel/electron6/files/patch-device_bluetooth_BUILD.gn
new file mode 100644
index 000000000000..0f528e130c23
--- /dev/null
+++ b/devel/electron6/files/patch-device_bluetooth_BUILD.gn
@@ -0,0 +1,11 @@
+--- device/bluetooth/BUILD.gn.orig 2019-09-10 11:14:03 UTC
++++ device/bluetooth/BUILD.gn
+@@ -274,7 +274,7 @@ component("bluetooth") {
+ ]
+ }
+
+- if (is_chromeos || is_linux) {
++ if (is_chromeos || (is_linux && !is_bsd)) {
+ if (use_dbus) {
+ sources += [
+ "bluez/bluetooth_adapter_bluez.cc",
diff --git a/devel/electron6/files/patch-device_gamepad_gamepad__provider.cc b/devel/electron6/files/patch-device_gamepad_gamepad__provider.cc
new file mode 100644
index 000000000000..afcce8fa7c36
--- /dev/null
+++ b/devel/electron6/files/patch-device_gamepad_gamepad__provider.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/gamepad_provider.cc.orig 2019-09-10 11:14:04 UTC
++++ device/gamepad/gamepad_provider.cc
+@@ -167,7 +167,7 @@ void GamepadProvider::Initialize(std::unique_ptr<Gamep
+
+ if (!polling_thread_)
+ polling_thread_.reset(new base::Thread("Gamepad polling thread"));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, the data fetcher needs to watch file descriptors, so the message
+ // loop needs to be a libevent loop.
+ const base::MessageLoop::Type kMessageLoopType = base::MessageLoop::TYPE_IO;
diff --git a/devel/electron6/files/patch-electron_BUILD.gn b/devel/electron6/files/patch-electron_BUILD.gn
new file mode 100644
index 000000000000..b128040b6ab8
--- /dev/null
+++ b/devel/electron6/files/patch-electron_BUILD.gn
@@ -0,0 +1,53 @@
+--- electron/BUILD.gn.orig 2019-11-05 00:13:02 UTC
++++ electron/BUILD.gn
+@@ -535,6 +535,15 @@ static_library("electron_lib") {
+ sources = filenames.lib_sources
+ set_sources_assignment_filter(sources_assignment_filter)
+
++ if (is_bsd) {
++ sources -= [
++ "atom/common/crash_reporter/crash_reporter_linux.cc",
++ "atom/common/crash_reporter/crash_reporter_linux.h",
++ "atom/common/crash_reporter/linux/crash_dump_handler.cc",
++ "atom/common/crash_reporter/linux/crash_dump_handler.h",
++ ]
++ }
++
+ if (is_component_build) {
+ defines += [ "NODE_SHARED_MODE" ]
+ }
+@@ -601,6 +610,12 @@ static_library("electron_lib") {
+
+ sources += filenames.lib_sources_nss
+ }
++ if (is_bsd) {
++ deps -= [
++ "//third_party/breakpad:client",
++ ]
++ include_dirs -= [ "//third_party/breakpad" ]
++ }
+ if (is_win) {
+ libs += [ "dwmapi.lib" ]
+ deps += [
+@@ -622,6 +637,12 @@ static_library("electron_lib") {
+ ]
+ deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
++ if (is_bsd) {
++ deps += [
++ "//ui/views/controls/webview",
++ "//ui/wm",
++ ]
++ }
+
+ if (enable_pdf) {
+ deps += [ "//pdf" ]
+@@ -1320,7 +1341,7 @@ dist_zip("electron_dist_zip") {
+ ":licenses",
+ ":electron_version",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//sandbox/linux:chrome_sandbox" ]
+ }
+ outputs = [
diff --git a/devel/electron6/files/patch-electron_atom_app_atom__main.cc b/devel/electron6/files/patch-electron_atom_app_atom__main.cc
new file mode 100644
index 000000000000..b14434d20224
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_app_atom__main.cc
@@ -0,0 +1,35 @@
+--- electron/atom/app/atom_main.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/app/atom_main.cc
+@@ -26,12 +26,12 @@
+ #include "base/win/windows_version.h"
+ #include "content/public/app/sandbox_helper_win.h"
+ #include "sandbox/win/src/sandbox_types.h"
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+ #include <unistd.h>
+ #include <cstdio>
+ #include "atom/app/atom_main_delegate.h" // NOLINT
+ #include "content/public/app/content_main.h"
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+ #include <mach-o/dyld.h>
+ #include <unistd.h>
+ #include <cstdio>
+@@ -168,7 +168,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, w
+ return content::ContentMain(params);
+ }
+
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
+@@ -189,7 +189,7 @@ int main(int argc, char* argv[]) {
+ return content::ContentMain(params);
+ }
+
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
diff --git a/devel/electron6/files/patch-electron_atom_app_atom__main__delegate.cc b/devel/electron6/files/patch-electron_atom_app_atom__main__delegate.cc
new file mode 100644
index 000000000000..d4785efedf83
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_app_atom__main__delegate.cc
@@ -0,0 +1,29 @@
+--- electron/atom/app/atom_main_delegate.cc.orig 2019-12-17 00:40:10 UTC
++++ electron/atom/app/atom_main_delegate.cc
+@@ -8,7 +8,7 @@
+ #include <memory>
+ #include <string>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
+@@ -204,7 +204,7 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_
+ base::win::PinUser32();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Check for --no-sandbox parameter when running as root.
+ if (getuid() == 0 && IsSandboxEnabled(command_line))
+ LOG(FATAL) << "Running as root without --"
+@@ -229,7 +229,7 @@ void AtomMainDelegate::PostEarlyInitialization(bool is
+ ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
+ if (!locale_file_path.empty()) {
+ custom_locale = locale;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
+ * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
+ g_setenv("LC_ALL", custom_locale.c_str(), TRUE);
diff --git a/devel/electron6/files/patch-electron_atom_browser_api_atom__api__app.cc b/devel/electron6/files/patch-electron_atom_browser_api_atom__api__app.cc
new file mode 100644
index 000000000000..6a3c8be1cf43
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_api_atom__api__app.cc
@@ -0,0 +1,38 @@
+--- electron/atom/browser/api/atom_api_app.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/api/atom_api_app.cc
+@@ -608,7 +608,7 @@ void App::OnWillFinishLaunching() {
+ }
+
+ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Set the application name for audio streams shown in external
+ // applications. Only affects pulseaudio currently.
+ media::AudioManager::SetGlobalAppName(Browser::Get()->GetName());
+@@ -890,7 +890,7 @@ void App::SetPath(mate::Arguments* args,
+ }
+
+ void App::SetDesktopName(const std::string& desktop_name) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ env->SetVar("CHROME_DESKTOP", desktop_name);
+ #endif
+@@ -1400,7 +1400,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
+ .SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("setAboutPanelOptions",
+ base::Bind(&Browser::SetAboutPanelOptions, browser))
+ .SetMethod("showAboutPanel",
+@@ -1418,7 +1418,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("getJumpListSettings", &App::GetJumpListSettings)
+ .SetMethod("setJumpList", &App::SetJumpList)
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("isUnityRunning",
+ base::Bind(&Browser::IsUnityRunning, browser))
+ #endif
diff --git a/devel/electron6/files/patch-electron_atom_browser_api_atom__api__web__contents.cc b/devel/electron6/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
new file mode 100644
index 000000000000..47d0a7cb3777
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_api_atom__api__web__contents.cc
@@ -0,0 +1,34 @@
+--- electron/atom/browser/api/atom_api_web_contents.cc.orig 2019-12-17 00:40:10 UTC
++++ electron/atom/browser/api/atom_api_web_contents.cc
+@@ -104,11 +104,11 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
+ #include "ui/gfx/font_render_params.h"
+ #endif
+@@ -421,7 +421,7 @@ void WebContents::InitWithSessionAndOptions(
+ auto* prefs = web_contents()->GetMutableRendererPrefs();
+ prefs->accept_languages = g_browser_process->GetApplicationLocale();
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Update font settings.
+ static const base::NoDestructor<gfx::FontRenderParams> params(
+ gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr));
+@@ -438,7 +438,7 @@ void WebContents::InitWithSessionAndOptions(
+ base::TimeDelta interval;
+ if (ui::TextInsertionCaretBlinkPeriod(&interval))
+ prefs->caret_blink_interval = interval;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
+ prefs->caret_blink_interval = linux_ui->GetCursorBlinkInterval();
diff --git a/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts.cc b/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts.cc
new file mode 100644
index 000000000000..e1e251c38488
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- electron/atom/browser/atom_browser_main_parts.cc.orig 2019-12-20 06:04:31 UTC
++++ electron/atom/browser/atom_browser_main_parts.cc
+@@ -6,7 +6,7 @@
+
+ #include <utility>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
diff --git a/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc b/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
new file mode 100644
index 000000000000..c9129161ffa1
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_atom__browser__main__parts__posix.cc
@@ -0,0 +1,20 @@
+--- electron/atom/browser/atom_browser_main_parts_posix.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/atom_browser_main_parts_posix.cc
+@@ -182,6 +182,9 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+@@ -189,6 +192,7 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ // shadow stacks) bloat the stack frames, so we need to increase the stack
+ // size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ // TODO(viettrungluu,willchan): crbug.com/29675 - This currently leaks, so
+ // if you change this, you'll probably need to change the suppression.
diff --git a/devel/electron6/files/patch-electron_atom_browser_atom__paths.h b/devel/electron6/files/patch-electron_atom_browser_atom__paths.h
new file mode 100644
index 000000000000..33d2b2bd68ef
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_atom__paths.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/atom_paths.h.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/atom_paths.h
+@@ -26,7 +26,7 @@ enum {
+ DIR_USER_CACHE, // Directory where user cache can be written.
+ DIR_APP_LOGS, // Directory where app logs live
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_APP_DATA, // Application Data directory under the user profile.
+ #else
+ DIR_APP_DATA = base::DIR_APP_DATA,
diff --git a/devel/electron6/files/patch-electron_atom_browser_browser.h b/devel/electron6/files/patch-electron_atom_browser_browser.h
new file mode 100644
index 000000000000..9ac8e78ded88
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_browser.h
@@ -0,0 +1,33 @@
+--- electron/atom/browser/browser.h.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/browser.h
+@@ -182,7 +182,7 @@ class Browser : public WindowListObserver {
+
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ void ShowAboutPanel();
+ void SetAboutPanelOptions(const base::DictionaryValue& options);
+ #endif
+@@ -215,10 +215,10 @@ class Browser : public WindowListObserver {
+ PCWSTR GetAppUserModelID();
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Whether Unity launcher is running.
+ bool IsUnityRunning();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Tell the application to open a file.
+ bool OpenFile(const std::string& file_path);
+@@ -301,7 +301,7 @@ class Browser : public WindowListObserver {
+
+ std::unique_ptr<util::Promise> ready_promise_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::DictionaryValue about_panel_options_;
+ #endif
+
diff --git a/devel/electron6/files/patch-electron_atom_browser_native__window__views.cc b/devel/electron6/files/patch-electron_atom_browser_native__window__views.cc
new file mode 100644
index 000000000000..e705447b18d6
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_native__window__views.cc
@@ -0,0 +1,47 @@
+--- electron/atom/browser/native_window_views.cc.orig 2020-02-21 13:27:02 UTC
++++ electron/atom/browser/native_window_views.cc
+@@ -304,7 +304,7 @@ NativeWindowViews::NativeWindowViews(const mate::Dicti
+ last_window_state_ = ui::SHOW_STATE_NORMAL;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Listen to move events.
+ aura::Window* window = GetNativeWindow();
+ if (window)
+@@ -320,7 +320,7 @@ NativeWindowViews::~NativeWindowViews() {
+ SetForwardMouseMessages(false);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1229,7 +1229,7 @@ void NativeWindowViews::OnWidgetBoundsChanged(views::W
+ }
+
+ void NativeWindowViews::OnWidgetDestroying(views::Widget* widget) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1322,7 +1322,7 @@ void NativeWindowViews::OnWidgetMove() {
+ void NativeWindowViews::HandleKeyboardEvent(
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (event.windows_key_code == ui::VKEY_BROWSER_BACK)
+ NotifyWindowExecuteAppCommand(kBrowserBackward);
+ else if (event.windows_key_code == ui::VKEY_BROWSER_FORWARD)
+@@ -1334,7 +1334,7 @@ void NativeWindowViews::HandleKeyboardEvent(
+ root_view_->HandleKeyEvent(event);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* event) {
+ if (event->type() != ui::ET_MOUSE_PRESSED)
+ return;
diff --git a/devel/electron6/files/patch-electron_atom_browser_native__window__views.h b/devel/electron6/files/patch-electron_atom_browser_native__window__views.h
new file mode 100644
index 000000000000..c9ca3e4f597b
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_native__window__views.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/native_window_views.h.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/native_window_views.h
+@@ -206,7 +206,7 @@ class NativeWindowViews : public NativeWindow,
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // ui::EventHandler:
+ void OnMouseEvent(ui::MouseEvent* event) override;
+ #endif
diff --git a/devel/electron6/files/patch-electron_atom_browser_relauncher__linux.cc b/devel/electron6/files/patch-electron_atom_browser_relauncher__linux.cc
new file mode 100644
index 000000000000..6827f38083dd
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_relauncher__linux.cc
@@ -0,0 +1,32 @@
+--- electron/atom/browser/relauncher_linux.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/relauncher_linux.cc
+@@ -6,8 +6,10 @@
+
+ #include <fcntl.h>
+ #include <signal.h>
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
+ #include <sys/signalfd.h>
++#endif
+
+ #include "base/files/file_util.h"
+ #include "base/files/scoped_file.h"
+@@ -26,6 +28,10 @@ void RelauncherSynchronizeWithParent() {
+ base::ScopedFD relauncher_sync_fd(kRelauncherSyncFD);
+ static const auto signum = SIGUSR2;
+
++#if defined(__FreeBSD__)
++ PLOG(ERROR) << "signalfd & prctl";
++ fprintf(stderr, "Not Implemented signalfd & prctl in atom/browser/relauncher_linux.cc");
++#else
+ // send signum to current process when parent process ends.
+ if (HANDLE_EINTR(prctl(PR_SET_PDEATHSIG, signum)) != 0) {
+ PLOG(ERROR) << "prctl";
+@@ -50,6 +56,7 @@ void RelauncherSynchronizeWithParent() {
+
+ // Wait for the parent to exit
+ parentWaiter.Wait();
++#endif
+ }
+
+ int LaunchProgram(const StringVector& relauncher_args,
diff --git a/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc b/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc
new file mode 100644
index 000000000000..c8d29a85b3cc
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.cc
@@ -0,0 +1,38 @@
+--- electron/atom/browser/ui/views/atom_views_delegate.cc.orig 2019-11-20 23:42:47 UTC
++++ electron/atom/browser/ui/views/atom_views_delegate.cc
+@@ -9,7 +9,7 @@
+ #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+ #include "ui/views/widget/native_widget_aura.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -17,7 +17,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool IsDesktopEnvironmentUnity() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::nix::DesktopEnvironment desktop_env =
+@@ -53,7 +53,7 @@ void ViewsDelegate::NotifyMenuItemFocused(const base::
+ int item_count,
+ bool has_submenu) {}
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return NULL;
+ }
+@@ -85,7 +85,7 @@ void ViewsDelegate::OnBeforeWidgetInit(
+ }
+
+ bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Ubuntu Unity, the system always provides a title bar for maximized
+ // windows.
+ if (!maximized)
diff --git a/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h b/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h
new file mode 100644
index 000000000000..b5015d12de1e
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_ui_views_atom__views__delegate.h
@@ -0,0 +1,11 @@
+--- electron/atom/browser/ui/views/atom_views_delegate.h.orig 2019-11-20 23:42:47 UTC
++++ electron/atom/browser/ui/views/atom_views_delegate.h
+@@ -40,7 +40,7 @@ class ViewsDelegate : public views::ViewsDelegate {
+ bool IsWindowInMetro(gfx::NativeWindow window) const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ base::OnceClosure callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ #endif
+ views::NonClientFrameView* CreateDefaultNonClientFrameView(
diff --git a/devel/electron6/files/patch-electron_atom_browser_ui_views_submenu__button.cc b/devel/electron6/files/patch-electron_atom_browser_ui_views_submenu__button.cc
new file mode 100644
index 000000000000..47a74cfd3b84
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_browser_ui_views_submenu__button.cc
@@ -0,0 +1,11 @@
+--- electron/atom/browser/ui/views/submenu_button.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/browser/ui/views/submenu_button.cc
+@@ -25,7 +25,7 @@ SubmenuButton::SubmenuButton(const base::string16& tit
+ : views::MenuButton(gfx::RemoveAcceleratorChar(title, '&', NULL, NULL),
+ menu_button_listener),
+ background_color_(background_color) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dont' use native style border.
+ SetBorder(CreateDefaultBorder());
+ #endif
diff --git a/devel/electron6/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc b/devel/electron6/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
new file mode 100644
index 000000000000..a91984f2570a
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_api_atom__api__crash__reporter.cc
@@ -0,0 +1,42 @@
+--- electron/atom/common/api/atom_api_crash_reporter.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/api/atom_api_crash_reporter.cc
+@@ -35,15 +35,23 @@ struct Converter<CrashReporter::UploadReportResult> {
+ namespace {
+
+ void AddExtraParameter(const std::string& key, const std::string& value) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->AddExtraParameter(key, value);
++#endif
+ }
+
+ void RemoveExtraParameter(const std::string& key) {
++#if !defined(OS_BSD)
+ CrashReporter::GetInstance()->RemoveExtraParameter(key);
++#endif
+ }
+
+ std::map<std::string, std::string> GetParameters() {
++#if !defined(OS_BSD)
+ return CrashReporter::GetInstance()->GetParameters();
++#else
++ return std::map<std::string, std::string>();
++#endif
+ }
+
+ void Initialize(v8::Local<v8::Object> exports,
+@@ -51,6 +59,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ v8::Local<v8::Context> context,
+ void* priv) {
+ mate::Dictionary dict(context->GetIsolate(), exports);
++#if !defined(OS_BSD)
+ auto reporter = base::Unretained(CrashReporter::GetInstance());
+ dict.SetMethod("start", base::Bind(&CrashReporter::Start, reporter));
+ dict.SetMethod("addExtraParameter", &AddExtraParameter);
+@@ -62,6 +71,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ base::Bind(&CrashReporter::SetUploadToServer, reporter));
+ dict.SetMethod("getUploadToServer",
+ base::Bind(&CrashReporter::GetUploadToServer, reporter));
++#endif
+ }
+
+ } // namespace
diff --git a/devel/electron6/files/patch-electron_atom_common_api_electron__bindings.cc b/devel/electron6/files/patch-electron_atom_common_api_electron__bindings.cc
new file mode 100644
index 000000000000..aa63e211d446
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_api_electron__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/api/electron_bindings.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/api/electron_bindings.cc
+@@ -275,7 +275,7 @@ void ElectronBindings::DidReceiveMemoryDump(
+ if (base::GetCurrentProcId() == dump.pid()) {
+ mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
+ const auto& osdump = dump.os_dump();
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ dict.Set("residentSet", osdump.resident_set_kb);
+ #endif
+ dict.Set("private", osdump.private_footprint_kb);
diff --git a/devel/electron6/files/patch-electron_atom_common_atom__command__line.cc b/devel/electron6/files/patch-electron_atom_common_atom__command__line.cc
new file mode 100644
index 000000000000..0c8f5e2b86d3
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_atom__command__line.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/atom_command_line.cc
+@@ -26,7 +26,7 @@ void AtomCommandLine::Init(int argc, base::CommandLine
+ argv_.assign(argv, argv + argc);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AtomCommandLine::InitializeFromCommandLine() {
+ argv_ = base::CommandLine::ForCurrentProcess()->argv();
diff --git a/devel/electron6/files/patch-electron_atom_common_atom__command__line.h b/devel/electron6/files/patch-electron_atom_common_atom__command__line.h
new file mode 100644
index 000000000000..94cd2e45806f
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_atom__command__line.h
@@ -0,0 +1,11 @@
+--- electron/atom/common/atom_command_line.h.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/atom_command_line.h
+@@ -21,7 +21,7 @@ class AtomCommandLine {
+
+ static void Init(int argc, base::CommandLine::CharType** argv);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux the command line has to be read from base::CommandLine since
+ // it is using zygote.
+ static void InitializeFromCommandLine();
diff --git a/devel/electron6/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc b/devel/electron6/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
new file mode 100644
index 000000000000..1978ae3dd69c
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_crash__reporter_crash__reporter.cc
@@ -0,0 +1,14 @@
+--- electron/atom/common/crash_reporter/crash_reporter.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/crash_reporter/crash_reporter.cc
+@@ -127,7 +127,11 @@ CrashReporter* CrashReporter::GetInstance() {
+ #endif
+
+ void CrashReporter::StartInstance(const mate::Dictionary& options) {
++#if !defined(OS_BSD)
+ auto* reporter = GetInstance();
++#else
++ CrashReporter *reporter = NULL;
++#endif
+ if (!reporter)
+ return;
+
diff --git a/devel/electron6/files/patch-electron_atom_common_node__bindings.cc b/devel/electron6/files/patch-electron_atom_common_node__bindings.cc
new file mode 100644
index 000000000000..295b1acd6404
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_node__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/atom/common/node_bindings.cc.orig 2019-11-05 00:13:02 UTC
++++ electron/atom/common/node_bindings.cc
+@@ -210,7 +210,7 @@ void NodeBindings::Initialize() {
+ node::g_standalone_mode = browser_env_ == BROWSER;
+ node::g_upstream_node_mode = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Get real command line in renderer process forked by zygote.
+ if (browser_env_ != BROWSER)
+ AtomCommandLine::InitializeFromCommandLine();
diff --git a/devel/electron6/files/patch-electron_atom_common_node__bindings__linux.cc b/devel/electron6/files/patch-electron_atom_common_node__bindings__linux.cc
new file mode 100644
index 000000000000..79e342e4521d
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_node__bindings__linux.cc
@@ -0,0 +1,69 @@
+--- electron/atom/common/node_bindings_linux.cc.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/node_bindings_linux.cc
+@@ -4,17 +4,31 @@
+
+ #include "atom/common/node_bindings_linux.h"
+
++#if !defined(OS_BSD)
+ #include <sys/epoll.h>
++#else
++#include <errno.h>
++#include <sys/select.h>
++#include <sys/sysctl.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#endif
+
+ namespace atom {
+
+ NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironment browser_env)
++#if !defined(OS_BSD)
+ : NodeBindings(browser_env), epoll_(epoll_create(1)) {
++#else
++ : NodeBindings(browser_env) {
++#endif
++#if !defined(OS_BSD)
+ int backend_fd = uv_backend_fd(uv_loop_);
+ struct epoll_event ev = {0};
+ ev.events = EPOLLIN;
+ ev.data.fd = backend_fd;
+ epoll_ctl(epoll_, EPOLL_CTL_ADD, backend_fd, &ev);
++#endif
+ }
+
+ NodeBindingsLinux::~NodeBindingsLinux() {}
+@@ -37,6 +51,7 @@ void NodeBindingsLinux::OnWatcherQueueChanged(uv_loop_
+ }
+
+ void NodeBindingsLinux::PollEvents() {
++#if !defined(OS_BSD)
+ int timeout = uv_backend_timeout(uv_loop_);
+
+ // Wait for new libuv events.
+@@ -45,6 +60,26 @@ void NodeBindingsLinux::PollEvents() {
+ struct epoll_event ev;
+ r = epoll_wait(epoll_, &ev, 1, timeout);
+ } while (r == -1 && errno == EINTR);
++#else
++ struct timeval tv;
++ int timeout = uv_backend_timeout(uv_loop_);
++ if (timeout != -1) {
++ tv.tv_sec = timeout / 1000;
++ tv.tv_usec = (timeout % 1000) * 1000;
++ }
++
++ fd_set readset;
++ int fd = uv_backend_fd(uv_loop_);
++ FD_ZERO(&readset);
++ FD_SET(fd, &readset);
++
++ // Wait for new libuv events.
++ int r;
++ do {
++ r = select(fd + 1, &readset, nullptr, nullptr,
++ timeout == -1 ? nullptr : &tv);
++ } while (r == -1 && errno == EINTR);
++#endif
+ }
+
+ // static
diff --git a/devel/electron6/files/patch-electron_atom_common_platform__util.h b/devel/electron6/files/patch-electron_atom_common_platform__util.h
new file mode 100644
index 000000000000..392d2155258c
--- /dev/null
+++ b/devel/electron6/files/patch-electron_atom_common_platform__util.h
@@ -0,0 +1,11 @@
+--- electron/atom/common/platform_util.h.orig 2019-09-11 17:30:11 UTC
++++ electron/atom/common/platform_util.h
+@@ -64,7 +64,7 @@ bool GetLoginItemEnabled();
+ bool SetLoginItemEnabled(bool enabled);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a success flag.
+ // Unlike libgtkui, does *not* use "chromium-browser.desktop" as a fallback.
+ bool GetDesktopName(std::string* setme);
diff --git a/devel/electron6/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc b/devel/electron6/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..47eb447edf27
--- /dev/null
+++ b/devel/electron6/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,20 @@
+--- electron/chromium_src/chrome/browser/process_singleton_posix.cc.orig 2019-12-17 00:40:10 UTC
++++ electron/chromium_src/chrome/browser/process_singleton_posix.cc
+@@ -95,7 +95,7 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -862,7 +862,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ // The other process is shutting down, it's safe to start a new process.
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron6/files/patch-electron_default__app_default__app.ts b/devel/electron6/files/patch-electron_default__app_default__app.ts
new file mode 100644
index 000000000000..60fd3019ab7e
--- /dev/null
+++ b/devel/electron6/files/patch-electron_default__app_default__app.ts
@@ -0,0 +1,11 @@
+--- electron/default_app/default_app.ts.orig 2019-09-11 17:30:11 UTC
++++ electron/default_app/default_app.ts
+@@ -63,7 +63,7 @@ async function createWindow () {
+ show: false
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ options.icon = path.join(__dirname, 'icon.png')
+ }
+
diff --git a/devel/electron6/files/patch-electron_lib_browser_api_dialog.js b/devel/electron6/files/patch-electron_lib_browser_api_dialog.js
new file mode 100644
index 000000000000..c81502f3649e
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_browser_api_dialog.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/dialog.js.orig 2019-09-11 17:30:11 UTC
++++ electron/lib/browser/api/dialog.js
+@@ -28,7 +28,7 @@ const normalizeAccessKey = (text) => {
+ // existing single underscores with a second underscore, replace double
+ // ampersands with a single ampersand, and replace a single ampersand with
+ // a single underscore
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return text.replace(/_/g, '__').replace(/&(.?)/g, (match, after) => {
+ if (after === '&') return after
+ return `_${after}`
diff --git a/devel/electron6/files/patch-electron_lib_browser_api_menu-item-roles.js b/devel/electron6/files/patch-electron_lib_browser_api_menu-item-roles.js
new file mode 100644
index 000000000000..d35ba80b5fc2
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_browser_api_menu-item-roles.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/menu-item-roles.js.orig 2019-09-11 17:30:11 UTC
++++ electron/lib/browser/api/menu-item-roles.js
+@@ -4,7 +4,7 @@ const { app } = require('electron')
+
+ const isMac = process.platform === 'darwin'
+ const isWindows = process.platform === 'win32'
+-const isLinux = process.platform === 'linux'
++const isLinux = (process.platform === 'linux' || process.platform === 'freebsd')
+
+ const roles = {
+ about: {
diff --git a/devel/electron6/files/patch-electron_lib_browser_api_power-monitor.js b/devel/electron6/files/patch-electron_lib_browser_api_power-monitor.js
new file mode 100644
index 000000000000..abb42a25d426
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_browser_api_power-monitor.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/power-monitor.js.orig 2019-09-11 17:30:11 UTC
++++ electron/lib/browser/api/power-monitor.js
+@@ -9,7 +9,7 @@ Object.setPrototypeOf(PowerMonitor.prototype, EventEmi
+ EventEmitter.call(powerMonitor)
+
+ // On Linux we need to call blockShutdown() to subscribe to shutdown event.
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ powerMonitor.on('newListener', (event) => {
+ if (event === 'shutdown' && powerMonitor.listenerCount('shutdown') === 0) {
+ powerMonitor.blockShutdown()
diff --git a/devel/electron6/files/patch-electron_lib_browser_init.ts b/devel/electron6/files/patch-electron_lib_browser_init.ts
new file mode 100644
index 000000000000..df480c5941f0
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_browser_init.ts
@@ -0,0 +1,11 @@
+--- electron/lib/browser/init.ts.orig 2019-09-11 17:30:11 UTC
++++ electron/lib/browser/init.ts
+@@ -174,7 +174,7 @@ const mainStartupScript = packageJson.main || 'index.j
+ const KNOWN_XDG_DESKTOP_VALUES = ['Pantheon', 'Unity:Unity7', 'pop:GNOME']
+
+ function currentPlatformSupportsAppIndicator () {
+- if (process.platform !== 'linux') return false
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') return false
+ const currentDesktop = process.env.XDG_CURRENT_DESKTOP
+
+ if (!currentDesktop) return false
diff --git a/devel/electron6/files/patch-electron_lib_browser_rpc-server.js b/devel/electron6/files/patch-electron_lib_browser_rpc-server.js
new file mode 100644
index 000000000000..9156a71c1539
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_browser_rpc-server.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/rpc-server.js.orig 2019-12-17 00:40:10 UTC
++++ electron/lib/browser/rpc-server.js
+@@ -481,7 +481,7 @@ const allowedClipboardMethods = (() => {
+ switch (process.platform) {
+ case 'darwin':
+ return new Set(['readFindText', 'writeFindText'])
+- case 'linux':
++ case 'linux': case 'freebsd':
+ return new Set(Object.keys(clipboard))
+ default:
+ return new Set()
diff --git a/devel/electron6/files/patch-electron_lib_common_api_clipboard.js b/devel/electron6/files/patch-electron_lib_common_api_clipboard.js
new file mode 100644
index 000000000000..6cb8dda7ee40
--- /dev/null
+++ b/devel/electron6/files/patch-electron_lib_common_api_clipboard.js
@@ -0,0 +1,11 @@
+--- electron/lib/common/api/clipboard.js.orig 2019-09-11 17:30:11 UTC
++++ electron/lib/common/api/clipboard.js
+@@ -14,7 +14,7 @@ if (process.type === 'renderer') {
+ }
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // On Linux we could not access clipboard in renderer process.
+ for (const method of Object.keys(clipboard)) {
+ clipboard[method] = makeRemoteMethod(method)
diff --git a/devel/electron6/files/patch-electron_script_lib_config.py b/devel/electron6/files/patch-electron_script_lib_config.py
new file mode 100644
index 000000000000..09e1291e98a2
--- /dev/null
+++ b/devel/electron6/files/patch-electron_script_lib_config.py
@@ -0,0 +1,12 @@
+--- electron/script/lib/config.py.orig 2019-12-20 06:16:27 UTC
++++ electron/script/lib/config.py
+@@ -21,6 +21,9 @@ PLATFORM = {
+ 'cygwin': 'win32',
+ 'darwin': 'darwin',
+ 'linux2': 'linux',
++ 'freebsd11': 'freebsd',
++ 'freebsd12': 'freebsd',
++ 'freebsd13': 'freebsd',
+ 'win32': 'win32',
+ }[sys.platform]
+
diff --git a/devel/electron6/files/patch-electron_script_lib_utils.js b/devel/electron6/files/patch-electron_script_lib_utils.js
new file mode 100644
index 000000000000..ac35e2230d58
--- /dev/null
+++ b/devel/electron6/files/patch-electron_script_lib_utils.js
@@ -0,0 +1,11 @@
+--- electron/script/lib/utils.js.orig 2019-12-17 00:40:10 UTC
++++ electron/script/lib/utils.js
+@@ -14,7 +14,7 @@ function getElectronExec () {
+ return `out/${OUT_DIR}/Electron.app/Contents/MacOS/Electron`
+ case 'win32':
+ return `out/${OUT_DIR}/electron.exe`
+- case 'linux':
++ case 'linux': case 'freebsd':
+ return `out/${OUT_DIR}/electron`
+ default:
+ throw new Error('Unknown platform')
diff --git a/devel/electron6/files/patch-electron_script_spec-runner.js b/devel/electron6/files/patch-electron_script_spec-runner.js
new file mode 100644
index 000000000000..56662219674a
--- /dev/null
+++ b/devel/electron6/files/patch-electron_script_spec-runner.js
@@ -0,0 +1,11 @@
+--- electron/script/spec-runner.js.orig 2019-12-20 06:08:27 UTC
++++ electron/script/spec-runner.js
+@@ -114,7 +114,7 @@ async function runElectronTests () {
+ async function runRemoteBasedElectronTests () {
+ let exe = path.resolve(BASE, utils.getElectronExec())
+ const runnerArgs = ['electron/spec', ...unknownArgs.slice(2)]
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ runnerArgs.unshift(path.resolve(__dirname, 'dbus_mock.py'), exe)
+ exe = 'python'
+ }
diff --git a/devel/electron6/files/patch-electron_spec-main_api-app-spec.ts b/devel/electron6/files/patch-electron_spec-main_api-app-spec.ts
new file mode 100644
index 000000000000..f2fe356b3ac3
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec-main_api-app-spec.ts
@@ -0,0 +1,83 @@
+--- electron/spec-main/api-app-spec.ts.orig 2019-12-17 00:40:10 UTC
++++ electron/spec-main/api-app-spec.ts
+@@ -112,7 +112,7 @@ describe('app module', () => {
+ describe('app.getLocaleCountryCode()', () => {
+ it('should be empty or have length of two', () => {
+ let expectedLength = 2
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // Linux CI machines have no locale.
+ expectedLength = 0
+ }
+@@ -172,7 +172,7 @@ describe('app module', () => {
+ })
+
+ it('exits gracefully', async function () {
+- if (!['darwin', 'linux'].includes(process.platform)) {
++ if (!['darwin', 'linux', 'freebsd'].includes(process.platform)) {
+ this.skip()
+ return
+ }
+@@ -515,7 +515,7 @@ describe('app module', () => {
+ describe('app.setBadgeCount', () => {
+ const platformIsNotSupported =
+ (process.platform === 'win32') ||
+- (process.platform === 'linux' && !app.isUnityRunning())
++ ((process.platform === 'linux' || process.platform === 'freebsd') && !app.isUnityRunning())
+ const platformIsSupported = !platformIsNotSupported
+
+ const expectedBadgeCount = 42
+@@ -569,7 +569,7 @@ describe('app module', () => {
+ ]
+
+ before(function () {
+- if (process.platform === 'linux' || process.mas) this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.mas) this.skip()
+ })
+
+ beforeEach(() => {
+@@ -645,7 +645,7 @@ describe('app module', () => {
+ })
+
+ describe('accessibilitySupportEnabled property', () => {
+- if (process.platform === 'linux') return
++ if (process.platform === 'linux' || process.platform === 'freebsd') return
+
+ it('returns whether the Chrome has accessibility APIs enabled', () => {
+ expect(app.accessibilitySupportEnabled).to.be.a('boolean')
+@@ -716,7 +716,7 @@ describe('app module', () => {
+ let w: BrowserWindow
+
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -910,7 +910,7 @@ describe('app module', () => {
+ // doesn't affect nested `describe`s.
+ beforeEach(function () {
+ // FIXME Get these specs running on Linux CI
+- if (process.platform === 'linux' && isCI) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && isCI) {
+ this.skip()
+ }
+ })
+@@ -1067,7 +1067,7 @@ describe('app module', () => {
+
+ it('succeeds with complete GPUInfo', async () => {
+ const completeInfo = await getGPUInfo('complete')
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // For linux and macOS complete info is same as basic info
+ await verifyBasicGPUInfo(completeInfo)
+ const basicInfo = await getGPUInfo('basic')
+@@ -1095,7 +1095,7 @@ describe('app module', () => {
+ const socketPath = process.platform === 'win32' ? '\\\\.\\pipe\\electron-mixed-sandbox' : '/tmp/electron-mixed-sandbox'
+
+ beforeEach(function (done) {
+- if (process.platform === 'linux' && (process.arch === 'arm64' || process.arch === 'arm')) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && (process.arch === 'arm64' || process.arch === 'arm')) {
+ // Our ARM tests are run on VSTS rather than CircleCI, and the Docker
+ // setup on VSTS disallows syscalls that Chrome requires for setting up
+ // sandboxing.
diff --git a/devel/electron6/files/patch-electron_spec_api-auto-updater-spec.js b/devel/electron6/files/patch-electron_spec_api-auto-updater-spec.js
new file mode 100644
index 000000000000..f6c3e595b65e
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-auto-updater-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-auto-updater-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-auto-updater-spec.js
+@@ -140,7 +140,7 @@ describe('autoUpdater module', function () {
+
+ describe('error event', () => {
+ it('serializes correctly over the remote module', function (done) {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return done()
diff --git a/devel/electron6/files/patch-electron_spec_api-browser-window-spec.js b/devel/electron6/files/patch-electron_spec_api-browser-window-spec.js
new file mode 100644
index 000000000000..8e9e369723e2
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-browser-window-spec.js
@@ -0,0 +1,56 @@
+--- electron/spec/api-browser-window-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-browser-window-spec.js
+@@ -1219,7 +1219,7 @@ describe('BrowserWindow module', () => {
+ describe('BrowserWindow.setOpacity(opacity)', () => {
+ describe('Windows and Mac', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -1251,7 +1251,7 @@ describe('BrowserWindow module', () => {
+
+ describe('Linux', () => {
+ before(function () {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -1351,7 +1351,7 @@ describe('BrowserWindow module', () => {
+
+ describe('enableLargerThanScreen" option', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -2028,7 +2028,7 @@ describe('BrowserWindow module', () => {
+ expect(test.version).to.equal(remote.process.version)
+ expect(test.versions).to.deep.equal(remote.process.versions)
+
+- if (process.platform === 'linux' && test.osSandbox) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && test.osSandbox) {
+ expect(test.creationTime).to.be.null()
+ expect(test.systemMemoryInfo).to.be.null()
+ } else {
+@@ -2486,7 +2486,7 @@ describe('BrowserWindow module', () => {
+ w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
+ })
+ it('visibilityState changes when window is minimized', function (done) {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // FIXME(alexeykuzmin): Skip the test instead of marking it as passed.
+ // afterEach hook won't be run if a test is skipped dynamically.
+ // If afterEach isn't run current window won't be destroyed
+@@ -2915,7 +2915,7 @@ describe('BrowserWindow module', () => {
+ // - `.skip()` called in the 'beforeEach' hook prevents 'afterEach'
+ // hook from being called.
+ // Not implemented on Linux.
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return
+ }
+
diff --git a/devel/electron6/files/patch-electron_spec_api-clipboard-spec.js b/devel/electron6/files/patch-electron_spec_api-clipboard-spec.js
new file mode 100644
index 000000000000..f747b3d14c16
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-clipboard-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-clipboard-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-clipboard-spec.js
+@@ -27,7 +27,7 @@ describe('clipboard module', () => {
+ describe('clipboard.readHTML()', () => {
+ it('returns markup correctly', () => {
+ const text = '<string>Hi</string>'
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>'
+ clipboard.writeHTML(text)
+ expect(clipboard.readHTML()).to.equal(markup)
+ })
+@@ -43,7 +43,7 @@ describe('clipboard module', () => {
+
+ describe('clipboard.readBookmark', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -69,7 +69,7 @@ describe('clipboard module', () => {
+ const rtf = '{\\rtf1\\utf8 text}'
+ const p = path.join(fixtures, 'assets', 'logo.png')
+ const i = nativeImage.createFromPath(p)
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>'
+ const bookmark = { title: 'a title', url: 'test' }
+ clipboard.write({
+ text: 'test',
+@@ -84,7 +84,7 @@ describe('clipboard module', () => {
+ expect(clipboard.readRTF()).to.equal(rtf)
+ expect(clipboard.readImage().toDataURL()).to.equal(i.toDataURL())
+
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ expect(clipboard.readBookmark()).to.deep.equal(bookmark)
+ }
+ })
diff --git a/devel/electron6/files/patch-electron_spec_api-content-tracing-spec.js b/devel/electron6/files/patch-electron_spec_api-content-tracing-spec.js
new file mode 100644
index 000000000000..821628dbdd35
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-content-tracing-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-content-tracing-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-content-tracing-spec.js
+@@ -22,7 +22,7 @@ const getPathInATempFolder = (filename) => {
+ describe('contentTracing', () => {
+ beforeEach(function () {
+ // FIXME: The tests are skipped on arm/arm64.
+- if (process.platform === 'linux' &&
++ if ((process.platform === 'linux' || process.platform === 'freebsd') &&
+ ['arm', 'arm64'].includes(process.arch)) {
+ this.skip()
+ }
diff --git a/devel/electron6/files/patch-electron_spec_api-crash-reporter-spec.js b/devel/electron6/files/patch-electron_spec_api-crash-reporter-spec.js
new file mode 100644
index 000000000000..869cbd03ed16
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-crash-reporter-spec.js
@@ -0,0 +1,92 @@
+--- electron/spec/api-crash-reporter-spec.js.orig 2019-11-05 00:13:02 UTC
++++ electron/spec/api-crash-reporter-spec.js
+@@ -16,7 +16,7 @@ describe('crashReporter module', () => {
+ if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return
+
+ // TODO(alexeykuzmin): [Ch66] Fails. Fix it and enable back.
+- if (process.platform === 'linux') return
++ if (process.platform === 'linux' || process.platform === 'freebsd') return
+
+ let originalTempDirectory = null
+ let tempDirectory = null
+@@ -86,7 +86,7 @@ describe('crashReporter module', () => {
+ let dumpFile
+ let crashesDir = crashReporter.getCrashesDirectory()
+ const existingDumpFiles = new Set()
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ // crashpad puts the dump files in the "completed" subdirectory
+ if (process.platform === 'darwin') {
+ crashesDir = path.join(crashesDir, 'completed')
+@@ -97,7 +97,7 @@ describe('crashReporter module', () => {
+ }
+ const testDone = (uploaded) => {
+ if (uploaded) return done(new Error('Uploaded crash report'))
+- if (process.platform !== 'linux') crashReporter.setUploadToServer(true)
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') crashReporter.setUploadToServer(true)
+ assert(fs.existsSync(dumpFile))
+ done()
+ }
+@@ -263,7 +263,7 @@ describe('crashReporter module', () => {
+ assert.throws(() => require('electron').crashReporter.getUploadToServer())
+ })
+ it('returns true when uploadToServer is set to true', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -277,7 +277,7 @@ describe('crashReporter module', () => {
+ assert.strictEqual(crashReporter.getUploadToServer(), true)
+ })
+ it('returns false when uploadToServer is set to false', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -298,7 +298,7 @@ describe('crashReporter module', () => {
+ assert.throws(() => require('electron').crashReporter.setUploadToServer('arg'))
+ })
+ it('sets uploadToServer false when called with false', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -313,7 +313,7 @@ describe('crashReporter module', () => {
+ assert.strictEqual(crashReporter.getUploadToServer(), false)
+ })
+ it('sets uploadToServer true when called with true', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -340,7 +340,7 @@ describe('crashReporter module', () => {
+ assert(typeof parameters === 'object')
+ })
+ it('adds a parameter to current parameters', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -355,7 +355,7 @@ describe('crashReporter module', () => {
+ assert('hello' in crashReporter.getParameters())
+ })
+ it('removes a parameter from current parameters', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -446,7 +446,7 @@ const startServer = ({ callback, processType, done })
+ server.listen(port, '127.0.0.1', () => {
+ port = server.address().port
+ remote.process.port = port
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ crashReporter.start({
+ companyName: 'Umbrella Corporation',
+ submitURL: 'http://127.0.0.1:' + port
diff --git a/devel/electron6/files/patch-electron_spec_api-net-log-spec.js b/devel/electron6/files/patch-electron_spec_api-net-log-spec.js
new file mode 100644
index 000000000000..ad2a9e69b88c
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-net-log-spec.js
@@ -0,0 +1,29 @@
+--- electron/spec/api-net-log-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-net-log-spec.js
+@@ -127,7 +127,7 @@ describe('netLog module', () => {
+ })
+
+ it('should begin and end logging automatically when --log-net-log is passed', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -148,7 +148,7 @@ describe('netLog module', () => {
+
+ // FIXME(deepak1556): Ch69 follow up.
+ it('should begin and end logging automtically when --log-net-log is passed, and behave correctly when .startLogging() and .stopLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -171,7 +171,7 @@ describe('netLog module', () => {
+ })
+
+ it('should end logging automatically when only .startLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
diff --git a/devel/electron6/files/patch-electron_spec_api-notification-dbus-spec.js b/devel/electron6/files/patch-electron_spec_api-notification-dbus-spec.js
new file mode 100644
index 000000000000..b0ad9c1fbb79
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-notification-dbus-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-notification-dbus-spec.js.orig 2019-12-17 00:40:10 UTC
++++ electron/spec/api-notification-dbus-spec.js
+@@ -13,7 +13,7 @@ const Promise = require('bluebird')
+ const { remote } = require('electron')
+ const { app } = remote
+
+-const skip = process.platform !== 'linux' ||
++const skip = process.platform !== 'linux' || process.platform !== 'freebsd' ||
+ process.arch === 'ia32' ||
+ process.arch.indexOf('arm') === 0 ||
+ !process.env.DBUS_SESSION_BUS_ADDRESS;
diff --git a/devel/electron6/files/patch-electron_spec_api-power-monitor-spec.js b/devel/electron6/files/patch-electron_spec_api-power-monitor-spec.js
new file mode 100644
index 000000000000..1a18a65aed3d
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-power-monitor-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-power-monitor-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-power-monitor-spec.js
+@@ -14,7 +14,7 @@ const Promise = require('bluebird')
+ const { expect } = chai
+ chai.use(dirtyChai)
+
+-const skip = process.platform !== 'linux' || !process.env.DBUS_SYSTEM_BUS_ADDRESS
++const skip = (process.platform !== 'linux' && process.platform !== 'freebsd') || !process.env.DBUS_SYSTEM_BUS_ADDRESS
+
+ describe('powerMonitor', () => {
+ let logindMock, dbusMockPowerMonitor, getCalls, emitSignal, reset
diff --git a/devel/electron6/files/patch-electron_spec_api-process-spec.js b/devel/electron6/files/patch-electron_spec_api-process-spec.js
new file mode 100644
index 000000000000..79c6a2955e09
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-process-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-process-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-process-spec.js
+@@ -42,7 +42,7 @@ describe('process module', () => {
+ it('resolves promise successfully with valid data', async () => {
+ const memoryInfo = await process.getProcessMemoryInfo()
+ expect(memoryInfo).to.be.an('object')
+- if (process.platform === 'linux' || process.platform === 'windows') {
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'windows') {
+ expect(memoryInfo.residentSet).to.be.a('number').greaterThan(0)
+ }
+ expect(memoryInfo.private).to.be.a('number').greaterThan(0)
diff --git a/devel/electron6/files/patch-electron_spec_api-screen-spec.js b/devel/electron6/files/patch-electron_spec_api-screen-spec.js
new file mode 100644
index 000000000000..6c4979cb0fec
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-screen-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-screen-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-screen-spec.js
+@@ -17,7 +17,7 @@ describe('screen module', () => {
+ })
+
+ it('has the correct non-object properties', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.a.property('scaleFactor').that.is.a('number')
+@@ -33,7 +33,7 @@ describe('screen module', () => {
+ })
+
+ it('has a size object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.a.property('size').that.is.an('object')
+@@ -43,7 +43,7 @@ describe('screen module', () => {
+ })
+
+ it('has a workAreaSize object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.a.property('workAreaSize').that.is.an('object')
+@@ -53,7 +53,7 @@ describe('screen module', () => {
+ })
+
+ it('has a bounds object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.a.property('bounds').that.is.an('object')
diff --git a/devel/electron6/files/patch-electron_spec_api-shell-spec.js b/devel/electron6/files/patch-electron_spec_api-shell-spec.js
new file mode 100644
index 000000000000..cb44d036b138
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_api-shell-spec.js
@@ -0,0 +1,34 @@
+--- electron/spec/api-shell-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/api-shell-spec.js
+@@ -37,7 +37,7 @@ describe('shell module', () => {
+ await closeWindow(w)
+ w = null
+ // reset env vars to prevent side effects
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ process.env.DE = envVars.de
+ process.env.BROWSER = envVars.browser
+ process.env.DISPLAY = envVars.display
+@@ -52,6 +52,11 @@ describe('shell module', () => {
+ process.env.DE = 'generic'
+ process.env.DISPLAY = ''
+ requestReceived = Promise.resolve()
++ } else if (process.platform === 'freebsd') {
++ process.env.BROWSER = '/usr/bin/true'
++ process.env.DE = 'generic'
++ process.env.DISPLAY = ''
++ requestReceived = Promise.resolve()
+ } else if (process.platform === 'darwin') {
+ // On the Mac CI machines, Safari tries to ask for a password to the
+ // code signing keychain we set up to test code signing (see
+@@ -79,6 +84,10 @@ describe('shell module', () => {
+ if (process.platform === 'linux') {
+ process.env.DE = 'generic'
+ process.env.DE = '/bin/true'
++ process.env.DISPLAY = ''
++ } else if (process.platform === 'freebsd') {
++ process.env.BROWSER = '/usr/bin/true'
++ process.env.DE = 'generic'
+ process.env.DISPLAY = ''
+ }
+
diff --git a/devel/electron6/files/patch-electron_spec_chromium-spec.js b/devel/electron6/files/patch-electron_spec_chromium-spec.js
new file mode 100644
index 000000000000..4fad0d2a9c44
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_chromium-spec.js
@@ -0,0 +1,27 @@
+--- electron/spec/chromium-spec.js.orig 2019-11-20 23:42:47 UTC
++++ electron/spec/chromium-spec.js
+@@ -866,7 +866,7 @@ describe('chromium feature', () => {
+ })
+
+ it('can be get as context in canvas', () => {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return
+@@ -1550,12 +1550,13 @@ describe('font fallback', () => {
+ expect(fonts[0].familyName).to.equal({
+ 'win32': 'Arial',
+ 'darwin': 'Helvetica',
+- 'linux': 'DejaVu Sans' // I think this depends on the distro? We don't specify a default.
++ 'linux': 'DejaVu Sans', // I think this depends on the distro? We don't specify a default.
++ 'freebsd': 'DejaVu Sans'
+ }[process.platform])
+ })
+
+ it('should fall back to Japanese font for sans-serif Japanese script', async function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return this.skip()
+ }
+ const html = `
diff --git a/devel/electron6/files/patch-electron_spec_fixtures_api_crash-restart.html b/devel/electron6/files/patch-electron_spec_fixtures_api_crash-restart.html
new file mode 100644
index 000000000000..f5fa58fca19f
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_fixtures_api_crash-restart.html
@@ -0,0 +1,11 @@
+--- electron/spec/fixtures/api/crash-restart.html.orig 2019-12-20 06:13:48 UTC
++++ electron/spec/fixtures/api/crash-restart.html
+@@ -19,7 +19,7 @@ crashReporter.start({
+ })
+
+ setImmediate(() => {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ crashReporter.addExtraParameter('extra2', 'extra2')
+ crashReporter.removeExtraParameter('extra3')
+ } else {
diff --git a/devel/electron6/files/patch-electron_spec_node-spec.js b/devel/electron6/files/patch-electron_spec_node-spec.js
new file mode 100644
index 000000000000..d2dba41064db
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_node-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/node-spec.js.orig 2019-09-16 09:55:33 UTC
++++ electron/spec/node-spec.js
+@@ -157,7 +157,7 @@ describe('node feature', () => {
+ })
+
+ describe('child_process.exec', () => {
+- (process.platform === 'linux' ? it : it.skip)('allows executing a setuid binary from non-sandboxed renderer', () => {
++ (process.platform === 'linux' || process.platform === 'freebsd' ? it : it.skip)('allows executing a setuid binary from non-sandboxed renderer', () => {
+ // Chrome uses prctl(2) to set the NO_NEW_PRIVILEGES flag on Linux (see
+ // https://github.com/torvalds/linux/blob/40fde647cc/Documentation/userspace-api/no_new_privs.rst).
+ // We disable this for unsandboxed processes, which the remote tests
diff --git a/devel/electron6/files/patch-electron_spec_version-bump-spec.js b/devel/electron6/files/patch-electron_spec_version-bump-spec.js
new file mode 100644
index 000000000000..85c9e268fc5f
--- /dev/null
+++ b/devel/electron6/files/patch-electron_spec_version-bump-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/version-bump-spec.js.orig 2019-09-11 17:30:11 UTC
++++ electron/spec/version-bump-spec.js
+@@ -51,7 +51,7 @@ describeFn('bump-version script', () => {
+ const betaPattern = /[0-9.]*(-beta[0-9.]*)/g
+
+ before(function () {
+- if (process.platform === 'linux' && process.arch === 'arm') {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && process.arch === 'arm') {
+ this.skip()
+ }
+ })
diff --git a/devel/electron6/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc b/devel/electron6/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
new file mode 100644
index 000000000000..d74f371a9e87
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/declarative_webrequest/webrequest_action.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -29,7 +29,11 @@
+ #include "extensions/common/extension.h"
+ #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+ #include "net/http/http_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using content::ResourceRequestInfo;
+ using extension_web_request_api_helpers::EventResponseDelta;
diff --git a/devel/electron6/files/patch-extensions_browser_api_messaging_message__service.cc b/devel/electron6/files/patch-extensions_browser_api_messaging_message__service.cc
new file mode 100644
index 000000000000..059b8a7f9074
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_browser_api_messaging_message__service.cc
@@ -0,0 +1,34 @@
+--- extensions/browser/api/messaging/message_service.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/browser/api/messaging/message_service.cc
+@@ -61,7 +61,7 @@ namespace {
+
+ const char kReceivingEndDoesntExistError[] =
+ "Could not establish connection. Receiving end does not exist.";
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kMissingPermissionError[] =
+ "Access to native messaging requires nativeMessaging permission.";
+ const char kProhibitedByPoliciesError[] =
+@@ -383,7 +383,7 @@ void MessageService::OpenChannelToNativeApp(
+ if (!opener_port->IsValidPort())
+ return;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ bool has_permission = extension->permissions_data()->HasAPIPermission(
+ APIPermission::kNativeMessaging);
+ if (!has_permission) {
+@@ -433,11 +433,11 @@ void MessageService::OpenChannelToNativeApp(
+ channel->opener->IncrementLazyKeepaliveCount();
+
+ AddChannel(std::move(channel), receiver_port_id);
+-#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ const char kNativeMessagingNotSupportedError[] =
+ "Native Messaging is not supported on this platform.";
+ opener_port->DispatchOnDisconnect(kNativeMessagingNotSupportedError);
+-#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ }
+
+ void MessageService::OpenChannelToTab(const ChannelEndpoint& source,
diff --git a/devel/electron6/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc b/devel/electron6/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
new file mode 100644
index 000000000000..9533cc1a277e
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/networking_private/networking_private_delegate_factory.cc.orig 2019-09-10 10:42:38 UTC
++++ extensions/browser/api/networking_private/networking_private_delegate_factory.cc
+@@ -11,7 +11,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "extensions/browser/api/networking_private/networking_private_linux.h"
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ #include "components/wifi/wifi_service.h"
+@@ -61,7 +61,7 @@ KeyedService* NetworkingPrivateDelegateFactory::BuildS
+ NetworkingPrivateDelegate* delegate;
+ #if defined(OS_CHROMEOS)
+ delegate = new NetworkingPrivateChromeOS(browser_context);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ delegate = new NetworkingPrivateLinux();
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ std::unique_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
diff --git a/devel/electron6/files/patch-extensions_browser_api_web__request_form__data__parser.cc b/devel/electron6/files/patch-extensions_browser_api_web__request_form__data__parser.cc
new file mode 100644
index 000000000000..cf2c5fdd52f8
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_browser_api_web__request_form__data__parser.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/web_request/form_data_parser.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/browser/api/web_request/form_data_parser.cc
+@@ -15,7 +15,11 @@
+ #include "base/values.h"
+ #include "net/base/escape.h"
+ #include "net/http/http_request_headers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::DictionaryValue;
+ using base::ListValue;
diff --git a/devel/electron6/files/patch-extensions_browser_browser__context__keyed__service__factories.cc b/devel/electron6/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..b7f950a21f60
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
@@ -0,0 +1,11 @@
+--- extensions/browser/browser_context_keyed_service_factories.cc.orig 2019-09-10 10:42:38 UTC
++++ extensions/browser/browser_context_keyed_service_factories.cc
+@@ -84,7 +84,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ NetworkingConfigServiceFactory::GetInstance();
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ NetworkingPrivateEventRouterFactory::GetInstance();
+ #endif
+ PowerAPI::GetFactoryInstance();
diff --git a/devel/electron6/files/patch-extensions_common_api___permission__features.json b/devel/electron6/files/patch-extensions_common_api___permission__features.json
new file mode 100644
index 000000000000..c5f0c7eaf0be
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_api___permission__features.json
@@ -0,0 +1,29 @@
+--- extensions/common/api/_permission_features.json.orig 2019-09-10 11:14:04 UTC
++++ extensions/common/api/_permission_features.json
+@@ -135,7 +135,7 @@
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+- "platforms": ["chromeos", "win", "mac", "linux"],
++ "platforms": ["chromeos", "win", "mac", "linux", "bsd"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/387169
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/387169
+@@ -469,7 +469,7 @@
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+@@ -500,7 +500,7 @@
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ // DO NOT ADD ANY MORE ENTRIES HERE.
+ // networkingPrivate is being migrated to networking.onc.
diff --git a/devel/electron6/files/patch-extensions_common_api_runtime.json b/devel/electron6/files/patch-extensions_common_api_runtime.json
new file mode 100644
index 000000000000..06144fcc2350
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_api_runtime.json
@@ -0,0 +1,11 @@
+--- extensions/common/api/runtime.json.orig 2019-09-10 10:42:38 UTC
++++ extensions/common/api/runtime.json
+@@ -67,7 +67,7 @@
+ "id": "PlatformOs",
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+- "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
++ "enum": ["mac", "win", "android", "cros", "linux", "freebsd", "openbsd"]
+ },
+ {
+ "id": "PlatformArch",
diff --git a/devel/electron6/files/patch-extensions_common_feature__switch.cc b/devel/electron6/files/patch-extensions_common_feature__switch.cc
new file mode 100644
index 000000000000..c7ac2f0611d4
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_feature__switch.cc
@@ -0,0 +1,14 @@
+--- extensions/common/feature_switch.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/common/feature_switch.cc
+@@ -44,11 +44,7 @@ class CommonSwitches {
+ FeatureSwitch::DEFAULT_ENABLED),
+ load_media_router_component_extension(
+ kLoadMediaRouterComponentExtensionFlag,
+-#if defined(GOOGLE_CHROME_BUILD)
+ FeatureSwitch::DEFAULT_ENABLED)
+-#else
+- FeatureSwitch::DEFAULT_DISABLED)
+-#endif // defined(GOOGLE_CHROME_BUILD)
+ {
+ }
+
diff --git a/devel/electron6/files/patch-extensions_common_features_feature.cc b/devel/electron6/files/patch-extensions_common_features_feature.cc
new file mode 100644
index 000000000000..1ad77162cc2e
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_features_feature.cc
@@ -0,0 +1,11 @@
+--- extensions/common/features/feature.cc.orig 2019-09-10 10:42:38 UTC
++++ extensions/common/features/feature.cc
+@@ -20,7 +20,7 @@ namespace extensions {
+ Feature::Platform Feature::GetCurrentPlatform() {
+ #if defined(OS_CHROMEOS)
+ return CHROMEOS_PLATFORM;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return LINUX_PLATFORM;
+ #elif defined(OS_MACOSX)
+ return MACOSX_PLATFORM;
diff --git a/devel/electron6/files/patch-extensions_common_image__util.cc b/devel/electron6/files/patch-extensions_common_image__util.cc
new file mode 100644
index 000000000000..e6cf91786183
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_image__util.cc
@@ -0,0 +1,14 @@
+--- extensions/common/image_util.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/common/image_util.cc
+@@ -18,7 +18,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/time/time.h"
+ #include "base/timer/elapsed_timer.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkCanvas.h"
+ #include "third_party/skia/include/core/SkColor.h"
diff --git a/devel/electron6/files/patch-extensions_common_stack__frame.cc b/devel/electron6/files/patch-extensions_common_stack__frame.cc
new file mode 100644
index 000000000000..3244ed918012
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_common_stack__frame.cc
@@ -0,0 +1,14 @@
+--- extensions/common/stack_frame.cc.orig 2019-09-10 10:42:38 UTC
++++ extensions/common/stack_frame.cc
+@@ -7,7 +7,11 @@
+ #include <string>
+
+ #include "base/strings/utf_string_conversions.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace extensions {
+
diff --git a/devel/electron6/files/patch-extensions_renderer_bindings_api__binding__util.cc b/devel/electron6/files/patch-extensions_renderer_bindings_api__binding__util.cc
new file mode 100644
index 000000000000..3166c6ab2d77
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_renderer_bindings_api__binding__util.cc
@@ -0,0 +1,11 @@
+--- extensions/renderer/bindings/api_binding_util.cc.orig 2019-09-10 10:42:38 UTC
++++ extensions/renderer/bindings/api_binding_util.cc
+@@ -129,6 +129,8 @@ std::string GetPlatformString() {
+ return "mac";
+ #elif defined(OS_WIN)
+ return "win";
++#elif defined(OS_BSD)
++ return "bsd";
+ #else
+ NOTREACHED();
+ return std::string();
diff --git a/devel/electron6/files/patch-extensions_shell_app_shell__main__delegate.cc b/devel/electron6/files/patch-extensions_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..127e04ef20b8
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_shell_app_shell__main__delegate.cc
@@ -0,0 +1,29 @@
+--- extensions/shell/app/shell_main_delegate.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/shell/app/shell_main_delegate.cc
+@@ -38,7 +38,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -52,7 +52,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ extensions::ShellCrashReporterClient* GetCrashReporterClient() {
+ static base::NoDestructor<extensions::ShellCrashReporterClient> instance;
+ return instance.get();
+@@ -70,7 +70,7 @@ base::FilePath GetDataPath() {
+ return cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
+
+ base::FilePath data_dir;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ data_dir = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.cc b/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
new file mode 100644
index 000000000000..5422e85a429d
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
@@ -0,0 +1,20 @@
+--- extensions/shell/browser/shell_extensions_api_client.cc.orig 2019-09-10 11:14:04 UTC
++++ extensions/shell/browser/shell_extensions_api_client.cc
+@@ -15,7 +15,7 @@
+ #include "extensions/shell/browser/shell_virtual_keyboard_delegate.h"
+ #include "extensions/shell/browser/shell_web_view_guest_delegate.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "extensions/shell/browser/api/file_system/shell_file_system_delegate.h"
+ #endif
+
+@@ -46,7 +46,7 @@ ShellExtensionsAPIClient::CreateVirtualKeyboardDelegat
+ return std::make_unique<ShellVirtualKeyboardDelegate>();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* ShellExtensionsAPIClient::GetFileSystemDelegate() {
+ if (!file_system_delegate_)
+ file_system_delegate_ = std::make_unique<ShellFileSystemDelegate>();
diff --git a/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.h b/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.h
new file mode 100644
index 000000000000..897bf1b3eb84
--- /dev/null
+++ b/devel/electron6/files/patch-extensions_shell_browser_shell__extensions__api__client.h
@@ -0,0 +1,19 @@
+--- extensions/shell/browser/shell_extensions_api_client.h.orig 2019-09-10 11:14:04 UTC
++++ extensions/shell/browser/shell_extensions_api_client.h
+@@ -30,14 +30,14 @@ class ShellExtensionsAPIClient : public ExtensionsAPIC
+ WebViewGuest* web_view_guest) const override;
+ std::unique_ptr<VirtualKeyboardDelegate> CreateVirtualKeyboardDelegate(
+ content::BrowserContext* browser_context) const override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* GetFileSystemDelegate() override;
+ #endif
+ MessagingDelegate* GetMessagingDelegate() override;
+ FeedbackPrivateDelegate* GetFeedbackPrivateDelegate() override;
+
+ private:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<FileSystemDelegate> file_system_delegate_;
+ #endif
+ std::unique_ptr<MessagingDelegate> messaging_delegate_;
diff --git a/devel/electron6/files/patch-google__apis_gcm_engine_heartbeat__manager.cc b/devel/electron6/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
new file mode 100644
index 000000000000..944a07f48960
--- /dev/null
+++ b/devel/electron6/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
@@ -0,0 +1,53 @@
+--- google_apis/gcm/engine/heartbeat_manager.cc.orig 2019-09-10 11:14:04 UTC
++++ google_apis/gcm/engine/heartbeat_manager.cc
+@@ -32,13 +32,13 @@ const int kMinClientHeartbeatIntervalMs = 1000 * 30;
+ // Minimum time spent sleeping before we force a new heartbeat.
+ const int kMinSuspendTimeMs = 1000 * 10; // 10 seconds.
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The period at which to check if the heartbeat time has passed. Used to
+ // protect against platforms where the timer is delayed by the system being
+ // suspended. Only needed on linux because the other OSes provide a standard
+ // way to be notified of system suspend and resume events.
+ const int kHeartbeatMissedCheckMs = 1000 * 60 * 5; // 5 minutes.
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace
+
+@@ -188,7 +188,7 @@ void HeartbeatManager::RestartTimer() {
+ base::Bind(&HeartbeatManager::OnHeartbeatTriggered,
+ weak_ptr_factory_.GetWeakPtr()));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Windows, Mac, Android, iOS, and Chrome OS all provide a way to be notified
+ // when the system is suspending or resuming. The only one that does not is
+ // Linux so we need to poll to check for missed heartbeats.
+@@ -197,7 +197,7 @@ void HeartbeatManager::RestartTimer() {
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::CheckForMissedHeartbeat() {
+@@ -213,14 +213,14 @@ void HeartbeatManager::CheckForMissedHeartbeat() {
+ return;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Otherwise check again later.
+ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
+ FROM_HERE,
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::UpdateHeartbeatInterval() {
diff --git a/devel/electron6/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc b/devel/electron6/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..d74a59fe236f
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/common/gpu_memory_buffer_support.cc.orig 2019-09-10 11:14:05 UTC
++++ gpu/command_buffer/common/gpu_memory_buffer_support.cc
+@@ -89,7 +89,7 @@ bool IsImageSizeValidForGpuMemoryBufferFormat(const gf
+ uint32_t GetPlatformSpecificTextureTarget() {
+ #if defined(OS_MACOSX)
+ return GL_TEXTURE_RECTANGLE_ARB;
+-#elif defined(OS_ANDROID) || defined(OS_LINUX)
++#elif defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ return GL_TEXTURE_EXTERNAL_OES;
+ #elif defined(OS_WIN) || defined(OS_FUCHSIA)
+ return GL_TEXTURE_2D;
diff --git a/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc b/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
new file mode 100644
index 000000000000..c1f8bf94da92
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
@@ -0,0 +1,29 @@
+--- gpu/command_buffer/service/external_vk_image_backing.cc.orig 2019-09-10 11:14:05 UTC
++++ gpu/command_buffer/service/external_vk_image_backing.cc
+@@ -26,7 +26,7 @@
+ #include "gpu/vulkan/fuchsia/vulkan_fuchsia_ext.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+ #endif
+
+@@ -439,7 +439,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ #if defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ if (!texture_) {
+ VkMemoryGetFdInfoKHR get_fd_info;
+ get_fd_info.sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
+@@ -502,7 +502,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ }
+ return std::make_unique<ExternalVkImageGlRepresentation>(
+ manager, this, tracker, texture_, texture_->service_id());
+-#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA)
++#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ #error Unsupported OS
+ #endif
+ }
diff --git a/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc b/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
new file mode 100644
index 000000000000..a14388b3e6d7
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/service/external_vk_image_gl_representation.cc.orig 2019-09-10 11:14:05 UTC
++++ gpu/command_buffer/service/external_vk_image_gl_representation.cc
+@@ -128,7 +128,7 @@ GLuint ExternalVkImageGlRepresentation::ImportVkSemaph
+ #if defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return 0;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ if (handle.vk_handle_type() !=
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT) {
+ DLOG(ERROR) << "Importing semaphore handle of unexpected type:"
+@@ -143,7 +143,7 @@ GLuint ExternalVkImageGlRepresentation::ImportVkSemaph
+ fd.release());
+
+ return gl_semaphore;
+-#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX)
++#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX) && !defined(OS_BSD)
+ #error Unsupported OS
+ #endif
+ }
diff --git a/devel/electron6/files/patch-gpu_command__buffer_service_program__manager.cc b/devel/electron6/files/patch-gpu_command__buffer_service_program__manager.cc
new file mode 100644
index 000000000000..e1cfa61ce0de
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_service_program__manager.cc
@@ -0,0 +1,14 @@
+--- gpu/command_buffer/service/program_manager.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/command_buffer/service/program_manager.cc
+@@ -30,7 +30,11 @@
+ #include "gpu/command_buffer/service/program_cache.h"
+ #include "gpu/command_buffer/service/shader_manager.h"
+ #include "gpu/config/gpu_preferences.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/progress_reporter.h"
+
diff --git a/devel/electron6/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
new file mode 100644
index 000000000000..747f9b9e4809
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
+@@ -593,7 +593,7 @@ class GLCopyTextureCHROMIUMES3Test : public GLCopyText
+
+ bool ShouldSkipNorm16() const {
+ DCHECK(!ShouldSkipTest());
+-#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)) && \
++#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)) && \
+ (defined(ARCH_CPU_X86) || defined(ARCH_CPU_X86_64))
+ // Make sure it's tested; it is safe to assume that the flag is always true
+ // on desktop.
diff --git a/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.cc b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
new file mode 100644
index 000000000000..1cd40b28af18
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/tests/gl_test_utils.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/command_buffer/tests/gl_test_utils.cc
+@@ -23,7 +23,7 @@
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/init/gl_factory.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gl/gl_image_native_pixmap.h"
+ #endif
+
+@@ -429,7 +429,7 @@ void GpuCommandBufferTestEGL::RestoreGLDefault() {
+ window_system_binding_info_ = gl::GLWindowSystemBindingInfo();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ scoped_refptr<gl::GLImageNativePixmap>
+ GpuCommandBufferTestEGL::CreateGLImageNativePixmap(gfx::BufferFormat format,
+ gfx::Size size,
diff --git a/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.h b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.h
new file mode 100644
index 000000000000..c17548bb6f55
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_command__buffer_tests_gl__test__utils.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_test_utils.h.orig 2019-09-10 11:14:06 UTC
++++ gpu/command_buffer/tests/gl_test_utils.h
+@@ -112,7 +112,7 @@ class GpuCommandBufferTestEGL {
+ return gfx::HasExtension(gl_extensions_, extension);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Create GLImageNativePixmap filled in with the given pixels.
+ scoped_refptr<gl::GLImageNativePixmap> CreateGLImageNativePixmap(
+ gfx::BufferFormat format,
diff --git a/devel/electron6/files/patch-gpu_config_gpu__control__list.cc b/devel/electron6/files/patch-gpu_config_gpu__control__list.cc
new file mode 100644
index 000000000000..2a7e59392644
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_config_gpu__control__list.cc
@@ -0,0 +1,32 @@
+--- gpu/config/gpu_control_list.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/config/gpu_control_list.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "build/build_config.h"
+ #include "gpu/config/gpu_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace gpu {
+ namespace {
+@@ -213,7 +217,7 @@ bool GpuControlList::More::GLVersionInfoMismatch(
+ GpuControlList::GLType GpuControlList::More::GetDefaultGLType() {
+ #if defined(OS_CHROMEOS)
+ return kGLTypeGL;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kGLTypeGL;
+ #elif defined(OS_MACOSX)
+ return kGLTypeGL;
+@@ -700,7 +704,7 @@ GpuControlList::OsType GpuControlList::GetOsType() {
+ return kOsAndroid;
+ #elif defined(OS_FUCHSIA)
+ return kOsFuchsia;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kOsLinux;
+ #elif defined(OS_MACOSX)
+ return kOsMacosx;
diff --git a/devel/electron6/files/patch-gpu_config_gpu__test__config.cc b/devel/electron6/files/patch-gpu_config_gpu__test__config.cc
new file mode 100644
index 000000000000..65d20d33d0ef
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_config_gpu__test__config.cc
@@ -0,0 +1,11 @@
+--- gpu/config/gpu_test_config.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/config/gpu_test_config.cc
+@@ -25,7 +25,7 @@ namespace {
+ GPUTestConfig::OS GetCurrentOS() {
+ #if defined(OS_CHROMEOS)
+ return GPUTestConfig::kOsChromeOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return GPUTestConfig::kOsLinux;
+ #elif defined(OS_WIN)
+ int32_t major_version = 0;
diff --git a/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc b/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..2287551c0ebf
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,56 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/client_native_pixmap_factory.h"
+ #include "ui/gfx/linux/client_native_pixmap_factory_dmabuf.h"
+ #endif
+@@ -22,7 +22,7 @@
+ #include "ui/ozone/public/ozone_platform.h"
+ #endif
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.h"
+ #endif
+
+@@ -40,7 +40,7 @@ namespace gpu {
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport() {
+ #if defined(USE_OZONE)
+ client_native_pixmap_factory_ = ui::CreateClientNativePixmapFactoryOzone();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ client_native_pixmap_factory_.reset(
+ gfx::CreateClientNativePixmapFactoryDmabuf());
+ #endif
+@@ -54,7 +54,7 @@ GpuMemoryBufferSupport::GetNativeGpuMemoryBufferType()
+ return gfx::IO_SURFACE_BUFFER;
+ #elif defined(OS_ANDROID)
+ return gfx::ANDROID_HARDWARE_BUFFER;
+-#elif defined(OS_LINUX) || defined(USE_OZONE)
++#elif defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ return gfx::NATIVE_PIXMAP;
+ #elif defined(OS_WIN)
+ return gfx::DXGI_SHARED_HANDLE;
+@@ -111,7 +111,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferCo
+ #elif defined(USE_OZONE)
+ return ui::OzonePlatform::EnsureInstance()->IsNativePixmapConfigSupported(
+ format, usage);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return false; // TODO(julian.isorce): Add linux support.
+ #elif defined(OS_WIN)
+ switch (usage) {
+@@ -167,7 +167,7 @@ GpuMemoryBufferSupport::CreateGpuMemoryBufferImplFromH
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ std::move(handle), size, format, usage, std::move(callback));
+ #endif
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ case gfx::NATIVE_PIXMAP:
+ return GpuMemoryBufferImplNativePixmap::CreateFromHandle(
+ client_native_pixmap_factory(), std::move(handle), size, format,
diff --git a/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h b/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
new file mode 100644
index 000000000000..982311c2fb3b
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
@@ -0,0 +1,29 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.h.orig 2019-09-10 10:42:38 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ namespace gfx {
+ class ClientNativePixmapFactory;
+ }
+@@ -38,7 +38,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format,
+ gfx::BufferUsage usage);
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ gfx::ClientNativePixmapFactory* client_native_pixmap_factory() {
+ return client_native_pixmap_factory_.get();
+ }
+@@ -61,7 +61,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ GpuMemoryBufferImpl::DestructionCallback callback);
+
+ private:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_;
+ #endif
+
diff --git a/devel/electron6/files/patch-gpu_ipc_service_gpu__init.cc b/devel/electron6/files/patch-gpu_ipc_service_gpu__init.cc
new file mode 100644
index 000000000000..954597a24d22
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_service_gpu__init.cc
@@ -0,0 +1,83 @@
+--- gpu/ipc/service/gpu_init.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/ipc/service/gpu_init.cc
+@@ -107,7 +107,7 @@ void InitializePlatformOverlaySettings(GPUInfo* gpu_in
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ bool CanAccessNvidiaDeviceFile() {
+ bool res = true;
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+@@ -118,7 +118,7 @@ bool CanAccessNvidiaDeviceFile() {
+ }
+ return res;
+ }
+-#endif // OS_LINUX && !OS_CHROMEOS && !IS_CHROMECAST
++#endif // (OS_LINUX && !OS_CHROMEOS && !IS_CHROMECAST) || OS_BSD
+
+ } // namespace
+
+@@ -150,7 +150,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ // crash during feature collection.
+ gpu::SetKeysForCrashLogging(gpu_info_);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA
+ gpu_info_.gpu.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile())
+ return false;
+@@ -220,7 +220,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ sandbox_helper_->PreSandboxStartup();
+
+ bool attempted_startsandbox = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // On Chrome OS ARM Mali, GPU driver userspace creates threads when
+ // initializing a GL context, so start the sandbox early.
+ // TODO(zmo): Need to collect OS version before this.
+@@ -229,7 +229,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ watchdog_thread_.get(), &gpu_info_, gpu_preferences_);
+ attempted_startsandbox = true;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ base::TimeTicks before_initialize_one_off = base::TimeTicks::Now();
+
+@@ -328,7 +328,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -350,7 +350,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ }
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
+@@ -516,7 +516,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -536,7 +536,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+ }
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
diff --git a/devel/electron6/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc b/devel/electron6/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
new file mode 100644
index 000000000000..574aed1b1bab
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_memory_buffer_factory.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/ipc/service/gpu_memory_buffer_factory.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_native_pixmap.h"
+ #endif
+
+@@ -34,7 +34,7 @@ GpuMemoryBufferFactory::CreateNativeType(
+ return std::make_unique<GpuMemoryBufferFactoryIOSurface>();
+ #elif defined(OS_ANDROID)
+ return std::make_unique<GpuMemoryBufferFactoryAndroidHardwareBuffer>();
+-#elif defined(OS_LINUX) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return std::make_unique<GpuMemoryBufferFactoryNativePixmap>(
+ vulkan_context_provider);
+ #elif defined(OS_WIN)
diff --git a/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc b/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
new file mode 100644
index 000000000000..c6fb5c866db4
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
@@ -0,0 +1,73 @@
+--- gpu/ipc/service/gpu_watchdog_thread.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.cc
+@@ -55,8 +55,10 @@ const int kGpuTimeout = 10000;
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ const base::FilePath::CharType kTtyFilePath[] =
+ FILE_PATH_LITERAL("/sys/class/tty/tty0/active");
++#endif
+ const unsigned char text[20] = "check";
+ #endif
+
+@@ -79,8 +81,10 @@ GpuWatchdogThread::GpuWatchdogThread()
+ display_(nullptr),
+ window_(0),
+ atom_(x11::None),
++#if !defined(OS_BSD)
+ host_tty_(-1),
+ #endif
++#endif
+ weak_factory_(this) {
+ base::subtle::NoBarrier_Store(&awaiting_acknowledge_, false);
+
+@@ -95,7 +99,9 @@ GpuWatchdogThread::GpuWatchdogThread()
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ tty_file_ = base::OpenFile(base::FilePath(kTtyFilePath), "r");
++#endif
+ SetupXServer();
+ #endif
+ base::MessageLoopCurrent::Get()->AddTaskObserver(&task_observer_);
+@@ -231,8 +237,10 @@ GpuWatchdogThread::~GpuWatchdogThread() {
+ power_monitor->RemoveObserver(this);
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ if (tty_file_)
+ fclose(tty_file_);
++#endif
+ if (display_) {
+ DCHECK(window_);
+ XDestroyWindow(display_, window_);
+@@ -436,7 +444,7 @@ void GpuWatchdogThread::DeliberatelyTerminateToRecover
+ return;
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ // Don't crash if we're not on the TTY of our host X11 server.
+ int active_tty = GetActiveTTY();
+ if (host_tty_ != -1 && active_tty != -1 && host_tty_ != active_tty) {
+@@ -510,7 +518,9 @@ void GpuWatchdogThread::SetupXServer() {
+ CopyFromParent, InputOutput, CopyFromParent, 0, nullptr);
+ atom_ = XInternAtom(display_, "CHECK", x11::False);
+ }
++#if !defined(OS_BSD)
+ host_tty_ = GetActiveTTY();
++#endif
+ }
+
+ void GpuWatchdogThread::SetupXChangeProp() {
+@@ -611,7 +621,7 @@ base::ThreadTicks GpuWatchdogThread::GetWatchedThreadT
+ }
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ int GpuWatchdogThread::GetActiveTTY() const {
+ char tty_string[8] = {0};
+ if (tty_file_ && !fseek(tty_file_, 0, SEEK_SET) &&
diff --git a/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.h b/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
new file mode 100644
index 000000000000..8416d81bacdb
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
@@ -0,0 +1,13 @@
+--- gpu/ipc/service/gpu_watchdog_thread.h.orig 2019-09-10 11:14:06 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.h
+@@ -191,8 +191,10 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThread : publi
+ XDisplay* display_;
+ gfx::AcceleratedWidget window_;
+ XAtom atom_;
++#if !defined(OS_BSD)
+ FILE* tty_file_;
+ int host_tty_;
++#endif
+ #endif
+
+ base::RepeatingClosure alternative_terminate_for_testing_;
diff --git a/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.cc b/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.cc
new file mode 100644
index 000000000000..ee830954c843
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.cc
@@ -0,0 +1,20 @@
+--- gpu/vulkan/vulkan_function_pointers.cc.orig 2019-09-10 11:14:06 UTC
++++ gpu/vulkan/vulkan_function_pointers.cc
+@@ -352,7 +352,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ vkGetSemaphoreFdKHRFn = reinterpret_cast<PFN_vkGetSemaphoreFdKHR>(
+ vkGetDeviceProcAddrFn(vk_device, "vkGetSemaphoreFdKHR"));
+@@ -366,7 +366,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ vkGetMemoryFdKHRFn = reinterpret_cast<PFN_vkGetMemoryFdKHR>(
+ vkGetDeviceProcAddrFn(vk_device, "vkGetMemoryFdKHR"));
diff --git a/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.h b/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.h
new file mode 100644
index 000000000000..2b5084028891
--- /dev/null
+++ b/devel/electron6/files/patch-gpu_vulkan_vulkan__function__pointers.h
@@ -0,0 +1,35 @@
+--- gpu/vulkan/vulkan_function_pointers.h.orig 2019-09-10 11:14:06 UTC
++++ gpu/vulkan/vulkan_function_pointers.h
+@@ -145,13 +145,13 @@ struct VulkanFunctionPointers {
+ #endif
+
+ // Device functions shared between Linux and Android.
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHRFn = nullptr;
+ PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHRFn = nullptr;
+ #endif
+
+ // Linux-only device functions.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PFN_vkGetMemoryFdKHR vkGetMemoryFdKHRFn = nullptr;
+ #endif
+
+@@ -313,14 +313,14 @@ struct VulkanFunctionPointers {
+ ->vkGetAndroidHardwareBufferPropertiesANDROIDFn
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #define vkGetSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkGetSemaphoreFdKHRFn
+ #define vkImportSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkImportSemaphoreFdKHRFn
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define vkGetMemoryFdKHR gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHRFn
+ #endif
+
diff --git a/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.cc b/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.cc
new file mode 100644
index 000000000000..1b94a3d60c54
--- /dev/null
+++ b/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.cc
@@ -0,0 +1,20 @@
+--- headless/lib/browser/headless_content_browser_client.cc.orig 2019-09-10 11:14:06 UTC
++++ headless/lib/browser/headless_content_browser_client.cc
+@@ -178,7 +178,7 @@ HeadlessContentBrowserClient::GetGeneratedCodeCacheSet
+ return content::GeneratedCodeCacheSettings(true, 0, context->GetPath());
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void HeadlessContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -189,7 +189,7 @@ void HeadlessContentBrowserClient::GetAdditionalMapped
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(HEADLESS_USE_BREAKPAD)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void HeadlessContentBrowserClient::AppendExtraCommandLineSwitches(
+ base::CommandLine* command_line,
diff --git a/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.h b/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.h
new file mode 100644
index 000000000000..8237c3303ae2
--- /dev/null
+++ b/devel/electron6/files/patch-headless_lib_browser_headless__content__browser__client.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_content_browser_client.h.orig 2019-09-10 11:14:06 UTC
++++ headless/lib/browser/headless_content_browser_client.h
+@@ -36,7 +36,7 @@ class HeadlessContentBrowserClient : public content::C
+ ::storage::OptionalQuotaSettingsCallback callback) override;
+ content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
+ content::BrowserContext* context) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
diff --git a/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.cc b/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.cc
new file mode 100644
index 000000000000..6c3c63d6b4db
--- /dev/null
+++ b/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.cc
@@ -0,0 +1,38 @@
+--- headless/lib/browser/headless_request_context_manager.cc.orig 2019-09-10 11:14:06 UTC
++++ headless/lib/browser/headless_request_context_manager.cc
+@@ -34,7 +34,7 @@ namespace headless {
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ static char kProductName[] = "HeadlessChrome";
+ #endif
+
+@@ -80,7 +80,7 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTraffic
+ return traffic_annotation;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr BuildCryptConfigOnce(
+ const base::FilePath& user_data_path) {
+ static bool done_once = false;
+@@ -289,7 +289,7 @@ HeadlessRequestContextManager::HeadlessRequestContextM
+ proxy_config_monitor_ =
+ std::make_unique<HeadlessProxyConfigMonitor>(proxy_monitor_task_runner);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ crypt_config_ = BuildCryptConfigOnce(user_data_path_);
+ if (network_service_enabled_ && crypt_config_)
+ content::GetNetworkService()->SetCryptConfig(std::move(crypt_config_));
+@@ -365,7 +365,7 @@ void HeadlessRequestContextManager::InitializeOnIO() {
+ std::move(protocol_handler.second));
+ }
+ protocol_handlers_.clear();
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (crypt_config_) {
+ content::GetNetworkServiceImpl()->SetCryptConfig(
+ std::move(crypt_config_));
diff --git a/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.h b/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.h
new file mode 100644
index 000000000000..e4985826afcc
--- /dev/null
+++ b/devel/electron6/files/patch-headless_lib_browser_headless__request__context__manager.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_request_context_manager.h.orig 2019-09-10 11:14:06 UTC
++++ headless/lib/browser/headless_request_context_manager.h
+@@ -69,7 +69,7 @@ class HeadlessRequestContextManager {
+ std::unique_ptr<HeadlessProxyConfigMonitor> proxy_config_monitor_;
+ bool is_system_context_;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr crypt_config_;
+ #endif
+
diff --git a/devel/electron6/files/patch-headless_lib_headless__macros.h b/devel/electron6/files/patch-headless_lib_headless__macros.h
new file mode 100644
index 000000000000..09f0e4ab692a
--- /dev/null
+++ b/devel/electron6/files/patch-headless_lib_headless__macros.h
@@ -0,0 +1,13 @@
+--- headless/lib/headless_macros.h.orig 2019-09-10 10:42:38 UTC
++++ headless/lib/headless_macros.h
+@@ -7,8 +7,8 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #define HEADLESS_USE_BREAKPAD
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ #endif // HEADLESS_LIB_HEADLESS_MACROS_H_
diff --git a/devel/electron6/files/patch-ipc_ipc__channel.h b/devel/electron6/files/patch-ipc_ipc__channel.h
new file mode 100644
index 000000000000..17587139f79f
--- /dev/null
+++ b/devel/electron6/files/patch-ipc_ipc__channel.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel.h.orig 2019-09-10 11:14:07 UTC
++++ ipc/ipc_channel.h
+@@ -245,7 +245,7 @@ class COMPONENT_EXPORT(IPC) Channel : public Sender {
+ static std::string GenerateUniqueRandomChannelID();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sandboxed processes live in a PID namespace, so when sending the IPC hello
+ // message from client to server we need to send the PID from the global
+ // PID namespace.
diff --git a/devel/electron6/files/patch-ipc_ipc__channel__common.cc b/devel/electron6/files/patch-ipc_ipc__channel__common.cc
new file mode 100644
index 000000000000..88b5ae47bcd7
--- /dev/null
+++ b/devel/electron6/files/patch-ipc_ipc__channel__common.cc
@@ -0,0 +1,20 @@
+--- ipc/ipc_channel_common.cc.orig 2019-09-10 10:42:39 UTC
++++ ipc/ipc_channel_common.cc
+@@ -9,7 +9,7 @@
+
+ namespace IPC {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+ int g_global_pid = 0;
+@@ -25,7 +25,7 @@ int Channel::GetGlobalPid() {
+ return g_global_pid;
+ }
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ std::unique_ptr<Channel> Channel::CreateClient(
diff --git a/devel/electron6/files/patch-ipc_ipc__channel__mojo.cc b/devel/electron6/files/patch-ipc_ipc__channel__mojo.cc
new file mode 100644
index 000000000000..5047f69f2c01
--- /dev/null
+++ b/devel/electron6/files/patch-ipc_ipc__channel__mojo.cc
@@ -0,0 +1,15 @@
+--- ipc/ipc_channel_mojo.cc.orig 2019-09-10 11:14:07 UTC
++++ ipc/ipc_channel_mojo.cc
+@@ -64,10 +64,10 @@ class MojoChannelFactory : public ChannelFactory {
+ };
+
+ base::ProcessId GetSelfPID() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (int global_pid = Channel::GetGlobalPid())
+ return global_pid;
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_NACL)
+ return -1;
+ #else
diff --git a/devel/electron6/files/patch-ipc_ipc__message__utils.cc b/devel/electron6/files/patch-ipc_ipc__message__utils.cc
new file mode 100644
index 000000000000..dccda04e2203
--- /dev/null
+++ b/devel/electron6/files/patch-ipc_ipc__message__utils.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.cc.orig 2019-09-10 11:14:07 UTC
++++ ipc/ipc_message_utils.cc
+@@ -355,7 +355,7 @@ void ParamTraits<unsigned int>::Log(const param_type&
+ l->append(base::NumberToString(p));
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ void ParamTraits<long>::Log(const param_type& p, std::string* l) {
+ l->append(base::NumberToString(p));
diff --git a/devel/electron6/files/patch-ipc_ipc__message__utils.h b/devel/electron6/files/patch-ipc_ipc__message__utils.h
new file mode 100644
index 000000000000..91ba29968db0
--- /dev/null
+++ b/devel/electron6/files/patch-ipc_ipc__message__utils.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.h.orig 2019-09-10 11:14:07 UTC
++++ ipc/ipc_message_utils.h
+@@ -205,7 +205,7 @@ struct ParamTraits<unsigned int> {
+ // 3) Android 64 bit and Fuchsia also have int64_t typedef'd to long.
+ // Since we want to support Android 32<>64 bit IPC, as long as we don't have
+ // these traits for 32 bit ARM then that'll catch any errors.
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ template <>
+ struct ParamTraits<long> {
diff --git a/devel/electron6/files/patch-media_BUILD.gn b/devel/electron6/files/patch-media_BUILD.gn
new file mode 100644
index 000000000000..bffbc2de216b
--- /dev/null
+++ b/devel/electron6/files/patch-media_BUILD.gn
@@ -0,0 +1,12 @@
+--- media/BUILD.gn.orig 2019-09-10 11:14:07 UTC
++++ media/BUILD.gn
+@@ -60,6 +60,9 @@ config("media_config") {
+ defines += [ "DLOPEN_PULSEAUDIO" ]
+ }
+ }
++ if (use_sndio) {
++ defines += [ "USE_SNDIO" ]
++ }
+ if (use_cras) {
+ defines += [ "USE_CRAS" ]
+ }
diff --git a/devel/electron6/files/patch-media_audio_BUILD.gn b/devel/electron6/files/patch-media_audio_BUILD.gn
new file mode 100644
index 000000000000..eadbab1ea2ba
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_BUILD.gn
@@ -0,0 +1,22 @@
+--- media/audio/BUILD.gn.orig 2019-09-16 09:24:24 UTC
++++ media/audio/BUILD.gn
+@@ -242,8 +242,18 @@ source_set("audio") {
+ deps += [ "//media/base/android:media_jni_headers" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !use_sndio) {
+ sources += [ "linux/audio_manager_linux.cc" ]
++ }
++ if (use_sndio) {
++ libs += [ "sndio" ]
++ sources += [
++ "openbsd/audio_manager_openbsd.cc",
++ "sndio/sndio_input.cc",
++ "sndio/sndio_input.h",
++ "sndio/sndio_output.cc",
++ "sndio/sndio_output.h"
++ ]
+ }
+
+ if (use_alsa) {
diff --git a/devel/electron6/files/patch-media_audio_alsa_audio__manager__alsa.cc b/devel/electron6/files/patch-media_audio_alsa_audio__manager__alsa.cc
new file mode 100644
index 000000000000..ca54de3a7a91
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_alsa_audio__manager__alsa.cc
@@ -0,0 +1,54 @@
+--- media/audio/alsa/audio_manager_alsa.cc.orig 2019-09-10 10:42:39 UTC
++++ media/audio/alsa/audio_manager_alsa.cc
+@@ -92,7 +92,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ int card = -1;
+
+ // Loop through the sound cards to get ALSA device hints.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && card >= 0) {
++#endif
+ void** hints = NULL;
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+@@ -104,7 +106,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ DLOG(WARNING) << "GetAlsaAudioDevices: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+ }
+
+ void AudioManagerAlsa::GetAlsaDevicesInfo(AudioManagerAlsa::StreamType type,
+@@ -187,7 +191,11 @@ bool AudioManagerAlsa::IsAlsaDeviceAvailable(
+ // goes through software conversion if needed (e.g. incompatible
+ // sample rate).
+ // TODO(joi): Should we prefer "hw" instead?
++#ifdef OS_LINUX
+ static const char kDeviceTypeDesired[] = "plughw";
++#else
++ static const char kDeviceTypeDesired[] = "plug";
++#endif
+ return strncmp(kDeviceTypeDesired, device_name,
+ base::size(kDeviceTypeDesired) - 1) == 0;
+ }
+@@ -209,7 +217,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ // Loop through the sound cards.
+ // Don't use snd_device_name_hint(-1,..) since there is a access violation
+ // inside this ALSA API with libasound.so.2.0.0.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && (card >= 0) && !has_device) {
++#endif
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+ for (void** hint_iter = hints; *hint_iter != NULL; hint_iter++) {
+@@ -233,7 +243,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ DLOG(WARNING) << "HasAnyAudioDevice: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+
+ return has_device;
+ }
diff --git a/devel/electron6/files/patch-media_audio_audio__input__device.cc b/devel/electron6/files/patch-media_audio_audio__input__device.cc
new file mode 100644
index 000000000000..09ea602535aa
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_audio__input__device.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_input_device.cc.orig 2019-09-10 11:14:07 UTC
++++ media/audio/audio_input_device.cc
+@@ -248,7 +248,7 @@ void AudioInputDevice::OnStreamCreated(
+ // also a risk of false positives if we are suspending when starting the stream
+ // here. See comments in AliveChecker and PowerObserverHelper for details and
+ // todos.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const bool stop_at_first_alive_notification = true;
+ const bool pause_check_during_suspend = false;
+ #else
diff --git a/devel/electron6/files/patch-media_audio_audio__manager.cc b/devel/electron6/files/patch-media_audio_audio__manager.cc
new file mode 100644
index 000000000000..a1c3ff9abd7b
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_audio__manager.cc
@@ -0,0 +1,29 @@
+--- media/audio/audio_manager.cc.orig 2019-09-10 10:42:39 UTC
++++ media/audio/audio_manager.cc
+@@ -48,7 +48,7 @@ class AudioManagerHelper {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void set_app_name(const std::string& app_name) { app_name_ = app_name; }
+ const std::string& app_name() const { return app_name_; }
+ #endif
+@@ -59,7 +59,7 @@ class AudioManagerHelper {
+ std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_for_testing_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string app_name_;
+ #endif
+
+@@ -128,7 +128,7 @@ std::unique_ptr<AudioManager> AudioManager::CreateForT
+ return Create(std::move(audio_thread), GetHelper()->fake_log_factory());
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AudioManager::SetGlobalAppName(const std::string& app_name) {
+ GetHelper()->set_app_name(app_name);
diff --git a/devel/electron6/files/patch-media_audio_audio__manager.h b/devel/electron6/files/patch-media_audio_audio__manager.h
new file mode 100644
index 000000000000..39ae6502deaf
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_audio__manager.h
@@ -0,0 +1,11 @@
+--- media/audio/audio_manager.h.orig 2019-09-10 10:42:39 UTC
++++ media/audio/audio_manager.h
+@@ -60,7 +60,7 @@ class MEDIA_EXPORT AudioManager {
+ static std::unique_ptr<AudioManager> CreateForTesting(
+ std::unique_ptr<AudioThread> audio_thread);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sets the name of the audio source as seen by external apps. Only actually
+ // used with PulseAudio as of this writing.
+ static void SetGlobalAppName(const std::string& app_name);
diff --git a/devel/electron6/files/patch-media_audio_audio__output__proxy__unittest.cc b/devel/electron6/files/patch-media_audio_audio__output__proxy__unittest.cc
new file mode 100644
index 000000000000..68cf84e93d15
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_audio__output__proxy__unittest.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_output_proxy_unittest.cc.orig 2019-09-10 11:14:07 UTC
++++ media/audio/audio_output_proxy_unittest.cc
+@@ -412,7 +412,7 @@ class AudioOutputProxyTest : public testing::Test {
+ // |stream| is closed at this point. Start() should reopen it again.
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
+ .Times(2)
+- .WillRepeatedly(Return(reinterpret_cast<AudioOutputStream*>(NULL)));
++ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ EXPECT_CALL(callback_, OnError()).Times(2);
+
diff --git a/devel/electron6/files/patch-media_audio_pulse_pulse.sigs b/devel/electron6/files/patch-media_audio_pulse_pulse.sigs
new file mode 100644
index 000000000000..11c6213d55fc
--- /dev/null
+++ b/devel/electron6/files/patch-media_audio_pulse_pulse.sigs
@@ -0,0 +1,46 @@
+--- media/audio/pulse/pulse.sigs.orig 2019-09-10 10:42:39 UTC
++++ media/audio/pulse/pulse.sigs
+@@ -24,11 +24,11 @@ pa_operation* pa_context_get_source_info_by_index(pa_c
+ pa_operation* pa_context_get_source_info_by_name(pa_context* c, const char* name, pa_source_info_cb_t cb, void *userdata);
+ pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
+ pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
+-pa_context_state_t pa_context_get_state(pa_context* c);
++pa_context_state_t pa_context_get_state(const pa_context *c);
+ pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
+ pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
+ void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata);
+-pa_operation_state_t pa_operation_get_state(pa_operation* o);
++pa_operation_state_t pa_operation_get_state(const pa_operation* o);
+ void pa_context_unref(pa_context* c);
+ void pa_operation_unref(pa_operation* o);
+ int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes);
+@@ -38,23 +38,23 @@ pa_operation* pa_stream_cork(pa_stream* s, int b, pa_s
+ int pa_stream_disconnect(pa_stream* s);
+ int pa_stream_drop(pa_stream *p);
+ pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
+-uint32_t pa_stream_get_device_index(pa_stream* s);
++uint32_t pa_stream_get_device_index(const pa_stream* s);
+ int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative);
+-pa_stream_state_t pa_stream_get_state(pa_stream* p);
++pa_stream_state_t pa_stream_get_state(const pa_stream* p);
+ pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
+ pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
+ pa_proplist* pa_proplist_new(void);
+-int pa_proplist_contains(pa_proplist* p, const char* key);
++int pa_proplist_contains(const pa_proplist* p, const char* key);
+ void pa_proplist_free(pa_proplist* p);
+-const char* pa_proplist_gets(pa_proplist* p, const char* key);
++const char* pa_proplist_gets(const pa_proplist* p, const char* key);
+ int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
+-size_t pa_stream_readable_size(pa_stream *p);
++size_t pa_stream_readable_size(const pa_stream *p);
+ int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
+ void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
+ void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
+ int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
+ void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
+ void pa_stream_unref(pa_stream* s);
+-int pa_context_errno(pa_context *c);
++int pa_context_errno(const pa_context *c);
+ const char* pa_strerror(int error);
+ pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v);
diff --git a/devel/electron6/files/patch-media_base_audio__latency.cc b/devel/electron6/files/patch-media_base_audio__latency.cc
new file mode 100644
index 000000000000..dd0ffda791c3
--- /dev/null
+++ b/devel/electron6/files/patch-media_base_audio__latency.cc
@@ -0,0 +1,11 @@
+--- media/base/audio_latency.cc.orig 2019-09-10 10:42:39 UTC
++++ media/base/audio_latency.cc
+@@ -106,7 +106,7 @@ int AudioLatency::GetRtcBufferSize(int sample_rate, in
+ return frames_per_buffer;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // On Linux, MacOS and Fuchsia, the low level IO implementations on the
+ // browser side supports all buffer size the clients want. We use the native
+ // peer connection buffer size (10ms) to achieve best possible performance.
diff --git a/devel/electron6/files/patch-media_base_scopedfd__helper.h b/devel/electron6/files/patch-media_base_scopedfd__helper.h
new file mode 100644
index 000000000000..00afd606a053
--- /dev/null
+++ b/devel/electron6/files/patch-media_base_scopedfd__helper.h
@@ -0,0 +1,19 @@
+--- media/base/scopedfd_helper.h.orig 2019-09-10 11:14:07 UTC
++++ media/base/scopedfd_helper.h
+@@ -14,14 +14,14 @@ namespace media {
+ // since the only current user is V4L2 we are limiting the scope to OS_LINUX so
+ // the binary size does not inflate on non-using systems. Feel free to adapt
+ // this and BUILD.gn as our needs evolve.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ // Return a new vector containing duplicates of |fds|, or an empty vector in
+ // case of error.
+ MEDIA_EXPORT std::vector<base::ScopedFD> DuplicateFDs(
+ const std::vector<base::ScopedFD>& fds);
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace media
+
diff --git a/devel/electron6/files/patch-media_base_video__frame.cc b/devel/electron6/files/patch-media_base_video__frame.cc
new file mode 100644
index 000000000000..939baf50ecc6
--- /dev/null
+++ b/devel/electron6/files/patch-media_base_video__frame.cc
@@ -0,0 +1,47 @@
+--- media/base/video_frame.cc.orig 2019-09-10 11:14:07 UTC
++++ media/base/video_frame.cc
+@@ -53,7 +53,7 @@ static std::string StorageTypeToString(
+ return "OWNED_MEMORY";
+ case VideoFrame::STORAGE_SHMEM:
+ return "SHMEM";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case VideoFrame::STORAGE_DMABUFS:
+ return "DMABUFS";
+ #endif
+@@ -68,7 +68,7 @@ static std::string StorageTypeToString(
+ // static
+ bool VideoFrame::IsStorageTypeMappable(VideoFrame::StorageType storage_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This is not strictly needed but makes explicit that, at VideoFrame
+ // level, DmaBufs are not mappable from userspace.
+ storage_type != VideoFrame::STORAGE_DMABUFS &&
+@@ -495,7 +495,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuva
+ return frame;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ scoped_refptr<VideoFrame> VideoFrame::WrapExternalDmabufs(
+ const VideoFrameLayout& layout,
+@@ -626,7 +626,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If there are any |dmabuf_fds_| plugged in, we should duplicate them.
+ if (frame.storage_type() == STORAGE_DMABUFS) {
+ wrapping_frame->dmabuf_fds_ = DuplicateFDs(frame.dmabuf_fds_);
+@@ -950,7 +950,7 @@ size_t VideoFrame::shared_memory_offset() const {
+ return shared_memory_offset_;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const std::vector<base::ScopedFD>& VideoFrame::DmabufFds() const {
+ DCHECK_EQ(storage_type_, STORAGE_DMABUFS);
+
diff --git a/devel/electron6/files/patch-media_base_video__frame.h b/devel/electron6/files/patch-media_base_video__frame.h
new file mode 100644
index 000000000000..7a5160bcc8eb
--- /dev/null
+++ b/devel/electron6/files/patch-media_base_video__frame.h
@@ -0,0 +1,38 @@
+--- media/base/video_frame.h.orig 2019-09-10 11:14:07 UTC
++++ media/base/video_frame.h
+@@ -74,7 +74,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ STORAGE_UNOWNED_MEMORY = 2, // External, non owned data pointers.
+ STORAGE_OWNED_MEMORY = 3, // VideoFrame has allocated its own data buffer.
+ STORAGE_SHMEM = 4, // Pixels are backed by Shared Memory.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(mcasas): Consider turning this type into STORAGE_NATIVE
+ // based on the idea of using this same enum value for both DMA
+ // buffers on Linux and CVPixelBuffers on Mac (which currently use
+@@ -268,7 +268,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ uint8_t* a_data,
+ base::TimeDelta timestamp);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Wraps provided dmabufs
+ // (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html) with a
+ // VideoFrame. The frame will take ownership of |dmabuf_fds|, and will
+@@ -464,7 +464,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // Returns the offset into the shared memory where the frame data begins.
+ size_t shared_memory_offset() const;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a vector containing the backing DmaBufs for this frame. The number
+ // of returned DmaBufs will be equal or less than the number of planes of
+ // the frame. If there are less, this means that the last FD contains the
+@@ -663,7 +663,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // memory.
+ size_t shared_memory_offset_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dmabufs for the frame, used when storage is STORAGE_DMABUFS. Size is either
+ // equal or less than the number of planes of the frame. If it is less, then
+ // the memory area represented by the last FD contains the remaining planes.
diff --git a/devel/electron6/files/patch-media_capture_video_create__video__capture__device__factory.cc b/devel/electron6/files/patch-media_capture_video_create__video__capture__device__factory.cc
new file mode 100644
index 000000000000..f376c63293a8
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_create__video__capture__device__factory.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/create_video_capture_device_factory.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/create_video_capture_device_factory.cc
+@@ -10,7 +10,7 @@
+ #include "media/capture/video/fake_video_capture_device_factory.h"
+ #include "media/capture/video/file_video_capture_device_factory.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "media/capture/video/linux/video_capture_device_factory_linux.h"
+ #elif defined(OS_CHROMEOS)
+ #include "media/capture/video/chromeos/public/cros_features.h"
+@@ -33,7 +33,7 @@ namespace {
+ std::unique_ptr<VideoCaptureDeviceFactory>
+ CreatePlatformSpecificVideoCaptureDeviceFactory(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return std::make_unique<VideoCaptureDeviceFactoryLinux>(ui_task_runner);
+ #elif defined(OS_CHROMEOS)
+ // On Chrome OS we have to support two use cases:
diff --git a/devel/electron6/files/patch-media_capture_video_fake__video__capture__device__factory.cc b/devel/electron6/files/patch-media_capture_video_fake__video__capture__device__factory.cc
new file mode 100644
index 000000000000..401cc0a40f7b
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_fake__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/fake_video_capture_device_factory.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/fake_video_capture_device_factory.cc
+@@ -202,7 +202,7 @@ void FakeVideoCaptureDeviceFactory::GetDeviceDescripto
+ for (const auto& entry : devices_config_) {
+ device_descriptors->emplace_back(
+ base::StringPrintf("fake_device_%d", entry_index), entry.device_id,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #elif defined(OS_MACOSX)
+ VideoCaptureApi::MACOSX_AVFOUNDATION
diff --git a/devel/electron6/files/patch-media_capture_video_file__video__capture__device__factory.cc b/devel/electron6/files/patch-media_capture_video_file__video__capture__device__factory.cc
new file mode 100644
index 000000000000..f945710bd63a
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_file__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/file_video_capture_device_factory.cc.orig 2019-09-10 10:42:40 UTC
++++ media/capture/video/file_video_capture_device_factory.cc
+@@ -54,7 +54,7 @@ void FileVideoCaptureDeviceFactory::GetDeviceDescripto
+ #elif defined(OS_MACOSX)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::MACOSX_AVFOUNDATION
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #else
diff --git a/devel/electron6/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc b/devel/electron6/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
new file mode 100644
index 000000000000..10f10b7eda2c
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
@@ -0,0 +1,26 @@
+--- media/capture/video/linux/v4l2_capture_delegate.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -4,8 +4,10 @@
+
+ #include "media/capture/video/linux/v4l2_capture_delegate.h"
+
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #include <linux/videodev2.h>
++#endif
+ #include <poll.h>
+ #include <sys/fcntl.h>
+ #include <sys/ioctl.h>
+@@ -24,10 +26,10 @@
+
+ using media::mojom::MeteringMode;
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
++// #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+ // 16 bit depth, Realsense F200.
+ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
+-#endif
++// #endif
+
+ // TODO(aleksandar.stojiljkovic): Wrap this with kernel version check once the
+ // format is introduced to kernel.
diff --git a/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc b/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
new file mode 100644
index 000000000000..895a18d2d9e5
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
@@ -0,0 +1,32 @@
+--- media/capture/video/linux/video_capture_device_factory_linux.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/linux/video_capture_device_factory_linux.cc
+@@ -259,6 +259,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (!(capabilities & V4L2_CAP_VIDEO_CAPTURE))
+ return false;
+
++#if !defined(OS_FREEBSD)
+ const std::vector<uint32_t>& usable_fourccs =
+ VideoCaptureDeviceLinux::GetListOfUsableFourCCs(false);
+ v4l2_fmtdesc fmtdesc = {};
+@@ -267,6 +268,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (base::ContainsValue(usable_fourccs, fmtdesc.pixelformat))
+ return true;
+ }
++#endif
+
+ DVLOG(1) << "No usable formats found";
+ return false;
+@@ -312,9 +314,13 @@ void VideoCaptureDeviceFactoryLinux::GetSupportedForma
+ v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ for (; DoIoctl(fd, VIDIOC_ENUM_FMT, &v4l2_format) == 0; ++v4l2_format.index) {
+ VideoCaptureFormat supported_format;
++#if !defined(OS_FREEBSD)
+ supported_format.pixel_format =
+ VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+ v4l2_format.pixelformat);
++#else
++ supported_format.pixel_format = PIXEL_FORMAT_UNKNOWN;
++#endif
+
+ if (supported_format.pixel_format == PIXEL_FORMAT_UNKNOWN)
+ continue;
diff --git a/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__linux.cc b/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__linux.cc
new file mode 100644
index 000000000000..0009f51fe11b
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_linux_video__capture__device__linux.cc
@@ -0,0 +1,61 @@
+--- media/capture/video/linux/video_capture_device_linux.cc.orig 2019-09-10 10:42:40 UTC
++++ media/capture/video/linux/video_capture_device_linux.cc
+@@ -37,6 +37,7 @@ int TranslatePowerLineFrequencyToV4L2(PowerLineFrequen
+
+ } // namespace
+
++#if !defined(OS_FREEBSD)
+ // Translates Video4Linux pixel formats to Chromium pixel formats.
+ // static
+ VideoPixelFormat VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+@@ -50,6 +51,7 @@ std::vector<uint32_t> VideoCaptureDeviceLinux::GetList
+ bool favour_mjpeg) {
+ return V4L2CaptureDelegate::GetListOfUsableFourCcs(favour_mjpeg);
+ }
++#endif // !defined(OS_FREEBSD)
+
+ VideoCaptureDeviceLinux::VideoCaptureDeviceLinux(
+ scoped_refptr<V4L2CaptureDevice> v4l2,
+@@ -71,6 +73,7 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ const VideoCaptureParams& params,
+ std::unique_ptr<VideoCaptureDevice::Client> client) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++#if !defined(OS_FREEBSD)
+ DCHECK(!capture_impl_);
+ if (v4l2_thread_.IsRunning())
+ return; // Wrong state.
+@@ -98,10 +101,12 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ for (auto& request : photo_requests_queue_)
+ v4l2_thread_.task_runner()->PostTask(FROM_HERE, std::move(request));
+ photo_requests_queue_.clear();
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++#if !defined(OS_FREEBSD)
+ if (!v4l2_thread_.IsRunning())
+ return; // Wrong state.
+ v4l2_thread_.task_runner()->PostTask(
+@@ -111,6 +116,7 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ v4l2_thread_.Stop();
+
+ capture_impl_ = nullptr;
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
+@@ -158,11 +164,13 @@ void VideoCaptureDeviceLinux::SetPhotoOptions(
+ void VideoCaptureDeviceLinux::SetRotation(int rotation) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ rotation_ = rotation;
++#if !defined(OS_FREEBSD)
+ if (v4l2_thread_.IsRunning()) {
+ v4l2_thread_.task_runner()->PostTask(
+ FROM_HERE, base::BindOnce(&V4L2CaptureDelegate::SetRotation,
+ capture_impl_->GetWeakPtr(), rotation));
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace media
diff --git a/devel/electron6/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc b/devel/electron6/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
new file mode 100644
index 000000000000..b0cab44ec6e3
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/mock_gpu_memory_buffer_manager.cc.orig 2019-09-10 10:42:40 UTC
++++ media/capture/video/mock_gpu_memory_buffer_manager.cc
+@@ -115,7 +115,7 @@ class FakeGpuMemoryBuffer : public gfx::GpuMemoryBuffe
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::NATIVE_PIXMAP;
+ handle.id = handle_.id;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.native_pixmap_handle =
+ gfx::CloneHandleForIPC(handle_.native_pixmap_handle);
+ #endif
diff --git a/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.cc b/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.cc
new file mode 100644
index 000000000000..758c0bf1d1ea
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/shared_memory_handle_provider.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/shared_memory_handle_provider.cc
+@@ -63,7 +63,7 @@ bool SharedMemoryHandleProvider::InitFromMojoHandle(
+ return true;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool SharedMemoryHandleProvider::InitAsReadOnlyFromRawFileDescriptor(
+ mojo::ScopedHandle fd_handle,
+ uint32_t memory_size_in_bytes) {
+@@ -80,7 +80,7 @@ bool SharedMemoryHandleProvider::InitAsReadOnlyFromRaw
+ shared_memory_.emplace(memory_handle, read_only_flag_);
+ return true;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ mojo::ScopedSharedBufferHandle
+ SharedMemoryHandleProvider::GetHandleForInterProcessTransit(bool read_only) {
diff --git a/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.h b/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.h
new file mode 100644
index 000000000000..6702558c99e4
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_shared__memory__handle__provider.h
@@ -0,0 +1,15 @@
+--- media/capture/video/shared_memory_handle_provider.h.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/shared_memory_handle_provider.h
+@@ -38,10 +38,10 @@ class CAPTURE_EXPORT SharedMemoryHandleProvider
+
+ // This requires platforms where base::SharedMemoryHandle is backed by a
+ // file descriptor.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool InitAsReadOnlyFromRawFileDescriptor(mojo::ScopedHandle fd_handle,
+ uint32_t memory_size_in_bytes);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ uint32_t GetMemorySizeInBytes();
+
diff --git a/devel/electron6/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc b/devel/electron6/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
new file mode 100644
index 000000000000..e53f32c42a67
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_buffer_pool_impl.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/video_capture_buffer_pool_impl.cc
+@@ -58,7 +58,7 @@ VideoCaptureBufferPoolImpl::CreateSharedMemoryViaRawFi
+ int buffer_id) {
+ // This requires platforms where base::SharedMemoryHandle is backed by a
+ // file descriptor.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::AutoLock lock(lock_);
+
+ VideoCaptureBufferTracker* tracker = GetTracker(buffer_id);
diff --git a/devel/electron6/files/patch-media_capture_video_video__capture__device__client.cc b/devel/electron6/files/patch-media_capture_video_video__capture__device__client.cc
new file mode 100644
index 000000000000..5e09b5d2adae
--- /dev/null
+++ b/devel/electron6/files/patch-media_capture_video_video__capture__device__client.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_device_client.cc.orig 2019-09-10 11:14:08 UTC
++++ media/capture/video/video_capture_device_client.cc
+@@ -298,7 +298,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
+ // see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
+ // Windows RGB24 defines blue at lowest byte,
+ // see https://msdn.microsoft.com/en-us/library/windows/desktop/dd407253
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ fourcc_format = libyuv::FOURCC_RAW;
+ #elif defined(OS_WIN)
+ fourcc_format = libyuv::FOURCC_24BG;
diff --git a/devel/electron6/files/patch-media_filters_vp9__parser.h b/devel/electron6/files/patch-media_filters_vp9__parser.h
new file mode 100644
index 000000000000..137b79b0ed90
--- /dev/null
+++ b/devel/electron6/files/patch-media_filters_vp9__parser.h
@@ -0,0 +1,10 @@
+--- media/filters/vp9_parser.h.orig 2019-09-10 11:14:08 UTC
++++ media/filters/vp9_parser.h
+@@ -14,6 +14,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <unistd.h>
+ #include <sys/types.h>
+
+ #include <memory>
diff --git a/devel/electron6/files/patch-media_formats_common_offset__byte__queue.cc b/devel/electron6/files/patch-media_formats_common_offset__byte__queue.cc
new file mode 100644
index 000000000000..2c56e226bae4
--- /dev/null
+++ b/devel/electron6/files/patch-media_formats_common_offset__byte__queue.cc
@@ -0,0 +1,20 @@
+--- media/formats/common/offset_byte_queue.cc.orig 2019-09-10 10:42:40 UTC
++++ media/formats/common/offset_byte_queue.cc
+@@ -46,13 +46,13 @@ void OffsetByteQueue::PeekAt(int64_t offset, const uin
+ *size = tail() - offset;
+ }
+
+-bool OffsetByteQueue::Trim(int64_t max_offset) {
+- if (max_offset < head_) return true;
+- if (max_offset > tail()) {
++bool OffsetByteQueue::Trim(int64_t _max_offset) {
++ if (_max_offset < head_) return true;
++ if (_max_offset > tail()) {
+ Pop(size_);
+ return false;
+ }
+- Pop(max_offset - head_);
++ Pop(_max_offset - head_);
+ return true;
+ }
+
diff --git a/devel/electron6/files/patch-media_formats_common_offset__byte__queue.h b/devel/electron6/files/patch-media_formats_common_offset__byte__queue.h
new file mode 100644
index 000000000000..331c1ce0e6b0
--- /dev/null
+++ b/devel/electron6/files/patch-media_formats_common_offset__byte__queue.h
@@ -0,0 +1,22 @@
+--- media/formats/common/offset_byte_queue.h.orig 2019-09-10 10:42:40 UTC
++++ media/formats/common/offset_byte_queue.h
+@@ -36,15 +36,15 @@ class MEDIA_EXPORT OffsetByteQueue {
+ // a null |buf| and a |size| of zero.
+ void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
+- // Marks the bytes up to (but not including) |max_offset| as ready for
++ // Marks the bytes up to (but not including) |_max_offset| as ready for
+ // deletion. This is relatively inexpensive, but will not necessarily reduce
+ // the resident buffer size right away (or ever).
+ //
+ // Returns true if the full range of bytes were successfully trimmed,
+- // including the case where |max_offset| is less than the current head.
+- // Returns false if |max_offset| > tail() (although all bytes currently
++ // including the case where |_max_offset| is less than the current head.
++ // Returns false if |_max_offset| > tail() (although all bytes currently
+ // buffered are still cleared).
+- bool Trim(int64_t max_offset);
++ bool Trim(int64_t _max_offset);
+
+ // The head and tail positions, in terms of the file's absolute offsets.
+ // tail() is an exclusive bound.
diff --git a/devel/electron6/files/patch-media_formats_mp2t_es__parser__adts.cc b/devel/electron6/files/patch-media_formats_mp2t_es__parser__adts.cc
new file mode 100644
index 000000000000..2a609551f072
--- /dev/null
+++ b/devel/electron6/files/patch-media_formats_mp2t_es__parser__adts.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_adts.cc.orig 2019-09-10 10:42:40 UTC
++++ media/formats/mp2t/es_parser_adts.cc
+@@ -62,11 +62,11 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - kADTSHeaderMinSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - kADTSHeaderMinSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (!isAdtsSyncWord(cur_buf))
+ continue;
+@@ -106,7 +106,7 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron6/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc b/devel/electron6/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
new file mode 100644
index 000000000000..204750388c06
--- /dev/null
+++ b/devel/electron6/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_mpeg1audio.cc.orig 2019-09-10 10:42:40 UTC
++++ media/formats/mp2t/es_parser_mpeg1audio.cc
+@@ -108,11 +108,11 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (cur_buf[0] != 0xff)
+ continue;
+@@ -153,7 +153,7 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron6/files/patch-media_gpu_libyuv__image__processor.cc b/devel/electron6/files/patch-media_gpu_libyuv__image__processor.cc
new file mode 100644
index 000000000000..6a29a4e3ec19
--- /dev/null
+++ b/devel/electron6/files/patch-media_gpu_libyuv__image__processor.cc
@@ -0,0 +1,38 @@
+--- media/gpu/libyuv_image_processor.cc.orig 2019-09-10 11:14:08 UTC
++++ media/gpu/libyuv_image_processor.cc
+@@ -91,7 +91,7 @@ std::unique_ptr<LibYUVImageProcessor> LibYUVImageProce
+ // LibYUVImageProcessor supports only memory-based video frame for input.
+ VideoFrame::StorageType input_storage_type = VideoFrame::STORAGE_UNKNOWN;
+ for (auto input_type : input_config.preferred_storage_types) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input_type == VideoFrame::STORAGE_DMABUFS) {
+ video_frame_mapper = VideoFrameMapperFactory::CreateMapper(
+ input_config.layout.format(), true);
+@@ -100,7 +100,7 @@ std::unique_ptr<LibYUVImageProcessor> LibYUVImageProce
+ break;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (VideoFrame::IsStorageTypeMappable(input_type)) {
+ input_storage_type = input_type;
+@@ -203,7 +203,7 @@ void LibYUVImageProcessor::ProcessTask(scoped_refptr<V
+ FrameReadyCB cb) {
+ DCHECK(process_thread_.task_runner()->BelongsToCurrentThread());
+ DVLOGF(4);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input_frame->storage_type() == VideoFrame::STORAGE_DMABUFS) {
+ DCHECK_NE(video_frame_mapper_.get(), nullptr);
+ input_frame = video_frame_mapper_->Map(std::move(input_frame));
+@@ -213,7 +213,7 @@ void LibYUVImageProcessor::ProcessTask(scoped_refptr<V
+ return;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ int res = DoConversion(input_frame.get(), output_frame.get());
+ if (res != 0) {
diff --git a/devel/electron6/files/patch-media_gpu_linux_platform__video__frame__utils.cc b/devel/electron6/files/patch-media_gpu_linux_platform__video__frame__utils.cc
new file mode 100644
index 000000000000..439f3c046068
--- /dev/null
+++ b/devel/electron6/files/patch-media_gpu_linux_platform__video__frame__utils.cc
@@ -0,0 +1,20 @@
+--- media/gpu/linux/platform_video_frame_utils.cc.orig 2019-09-10 11:14:08 UTC
++++ media/gpu/linux/platform_video_frame_utils.cc
+@@ -107,7 +107,7 @@ gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferHandle
+ DCHECK(video_frame);
+
+ gfx::GpuMemoryBufferHandle handle;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.type = gfx::NATIVE_PIXMAP;
+
+ std::vector<base::ScopedFD> duped_fds =
+@@ -126,7 +126,7 @@ gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferHandle
+ }
+ #else
+ NOTREACHED();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ return handle;
+ }
+
diff --git a/devel/electron6/files/patch-media_gpu_vaapi_vaapi__dmabuf__video__frame__mapper.cc b/devel/electron6/files/patch-media_gpu_vaapi_vaapi__dmabuf__video__frame__mapper.cc
new file mode 100644
index 000000000000..cdbbdfe203e3
--- /dev/null
+++ b/devel/electron6/files/patch-media_gpu_vaapi_vaapi__dmabuf__video__frame__mapper.cc
@@ -0,0 +1,20 @@
+--- media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc.orig 2019-09-10 11:14:08 UTC
++++ media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.cc
+@@ -15,7 +15,7 @@
+ #include "media/gpu/vaapi/vaapi_wrapper.h"
+ #include "media/video/picture.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "media/gpu/linux/platform_video_frame_utils.h"
+ #endif
+
+@@ -137,7 +137,7 @@ scoped_refptr<VideoFrame> VaapiDmaBufVideoFrameMapper:
+ }
+
+ gfx::GpuMemoryBufferHandle gmb_handle;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ gmb_handle = CreateGpuMemoryBufferHandle(video_frame.get());
+ #endif
+ if (gmb_handle.is_null()) {
diff --git a/devel/electron6/files/patch-media_gpu_vaapi_vaapi__video__encode__accelerator.cc b/devel/electron6/files/patch-media_gpu_vaapi_vaapi__video__encode__accelerator.cc
new file mode 100644
index 000000000000..2d4e3b41aa73
--- /dev/null
+++ b/devel/electron6/files/patch-media_gpu_vaapi_vaapi__video__encode__accelerator.cc
@@ -0,0 +1,20 @@
+--- media/gpu/vaapi/vaapi_video_encode_accelerator.cc.orig 2019-09-10 11:14:08 UTC
++++ media/gpu/vaapi/vaapi_video_encode_accelerator.cc
+@@ -41,7 +41,7 @@
+ #include "media/gpu/vp8_reference_frame_vector.h"
+ #include "media/gpu/vp9_reference_frame_vector.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "media/gpu/linux/platform_video_frame_utils.h"
+ #endif
+
+@@ -558,7 +558,7 @@ scoped_refptr<VaapiEncodeJob> VaapiVideoEncodeAccelera
+ vaapi_wrapper_, MakeGLContextCurrentCallback(), BindGLImageCallback(),
+ PictureBuffer(kDummyPictureBufferId, frame->coded_size()));
+ gfx::GpuMemoryBufferHandle gmb_handle;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ gmb_handle = CreateGpuMemoryBufferHandle(frame.get());
+ #endif
+ if (gmb_handle.is_null()) {
diff --git a/devel/electron6/files/patch-media_gpu_video__frame__mapper__factory.cc b/devel/electron6/files/patch-media_gpu_video__frame__mapper__factory.cc
new file mode 100644
index 000000000000..31b7c2bd8fe3
--- /dev/null
+++ b/devel/electron6/files/patch-media_gpu_video__frame__mapper__factory.cc
@@ -0,0 +1,51 @@
+--- media/gpu/video_frame_mapper_factory.cc.orig 2019-09-10 11:14:08 UTC
++++ media/gpu/video_frame_mapper_factory.cc
+@@ -7,38 +7,38 @@
+ #include "build/build_config.h"
+ #include "media/gpu/buildflags.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "media/gpu/linux/generic_dmabuf_video_frame_mapper.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+-#if BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#if BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "media/gpu/vaapi/vaapi_dmabuf_video_frame_mapper.h"
+-#endif // BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#endif // BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+
+ namespace media {
+
+ // static
+ std::unique_ptr<VideoFrameMapper> VideoFrameMapperFactory::CreateMapper(
+ VideoPixelFormat format) {
+-#if BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#if BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+ return CreateMapper(format, false);
+ #else
+ return CreateMapper(format, true);
+-#endif // BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#endif // BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+ }
+
+ // static
+ std::unique_ptr<VideoFrameMapper> VideoFrameMapperFactory::CreateMapper(
+ VideoPixelFormat format,
+ bool linear_buffer_mapper) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (linear_buffer_mapper)
+ return GenericDmaBufVideoFrameMapper::Create(format);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+-#if BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#if BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+ return VaapiDmaBufVideoFrameMapper::Create(format);
+-#endif // BUILDFLAG(USE_VAAPI) && defined(OS_LINUX)
++#endif // BUILDFLAG(USE_VAAPI) && (defined(OS_LINUX) || defined(OS_BSD))
+
+ return nullptr;
+ }
diff --git a/devel/electron6/files/patch-media_media__options.gni b/devel/electron6/files/patch-media_media__options.gni
new file mode 100644
index 000000000000..ea9eff811fd0
--- /dev/null
+++ b/devel/electron6/files/patch-media_media__options.gni
@@ -0,0 +1,12 @@
+--- media/media_options.gni.orig 2019-09-10 11:14:08 UTC
++++ media/media_options.gni
+@@ -110,6 +110,9 @@ declare_args() {
+ # Enables runtime selection of ALSA library for audio.
+ use_alsa = false
+
++ # Enable runtime selection of sndio(7)
++ use_sndio = false
++
+ # Alsa should be used on non-Android, non-Mac POSIX systems.
+ # Alsa should be used on desktop Chromecast and audio-only Chromecast builds.
+ if (is_posix && !is_android && !is_mac &&
diff --git a/devel/electron6/files/patch-media_mojo_services_gpu__mojo__media__client.cc b/devel/electron6/files/patch-media_mojo_services_gpu__mojo__media__client.cc
new file mode 100644
index 000000000000..840c5fcef61e
--- /dev/null
+++ b/devel/electron6/files/patch-media_mojo_services_gpu__mojo__media__client.cc
@@ -0,0 +1,20 @@
+--- media/mojo/services/gpu_mojo_media_client.cc.orig 2019-09-10 11:14:08 UTC
++++ media/mojo/services/gpu_mojo_media_client.cc
+@@ -55,7 +55,7 @@ namespace media {
+ namespace {
+
+ #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
+- defined(OS_WIN) || defined(OS_LINUX)
++ defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ gpu::CommandBufferStub* GetCommandBufferStub(
+ base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
+ base::UnguessableToken channel_token,
+@@ -199,7 +199,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::Crea
+ std::make_unique<VideoFrameFactoryImpl>(
+ gpu_task_runner_, std::move(get_stub_cb), gpu_preferences_));
+ #elif defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ video_decoder = VdaVideoDecoder::Create(
+ task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
+ gpu_preferences_, gpu_workarounds_,
diff --git a/devel/electron6/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc b/devel/electron6/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
new file mode 100644
index 000000000000..cd2df1daa0a5
--- /dev/null
+++ b/devel/electron6/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
@@ -0,0 +1,11 @@
+--- media/video/gpu_memory_buffer_video_frame_pool.cc.orig 2019-09-10 11:14:08 UTC
++++ media/video/gpu_memory_buffer_video_frame_pool.cc
+@@ -597,7 +597,7 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHa
+ }
+
+ bool is_software_backed_video_frame = !video_frame->HasTextures();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ is_software_backed_video_frame &= !video_frame->HasDmaBufs();
+ #endif
+
diff --git a/devel/electron6/files/patch-mojo_public_c_system_thunks.cc b/devel/electron6/files/patch-mojo_public_c_system_thunks.cc
new file mode 100644
index 000000000000..e33929ae9b66
--- /dev/null
+++ b/devel/electron6/files/patch-mojo_public_c_system_thunks.cc
@@ -0,0 +1,58 @@
+--- mojo/public/c/system/thunks.cc.orig 2019-09-10 10:42:41 UTC
++++ mojo/public/c/system/thunks.cc
+@@ -16,7 +16,7 @@
+ #include "build/build_config.h"
+ #include "mojo/public/c/system/core.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
+ #include "base/optional.h"
+@@ -28,7 +28,7 @@ namespace {
+
+ typedef void (*MojoGetSystemThunksFunction)(MojoSystemThunks* thunks);
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ PROTECTED_MEMORY_SECTION
+ base::ProtectedMemory<MojoGetSystemThunksFunction> g_get_thunks;
+ #endif
+@@ -65,7 +65,7 @@ namespace mojo {
+ class CoreLibraryInitializer {
+ public:
+ CoreLibraryInitializer(const MojoInitializeOptions* options) {
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ bool application_provided_path = false;
+ base::Optional<base::FilePath> library_path;
+ if (options && options->struct_size >= sizeof(*options) &&
+@@ -84,7 +84,7 @@ class CoreLibraryInitializer {
+
+ if (!library_path) {
+ // Default to looking for the library in the current working directory.
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::FilePath::CharType kDefaultLibraryPathValue[] =
+ FILE_PATH_LITERAL("./libmojo_core.so");
+ #elif defined(OS_WIN)
+@@ -138,16 +138,16 @@ class CoreLibraryInitializer {
+
+ CHECK_GT(g_thunks->size, 0u)
+ << "Invalid mojo_core library: " << library_path->value();
+-#else // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#else // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ NOTREACHED()
+ << "Dynamic mojo_core loading is not supported on this platform.";
+-#endif // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ ~CoreLibraryInitializer() = default;
+
+ private:
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ base::Optional<base::ScopedNativeLibrary> library_;
+ #endif
+
diff --git a/devel/electron6/files/patch-mojo_public_js_mojo__bindings__resources.grd b/devel/electron6/files/patch-mojo_public_js_mojo__bindings__resources.grd
new file mode 100644
index 000000000000..142f0b1efb95
--- /dev/null
+++ b/devel/electron6/files/patch-mojo_public_js_mojo__bindings__resources.grd
@@ -0,0 +1,11 @@
+--- mojo/public/js/mojo_bindings_resources.grd.orig 2019-09-10 10:42:41 UTC
++++ mojo/public/js/mojo_bindings_resources.grd
+@@ -60,7 +60,7 @@
+ use_base_dir="false"
+ type="BINDATA"
+ compress="gzip" />
+- <if expr="is_win or is_macosx or is_linux">
++ <if expr="is_win or is_macosx or is_posix">
+ <include name="IDR_MOJO_TIME_MOJOM_HTML"
+ file="${root_gen_dir}/mojo/public/mojom/base/time.mojom.html"
+ use_base_dir="false"
diff --git a/devel/electron6/files/patch-net_BUILD.gn b/devel/electron6/files/patch-net_BUILD.gn
new file mode 100644
index 000000000000..7a78876da0c0
--- /dev/null
+++ b/devel/electron6/files/patch-net_BUILD.gn
@@ -0,0 +1,37 @@
+--- net/BUILD.gn.orig 2019-09-10 11:14:08 UTC
++++ net/BUILD.gn
+@@ -98,7 +98,7 @@ net_configs = [
+ "//build/config/compiler:wexit_time_destructors",
+ ]
+
+-if (is_linux) {
++if (is_linux && !is_bsd) {
+ net_configs += [ "//build/config/linux:libresolv" ]
+ }
+
+@@ -1919,7 +1919,7 @@ component("net") {
+ }
+
+ # Use getifaddrs() on POSIX platforms, except Linux and Android.
+- if (is_posix && !is_linux && !is_android) {
++ if (is_posix && ((!is_linux && !is_android) || (is_bsd))) {
+ sources += [
+ "base/network_interfaces_getifaddrs.cc",
+ "base/network_interfaces_getifaddrs.h",
+@@ -2012,6 +2012,16 @@ component("net") {
+ ]
+
+ sources -= [ "disk_cache/blockfile/file_posix.cc" ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "base/address_tracker_linux.cc",
++ "base/address_tracker_linux.h",
++ "base/network_change_notifier_linux.cc",
++ "base/network_change_notifier_linux.h",
++ "base/network_interfaces_linux.cc",
++ ]
+ }
+
+ if (is_ios || is_mac) {
diff --git a/devel/electron6/files/patch-net_base_address__tracker__linux.cc b/devel/electron6/files/patch-net_base_address__tracker__linux.cc
new file mode 100644
index 000000000000..ab9cbdac1e21
--- /dev/null
+++ b/devel/electron6/files/patch-net_base_address__tracker__linux.cc
@@ -0,0 +1,177 @@
+--- net/base/address_tracker_linux.cc.orig 2019-09-10 10:42:42 UTC
++++ net/base/address_tracker_linux.cc
+@@ -21,96 +21,10 @@
+ namespace net {
+ namespace internal {
+
+-namespace {
+-
+-// Some kernel functions such as wireless_send_event and rtnetlink_ifinfo_prep
+-// may send spurious messages over rtnetlink. RTM_NEWLINK messages where
+-// ifi_change == 0 and rta_type == IFLA_WIRELESS should be ignored.
+-bool IgnoreWirelessChange(const struct nlmsghdr* header,
+- const struct ifinfomsg* msg) {
+- size_t length = IFLA_PAYLOAD(header);
+- for (const struct rtattr* attr = IFLA_RTA(msg); RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- if (attr->rta_type == IFLA_WIRELESS && msg->ifi_change == 0)
+- return true;
+- }
+- return false;
+-}
+-
+-// Retrieves address from NETLINK address message.
+-// Sets |really_deprecated| for IPv6 addresses with preferred lifetimes of 0.
+-bool GetAddress(const struct nlmsghdr* header,
+- IPAddress* out,
+- bool* really_deprecated) {
+- if (really_deprecated)
+- *really_deprecated = false;
+- const struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- size_t address_length = 0;
+- switch (msg->ifa_family) {
+- case AF_INET:
+- address_length = IPAddress::kIPv4AddressSize;
+- break;
+- case AF_INET6:
+- address_length = IPAddress::kIPv6AddressSize;
+- break;
+- default:
+- // Unknown family.
+- return false;
+- }
+- // Use IFA_ADDRESS unless IFA_LOCAL is present. This behavior here is based on
+- // getaddrinfo in glibc (check_pf.c). Judging from kernel implementation of
+- // NETLINK, IPv4 addresses have only the IFA_ADDRESS attribute, while IPv6
+- // have the IFA_LOCAL attribute.
+- uint8_t* address = NULL;
+- uint8_t* local = NULL;
+- size_t length = IFA_PAYLOAD(header);
+- for (const struct rtattr* attr =
+- reinterpret_cast<const struct rtattr*>(IFA_RTA(msg));
+- RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- switch (attr->rta_type) {
+- case IFA_ADDRESS:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- address = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_LOCAL:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- local = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_CACHEINFO: {
+- const struct ifa_cacheinfo *cache_info =
+- reinterpret_cast<const struct ifa_cacheinfo*>(RTA_DATA(attr));
+- if (really_deprecated)
+- *really_deprecated = (cache_info->ifa_prefered == 0);
+- } break;
+- default:
+- break;
+- }
+- }
+- if (local)
+- address = local;
+- if (!address)
+- return false;
+- *out = IPAddress(address, address_length);
+- return true;
+-}
+-
+-} // namespace
+-
+ // static
+ char* AddressTrackerLinux::GetInterfaceName(int interface_index, char* buf) {
+- memset(buf, 0, IFNAMSIZ);
+- base::ScopedFD ioctl_socket = GetSocketForIoctl();
+- if (!ioctl_socket.is_valid())
+- return buf;
+-
+- struct ifreq ifr = {};
+- ifr.ifr_ifindex = interface_index;
+-
+- if (ioctl(ioctl_socket.get(), SIOCGIFNAME, &ifr) == 0)
+- strncpy(buf, ifr.ifr_name, IFNAMSIZ - 1);
+- return buf;
++ NOTIMPLEMENTED();
++ return NULL;
+ }
+
+ AddressTrackerLinux::AddressTrackerLinux()
+@@ -147,6 +61,7 @@ AddressTrackerLinux::AddressTrackerLinux(
+ AddressTrackerLinux::~AddressTrackerLinux() = default;
+
+ void AddressTrackerLinux::Init() {
++#if !defined(OS_FREEBSD)
+ netlink_fd_.reset(socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE));
+ if (!netlink_fd_.is_valid()) {
+ PLOG(ERROR) << "Could not create NETLINK socket";
+@@ -242,6 +157,7 @@ void AddressTrackerLinux::AbortAndForceOnline() {
+ connection_type_initialized_cv_.Broadcast();
+ }
+
++#if !defined(OS_BSD)
+ AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
+ AddressTrackerAutoLock lock(*this, address_map_lock_);
+ return address_map_;
+@@ -260,6 +176,7 @@ bool AddressTrackerLinux::IsInterfaceIgnored(int inter
+ const char* interface_name = get_interface_name_(interface_index, buf);
+ return ignored_interfaces_.find(interface_name) != ignored_interfaces_.end();
+ }
++#endif // !OS_BSD
+
+ NetworkChangeNotifier::ConnectionType
+ AddressTrackerLinux::GetCurrentConnectionType() {
+@@ -318,6 +235,7 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ bool* address_changed,
+ bool* link_changed,
+ bool* tunnel_changed) {
++#if !defined(OS_FREEBSD)
+ DCHECK(buffer);
+ for (struct nlmsghdr* header = reinterpret_cast<struct nlmsghdr*>(buffer);
+ NLMSG_OK(header, length);
+@@ -414,6 +332,10 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ break;
+ }
+ }
++#else // !OS_FREEBSD
++ NOTIMPLEMENTED();
++ AbortAndForceOnline();
++#endif // !OS_FREEBSD
+ }
+
+ void AddressTrackerLinux::OnFileCanReadWithoutBlocking() {
+@@ -441,31 +363,7 @@ bool AddressTrackerLinux::IsTunnelInterfaceName(const
+ }
+
+ void AddressTrackerLinux::UpdateCurrentConnectionType() {
+- AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+- std::unordered_set<int> online_links = GetOnlineLinks();
+-
+- // Strip out tunnel interfaces from online_links
+- for (auto it = online_links.cbegin(); it != online_links.cend();) {
+- if (IsTunnelInterface(*it)) {
+- it = online_links.erase(it);
+- } else {
+- ++it;
+- }
+- }
+-
+- NetworkInterfaceList networks;
+- NetworkChangeNotifier::ConnectionType type =
+- NetworkChangeNotifier::CONNECTION_NONE;
+- if (GetNetworkListImpl(&networks, 0, online_links, address_map,
+- get_interface_name_)) {
+- type = NetworkChangeNotifier::ConnectionTypeFromInterfaceList(networks);
+- } else {
+- type = online_links.empty() ? NetworkChangeNotifier::CONNECTION_NONE
+- : NetworkChangeNotifier::CONNECTION_UNKNOWN;
+- }
+-
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- current_connection_type_ = type;
++ NOTIMPLEMENTED();
+ }
+
+ int AddressTrackerLinux::GetThreadsWaitingForConnectionTypeInitForTesting()
diff --git a/devel/electron6/files/patch-net_base_address__tracker__linux.h b/devel/electron6/files/patch-net_base_address__tracker__linux.h
new file mode 100644
index 000000000000..005254c601c1
--- /dev/null
+++ b/devel/electron6/files/patch-net_base_address__tracker__linux.h
@@ -0,0 +1,12 @@
+--- net/base/address_tracker_linux.h.orig 2019-09-10 10:42:42 UTC
++++ net/base/address_tracker_linux.h
+@@ -7,9 +7,6 @@
+
+ #include <sys/socket.h> // Needed to include netlink.
+ // Mask superfluous definition of |struct net|. This is fixed in Linux 2.6.38.
+-#define net net_kernel
+-#include <linux/rtnetlink.h>
+-#undef net
+ #include <stddef.h>
+
+ #include <map>
diff --git a/devel/electron6/files/patch-net_base_address__tracker__linux__unittest.cc b/devel/electron6/files/patch-net_base_address__tracker__linux__unittest.cc
new file mode 100644
index 000000000000..12103f80fd53
--- /dev/null
+++ b/devel/electron6/files/patch-net_base_address__tracker__linux__unittest.cc
@@ -0,0 +1,14 @@
+--- net/base/address_tracker_linux_unittest.cc.orig 2019-09-10 11:14:08 UTC
++++ net/base/address_tracker_linux_unittest.cc
+@@ -4,7 +4,11 @@
+
+ #include "net/base/address_tracker_linux.h"
+
++#if defined(__linux__)
+ #include <linux/if.h>
++#else
++#include <net/if.h>
++#endif
+
+ #include <memory>
+ #include <unordered_set>
diff --git a/devel/electron6/files/patch-net_base_network__change__notifier.cc b/devel/electron6/files/patch-net_base_network__change__notifier.cc
new file mode 100644
index 000000000000..6b36703b8ee1
--- /dev/null
+++ b/devel/electron6/files/patch-net_base_network__change__notifier.cc
@@ -0,0 +1,10 @@
+--- net/base/network_change_notifier.cc.orig 2019-09-10 11:14:08 UTC
++++ net/base/network_change_notifier.cc
+@@ -225,7 +225,6 @@ NetworkChangeNotifier* NetworkChangeNotifier::Create()
+ #elif defined(OS_FUCHSIA)
+ return new NetworkChangeNotifierFuchsia(0 /* required_features */);
+ #else
+- NOTIMPLEMENTED();
+ return NULL;
+ #endif
+ }
diff --git a/devel/electron6/files/patch-net_base_network__interfaces__posix.h b/devel/electron6/files/patch-net_base_network__interfaces__posix.h
new file mode 100644
index 000000000000..0fd751f8678b
--- /dev/null
+++ b/devel/electron6/files/patch-net_base_network__interfaces__posix.h
@@ -0,0 +1,11 @@
+--- net/base/network_interfaces_posix.h.orig 2019-09-10 10:42:42 UTC
++++ net/base/network_interfaces_posix.h
+@@ -8,6 +8,8 @@
+ // This file provides some basic functionality shared between
+ // network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
+
++#include <sys/socket.h>
++
+ #include <string>
+
+ struct sockaddr;
diff --git a/devel/electron6/files/patch-net_disk__cache_blockfile_disk__format.h b/devel/electron6/files/patch-net_disk__cache_blockfile_disk__format.h
new file mode 100644
index 000000000000..4ef2a09b96f8
--- /dev/null
+++ b/devel/electron6/files/patch-net_disk__cache_blockfile_disk__format.h
@@ -0,0 +1,12 @@
+--- net/disk_cache/blockfile/disk_format.h.orig 2019-09-10 10:42:43 UTC
++++ net/disk_cache/blockfile/disk_format.h
+@@ -149,7 +149,9 @@ struct RankingsNode {
+ };
+ #pragma pack(pop)
+
++#if !defined(OS_BSD)
+ static_assert(sizeof(RankingsNode) == 36, "bad RankingsNode");
++#endif
+
+ } // namespace disk_cache
+
diff --git a/devel/electron6/files/patch-net_dns_address__sorter__posix.cc b/devel/electron6/files/patch-net_dns_address__sorter__posix.cc
new file mode 100644
index 000000000000..db4671b0fd15
--- /dev/null
+++ b/devel/electron6/files/patch-net_dns_address__sorter__posix.cc
@@ -0,0 +1,12 @@
+--- net/dns/address_sorter_posix.cc.orig 2019-09-10 10:42:43 UTC
++++ net/dns/address_sorter_posix.cc
+@@ -13,7 +13,9 @@
+ #include <sys/socket.h> // Must be included before ifaddrs.h.
+ #include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_var.h>
+ #include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #endif
diff --git a/devel/electron6/files/patch-net_dns_dns__config__service__posix__unittest.cc b/devel/electron6/files/patch-net_dns_dns__config__service__posix__unittest.cc
new file mode 100644
index 000000000000..b6c411ae6553
--- /dev/null
+++ b/devel/electron6/files/patch-net_dns_dns__config__service__posix__unittest.cc
@@ -0,0 +1,47 @@
+--- net/dns/dns_config_service_posix_unittest.cc.orig 2019-09-10 11:14:09 UTC
++++ net/dns/dns_config_service_posix_unittest.cc
+@@ -2,8 +2,6 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <resolv.h>
+-
+ #include <memory>
+
+ #include "base/cancelable_callback.h"
+@@ -50,7 +48,7 @@ const char* const kNameserversIPv4[] = {
+ "1.0.0.1",
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char* const kNameserversIPv6[] = {
+ NULL,
+ "2001:DB8:0::42",
+@@ -86,7 +84,7 @@ void InitializeResState(res_state res) {
+ ++res->nscount;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Install IPv6 addresses, replacing the corresponding IPv4 addresses.
+ unsigned nscount6 = 0;
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+@@ -107,7 +105,7 @@ void InitializeResState(res_state res) {
+ }
+
+ void CloseResState(res_state res) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (int i = 0; i < res->nscount; ++i) {
+ if (res->_u._ext.nsaddrs[i] != NULL)
+ free(res->_u._ext.nsaddrs[i]);
+@@ -132,7 +130,7 @@ void InitializeExpectedConfig(DnsConfig* config) {
+ config->nameservers.push_back(IPEndPoint(ip, NS_DEFAULTPORT + i));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+ if (!kNameserversIPv6[i])
+ continue;
diff --git a/devel/electron6/files/patch-net_dns_dns__reloader.cc b/devel/electron6/files/patch-net_dns_dns__reloader.cc
new file mode 100644
index 000000000000..7c969e0eb0c0
--- /dev/null
+++ b/devel/electron6/files/patch-net_dns_dns__reloader.cc
@@ -0,0 +1,13 @@
+--- net/dns/dns_reloader.cc.orig 2019-09-10 11:14:09 UTC
++++ net/dns/dns_reloader.cc
+@@ -7,6 +7,10 @@
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+
++#if defined(OS_FREEBSD)
++#include <netinet/in.h>
++#endif
++
+ #include <resolv.h>
+
+ #include "base/lazy_instance.h"
diff --git a/devel/electron6/files/patch-net_dns_dns__util.cc b/devel/electron6/files/patch-net_dns_dns__util.cc
new file mode 100644
index 000000000000..8db6ae0b2488
--- /dev/null
+++ b/devel/electron6/files/patch-net_dns_dns__util.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_util.cc.orig 2019-09-10 11:14:09 UTC
++++ net/dns/dns_util.cc
+@@ -36,6 +36,8 @@ const uint16_t kFlagNamePointer = 0xc000;
+
+ } // namespace
+
++#include <sys/socket.h>
++
+ #if defined(OS_POSIX)
+ #include <netinet/in.h>
+ #if !defined(OS_NACL)
diff --git a/devel/electron6/files/patch-net_dns_host__resolver__proc.cc b/devel/electron6/files/patch-net_dns_host__resolver__proc.cc
new file mode 100644
index 000000000000..f629903e61b1
--- /dev/null
+++ b/devel/electron6/files/patch-net_dns_host__resolver__proc.cc
@@ -0,0 +1,11 @@
+--- net/dns/host_resolver_proc.cc.orig 2019-09-10 11:14:09 UTC
++++ net/dns/host_resolver_proc.cc
+@@ -197,7 +197,7 @@ int SystemHostResolverCall(const std::string& host,
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+ base::BlockingType::WILL_BLOCK);
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+ DnsReloaderMaybeReload();
+ #endif
diff --git a/devel/electron6/files/patch-net_features.gni b/devel/electron6/files/patch-net_features.gni
new file mode 100644
index 000000000000..db530f1d0ebf
--- /dev/null
+++ b/devel/electron6/files/patch-net_features.gni
@@ -0,0 +1,11 @@
+--- net/features.gni.orig 2019-09-10 11:14:09 UTC
++++ net/features.gni
+@@ -26,7 +26,7 @@ declare_args() {
+ disable_brotli_filter = false
+
+ # Multicast DNS.
+- enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios
++ enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios || is_bsd
+
+ # Reporting not used on iOS.
+ enable_reporting = !is_ios
diff --git a/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.cc b/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.cc
new file mode 100644
index 000000000000..8f480c78f3e1
--- /dev/null
+++ b/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.cc
@@ -0,0 +1,14 @@
+--- net/http/http_auth_gssapi_posix.cc.orig 2019-09-10 11:14:09 UTC
++++ net/http/http_auth_gssapi_posix.cc
+@@ -443,8 +443,9 @@ base::NativeLibrary GSSAPISharedLibrary::LoadSharedLib
+ static const char* const kDefaultLibraryNames[] = {
+ #if defined(OS_MACOSX)
+ "/System/Library/Frameworks/GSS.framework/GSS"
+-#elif defined(OS_OPENBSD)
+- "libgssapi.so" // Heimdal - OpenBSD
++#elif defined(OS_BSD)
++ "libgssapi_krb5.so.2", // MIT Kerberos - FreeBSD
++ "libgssapi.so" // Heimdal - OpenBSD, FreeBSD
+ #else
+ "libgssapi_krb5.so.2", // MIT Kerberos - FC, Suse10, Debian
+ "libgssapi.so.4", // Heimdal - Suse10, MDK
diff --git a/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.h b/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.h
new file mode 100644
index 000000000000..32c314b27025
--- /dev/null
+++ b/devel/electron6/files/patch-net_http_http__auth__gssapi__posix.h
@@ -0,0 +1,12 @@
+--- net/http/http_auth_gssapi_posix.h.orig 2019-09-10 11:14:09 UTC
++++ net/http/http_auth_gssapi_posix.h
+@@ -19,6 +19,9 @@
+ #include <GSS/gssapi.h>
+ #elif defined(OS_FREEBSD)
+ #include <gssapi/gssapi.h>
++#ifndef GSS_C_DELEG_POLICY_FLAG
++#define GSS_C_DELEG_POLICY_FLAG 32768
++#endif
+ #else
+ #include <gssapi.h>
+ #endif
diff --git a/devel/electron6/files/patch-net_nqe_network__quality__estimator.cc b/devel/electron6/files/patch-net_nqe_network__quality__estimator.cc
new file mode 100644
index 000000000000..f1ef02aa9054
--- /dev/null
+++ b/devel/electron6/files/patch-net_nqe_network__quality__estimator.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator.cc.orig 2019-09-10 11:14:10 UTC
++++ net/nqe/network_quality_estimator.cc
+@@ -100,7 +100,7 @@ nqe::internal::NetworkID DoGetCurrentNetworkID() {
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET:
+ break;
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI:
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ network_id.id = GetWifiSSID();
+ #endif
+ break;
diff --git a/devel/electron6/files/patch-net_nqe_network__quality__estimator__unittest.cc b/devel/electron6/files/patch-net_nqe_network__quality__estimator__unittest.cc
new file mode 100644
index 000000000000..6bb886782ff0
--- /dev/null
+++ b/devel/electron6/files/patch-net_nqe_network__quality__estimator__unittest.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator_unittest.cc.orig 2019-09-10 11:14:10 UTC
++++ net/nqe/network_quality_estimator_unittest.cc
+@@ -2039,7 +2039,7 @@ TEST_F(NetworkQualityEstimatorTest, TestGlobalSocketWa
+
+ // TestTCPSocketRTT requires kernel support for tcp_info struct, and so it is
+ // enabled only on certain platforms.
+-#if defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #define MAYBE_TestTCPSocketRTT TestTCPSocketRTT
+ #else
+ #define MAYBE_TestTCPSocketRTT DISABLED_TestTCPSocketRTT
diff --git a/devel/electron6/files/patch-net_proxy__resolution_proxy__config__service__linux.cc b/devel/electron6/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
new file mode 100644
index 000000000000..4be453aa55d0
--- /dev/null
+++ b/devel/electron6/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
@@ -0,0 +1,39 @@
+--- net/proxy_resolution/proxy_config_service_linux.cc.orig 2019-09-10 11:14:10 UTC
++++ net/proxy_resolution/proxy_config_service_linux.cc
+@@ -6,7 +6,9 @@
+
+ #include <errno.h>
+ #include <limits.h>
++#if !defined(OS_BSD)
+ #include <sys/inotify.h>
++#endif
+ #include <unistd.h>
+
+ #include <map>
+@@ -495,6 +497,7 @@ int StringToIntOrDefault(base::StringPiece value, int
+ return default_value;
+ }
+
++#if !defined(OS_BSD)
+ // This is the KDE version that reads kioslaverc and simulates gsettings.
+ // Doing this allows the main Delegate code, as well as the unit tests
+ // for it, to stay the same - and the settings map fairly well besides.
+@@ -986,6 +989,7 @@ class SettingGetterImplKDE : public ProxyConfigService
+
+ DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
+ };
++#endif
+
+ } // namespace
+
+@@ -1197,8 +1201,10 @@ ProxyConfigServiceLinux::Delegate::Delegate(
+ case base::nix::DESKTOP_ENVIRONMENT_KDE3:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE4:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE5:
++#if !defined(OS_BSD)
+ setting_getter_.reset(new SettingGetterImplKDE(env_var_getter_.get()));
+ break;
++#endif
+ case base::nix::DESKTOP_ENVIRONMENT_XFCE:
+ case base::nix::DESKTOP_ENVIRONMENT_OTHER:
+ break;
diff --git a/devel/electron6/files/patch-net_proxy__resolution_proxy__resolution__service.cc b/devel/electron6/files/patch-net_proxy__resolution_proxy__resolution__service.cc
new file mode 100644
index 000000000000..f74171817a93
--- /dev/null
+++ b/devel/electron6/files/patch-net_proxy__resolution_proxy__resolution__service.cc
@@ -0,0 +1,29 @@
+--- net/proxy_resolution/proxy_resolution_service.cc.orig 2019-09-10 11:14:10 UTC
++++ net/proxy_resolution/proxy_resolution_service.cc
+@@ -48,7 +48,7 @@
+ #elif defined(OS_MACOSX)
+ #include "net/proxy_resolution/proxy_config_service_mac.h"
+ #include "net/proxy_resolution/proxy_resolver_mac.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "net/proxy_resolution/proxy_config_service_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "net/proxy_resolution/proxy_config_service_android.h"
+@@ -62,7 +62,7 @@ namespace net {
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ constexpr net::NetworkTrafficAnnotationTag kSystemProxyConfigTrafficAnnotation =
+ net::DefineNetworkTrafficAnnotation("proxy_config_system", R"(
+ semantics {
+@@ -1571,7 +1571,7 @@ ProxyResolutionService::CreateSystemProxyConfigService
+ << "profile_io_data.cc::CreateProxyConfigService and this should "
+ << "be used only for examples.";
+ return std::make_unique<UnsetProxyConfigService>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
+ new ProxyConfigServiceLinux());
+
diff --git a/devel/electron6/files/patch-net_quic_platform_impl_quic__ip__address__impl.cc b/devel/electron6/files/patch-net_quic_platform_impl_quic__ip__address__impl.cc
new file mode 100644
index 000000000000..71a422e9b2ca
--- /dev/null
+++ b/devel/electron6/files/patch-net_quic_platform_impl_quic__ip__address__impl.cc
@@ -0,0 +1,10 @@
+--- net/quic/platform/impl/quic_ip_address_impl.cc.orig 2019-09-10 11:14:10 UTC
++++ net/quic/platform/impl/quic_ip_address_impl.cc
+@@ -13,6 +13,7 @@
+ #include <ws2bth.h>
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ #include <netinet/in.h>
++#include <sys/socket.h>
+ #endif
+
+ using std::string;
diff --git a/devel/electron6/files/patch-net_socket_socket__posix.cc b/devel/electron6/files/patch-net_socket_socket__posix.cc
new file mode 100644
index 000000000000..ea6fbf137ee9
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/socket_posix.cc.orig 2019-09-10 11:14:10 UTC
++++ net/socket/socket_posix.cc
+@@ -569,7 +569,7 @@ void SocketPosix::ReadCompleted() {
+ }
+
+ int SocketPosix::DoWrite(IOBuffer* buf, int buf_len) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Disable SIGPIPE for this write. Although Chromium globally disables
+ // SIGPIPE, the net stack may be used in other consumers which do not do
+ // this. MSG_NOSIGNAL is a Linux-only API. On OS X, this is a setsockopt on
diff --git a/devel/electron6/files/patch-net_socket_socks5__client__socket.cc b/devel/electron6/files/patch-net_socket_socks5__client__socket.cc
new file mode 100644
index 000000000000..ef7673c870b7
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_socks5__client__socket.cc
@@ -0,0 +1,13 @@
+--- net/socket/socks5_client_socket.cc.orig 2019-09-10 11:14:10 UTC
++++ net/socket/socks5_client_socket.cc
+@@ -4,6 +4,10 @@
+
+ #include "net/socket/socks5_client_socket.h"
+
++#if defined(OS_BSD)
++#include <netinet/in.h>
++#endif
++
+ #include <utility>
+
+ #include "base/bind.h"
diff --git a/devel/electron6/files/patch-net_socket_tcp__socket__posix.cc b/devel/electron6/files/patch-net_socket_tcp__socket__posix.cc
new file mode 100644
index 000000000000..040ebe9609c1
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_tcp__socket__posix.cc
@@ -0,0 +1,20 @@
+--- net/socket/tcp_socket_posix.cc.orig 2019-09-10 11:14:10 UTC
++++ net/socket/tcp_socket_posix.cc
+@@ -88,6 +88,17 @@ bool SetTCPKeepAlive(int fd, bool enable, int delay) {
+ PLOG(ERROR) << "Failed to set TCP_KEEPALIVE on fd: " << fd;
+ return false;
+ }
++#elif defined(OS_BSD)
++ // Set seconds until first TCP keep alive.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPIDLE on fd: " << fd;
++ return false;
++ }
++ // Set seconds between TCP keep alives.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPINTVL on fd: " << fd;
++ return false;
++ }
+ #endif
+ return true;
+ }
diff --git a/devel/electron6/files/patch-net_socket_udp__socket__posix.cc b/devel/electron6/files/patch-net_socket_udp__socket__posix.cc
new file mode 100644
index 000000000000..814263c38c22
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_udp__socket__posix.cc
@@ -0,0 +1,108 @@
+--- net/socket/udp_socket_posix.cc.orig 2019-09-10 11:14:10 UTC
++++ net/socket/udp_socket_posix.cc
+@@ -69,7 +69,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+ const base::TimeDelta kActivityMonitorMsThreshold =
+ base::TimeDelta::FromMilliseconds(100);
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
+ // requires passing IPv4 address instead of interface index. This function
+ // resolves IPv4 address by interface index. The |address| is returned in
+@@ -98,7 +98,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
+ return OK;
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+
+@@ -645,13 +645,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ }
+
+ void UDPSocketPosix::SetMsgConfirm(bool confirm) {
+-#if !defined(OS_MACOSX) && !defined(OS_IOS)
++#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ if (confirm) {
+ sendto_flags_ |= MSG_CONFIRM;
+ } else {
+ sendto_flags_ &= ~MSG_CONFIRM;
+ }
+-#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
++#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ }
+
+ int UDPSocketPosix::AllowAddressReuse() {
+@@ -666,17 +666,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ int value = broadcast ? 1 : 0;
+ int rv;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // SO_REUSEPORT on OSX permits multiple processes to each receive
+ // UDP multicast or broadcast datagrams destined for the bound
+ // port.
+ // This is only being set on OSX because its behavior is platform dependent
+ // and we are playing it safe by only setting it on platforms where things
+ // break.
++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
++ if (rv != 0)
++ return MapSystemError(errno);
+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
+ if (rv != 0)
+ return MapSystemError(errno);
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
+
+ return rv == 0 ? OK : MapSystemError(errno);
+@@ -938,7 +941,7 @@ int UDPSocketPosix::SetMulticastOptions() {
+ if (multicast_interface_ != 0) {
+ switch (addr_family_) {
+ case AF_INET: {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -950,7 +953,11 @@ int UDPSocketPosix::SetMulticastOptions() {
+ mreq.imr_address.s_addr = htonl(INADDR_ANY);
+ #endif // !defined(OS_MACOSX)
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
++#if defined(OS_BSD)
++ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr), sizeof(mreq.imr_interface.s_addr));
++#else
+ reinterpret_cast<const char*>(&mreq), sizeof(mreq));
++#endif
+ if (rv)
+ return MapSystemError(errno);
+ break;
+@@ -1012,7 +1019,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -1060,9 +1067,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
+ case IPAddress::kIPv4AddressSize: {
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
++#if defined(OS_BSD)
++ ip_mreq mreq = {};
++ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
++ &mreq.imr_interface.s_addr);
++
++ if (error != OK)
++ return error;
++#else
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = INADDR_ANY;
++#endif
+ memcpy(&mreq.imr_multiaddr, group_address.bytes().data(),
+ IPAddress::kIPv4AddressSize);
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_DROP_MEMBERSHIP,
diff --git a/devel/electron6/files/patch-net_socket_udp__socket__posix.h b/devel/electron6/files/patch-net_socket_udp__socket__posix.h
new file mode 100644
index 000000000000..72bf892abcb0
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_udp__socket__posix.h
@@ -0,0 +1,11 @@
+--- net/socket/udp_socket_posix.h.orig 2019-09-10 11:14:10 UTC
++++ net/socket/udp_socket_posix.h
+@@ -33,7 +33,7 @@
+
+ #if defined(__ANDROID__) && defined(__aarch64__)
+ #define HAVE_SENDMMSG 1
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define HAVE_SENDMMSG 1
+ #else
+ #define HAVE_SENDMMSG 0
diff --git a/devel/electron6/files/patch-net_socket_unix__domain__client__socket__posix.cc b/devel/electron6/files/patch-net_socket_unix__domain__client__socket__posix.cc
new file mode 100644
index 000000000000..81685d32a765
--- /dev/null
+++ b/devel/electron6/files/patch-net_socket_unix__domain__client__socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/unix_domain_client_socket_posix.cc.orig 2019-09-10 10:42:43 UTC
++++ net/socket/unix_domain_client_socket_posix.cc
+@@ -56,7 +56,7 @@ bool UnixDomainClientSocket::FillAddress(const std::st
+ return true;
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Convert the path given into abstract socket name. It must start with
+ // the '\0' character, so we are adding it. |addr_len| must specify the
+ // length of the structure exactly, as potentially the socket name may
diff --git a/devel/electron6/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc b/devel/electron6/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
new file mode 100644
index 000000000000..21ee836bf151
--- /dev/null
+++ b/devel/electron6/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
@@ -0,0 +1,20 @@
+--- net/tools/cert_verify_tool/cert_verify_tool.cc.orig 2019-09-10 11:14:10 UTC
++++ net/tools/cert_verify_tool/cert_verify_tool.cc
+@@ -28,7 +28,7 @@
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "net/proxy_resolution/proxy_config.h"
+ #include "net/proxy_resolution/proxy_config_service_fixed.h"
+ #endif
+@@ -49,7 +49,7 @@ void SetUpOnNetworkThread(
+ base::WaitableEvent* initialization_complete_event) {
+ net::URLRequestContextBuilder url_request_context_builder;
+ url_request_context_builder.set_user_agent(GetUserAgent());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ //
diff --git a/devel/electron6/files/patch-net_tools_quic_quic__http__proxy__backend.cc b/devel/electron6/files/patch-net_tools_quic_quic__http__proxy__backend.cc
new file mode 100644
index 000000000000..62ad72465d61
--- /dev/null
+++ b/devel/electron6/files/patch-net_tools_quic_quic__http__proxy__backend.cc
@@ -0,0 +1,11 @@
+--- net/tools/quic/quic_http_proxy_backend.cc.orig 2019-09-10 11:14:11 UTC
++++ net/tools/quic/quic_http_proxy_backend.cc
+@@ -160,7 +160,7 @@ void QuicHttpProxyBackend::InitializeURLRequestContext
+ // Enable HTTP2, but disable QUIC on the backend
+ context_builder.SetSpdyAndQuicEnabled(true /* http2 */, false /* quic */);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ context_builder.set_proxy_config_service(
diff --git a/devel/electron6/files/patch-net_url__request_url__request__context__builder.cc b/devel/electron6/files/patch-net_url__request_url__request__context__builder.cc
new file mode 100644
index 000000000000..0c1dd48a53a2
--- /dev/null
+++ b/devel/electron6/files/patch-net_url__request_url__request__context__builder.cc
@@ -0,0 +1,20 @@
+--- net/url_request/url_request_context_builder.cc.orig 2019-09-10 11:14:11 UTC
++++ net/url_request/url_request_context_builder.cc
+@@ -534,7 +534,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ }
+
+ if (!proxy_resolution_service_) {
+-#if !defined(OS_LINUX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // TODO(willchan): Switch to using this code when
+ // ProxyResolutionService::CreateSystemProxyConfigService()'s signature
+ // doesn't suck.
+@@ -543,7 +543,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ ProxyResolutionService::CreateSystemProxyConfigService(
+ base::ThreadTaskRunnerHandle::Get().get());
+ }
+-#endif // !defined(OS_LINUX) && !defined(OS_ANDROID)
++#endif // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ proxy_resolution_service_ = CreateProxyResolutionService(
+ std::move(proxy_config_service_), context.get(),
+ context->host_resolver(), context->network_delegate(),
diff --git a/devel/electron6/files/patch-pdf_pdfium_pdfium__engine.cc b/devel/electron6/files/patch-pdf_pdfium_pdfium__engine.cc
new file mode 100644
index 000000000000..ae6c92b2918c
--- /dev/null
+++ b/devel/electron6/files/patch-pdf_pdfium_pdfium__engine.cc
@@ -0,0 +1,74 @@
+--- pdf/pdfium/pdfium_engine.cc.orig 2019-09-10 11:14:11 UTC
++++ pdf/pdfium/pdfium_engine.cc
+@@ -134,7 +134,7 @@ constexpr base::TimeDelta kMaxInitialProgressivePaintT
+
+ PDFiumEngine* g_engine_for_fontmapper = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ PP_Instance g_last_instance_id;
+
+@@ -414,7 +414,7 @@ void Release(FPDF_SYSFONTINFO* sysfontinfo) {
+ fontinfo_with_metrics->default_sysfontinfo->Release(
+ fontinfo_with_metrics->default_sysfontinfo);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ PDFiumEngine::CreateDocumentLoaderFunction
+ g_create_document_loader_for_testing = nullptr;
+@@ -664,7 +664,7 @@ bool InitializeSDK() {
+ config.m_v8EmbedderSlot = gin::kEmbedderPDFium;
+ FPDF_InitLibraryWithConfig(&config);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Font loading doesn't work in the renderer sandbox in Linux.
+ FPDF_SetSystemFontInfo(&g_font_info);
+ #else
+@@ -689,7 +689,7 @@ bool InitializeSDK() {
+
+ void ShutdownSDK() {
+ FPDF_DestroyLibrary();
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ delete g_font_info;
+ #endif
+ TearDownV8();
+@@ -713,7 +713,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
+ IFSDK_PAUSE::user = nullptr;
+ IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreviewModeClient does not know its pp::Instance.
+ pp::Instance* instance = client_->GetPluginInstance();
+ if (instance)
+@@ -1177,7 +1177,7 @@ pp::Buffer_Dev PDFiumEngine::PrintPagesAsRasterPdf(
+
+ KillFormFocus();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -2978,7 +2978,7 @@ bool PDFiumEngine::ContinuePaint(int progressive_index
+ DCHECK(image_data);
+
+ last_progressive_start_time_ = base::Time::Now();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+
+@@ -3453,7 +3453,7 @@ void PDFiumEngine::SetCurrentPage(int index) {
+ FORM_DoPageAAction(old_page, form(), FPDFPAGE_AACTION_CLOSE);
+ }
+ most_visible_page_ = index;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ g_last_instance_id = client_->GetPluginInstance()->pp_instance();
+ #endif
+ if (most_visible_page_ != -1 && called_do_document_action_) {
diff --git a/devel/electron6/files/patch-ppapi_proxy_file__io__resource.cc b/devel/electron6/files/patch-ppapi_proxy_file__io__resource.cc
new file mode 100644
index 000000000000..9eef7c1cbd55
--- /dev/null
+++ b/devel/electron6/files/patch-ppapi_proxy_file__io__resource.cc
@@ -0,0 +1,48 @@
+--- ppapi/proxy/file_io_resource.cc.orig 2019-09-10 10:42:43 UTC
++++ ppapi/proxy/file_io_resource.cc
+@@ -285,17 +285,19 @@ int32_t FileIOResource::Write(int64_t offset,
+
+ if (check_quota_) {
+ int64_t increase = 0;
+- uint64_t max_offset = 0;
++ uint64_t _max_offset = 0;
++ // (rene) avoid name collission with /usr/include/vm/vm_map.h on FreeBSD
++ // which also defines max_offset
+ bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
+ if (append) {
+ increase = bytes_to_write;
+ } else {
+- uint64_t max_offset = offset + bytes_to_write;
+- if (max_offset >
++ uint64_t _max_offset = offset + bytes_to_write;
++ if (_max_offset >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ return PP_ERROR_FAILED; // amount calculation would overflow.
+ }
+- increase = static_cast<int64_t>(max_offset) - max_written_offset_;
++ increase = static_cast<int64_t>(_max_offset) - max_written_offset_;
+ }
+
+ if (increase > 0) {
+@@ -319,7 +321,7 @@ int32_t FileIOResource::Write(int64_t offset,
+ if (append)
+ append_mode_write_amount_ += bytes_to_write;
+ else
+- max_written_offset_ = max_offset;
++ max_written_offset_ = _max_offset;
+ }
+ }
+ return WriteValidated(offset, buffer, bytes_to_write, callback);
+@@ -597,9 +599,9 @@ void FileIOResource::OnRequestWriteQuotaComplete(
+ } else {
+ DCHECK_LE(offset + bytes_to_write - max_written_offset_, granted);
+
+- int64_t max_offset = offset + bytes_to_write;
+- if (max_written_offset_ < max_offset)
+- max_written_offset_ = max_offset;
++ int64_t _max_offset = offset + bytes_to_write;
++ if (max_written_offset_ < _max_offset)
++ max_written_offset_ = _max_offset;
+ }
+
+ if (callback->is_blocking()) {
diff --git a/devel/electron6/files/patch-printing_backend_print__backend__cups.h b/devel/electron6/files/patch-printing_backend_print__backend__cups.h
new file mode 100644
index 000000000000..535e9ca5ba04
--- /dev/null
+++ b/devel/electron6/files/patch-printing_backend_print__backend__cups.h
@@ -0,0 +1,11 @@
+--- printing/backend/print_backend_cups.h.orig 2019-09-10 11:14:11 UTC
++++ printing/backend/print_backend_cups.h
+@@ -5,6 +5,8 @@
+ #ifndef PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+ #define PRINTING_BACKEND_PRINT_BACKEND_CUPS_H_
+
++#include <cups/ppd.h>
++
+ #include <string>
+
+ #include "base/files/file_util.h"
diff --git a/devel/electron6/files/patch-printing_cups__config__helper.py b/devel/electron6/files/patch-printing_cups__config__helper.py
new file mode 100644
index 000000000000..4a5df9ff1dd2
--- /dev/null
+++ b/devel/electron6/files/patch-printing_cups__config__helper.py
@@ -0,0 +1,11 @@
+--- printing/cups_config_helper.py.orig 2019-09-10 10:42:43 UTC
++++ printing/cups_config_helper.py
+@@ -65,7 +65,7 @@ def main():
+ mode = sys.argv[1]
+ if len(sys.argv) > 2 and sys.argv[2]:
+ sysroot = sys.argv[2]
+- cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
++ cups_config = os.path.join(sysroot, 'bin', 'cups-config')
+ if not os.path.exists(cups_config):
+ print 'cups-config not found: %s' % cups_config
+ return 1
diff --git a/devel/electron6/files/patch-remoting_base_chromoting__event.cc b/devel/electron6/files/patch-remoting_base_chromoting__event.cc
new file mode 100644
index 000000000000..a95349dacede
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_base_chromoting__event.cc
@@ -0,0 +1,11 @@
+--- remoting/base/chromoting_event.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/base/chromoting_event.cc
+@@ -189,7 +189,7 @@ void ChromotingEvent::AddSystemInfo() {
+ SetString(kCpuKey, base::SysInfo::OperatingSystemArchitecture());
+ SetString(kOsVersionKey, GetOperatingSystemVersionString());
+ SetString(kWebAppVersionKey, STRINGIZE(VERSION));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ Os os = Os::CHROMOTING_LINUX;
+ #elif defined(OS_CHROMEOS)
+ Os os = Os::CHROMOTING_CHROMEOS;
diff --git a/devel/electron6/files/patch-remoting_client_display_sys__opengl.h b/devel/electron6/files/patch-remoting_client_display_sys__opengl.h
new file mode 100644
index 000000000000..48124c8a6bf1
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_client_display_sys__opengl.h
@@ -0,0 +1,11 @@
+--- remoting/client/display/sys_opengl.h.orig 2019-09-10 10:42:43 UTC
++++ remoting/client/display/sys_opengl.h
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_IOS)
+ #include <OpenGLES/ES3/gl.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_GLEXT_PROTOTYPES
+ #include <GL/gl.h>
+ #include <GL/glext.h>
diff --git a/devel/electron6/files/patch-remoting_host_evaluate__capability.cc b/devel/electron6/files/patch-remoting_host_evaluate__capability.cc
new file mode 100644
index 000000000000..879aef159f18
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_evaluate__capability.cc
@@ -0,0 +1,11 @@
+--- remoting/host/evaluate_capability.cc.orig 2019-09-10 10:42:43 UTC
++++ remoting/host/evaluate_capability.cc
+@@ -50,7 +50,7 @@ base::FilePath BuildHostBinaryPath() {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (path.BaseName().value() ==
+ FILE_PATH_LITERAL("chrome-remote-desktop-host")) {
+ return path;
diff --git a/devel/electron6/files/patch-remoting_host_host__attributes.cc b/devel/electron6/files/patch-remoting_host_host__attributes.cc
new file mode 100644
index 000000000000..3dbc10a512e8
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_host__attributes.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_attributes.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/host/host_attributes.cc
+@@ -123,7 +123,7 @@ std::string GetHostAttributes() {
+ media::InitializeMediaFoundation()) {
+ result.push_back("HWEncoder");
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ result.push_back("HWEncoder");
+ #endif
+
diff --git a/devel/electron6/files/patch-remoting_host_host__details.cc b/devel/electron6/files/patch-remoting_host_host__details.cc
new file mode 100644
index 000000000000..e705321f08ce
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_host__details.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_details.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/host/host_details.cc
+@@ -24,7 +24,7 @@ std::string GetHostOperatingSystemName() {
+ return "Mac";
+ #elif defined(OS_CHROMEOS)
+ return "ChromeOS";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return "Linux";
+ #elif defined(OS_ANDROID)
+ return "Android";
diff --git a/devel/electron6/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc b/devel/electron6/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
new file mode 100644
index 000000000000..655c1a6f3c84
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
@@ -0,0 +1,35 @@
+--- remoting/host/it2me/it2me_native_messaging_host_main.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/host/it2me/it2me_native_messaging_host_main.cc
+@@ -27,12 +27,12 @@
+ #include "remoting/host/resources.h"
+ #include "remoting/host/usage_stats_consent.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+
+ #include "base/linux_util.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ #include "base/mac/scoped_nsautorelease_pool.h"
+@@ -106,7 +106,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+
+ remoting::LoadResources("");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Required in order for us to run multiple X11 threads.
+ XInitThreads();
+
+@@ -122,7 +122,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+ // Need to prime the host OS version value for linux to prevent IO on the
+ // network thread. base::GetLinuxDistro() caches the result.
+ base::GetLinuxDistro();
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ base::File read_file;
+ base::File write_file;
diff --git a/devel/electron6/files/patch-remoting_host_me2me__desktop__environment.cc b/devel/electron6/files/patch-remoting_host_me2me__desktop__environment.cc
new file mode 100644
index 000000000000..b83b156ff2f4
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_me2me__desktop__environment.cc
@@ -0,0 +1,11 @@
+--- remoting/host/me2me_desktop_environment.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/host/me2me_desktop_environment.cc
+@@ -131,7 +131,7 @@ bool Me2MeDesktopEnvironment::InitializeSecurity(
+
+ // Otherwise, if the session is shared with the local user start monitoring
+ // the local input and create the in-session UI.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool want_user_interface = false;
+ #elif defined(OS_MACOSX)
+ // Don't try to display any UI on top of the system's login screen as this
diff --git a/devel/electron6/files/patch-remoting_host_remoting__me2me__host.cc b/devel/electron6/files/patch-remoting_host_remoting__me2me__host.cc
new file mode 100644
index 000000000000..62e1fa64c857
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_host_remoting__me2me__host.cc
@@ -0,0 +1,108 @@
+--- remoting/host/remoting_me2me_host.cc.orig 2019-09-10 11:14:11 UTC
++++ remoting/host/remoting_me2me_host.cc
+@@ -126,13 +126,13 @@
+ #include "remoting/host/mac/permission_utils.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+ #include "base/linux_util.h"
+ #include "remoting/host/audio_capturer_linux.h"
+ #include "remoting/host/linux/certificate_watcher.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #include <commctrl.h>
+@@ -167,11 +167,11 @@ const char kApplicationName[] = "chromoting";
+ const char kStdinConfigPath[] = "-";
+ #endif // !defined(REMOTING_MULTI_PROCESS)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The command line switch used to pass name of the pipe to capture audio on
+ // linux.
+ const char kAudioPipeSwitchName[] = "audio-pipe-name";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // The command line switch used to pass name of the unix domain socket used to
+@@ -369,7 +369,7 @@ class HostProcess : public ConfigWatcher::Delegate,
+
+ std::unique_ptr<ChromotingHostContext> context_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Watch for certificate changes and kill the host when changes occur
+ std::unique_ptr<CertificateWatcher> cert_watcher_;
+ #endif
+@@ -589,10 +589,10 @@ bool HostProcess::InitWithCommandLine(const base::Comm
+ enable_window_capture_ = cmd_line->HasSwitch(kWindowIdSwitchName);
+ if (enable_window_capture_) {
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ LOG(WARNING) << "Window capturing is not fully supported on Linux or "
+ "Windows.";
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // uint32_t is large enough to hold window IDs on all platforms.
+ uint32_t window_id;
+@@ -788,7 +788,7 @@ void HostProcess::CreateAuthenticatorFactory() {
+ DCHECK(third_party_auth_config_.token_url.is_valid());
+ DCHECK(third_party_auth_config_.token_validation_url.is_valid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!cert_watcher_) {
+ cert_watcher_.reset(new CertificateWatcher(
+ base::Bind(&HostProcess::ShutdownHost, this, kSuccessExitCode),
+@@ -874,7 +874,7 @@ void HostProcess::StartOnUiThread() {
+ base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)),
+ base::Bind(&HostProcess::OnPolicyError, base::Unretained(this)));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If an audio pipe is specific on the command-line then initialize
+ // AudioCapturerLinux to capture from it.
+ base::FilePath audio_pipe_name = base::CommandLine::ForCurrentProcess()->
+@@ -883,7 +883,7 @@ void HostProcess::StartOnUiThread() {
+ remoting::AudioCapturerLinux::InitializePipeReader(
+ context_->audio_task_runner(), audio_pipe_name);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ base::FilePath security_key_socket_name =
+@@ -940,7 +940,7 @@ void HostProcess::ShutdownOnUiThread() {
+ // It is now safe for the HostProcess to be deleted.
+ self_ = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Cause the global AudioPipeReader to be freed, otherwise the audio
+ // thread will remain in-use and prevent the process from exiting.
+ // TODO(wez): DesktopEnvironmentFactory should own the pipe reader.
+@@ -1634,7 +1634,7 @@ void HostProcess::StartHost() {
+ host_->AddExtension(std::make_unique<TestEchoExtension>());
+
+ // TODO(simonmorris): Get the maximum session duration from a policy.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20));
+ #endif
+
+@@ -1819,7 +1819,7 @@ void HostProcess::OnCrash(const std::string& function_
+ int HostProcessMain() {
+ HOST_LOG << "Starting host process: version " << STRINGIZE(VERSION);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ kReportOfflineReasonSwitchName)) {
+ // Required in order for us to run multiple X11 threads.
diff --git a/devel/electron6/files/patch-remoting_webapp_base_js_platform.js b/devel/electron6/files/patch-remoting_webapp_base_js_platform.js
new file mode 100644
index 000000000000..000ff4201d25
--- /dev/null
+++ b/devel/electron6/files/patch-remoting_webapp_base_js_platform.js
@@ -0,0 +1,17 @@
+--- remoting/webapp/base/js/platform.js.orig 2019-09-10 10:42:43 UTC
++++ remoting/webapp/base/js/platform.js
+@@ -107,6 +107,14 @@ remoting.getSystemInfo = function() {
+ return result;
+ }
+
++ match = new RegExp('FreeBSD ([a-zA-Z0-9_]*)').exec(userAgent);
++ if (match && (match.length >= 2)) {
++ result.osName = remoting.Os.LINUX;
++ result.osVersion = '';
++ result.cpu = match[1];
++ return result;
++ }
++
+ match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(userAgent);
+ if (match && (match.length >= 3)) {
+ result.osName = remoting.Os.MAC;
diff --git a/devel/electron6/files/patch-sandbox_features.gni b/devel/electron6/files/patch-sandbox_features.gni
new file mode 100644
index 000000000000..fb07624e9912
--- /dev/null
+++ b/devel/electron6/files/patch-sandbox_features.gni
@@ -0,0 +1,10 @@
+--- sandbox/features.gni.orig 2019-09-10 10:42:43 UTC
++++ sandbox/features.gni
+@@ -12,6 +12,6 @@ use_seccomp_bpf =
+ (is_linux || is_android) &&
+ (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el")
++ current_cpu == "mips64el") && !is_bsd
+
+ use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
diff --git a/devel/electron6/files/patch-sandbox_linux_BUILD.gn b/devel/electron6/files/patch-sandbox_linux_BUILD.gn
new file mode 100644
index 000000000000..71bc60b9f5f0
--- /dev/null
+++ b/devel/electron6/files/patch-sandbox_linux_BUILD.gn
@@ -0,0 +1,47 @@
+--- sandbox/linux/BUILD.gn.orig 2019-09-10 10:42:43 UTC
++++ sandbox/linux/BUILD.gn
+@@ -12,12 +12,12 @@ if (is_android) {
+ }
+
+ declare_args() {
+- compile_suid_client = is_linux
++ compile_suid_client = is_linux && !is_bsd
+
+- compile_credentials = is_linux
++ compile_credentials = is_linux && !is_bsd
+
+ # On Android, use plain GTest.
+- use_base_test_suite = is_linux
++ use_base_test_suite = is_linux && !is_bsd
+ }
+
+ if (is_nacl_nonsfi) {
+@@ -379,7 +379,7 @@ component("sandbox_services") {
+ public_deps += [ ":sandbox_services_headers" ]
+ }
+
+- if (is_nacl_nonsfi) {
++ if (is_nacl_nonsfi || is_bsd) {
+ cflags = [ "-fgnu-inline-asm" ]
+
+ sources -= [
+@@ -387,6 +387,8 @@ component("sandbox_services") {
+ "services/init_process_reaper.h",
+ "services/scoped_process.cc",
+ "services/scoped_process.h",
++ "services/syscall_wrappers.cc",
++ "services/syscall_wrappers.h",
+ "services/yama.cc",
+ "services/yama.h",
+ "syscall_broker/broker_channel.cc",
+@@ -405,6 +407,10 @@ component("sandbox_services") {
+ "syscall_broker/broker_process.h",
+ "syscall_broker/broker_simple_message.cc",
+ "syscall_broker/broker_simple_message.h",
++ ]
++ sources += [
++ "services/libc_interceptor.cc",
++ "services/libc_interceptor.h",
+ ]
+ } else if (!is_android) {
+ sources += [
diff --git a/devel/electron6/files/patch-sandbox_linux_services_init__process__reaper.cc b/devel/electron6/files/patch-sandbox_linux_services_init__process__reaper.cc
new file mode 100644
index 000000000000..3b9857101454
--- /dev/null
+++ b/devel/electron6/files/patch-sandbox_linux_services_init__process__reaper.cc
@@ -0,0 +1,15 @@
+--- sandbox/linux/services/init_process_reaper.cc.orig 2019-09-10 10:42:43 UTC
++++ sandbox/linux/services/init_process_reaper.cc
+@@ -1,6 +1,7 @@
+ // Copyright 2013 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "sandbox/linux/services/init_process_reaper.h"
+
+@@ -100,3 +101,4 @@ bool CreateInitProcessReaper(base::OnceClosure post_fo
+ }
+
+ } // namespace sandbox.
++#endif
diff --git a/devel/electron6/files/patch-sandbox_linux_services_libc__interceptor.cc b/devel/electron6/files/patch-sandbox_linux_services_libc__interceptor.cc
new file mode 100644
index 000000000000..7f22281afee7
--- /dev/null
+++ b/devel/electron6/files/patch-sandbox_linux_services_libc__interceptor.cc
@@ -0,0 +1,21 @@
+--- sandbox/linux/services/libc_interceptor.cc.orig 2019-09-10 10:42:43 UTC
++++ sandbox/linux/services/libc_interceptor.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <time.h>
+@@ -94,7 +96,7 @@ bool ReadTimeStruct(base::PickleIterator* iter,
+ } else {
+ base::AutoLock lock(g_timezones_lock.Get());
+ auto ret_pair = g_timezones.Get().insert(timezone);
+- output->tm_zone = ret_pair.first->c_str();
++ output->tm_zone = (char *)ret_pair.first->c_str();
+ }
+
+ return true;
diff --git a/devel/electron6/files/patch-services_audio_BUILD.gn b/devel/electron6/files/patch-services_audio_BUILD.gn
new file mode 100644
index 000000000000..09ec5dce8424
--- /dev/null
+++ b/devel/electron6/files/patch-services_audio_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/audio/BUILD.gn.orig 2019-09-10 10:42:43 UTC
++++ services/audio/BUILD.gn
+@@ -99,7 +99,7 @@ source_set("lib") {
+ "//services/service_manager/sandbox:sandbox",
+ ]
+
+- if (is_linux) {
++ if ((is_linux) && (!is_bsd)) {
+ sources += [
+ "audio_sandbox_hook_linux.cc",
+ "audio_sandbox_hook_linux.h",
diff --git a/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.cc b/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.cc
new file mode 100644
index 000000000000..6b5013bbc09c
--- /dev/null
+++ b/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.cc
@@ -0,0 +1,20 @@
+--- services/content/simple_browser/simple_browser_service.cc.orig 2019-09-10 11:14:11 UTC
++++ services/content/simple_browser/simple_browser_service.cc
+@@ -7,7 +7,7 @@
+ #include "build/build_config.h"
+ #include "services/content/simple_browser/window.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/skia/include/ports/SkFontConfigInterface.h" // nogncheck
+ #endif
+
+@@ -23,7 +23,7 @@ SimpleBrowserService::~SimpleBrowserService() = defaul
+
+ void SimpleBrowserService::OnStart() {
+ if (ui_initialization_mode_ == UIInitializationMode::kInitializeUI) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ font_loader_ =
+ sk_make_sp<font_service::FontLoader>(service_binding_.GetConnector());
+ SkFontConfigInterface::SetGlobal(font_loader_);
diff --git a/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.h b/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.h
new file mode 100644
index 000000000000..23416edf2156
--- /dev/null
+++ b/devel/electron6/files/patch-services_content_simple__browser_simple__browser__service.h
@@ -0,0 +1,20 @@
+--- services/content/simple_browser/simple_browser_service.h.orig 2019-09-10 11:14:11 UTC
++++ services/content/simple_browser/simple_browser_service.h
+@@ -15,7 +15,7 @@
+ #include "services/service_manager/public/cpp/service_binding.h"
+ #include "services/service_manager/public/mojom/service.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #endif
+
+@@ -45,7 +45,7 @@ class COMPONENT_EXPORT(SIMPLE_BROWSER) SimpleBrowserSe
+ // service_manager::Service:
+ void OnStart() override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron6/files/patch-services_device_geolocation_location__arbitrator.cc b/devel/electron6/files/patch-services_device_geolocation_location__arbitrator.cc
new file mode 100644
index 000000000000..51f3faafebdd
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_geolocation_location__arbitrator.cc
@@ -0,0 +1,11 @@
+--- services/device/geolocation/location_arbitrator.cc.orig 2019-09-10 10:42:43 UTC
++++ services/device/geolocation/location_arbitrator.cc
+@@ -156,7 +156,7 @@ LocationArbitrator::NewNetworkLocationProvider(
+
+ std::unique_ptr<LocationProvider>
+ LocationArbitrator::NewSystemLocationProvider() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ return nullptr;
+ #else
diff --git a/devel/electron6/files/patch-services_device_hid_BUILD.gn b/devel/electron6/files/patch-services_device_hid_BUILD.gn
new file mode 100644
index 000000000000..9b85f5c60393
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_BUILD.gn
@@ -0,0 +1,22 @@
+--- services/device/hid/BUILD.gn.orig 2019-09-10 10:42:43 UTC
++++ services/device/hid/BUILD.gn
+@@ -51,6 +51,19 @@ source_set("hid") {
+ deps += [ "//device/udev_linux" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "hid_connection_linux.cc",
++ "hid_connection_linux.h",
++ ]
++ sources += [
++ "hid_connection_freebsd.cc",
++ "hid_connection_freebsd.h",
++ "hid_service_freebsd.cc",
++ "hid_service_freebsd.h",
++ ]
++ }
++
+ if (is_chromeos) {
+ deps += [ "//chromeos/dbus/permission_broker" ]
+ }
diff --git a/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.cc b/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.cc
new file mode 100644
index 000000000000..aa83dd50bcaf
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.cc
@@ -0,0 +1,243 @@
+--- services/device/hid/hid_connection_freebsd.cc.orig 2019-09-16 09:25:15 UTC
++++ services/device/hid/hid_connection_freebsd.cc
+@@ -0,0 +1,240 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_connection_freebsd.h"
++
++#include <dev/usb/usbhid.h>
++#include <dev/usb/usb_ioctl.h>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/location.h"
++#include "base/numerics/safe_math.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/strings/stringprintf.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_service.h"
++
++namespace device {
++
++class HidConnectionFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::ScopedFD fd,
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::WeakPtr<HidConnectionFreeBSD> connection)
++ : fd_(std::move(fd)),
++ connection_(connection),
++ origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++ // Report buffers must always have room for the report ID.
++ report_buffer_size_ = device_info->max_input_report_size() + 1;
++ has_report_id_ = device_info->has_report_id();
++ }
++
++ ~BlockingTaskHelper() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
++
++ // Starts the FileDescriptorWatcher that reads input events from the device.
++ // Must be called on a thread that has a base::MessageLoopForIO.
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::internal::AssertBlockingAllowed();
++
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ fd_.get(), base::Bind(&BlockingTaskHelper::OnFileCanReadWithoutBlocking,
++ base::Unretained(this)));
++ }
++
++ void Write(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++
++ auto data = buffer->front();
++ size_t size = buffer->size();
++ // if report id is 0, it shouldn't be included
++ if (data[0] == 0) {
++ data++;
++ size--;
++ }
++
++ ssize_t result = HANDLE_EINTR(write(fd_.get(), data, size));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Write failed";
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), false));
++ } else {
++ if (static_cast<size_t>(result) != size)
++ HID_LOG(EVENT) << "Incomplete HID write: " << result << " != " << size;
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ void GetFeatureReport(uint8_t report_id,
++ scoped_refptr<base::RefCountedBytes> buffer,
++ ReadCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_GET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to get feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else if (result == 0) {
++ HID_LOG(EVENT) << "Get feature result too short.";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true, buffer, result));
++ }
++ }
++
++ void SendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ // FreeBSD does not require report id if it's not used
++ if (buffer->front()[0] == 0) {
++ ugd.ugd_data = buffer->front() + 1;
++ ugd.ugd_maxlen = buffer->size() - 1;
++ } else {
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ }
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_SET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to send feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ private:
++ void OnFileCanReadWithoutBlocking() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ scoped_refptr<base::RefCountedBytes> buffer(new base::RefCountedBytes(report_buffer_size_));
++ unsigned char* data = buffer->front();
++ size_t length = report_buffer_size_;
++ if (!has_report_id_) {
++ // FreeBSD will not prefix the buffer with a report ID if report IDs are not
++ // used by the device. Prefix the buffer with 0.
++ *data++ = 0;
++ length--;
++ }
++
++ ssize_t bytes_read = HANDLE_EINTR(read(fd_.get(), data, length));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_PLOG(EVENT) << "Read failed";
++ // This assumes that the error is unrecoverable and disables reading
++ // from the device until it has been re-opened.
++ // TODO(reillyg): Investigate starting and stopping the file descriptor
++ // watcher in response to pending read requests so that per-request
++ // errors can be returned to the client.
++ file_watcher_.reset();
++ }
++ return;
++ }
++ if (!has_report_id_) {
++ // Behave as if the byte prefixed above as the the report ID was read.
++ bytes_read++;
++ }
++
++ origin_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&HidConnectionFreeBSD::ProcessInputReport,
++ connection_, buffer, bytes_read));
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++ base::ScopedFD fd_;
++ size_t report_buffer_size_;
++ bool has_report_id_;
++ base::WeakPtr<HidConnectionFreeBSD> connection_;
++ const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidConnectionFreeBSD::HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
++ : HidConnection(device_info),
++ blocking_task_runner_(std::move(blocking_task_runner)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(std::move(fd), device_info,
++ weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&BlockingTaskHelper::Start,
++ base::Unretained(helper_.get())));
++}
++
++HidConnectionFreeBSD::~HidConnectionFreeBSD() {}
++
++void HidConnectionFreeBSD::PlatformClose() {
++ // By closing the device on the blocking task runner 1) the requirement that
++ // base::ScopedFD is destroyed on a thread where I/O is allowed is satisfied
++ // and 2) any tasks posted to this task runner that refer to this file will
++ // complete before it is closed.
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++void HidConnectionFreeBSD::PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::Write, base::Unretained(helper_.get()),
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) {
++ // The first byte of the destination buffer is the report ID being requested
++ // and is overwritten by the feature report.
++ DCHECK_GT(device_info()->max_feature_report_size(), 0u);
++ scoped_refptr<base::RefCountedBytes> buffer(
++ new base::RefCountedBytes(device_info()->max_feature_report_size() + 1));
++ if (report_id != 0)
++ buffer->data()[0] = report_id;
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::GetFeatureReport,
++ base::Unretained(helper_.get()), report_id,
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformSendFeatureReport(
++ scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::SendFeatureReport,
++ base::Unretained(helper_.get()), buffer, std::move(callback)));
++}
++
++} // namespace device
diff --git a/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.h b/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.h
new file mode 100644
index 000000000000..0745f973a643
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_hid__connection__freebsd.h
@@ -0,0 +1,71 @@
+--- services/device/hid/hid_connection_freebsd.h.orig 2019-09-16 09:25:15 UTC
++++ services/device/hid/hid_connection_freebsd.h
+@@ -0,0 +1,68 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++#define DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++
++#include <stddef.h>
++#include <stdint.h>
++
++#include "base/files/scoped_file.h"
++#include "base/macros.h"
++#include "base/memory/ptr_util.h"
++#include "base/memory/ref_counted_memory.h"
++#include "base/memory/weak_ptr.h"
++#include "base/sequence_checker.h"
++#include "services/device/hid/hid_connection.h"
++
++namespace base {
++class SequencedTaskRunner;
++}
++
++namespace net {
++class IOBuffer;
++}
++
++namespace device {
++
++class HidConnectionFreeBSD : public HidConnection {
++ public:
++ HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
++
++ private:
++ friend class base::RefCountedThreadSafe<HidConnectionFreeBSD>;
++ class BlockingTaskHelper;
++
++ ~HidConnectionFreeBSD() override;
++
++ // HidConnection implementation.
++ void PlatformClose() override;
++ void PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) override;
++ void PlatformSendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++
++ // |helper_| lives on the sequence to which |blocking_task_runner_| posts
++ // tasks so all calls must be posted there including this object's
++ // destruction.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ base::WeakPtrFactory<HidConnectionFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidConnectionFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_CONNECTION_FREEBSD_H_
diff --git a/devel/electron6/files/patch-services_device_hid_hid__service.cc b/devel/electron6/files/patch-services_device_hid_hid__service.cc
new file mode 100644
index 000000000000..a4a2fa1b937e
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_hid__service.cc
@@ -0,0 +1,20 @@
+--- services/device/hid/hid_service.cc.orig 2019-09-10 11:14:11 UTC
++++ services/device/hid/hid_service.cc
+@@ -16,6 +16,8 @@
+
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ #include "services/device/hid/hid_service_linux.h"
++#elif defined(OS_BSD)
++#include "services/device/hid/hid_service_freebsd.h"
+ #elif defined(OS_MACOSX)
+ #include "services/device/hid/hid_service_mac.h"
+ #elif defined(OS_WIN)
+@@ -36,6 +38,8 @@ constexpr base::TaskTraits HidService::kBlockingTaskTr
+ std::unique_ptr<HidService> HidService::Create() {
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ return base::WrapUnique(new HidServiceLinux());
++#elif defined(OS_BSD)
++ return base::WrapUnique(new HidServiceFreeBSD());
+ #elif defined(OS_MACOSX)
+ return base::WrapUnique(new HidServiceMac());
+ #elif defined(OS_WIN)
diff --git a/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.cc b/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.cc
new file mode 100644
index 000000000000..94d1e44f30bf
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.cc
@@ -0,0 +1,377 @@
+--- services/device/hid/hid_service_freebsd.cc.orig 2019-09-16 09:25:15 UTC
++++ services/device/hid/hid_service_freebsd.cc
+@@ -0,0 +1,374 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_service_freebsd.h"
++
++#include <dev/usb/usb_ioctl.h>
++#include <stdint.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <set>
++#include <string>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/files/file_enumerator.h"
++#include "base/location.h"
++#include "base/logging.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/stl_util.h"
++#include "base/strings/pattern.h"
++#include "base/strings/stringprintf.h"
++#include "base/strings/sys_string_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/string_split.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_connection_freebsd.h"
++
++const int kMaxPermissionChecks = 5;
++
++namespace device {
++
++struct HidServiceFreeBSD::ConnectParams {
++ ConnectParams(scoped_refptr<HidDeviceInfo> device_info,
++ const ConnectCallback& callback)
++ : device_info(std::move(device_info)),
++ callback(callback),
++ task_runner(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)) {}
++ ~ConnectParams() {}
++
++ scoped_refptr<HidDeviceInfo> device_info;
++ ConnectCallback callback;
++ scoped_refptr<base::SequencedTaskRunner> task_runner;
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
++ base::ScopedFD fd;
++};
++
++class HidServiceFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::WeakPtr<HidServiceFreeBSD> service)
++ : service_(std::move(service)),
++ task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++
++ timer_.reset(new base::RepeatingTimer());
++ devd_buffer_ = new net::IOBufferWithSize(1024);
++ }
++
++ ~BlockingTaskHelper() {
++ }
++
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const base::FilePath kDevRoot("/dev");
++ const std::string kUHIDPattern("/dev/uhid*");
++
++ base::FileEnumerator enumerator(kDevRoot, false, base::FileEnumerator::FILES);
++ do {
++ const base::FilePath next_device_path(enumerator.Next());
++ const std::string next_device = next_device_path.value();
++ if (next_device.empty())
++ break;
++
++ if (base::MatchPattern(next_device, kUHIDPattern))
++ OnDeviceAdded(next_device.substr(5));
++ } while (true);
++
++ SetupDevdMonitor();
++
++ task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::FirstEnumerationComplete, service_));
++ }
++
++ bool HaveReadWritePermissions(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid())
++ return false;
++
++ return true;
++ }
++
++ void OnDeviceAdded(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ std::string device_node = "/dev/" + device_id;
++ uint16_t vendor_id = 0xffff;
++ uint16_t product_id = 0xffff;
++ std::string product_name = "";
++ std::string serial_number = "";
++
++ std::vector<uint8_t> report_descriptor;
++
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(ERROR) << "Failed to open '" << device_node
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ return;
++ }
++
++ base::ScopedFD fd;
++ fd.reset(device_file.TakePlatformFile());
++
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_data = NULL;
++ ugd.ugd_maxlen = 0xffff;
++ int result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor size";
++ return;
++ }
++
++ report_descriptor.resize(ugd.ugd_actlen);
++
++ ugd.ugd_data = report_descriptor.data();
++ ugd.ugd_maxlen = ugd.ugd_actlen;
++ result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor";
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo(
++ device_id, vendor_id, product_id, product_name, serial_number,
++ device::mojom::HidBusType::kHIDBusTypeUSB,
++ report_descriptor, device_node));
++
++ task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceFreeBSD::AddDevice,
++ service_, device_info));
++ }
++
++ void OnDeviceRemoved(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ task_runner_->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::RemoveDevice, service_,
++ device_id));
++ }
++
++ private:
++
++ void CheckPendingPermissionChange() {
++ base::internal::AssertBlockingAllowed();
++ std::map<std::string, int>::iterator it;
++ for (it = permissions_checks_attempts_.begin(); it != permissions_checks_attempts_.end();) {
++ std::string device_name = it->first;
++ bool keep = true;
++ if (HaveReadWritePermissions(device_name)) {
++ OnDeviceAdded(device_name);
++ keep = false;
++ }
++ else if (it->second-- <= 0) {
++ HID_LOG(ERROR) << "Still don't have write permissions to '" << device_name
++ << "' after " << kMaxPermissionChecks << " attempts";
++ keep = false;
++ }
++
++ if (keep)
++ ++it;
++ else
++ permissions_checks_attempts_.erase(it++);
++ }
++
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++
++ void SetupDevdMonitor() {
++ base::internal::AssertBlockingAllowed();
++
++ int devd_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
++ if (devd_fd < 0)
++ return;
++
++ struct sockaddr_un sa;
++
++ sa.sun_family = AF_UNIX;
++ strlcpy(sa.sun_path, "/var/run/devd.seqpacket.pipe", sizeof(sa.sun_path));
++ if (connect(devd_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
++ close(devd_fd);
++ return;
++ }
++
++ devd_fd_.reset(devd_fd);
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ devd_fd_.get(), base::Bind(&BlockingTaskHelper::OnDevdMessageCanBeRead,
++ base::Unretained(this)));
++ }
++
++ void OnDevdMessageCanBeRead() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ ssize_t bytes_read = HANDLE_EINTR(recv(devd_fd_.get(), devd_buffer_->data(),
++ devd_buffer_->size() - 1, MSG_WAITALL));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_LOG(ERROR) << "Read failed";
++ file_watcher_.reset();
++ }
++ return;
++ }
++
++ devd_buffer_->data()[bytes_read] = 0;
++ char *data = devd_buffer_->data();
++ // It may take some time for devd to change permissions
++ // on /dev/uhidX node. So do not fail immediately if
++ // open fail. Retry each second for kMaxPermissionChecks
++ // times before giving up entirely
++ if (base::StartsWith(data, "+uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '+'
++ if (HaveReadWritePermissions(device_name))
++ OnDeviceAdded(parts[0].substr(1));
++ else {
++ // Do not re-add to checks
++ if (permissions_checks_attempts_.find(device_name) == permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.insert(std::pair<std::string, int>(device_name, kMaxPermissionChecks));
++ timer_->Start(FROM_HERE, base::TimeDelta::FromSeconds(1),
++ this, &BlockingTaskHelper::CheckPendingPermissionChange);
++ }
++ }
++ }
++ }
++
++ if (base::StartsWith(data, "-uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '-'
++ auto it = permissions_checks_attempts_.find(device_name);
++ if (it != permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.erase(it);
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++ OnDeviceRemoved(parts[0].substr(1));
++ }
++ }
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ // This weak pointer is only valid when checked on this task runner.
++ base::WeakPtr<HidServiceFreeBSD> service_;
++ scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++ std::unique_ptr<base::RepeatingTimer> timer_;
++ base::ScopedFD devd_fd_;
++ scoped_refptr<net::IOBufferWithSize> devd_buffer_;
++ std::map<std::string, int> permissions_checks_attempts_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidServiceFreeBSD::HidServiceFreeBSD()
++ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner_(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&BlockingTaskHelper::Start, base::Unretained(helper_.get())));
++}
++
++HidServiceFreeBSD::~HidServiceFreeBSD() {
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++base::WeakPtr<HidService> HidServiceFreeBSD::GetWeakPtr() {
++ return weak_factory_.GetWeakPtr();
++}
++
++// static
++void HidServiceFreeBSD::OpenOnBlockingThread(
++ std::unique_ptr<ConnectParams> params) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ base::FilePath device_path(params->device_info->device_node());
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(EVENT) << "Failed to open '" << params->device_info->device_node()
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ task_runner->PostTask(FROM_HERE, base::Bind(params->callback, nullptr));
++ return;
++ }
++ params->fd.reset(device_file.TakePlatformFile());
++ FinishOpen(std::move(params));
++}
++
++void HidServiceFreeBSD::Connect(const std::string& device_guid,
++ const ConnectCallback& callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const auto& map_entry = devices().find(device_guid);
++ if (map_entry == devices().end()) {
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, base::Bind(callback, nullptr));
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info = map_entry->second;
++
++ auto params = std::make_unique<ConnectParams>(device_info, callback);
++
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
++ params->blocking_task_runner;
++ blocking_task_runner->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::OpenOnBlockingThread,
++ base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::FinishOpen(std::unique_ptr<ConnectParams> params) {
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ task_runner->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::CreateConnection, base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::CreateConnection(std::unique_ptr<ConnectParams> params) {
++ DCHECK(params->fd.is_valid());
++ params->callback.Run(base::MakeRefCounted<HidConnectionFreeBSD>(
++ std::move(params->device_info), std::move(params->fd),
++ std::move(params->blocking_task_runner)));
++}
++
++} // namespace device
diff --git a/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.h b/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.h
new file mode 100644
index 000000000000..5833cf580590
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_hid_hid__service__freebsd.h
@@ -0,0 +1,51 @@
+--- services/device/hid/hid_service_freebsd.h.orig 2019-09-16 09:25:15 UTC
++++ services/device/hid/hid_service_freebsd.h
+@@ -0,0 +1,48 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_SERVICE_FREEBSD_H_
++#define DEVICE_HID_HID_SERVICE_FREEBSD_H_
++
++#include <string>
++
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/memory/weak_ptr.h"
++#include "base/timer/timer.h"
++#include "services/device/hid/hid_service.h"
++#include "net/base/io_buffer.h"
++
++namespace device {
++
++class HidServiceFreeBSD : public HidService {
++ public:
++ HidServiceFreeBSD();
++ ~HidServiceFreeBSD() override;
++
++ void Connect(const std::string& device_guid,
++ const ConnectCallback& connect) override;
++ base::WeakPtr<HidService> GetWeakPtr() override;
++
++ private:
++ struct ConnectParams;
++ class BlockingTaskHelper;
++
++ static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
++ static void FinishOpen(std::unique_ptr<ConnectParams> params);
++ static void CreateConnection(std::unique_ptr<ConnectParams> params);
++
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ // |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
++ // a weak reference back to the service that owns it.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++ base::WeakPtrFactory<HidServiceFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidServiceFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_SERVICE_FREEBSD_H_
diff --git a/devel/electron6/files/patch-services_device_serial_BUILD.gn b/devel/electron6/files/patch-services_device_serial_BUILD.gn
new file mode 100644
index 000000000000..6afca45e425a
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_serial_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/serial/BUILD.gn.orig 2019-09-10 10:42:43 UTC
++++ services/device/serial/BUILD.gn
+@@ -4,7 +4,7 @@
+
+ import("//build/config/features.gni")
+
+-if (is_win || (is_linux && use_udev) || is_mac) {
++if (is_win || (is_linux && use_udev) || is_mac || is_bsd) {
+ config("platform_support") {
+ visibility = [ ":serial" ]
+ if (is_win) {
diff --git a/devel/electron6/files/patch-services_device_serial_serial__io__handler__posix.cc b/devel/electron6/files/patch-services_device_serial_serial__io__handler__posix.cc
new file mode 100644
index 000000000000..975e34bb2d5c
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_serial_serial__io__handler__posix.cc
@@ -0,0 +1,11 @@
+--- services/device/serial/serial_io_handler_posix.cc.orig 2019-09-10 11:14:11 UTC
++++ services/device/serial/serial_io_handler_posix.cc
+@@ -66,7 +66,7 @@ bool BitrateToSpeedConstant(int bitrate, speed_t* spee
+ BITRATE_TO_SPEED_CASE(9600)
+ BITRATE_TO_SPEED_CASE(19200)
+ BITRATE_TO_SPEED_CASE(38400)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ BITRATE_TO_SPEED_CASE(57600)
+ BITRATE_TO_SPEED_CASE(115200)
+ BITRATE_TO_SPEED_CASE(230400)
diff --git a/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc b/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
new file mode 100644
index 000000000000..2f7a3a2e0313
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
@@ -0,0 +1,20 @@
+--- services/device/time_zone_monitor/time_zone_monitor.cc.orig 2019-09-10 11:14:11 UTC
++++ services/device/time_zone_monitor/time_zone_monitor.cc
+@@ -29,7 +29,7 @@ void TimeZoneMonitor::Bind(device::mojom::TimeZoneMoni
+
+ void TimeZoneMonitor::NotifyClients() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(IS_CHROMECAST))
++#if defined(OS_CHROMEOS) || ((defined(OS_BSD) || defined(OS_LINUX)) && defined(IS_CHROMECAST))
+ // On CrOS (and Chromecast), ICU's default tz is already set to a new zone. No
+ // need to redetect it with detectHostTimeZone().
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::createDefault());
+@@ -41,7 +41,7 @@ void TimeZoneMonitor::NotifyClients() {
+ #else
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::detectHostTimeZone());
+ #endif
+-#if defined(OS_LINUX) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ // We get here multiple times on Linux per a single tz change, but
+ // want to update the ICU default zone and notify renderer only once.
+ std::unique_ptr<icu::TimeZone> current_zone(icu::TimeZone::createDefault());
diff --git a/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc b/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
new file mode 100644
index 000000000000..4259da68a162
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
@@ -0,0 +1,14 @@
+--- services/device/time_zone_monitor/time_zone_monitor_linux.cc.orig 2019-09-10 10:42:43 UTC
++++ services/device/time_zone_monitor/time_zone_monitor_linux.cc
+@@ -104,7 +104,11 @@ class TimeZoneMonitorLinuxImpl
+ // false positives are harmless, assuming the false positive rate is
+ // reasonable.
+ const char* const kFilesToWatch[] = {
++#if defined(OS_BSD)
++ "/etc/localtime",
++#else
+ "/etc/localtime", "/etc/timezone", "/etc/TZ",
++#endif
+ };
+ for (size_t index = 0; index < base::size(kFilesToWatch); ++index) {
+ file_path_watchers_.push_back(std::make_unique<base::FilePathWatcher>());
diff --git a/devel/electron6/files/patch-services_device_usb_BUILD.gn b/devel/electron6/files/patch-services_device_usb_BUILD.gn
new file mode 100644
index 000000000000..b457e80670bb
--- /dev/null
+++ b/devel/electron6/files/patch-services_device_usb_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/usb/BUILD.gn.orig 2019-09-10 11:14:11 UTC
++++ services/device/usb/BUILD.gn
+@@ -111,7 +111,7 @@ static_library("usb") {
+ ]
+ }
+
+- if (is_android || is_chromeos || is_linux) {
++ if ((is_android || is_chromeos || is_linux) && !is_bsd) {
+ sources += [
+ "usb_device_handle_usbfs.cc",
+ "usb_device_handle_usbfs.h",
diff --git a/devel/electron6/files/patch-services_network_BUILD.gn b/devel/electron6/files/patch-services_network_BUILD.gn
new file mode 100644
index 000000000000..2e2eb28eca54
--- /dev/null
+++ b/devel/electron6/files/patch-services_network_BUILD.gn
@@ -0,0 +1,10 @@
+--- services/network/BUILD.gn.orig 2019-09-10 11:14:11 UTC
++++ services/network/BUILD.gn
+@@ -253,7 +253,6 @@ jumbo_component("network_service") {
+
+ if (is_linux) {
+ deps += [
+- "//sandbox/linux:sandbox_services",
+ "//services/service_manager/sandbox:sandbox",
+ ]
+ }
diff --git a/devel/electron6/files/patch-services_network_network__context.cc b/devel/electron6/files/patch-services_network_network__context.cc
new file mode 100644
index 000000000000..c029f106fdaa
--- /dev/null
+++ b/devel/electron6/files/patch-services_network_network__context.cc
@@ -0,0 +1,11 @@
+--- services/network/network_context.cc.orig 2019-09-10 11:14:11 UTC
++++ services/network/network_context.cc
+@@ -1711,7 +1711,7 @@ URLRequestContextOwner NetworkContext::ApplyContextPar
+
+ net::CookieCryptoDelegate* crypto_delegate = nullptr;
+ if (params_->enable_encrypted_cookies) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
+ DCHECK(network_service_->os_crypt_config_set())
+ << "NetworkService::SetCryptConfig must be called before creating a "
+ "NetworkContext with encrypted cookies.";
diff --git a/devel/electron6/files/patch-services_network_network__sandbox__hook__linux.cc b/devel/electron6/files/patch-services_network_network__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..008f5b05108f
--- /dev/null
+++ b/devel/electron6/files/patch-services_network_network__sandbox__hook__linux.cc
@@ -0,0 +1,18 @@
+--- services/network/network_sandbox_hook_linux.cc.orig 2019-09-10 10:42:43 UTC
++++ services/network/network_sandbox_hook_linux.cc
+@@ -14,6 +14,7 @@ using sandbox::syscall_broker::MakeBrokerCommandSet;
+ namespace network {
+
+ bool NetworkPreSandboxHook(service_manager::SandboxLinux::Options options) {
++#if !defined(OS_BSD)
+ auto* instance = service_manager::SandboxLinux::GetInstance();
+
+ // TODO(tsepez): remove universal permission under filesytem root.
+@@ -32,6 +33,7 @@ bool NetworkPreSandboxHook(service_manager::SandboxLin
+ service_manager::SandboxLinux::PreSandboxHook(), options);
+
+ instance->EngageNamespaceSandboxIfPossible();
++#endif // defined(OS_BSD)
+ return true;
+ }
+
diff --git a/devel/electron6/files/patch-services_network_network__service.cc b/devel/electron6/files/patch-services_network_network__service.cc
new file mode 100644
index 000000000000..fc8bb4ca1b33
--- /dev/null
+++ b/devel/electron6/files/patch-services_network_network__service.cc
@@ -0,0 +1,20 @@
+--- services/network/network_service.cc.orig 2019-09-10 11:14:11 UTC
++++ services/network/network_service.cc
+@@ -60,7 +60,7 @@
+ #include "third_party/boringssl/src/include/openssl/cpu.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ #include "components/os_crypt/key_storage_config_linux.h"
+ #endif
+
+@@ -625,7 +625,7 @@ void NetworkService::OnCertDBChanged() {
+ net::CertDatabase::GetInstance()->NotifyObserversCertDBChanged();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void NetworkService::SetCryptConfig(mojom::CryptConfigPtr crypt_config) {
+ #if !defined(IS_CHROMECAST)
+ DCHECK(!os_crypt_config_set_);
diff --git a/devel/electron6/files/patch-services_network_network__service.h b/devel/electron6/files/patch-services_network_network__service.h
new file mode 100644
index 000000000000..8b0617b25692
--- /dev/null
+++ b/devel/electron6/files/patch-services_network_network__service.h
@@ -0,0 +1,11 @@
+--- services/network/network_service.h.orig 2019-09-10 11:14:11 UTC
++++ services/network/network_service.h
+@@ -176,7 +176,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
+ mojom::NetworkService::GetNetworkListCallback callback) override;
+ void UpdateCRLSet(base::span<const uint8_t> crl_set) override;
+ void OnCertDBChanged() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
+ #endif
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron6/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc b/devel/electron6/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
new file mode 100644
index 000000000000..b0efb4bf3544
--- /dev/null
+++ b/devel/electron6/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
@@ -0,0 +1,20 @@
+--- services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc.orig 2019-09-10 11:14:12 UTC
++++ services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc
+@@ -42,7 +42,7 @@ namespace {
+ uint32_t CalculatePrivateFootprintKb(const mojom::RawOSMemDump& os_dump,
+ uint32_t shared_resident_kb) {
+ DCHECK(os_dump.platform_private_footprint);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ uint64_t rss_anon_bytes = os_dump.platform_private_footprint->rss_anon_bytes;
+ uint64_t vm_swap_bytes = os_dump.platform_private_footprint->vm_swap_bytes;
+ return (rss_anon_bytes + vm_swap_bytes) / 1024;
+@@ -151,7 +151,7 @@ memory_instrumentation::mojom::OSMemDumpPtr CreatePubl
+ os_dump->is_peak_rss_resettable = internal_os_dump.is_peak_rss_resettable;
+ os_dump->private_footprint_kb =
+ CalculatePrivateFootprintKb(internal_os_dump, shared_resident_kb);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ os_dump->private_footprint_swap_kb =
+ internal_os_dump.platform_private_footprint->vm_swap_bytes / 1024;
+ #endif
diff --git a/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h b/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
new file mode 100644
index 000000000000..09840a4f3a30
--- /dev/null
+++ b/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
@@ -0,0 +1,32 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h.orig 2019-09-10 10:42:44 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h
+@@ -28,9 +28,9 @@ class COMPONENT_EXPORT(
+ mojom::RawOSMemDump*);
+ static std::vector<mojom::VmRegionPtr> GetProcessMemoryMaps(base::ProcessId);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ static void SetProcSmapsForTesting(FILE*);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(OSMetricsTest, ParseProcSmaps);
+@@ -44,7 +44,7 @@ class COMPONENT_EXPORT(
+ static std::vector<mojom::VmRegionPtr> GetProcessModules(base::ProcessId);
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Provides information on the dump state of resident pages.
+ enum class MappedAndResidentPagesDumpState {
+ // Access to /proc/<pid>/pagemap can be denied for android devices running
+@@ -68,7 +68,7 @@ class COMPONENT_EXPORT(
+ // TODO(chiniforooshan): move to /base/process/process_metrics_linux.cc after
+ // making sure that peak RSS is useful.
+ static size_t GetPeakResidentSetSize(base::ProcessId pid);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ };
+
+ } // namespace memory_instrumentation
diff --git a/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc b/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
new file mode 100644
index 000000000000..25b213ee5170
--- /dev/null
+++ b/devel/electron6/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
@@ -0,0 +1,103 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc.orig 2019-09-10 10:42:44 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc
+@@ -22,8 +22,10 @@
+ #include "build/build_config.h"
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
+
++#if !defined(OS_BSD)
+ // Symbol with virtual address of the start of ELF header of the current binary.
+ extern char __ehdr_start;
++#endif
+
+ namespace memory_instrumentation {
+
+@@ -86,6 +88,7 @@ struct ModuleData {
+
+ ModuleData GetMainModuleData() {
+ ModuleData module_data;
++#if !defined(OS_BSD)
+ Dl_info dl_info;
+ if (dladdr(&__ehdr_start, &dl_info)) {
+ base::debug::ElfBuildIdBuffer build_id;
+@@ -96,6 +99,7 @@ ModuleData GetMainModuleData() {
+ module_data.build_id = std::string(build_id, build_id_length);
+ }
+ }
++#endif
+ return module_data;
+ }
+
+@@ -143,14 +147,14 @@ bool ParseSmapsHeader(const char* header_line,
+ // Build ID is needed to symbolize heap profiles, and is generated only on
+ // official builds. Build ID is only added for the current library (chrome)
+ // since it is racy to read other libraries which can be unmapped any time.
+-#if defined(OFFICIAL_BUILD)
++#if defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+ if (!region->mapped_file.empty() &&
+ base::StartsWith(main_module_data.path, region->mapped_file,
+ base::CompareCase::SENSITIVE) &&
+ !main_module_data.build_id.empty()) {
+ region->module_debugid = main_module_data.build_id;
+ }
+-#endif // defined(OFFICIAL_BUILD)
++#endif // defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+
+ return res;
+ }
+@@ -239,6 +243,7 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ mojom::RawOSMemDump* dump) {
+ // TODO(chiniforooshan): There is no need to read both /statm and /status
+ // files. Refactor to get everything from /status using ProcessMetric.
++#if !defined(OS_BSD)
+ auto statm_file = GetProcPidDir(pid).Append("statm");
+ auto autoclose = base::ScopedFD(open(statm_file.value().c_str(), O_RDONLY));
+ int statm_fd = autoclose.get();
+@@ -253,6 +258,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ if (!success)
+ return false;
++#else
++ uint64_t resident_pages = 0;
++ uint64_t shared_pages = 0;
++#endif
+
+ auto process_metrics = CreateProcessMetrics(pid);
+
+@@ -293,6 +302,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ // static
+ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMaps(base::ProcessId pid) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return std::vector<VmRegionPtr>();
++#else
+ std::vector<VmRegionPtr> maps;
+ uint32_t res = 0;
+ if (g_proc_smaps_for_testing) {
+@@ -310,6 +323,7 @@ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMa
+ return std::vector<VmRegionPtr>();
+
+ return maps;
++#endif
+ }
+
+ // static
+@@ -317,6 +331,10 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ const size_t start_address,
+ const size_t end_address,
+ std::vector<uint8_t>* accessed_pages_bitmap) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return OSMetrics::MappedAndResidentPagesDumpState::kFailure;
++#else
+ const char* kPagemap = "/proc/self/pagemap";
+
+ base::ScopedFILE pagemap_file(fopen(kPagemap, "r"));
+@@ -358,6 +376,7 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ }
+ }
+ return OSMetrics::MappedAndResidentPagesDumpState::kSuccess;
++#endif
+ }
+
+ // static
diff --git a/devel/electron6/files/patch-services_service__manager_embedder_main.cc b/devel/electron6/files/patch-services_service__manager_embedder_main.cc
new file mode 100644
index 000000000000..a7f0ca6b549b
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_embedder_main.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/embedder/main.cc.orig 2019-09-10 11:14:12 UTC
++++ services/service_manager/embedder/main.cc
+@@ -271,7 +271,7 @@ int Main(const MainParams& params) {
+ #endif
+ base::EnableTerminationOnOutOfMemory();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The various desktop environments set this environment variable that
+ // allows the dbus client library to connect directly to the bus. When this
+ // variable is not set (test environments like xvfb-run), the dbus client
diff --git a/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.cc b/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.cc
new file mode 100644
index 000000000000..3082baf1a0f1
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.cc
@@ -0,0 +1,19 @@
+--- services/service_manager/embedder/set_process_title_linux.cc.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/embedder/set_process_title_linux.cc
+@@ -49,6 +49,8 @@
+ extern char** environ;
+
+ static char** g_main_argv = NULL;
++
++#if !defined(OS_FREEBSD)
+ static char* g_orig_argv0 = NULL;
+
+ void setproctitle(const char* fmt, ...) {
+@@ -101,6 +103,7 @@ void setproctitle(const char* fmt, ...) {
+ va_end(ap);
+ g_main_argv[1] = NULL;
+ }
++#endif
+
+ // A version of this built into glibc would not need this function, since
+ // it could stash the argv pointer in __libc_start_main(). But we need it.
diff --git a/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.h b/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.h
new file mode 100644
index 000000000000..84f7f55d3d85
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_embedder_set__process__title__linux.h
@@ -0,0 +1,20 @@
+--- services/service_manager/embedder/set_process_title_linux.h.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/embedder/set_process_title_linux.h
+@@ -5,6 +5,9 @@
+ #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+ #define SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+
++#include "build/build_config.h"
++
++#if !defined(OS_FREEBSD)
+ // Set the process title that will show in "ps" and similar tools. Takes
+ // printf-style format string and arguments. After calling setproctitle()
+ // the original main() argv[] array should not be used. By default, the
+@@ -14,6 +17,7 @@
+ // This signature and naming is to be compatible with most other Unix
+ // implementations of setproctitle().
+ void setproctitle(const char* fmt, ...);
++#endif
+
+ // Initialize state needed for setproctitle() on Linux. Pass the argv pointer
+ // from main() to setproctitle_init() before calling setproctitle().
diff --git a/devel/electron6/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn b/devel/electron6/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
new file mode 100644
index 000000000000..66965d4867a0
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
@@ -0,0 +1,14 @@
+--- services/service_manager/public/cpp/service_executable/BUILD.gn.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/public/cpp/service_executable/BUILD.gn
+@@ -29,6 +29,11 @@ source_set("support") {
+ "//sandbox/linux:seccomp_bpf",
+ ]
+ }
++ if (is_bsd) {
++ deps -= [
++ "//sandbox/linux:seccomp_bpf"
++ ]
++ }
+ }
+
+ source_set("switches") {
diff --git a/devel/electron6/files/patch-services_service__manager_sandbox_BUILD.gn b/devel/electron6/files/patch-services_service__manager_sandbox_BUILD.gn
new file mode 100644
index 000000000000..1d3dd736922d
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_sandbox_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/BUILD.gn.orig 2019-09-10 11:14:12 UTC
++++ services/service_manager/sandbox/BUILD.gn
+@@ -28,7 +28,7 @@ component("sandbox") {
+ "//base",
+ "//sandbox:common",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/bpf_audio_policy_linux.cc",
+ "linux/bpf_audio_policy_linux.h",
diff --git a/devel/electron6/files/patch-services_service__manager_sandbox_sandbox__type.cc b/devel/electron6/files/patch-services_service__manager_sandbox_sandbox__type.cc
new file mode 100644
index 000000000000..d921f9ea3277
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_sandbox_sandbox__type.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/sandbox_type.cc.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/sandbox/sandbox_type.cc
+@@ -25,7 +25,7 @@ bool IsUnsandboxedSandboxType(SandboxType sandbox_type
+ service_manager::features::kXRSandbox);
+ #endif
+ case SANDBOX_TYPE_AUDIO:
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return !base::FeatureList::IsEnabled(
+ service_manager::features::kAudioServiceSandbox);
+ #else
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_common_zygote__features.gni b/devel/electron6/files/patch-services_service__manager_zygote_common_zygote__features.gni
new file mode 100644
index 000000000000..c17a86909abe
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_common_zygote__features.gni
@@ -0,0 +1,8 @@
+--- services/service_manager/zygote/common/zygote_features.gni.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/common/zygote_features.gni
+@@ -2,4 +2,4 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-use_zygote_handle = is_posix && !is_android && !is_mac
++use_zygote_handle = is_posix && !is_android && !is_mac && !is_bsd
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc b/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
new file mode 100644
index 000000000000..2bb512277af0
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
@@ -0,0 +1,40 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.cc.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.cc
+@@ -72,6 +72,7 @@ ZygoteHostImpl* ZygoteHostImpl::GetInstance() {
+ }
+
+ void ZygoteHostImpl::Init(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
+ return;
+ }
+@@ -122,6 +123,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& com
+ "you can try using --"
+ << service_manager::switches::kNoSandbox << ".";
+ }
++#endif
+ }
+
+ void ZygoteHostImpl::AddZygotePid(pid_t pid) {
+@@ -146,6 +148,7 @@ pid_t ZygoteHostImpl::LaunchZygote(
+ base::CommandLine* cmd_line,
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds) {
++#if !defined(OS_BSD)
+ int fds[2];
+ CHECK_EQ(0, socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds));
+ CHECK(base::UnixDomainSocket::EnableReceiveProcessId(fds[0]));
+@@ -210,9 +213,12 @@ pid_t ZygoteHostImpl::LaunchZygote(
+
+ AddZygotePid(pid);
+ return pid;
++#else
++ return 0;
++#endif
+ }
+
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ void ZygoteHostImpl::AdjustRendererOOMScore(base::ProcessHandle pid,
+ int score) {
+ // 1) You can't change the oom_score_adj of a non-dumpable process
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h b/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
new file mode 100644
index 000000000000..1b4fcd5460fc
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
@@ -0,0 +1,13 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.h.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.h
+@@ -44,8 +44,10 @@ class COMPONENT_EXPORT(SERVICE_MANAGER_ZYGOTE) ZygoteH
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds);
+
++#if !defined(OS_BSD)
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) override;
++#endif
+ bool HasZygote() { return !zygote_pids_.empty(); }
+
+ private:
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_zygote__host__linux.h b/devel/electron6/files/patch-services_service__manager_zygote_zygote__host__linux.h
new file mode 100644
index 000000000000..803c7da65aa6
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_zygote__host__linux.h
@@ -0,0 +1,16 @@
+--- services/service_manager/zygote/zygote_host_linux.h.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/zygote_host_linux.h
+@@ -30,11 +30,13 @@ class ZygoteHost {
+ // after the first render has been forked.
+ virtual int GetRendererSandboxStatus() const = 0;
+
++#if !defined(OS_BSD)
+ // Adjust the OOM score of the given renderer's PID. The allowed
+ // range for the score is [0, 1000], where higher values are more
+ // likely to be killed by the OOM killer.
+ virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) = 0;
++#endif
+ };
+
+ } // namespace service_manager
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_zygote__linux.cc b/devel/electron6/files/patch-services_service__manager_zygote_zygote__linux.cc
new file mode 100644
index 000000000000..de1deed27873
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_zygote__linux.cc
@@ -0,0 +1,15 @@
+--- services/service_manager/zygote/zygote_linux.cc.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/zygote_linux.cc
+@@ -1,6 +1,7 @@
+ // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "services/service_manager/zygote/zygote_linux.h"
+
+@@ -657,3 +658,4 @@ bool Zygote::HandleGetSandboxStatus(int fd, base::Pick
+ }
+
+ } // namespace service_manager
++#endif
diff --git a/devel/electron6/files/patch-services_service__manager_zygote_zygote__main__linux.cc b/devel/electron6/files/patch-services_service__manager_zygote_zygote__main__linux.cc
new file mode 100644
index 000000000000..e59d3b343be9
--- /dev/null
+++ b/devel/electron6/files/patch-services_service__manager_zygote_zygote__main__linux.cc
@@ -0,0 +1,48 @@
+--- services/service_manager/zygote/zygote_main_linux.cc.orig 2019-09-10 10:42:44 UTC
++++ services/service_manager/zygote/zygote_main_linux.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -101,6 +103,7 @@ static bool CreateInitProcessReaper(
+ // created through the setuid sandbox.
+ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox,
+ base::OnceClosure post_fork_parent_callback) {
++#if !defined(OS_BSD)
+ DCHECK(setuid_sandbox);
+ DCHECK(setuid_sandbox->IsSuidSandboxChild());
+
+@@ -133,6 +136,9 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxCli
+
+ CHECK(service_manager::SandboxDebugHandling::SetDumpableStatusAndHandlers());
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ static void DropAllCapabilities(int proc_fd) {
+@@ -178,6 +184,7 @@ static void EnterLayerOneSandbox(service_manager::Sand
+
+ bool ZygoteMain(
+ std::vector<std::unique_ptr<ZygoteForkDelegate>> fork_delegates) {
++#if !defined(OS_BSD)
+ sandbox::SetAmZygoteOrRenderer(true, GetSandboxFD());
+
+ auto* linux_sandbox = service_manager::SandboxLinux::GetInstance();
+@@ -240,6 +247,9 @@ bool ZygoteMain(
+
+ // This function call can return multiple times, once per fork().
+ return zygote.ProcessRequests();
++#else
++ return false;
++#endif
+ }
+
+ } // namespace service_manager
diff --git a/devel/electron6/files/patch-services_video__capture_broadcasting__receiver.cc b/devel/electron6/files/patch-services_video__capture_broadcasting__receiver.cc
new file mode 100644
index 000000000000..4bb8fcaded29
--- /dev/null
+++ b/devel/electron6/files/patch-services_video__capture_broadcasting__receiver.cc
@@ -0,0 +1,20 @@
+--- services/video_capture/broadcasting_receiver.cc.orig 2019-09-10 11:14:12 UTC
++++ services/video_capture/broadcasting_receiver.cc
+@@ -40,7 +40,7 @@ void CloneSharedBufferHandle(const mojo::ScopedSharedB
+ void CloneSharedBufferToRawFileDescriptorHandle(
+ const mojo::ScopedSharedBufferHandle& source,
+ media::mojom::VideoBufferHandlePtr* target) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ media::SharedMemoryHandleProvider provider;
+ provider.InitFromMojoHandle(
+ source->Clone(mojo::SharedBufferHandle::AccessMode::READ_WRITE));
+@@ -174,7 +174,7 @@ void BroadcastingReceiver::BufferContext::
+ ConvertRawFileDescriptorToSharedBuffer() {
+ DCHECK(buffer_handle_->is_shared_memory_via_raw_file_descriptor());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ media::SharedMemoryHandleProvider provider;
+ provider.InitAsReadOnlyFromRawFileDescriptor(
+ std::move(buffer_handle_->get_shared_memory_via_raw_file_descriptor()
diff --git a/devel/electron6/files/patch-skia_ext_SkMemory__new__handler.cpp b/devel/electron6/files/patch-skia_ext_SkMemory__new__handler.cpp
new file mode 100644
index 000000000000..eb122c63a178
--- /dev/null
+++ b/devel/electron6/files/patch-skia_ext_SkMemory__new__handler.cpp
@@ -0,0 +1,20 @@
+--- skia/ext/SkMemory_new_handler.cpp.orig 2019-09-10 10:42:44 UTC
++++ skia/ext/SkMemory_new_handler.cpp
+@@ -77,7 +77,7 @@ static void* malloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = malloc(size);
+ #else
+ // It's the responsibility of the caller to check the return value.
+@@ -97,7 +97,7 @@ static void* calloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = calloc(1, size);
+ #else
+ // It's the responsibility of the caller to check the return value.
diff --git a/devel/electron6/files/patch-third__party_angle_BUILD.gn b/devel/electron6/files/patch-third__party_angle_BUILD.gn
new file mode 100644
index 000000000000..954435e4c889
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_BUILD.gn
@@ -0,0 +1,21 @@
+--- third_party/angle/BUILD.gn.orig 2019-09-10 11:15:10 UTC
++++ third_party/angle/BUILD.gn
+@@ -322,6 +322,7 @@ angle_static_library("angle_gpu_info_util") {
+ "X11",
+ "Xi",
+ "Xext",
++ "GL",
+ ]
+ }
+ }
+@@ -929,10 +930,6 @@ foreach(is_shared_library,
+ libs = []
+ if (is_linux) {
+ sources += util_linux_sources
+- libs += [
+- "rt",
+- "dl",
+- ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
new file mode 100644
index 000000000000..67a5ed46dc17
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
@@ -0,0 +1,16 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_internal.h.orig 2019-09-10 11:15:11 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_internal.h
+@@ -14,8 +14,13 @@
+ namespace angle
+ {
+
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices);
++
+ // Defined in SystemInfo_libpci when GPU_INFO_USE_LIBPCI is defined.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices);
++#if defined(__FreeBSD__)
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices);
++#endif
+ // Defined in SystemInfo_x11 when GPU_INFO_USE_X11 is defined.
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version);
+
diff --git a/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
new file mode 100644
index 000000000000..16812e3f628c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
@@ -0,0 +1,90 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp.orig 2019-09-10 11:15:11 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp
+@@ -12,6 +12,11 @@
+ #include <pci/pci.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#include <sys/pciio.h>
++#endif
++
+ #include "common/angleutils.h"
+ #include "common/debug.h"
+
+@@ -82,6 +87,75 @@ struct LibPCI : private angle::NonCopyable
+ };
+
+ } // anonymous namespace
++
++#if defined(__FreeBSD__)
++// Adds an entry per PCI GPU found and fills the device and vendor ID.
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices)
++{
++ int fd;
++ struct pci_conf_io conf;
++ struct pci_conf *matches;
++ uint32_t offset = 0;
++
++ fd = open("/dev/pci", O_RDONLY);
++ if (fd < 0)
++ return false;
++
++ matches = new struct pci_conf[32];
++ conf.generation = 0;
++ do {
++ conf.pat_buf_len = 0;
++ conf.num_patterns = 0;
++ conf.patterns = NULL;
++ conf.match_buf_len = 32 * sizeof(struct pci_conf);
++ conf.num_matches = 32;
++ conf.matches = matches;
++ conf.offset = offset;
++ conf.status = PCI_GETCONF_ERROR;
++ if (ioctl(fd, PCIOCGETCONF, &conf) < 0) {
++ if (errno == ENODEV)
++ break;
++ }
++ /* PCI_GETCONF_LIST_CHANGED would require us to start over. */
++ if (conf.status == PCI_GETCONF_ERROR || conf.status == PCI_GETCONF_LIST_CHANGED) {
++ break;
++ }
++
++ for (unsigned int i = 0; i < conf.num_matches; i++) {
++ uint16_t device_class = (matches[i].pc_class << 8) | matches[i].pc_subclass;
++
++ // Skip non-GPU devices
++ switch (device_class)
++ {
++ case PCI_CLASS_DISPLAY_VGA:
++ case PCI_CLASS_DISPLAY_XGA:
++ case PCI_CLASS_DISPLAY_3D:
++ break;
++ default:
++ continue;
++ }
++
++ // Skip unknown devices
++ if (matches[i].pc_vendor == 0 || matches[i].pc_device == 0) {
++ continue;
++ }
++
++ GPUDeviceInfo info;
++ info.vendorId = matches[i].pc_vendor;
++ info.deviceId = matches[i].pc_device;
++
++ devices->push_back(info);
++ }
++ offset += conf.num_matches;
++ } while (conf.status == PCI_GETCONF_MORE_DEVS);
++
++ delete[] matches;
++
++ close(fd);
++
++ return true;
++}
++#endif
+
+ // Adds an entry per PCI GPU found and fills the device and vendor ID.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices)
diff --git a/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
new file mode 100644
index 000000000000..f671b69d3c18
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
@@ -0,0 +1,21 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp.orig 2019-09-10 11:15:11 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp
+@@ -71,10 +71,18 @@ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo
+
+ bool GetSystemInfo(SystemInfo *info)
+ {
++#if defined(__FreeBSD__)
++ if (!CollectMesaCardInfo(&(info->gpus)))
++ {
++ if (!GetPCIDevicesFreeBSD(&(info->gpus)))
++ return false;
++ }
++#else
+ if (!GetPCIDevicesWithLibPCI(&(info->gpus)))
+ {
+ return false;
+ }
++#endif
+
+ if (info->gpus.size() == 0)
+ {
diff --git a/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
new file mode 100644
index 000000000000..e05666a44695
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
@@ -0,0 +1,55 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp.orig 2019-09-10 11:15:11 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp
+@@ -8,6 +8,8 @@
+
+ #include "gpu_info_util/SystemInfo_internal.h"
+
++#include <GL/glx.h>
++#include <GL/glxext.h>
+ #include <X11/Xlib.h>
+
+ #include "common/debug.h"
+@@ -18,8 +20,43 @@
+ # error SystemInfo_x11.cpp compiled without GPU_INFO_USE_X11
+ #endif
+
++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
++
+ namespace angle
+ {
++
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices)
++{
++
++ unsigned int vid[3], did[3];
++
++ Display *display = XOpenDisplay(NULL);
++ if (!display) {
++ return false;
++ }
++
++ PFNGLXQUERYRENDERERINTEGERMESAPROC queryInteger =
++ (PFNGLXQUERYRENDERERINTEGERMESAPROC) glXGetProcAddressARB((const GLubyte *)
++ "glXQueryRendererIntegerMESA");
++
++ if (!queryInteger)
++ return false;
++
++ bool vendor_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_VENDOR_ID_MESA, vid);
++ bool device_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_DEVICE_ID_MESA, did);
++
++ if (vendor_ret && device_ret) {
++ GPUDeviceInfo info;
++ info.vendorId = vid[0];
++ info.deviceId = did[0];
++ devices->push_back(info);
++ }
++
++ return true;
++}
+
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version)
+ {
diff --git a/devel/electron6/files/patch-third__party_angle_src_libANGLE_Display.cpp b/devel/electron6/files/patch-third__party_angle_src_libANGLE_Display.cpp
new file mode 100644
index 000000000000..7c6c41e420bc
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_libANGLE_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/angle/src/libANGLE/Display.cpp.orig 2019-09-10 11:15:11 UTC
++++ third_party/angle/src/libANGLE/Display.cpp
+@@ -66,7 +66,7 @@
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ # include "libANGLE/renderer/vulkan/win32/DisplayVkWin32.h"
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ # include "libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h"
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ # include "libANGLE/renderer/vulkan/android/DisplayVkAndroid.h"
+@@ -261,7 +261,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const Attrib
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ impl = new rx::DisplayVkWin32(state);
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ impl = new rx::DisplayVkXcb(state);
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ impl = new rx::DisplayVkAndroid(state);
diff --git a/devel/electron6/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h b/devel/electron6/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
new file mode 100644
index 000000000000..4ada61211ff8
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/renderer/driver_utils.h.orig 2019-09-10 11:15:12 UTC
++++ third_party/angle/src/libANGLE/renderer/driver_utils.h
+@@ -107,7 +107,7 @@ inline bool IsWindows()
+
+ inline bool IsLinux()
+ {
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
new file mode 100644
index 000000000000..fb4921833d4a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/loader.c.orig 2019-09-10 10:47:33 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/loader.c
+@@ -229,7 +229,7 @@ void *loader_device_heap_realloc(const struct loader_d
+ }
+
+ // Environment variables
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+
+ static inline char *loader_getenv(const char *name, const struct loader_instance *inst) {
+ // No allocation of memory necessary for Linux, but we should at least touch
diff --git a/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
new file mode 100644
index 000000000000..a83eb5403249
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h.orig 2019-09-10 10:47:33 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron6/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
new file mode 100644
index 000000000000..299a498d82b0
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h.orig 2019-09-10 10:48:22 UTC
++++ third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_BUILD.gn b/devel/electron6/files/patch-third__party_blink_renderer_BUILD.gn
new file mode 100644
index 000000000000..7591c034e872
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_BUILD.gn
@@ -0,0 +1,13 @@
+--- third_party/blink/renderer/BUILD.gn.orig 2019-09-10 10:42:46 UTC
++++ third_party/blink/renderer/BUILD.gn
+@@ -45,8 +45,8 @@ config("inside_blink") {
+ "-Wconversion",
+ "-Wno-float-conversion",
+ "-Wno-sign-conversion",
+- "-Wno-implicit-float-conversion",
+- "-Wno-implicit-int-conversion",
++# "-Wno-implicit-float-conversion",
++# "-Wno-implicit-int-conversion",
+ ]
+ }
+ }
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
new file mode 100644
index 000000000000..1d51ccf95af5
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/editing/editing_behavior.cc.orig 2019-09-10 10:42:47 UTC
++++ third_party/blink/renderer/core/editing/editing_behavior.cc
+@@ -270,7 +270,7 @@ bool EditingBehavior::ShouldInsertCharacter(const Keyb
+ // unexpected behaviour
+ if (ch < ' ')
+ return false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // According to XKB map no keyboard combinations with ctrl key are mapped to
+ // printable characters, however we need the filter as the DomKey/text could
+ // contain printable characters.
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
new file mode 100644
index 000000000000..20fbc09c0af1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc.orig 2019-09-10 11:14:14 UTC
++++ third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+@@ -40,7 +40,7 @@ constexpr TimeDelta kEncodeRowSlackBeforeDeadline =
+ TimeDelta::FromMicroseconds(100);
+
+ /* The value is based on user statistics on Nov 2017. */
+-#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN))
++#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)) || defined(OS_BSD)
+ const double kIdleTaskStartTimeoutDelayMs = 1000.0;
+ #else
+ const double kIdleTaskStartTimeoutDelayMs = 4000.0; // For ChromeOS, Mobile
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
new file mode 100644
index 000000000000..98516f626b8e
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/forms/internal_popup_menu.cc.orig 2019-09-10 11:14:15 UTC
++++ third_party/blink/renderer/core/html/forms/internal_popup_menu.cc
+@@ -120,7 +120,7 @@ class InternalPopupMenu::ItemIterationContext {
+ is_in_group_(false),
+ buffer_(buffer) {
+ DCHECK(buffer_);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On other platforms, the <option> background color is the same as the
+ // <select> background color. On Linux, that makes the <option>
+ // background color very dark, so by default, try to use a lighter
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
new file mode 100644
index 000000000000..20f3ee32cef5
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/inspector/inspector_memory_agent.cc.orig 2019-09-10 11:14:15 UTC
++++ third_party/blink/renderer/core/inspector/inspector_memory_agent.cc
+@@ -188,7 +188,7 @@ InspectorMemoryAgent::GetSamplingProfileById(uint32_t
+
+ std::vector<std::string> InspectorMemoryAgent::Symbolize(
+ const std::vector<void*>& addresses) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(alph): Move symbolization to the client.
+ std::vector<void*> addresses_to_symbolize;
+ for (void* address : addresses) {
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_layout_layout__view.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
new file mode 100644
index 000000000000..be79d23536a7
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/layout/layout_view.cc.orig 2019-09-10 11:14:15 UTC
++++ third_party/blink/renderer/core/layout/layout_view.cc
+@@ -58,7 +58,7 @@
+ #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
+ #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -321,7 +321,7 @@ void LayoutView::UpdateLayout() {
+ DCHECK(!layout_state_);
+ LayoutState root_layout_state(*this);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The font code in FontPlatformData does not have a direct connection to the
+ // document, the frame or anything from which we could retrieve the device
+ // scale factor. After using zoom for DSF, the GraphicsContext does only ever
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
new file mode 100644
index 000000000000..bf1e019b551b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/paint/paint_layer.cc.orig 2019-09-10 11:14:15 UTC
++++ third_party/blink/renderer/core/paint/paint_layer.cc
+@@ -103,7 +103,7 @@ namespace {
+ static CompositingQueryMode g_compositing_query_mode =
+ kCompositingQueriesAreOnlyAllowedInCertainDocumentLifecyclePhases;
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct SameSizeAsPaintLayer : DisplayItemClient {
+ // The bit fields may fit into the machine word of DisplayItemClient which
+ // has only 8-bit data.
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc b/devel/electron6/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
new file mode 100644
index 000000000000..b888ab86e008
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc.orig 2019-09-10 11:14:15 UTC
++++ third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
+@@ -332,7 +332,7 @@ ScrollbarPart ScrollbarThemeAura::InvalidateOnThumbPos
+
+ bool ScrollbarThemeAura::ShouldCenterOnThumb(const Scrollbar& scrollbar,
+ const WebMouseEvent& event) {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ if (event.button == WebPointerProperties::Button::kMiddle)
+ return true;
+ #endif
+@@ -347,7 +347,7 @@ bool ScrollbarThemeAura::ShouldSnapBackToDragOrigin(
+ // Disable snapback on desktop Linux to better integrate with the desktop
+ // behavior. Typically, Linux apps do not implement scrollbar snapback (this is
+ // true for at least GTK and QT apps).
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return false;
+ #endif
+
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_BUILD.gn b/devel/electron6/files/patch-third__party_blink_renderer_platform_BUILD.gn
new file mode 100644
index 000000000000..91edcd89de39
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/blink/renderer/platform/BUILD.gn.orig 2019-09-16 09:24:25 UTC
++++ third_party/blink/renderer/platform/BUILD.gn
+@@ -111,6 +111,7 @@ executable("character_data_generator") {
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ libs = [ "cxxrt" ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
new file mode 100644
index 000000000000..22aff7adfd71
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.cc.orig 2019-09-10 11:14:16 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.cc
+@@ -72,7 +72,7 @@ static const char kColorEmojiLocale[] = "und-Zsye";
+
+ SkFontMgr* FontCache::static_font_manager_ = nullptr;
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float FontCache::device_scale_factor_ = 1.0;
+ #endif
+
+@@ -95,7 +95,7 @@ FontCache::FontCache()
+ FontPlatformData* FontCache::SystemFontPlatformData(
+ const FontDescription& font_description) {
+ const AtomicString& family = FontCache::SystemFontFamily();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (family.IsEmpty() || family == font_family_names::kSystemUi)
+ return nullptr;
+ #else
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
new file mode 100644
index 000000000000..ecbb6b5182e2
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
@@ -0,0 +1,53 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.h.orig 2019-09-10 11:14:16 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.h
+@@ -155,7 +155,7 @@ class PLATFORM_EXPORT FontCache {
+ sk_sp<SkFontMgr> FontManager() { return font_manager_; }
+ static void SetFontManager(sk_sp<SkFontMgr>);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // These are needed for calling QueryRenderStyleForStrike, since
+ // gfx::GetFontRenderParams makes distinctions based on DSF.
+ static float DeviceScaleFactor() { return device_scale_factor_; }
+@@ -216,7 +216,7 @@ class PLATFORM_EXPORT FontCache {
+ const FontDescription&);
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct PlatformFallbackFont {
+ String name;
+ CString filename;
+@@ -228,7 +228,7 @@ class PLATFORM_EXPORT FontCache {
+ static void GetFontForCharacter(UChar32,
+ const char* preferred_locale,
+ PlatformFallbackFont*);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FontDataFromFontPlatformData(
+ const FontPlatformData*,
+@@ -301,12 +301,12 @@ class PLATFORM_EXPORT FontCache {
+ const FontFaceCreationParams&,
+ CString& name);
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ static AtomicString GetFamilyNameForCharacter(SkFontMgr*,
+ UChar32,
+ const FontDescription&,
+ FontFallbackPriority);
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FallbackOnStandardFontStyle(
+ const FontDescription&,
+@@ -338,7 +338,7 @@ class PLATFORM_EXPORT FontCache {
+ bool is_test_font_mgr_ = false;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ static float device_scale_factor_;
+ #endif
+
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
new file mode 100644
index 000000000000..a4097fa1cbdf
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_description.cc.orig 2019-09-10 11:14:16 UTC
++++ third_party/blink/renderer/platform/fonts/font_description.cc
+@@ -38,7 +38,7 @@
+ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -223,7 +223,7 @@ FontCacheKey FontDescription::CacheKey(
+ static_cast<unsigned>(fields_.orientation_) << 1 | // bit 2-3
+ static_cast<unsigned>(fields_.subpixel_text_position_); // bit 1
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float device_scale_factor_for_key = FontCache::DeviceScaleFactor();
+ #else
+ float device_scale_factor_for_key = 1.0f;
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
new file mode 100644
index 000000000000..184dfbb80663
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/fonts/font_metrics.cc.orig 2019-09-10 10:42:49 UTC
++++ third_party/blink/renderer/platform/fonts/font_metrics.cc
+@@ -38,7 +38,7 @@
+
+ namespace blink {
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // This is the largest VDMX table which we'll try to load and parse.
+ static const size_t kMaxVDMXTableSize = 1024 * 1024; // 1 MB
+ #endif
+@@ -60,7 +60,7 @@ void FontMetrics::AscentDescentWithHacks(
+ int vdmx_ascent = 0, vdmx_descent = 0;
+ bool is_vdmx_valid = false;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Manually digging up VDMX metrics is only applicable when bytecode hinting
+ // using FreeType. With DirectWrite or CoreText, no bytecode hinting is ever
+ // done. This code should be pushed into FreeType (hinted font metrics).
+@@ -106,7 +106,7 @@ void FontMetrics::AscentDescentWithHacks(
+ visual_overflow_inflation_for_ascent = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent = 1;
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
new file mode 100644
index 000000000000..6f60dd6c314d
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc.orig 2019-09-10 10:42:49 UTC
++++ third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
+@@ -8,7 +8,7 @@
+ #if defined(OS_ANDROID)
+ #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h"
+ #include "third_party/blink/renderer/platform/fonts/android/font_unique_name_lookup_android.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/linux/font_unique_name_lookup_linux.h"
+ #elif defined(OS_WIN)
+ #include "third_party/blink/renderer/platform/fonts/win/font_unique_name_lookup_win.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<FontUniqueNameLookup>
+ FontUniqueNameLookup::GetPlatformUniqueNameLookup() {
+ #if defined(OS_ANDROID)
+ return std::make_unique<FontUniqueNameLookupAndroid>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<FontUniqueNameLookupLinux>();
+ #elif defined(OS_WIN)
+ return std::make_unique<FontUniqueNameLookupWin>();
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_shaping_shape__result__inline__headers.h b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_shaping_shape__result__inline__headers.h
new file mode 100644
index 000000000000..dfc98cc644e5
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_shaping_shape__result__inline__headers.h
@@ -0,0 +1,78 @@
+--- third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h.orig 2019-09-10 11:14:16 UTC
++++ third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
+@@ -251,37 +251,6 @@ struct ShapeResult::RunInfo : public RefCounted<ShapeR
+ template <bool has_non_zero_glyph_offsets>
+ struct iterator final {};
+
+- // For non-zero glyph offset array
+- template <>
+- struct iterator<true> final {
+- // The constructor for ShapeResult
+- explicit iterator(const GlyphOffsetArray& array)
+- : pointer(array.storage_.get()) {
+- DCHECK(pointer);
+- }
+-
+- // The constructor for ShapeResultView
+- explicit iterator(const GlyphDataRange& range) : pointer(range.offsets) {
+- DCHECK(pointer);
+- }
+-
+- GlyphOffset operator*() const { return *pointer; }
+- void operator++() { ++pointer; }
+-
+- const GlyphOffset* pointer;
+- };
+-
+- // For zero glyph offset array
+- template <>
+- struct iterator<false> final {
+- explicit iterator(const GlyphOffsetArray& array) {
+- DCHECK(!array.HasStorage());
+- }
+- explicit iterator(const GlyphDataRange& range) { DCHECK(!range.offsets); }
+- GlyphOffset operator*() const { return GlyphOffset(); }
+- void operator++() {}
+- };
+-
+ template <bool has_non_zero_glyph_offsets>
+ iterator<has_non_zero_glyph_offsets> GetIterator() const {
+ return iterator<has_non_zero_glyph_offsets>(*this);
+@@ -493,6 +462,37 @@ struct ShapeResult::RunInfo : public RefCounted<ShapeR
+ unsigned start_index_;
+ unsigned num_characters_;
+ float width_;
++};
++
++// For non-zero glyph offset array
++template <>
++struct ShapeResult::RunInfo::GlyphOffsetArray::iterator<true> final {
++ // The constructor for ShapeResult
++ explicit iterator(const GlyphOffsetArray& array)
++ : pointer(array.storage_.get()) {
++ DCHECK(pointer);
++ }
++
++ // The constructor for ShapeResultView
++ explicit iterator(const GlyphDataRange& range) : pointer(range.offsets) {
++ DCHECK(pointer);
++ }
++
++ GlyphOffset operator*() const { return *pointer; }
++ void operator++() { ++pointer; }
++
++ const GlyphOffset* pointer;
++};
++
++// For zero glyph offset array
++template <>
++struct ShapeResult::RunInfo::GlyphOffsetArray::iterator<false> final {
++ explicit iterator(const GlyphOffsetArray& array) {
++ DCHECK(!array.HasStorage());
++ }
++ explicit iterator(const GlyphDataRange& range) { DCHECK(!range.offsets); }
++ GlyphOffset operator*() const { return GlyphOffset(); }
++ void operator++() {}
+ };
+
+ // Find the range of HarfBuzzRunGlyphData for the specified character index
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
new file mode 100644
index 000000000000..d3cc393b797e
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
@@ -0,0 +1,38 @@
+--- third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc.orig 2019-09-10 11:14:16 UTC
++++ third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc
+@@ -60,7 +60,7 @@ AtomicString ToAtomicString(const SkString& str) {
+ return AtomicString::FromUTF8(str.c_str(), str.size());
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // This function is called on android or when we are emulating android fonts on
+ // linux and the embedder has overriden the default fontManager with
+ // WebFontRendering::setSkiaFontMgr.
+@@ -83,7 +83,7 @@ AtomicString FontCache::GetFamilyNameForCharacter(
+ typeface->getFamilyName(&skia_family_name);
+ return ToAtomicString(skia_family_name);
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void FontCache::PlatformInit() {}
+
+@@ -228,7 +228,7 @@ sk_sp<SkTypeface> FontCache::CreateTypeface(
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // On linux if the fontManager has been overridden then we should be calling
+ // the embedder provided font Manager rather than calling
+ // SkTypeface::CreateFromName which may redirect the call to the default font
+@@ -255,7 +255,7 @@ std::unique_ptr<FontPlatformData> FontCache::CreateFon
+ CString name;
+
+ sk_sp<SkTypeface> typeface;
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ if (alternate_name == AlternateFontName::kLocalUniqueFace &&
+ RuntimeEnabledFeatures::FontSrcLocalMatchingEnabled()) {
+ typeface = CreateTypefaceFromUniqueName(creation_params, name);
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
new file mode 100644
index 000000000000..102f017aa1bb
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
@@ -0,0 +1,27 @@
+--- third_party/blink/renderer/platform/wtf/container_annotations.h.orig 2019-09-10 10:42:49 UTC
++++ third_party/blink/renderer/platform/wtf/container_annotations.h
+@@ -10,7 +10,7 @@
+
+ // TODO(ochang): Remove the ARCH_CPU_X86_64 condition to enable this for X86
+ // once the crashes there have been fixed: http://crbug.com/461406
+-#if defined(ADDRESS_SANITIZER) && defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if defined(ADDRESS_SANITIZER) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #define ANNOTATE_CONTIGUOUS_CONTAINER
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize) \
+ if (buffer) { \
+@@ -35,13 +35,13 @@
+ ANNOTATE_NEW_BUFFER(buffer, newCapacity, bufferSize);
+ // Annotations require buffers to begin on an 8-byte boundary.
+
+-#else // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#else // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize)
+ #define ANNOTATE_DELETE_BUFFER(buffer, capacity, oldSize)
+ #define ANNOTATE_CHANGE_SIZE(buffer, capacity, oldSize, newSize)
+ #define ANNOTATE_CHANGE_CAPACITY(buffer, oldCapacity, bufferSize, newCapacity)
+
+-#endif // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#endif // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_CONTAINER_ANNOTATIONS_H_
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
new file mode 100644
index 000000000000..ffd0fe162d98
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/wtf/stack_util.cc.orig 2019-09-10 10:42:49 UTC
++++ third_party/blink/renderer/platform/wtf/stack_util.cc
+@@ -17,6 +17,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ size_t GetUnderestimatedStackSize() {
diff --git a/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
new file mode 100644
index 000000000000..62a4a6337f6f
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
@@ -0,0 +1,22 @@
+--- third_party/blink/renderer/platform/wtf/threading_pthreads.cc.orig 2019-09-10 11:14:17 UTC
++++ third_party/blink/renderer/platform/wtf/threading_pthreads.cc
+@@ -52,12 +52,17 @@
+ #include <objc/objc-auto.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <unistd.h>
++#endif
++
++#if defined(OS_BSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
+ #endif
+
+ namespace WTF {
diff --git a/devel/electron6/files/patch-third__party_boringssl_BUILD.gn b/devel/electron6/files/patch-third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..9edcd278cef0
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_boringssl_BUILD.gn
@@ -0,0 +1,36 @@
+--- third_party/boringssl/BUILD.gn.orig 2019-09-16 09:24:24 UTC
++++ third_party/boringssl/BUILD.gn
+@@ -87,7 +87,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x64") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86_64
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86_64
+ } else {
+ public_configs = [ ":no_asm_config" ]
+@@ -95,13 +95,13 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x86") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_arm
+ } else if (is_ios) {
+ sources += crypto_sources_ios_arm
+@@ -109,7 +109,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_aarch64
+ } else if (is_ios) {
+ sources += crypto_sources_ios_aarch64
diff --git a/devel/electron6/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c b/devel/electron6/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
new file mode 100644
index 000000000000..ed62f264c3ae
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
@@ -0,0 +1,63 @@
+--- third_party/boringssl/src/crypto/cpu-aarch64-linux.c.orig 2019-09-10 10:44:10 UTC
++++ third_party/boringssl/src/crypto/cpu-aarch64-linux.c
+@@ -14,49 +14,35 @@
+
+ #include <openssl/cpu.h>
+
+-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
+- !defined(OPENSSL_STATIC_ARMCAP)
++#if defined(OPENSSL_AARCH64)
+
+-#include <sys/auxv.h>
+-
+ #include <openssl/arm_arch.h>
+
+ #include "internal.h"
+
+-
+ extern uint32_t OPENSSL_armcap_P;
+
++#include <sys/types.h>
++#include <machine/armreg.h>
++
+ void OPENSSL_cpuid_setup(void) {
+- unsigned long hwcap = getauxval(AT_HWCAP);
++ uint64_t id_aa64isar0;
+
+- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
+- // these values.
+- static const unsigned long kNEON = 1 << 1;
+- static const unsigned long kAES = 1 << 3;
+- static const unsigned long kPMULL = 1 << 4;
+- static const unsigned long kSHA1 = 1 << 5;
+- static const unsigned long kSHA256 = 1 << 6;
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
+
+- if ((hwcap & kNEON) == 0) {
+- // Matching OpenSSL, if NEON is missing, don't report other features
+- // either.
+- return;
+- }
+-
+ OPENSSL_armcap_P |= ARMV7_NEON;
+
+- if (hwcap & kAES) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) >= ID_AA64ISAR0_AES_BASE) {
+ OPENSSL_armcap_P |= ARMV8_AES;
+ }
+- if (hwcap & kPMULL) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) {
+ OPENSSL_armcap_P |= ARMV8_PMULL;
+ }
+- if (hwcap & kSHA1) {
++ if (ID_AA64ISAR0_SHA1(id_aa64isar0) == ID_AA64ISAR0_SHA1_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+ }
+- if (hwcap & kSHA256) {
++ if(ID_AA64ISAR0_SHA2(id_aa64isar0) >= ID_AA64ISAR0_SHA2_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
+ }
+-
+-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
++#endif // OPENSSL_AARCH64
diff --git a/devel/electron6/files/patch-third__party_boringssl_src_crypto_ex__data.c b/devel/electron6/files/patch-third__party_boringssl_src_crypto_ex__data.c
new file mode 100644
index 000000000000..a9cfcc2451ab
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_boringssl_src_crypto_ex__data.c
@@ -0,0 +1,13 @@
+--- third_party/boringssl/src/crypto/ex_data.c.orig 2019-09-10 10:44:10 UTC
++++ third_party/boringssl/src/crypto/ex_data.c
+@@ -186,7 +186,9 @@ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int index,
+ }
+ }
+
+- sk_void_set(ad->sk, index, val);
++ // expression result unused; should this cast be to 'void'?
++ // seems it should, feel free to investigate those #def
++ (void) sk_void_set(ad->sk, index, val);
+ return 1;
+ }
+
diff --git a/devel/electron6/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h b/devel/electron6/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
new file mode 100644
index 000000000000..da0e9b018047
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
@@ -0,0 +1,11 @@
+--- third_party/breakpad/breakpad/src/common/simple_string_dictionary.h.orig 2019-09-10 10:43:55 UTC
++++ third_party/breakpad/breakpad/src/common/simple_string_dictionary.h
+@@ -33,7 +33,7 @@
+ #include <assert.h>
+ #include <string.h>
+
+-#include "common/basictypes.h"
++#include "third_party/breakpad/breakpad/src/common/basictypes.h"
+
+ namespace google_breakpad {
+
diff --git a/devel/electron6/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h b/devel/electron6/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
new file mode 100644
index 000000000000..bba83f8bf1e1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
@@ -0,0 +1,11 @@
+--- third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h.orig 2019-09-10 10:43:16 UTC
++++ third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
+@@ -334,6 +334,8 @@ class Status {
+ */
+ PERMANENT_FAILURE
+ };
++
++ Status() : code_(SUCCESS), message_() {}
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni b/devel/electron6/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
new file mode 100644
index 000000000000..fae3994cef37
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/build/crashpad_buildconfig.gni.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/build/crashpad_buildconfig.gni
+@@ -38,7 +38,7 @@ crashpad_is_standalone = crashpad_dependencies == "sta
+ if (crashpad_is_in_chromium) {
+ crashpad_is_mac = is_mac
+ crashpad_is_win = is_win
+- crashpad_is_linux = is_linux
++ crashpad_is_linux = is_linux && !is_bsd
+ crashpad_is_android = is_android
+ crashpad_is_fuchsia = is_fuchsia
+
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_client_BUILD.gn b/devel/electron6/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
new file mode 100644
index 000000000000..f7bbbae27af5
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
@@ -0,0 +1,15 @@
+--- third_party/crashpad/crashpad/client/BUILD.gn.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/client/BUILD.gn
+@@ -71,6 +71,12 @@ static_library("client") {
+ sources += [ "crashpad_client_fuchsia.cc" ]
+ }
+
++ if (crashpad_is_posix) {
++ sources += [
++ "crashpad_client_posix.cc",
++ ]
++ }
++
+ if (crashpad_is_linux || crashpad_is_android || crashpad_is_fuchsia) {
+ sources += [ "crash_report_database_generic.cc" ]
+ }
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
new file mode 100644
index 000000000000..11bc66d28901
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
@@ -0,0 +1,41 @@
+--- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2019-09-16 09:25:15 UTC
++++ third_party/crashpad/crashpad/client/crashpad_client_posix.cc
+@@ -0,0 +1,38 @@
++// Copyright 2017 The Crashpad Authors. All rights reserved.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++#include "client/crashpad_client.h"
++
++#include "base/logging.h"
++
++namespace crashpad {
++
++CrashpadClient::CrashpadClient() {}
++
++CrashpadClient::~CrashpadClient() {}
++
++bool CrashpadClient::StartHandler(
++ const base::FilePath& handler,
++ const base::FilePath& database,
++ const base::FilePath& metrics_dir,
++ const std::string& url,
++ const std::map<std::string, std::string>& annotations,
++ const std::vector<std::string>& arguments,
++ bool restartable,
++ bool asynchronous_start) {
++ NOTREACHED(); // TODO(scottmg): https://crashpad.chromium.org/bug/196
++ return false;
++}
++
++} // namespace crashpad
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
new file mode 100644
index 000000000000..a5ad09945a78
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/address_types.h.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/misc/address_types.h
+@@ -25,7 +25,7 @@
+ #include <mach/mach_types.h>
+ #elif defined(OS_WIN)
+ #include "util/win/address_types.h"
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "util/linux/address_types.h"
+ #elif defined(OS_FUCHSIA)
+ #include <zircon/types.h>
+@@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t;
+ using VMAddress = WinVMAddress;
+ using VMSize = WinVMSize;
+
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ using VMAddress = LinuxVMAddress;
+ using VMSize = LinuxVMSize;
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
new file mode 100644
index 000000000000..bff565f5eeec
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/capture_context.h.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -21,7 +21,7 @@
+ #include <mach/mach.h>
+ #elif defined(OS_WIN)
+ #include <windows.h>
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <ucontext.h>
+ #elif defined(OS_FUCHSIA)
+ #include <signal.h>
+@@ -35,7 +35,7 @@ using NativeCPUContext = x86_thread_state;
+ #endif
+ #elif defined(OS_WIN)
+ using NativeCPUContext = CONTEXT;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ using NativeCPUContext = ucontext_t;
+ #endif // OS_MACOSX
+
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
new file mode 100644
index 000000000000..f1020292d89c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/metrics.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/misc/metrics.cc
+@@ -25,7 +25,7 @@
+ #define METRICS_OS_NAME "Win"
+ #elif defined(OS_ANDROID)
+ #define METRICS_OS_NAME "Android"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define METRICS_OS_NAME "Linux"
+ #elif defined(OS_FUCHSIA)
+ #define METRICS_OS_NAME "Fuchsia"
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
new file mode 100644
index 000000000000..3101719e0299
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/uuid.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/misc/uuid.cc
+@@ -95,7 +95,7 @@ bool UUID::InitializeWithNew() {
+ InitializeFromBytes(uuid);
+ return true;
+ #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Linux, Android, and Fuchsia do not provide a UUID generator in a
+ // widely-available system library. On Linux and Android, uuid_generate()
+ // from libuuid is not available everywhere.
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
new file mode 100644
index 000000000000..0f3a072f7f7a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
@@ -0,0 +1,29 @@
+--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -31,7 +31,7 @@
+ #include "util/file/directory_reader.h"
+ #include "util/misc/implicit_cast.h"
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ #include <sys/sysctl.h>
+ #endif
+
+@@ -72,7 +72,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) {
+ // This is an advantage over looping over all possible file descriptors, because
+ // no attempt needs to be made to close file descriptors that are not open.
+ bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ static constexpr char kFDDir[] = "/dev/fd";
+ #elif defined(OS_LINUX) || defined(OS_ANDROID)
+ static constexpr char kFDDir[] = "/proc/self/fd";
+@@ -146,7 +146,7 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd)
+ // while the system is running, but it’s still a better upper bound than the
+ // current RLIMIT_NOFILE value.
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // See 10.11.6 xnu-3248.60.10/bsd/kern/kern_resource.c maxfilesperproc,
+ // referenced by dosetrlimit().
+ int oid[] = {CTL_KERN, KERN_MAXFILESPERPROC};
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
new file mode 100644
index 000000000000..e234ad11aef9
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/drop_privileges.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+@@ -23,7 +23,7 @@ void DropPrivileges() {
+ gid_t gid = getgid();
+ uid_t uid = getuid();
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Based on the POSIX.1-2008 2013 edition documentation for setreuid() and
+ // setregid(), setreuid() and setregid() alone should be sufficient to drop
+ // privileges. The standard specifies that the saved ID should be set to the
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
new file mode 100644
index 000000000000..e260ff61e59e
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
@@ -0,0 +1,40 @@
+--- third_party/crashpad/crashpad/util/posix/signals.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/posix/signals.cc
+@@ -45,10 +45,10 @@ constexpr int kCrashSignals[] = {
+ #if defined(SIGEMT)
+ SIGEMT,
+ #endif // defined(SIGEMT)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGXCPU,
+ SIGXFSZ,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // These are the non-core-generating but terminating signals.
+@@ -85,9 +85,9 @@ constexpr int kTerminateSignals[] = {
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_MACOSX)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGIO,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ bool InstallHandlers(const std::vector<int>& signals,
+@@ -216,8 +216,12 @@ bool Signals::WillSignalReraiseAutonomously(const sigi
+ // remains. See 10.12.3 xnu-3789.41.3/bsd/kern/kern_sig.c
+ // psignal_internal().
+ (code > 0 &&
++#if defined(SI_ASYNCIO)
+ code != SI_ASYNCIO &&
++#endif
++#if defined(SI_MESGQ)
+ code != SI_MESGQ &&
++#endif
+ code != SI_QUEUE &&
+ code != SI_TIMER &&
+ code != SI_USER &&
diff --git a/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
new file mode 100644
index 000000000000..d213b3ab9758
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc.orig 2019-09-10 10:43:16 UTC
++++ third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc
+@@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = {
+ "INFO",
+ "USR1",
+ "USR2",
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #if defined(ARCH_CPU_MIPS_FAMILY)
+ "HUP",
+ "INT",
+@@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = {
+ #endif // defined(ARCH_CPU_MIPS_FAMILY)
+ #endif
+ };
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // NSIG is 64 to account for real-time signals.
+ static_assert(base::size(kSignalNames) == 32, "kSignalNames length");
+ #else
diff --git a/devel/electron6/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h b/devel/electron6/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
new file mode 100644
index 000000000000..fdccb9e9d47c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
@@ -0,0 +1,53 @@
+--- third_party/crc32c/src/src/crc32c_arm64_linux_check.h.orig 2019-09-10 10:43:57 UTC
++++ third_party/crc32c/src/src/crc32c_arm64_linux_check.h
+@@ -7,8 +7,6 @@
+ #ifndef CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+ #define CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+
+-// X86-specific code checking for the availability of SSE4.2 instructions.
+-
+ #include <cstddef>
+ #include <cstdint>
+
+@@ -16,30 +14,19 @@
+
+ #if HAVE_ARM64_CRC32C
+
+-#if HAVE_STRONG_GETAUXVAL
+-#include <sys/auxv.h>
+-#elif HAVE_WEAK_GETAUXVAL
+-// getauxval() is not available on Android until API level 20. Link it as a weak
+-// symbol.
+-extern "C" unsigned long getauxval(unsigned long type) __attribute__((weak));
+-
+-#define AT_HWCAP 16
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-
++#include <machine/armreg.h>
++#include <sys/types.h>
+ namespace crc32c {
+
+-inline bool CanUseArm64Linux() {
+-#if HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+- // From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
+- constexpr unsigned long kHWCAP_PMULL = 1 << 4;
+- constexpr unsigned long kHWCAP_CRC32 = 1 << 7;
+- unsigned long hwcap = (&getauxval != nullptr) ? getauxval(AT_HWCAP) : 0;
+- return (hwcap & (kHWCAP_PMULL | kHWCAP_CRC32)) ==
+- (kHWCAP_PMULL | kHWCAP_CRC32);
+-#else
+- return false;
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-}
++ inline bool CanUseArm64Linux() {
++ uint64_t id_aa64isar0;
++
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if ((ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) && \
++ (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE))
++ return true;
++ return false;
++ }
+
+ } // namespace crc32c
+
diff --git a/devel/electron6/files/patch-third__party_electron__node_deps_uv_BUILD.gn b/devel/electron6/files/patch-third__party_electron__node_deps_uv_BUILD.gn
new file mode 100644
index 000000000000..7317f54c9438
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_electron__node_deps_uv_BUILD.gn
@@ -0,0 +1,45 @@
+--- third_party/electron_node/deps/uv/BUILD.gn.orig 2019-09-16 09:24:26 UTC
++++ third_party/electron_node/deps/uv/BUILD.gn
+@@ -3,7 +3,7 @@ config("libuv_config") {
+
+ defines = []
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_POSIX_C_SOURCE=200112" ]
+ }
+ if (!is_win) {
+@@ -147,7 +147,7 @@ static_library("uv") {
+ libs += [ "m" ]
+ ldflags += [ "-pthread" ]
+ }
+- if (is_mac || is_linux) {
++ if (is_mac || (is_linux && !is_bsd)) {
+ sources += [ "src/unix/proctitle.c" ]
+ }
+ if (is_mac) {
+@@ -161,7 +161,7 @@ static_library("uv") {
+ "_DARWIN_UNLIMITED_SELECT=1",
+ ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_GNU_SOURCE" ]
+ sources += [
+ "src/unix/linux-core.c",
+@@ -180,6 +180,15 @@ static_library("uv") {
+ sources += [
+ "src/unix/bsd-ifaddrs.c",
+ "src/unix/kqueue.c",
++ ]
++ }
++ if (is_bsd) {
++ sources += [
++ "src/unix/bsd-ifaddrs.c",
++ "src/unix/bsd-proctitle.c",
++ "src/unix/freebsd.c",
++ "src/unix/kqueue.c",
++ "src/unix/posix-hrtime.c",
+ ]
+ }
+ }
diff --git a/devel/electron6/files/patch-third__party_ffmpeg_libavutil_mem.c b/devel/electron6/files/patch-third__party_ffmpeg_libavutil_mem.c
new file mode 100644
index 000000000000..2de3c146399c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_ffmpeg_libavutil_mem.c
@@ -0,0 +1,12 @@
+--- third_party/ffmpeg/libavutil/mem.c.orig 2019-09-10 10:46:29 UTC
++++ third_party/ffmpeg/libavutil/mem.c
+@@ -32,9 +32,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#if HAVE_MALLOC_H
+-#include <malloc.h>
+-#endif
+
+ #include "avassert.h"
+ #include "avutil.h"
diff --git a/devel/electron6/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h b/devel/electron6/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h
new file mode 100644
index 000000000000..152585b2bca0
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h
@@ -0,0 +1,10 @@
+--- third_party/glslang/src/glslang/Include/PoolAlloc.h.orig 2020-03-15 04:26:41 UTC
++++ third_party/glslang/src/glslang/Include/PoolAlloc.h
+@@ -304,7 +304,6 @@ class pool_allocator { (public)
+ size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
+ size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
+
+- void setAllocator(TPoolAllocator* a) { allocator = *a; }
+ TPoolAllocator& getAllocator() const { return allocator; }
+
+ protected:
diff --git a/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc b/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
new file mode 100644
index 000000000000..4d6a56b669c9
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
@@ -0,0 +1,43 @@
+--- third_party/googletest/src/googletest/src/gtest-port.cc.orig 2019-09-10 11:15:40 UTC
++++ third_party/googletest/src/googletest/src/gtest-port.cc
+@@ -63,6 +63,11 @@
+ # endif
+ #endif
+
++#if GTEST_OS_FREEBSD
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ #if GTEST_OS_QNX
+ # include <devctl.h>
+ # include <fcntl.h>
+@@ -137,6 +142,28 @@ size_t GetThreadCount() {
+ } else {
+ return 0;
+ }
++}
++
++#elif GTEST_OS_FREEBSD
++
++#define KP_NLWP(kp) (kp.ki_numthreads)
++
++// Return the number of threads running in the process, or 0 to indicate that
++// we cannot detect it.
++size_t GetThreadCount() {
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ struct kinfo_proc(info);
++ size_t size = sizeof(info);
++ if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
++ return 0;
++ }
++ return KP_NLWP(info);
+ }
+
+ #elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
diff --git a/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest.cc b/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest.cc
new file mode 100644
index 000000000000..32836fc8cd9a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_googletest_src_googletest_src_gtest.cc
@@ -0,0 +1,10 @@
+--- third_party/googletest/src/googletest/src/gtest.cc.orig 2019-09-10 11:15:40 UTC
++++ third_party/googletest/src/googletest/src/gtest.cc
+@@ -114,6 +114,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ # include <sys/socket.h> // NOLINT
+ # include <sys/types.h> // NOLINT
diff --git a/devel/electron6/files/patch-third__party_harfbuzz-ng_harfbuzz.gni b/devel/electron6/files/patch-third__party_harfbuzz-ng_harfbuzz.gni
new file mode 100644
index 000000000000..2cd00a60022c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_harfbuzz-ng_harfbuzz.gni
@@ -0,0 +1,20 @@
+--- third_party/harfbuzz-ng/harfbuzz.gni.orig 2019-09-10 10:43:16 UTC
++++ third_party/harfbuzz-ng/harfbuzz.gni
+@@ -3,10 +3,11 @@
+ # found in the LICENSE file.
+
+ declare_args() {
+- # Blink uses a cutting-edge version of Harfbuzz; most Linux distros do not
+- # contain a new enough version of the code to work correctly. However,
+- # ChromeOS chroots (i.e, real ChromeOS builds for devices) do contain a
+- # new enough version of the library, and so this variable exists so that
+- # ChromeOS can build against the system lib and keep binary sizes smaller.
+- use_system_harfbuzz = false
++ # Blink uses a cutting-edge version of Harfbuzz (version listed in
++ # third_party/harfbuzz-ng/README.chromium); most Linux distros do not contain
++ # a new enough version of the code to work correctly. However, ChromeOS
++ # chroots (i.e. real ChromeOS builds for devices) do contain a new enough
++ # version of the library, and so this variable exists so that ChromeOS can
++ # build against the system lib and keep binary sizes smaller.
++ use_system_harfbuzz = true
+ }
diff --git a/devel/electron6/files/patch-third__party_leveldatabase_env__chromium.cc b/devel/electron6/files/patch-third__party_leveldatabase_env__chromium.cc
new file mode 100644
index 000000000000..5c362f8a6e13
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_leveldatabase_env__chromium.cc
@@ -0,0 +1,14 @@
+--- third_party/leveldatabase/env_chromium.cc.orig 2019-09-10 11:14:32 UTC
++++ third_party/leveldatabase/env_chromium.cc
+@@ -40,7 +40,11 @@
+ #include "third_party/leveldatabase/leveldb_chrome.h"
+ #include "third_party/leveldatabase/leveldb_features.h"
+ #include "third_party/leveldatabase/src/include/leveldb/options.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ #if defined(OS_WIN)
+ #undef DeleteFile
diff --git a/devel/electron6/files/patch-third__party_libXNVCtrl_NVCtrl.c b/devel/electron6/files/patch-third__party_libXNVCtrl_NVCtrl.c
new file mode 100644
index 000000000000..bc8ef4ca4f83
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_libXNVCtrl_NVCtrl.c
@@ -0,0 +1,25 @@
+--- third_party/libXNVCtrl/NVCtrl.c.orig 2019-09-10 10:43:17 UTC
++++ third_party/libXNVCtrl/NVCtrl.c
+@@ -27,10 +27,6 @@
+ * libXNVCtrl library properly protects the Display connection.
+ */
+
+-#if !defined(XTHREADS)
+-#define XTHREADS
+-#endif /* XTHREADS */
+-
+ #define NEED_EVENTS
+ #define NEED_REPLIES
+ #include <stdint.h>
+@@ -39,6 +35,11 @@
+ #include <X11/Xutil.h>
+ #include <X11/extensions/Xext.h>
+ #include <X11/extensions/extutil.h>
++
++#if !defined(XTHREADS)
++#define XTHREADS
++#endif /* XTHREADS */
++
+ #include "NVCtrlLib.h"
+ #include "nv_control.h"
+
diff --git a/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
new file mode 100644
index 000000000000..4f3e6c310bed
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h.orig 2019-09-10 10:45:51 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h
+@@ -56,7 +56,7 @@ template <class T> boost::once_flag Singleton<T>::flag
+ #include "phonenumbers/base/logging.h"
+ #include "phonenumbers/base/thread_checker.h"
+
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
new file mode 100644
index 000000000000..53c9908660ef
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h.orig 2019-09-10 11:16:34 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h
+@@ -37,7 +37,7 @@ typedef boost::mutex::scoped_lock AutoLock;
+ // Dummy lock implementation on non-POSIX platforms. If you are running on a
+ // different platform and care about thread-safety, please compile with
+ // -DI18N_PHONENUMBERS_USE_BOOST.
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
new file mode 100644
index 000000000000..995c70f8af89
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
@@ -0,0 +1,19 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h.orig 2019-09-10 10:45:51 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h
+@@ -23,6 +23,7 @@
+ // user of the library know that it can't be used in a thread-safe manner when
+ // it is not depending on Boost.
+ #if !defined(__linux__) && !defined(__APPLE__) && \
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
+ !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
+ #error Building without Boost, please provide \
+ -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
+@@ -31,7 +32,7 @@
+ #endif
+
+ #if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
+- (defined(__linux__) || defined(__apple__))
++ (defined(__linux__) || defined(__apple__)) || defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ #include <pthread.h>
+
diff --git a/devel/electron6/files/patch-third__party_libyuv_include_libyuv_row.h b/devel/electron6/files/patch-third__party_libyuv_include_libyuv_row.h
new file mode 100644
index 000000000000..2f844b0a4490
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_libyuv_include_libyuv_row.h
@@ -0,0 +1,37 @@
+--- third_party/libyuv/include/libyuv/row.h.orig 2019-09-10 11:16:18 UTC
++++ third_party/libyuv/include/libyuv/row.h
+@@ -157,10 +157,14 @@ extern "C" {
+ #define HAS_ARGBSHADEROW_SSE2
+ #define HAS_ARGBSUBTRACTROW_SSE2
+ #define HAS_ARGBUNATTENUATEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_SSSE3
++#endif
+ #define HAS_COMPUTECUMULATIVESUMROW_SSE2
+ #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_SSSE3
++#endif
+ #define HAS_RGBCOLORTABLEROW_X86
+ #define HAS_SOBELROW_SSE2
+ #define HAS_SOBELTOPLANEROW_SSE2
+@@ -206,7 +210,9 @@ extern "C" {
+ #define HAS_I422TORGB565ROW_AVX2
+ #define HAS_I422TORGBAROW_AVX2
+ #define HAS_I444TOARGBROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_AVX2
++#endif
+ #define HAS_J422TOARGBROW_AVX2
+ #define HAS_MERGEUVROW_AVX2
+ #define HAS_MIRRORROW_AVX2
+@@ -231,7 +237,9 @@ extern "C" {
+ #define HAS_ARGBMULTIPLYROW_AVX2
+ #define HAS_ARGBSUBTRACTROW_AVX2
+ #define HAS_ARGBUNATTENUATEROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_AVX2
++#endif
+
+ #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
+ defined(_MSC_VER)
diff --git a/devel/electron6/files/patch-third__party_nasm_config_config-linux.h b/devel/electron6/files/patch-third__party_nasm_config_config-linux.h
new file mode 100644
index 000000000000..69a36677e8c1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_nasm_config_config-linux.h
@@ -0,0 +1,29 @@
+--- third_party/nasm/config/config-linux.h.orig 2019-09-10 10:45:53 UTC
++++ third_party/nasm/config/config-linux.h
+@@ -117,7 +117,7 @@
+ #define HAVE_ACCESS 1
+
+ /* Define to 1 if you have the `canonicalize_file_name' function. */
+-#define HAVE_CANONICALIZE_FILE_NAME 1
++/* #undef HAVE_CANONICALIZE_FILE_NAME */
+
+ /* Define to 1 if you have the `cpu_to_le16' intrinsic function. */
+ /* #undef HAVE_CPU_TO_LE16 */
+@@ -161,7 +161,7 @@
+ #define HAVE_DECL_STRSEP 1
+
+ /* Define to 1 if you have the <endian.h> header file. */
+-#define HAVE_ENDIAN_H 1
++/* #undef HAVE_ENDIAN_H */
+
+ /* Define to 1 if you have the `faccessat' function. */
+ #define HAVE_FACCESSAT 1
+@@ -322,7 +322,7 @@
+ #define HAVE_SYSCONF 1
+
+ /* Define to 1 if you have the <sys/endian.h> header file. */
+-/* #undef HAVE_SYS_ENDIAN_H */
++#define HAVE_SYS_ENDIAN_H 1
+
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #define HAVE_SYS_MMAN_H 1
diff --git a/devel/electron6/files/patch-third__party_node_node.py b/devel/electron6/files/patch-third__party_node_node.py
new file mode 100644
index 000000000000..24d2dd419f55
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_node_node.py
@@ -0,0 +1,10 @@
+--- third_party/node/node.py.orig 2019-09-10 10:43:18 UTC
++++ third_party/node/node.py
+@@ -12,6 +12,7 @@ import sys
+ def GetBinaryPath():
+ return os_path.join(os_path.dirname(__file__), *{
+ 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ 'FreeBSD': ('freebsd', 'node-freebsd-x64', 'bin', 'node'),
+ 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+ 'Windows': ('win', 'node.exe'),
+ }[platform.system()])
diff --git a/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp b/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
new file mode 100644
index 000000000000..3efcfdd04f15
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/cfx_datetime.cpp.orig 2019-09-10 10:46:46 UTC
++++ third_party/pdfium/core/fxcrt/cfx_datetime.cpp
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+ #include "core/fxcrt/fx_system.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_ASMJS) || defined(__wasm__)
+ #include <sys/time.h>
+ #include <time.h>
diff --git a/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_fx__system.h b/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
new file mode 100644
index 000000000000..4bed08c294a7
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/fx_system.h.orig 2019-09-10 11:17:33 UTC
++++ third_party/pdfium/core/fxcrt/fx_system.h
+@@ -26,7 +26,7 @@
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+ #elif defined(_WIN64)
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_LINUX_
+ #elif defined(__APPLE__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_APPLE_
diff --git a/devel/electron6/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp b/devel/electron6/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
new file mode 100644
index 000000000000..d70a8288ea9a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/core/fxge/fx_ge_linux.cpp.orig 2019-09-10 11:17:33 UTC
++++ third_party/pdfium/core/fxge/fx_ge_linux.cpp
+@@ -151,9 +151,8 @@ std::unique_ptr<SystemFontInfoIface> SystemFontInfoIfa
+ const char** pUserPaths) {
+ auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
+ if (!pInfo->ParseFontCfg(pUserPaths)) {
+- pInfo->AddPath("/usr/share/fonts");
+- pInfo->AddPath("/usr/share/X11/fonts/Type1");
+- pInfo->AddPath("/usr/share/X11/fonts/TTF");
++ pInfo->AddPath("/usr/local/share/fonts/Type1");
++ pInfo->AddPath("/usr/local/share/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return std::move(pInfo);
diff --git a/devel/electron6/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp b/devel/electron6/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
new file mode 100644
index 000000000000..414ecc06931a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
@@ -0,0 +1,106 @@
+--- third_party/pdfium/fxjs/cjs_publicmethods.cpp.orig 2019-09-10 11:17:33 UTC
++++ third_party/pdfium/fxjs/cjs_publicmethods.cpp
+@@ -86,6 +86,103 @@ constexpr const wchar_t* kDateFormats[] = {L"m/d",
+ constexpr const wchar_t* kTimeFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
++#if defined(__FreeBSD__)
++/*
++ * cvt.c - IEEE floating point formatting routines for FreeBSD
++ * from GNU libc-4.6.27
++ */
++
++/*
++ * ap_ecvt converts to decimal
++ * the number of digits is specified by ndigit
++ * decpt is set to the position of the decimal point
++ * sign is set to 0 for positive, 1 for negative
++ */
++
++#define NDIG 80
++
++static char *
++ ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
++{
++ register int r2;
++ double fi, fj;
++ register char *p, *p1;
++ static char buf[NDIG];
++
++ if (ndigits >= NDIG - 1)
++ ndigits = NDIG - 2;
++ r2 = 0;
++ *sign = 0;
++ p = &buf[0];
++ if (arg < 0) {
++ *sign = 1;
++ arg = -arg;
++ }
++ arg = modf(arg, &fi);
++ p1 = &buf[NDIG];
++ /*
++ * Do integer part
++ */
++ if (fi != 0) {
++ p1 = &buf[NDIG];
++ while (fi != 0) {
++ fj = modf(fi / 10, &fi);
++ *--p1 = (int) ((fj + .03) * 10) + '0';
++ r2++;
++ }
++ while (p1 < &buf[NDIG])
++ *p++ = *p1++;
++ }
++ else if (arg > 0) {
++ while ((fj = arg * 10) < 1) {
++ arg = fj;
++ r2--;
++ }
++ }
++ p1 = &buf[ndigits];
++ if (eflag == 0)
++ p1 += r2;
++ *decpt = r2;
++ if (p1 < &buf[0]) {
++ buf[0] = '\0';
++ return (buf);
++ }
++ while (p <= p1 && p < &buf[NDIG]) {
++ arg *= 10;
++ arg = modf(arg, &fj);
++ *p++ = (int) fj + '0';
++ }
++ if (p1 >= &buf[NDIG]) {
++ buf[NDIG - 1] = '\0';
++ return (buf);
++ }
++ p = p1;
++ *p1 += 5;
++ while (*p1 > '9') {
++ *p1 = '0';
++ if (p1 > buf)
++ ++ * --p1;
++ else {
++ *p1 = '1';
++ (*decpt)++;
++ if (eflag == 0) {
++ if (p > buf)
++ *p = '0';
++ p++;
++ }
++ }
++ }
++ *p = '\0';
++ return (buf);
++}
++
++static char *
++ fcvt(double arg, int ndigits, int *decpt, int *sign)
++{
++ return (ap_cvt(arg, ndigits, decpt, sign, 0));
++}
++#endif // defined(__FreeBSD__)
++
+ template <typename T>
+ T StrTrim(const T& str) {
+ T result = str;
diff --git a/devel/electron6/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp b/devel/electron6/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
new file mode 100644
index 000000000000..21340f38054f
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
@@ -0,0 +1,22 @@
+--- third_party/pdfium/fxjs/fx_date_helpers.cpp.orig 2019-09-10 11:17:33 UTC
++++ third_party/pdfium/fxjs/fx_date_helpers.cpp
+@@ -35,6 +35,11 @@ double GetLocalTZA() {
+ return 0;
+ time_t t = 0;
+ FXSYS_time(&t);
++#ifdef __FreeBSD__
++ struct tm lt;
++ localtime_r(&t, &lt);
++ return (double)(-(lt.tm_gmtoff * 1000));
++#else
+ FXSYS_localtime(&t);
+ #if defined(OS_WIN)
+ // In gcc 'timezone' is a global variable declared in time.h. In VC++, that
+@@ -43,6 +48,7 @@ double GetLocalTZA() {
+ _get_timezone(&timezone);
+ #endif
+ return (double)(-(timezone * 1000));
++#endif // __FreeBSD__
+ }
+
+ int GetDaylightSavingTA(double d) {
diff --git a/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc b/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc
new file mode 100644
index 000000000000..d027e112f5ac
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc
@@ -0,0 +1,11 @@
+--- third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.cc.orig 2019-09-10 10:46:46 UTC
++++ third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.cc
+@@ -117,7 +117,7 @@ void* AllocPages(void* address,
+ uintptr_t align_base_mask = ~align_offset_mask;
+ DCHECK(!(reinterpret_cast<uintptr_t>(address) & align_offset_mask));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+ // On 64 bit Linux, we may need to adjust the address space limit for
+ // guarded allocations.
+ if (length >= kMinimumGuardedMemorySize) {
diff --git a/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h b/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..97167ee1a80b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,38 @@
+--- third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-09-10 10:46:46 UTC
++++ third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -13,7 +13,7 @@
+ #if defined(OS_MACOSX)
+ #include <mach/mach.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+
+ #include <algorithm>
+@@ -48,7 +48,7 @@ int GetAccessFlags(PageAccessibilityConfiguration acce
+ }
+ }
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+
+ // Multiple guarded memory regions may exceed the process address space limit.
+ // This function will raise or lower the limit by |amount|.
+@@ -68,7 +68,7 @@ bool AdjustAddressSpaceLimit(int64_t amount) {
+ // schemes that reduce that to 4 GiB.
+ constexpr size_t kMinimumGuardedMemorySize = 1ULL << 32; // 4 GiB
+
+-#endif // defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#endif // (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+
+ void* SystemAllocPagesInternal(void* hint,
+ size_t length,
+@@ -134,7 +134,7 @@ void SetSystemPagesAccessInternal(
+ void FreePagesInternal(void* address, size_t length) {
+ CHECK(!munmap(address, length));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+ // Restore the address space limit.
+ if (length >= kMinimumGuardedMemorySize) {
+ CHECK(AdjustAddressSpaceLimit(-base::checked_cast<int64_t>(length)));
diff --git a/devel/electron6/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp b/devel/electron6/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
new file mode 100644
index 000000000000..7a2b2e050aa2
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp.orig 2019-09-10 10:46:46 UTC
++++ third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp
+@@ -16,9 +16,8 @@ constexpr char kFolderSeparator = '/';
+
+ constexpr const char* kFontFolders[] = {
+ #if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
+- "/usr/share/fonts",
+- "/usr/share/X11/fonts/Type1",
+- "/usr/share/X11/fonts/TTF",
++ "/usr/local/share/fonts/Type1",
++ "/usr/local/share/fonts/TTF",
+ "/usr/local/share/fonts",
+ #elif defined(OS_MACOSX)
+ "~/Library/Fonts",
diff --git a/devel/electron6/files/patch-third__party_pdfium_xfa_fwl_cfwl__notedriver.cpp b/devel/electron6/files/patch-third__party_pdfium_xfa_fwl_cfwl__notedriver.cpp
new file mode 100644
index 000000000000..e5bf3baf6e6e
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_pdfium_xfa_fwl_cfwl__notedriver.cpp
@@ -0,0 +1,19 @@
+--- third_party/pdfium/xfa/fwl/cfwl_notedriver.cpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/pdfium/xfa/fwl/cfwl_notedriver.cpp
+@@ -83,14 +83,14 @@ bool CFWL_NoteDriver::SetFocus(CFWL_Widget* pFocus) {
+ }
+
+ void CFWL_NoteDriver::Run() {
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ for (;;) {
+ CFWL_NoteLoop* pTopLoop = GetTopLoop();
+ if (!pTopLoop || !pTopLoop->ContinueModal())
+ break;
+ UnqueueMessageAndProcess(pTopLoop);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ }
+
+ void CFWL_NoteDriver::NotifyTargetHide(CFWL_Widget* pNoteTarget) {
diff --git a/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_build__config.h b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
new file mode 100644
index 000000000000..6332e89c7526
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
@@ -0,0 +1,51 @@
+--- third_party/perfetto/include/perfetto/base/build_config.h.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/include/perfetto/base/build_config.h
+@@ -28,6 +28,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -35,13 +36,15 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -49,6 +52,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -56,6 +60,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -63,6 +68,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 1
diff --git a/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_event.h b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_event.h
new file mode 100644
index 000000000000..d605c136af25
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_event.h
@@ -0,0 +1,14 @@
+--- third_party/perfetto/include/perfetto/base/event.h.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/include/perfetto/base/event.h
+@@ -20,8 +20,9 @@
+ #include "perfetto/base/build_config.h"
+ #include "perfetto/base/scoped_file.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ #define PERFETTO_USE_EVENTFD() 1
+ #else
+ #define PERFETTO_USE_EVENTFD() 0
diff --git a/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h
new file mode 100644
index 000000000000..1bb9b855d31a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h
@@ -0,0 +1,25 @@
+--- third_party/perfetto/include/perfetto/base/thread_utils.h.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/include/perfetto/base/thread_utils.h
+@@ -33,6 +33,10 @@
+ #include <unistd.h>
+ #endif
+
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++#include <pthread_np.h>
++#endif
++
+ namespace perfetto {
+ namespace base {
+
+@@ -40,6 +44,11 @@ namespace base {
+ using PlatformThreadID = pid_t;
+ inline PlatformThreadID GetThreadId() {
+ return gettid();
++}
++#elif PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ using PlatformThreadID = int;
++inline PlatformThreadID GetThreadId() {
++ return pthread_getthreadid_np();
+ }
+ #elif PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX)
+ using PlatformThreadID = pid_t;
diff --git a/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_time.h b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_time.h
new file mode 100644
index 000000000000..793a710e015b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_time.h
@@ -0,0 +1,20 @@
+--- third_party/perfetto/include/perfetto/base/time.h.orig 2019-09-10 10:46:24 UTC
++++ third_party/perfetto/include/perfetto/base/time.h
+@@ -123,6 +123,9 @@ inline TimeNanos GetTimeInternalNs(clockid_t clk_id) {
+ // Return ns from boot. Conversely to GetWallTimeNs, this clock counts also time
+ // during suspend (when supported).
+ inline TimeNanos GetBootTimeNs() {
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ return GetTimeInternalNs(kWallTimeClockSource);
++#else
+ // Determine if CLOCK_BOOTTIME is available on the first call.
+ static const clockid_t kBootTimeClockSource = [] {
+ struct timespec ts = {};
+@@ -130,6 +133,7 @@ inline TimeNanos GetBootTimeNs() {
+ return res == 0 ? CLOCK_BOOTTIME : kWallTimeClockSource;
+ }();
+ return GetTimeInternalNs(kBootTimeClockSource);
++#endif
+ }
+
+ inline TimeNanos GetWallTimeNs() {
diff --git a/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
new file mode 100644
index 000000000000..69e855c968ee
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_include_perfetto_base_watchdog__posix.h
@@ -0,0 +1,11 @@
+--- third_party/perfetto/include/perfetto/base/watchdog_posix.h.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/include/perfetto/base/watchdog_posix.h
+@@ -46,7 +46,7 @@ class Watchdog {
+ Timer(const Timer&) = delete;
+ Timer& operator=(const Timer&) = delete;
+
+- timer_t timerid_ = nullptr;
++ timer_t timerid_ = 0;
+ };
+ virtual ~Watchdog();
+
diff --git a/devel/electron6/files/patch-third__party_perfetto_src_base_unix__socket.cc b/devel/electron6/files/patch-third__party_perfetto_src_base_unix__socket.cc
new file mode 100644
index 000000000000..171ad9721f72
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_src_base_unix__socket.cc
@@ -0,0 +1,12 @@
+--- third_party/perfetto/src/base/unix_socket.cc.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/src/base/unix_socket.cc
+@@ -523,7 +523,8 @@ void UnixSocket::DoConnect(const std::string& socket_n
+
+ void UnixSocket::ReadPeerCredentials() {
+ #if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct ucred user_cred;
+ socklen_t len = sizeof(user_cred);
+ int fd = sock_raw_.fd();
diff --git a/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc b/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
new file mode 100644
index 000000000000..25c0f46829ac
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
@@ -0,0 +1,22 @@
+--- third_party/perfetto/src/tracing/core/tracing_service_impl.cc.orig 2019-09-10 11:16:55 UTC
++++ third_party/perfetto/src/tracing/core/tracing_service_impl.cc
+@@ -2053,7 +2053,8 @@ void TracingServiceImpl::OnStartTriggersTimeout(Tracin
+
+ void TracingServiceImpl::UpdateMemoryGuardrail() {
+ #if !PERFETTO_BUILDFLAG(PERFETTO_EMBEDDER_BUILD) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ uint64_t total_buffer_bytes = 0;
+
+ // Sum up all the shared memory buffers.
+@@ -2106,7 +2107,8 @@ void TracingServiceImpl::SnapshotClocks(std::vector<Tr
+ protos::ClockSnapshot* clock_snapshot = packet.mutable_clock_snapshot();
+
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct {
+ clockid_t id;
+ protos::ClockSnapshot::Clock::Type type;
diff --git a/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc b/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
new file mode 100644
index 000000000000..1285cc6324b9
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
@@ -0,0 +1,28 @@
+Backport of:
+
+From 46f0abc66c1d78c60a0415c5cb46852ef3bfa9bb Mon Sep 17 00:00:00 2001
+From: Nico Weber <thakis@chromium.org>
+Date: Sat, 8 Feb 2020 21:26:53 -0500
+Subject: [PATCH] Fix compile error emitted by trunk clang
+
+../../third_party/perfetto/src/tracing/core/virtual_destructors.cc:33:35:
+error: destructor cannot be declared using a type alias
+ 'perfetto::TracingService::ConsumerEndpoint' (aka
+ 'perfetto::ConsumerEndpoint') of the class name
+TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+
+Bug: chromium:1050372
+
+--- third_party/perfetto/src/tracing/core/virtual_destructors.cc.orig 2020-08-24 19:11:33 UTC
++++ third_party/perfetto/src/tracing/core/virtual_destructors.cc
+@@ -30,8 +30,8 @@ namespace perfetto {
+ Consumer::~Consumer() = default;
+ Producer::~Producer() = default;
+ TracingService::~TracingService() = default;
+-TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+-TracingService::ProducerEndpoint::~ProducerEndpoint() = default;
++ConsumerEndpoint::~ConsumerEndpoint() = default;
++ProducerEndpoint::~ProducerEndpoint() = default;
+ SharedMemory::~SharedMemory() = default;
+ SharedMemory::Factory::~Factory() = default;
+ SharedMemoryArbiter::~SharedMemoryArbiter() = default;
diff --git a/devel/electron6/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h b/devel/electron6/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
new file mode 100644
index 000000000000..285f9d939895
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
@@ -0,0 +1,11 @@
+--- third_party/protobuf/src/google/protobuf/stubs/platform_macros.h.orig 2019-09-10 11:14:34 UTC
++++ third_party/protobuf/src/google/protobuf/stubs/platform_macros.h
+@@ -117,7 +117,7 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+ #undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+-#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__)
++#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__FreeBSD__)
+ // Android ndk does not support the __thread keyword very well yet. Here
+ // we use pthread_key_create()/pthread_getspecific()/... methods for
+ // TLS support on android.
diff --git a/devel/electron6/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc b/devel/electron6/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
new file mode 100644
index 000000000000..1ce88c7c1b5b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
@@ -0,0 +1,47 @@
+--- third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc.orig 2019-09-10 10:46:36 UTC
++++ third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc
+@@ -439,7 +439,7 @@ CMapTable::CMapFormat0::Builder::Builder(
+ }
+
+ CMapTable::CMapFormat0::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat0,
+ cmap_id) {
+ }
+@@ -563,7 +563,7 @@ CMapTable::CMapFormat2::Builder::Builder(WritableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<WritableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<WritableFontData*>(NULL),
++ : static_cast<WritableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -574,7 +574,7 @@ CMapTable::CMapFormat2::Builder::Builder(ReadableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<ReadableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<ReadableFontData*>(NULL),
++ : static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -958,7 +958,7 @@ CMapTable::CMapFormat4::Builder::Builder(WritableFontD
+ CMapTable::CMapFormat4::Builder::Builder(SegmentList* segments,
+ std::vector<int32_t>* glyph_id_array,
+ const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id),
+ segments_(segments->begin(), segments->end()),
+ glyph_id_array_(glyph_id_array->begin(), glyph_id_array->end()) {
+@@ -966,7 +966,7 @@ CMapTable::CMapFormat4::Builder::Builder(SegmentList*
+ }
+
+ CMapTable::CMapFormat4::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id) {
+ }
+
diff --git a/devel/electron6/files/patch-third__party_skia_src_core_SkCpu.cpp b/devel/electron6/files/patch-third__party_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..4fa4944c79d1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_core_SkCpu.cpp
@@ -0,0 +1,19 @@
+--- third_party/skia/src/core/SkCpu.cpp.orig 2019-09-10 10:48:48 UTC
++++ third_party/skia/src/core/SkCpu.cpp
+@@ -76,6 +76,8 @@
+ #include <sys/auxv.h>
+
+ static uint32_t read_cpu_features() {
++return 0;
++#if 0
+ const uint32_t kHWCAP_CRC32 = (1<< 7),
+ kHWCAP_ASIMDHP = (1<<10);
+
+@@ -112,6 +114,7 @@
+ }
+ }
+ return features;
++#endif
+ }
+
+ #elif defined(SK_CPU_ARM32) && __has_include(<sys/auxv.h>) && \
diff --git a/devel/electron6/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h b/devel/electron6/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
new file mode 100644
index 000000000000..59a502093d13
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/gpu/GrAutoLocaleSetter.h.orig 2019-09-10 10:48:48 UTC
++++ third_party/skia/src/gpu/GrAutoLocaleSetter.h
+@@ -27,7 +27,7 @@
+ #define HAVE_XLOCALE 0
+ #endif
+
+-#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION)
++#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION) || defined(__FreeBSD__)
+ #define HAVE_LOCALE_T 0
+ #else
+ #define HAVE_LOCALE_T 1
diff --git a/devel/electron6/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp b/devel/electron6/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
new file mode 100644
index 000000000000..553adfb3d8df
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
@@ -0,0 +1,41 @@
+--- third_party/skia/src/images/SkJpegEncoder.cpp.orig 2019-09-10 11:16:50 UTC
++++ third_party/skia/src/images/SkJpegEncoder.cpp
+@@ -75,9 +75,14 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ return (transform_scanline_proc) nullptr;
+ };
+
++#ifdef JCS_EXTENSIONS
+ J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
++#else
++ J_COLOR_SPACE jpegColorType = JCS_RGB;
++#endif
+ int numComponents = 0;
+ switch (srcInfo.colorType()) {
++#ifdef JCS_EXTENSIONS
+ case kRGBA_8888_SkColorType:
+ fProc = chooseProc8888();
+ jpegColorType = JCS_EXT_RGBA;
+@@ -88,6 +93,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_BGRA;
+ numComponents = 4;
+ break;
++#endif
+ case kRGB_565_SkColorType:
+ fProc = transform_scanline_565;
+ jpegColorType = JCS_RGB;
+@@ -107,6 +113,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_GRAYSCALE;
+ numComponents = 1;
+ break;
++#ifdef JCS_EXTENSIONS
+ case kRGBA_F16_SkColorType:
+ if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
+ options.fAlphaOption == SkJpegEncoder::AlphaOption::kBlendOnBlack) {
+@@ -117,6 +124,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_RGBA;
+ numComponents = 4;
+ break;
++#endif
+ default:
+ return false;
+ }
diff --git a/devel/electron6/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h b/devel/electron6/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
new file mode 100644
index 000000000000..3d13d8e3ba98
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_opts_SkRasterPipeline__opts.h
@@ -0,0 +1,20 @@
+--- third_party/skia/src/opts/SkRasterPipeline_opts.h.orig 2019-09-10 11:16:50 UTC
++++ third_party/skia/src/opts/SkRasterPipeline_opts.h
+@@ -729,7 +729,7 @@ SI F approx_powf(F x, F y) {
+ }
+
+ SI F from_half(U16 h) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f32_f16(h);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
+@@ -749,7 +749,7 @@ SI F from_half(U16 h) {
+ }
+
+ SI U16 to_half(F f) {
+-#if defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
++#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+ return vcvt_f16_f32(f);
+
+ #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
diff --git a/devel/electron6/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp b/devel/electron6/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
new file mode 100644
index 000000000000..bc32a5299a44
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
@@ -0,0 +1,11 @@
+--- third_party/skia/src/ports/SkOSFile_stdio.cpp.orig 2019-09-10 10:48:48 UTC
++++ third_party/skia/src/ports/SkOSFile_stdio.cpp
+@@ -129,7 +129,7 @@ void sk_fflush(FILE* f) {
+
+ void sk_fsync(FILE* f) {
+ #if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \
+- && !defined(_NEWLIB_VERSION)
++ && !defined(_NEWLIB_VERSION) && !defined(__FreeBSD__)
+ int fd = fileno(f);
+ fsync(fd);
+ #endif
diff --git a/devel/electron6/files/patch-third__party_skia_src_sksl_SkSLString.h b/devel/electron6/files/patch-third__party_skia_src_sksl_SkSLString.h
new file mode 100644
index 000000000000..e8ebbfcad8ab
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_src_sksl_SkSLString.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/sksl/SkSLString.h.orig 2019-09-10 11:16:50 UTC
++++ third_party/skia/src/sksl/SkSLString.h
+@@ -22,6 +22,8 @@
+ #include "include/core/SkString.h"
+ #endif
+
++#include <stdarg.h>
++
+ namespace SkSL {
+
+ // Represents a (not necessarily null-terminated) slice of a string.
diff --git a/devel/electron6/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h b/devel/electron6/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
new file mode 100644
index 000000000000..a4a39af71ac7
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
@@ -0,0 +1,11 @@
+--- third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h.orig 2019-09-16 09:24:24 UTC
++++ third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+@@ -2232,7 +2232,7 @@ remove them if not needed.
+ #include <mutex> // for std::mutex
+ #include <atomic> // for std::atomic
+
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h> // for aligned_alloc()
+ #endif
+
diff --git a/devel/electron6/files/patch-third__party_snappy_src_snappy.h b/devel/electron6/files/patch-third__party_snappy_src_snappy.h
new file mode 100644
index 000000000000..9882e6de01a6
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_snappy_src_snappy.h
@@ -0,0 +1,20 @@
+--- third_party/snappy/src/snappy.h.orig 2019-09-10 10:46:35 UTC
++++ third_party/snappy/src/snappy.h
+@@ -73,7 +73,7 @@ namespace snappy {
+ // Original contents of *output are lost.
+ //
+ // REQUIRES: "input[]" is not an alias of "*output".
+- size_t Compress(const char* input, size_t input_length, string* output);
++ size_t Compress(const char* input, size_t input_length, std::string* output);
+
+ // Decompresses "compressed[0,compressed_length-1]" to "*uncompressed".
+ // Original contents of "*uncompressed" are lost.
+@@ -82,7 +82,7 @@ namespace snappy {
+ //
+ // returns false if the message is corrupted and could not be decompressed
+ bool Uncompress(const char* compressed, size_t compressed_length,
+- string* uncompressed);
++ std::string* uncompressed);
+
+ // Decompresses "compressed" to "*uncompressed".
+ //
diff --git a/devel/electron6/files/patch-third__party_sqlite_BUILD.gn b/devel/electron6/files/patch-third__party_sqlite_BUILD.gn
new file mode 100644
index 000000000000..d6201dd113dc
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_sqlite_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/sqlite/BUILD.gn.orig 2019-09-10 11:14:34 UTC
++++ third_party/sqlite/BUILD.gn
+@@ -258,7 +258,7 @@ config("sqlite_warnings") {
+ ]
+ }
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ cflags += [
+ # SQLite doesn't believe in compiler warnings, preferring testing.
+ # http://www.sqlite.org/faq.html#q17
diff --git a/devel/electron6/files/patch-third__party_swiftshader_BUILD.gn b/devel/electron6/files/patch-third__party_swiftshader_BUILD.gn
new file mode 100644
index 000000000000..4c96fb1337af
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_BUILD.gn
@@ -0,0 +1,24 @@
+--- third_party/swiftshader/BUILD.gn.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/BUILD.gn
+@@ -126,9 +126,6 @@ config("swiftshader_config") {
+ ldflags = [ "-Wl,--gc-sections" ]
+
+ if (target_cpu == "mipsel") {
+- ldflags += [
+- "-Wl,--hash-style=sysv",
+- ]
+ if (mips_arch_variant == "r1") {
+ ldflags += [
+ "-mips32",
+@@ -140,11 +137,8 @@ config("swiftshader_config") {
+ }
+ } else if (target_cpu == "mips64el") {
+ ldflags += [
+- "-Wl,--hash-style=sysv",
+ "-mips64r2",
+ ]
+- } else {
+- ldflags += [ "-Wl,--hash-style=both" ]
+ }
+
+ # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_Common_Configurator.cpp b/devel/electron6/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
new file mode 100644
index 000000000000..ac508a3161e4
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
@@ -0,0 +1,12 @@
+--- third_party/swiftshader/src/Common/Configurator.cpp.orig 2019-09-10 10:47:39 UTC
++++ third_party/swiftshader/src/Common/Configurator.cpp
+@@ -42,6 +42,9 @@ namespace sw
+
+ bool Configurator::readFile()
+ {
++#if defined(__FreeBSD__)
++ return false;
++#endif
+ #if defined(__unix__)
+ if(access(path.c_str(), R_OK) != 0)
+ {
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp b/devel/electron6/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
new file mode 100644
index 000000000000..2a71f63e4666
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/MutexLock.hpp.orig 2019-09-10 10:47:39 UTC
++++ third_party/swiftshader/src/Common/MutexLock.hpp
+@@ -17,7 +17,7 @@
+
+ #include "Thread.hpp"
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ // Use a pthread mutex on Linux. Since many processes may use SwiftShader
+ // at the same time it's best to just have the scheduler overhead.
+ #include <pthread.h>
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp b/devel/electron6/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
new file mode 100644
index 000000000000..37742a6abea4
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/SharedLibrary.hpp.orig 2019-09-10 10:47:39 UTC
++++ third_party/swiftshader/src/Common/SharedLibrary.hpp
+@@ -97,7 +97,7 @@ void *loadLibrary(const std::string &libraryDirectory,
+
+ inline void *getLibraryHandle(const char *path)
+ {
+- #ifdef __ANDROID__
++ #if defined( __ANDROID__) || defined(__FreeBSD__)
+ // bionic doesn't support RTLD_NOLOAD before L
+ return dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp b/devel/electron6/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
new file mode 100644
index 000000000000..fc377b91713b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
@@ -0,0 +1,14 @@
+--- third_party/swiftshader/src/Main/SwiftConfig.cpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/Main/SwiftConfig.cpp
+@@ -762,7 +762,11 @@ namespace sw
+ struct stat status;
+ int lastModified = ini.getInteger("LastModified", "Time", 0);
+
++#if !defined(__FreeBSD__)
+ bool noConfig = stat("SwiftShader.ini", &status) != 0;
++#else
++ bool noConfig = false;
++#endif
+ newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;
+
+ if(disableServerOverride)
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
new file mode 100644
index 000000000000..a39cf89c22ca
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Display.cpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Display.cpp
+@@ -688,7 +688,7 @@ bool Display::isValidWindow(EGLNativeWindowType window
+ return status != 0;
+ }
+ return false;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ return false; // Non X11 linux is headless only
+ #elif defined(__APPLE__)
+ return sw::OSX::IsValidWindow(window);
+@@ -866,7 +866,7 @@ sw::Format Display::getDisplayFormat() const
+ {
+ return sw::FORMAT_X8R8G8B8;
+ }
+- #elif defined(__linux__) // Non X11 linux is headless only
++ #elif defined(__linux__) || defined(__FreeBSD__) // Non X11 linux is headless only
+ return sw::FORMAT_A8B8G8R8;
+ #elif defined(__APPLE__)
+ return sw::FORMAT_A8B8G8R8;
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
new file mode 100644
index 000000000000..f9e89655fdfe
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp
+@@ -360,7 +360,7 @@ bool WindowSurface::checkForResize()
+
+ int windowWidth = windowAttributes.width;
+ int windowHeight = windowAttributes.height;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ // Non X11 linux is headless only
+ int windowWidth = 100;
+ int windowHeight = 100;
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
new file mode 100644
index 000000000000..8bf7c1768b1c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp
+@@ -148,7 +148,7 @@ EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
+ // FIXME: Check if display_id is the default display
+ }
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD)) && !defined(__ANDROID__)
+ #if defined(USE_X11)
+ if(!libX11)
+ #endif // Non X11 linux is headless only
+@@ -207,7 +207,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name)
+ {
+ return success(
+ "EGL_KHR_client_get_all_proc_addresses "
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ "EGL_KHR_platform_gbm "
+ #endif
+ #if defined(USE_X11)
+@@ -1250,7 +1250,7 @@ EGLDisplay GetPlatformDisplay(EGLenum platform, void *
+ {
+ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ switch(platform)
+ {
+ #if defined(USE_X11)
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
new file mode 100644
index 000000000000..766971cf7706
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp
+@@ -100,7 +100,7 @@ class LibEGL (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
+ #else
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
new file mode 100644
index 000000000000..5f3caea1813b
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp.orig 2019-09-10 10:47:39 UTC
++++ third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+@@ -261,7 +261,7 @@ class LibGLES_CM (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
+ #else
diff --git a/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
new file mode 100644
index 000000000000..54a6c0b53e27
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp.orig 2019-09-10 11:17:34 UTC
++++ third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp
+@@ -286,7 +286,7 @@ class LibGLESv2 (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+ #else
diff --git a/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..a5cde29bf8b9
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
@@ -0,0 +1,152 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h.orig 2019-09-10 11:17:37 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h
+@@ -8,15 +8,15 @@
+ #define BUG_REPORT_URL "https://bugs.llvm.org/"
+
+ /* Define to 1 to enable backtraces, and to 0 otherwise. */
+-/* #undef ENABLE_BACKTRACES */
++#define ENABLE_BACKTRACES 1
+
+ /* Define to 1 to enable crash overrides, and to 0 otherwise. */
+-/* #undef ENABLE_CRASH_OVERRIDES */
++#define ENABLE_CRASH_OVERRIDES 1
+
+ /* Define to 1 if you have the `backtrace' function. */
+-/* #undef HAVE_BACKTRACE */
++#define HAVE_BACKTRACE TRUE
+
+-/* #undef BACKTRACE_HEADER */
++#define BACKTRACE_HEADER <execinfo.h>
+
+ /* Define to 1 if you have the <CrashReporterClient.h> header file. */
+ /* #undef HAVE_CRASHREPORTERCLIENT_H */
+@@ -26,7 +26,7 @@
+
+ /* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+ don't. */
+-#define HAVE_DECL_ARC4RANDOM 0
++#define HAVE_DECL_ARC4RANDOM 1
+
+ /* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
+ don't. */
+@@ -50,7 +50,7 @@
+ #define HAVE_DLOPEN 1
+
+ /* Define if dladdr() is available on this platform. */
+-/* #undef HAVE_DLADDR */
++#define HAVE_DLADDR 1
+
+ /* Define to 1 if you have the <errno.h> header file. */
+ #define HAVE_ERRNO_H 1
+@@ -89,7 +89,7 @@
+ #define HAVE_ISATTY 1
+
+ /* Define to 1 if you have the `edit' library (-ledit). */
+-/* #undef HAVE_LIBEDIT */
++#define HAVE_LIBEDIT 1
+
+ /* Define to 1 if you have the `pfm' library (-lpfm). */
+ /* #undef HAVE_LIBPFM */
+@@ -107,25 +107,25 @@
+ /* #undef HAVE_PTHREAD_SETNAME_NP */
+
+ /* Define to 1 if you have the `z' library (-lz). */
+-/* #undef HAVE_LIBZ */
++#define HAVE_LIBZ 1
+
+ /* Define to 1 if you have the <link.h> header file. */
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+
+ /* Define to 1 if you have the `mallctl' function. */
+-/* #undef HAVE_MALLCTL */
++#define HAVE_MALLCTL 1
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+-#define HAVE_MALLOC_H 1
++/* #undef HAVE_MALLOC_H */
+
+ /* Define to 1 if you have the <malloc/malloc.h> header file. */
+ /* #undef HAVE_MALLOC_MALLOC_H */
+@@ -137,7 +137,7 @@
+ #define HAVE_POSIX_FALLOCATE 1
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+-/* #undef HAVE_POSIX_SPAWN */
++#define HAVE_POSIX_SPAWN 1
+
+ /* Define to 1 if you have the `pread' function. */
+ #define HAVE_PREAD 1
+@@ -158,16 +158,16 @@
+ #define HAVE_REALPATH 1
+
+ /* Define to 1 if you have the `sbrk' function. */
+-#define HAVE_SBRK 1
++/* #undef HAVE_SBRK */
+
+ /* Define to 1 if you have the `setenv' function. */
+ #define HAVE_SETENV 1
+
+ /* Define to 1 if you have the `sched_getaffinity' function. */
+-#define HAVE_SCHED_GETAFFINITY 1
++/* #undef HAVE_SCHED_GETAFFINITY */
+
+ /* Define to 1 if you have the `CPU_COUNT' macro. */
+-#define HAVE_CPU_COUNT 1
++/* #undef HAVE_CPU_COUNT */
+
+ /* Define to 1 if you have the `setrlimit' function. */
+ #define HAVE_SETRLIMIT 1
+@@ -209,13 +209,13 @@
+ #define HAVE_SYS_TYPES_H 1
+
+ /* Define if the setupterm() function is supported this platform. */
+-/* #undef HAVE_TERMINFO */
++#define HAVE_TERMINFO 1
+
+ /* Define if the xar_open() function is supported this platform. */
+ /* #undef HAVE_LIBXAR */
+
+ /* Define to 1 if you have the <termios.h> header file. */
+-/* #undef HAVE_TERMIOS_H */
++#define HAVE_TERMIOS_H 1
+
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #define HAVE_UNISTD_H 1
+@@ -224,7 +224,7 @@
+ /* #undef HAVE_VALGRIND_VALGRIND_H */
+
+ /* Define to 1 if you have the <zlib.h> header file. */
+-/* #undef HAVE_ZLIB_H */
++#define HAVE_ZLIB_H 1
+
+ /* Have host's _alloca */
+ /* #undef HAVE__ALLOCA */
+@@ -298,7 +298,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -308,7 +308,7 @@
+ #endif
+
+ /* Define if zlib compression is available */
+-#define LLVM_ENABLE_ZLIB 0
++#define LLVM_ENABLE_ZLIB 1
+
+ /* Define if overriding target triple is enabled */
+ /* #undef LLVM_TARGET_TRIPLE_ENV */
diff --git a/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
new file mode 100644
index 000000000000..d02dbe87dbbb
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h.orig 2019-09-10 11:17:37 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h
+@@ -28,7 +28,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -51,7 +51,7 @@
+ #elif defined(__arm__)
+ #define LLVM_HOST_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_HOST_TRIPLE "aarch64-linux-gnu"
++#define LLVM_HOST_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_HOST_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
diff --git a/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..e262bd37705a
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h.orig 2019-09-10 10:47:52 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h
+@@ -121,7 +121,7 @@
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+@@ -130,7 +130,7 @@
+ /* #undef HAVE_MALLCTL */
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+ #define HAVE_MALLOC_H 1
+@@ -154,7 +154,7 @@
+ /* #undef HAVE_NDIR_H */
+
+ /* Define to 1 if you have the `posix_fallocate' function. */
+-#define HAVE_POSIX_FALLOCATE 1
++/* #undef HAVE_POSIX_FALLOCATE */
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+ #define HAVE_POSIX_SPAWN 1
diff --git a/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
new file mode 100644
index 000000000000..21b5d0d88c75
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc.orig 2019-09-10 10:47:53 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc
+@@ -35,7 +35,7 @@
+ // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for
+ // <stdlib.h> instead. Unix.h includes this for us already.
+ #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \
+- !defined(__OpenBSD__) && !defined(__Bitrig__)
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__Bitrig__)
+ #include <malloc.h>
+ #endif
+ #if defined(HAVE_MALLCTL)
diff --git a/devel/electron6/files/patch-third__party_usrsctp_BUILD.gn b/devel/electron6/files/patch-third__party_usrsctp_BUILD.gn
new file mode 100644
index 000000000000..282f37d16a21
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_usrsctp_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/usrsctp/BUILD.gn.orig 2019-09-10 10:43:21 UTC
++++ third_party/usrsctp/BUILD.gn
+@@ -116,11 +116,16 @@ static_library("usrsctp") {
+ "-UINET6",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android ) {
+ defines += [
+ "__Userspace_os_Linux",
+ "_GNU_SOURCE",
+ ]
++ } else if (is_bsd) {
++ defines += [
++ "__Userspace_os_FreeBSD",
++ ]
++ cflags += [ "-U__FreeBSD__" ]
+ } else if (is_mac || is_ios) {
+ defines += [
+ "HAVE_SA_LEN",
diff --git a/devel/electron6/files/patch-third__party_webrtc_BUILD.gn b/devel/electron6/files/patch-third__party_webrtc_BUILD.gn
new file mode 100644
index 000000000000..597b53bd9077
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_BUILD.gn
@@ -0,0 +1,12 @@
+--- third_party/webrtc/BUILD.gn.orig 2019-09-10 11:17:42 UTC
++++ third_party/webrtc/BUILD.gn
+@@ -152,6 +152,9 @@ config("common_inherited_config") {
+ if (is_linux) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
diff --git a/devel/electron6/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn b/devel/electron6/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
new file mode 100644
index 000000000000..77ad41e20b7e
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/modules/audio_device/BUILD.gn.orig 2019-09-10 11:17:42 UTC
++++ third_party/webrtc/modules/audio_device/BUILD.gn
+@@ -265,7 +265,7 @@ rtc_source_set("audio_device_impl") {
+ if (rtc_use_dummy_audio_file_devices) {
+ defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
+ } else {
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/alsasymboltable_linux.cc",
+ "linux/alsasymboltable_linux.h",
diff --git a/devel/electron6/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/devel/electron6/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..481b5a52748c
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2019-09-10 11:17:43 UTC
++++ third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -12,6 +12,7 @@
+
+ #include <string.h>
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "absl/algorithm/container.h"
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_BUILD.gn b/devel/electron6/files/patch-third__party_webrtc_rtc__base_BUILD.gn
new file mode 100644
index 000000000000..2ddda49cbf39
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/webrtc/rtc_base/BUILD.gn.orig 2019-09-10 11:17:44 UTC
++++ third_party/webrtc/rtc_base/BUILD.gn
+@@ -952,8 +952,6 @@ rtc_static_library("rtc_base") {
+
+ if (rtc_use_x11) {
+ libs += [
+- "dl",
+- "rt",
+ "Xext",
+ "X11",
+ "Xcomposite",
+@@ -961,7 +959,7 @@ rtc_static_library("rtc_base") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ libs += [
+ "dl",
+ "rt",
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_byte__order.h b/devel/electron6/files/patch-third__party_webrtc_rtc__base_byte__order.h
new file mode 100644
index 000000000000..1be5134f8bb5
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/byte_order.h.orig 2019-09-10 10:48:09 UTC
++++ third_party/webrtc/rtc_base/byte_order.h
+@@ -89,7 +89,7 @@
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #else
+ #error "Missing byte order functions for this arch."
+ #endif // defined(WEBRTC_MAC)
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..d2942a459a73
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/ifaddrs_converter.h.orig 2019-09-10 10:48:09 UTC
++++ third_party/webrtc/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.cc b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..cc2b083db032
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- third_party/webrtc/rtc_base/ip_address.cc.orig 2019-09-10 10:48:09 UTC
++++ third_party/webrtc/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+ #ifdef OPENBSD
+ #include <netinet/in_systm.h>
+ #endif
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.h b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.h
new file mode 100644
index 000000000000..27e32df29df1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/ip_address.h.orig 2019-09-10 10:48:09 UTC
++++ third_party/webrtc/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.cc b/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.cc
new file mode 100644
index 000000000000..3077966366d2
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.cc
@@ -0,0 +1,29 @@
+--- third_party/webrtc/rtc_base/network.cc.orig 2019-09-10 11:17:44 UTC
++++ third_party/webrtc/rtc_base/network.cc
+@@ -14,7 +14,7 @@
+ // linux/if.h can't be included at the same time as the posix sys/if.h, and
+ // it's transitively required by linux/route.h, so include that version on
+ // linux instead of the standard posix one.
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/if.h>
+ #include <linux/route.h>
+ #elif !defined(__native_client__)
+@@ -764,7 +764,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_
+ }
+ #endif // WEBRTC_WIN
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ bool IsDefaultRoute(const std::string& network_name) {
+ FILE* f = fopen("/proc/net/route", "r");
+ if (!f) {
+@@ -807,7 +807,7 @@ bool BasicNetworkManager::IsIgnoredNetwork(const Netwo
+ strncmp(network.name().c_str(), "vboxnet", 7) == 0) {
+ return true;
+ }
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // Make sure this is a default route, if we're ignoring non-defaults.
+ if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
+ return true;
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.h b/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.h
new file mode 100644
index 000000000000..384f30338e67
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/network.h.orig 2019-09-10 10:48:09 UTC
++++ third_party/webrtc/rtc_base/network.h
+@@ -25,6 +25,10 @@
+ #include "rtc_base/network_monitor.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc b/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..2425a7903c09
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
@@ -0,0 +1,65 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.cc.orig 2019-09-10 11:17:44 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.cc
+@@ -51,7 +51,7 @@
+ #include "rtc_base/null_socket_server.h"
+ #include "rtc_base/time_utils.h"
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/sockios.h>
+ #endif
+
+@@ -70,7 +70,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -290,7 +290,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ socklen_t optlen = sizeof(*value);
+ int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+ if (ret != -1 && opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ }
+@@ -303,7 +303,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ }
+@@ -313,7 +313,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ int PhysicalSocket::Send(const void* pv, size_t cb) {
+ int sent = DoSend(
+ s_, reinterpret_cast<const char*>(pv), static_cast<int>(cb),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. Without this, attempting to send on a socket whose
+ // other end is closed will result in a SIGPIPE signal being raised to
+ // our process, which by default will terminate the process, which we
+@@ -342,7 +342,7 @@ int PhysicalSocket::SendTo(const void* buffer,
+ size_t len = addr.ToSockAddrStorage(&saddr);
+ int sent =
+ DoSendTo(s_, static_cast<const char*>(buffer), static_cast<int>(length),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. See above for explanation.
+ MSG_NOSIGNAL,
+ #else
+@@ -533,7 +533,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h b/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..a942e0648aa1
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.h.orig 2019-09-10 10:48:10 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/devel/electron6/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc b/devel/electron6/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..c25501a86b6f
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
@@ -0,0 +1,40 @@
+--- third_party/webrtc/rtc_base/platform_thread_types.cc.orig 2019-09-10 11:17:44 UTC
++++ third_party/webrtc/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,9 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -27,8 +29,10 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
+-#elif defined(WEBRTC_LINUX)
++#elif defined(WEBRTC_LINUX) && !defined(__FreeBSD__)
+ return syscall(__NR_gettid);
++#elif defined(__FreeBSD__)
++ return reinterpret_cast<uint64_t>(pthread_self());
+ #else
+ // Default implementation for nacl and solaris.
+ return reinterpret_cast<pid_t>(pthread_self());
+@@ -55,6 +59,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ struct {
+ DWORD dwType;
+@@ -72,6 +77,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/devel/electron6/files/patch-third__party_webrtc_system__wrappers_BUILD.gn b/devel/electron6/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..96afacf65759
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/system_wrappers/BUILD.gn.orig 2019-09-10 11:17:44 UTC
++++ third_party/webrtc/system_wrappers/BUILD.gn
+@@ -57,8 +57,6 @@ rtc_static_library("system_wrappers") {
+ if (!build_with_chromium) {
+ deps += [ ":cpu_features_linux" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/devel/electron6/files/patch-third__party_yasm_yasm__assemble.gni b/devel/electron6/files/patch-third__party_yasm_yasm__assemble.gni
new file mode 100644
index 000000000000..2a3e3fd1ecc4
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_yasm_yasm__assemble.gni
@@ -0,0 +1,159 @@
+--- third_party/yasm/yasm_assemble.gni.orig 2019-09-10 10:43:21 UTC
++++ third_party/yasm/yasm_assemble.gni
+@@ -1,105 +1,23 @@
+-# Copyright 2014 The Chromium Authors. All rights reserved.
++# Copyright 2016 The Chromium Authors. All rights reserved.
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-# This provides the yasm_assemble() template which uses YASM to assemble
+-# assembly files.
+-#
+-# Files to be assembled with YASM should have an extension of .asm.
+-#
+-# Parameters
+-#
+-# yasm_flags (optional)
+-# [list of strings] Pass additional flags into YASM. These are appended
+-# to the command line. Note that the target machine type and system is
+-# already set up based on the current toolchain so you don't need to
+-# specify these things (see below).
+-#
+-# Example: yasm_flags = [ "--force-strict" ]
+-#
+-# include_dirs (optional)
+-# [list of dir names] List of additional include dirs. Note that the
+-# source root and the root generated file dir is always added, just like
+-# our C++ build sets up.
+-#
+-# Example: include_dirs = [ "//some/other/path", target_gen_dir ]
+-#
+-# defines (optional)
+-# [list of strings] List of defines, as with the native code defines.
+-#
+-# Example: defines = [ "FOO", "BAR=1" ]
+-#
+-# inputs, deps, visibility (optional)
+-# These have the same meaning as in an action.
+-#
+-# Example
+-#
+-# yasm_assemble("my_yasm_target") {
+-# sources = [
+-# "ultra_optimized_awesome.asm",
+-# ]
+-# include_dirs = [ "assembly_include" ]
+-# }
+-
+-if (is_mac || is_ios) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-fmacho32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fmacho64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_posix || is_fuchsia) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-felf32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-DPIC",
+- "-felf64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_win) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-DPREFIX",
+- "-fwin32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fwin64",
+- "-m",
+- "amd64",
+- ]
+- }
++if (current_cpu == "x86") {
++ _yasm_flags = [
++ "-felf32",
++ "-m",
++ "x86",
++ ]
++} else if (current_cpu == "x64") {
++ _yasm_flags = [
++ "-DPIC",
++ "-felf64",
++ "-m",
++ "amd64",
++ ]
+ }
+
+-if (is_win) {
+- asm_obj_extension = "obj"
+-} else {
+- asm_obj_extension = "o"
+-}
+-
+ template("yasm_assemble") {
+- assert(defined(invoker.sources), "Need sources defined for $target_name")
+-
+- # Only depend on YASM on x86 systems. Force compilation of .asm files for
+- # ARM to fail.
+- assert(current_cpu == "x86" || current_cpu == "x64")
+-
+ action_name = "${target_name}_action"
+ source_set_name = target_name
+
+@@ -114,24 +32,12 @@ template("yasm_assemble") {
+ inputs = invoker.inputs
+ }
+
+- # Executable (first in the args). The binary might be in the root build dir
+- # (no cross-compiling) or in a toolchain-specific subdirectory of that
+- # (when cross-compiling).
+- yasm_label = "//third_party/yasm($host_toolchain)"
+- args = [ "./" + # Force current dir.
+- rebase_path(get_label_info(yasm_label, "root_out_dir") + "/yasm",
+- root_build_dir) ]
+-
+- # Deps.
+- deps = [
+- yasm_label,
+- ]
++ deps = []
+ if (defined(invoker.deps)) {
+ deps += invoker.deps
+ }
+
+- # Flags.
+- args += _yasm_flags
++ args = [ "yasm" ] + _yasm_flags
+ if (defined(invoker.yasm_flags)) {
+ args += invoker.yasm_flags
+ }
+@@ -188,9 +94,6 @@ template("yasm_assemble") {
+ }
+
+ sources = get_target_outputs(":$action_name")
+-
+- # Do not publicize any header to remove build dependency.
+- public = []
+
+ deps = [
+ ":$action_name",
diff --git a/devel/electron6/files/patch-third__party_zlib_arm__features.c b/devel/electron6/files/patch-third__party_zlib_arm__features.c
new file mode 100644
index 000000000000..c7ff3cd5f2a0
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_zlib_arm__features.c
@@ -0,0 +1,46 @@
+--- third_party/zlib/arm_features.c.orig 2019-09-10 10:43:21 UTC
++++ third_party/zlib/arm_features.c
+@@ -16,6 +16,10 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #include <pthread.h>
+ #endif
+
++#if defined(__FreeBSD__)
++#include <machine/armreg.h>
++#include <sys/types.h>
++#else
+ #if defined(ARMV8_OS_ANDROID)
+ #include <cpu-features.h>
+ #elif defined(ARMV8_OS_LINUX)
+@@ -30,6 +34,7 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #else
+ #error arm_features.c ARM feature detection in not defined for your platform
+ #endif
++#endif
+
+ static void _arm_check_features(void);
+
+@@ -68,14 +73,24 @@ static void _arm_check_features(void)
+ arm_cpu_enable_crc32 = !!(features & ANDROID_CPU_ARM_FEATURE_CRC32);
+ arm_cpu_enable_pmull = !!(features & ANDROID_CPU_ARM_FEATURE_PMULL);
+ #elif defined(ARMV8_OS_LINUX) && defined(__aarch64__)
++#if defined(__FreeBSD__)
++ uint64_t id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL)
++ arm_cpu_enable_pmull = 1;
++ if (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE)
++ arm_cpu_enable_crc32 = 1;
++#else
+ unsigned long features = getauxval(AT_HWCAP);
+ arm_cpu_enable_crc32 = !!(features & HWCAP_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP_PMULL);
++#endif
+ #elif defined(ARMV8_OS_LINUX) && (defined(__ARM_NEON) || defined(__ARM_NEON__))
++#if !defined(__FreeBSD__)
+ /* Query HWCAP2 for ARMV8-A SoCs running in aarch32 mode */
+ unsigned long features = getauxval(AT_HWCAP2);
+ arm_cpu_enable_crc32 = !!(features & HWCAP2_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP2_PMULL);
++#endif
+ #elif defined(ARMV8_OS_FUCHSIA)
+ uint32_t features;
+ zx_status_t rc = zx_system_get_features(ZX_FEATURE_KIND_CPU, &features);
diff --git a/devel/electron6/files/patch-tools_gn_base_files_file__posix.cc b/devel/electron6/files/patch-tools_gn_base_files_file__posix.cc
new file mode 100644
index 000000000000..cd67de1b31bf
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_base_files_file__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_posix.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_posix.cc
+@@ -414,7 +414,7 @@ void File::DoInitialize(const FilePath& path, uint32_t
+ bool File::Flush() {
+ DCHECK(IsValid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !HANDLE_EINTR(fdatasync(file_.get()));
+ #else
+ return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/devel/electron6/files/patch-tools_gn_base_files_file__util.h b/devel/electron6/files/patch-tools_gn_base_files_file__util.h
new file mode 100644
index 000000000000..50e6f6d47d46
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_base_files_file__util.h
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util.h.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_util.h
+@@ -361,7 +361,7 @@ bool VerifyPathControlledByAdmin(const base::FilePath&
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron6/files/patch-tools_gn_base_files_file__util__posix.cc b/devel/electron6/files/patch-tools_gn_base_files_file__util__posix.cc
new file mode 100644
index 000000000000..9371e261d354
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util_posix.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/file_util_posix.cc
+@@ -254,7 +254,7 @@ bool ReplaceFile(const FilePath& from_path,
+ #endif // !defined(OS_NACL_NONSFI)
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron6/files/patch-tools_gn_base_files_scoped__file.cc b/devel/electron6/files/patch-tools_gn_base_files_scoped__file.cc
new file mode 100644
index 000000000000..62938b8813c6
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/scoped_file.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron6/files/patch-tools_gn_build_gen.py b/devel/electron6/files/patch-tools_gn_build_gen.py
new file mode 100644
index 000000000000..17c1d1dad583
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_build_gen.py
@@ -0,0 +1,33 @@
+--- tools/gn/build/gen.py.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/build/gen.py
+@@ -46,7 +46,7 @@ class Platform(object):
+
+ @staticmethod
+ def known_platforms():
+- return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd']
++ return ['linux', 'darwin', 'msvc', 'aix', 'fuchsia', 'openbsd', 'freebsd']
+
+ def platform(self):
+ return self._platform
+@@ -69,6 +69,9 @@ class Platform(object):
+ def is_aix(self):
+ return self._platform == 'aix'
+
++ def is_freebsd(self):
++ return self._platform == 'freebsd'
++
+ def is_posix(self):
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd']
+
+@@ -335,6 +338,11 @@ def WriteGNNinja(path, platform, host, options):
+ elif platform.is_aix():
+ cflags_cc.append('-maix64')
+ ldflags.append('-maix64')
++ elif platform.is_freebsd():
++ cflags.extend(['-Wno-deprecated-register', '-Wno-parentheses-equality'])
++ ldflags.extend(['-pthread'])
++ libs.extend(['-lexecinfo', '-lkvm', '-lutil'])
++ include_dirs += ['/usr/local/include']
+
+ if platform.is_posix():
+ ldflags.append('-pthread')
diff --git a/devel/electron6/files/patch-tools_gn_tools_gn_exec__process.cc b/devel/electron6/files/patch-tools_gn_tools_gn_exec__process.cc
new file mode 100644
index 000000000000..db7042144c3f
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_tools_gn_exec__process.cc
@@ -0,0 +1,13 @@
+--- tools/gn/tools/gn/exec_process.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/tools/gn/exec_process.cc
+@@ -29,6 +29,10 @@
+ #include "base/posix/file_descriptor_shuffle.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
++
+ namespace internal {
+
+ #if defined(OS_WIN)
diff --git a/devel/electron6/files/patch-tools_gn_util_sys__info.cc b/devel/electron6/files/patch-tools_gn_util_sys__info.cc
new file mode 100644
index 000000000000..408fd97444a1
--- /dev/null
+++ b/devel/electron6/files/patch-tools_gn_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- tools/gn/util/sys_info.cc.orig 2019-08-26 19:07:16 UTC
++++ tools/gn/util/sys_info.cc
+@@ -28,6 +28,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron6/files/patch-tools_json__schema__compiler_feature__compiler.py b/devel/electron6/files/patch-tools_json__schema__compiler_feature__compiler.py
new file mode 100644
index 000000000000..b236a8307306
--- /dev/null
+++ b/devel/electron6/files/patch-tools_json__schema__compiler_feature__compiler.py
@@ -0,0 +1,10 @@
+--- tools/json_schema_compiler/feature_compiler.py.orig 2019-09-10 11:14:38 UTC
++++ tools/json_schema_compiler/feature_compiler.py
+@@ -213,6 +213,7 @@ FEATURE_GRAMMAR = (
+ 'enum_map': {
+ 'chromeos': 'Feature::CHROMEOS_PLATFORM',
+ 'linux': 'Feature::LINUX_PLATFORM',
++ 'bsd': 'Feature::LINUX_PLATFORM',
+ 'mac': 'Feature::MACOSX_PLATFORM',
+ 'win': 'Feature::WIN_PLATFORM',
+ }
diff --git a/devel/electron6/files/patch-tools_json__schema__compiler_model.py b/devel/electron6/files/patch-tools_json__schema__compiler_model.py
new file mode 100644
index 000000000000..968194f234fe
--- /dev/null
+++ b/devel/electron6/files/patch-tools_json__schema__compiler_model.py
@@ -0,0 +1,11 @@
+--- tools/json_schema_compiler/model.py.orig 2019-09-10 11:14:38 UTC
++++ tools/json_schema_compiler/model.py
+@@ -605,7 +605,7 @@ class Platforms(object):
+ """
+ CHROMEOS = _PlatformInfo("chromeos")
+ CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
+- LINUX = _PlatformInfo("linux")
++ LINUX = _PlatformInfo("bsd")
+ MAC = _PlatformInfo("mac")
+ WIN = _PlatformInfo("win")
+
diff --git a/devel/electron6/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn b/devel/electron6/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
new file mode 100644
index 000000000000..fb5992528e9e
--- /dev/null
+++ b/devel/electron6/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
@@ -0,0 +1,11 @@
+--- tools/perf/chrome_telemetry_build/BUILD.gn.orig 2019-09-10 11:14:38 UTC
++++ tools/perf/chrome_telemetry_build/BUILD.gn
+@@ -43,7 +43,7 @@ group("telemetry_chrome_test") {
+ data_deps += [ "//chrome:reorder_imports" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
diff --git a/devel/electron6/files/patch-tools_variations_fieldtrial__to__struct.py b/devel/electron6/files/patch-tools_variations_fieldtrial__to__struct.py
new file mode 100644
index 000000000000..586b254a5223
--- /dev/null
+++ b/devel/electron6/files/patch-tools_variations_fieldtrial__to__struct.py
@@ -0,0 +1,10 @@
+--- tools/variations/fieldtrial_to_struct.py.orig 2019-09-10 10:43:22 UTC
++++ tools/variations/fieldtrial_to_struct.py
+@@ -33,6 +33,7 @@ finally:
+ _platforms = [
+ 'android',
+ 'android_webview',
++ 'freebsd',
+ 'chromeos',
+ 'fuchsia',
+ 'ios',
diff --git a/devel/electron6/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc b/devel/electron6/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
new file mode 100644
index 000000000000..5ebd5c47cd43
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
@@ -0,0 +1,20 @@
+--- ui/base/dragdrop/os_exchange_data_provider_factory.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/base/dragdrop/os_exchange_data_provider_factory.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(USE_X11)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+ #elif defined(OS_MACOSX)
+ #include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<OSExchangeData::Provider>
+ OSExchangeDataProviderFactory::CreateProvider() {
+ #if defined(USE_X11)
+ return std::make_unique<OSExchangeDataProviderAuraX11>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<OSExchangeDataProviderAura>();
+ #elif defined(OS_MACOSX)
+ return ui::BuildOSExchangeDataProviderMac();
diff --git a/devel/electron6/files/patch-ui_base_ime_init_input__method__initializer.cc b/devel/electron6/files/patch-ui_base_ime_init_input__method__initializer.cc
new file mode 100644
index 000000000000..245a232998a5
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_ime_init_input__method__initializer.cc
@@ -0,0 +1,38 @@
+--- ui/base/ime/init/input_method_initializer.cc.orig 2019-09-10 10:43:22 UTC
++++ ui/base/ime/init/input_method_initializer.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/base/ime/ime_bridge.h"
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/logging.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
+ #elif defined(OS_WIN)
+@@ -18,7 +18,7 @@
+
+ namespace {
+
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const ui::LinuxInputMethodContextFactory*
+ g_linux_input_method_context_factory_for_testing;
+ #endif
+@@ -46,7 +46,7 @@ void ShutdownInputMethod() {
+ void InitializeInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Initialize();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ if (!g_linux_input_method_context_factory_for_testing)
+ g_linux_input_method_context_factory_for_testing =
+ new FakeInputMethodContextFactory();
+@@ -67,7 +67,7 @@ void InitializeInputMethodForTesting() {
+ void ShutdownInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Shutdown();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxInputMethodContextFactory* factory =
+ LinuxInputMethodContextFactory::instance();
+ CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
diff --git a/devel/electron6/files/patch-ui_base_resource_resource__bundle.cc b/devel/electron6/files/patch-ui_base_resource_resource__bundle.cc
new file mode 100644
index 000000000000..4ccbc9fd46df
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_resource_resource__bundle.cc
@@ -0,0 +1,20 @@
+--- ui/base/resource/resource_bundle.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/base/resource/resource_bundle.cc
+@@ -701,7 +701,7 @@ void ResourceBundle::ReloadFonts() {
+ }
+
+ ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ return max_scale_factor_;
+ #else
+ return GetSupportedScaleFactors().back();
+@@ -754,7 +754,7 @@ void ResourceBundle::InitSharedInstance(Delegate* dele
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ // For Windows we have a separate case in this function.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ #endif
+ #endif
diff --git a/devel/electron6/files/patch-ui_base_resource_resource__bundle__freebsd.cc b/devel/electron6/files/patch-ui_base_resource_resource__bundle__freebsd.cc
new file mode 100644
index 000000000000..be6d1ee45f7a
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_resource_resource__bundle__freebsd.cc
@@ -0,0 +1,24 @@
+--- ui/base/resource/resource_bundle_freebsd.cc.orig 2019-09-16 09:25:25 UTC
++++ ui/base/resource/resource_bundle_freebsd.cc
+@@ -0,0 +1,21 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ui/base/resource/resource_bundle.h"
++
++#include "base/logging.h"
++#include "base/macros.h"
++#include "ui/gfx/image/image.h"
++
++namespace ui {
++
++void ResourceBundle::LoadCommonResources() {
++ LoadChromeResources();
++}
++
++gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id) {
++ return GetImageNamed(resource_id);
++}
++
++} // namespace ui
diff --git a/devel/electron6/files/patch-ui_base_ui__base__features.cc b/devel/electron6/files/patch-ui_base_ui__base__features.cc
new file mode 100644
index 000000000000..b577c3f28576
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_ui__base__features.cc
@@ -0,0 +1,20 @@
+--- ui/base/ui_base_features.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/base/ui_base_features.cc
+@@ -108,7 +108,7 @@ const base::Feature kEnableAutomaticUiAdjustmentsForTo
+ "EnableAutomaticUiAdjustmentsForTouch", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables stylus appearing as touch when in contact with digitizer.
+ const base::Feature kDirectManipulationStylus = {
+ "DirectManipulationStylus",
+@@ -118,7 +118,7 @@ const base::Feature kDirectManipulationStylus = {
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #endif
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const base::Feature kMash = {"Mash", base::FEATURE_DISABLED_BY_DEFAULT};
+
diff --git a/devel/electron6/files/patch-ui_base_ui__base__features.h b/devel/electron6/files/patch-ui_base_ui__base__features.h
new file mode 100644
index 000000000000..b0ff90b22835
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_ui__base__features.h
@@ -0,0 +1,15 @@
+--- ui/base/ui_base_features.h.orig 2019-09-10 11:14:39 UTC
++++ ui/base/ui_base_features.h
+@@ -59,10 +59,10 @@ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kEnableAutomaticUiAdjustmentsForTouch;
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kDirectManipulationStylus;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Used to have ash (Chrome OS system UI) run in its own process.
+ // TODO(jamescook): Make flag only available in Chrome OS.
diff --git a/devel/electron6/files/patch-ui_base_webui_web__ui__util.cc b/devel/electron6/files/patch-ui_base_webui_web__ui__util.cc
new file mode 100644
index 000000000000..ef473e4ccc07
--- /dev/null
+++ b/devel/electron6/files/patch-ui_base_webui_web__ui__util.cc
@@ -0,0 +1,11 @@
+--- ui/base/webui/web_ui_util.cc.orig 2019-09-10 10:43:22 UTC
++++ ui/base/webui/web_ui_util.cc
+@@ -215,7 +215,7 @@ std::string GetFontFamily() {
+
+ // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced
+ // into Ozone: crbug.com/320050
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ font_family = ui::ResourceBundle::GetSharedInstance().GetFont(
+ ui::ResourceBundle::BaseFont).GetFontName() + ", " + font_family;
+ #endif
diff --git a/devel/electron6/files/patch-ui_events_devices_x11_device__data__manager__x11.cc b/devel/electron6/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
new file mode 100644
index 000000000000..aa4ee819a444
--- /dev/null
+++ b/devel/electron6/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
@@ -0,0 +1,19 @@
+--- ui/events/devices/x11/device_data_manager_x11.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/events/devices/x11/device_data_manager_x11.cc
+@@ -828,6 +828,8 @@ void DeviceDataManagerX11::SetDisabledKeyboardAllowedK
+ }
+
+ void DeviceDataManagerX11::DisableDevice(int deviceid) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ blocked_devices_.set(deviceid, true);
+ // TODO(rsadam@): Support blocking touchscreen devices.
+ std::vector<InputDevice> keyboards = GetKeyboardDevices();
+@@ -838,6 +840,7 @@ void DeviceDataManagerX11::DisableDevice(int deviceid)
+ keyboards.erase(it);
+ DeviceDataManager::OnKeyboardDevicesUpdated(keyboards);
+ }
++#endif
+ }
+
+ void DeviceDataManagerX11::EnableDevice(int deviceid) {
diff --git a/devel/electron6/files/patch-ui_events_event__switches.cc b/devel/electron6/files/patch-ui_events_event__switches.cc
new file mode 100644
index 000000000000..fae80f473451
--- /dev/null
+++ b/devel/electron6/files/patch-ui_events_event__switches.cc
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/events/event_switches.cc
+@@ -14,7 +14,7 @@ namespace switches {
+ const char kCompensateForUnstablePinchZoom[] =
+ "compensate-for-unstable-pinch-zoom";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ // Tells chrome to interpret events from these devices as touch events. Only
+ // available with XInput 2 (i.e. X server 1.8 or above). The id's of the
+ // devices can be retrieved from 'xinput list'.
diff --git a/devel/electron6/files/patch-ui_events_event__switches.h b/devel/electron6/files/patch-ui_events_event__switches.h
new file mode 100644
index 000000000000..816e9406f754
--- /dev/null
+++ b/devel/electron6/files/patch-ui_events_event__switches.h
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.h.orig 2019-09-10 10:43:23 UTC
++++ ui/events/event_switches.h
+@@ -13,7 +13,7 @@ namespace switches {
+
+ EVENTS_BASE_EXPORT extern const char kCompensateForUnstablePinchZoom[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ EVENTS_BASE_EXPORT extern const char kTouchDevices[];
+ EVENTS_BASE_EXPORT extern const char kPenDevices[];
+ #endif
diff --git a/devel/electron6/files/patch-ui_events_keycodes_dom_keycode__converter.cc b/devel/electron6/files/patch-ui_events_keycodes_dom_keycode__converter.cc
new file mode 100644
index 000000000000..d36eda41e9fd
--- /dev/null
+++ b/devel/electron6/files/patch-ui_events_keycodes_dom_keycode__converter.cc
@@ -0,0 +1,11 @@
+--- ui/events/keycodes/dom/keycode_converter.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/events/keycodes/dom/keycode_converter.cc
+@@ -19,7 +19,7 @@ namespace {
+ // and DOM Level 3 |code| strings.
+ #if defined(OS_WIN)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, win, code}
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, xkb, code}
+ #elif defined(OS_MACOSX)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, mac, code}
diff --git a/devel/electron6/files/patch-ui_gfx_BUILD.gn b/devel/electron6/files/patch-ui_gfx_BUILD.gn
new file mode 100644
index 000000000000..3e207423f96b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gfx/BUILD.gn.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/BUILD.gn
+@@ -550,7 +550,7 @@ jumbo_source_set("memory_buffer_sources") {
+ deps += [ "//build/config/linux/libdrm" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux || is_android) && !is_bsd) {
+ deps += [ "//third_party/libsync" ]
+ }
+
diff --git a/devel/electron6/files/patch-ui_gfx_canvas__skia.cc b/devel/electron6/files/patch-ui_gfx_canvas__skia.cc
new file mode 100644
index 000000000000..ab60d027901b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_canvas__skia.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/canvas_skia.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/gfx/canvas_skia.cc
+@@ -209,7 +209,7 @@ void Canvas::DrawStringRectWithFlags(const base::strin
+ Range range = StripAcceleratorChars(flags, &adjusted_text);
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, eliding really means fading the end of the string. But only
+ // for LTR text. RTL text is still elided (on the left) with "...".
+ if (elide_text) {
diff --git a/devel/electron6/files/patch-ui_gfx_codec_jpeg__codec.cc b/devel/electron6/files/patch-ui_gfx_codec_jpeg__codec.cc
new file mode 100644
index 000000000000..99439931118b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_codec_jpeg__codec.cc
@@ -0,0 +1,20 @@
+--- ui/gfx/codec/jpeg_codec.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/gfx/codec/jpeg_codec.cc
+@@ -207,6 +207,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // Choose an output colorspace and return if it is an unsupported one.
+ // Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+@@ -223,6 +224,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ NOTREACHED() << "Invalid pixel format";
+ return false;
+ }
++#else
++ cinfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
diff --git a/devel/electron6/files/patch-ui_gfx_font__fallback__linux.cc b/devel/electron6/files/patch-ui_gfx_font__fallback__linux.cc
new file mode 100644
index 000000000000..c80f6192a310
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_font__fallback__linux.cc
@@ -0,0 +1,13 @@
+--- ui/gfx/font_fallback_linux.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/font_fallback_linux.cc
+@@ -16,6 +16,10 @@
+ #include "base/trace_event/trace_event.h"
+ #include "ui/gfx/font.h"
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ namespace gfx {
+
+ namespace {
diff --git a/devel/electron6/files/patch-ui_gfx_font__list.cc b/devel/electron6/files/patch-ui_gfx_font__list.cc
new file mode 100644
index 000000000000..36714e57b69e
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_font__list.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/font_list.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/gfx/font_list.cc
+@@ -24,7 +24,7 @@ base::LazyInstance<scoped_refptr<gfx::FontListImpl>>::
+ bool g_default_impl_initialized = false;
+
+ bool IsFontFamilyAvailable(const std::string& family, SkFontMgr* fontManager) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !!fontManager->legacyMakeTypeface(family.c_str(), SkFontStyle());
+ #else
+ sk_sp<SkFontStyleSet> set(fontManager->matchFamily(family.c_str()));
diff --git a/devel/electron6/files/patch-ui_gfx_font__render__params.h b/devel/electron6/files/patch-ui_gfx_font__render__params.h
new file mode 100644
index 000000000000..1e58547bab1f
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_font__render__params.h
@@ -0,0 +1,18 @@
+--- ui/gfx/font_render_params.h.orig 2019-09-10 10:43:23 UTC
++++ ui/gfx/font_render_params.h
+@@ -111,13 +111,13 @@ GFX_EXPORT FontRenderParams GetFontRenderParams(
+ const FontRenderParamsQuery& query,
+ std::string* family_out);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are
+ // changing Fontconfig's configuration.
+ GFX_EXPORT void ClearFontRenderParamsCacheForTest();
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ // Gets the device scale factor to query the FontRenderParams.
+ GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
diff --git a/devel/electron6/files/patch-ui_gfx_gpu__memory__buffer.h b/devel/electron6/files/patch-ui_gfx_gpu__memory__buffer.h
new file mode 100644
index 000000000000..4603dbaa65b2
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_gpu__memory__buffer.h
@@ -0,0 +1,20 @@
+--- ui/gfx/gpu_memory_buffer.h.orig 2019-09-10 10:43:23 UTC
++++ ui/gfx/gpu_memory_buffer.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ #include "ui/gfx/mac/io_surface.h"
+@@ -65,7 +65,7 @@ struct GFX_EXPORT GpuMemoryBufferHandle {
+ base::UnsafeSharedMemoryRegion region;
+ uint32_t offset;
+ int32_t stride;
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ NativePixmapHandle native_pixmap_handle;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ ScopedRefCountedIOSurfaceMachPort mach_port;
diff --git a/devel/electron6/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h b/devel/electron6/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
new file mode 100644
index 000000000000..fd179ec18f00
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
@@ -0,0 +1,35 @@
+--- ui/gfx/ipc/gfx_param_traits_macros.h.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/ipc/gfx_param_traits_macros.h
+@@ -18,7 +18,7 @@
+ #include "ui/gfx/selection_bound.h"
+ #include "ui/gfx/swap_result.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #endif
+
+@@ -51,7 +51,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferHandle)
+ IPC_STRUCT_TRAITS_MEMBER(region)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(native_pixmap_handle)
+ #elif defined(OS_MACOSX)
+ IPC_STRUCT_TRAITS_MEMBER(mach_port)
+@@ -66,12 +66,12 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferId)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_END()
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapPlane)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(fd)
+ #elif defined(OS_FUCHSIA)
+ IPC_STRUCT_TRAITS_MEMBER(vmo)
diff --git a/devel/electron6/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc b/devel/electron6/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
new file mode 100644
index 000000000000..3cae7d9d9435
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/linux/client_native_pixmap_dmabuf.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/linux/client_native_pixmap_dmabuf.cc
+@@ -5,7 +5,9 @@
+ #include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
+
+ #include <fcntl.h>
++#if !defined(__FreeBSD__)
+ #include <linux/version.h>
++#endif
+ #include <stddef.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+@@ -24,11 +26,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/switches.h"
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+-#include <linux/dma-buf.h>
+-#else
+-#include <linux/types.h>
+-
++#if defined(__FreeBSD__)
+ struct dma_buf_sync {
+ __u64 flags;
+ };
diff --git a/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc b/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
new file mode 100644
index 000000000000..881c9034fc75
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.cc
@@ -0,0 +1,66 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.cc
+@@ -24,15 +24,15 @@ bool StructTraits<gfx::mojom::BufferUsageAndFormatData
+ return data.ReadUsage(&out->usage) && data.ReadFormat(&out->format);
+ }
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ mojo::ScopedHandle StructTraits<
+ gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane>::buffer_handle(gfx::NativePixmapPlane& plane) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return mojo::WrapPlatformFile(plane.fd.release());
+ #elif defined(OS_FUCHSIA)
+ return mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(plane.vmo)));
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool StructTraits<
+@@ -45,7 +45,7 @@ bool StructTraits<
+
+ mojo::PlatformHandle handle =
+ mojo::UnwrapPlatformHandle(data.TakeBufferHandle());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!handle.is_fd())
+ return false;
+ out->fd = handle.TakeFD();
+@@ -53,7 +53,7 @@ bool StructTraits<
+ if (!handle.is_handle())
+ return false;
+ out->vmo = zx::vmo(handle.TakeHandle());
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ return true;
+ }
+@@ -71,7 +71,7 @@ bool StructTraits<
+ out->modifier = data.modifier();
+ return data.ReadPlanes(&out->planes);
+ }
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+
+ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTraits<
+ gfx::mojom::GpuMemoryBufferHandleDataView,
+@@ -84,7 +84,7 @@ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTra
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewSharedMemoryHandle(
+ std::move(handle.region));
+ case gfx::NATIVE_PIXMAP:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewNativePixmapHandle(
+ std::move(handle.native_pixmap_handle));
+ #else
+@@ -160,7 +160,7 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDat
+ out->type = gfx::SHARED_MEMORY_BUFFER;
+ out->region = std::move(platform_handle->get_shared_memory_handle());
+ return true;
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ case gfx::mojom::GpuMemoryBufferPlatformHandleDataView::Tag::
+ NATIVE_PIXMAP_HANDLE:
+ out->type = gfx::NATIVE_PIXMAP;
diff --git a/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h b/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
new file mode 100644
index 000000000000..cd1776fe990c
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_mojo_buffer__types__struct__traits.h
@@ -0,0 +1,20 @@
+--- ui/gfx/mojo/buffer_types_struct_traits.h.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/mojo/buffer_types_struct_traits.h
+@@ -188,7 +188,7 @@ struct StructTraits<gfx::mojom::GpuMemoryBufferIdDataV
+ }
+ };
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ template <>
+ struct StructTraits<gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane> {
+@@ -232,7 +232,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ static bool Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out);
+ };
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+
+ template <>
+ struct StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
diff --git a/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.cc b/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.cc
new file mode 100644
index 000000000000..66011b5a562e
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.cc
@@ -0,0 +1,47 @@
+--- ui/gfx/native_pixmap_handle.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/native_pixmap_handle.cc
+@@ -8,7 +8,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <drm_fourcc.h>
+ #include "base/posix/eintr_wrapper.h"
+ #endif
+@@ -20,7 +20,7 @@
+
+ namespace gfx {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static_assert(NativePixmapHandle::kNoModifier == DRM_FORMAT_MOD_INVALID,
+ "gfx::NativePixmapHandle::kNoModifier should be an alias for"
+ "DRM_FORMAT_MOD_INVALID");
+@@ -31,7 +31,7 @@ NativePixmapPlane::NativePixmapPlane() : stride(0), of
+ NativePixmapPlane::NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -42,7 +42,7 @@ NativePixmapPlane::NativePixmapPlane(int stride,
+ : stride(stride),
+ offset(offset),
+ size(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ fd(std::move(fd))
+ #elif defined(OS_FUCHSIA)
+@@ -70,7 +70,7 @@ NativePixmapHandle& NativePixmapHandle::operator=(Nati
+ NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
+ NativePixmapHandle clone;
+ for (auto& plane : handle.planes) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(plane.fd.is_valid());
+ base::ScopedFD fd_dup(HANDLE_EINTR(dup(plane.fd.get())));
+ if (!fd_dup.is_valid()) {
diff --git a/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.h b/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.h
new file mode 100644
index 000000000000..4925f0162352
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_native__pixmap__handle.h
@@ -0,0 +1,29 @@
+--- ui/gfx/native_pixmap_handle.h.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/native_pixmap_handle.h
+@@ -15,7 +15,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/scoped_file.h"
+ #endif
+
+@@ -32,7 +32,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -53,7 +53,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ // This is necessary to map the buffers.
+ uint64_t size;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // File descriptor for the underlying memory object (usually dmabuf).
+ base::ScopedFD fd;
+ #elif defined(OS_FUCHSIA)
diff --git a/devel/electron6/files/patch-ui_gfx_render__text.cc b/devel/electron6/files/patch-ui_gfx_render__text.cc
new file mode 100644
index 000000000000..6a7e766d6615
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gfx_render__text.cc
@@ -0,0 +1,46 @@
+--- ui/gfx/render_text.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gfx/render_text.cc
+@@ -976,32 +976,33 @@ void RenderText::SetDisplayOffset(int horizontal_offse
+ const int extra_content = GetContentWidth() - display_rect_.width();
+ const int cursor_width = cursor_enabled_ ? 1 : 0;
+
+- int min_offset = 0;
+- int max_offset = 0;
++ // avoid collisions with vm_map.h on FreeBSD --cmt
++ int _min_offset = 0;
++ int _max_offset = 0;
+ if (extra_content > 0) {
+ switch (GetCurrentHorizontalAlignment()) {
+ case ALIGN_LEFT:
+- min_offset = -extra_content;
++ _min_offset = -extra_content;
+ break;
+ case ALIGN_RIGHT:
+- max_offset = extra_content;
++ _max_offset = extra_content;
+ break;
+ case ALIGN_CENTER:
+ // The extra space reserved for cursor at the end of the text is ignored
+ // when centering text. So, to calculate the valid range for offset, we
+ // exclude that extra space, calculate the range, and add it back to the
+ // range (if cursor is enabled).
+- min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
+- max_offset = (extra_content - cursor_width) / 2;
++ _min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
++ _max_offset = (extra_content - cursor_width) / 2;
+ break;
+ default:
+ break;
+ }
+ }
+- if (horizontal_offset < min_offset)
+- horizontal_offset = min_offset;
+- else if (horizontal_offset > max_offset)
+- horizontal_offset = max_offset;
++ if (horizontal_offset < _min_offset)
++ horizontal_offset = _min_offset;
++ else if (horizontal_offset > _max_offset)
++ horizontal_offset = _max_offset;
+
+ cached_bounds_and_offset_valid_ = true;
+ display_offset_.set_x(horizontal_offset);
diff --git a/devel/electron6/files/patch-ui_gl_BUILD.gn b/devel/electron6/files/patch-ui_gl_BUILD.gn
new file mode 100644
index 000000000000..8be8cd51531a
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gl/BUILD.gn.orig 2019-09-16 09:24:25 UTC
++++ ui/gl/BUILD.gn
+@@ -215,7 +215,7 @@ jumbo_component("gl") {
+ ]
+ }
+
+- if (is_posix && !is_fuchsia && !is_mac) {
++ if (is_posix && !is_fuchsia && !is_mac && !is_bsd) {
+ # Windows has USE_EGL but doesn't support base::FileDescriptor.
+ # libsync isn't supported or needed on MacOSX.
+ # Fuchsia is excluded due to a libsync dependency and because it's
diff --git a/devel/electron6/files/patch-ui_gl_generate__bindings.py b/devel/electron6/files/patch-ui_gl_generate__bindings.py
new file mode 100644
index 000000000000..f93036f8a4f6
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_generate__bindings.py
@@ -0,0 +1,12 @@
+--- ui/gl/generate_bindings.py.orig 2019-09-10 11:14:39 UTC
++++ ui/gl/generate_bindings.py
+@@ -2684,6 +2684,9 @@ GLX_FUNCTIONS = [
+ 'arguments':
+ 'Display* dpy, GLXDrawable drawable, int32_t* numerator, '
+ 'int32_t* denominator' },
++{ 'return_type': '__GLXextFuncPtr',
++ 'names': ['glXGetProcAddressARB'],
++ 'arguments': 'const GLubyte* procName', },
+ { 'return_type': 'void',
+ 'names': ['glXGetSelectedEvent'],
+ 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
diff --git a/devel/electron6/files/patch-ui_gl_gl__bindings__api__autogen__glx.h b/devel/electron6/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
new file mode 100644
index 000000000000..1efd39eb675d
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
@@ -0,0 +1,10 @@
+--- ui/gl/gl_bindings_api_autogen_glx.h.orig 2019-09-10 10:43:23 UTC
++++ ui/gl/gl_bindings_api_autogen_glx.h
+@@ -88,6 +88,7 @@ bool glXGetMscRateOMLFn(Display* dpy,
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) override;
++__GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) override;
+ void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) override;
diff --git a/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.cc b/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.cc
new file mode 100644
index 000000000000..ed993fd7b654
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.cc
@@ -0,0 +1,61 @@
+--- ui/gl/gl_bindings_autogen_glx.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/gl/gl_bindings_autogen_glx.cc
+@@ -115,6 +115,8 @@ void DriverGLX::InitializeExtensionBindings() {
+
+ ext.b_GLX_ARB_create_context =
+ gfx::HasExtension(extensions, "GLX_ARB_create_context");
++ ext.b_GLX_ARB_get_proc_address =
++ gfx::HasExtension(extensions, "GLX_ARB_get_proc_address");
+ ext.b_GLX_EXT_swap_control =
+ gfx::HasExtension(extensions, "GLX_EXT_swap_control");
+ ext.b_GLX_EXT_texture_from_pixmap =
+@@ -145,6 +147,11 @@ void DriverGLX::InitializeExtensionBindings() {
+ GetGLProcAddress("glXCreateContextAttribsARB"));
+ }
+
++ if (ext.b_GLX_ARB_get_proc_address) {
++ fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
++ GetGLProcAddress("glXGetProcAddressARB"));
++ }
++
+ if (ext.b_GLX_SGIX_fbconfig) {
+ fn.glXGetFBConfigFromVisualSGIXFn =
+ reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+@@ -346,6 +353,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
+ return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
++ return driver_->fn.glXGetProcAddressARBFn(procName);
++}
++
+ void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -646,6 +657,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
++ return glx_api_->glXGetProcAddressARBFn(procName);
++}
++
+ void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -1068,6 +1084,14 @@ bool DebugGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ << static_cast<const void*>(denominator) << ")");
+ bool result =
+ glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
++ GL_SERVICE_LOG("GL_RESULT: " << result);
++ return result;
++}
++
++__GLXextFuncPtr DebugGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ GL_SERVICE_LOG("glXGetProcAddressARB"
++ << "(" << static_cast<const void*>(procName) << ")");
++ __GLXextFuncPtr result = glx_api_->glXGetProcAddressARBFn(procName);
+ GL_SERVICE_LOG("GL_RESULT: " << result);
+ return result;
+ }
diff --git a/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.h b/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.h
new file mode 100644
index 000000000000..053c6420cd32
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_gl__bindings__autogen__glx.h
@@ -0,0 +1,43 @@
+--- ui/gl/gl_bindings_autogen_glx.h.orig 2019-09-10 10:43:23 UTC
++++ ui/gl/gl_bindings_autogen_glx.h
+@@ -104,6 +104,8 @@ typedef bool(GL_BINDING_CALL* glXGetMscRateOMLProc)(Di
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator);
++typedef __GLXextFuncPtr(GL_BINDING_CALL* glXGetProcAddressARBProc)(
++ const GLubyte* procName);
+ typedef void(GL_BINDING_CALL* glXGetSelectedEventProc)(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask);
+@@ -166,6 +168,7 @@ typedef void(GL_BINDING_CALL* glXWaitXProc)(void);
+
+ struct ExtensionsGLX {
+ bool b_GLX_ARB_create_context;
++ bool b_GLX_ARB_get_proc_address;
+ bool b_GLX_EXT_swap_control;
+ bool b_GLX_EXT_texture_from_pixmap;
+ bool b_GLX_MESA_copy_sub_buffer;
+@@ -203,6 +206,7 @@ struct ProcsGLX {
+ glXGetFBConfigFromVisualSGIXProc glXGetFBConfigFromVisualSGIXFn;
+ glXGetFBConfigsProc glXGetFBConfigsFn;
+ glXGetMscRateOMLProc glXGetMscRateOMLFn;
++ glXGetProcAddressARBProc glXGetProcAddressARBFn;
+ glXGetSelectedEventProc glXGetSelectedEventFn;
+ glXGetSyncValuesOMLProc glXGetSyncValuesOMLFn;
+ glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigFn;
+@@ -310,6 +314,7 @@ class GL_EXPORT GLXApi {
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) = 0;
++ virtual __GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) = 0;
+ virtual void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) = 0;
+@@ -394,6 +399,7 @@ class GL_EXPORT GLXApi {
+ ::gl::g_current_glx_context->glXGetFBConfigFromVisualSGIXFn
+ #define glXGetFBConfigs ::gl::g_current_glx_context->glXGetFBConfigsFn
+ #define glXGetMscRateOML ::gl::g_current_glx_context->glXGetMscRateOMLFn
++#define glXGetProcAddressARB ::gl::g_current_glx_context->glXGetProcAddressARBFn
+ #define glXGetSelectedEvent ::gl::g_current_glx_context->glXGetSelectedEventFn
+ #define glXGetSyncValuesOML ::gl::g_current_glx_context->glXGetSyncValuesOMLFn
+ #define glXGetVisualFromFBConfig \
diff --git a/devel/electron6/files/patch-ui_gl_gl__fence.cc b/devel/electron6/files/patch-ui_gl_gl__fence.cc
new file mode 100644
index 000000000000..e3d5c412fda8
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_gl__fence.cc
@@ -0,0 +1,11 @@
+--- ui/gl/gl_fence.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gl/gl_fence.cc
+@@ -18,7 +18,7 @@
+ #include "ui/gl/gl_fence_apple.h"
+ #endif
+
+-#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ #define USE_GL_FENCE_ANDROID_NATIVE_FENCE_SYNC
+ #include "ui/gl/gl_fence_android_native_fence_sync.h"
+ #include "ui/gl/gl_surface_egl.h"
diff --git a/devel/electron6/files/patch-ui_gl_gl__surface__glx.cc b/devel/electron6/files/patch-ui_gl_gl__surface__glx.cc
new file mode 100644
index 000000000000..1bebd46a50a6
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_gl__surface__glx.cc
@@ -0,0 +1,14 @@
+--- ui/gl/gl_surface_glx.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/gl/gl_surface_glx.cc
+@@ -431,7 +431,10 @@ bool GLSurfaceGLX::InitializeOneOff() {
+ return false;
+ }
+
+- const auto& visual_info = gl::GLVisualPickerGLX::GetInstance()->rgba_visual();
++ const auto& visual_info =
++ ui::IsCompositingManagerPresent()
++ ? gl::GLVisualPickerGLX::GetInstance()->rgba_visual()
++ : gl::GLVisualPickerGLX::GetInstance()->system_visual();
+ g_visual = visual_info.visual;
+ g_depth = visual_info.depth;
+ g_colormap =
diff --git a/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.cc b/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.cc
new file mode 100644
index 000000000000..b1edf23517ed
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.cc
@@ -0,0 +1,43 @@
+--- ui/gl/sync_control_vsync_provider.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/gl/sync_control_vsync_provider.cc
+@@ -11,7 +11,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // These constants define a reasonable range for a calculated refresh interval.
+ // Calculating refreshes out of this range will be considered a fatal error.
+ const int64_t kMinVsyncIntervalUs = base::Time::kMicrosecondsPerSecond / 400;
+@@ -26,7 +26,7 @@ const double kRelativeIntervalDifferenceThreshold = 0.
+ namespace gl {
+
+ SyncControlVSyncProvider::SyncControlVSyncProvider() : gfx::VSyncProvider() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On platforms where we can't get an accurate reading on the refresh
+ // rate we fall back to the assumption that we're displaying 60 frames
+ // per second.
+@@ -48,7 +48,7 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ base::TimeTicks* timebase_out,
+ base::TimeDelta* interval_out) {
+ TRACE_EVENT0("gpu", "SyncControlVSyncProvider::GetVSyncParameters");
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The actual clock used for the system time returned by glXGetSyncValuesOML
+ // is unspecified. In practice, the clock used is likely to be either
+ // CLOCK_REALTIME or CLOCK_MONOTONIC, so we compare the returned time to the
+@@ -156,11 +156,11 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool SyncControlVSyncProvider::SupportGetVSyncParametersIfAvailable() const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.h b/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.h
new file mode 100644
index 000000000000..7442bcaf6ca8
--- /dev/null
+++ b/devel/electron6/files/patch-ui_gl_sync__control__vsync__provider.h
@@ -0,0 +1,34 @@
+--- ui/gl/sync_control_vsync_provider.h.orig 2019-09-10 10:43:23 UTC
++++ ui/gl/sync_control_vsync_provider.h
+@@ -26,11 +26,11 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ bool SupportGetVSyncParametersIfAvailable() const override;
+
+ static constexpr bool IsSupported() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ protected:
+@@ -41,7 +41,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0;
+
+ private:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeTicks last_timebase_;
+ uint64_t last_media_stream_counter_ = 0;
+ base::TimeDelta last_good_interval_;
+@@ -52,7 +52,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ // from configuration change (monitor reconfiguration, moving windows
+ // between monitors, suspend and resume, etc.).
+ base::queue<base::TimeDelta> last_computed_intervals_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
+ };
diff --git a/devel/electron6/files/patch-ui_message__center_public_cpp_message__center__constants.h b/devel/electron6/files/patch-ui_message__center_public_cpp_message__center__constants.h
new file mode 100644
index 000000000000..7b51854976da
--- /dev/null
+++ b/devel/electron6/files/patch-ui_message__center_public_cpp_message__center__constants.h
@@ -0,0 +1,11 @@
+--- ui/message_center/public/cpp/message_center_constants.h.orig 2019-09-10 10:43:23 UTC
++++ ui/message_center/public/cpp/message_center_constants.h
+@@ -105,7 +105,7 @@ const int kButtonHorizontalPadding = 16; // In DIPs.
+ const int kButtonIconTopPadding = 11; // In DIPs.
+ const int kButtonIconToTitlePadding = 16; // In DIPs.
+
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ constexpr SkColor kButtonSeparatorColor = SkColorSetRGB(234, 234, 234);
+ constexpr SkColor kHoveredButtonBackgroundColor = SkColorSetRGB(243, 243, 243);
+ #endif
diff --git a/devel/electron6/files/patch-ui_message__center_views_message__popup__view.cc b/devel/electron6/files/patch-ui_message__center_views_message__popup__view.cc
new file mode 100644
index 000000000000..079de141b563
--- /dev/null
+++ b/devel/electron6/files/patch-ui_message__center_views_message__popup__view.cc
@@ -0,0 +1,11 @@
+--- ui/message_center/views/message_popup_view.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/message_center/views/message_popup_view.cc
+@@ -103,7 +103,7 @@ void MessagePopupView::AutoCollapse() {
+ void MessagePopupView::Show() {
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ params.keep_on_top = true;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make the widget explicitly activatable as TYPE_POPUP is not activatable by
+ // default but we need focus for the inline reply textarea.
+ params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
diff --git a/devel/electron6/files/patch-ui_native__theme_native__theme.h b/devel/electron6/files/patch-ui_native__theme_native__theme.h
new file mode 100644
index 000000000000..4e89d3c0d190
--- /dev/null
+++ b/devel/electron6/files/patch-ui_native__theme_native__theme.h
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme.h.orig 2019-09-10 11:14:39 UTC
++++ ui/native_theme/native_theme.h
+@@ -48,7 +48,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
+ // The part to be painted / sized.
+ enum Part {
+ kCheckbox,
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ kFrameTopArea,
+ #endif
+ kInnerSpinButton,
diff --git a/devel/electron6/files/patch-ui_native__theme_native__theme__base.cc b/devel/electron6/files/patch-ui_native__theme_native__theme__base.cc
new file mode 100644
index 000000000000..21e53f527051
--- /dev/null
+++ b/devel/electron6/files/patch-ui_native__theme_native__theme__base.cc
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme_base.cc.orig 2019-09-10 11:14:39 UTC
++++ ui/native_theme/native_theme_base.cc
+@@ -172,7 +172,7 @@ void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
+ case kCheckbox:
+ PaintCheckbox(canvas, state, rect, extra.button);
+ break;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case kFrameTopArea:
+ PaintFrameTopArea(canvas, state, rect, extra.frame_top_area);
+ break;
diff --git a/devel/electron6/files/patch-ui_strings_app__locale__settings.grd b/devel/electron6/files/patch-ui_strings_app__locale__settings.grd
new file mode 100644
index 000000000000..c57ead4e5c06
--- /dev/null
+++ b/devel/electron6/files/patch-ui_strings_app__locale__settings.grd
@@ -0,0 +1,11 @@
+--- ui/strings/app_locale_settings.grd.orig 2019-09-10 10:43:23 UTC
++++ ui/strings/app_locale_settings.grd
+@@ -187,7 +187,7 @@
+ 75%
+ </message>
+ </if>
+- <if expr="(is_linux or is_android or is_bsd) and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <!-- The font used in Web UI (e.g. History). Note that these are only
+ backups. We try to use the system font if possible. -->
+ <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true">
diff --git a/devel/electron6/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc b/devel/electron6/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
new file mode 100644
index 000000000000..45643a5bc2c0
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/bubble/bubble_dialog_delegate_view.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/bubble/bubble_dialog_delegate_view.cc
+@@ -135,7 +135,7 @@ Widget* BubbleDialogDelegateView::CreateBubble(
+ bubble_delegate->SetAnchorView(bubble_delegate->GetAnchorView());
+ Widget* bubble_widget = CreateBubbleWidget(bubble_delegate);
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Linux clips bubble windows that extend outside their parent window bounds.
+ // Mac never adjusts.
+ bubble_delegate->set_adjust_if_offscreen(false);
diff --git a/devel/electron6/files/patch-ui_views_controls_label.cc b/devel/electron6/files/patch-ui_views_controls_label.cc
new file mode 100644
index 000000000000..62fb063f7e96
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_controls_label.cc
@@ -0,0 +1,20 @@
+--- ui/views/controls/label.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/controls/label.cc
+@@ -548,7 +548,7 @@ bool Label::OnMousePressed(const ui::MouseEvent& event
+ GetFocusManager()->SetFocusedView(this);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (event.IsOnlyMiddleMouseButton() && GetFocusManager() && !had_focus)
+ GetFocusManager()->SetFocusedView(this);
+ #endif
+@@ -733,7 +733,7 @@ bool Label::PasteSelectionClipboard() {
+ }
+
+ void Label::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!obscured()) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron6/files/patch-ui_views_controls_textfield_textfield.cc b/devel/electron6/files/patch-ui_views_controls_textfield_textfield.cc
new file mode 100644
index 000000000000..65eb1c0d1fad
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_controls_textfield_textfield.cc
@@ -0,0 +1,73 @@
+--- ui/views/controls/textfield/textfield.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/controls/textfield/textfield.cc
+@@ -62,7 +62,7 @@
+ #include "base/win/win_util.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "base/strings/utf_string_conversions.h"
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+@@ -165,14 +165,14 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::Ke
+ case ui::VKEY_BACK:
+ if (!control)
+ return ui::TextEditCommand::DELETE_BACKWARD;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift)
+ return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
+ #endif
+ return ui::TextEditCommand::DELETE_WORD_BACKWARD;
+ case ui::VKEY_DELETE:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift && control)
+ return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
+@@ -240,7 +240,7 @@ bool IsControlKeyModifier(int flags) {
+ // Control-modified key combination, but we cannot extend it to other platforms
+ // as Control has different meanings and behaviors.
+ // https://crrev.com/2580483002/#msg46
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return flags & ui::EF_CONTROL_DOWN;
+ #else
+ return false;
+@@ -675,7 +675,7 @@ bool Textfield::OnMousePressed(const ui::MouseEvent& e
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!handled && !had_focus && event.IsOnlyMiddleMouseButton())
+ RequestFocusWithPointer(ui::EventPointerType::POINTER_TYPE_MOUSE);
+ #endif
+@@ -721,7 +721,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event
+ if (!textfield)
+ return handled;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
+@@ -890,7 +890,7 @@ void Textfield::AboutToRequestFocusFromTabTraversal(bo
+ }
+
+ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Skip any accelerator handling that conflicts with custom keybindings.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+@@ -2109,7 +2109,7 @@ bool Textfield::PasteSelectionClipboard() {
+ }
+
+ void Textfield::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) {
+ ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_SELECTION)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron6/files/patch-ui_views_corewm_tooltip__aura.cc b/devel/electron6/files/patch-ui_views_corewm_tooltip__aura.cc
new file mode 100644
index 000000000000..63a1b2a4defd
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_corewm_tooltip__aura.cc
@@ -0,0 +1,11 @@
+--- ui/views/corewm/tooltip_aura.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/corewm/tooltip_aura.cc
+@@ -35,7 +35,7 @@ constexpr int kCursorOffsetY = 15;
+
+ // TODO(varkha): Update if native widget can be transparent on Linux.
+ bool CanUseTranslucentTooltipWidget() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ return false;
+ #else
+ return true;
diff --git a/devel/electron6/files/patch-ui_views_examples_widget__example.cc b/devel/electron6/files/patch-ui_views_examples_widget__example.cc
new file mode 100644
index 000000000000..26ab8af44e5b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_examples_widget__example.cc
@@ -0,0 +1,11 @@
+--- ui/views/examples/widget_example.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/examples/widget_example.cc
+@@ -80,7 +80,7 @@ void WidgetExample::CreateExampleView(View* container)
+ BuildButton(container, "Popup widget", POPUP);
+ BuildButton(container, "Dialog widget", DIALOG);
+ BuildButton(container, "Modal Dialog", MODAL_DIALOG);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Windows does not support TYPE_CONTROL top-level widgets.
+ BuildButton(container, "Child widget", CHILD);
+ #endif
diff --git a/devel/electron6/files/patch-ui_views_selection__controller.cc b/devel/electron6/files/patch-ui_views_selection__controller.cc
new file mode 100644
index 000000000000..7924962bedf8
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_selection__controller.cc
@@ -0,0 +1,11 @@
+--- ui/views/selection_controller.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/views/selection_controller.cc
+@@ -21,7 +21,7 @@ SelectionController::SelectionController(SelectionCont
+ delegate_(delegate),
+ handles_selection_clipboard_(false) {
+ // On Linux, update the selection clipboard on a text selection.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_handles_selection_clipboard(true);
+ #endif
+
diff --git a/devel/electron6/files/patch-ui_views_style_platform__style.cc b/devel/electron6/files/patch-ui_views_style_platform__style.cc
new file mode 100644
index 000000000000..b0ef3640e7b9
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_style_platform__style.cc
@@ -0,0 +1,11 @@
+--- ui/views/style/platform_style.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/style/platform_style.cc
+@@ -17,7 +17,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define DESKTOP_LINUX
+ #endif
+
diff --git a/devel/electron6/files/patch-ui_views_views__delegate.cc b/devel/electron6/files/patch-ui_views_views__delegate.cc
new file mode 100644
index 000000000000..6b8ccfa91db4
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_views__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/views/views_delegate.cc
+@@ -85,7 +85,7 @@ HICON ViewsDelegate::GetSmallWindowIcon() const {
+ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return nullptr;
+ }
diff --git a/devel/electron6/files/patch-ui_views_views__delegate.h b/devel/electron6/files/patch-ui_views_views__delegate.h
new file mode 100644
index 000000000000..afd71b19812c
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.h.orig 2019-09-10 11:14:40 UTC
++++ ui/views/views_delegate.h
+@@ -130,7 +130,7 @@ class VIEWS_EXPORT ViewsDelegate {
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_FREEBSD)
+ virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
+ #endif
+
diff --git a/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
new file mode 100644
index 000000000000..1a1a3b83ef48
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
@@ -0,0 +1,20 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+@@ -102,7 +102,7 @@ void DesktopWindowTreeHostPlatform::OnNativeWidgetCrea
+ const Widget::InitParams& params) {
+ native_widget_delegate_->OnNativeWidgetCreated();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Setup a non_client_window_event_filter, which handles resize/move, double
+ // click and other events.
+ DCHECK(!non_client_window_event_filter_);
+@@ -552,7 +552,7 @@ void DesktopWindowTreeHostPlatform::Relayout() {
+ }
+
+ void DesktopWindowTreeHostPlatform::RemoveNonClientEventFilter() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!non_client_window_event_filter_)
+ return;
+
diff --git a/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
new file mode 100644
index 000000000000..66cc17c1800a
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
@@ -0,0 +1,11 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h.orig 2019-09-10 11:14:40 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
+@@ -119,7 +119,7 @@ class VIEWS_EXPORT DesktopWindowTreeHostPlatform
+
+ bool is_active_ = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A handler for events intended for non client area.
+ std::unique_ptr<WindowEventFilter> non_client_window_event_filter_;
+ #endif
diff --git a/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__x11.cc b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__x11.cc
new file mode 100644
index 000000000000..69b064ab141b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__x11.cc
@@ -0,0 +1,32 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc
+@@ -1463,24 +1463,15 @@ void DesktopWindowTreeHostX11::InitX11Window(
+ if (override_redirect_)
+ attribute_mask |= CWOverrideRedirect;
+
+- bool enable_transparent_visuals;
+- switch (params.opacity) {
+- case Widget::InitParams::OPAQUE_WINDOW:
+- enable_transparent_visuals = false;
+- break;
+- case Widget::InitParams::TRANSLUCENT_WINDOW:
+- enable_transparent_visuals = true;
+- break;
+- case Widget::InitParams::INFER_OPACITY:
+- default:
+- enable_transparent_visuals = params.type == Widget::InitParams::TYPE_DRAG;
+- }
+-
+ Visual* visual = CopyFromParent;
+ int depth = CopyFromParent;
+ Colormap colormap = CopyFromParent;
++
++ // GLSurfaceGLX always create child window with alpha channel. If the parent
++ // window doesn't have alpha channel, it causes flash, so always request argb
++ // visual.
+ ui::XVisualManager::GetInstance()->ChooseVisualForWindow(
+- enable_transparent_visuals, &visual, &depth, &colormap,
++ true /* want_argb_visual */, &visual, &depth, &colormap,
+ &use_argb_visual_);
+
+ if (colormap != CopyFromParent) {
diff --git a/devel/electron6/files/patch-ui_views_window_custom__frame__view.cc b/devel/electron6/files/patch-ui_views_window_custom__frame__view.cc
new file mode 100644
index 000000000000..8b8dd6c5ca7a
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_window_custom__frame__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/custom_frame_view.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/window/custom_frame_view.cc
+@@ -291,7 +291,7 @@ int CustomFrameView::NonClientTopBorderHeight() const
+ int CustomFrameView::CaptionButtonY() const {
+ // Maximized buttons start at window top so that even if their images aren't
+ // drawn flush with the screen edge, they still obey Fitts' Law.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD)
+ return FrameBorderThickness();
+ #else
+ return frame_->IsMaximized() ? FrameBorderThickness() : kFrameShadowThickness;
diff --git a/devel/electron6/files/patch-ui_views_window_dialog__delegate.cc b/devel/electron6/files/patch-ui_views_window_dialog__delegate.cc
new file mode 100644
index 000000000000..b7da6f031a24
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_window_dialog__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/dialog_delegate.cc.orig 2019-09-10 11:14:40 UTC
++++ ui/views/window/dialog_delegate.cc
+@@ -61,7 +61,7 @@ Widget::InitParams DialogDelegate::GetDialogWidgetInit
+ params.bounds = bounds;
+ DialogDelegate* dialog = delegate->AsDialogDelegate();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // The new style doesn't support unparented dialogs on Linux desktop.
+ if (dialog)
+ dialog->supports_custom_frame_ &= parent != nullptr;
diff --git a/devel/electron6/files/patch-ui_views_window_frame__background.cc b/devel/electron6/files/patch-ui_views_window_frame__background.cc
new file mode 100644
index 000000000000..0772e18b200a
--- /dev/null
+++ b/devel/electron6/files/patch-ui_views_window_frame__background.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/frame_background.cc.orig 2019-09-10 10:43:23 UTC
++++ ui/views/window/frame_background.cc
+@@ -106,7 +106,7 @@ void FrameBackground::PaintMaximized(gfx::Canvas* canv
+ const View* view) const {
+ // Fill the top with the frame color first so we have a constant background
+ // for areas not covered by the theme image.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ auto* native_theme = view->GetNativeTheme();
+ ui::NativeTheme::ExtraParams params;
+ params.frame_top_area.use_custom_frame = use_custom_frame_;
diff --git a/devel/electron6/files/patch-ui_webui_resources_js_cr.js b/devel/electron6/files/patch-ui_webui_resources_js_cr.js
new file mode 100644
index 000000000000..bdf12fb5c43b
--- /dev/null
+++ b/devel/electron6/files/patch-ui_webui_resources_js_cr.js
@@ -0,0 +1,14 @@
+--- ui/webui/resources/js/cr.js.orig 2019-09-10 11:14:40 UTC
++++ ui/webui/resources/js/cr.js
+@@ -425,6 +425,11 @@ var cr = cr || function(global) {
+ get doc() {
+ return document;
+ },
++
++ /** Whether this is on *BSD. */
++ get isBSD() {
++ return /BSD/.test(navigator.userAgent);
++ },
+
+ /** Whether we are using a Mac or not. */
+ get isMac() {
diff --git a/devel/electron6/files/patch-ui_webui_resources_js_icon.js b/devel/electron6/files/patch-ui_webui_resources_js_icon.js
new file mode 100644
index 000000000000..67a7df90fb63
--- /dev/null
+++ b/devel/electron6/files/patch-ui_webui_resources_js_icon.js
@@ -0,0 +1,11 @@
+--- ui/webui/resources/js/icon.js.orig 2019-09-10 11:14:40 UTC
++++ ui/webui/resources/js/icon.js
+@@ -14,7 +14,7 @@ cr.define('cr.icon', function() {
+ // supports SCALE_FACTOR_100P on all non-iOS platforms.
+ supportedScaleFactors.push(1);
+ }
+- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
++ if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux || cr.isBSD) {
+ // All desktop platforms support zooming which also updates the renderer's
+ // device scale factors (a.k.a devicePixelRatio), and these platforms have
+ // high DPI assets for 2x. Let the renderer pick the closest image for
diff --git a/devel/electron6/files/patch-v8_BUILD.gn b/devel/electron6/files/patch-v8_BUILD.gn
new file mode 100644
index 000000000000..3174c396bf0a
--- /dev/null
+++ b/devel/electron6/files/patch-v8_BUILD.gn
@@ -0,0 +1,32 @@
+--- v8/BUILD.gn.orig 2019-09-16 09:24:25 UTC
++++ v8/BUILD.gn
+@@ -3545,7 +3545,7 @@ v8_component("v8_libbase") {
+ }
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/base/debug/stack_trace_posix.cc",
+ "src/base/platform/platform-linux.cc",
+@@ -3565,6 +3565,12 @@ v8_component("v8_libbase") {
+ "dl",
+ "rt",
+ ]
++ } else if (is_bsd) {
++ sources += [
++ "src/base/debug/stack_trace_posix.cc",
++ "src/base/platform/platform-freebsd.cc",
++ ]
++ libs = [ "rt", "execinfo" ]
+ } else if (is_android) {
+ if (current_toolchain == host_toolchain) {
+ libs = [
+@@ -3820,6 +3826,7 @@ if (v8_use_snapshot && current_toolchain == v8_snapsho
+ "src/snapshot/embedded/platform-embedded-file-writer-win.h",
+ "src/snapshot/mksnapshot.cc",
+ ]
++ libs = ["execinfo"]
+
+ configs = [ ":internal_config" ]
+
diff --git a/devel/electron6/files/patch-v8_src_api_api.cc b/devel/electron6/files/patch-v8_src_api_api.cc
new file mode 100644
index 000000000000..19569e953796
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_api_api.cc
@@ -0,0 +1,20 @@
+--- v8/src/api/api.cc.orig 2019-09-16 09:24:25 UTC
++++ v8/src/api/api.cc
+@@ -110,7 +110,7 @@
+ #include "src/wasm/wasm-result.h"
+ #include "src/wasm/wasm-serialization.h"
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ #include <signal.h>
+ #include "include/v8-wasm-trap-handler-posix.h"
+ #include "src/trap-handler/handler-inside-posix.h"
+@@ -5577,7 +5577,7 @@ bool v8::V8::Initialize() {
+ return true;
+ }
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
+ void* context) {
+ #if V8_TARGET_ARCH_X64 && !V8_OS_ANDROID
diff --git a/devel/electron6/files/patch-v8_src_base_cpu.cc b/devel/electron6/files/patch-v8_src_base_cpu.cc
new file mode 100644
index 000000000000..3b1bef3c222d
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- v8/src/base/cpu.cc.orig 2019-09-10 10:51:03 UTC
++++ v8/src/base/cpu.cc
+@@ -424,6 +424,7 @@ CPU::CPU()
+
+ #if V8_OS_LINUX
+
++#if V8_OS_LINUX
+ CPUInfo cpu_info;
+
+ // Extract implementor from the "CPU implementer" field.
+@@ -457,6 +458,7 @@ CPU::CPU()
+ }
+ delete[] part;
+ }
++#endif
+
+ // Extract architecture from the "CPU Architecture" field.
+ // The list is well-known, unlike the the output of
diff --git a/devel/electron6/files/patch-v8_src_base_platform_platform-posix.cc b/devel/electron6/files/patch-v8_src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..e8a22626aa12
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_base_platform_platform-posix.cc
@@ -0,0 +1,24 @@
+--- v8/src/base/platform/platform-posix.cc.orig 2019-09-10 11:17:48 UTC
++++ v8/src/base/platform/platform-posix.cc
+@@ -376,7 +376,7 @@ bool OS::DiscardSystemPages(void* address, size_t size
+
+ // static
+ bool OS::HasLazyCommits() {
+-#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX || V8_OS_FREEBSD
+ return true;
+ #else
+ // TODO(bbudge) Return true for all POSIX platforms.
+@@ -507,6 +507,12 @@ int OS::GetCurrentThreadId() {
+ return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+ return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++ return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++ return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++ return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+ return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.cc b/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.cc
new file mode 100644
index 000000000000..b0402acc8511
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.cc
@@ -0,0 +1,20 @@
+--- v8/src/trap-handler/handler-inside-posix.cc.orig 2019-09-10 10:51:04 UTC
++++ v8/src/trap-handler/handler-inside-posix.cc
+@@ -27,7 +27,7 @@
+
+ #include <signal.h>
+
+-#ifdef V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ #include <ucontext.h>
+ #elif V8_OS_MACOSX
+ #include <sys/ucontext.h>
+@@ -112,6 +112,8 @@ bool TryHandleSignal(int signum, siginfo_t* info, void
+ auto* context_rip = &uc->uc_mcontext.gregs[REG_RIP];
+ #elif V8_OS_MACOSX
+ auto* context_rip = &uc->uc_mcontext->__ss.__rip;
++#elif V8_OS_FREEBSD
++ auto* context_rip = &uc->uc_mcontext.mc_rip;
+ #else
+ #error Unsupported platform
+ #endif
diff --git a/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.h b/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.h
new file mode 100644
index 000000000000..f6bf9d12fa84
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_trap-handler_handler-inside-posix.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/handler-inside-posix.h.orig 2019-09-10 10:51:04 UTC
++++ v8/src/trap-handler/handler-inside-posix.h
+@@ -12,7 +12,7 @@ namespace v8 {
+ namespace internal {
+ namespace trap_handler {
+
+-#if V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ constexpr int kOobSignal = SIGSEGV;
+ #elif V8_OS_MACOSX
+ constexpr int kOobSignal = SIGBUS;
diff --git a/devel/electron6/files/patch-v8_src_trap-handler_trap-handler.h b/devel/electron6/files/patch-v8_src_trap-handler_trap-handler.h
new file mode 100644
index 000000000000..b545bbb721e8
--- /dev/null
+++ b/devel/electron6/files/patch-v8_src_trap-handler_trap-handler.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/trap-handler.h.orig 2019-09-10 10:51:04 UTC
++++ v8/src/trap-handler/trap-handler.h
+@@ -23,6 +23,8 @@ namespace trap_handler {
+ #define V8_TRAP_HANDLER_SUPPORTED true
+ #elif V8_TARGET_ARCH_X64 && V8_OS_MACOSX
+ #define V8_TRAP_HANDLER_SUPPORTED true
++#elif V8_TARGET_ARCH_X64 && V8_OS_FREEBSD
++#define V8_TRAP_HANDLER_SUPPORTED true
+ #else
+ #define V8_TRAP_HANDLER_SUPPORTED false
+ #endif
diff --git a/devel/electron6/files/yarn.lock b/devel/electron6/files/yarn.lock
new file mode 100644
index 000000000000..b1ec75e3d541
--- /dev/null
+++ b/devel/electron6/files/yarn.lock
@@ -0,0 +1,8581 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/highlight@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
+ integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/runtime@7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0.tgz#adeb78fedfc855aa05bc041640f3f6f98e85424c"
+ integrity sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==
+ dependencies:
+ regenerator-runtime "^0.12.0"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@octokit/endpoint@^4.0.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-4.2.0.tgz#9e36aa6471a7b4a9f2e521549cd2b1d63090187b"
+ integrity sha512-0GUrn0Lr4k8EQpbKLiNzY4gWkx98UuiEFggvk6IqJCHJawUicg2z8XiKvbCZXJbC26T9XJBZ+xURaYhNc5n3dw==
+ dependencies:
+ deepmerge "3.2.0"
+ is-plain-object "^2.0.4"
+ universal-user-agent "^2.0.1"
+ url-template "^2.0.8"
+
+"@octokit/request@3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-3.0.0.tgz#304a279036b2dc89e7fba7cb30c9e6a9b1f4d2df"
+ integrity sha512-DZqmbm66tq+a9FtcKrn0sjrUpi0UaZ9QPUCxxyk/4CJ2rseTMpAWRf6gCwOSUCzZcx/4XVIsDk+kz5BVdaeenA==
+ dependencies:
+ "@octokit/endpoint" "^4.0.0"
+ deprecation "^1.0.1"
+ is-plain-object "^2.0.4"
+ node-fetch "^2.3.0"
+ once "^1.4.0"
+ universal-user-agent "^2.0.1"
+
+"@octokit/rest@^16.3.2":
+ version "16.25.0"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.25.0.tgz#1111dc2b2058bc77442fd7fbd295dab3991b62bf"
+ integrity sha512-QKIzP0gNYjyIGmY3Gpm3beof0WFwxFR+HhRZ+Wi0fYYhkEUvkJiXqKF56Pf5glzzfhEwOrggfluEld5F/ZxsKw==
+ dependencies:
+ "@octokit/request" "3.0.0"
+ atob-lite "^2.0.0"
+ before-after-hook "^1.4.0"
+ btoa-lite "^1.0.0"
+ deprecation "^1.0.1"
+ lodash.get "^4.4.2"
+ lodash.set "^4.3.2"
+ lodash.uniq "^4.5.0"
+ octokit-pagination-methods "^1.1.0"
+ once "^1.4.0"
+ universal-user-agent "^2.0.0"
+ url-template "^2.0.8"
+
+"@samverschueren/stream-to-observable@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+ integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+ dependencies:
+ any-observable "^0.3.0"
+
+"@types/body-parser@*":
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
+ integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/chai-as-promised@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9"
+ integrity sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^4.1.7":
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a"
+ integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==
+
+"@types/connect@*":
+ version "3.4.32"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
+ integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/express-serve-static-core@*":
+ version "4.16.4"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz#56bb8be4559401d68af4a3624ae9dd3166103e60"
+ integrity sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==
+ dependencies:
+ "@types/node" "*"
+ "@types/range-parser" "*"
+
+"@types/express@^4.16.1":
+ version "4.16.1"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0"
+ integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "*"
+ "@types/serve-static" "*"
+
+"@types/fs-extra@^5.0.5":
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b"
+ integrity sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==
+ dependencies:
+ "@types/node" "*"
+
+"@types/mime@*":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
+ integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
+
+"@types/mocha@^5.2.6":
+ version "5.2.6"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.6.tgz#b8622d50557dd155e9f2f634b7d68fd38de5e94b"
+ integrity sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==
+
+"@types/node@*":
+ version "11.13.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.8.tgz#e5d71173c95533be9842b2c798978f095f912aab"
+ integrity sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==
+
+"@types/node@^10.12.21":
+ version "10.14.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9"
+ integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==
+
+"@types/node@^7.0.18":
+ version "7.10.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-7.10.5.tgz#6831006b2c87441d69e79b37ae9bc03246dfb379"
+ integrity sha512-RYkagUUbxQBss46ElbEa+j4q4X3GR12QwB7a/PM5hmVuVkYoW1jENT1+taspKUv8ibwW8cw+kRFbOaTc/Key3w==
+
+"@types/range-parser@*":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
+ integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
+
+"@types/serve-static@*":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
+ integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/mime" "*"
+
+"@types/split@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/split/-/split-1.0.0.tgz#24f7c35707450b002f203383228f5a2bc1e6c228"
+ integrity sha512-pm9S1mkr+av0j7D6pFyqhBxXDbnbO9gqj4nb8DtGtCewvj0XhIv089SSwXrjrIizT1UquO8/h83hCut0pa3u8A==
+ dependencies:
+ "@types/node" "*"
+ "@types/through" "*"
+
+"@types/through@*":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93"
+ integrity sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==
+ dependencies:
+ "@types/node" "*"
+
+"@typescript-eslint/eslint-plugin@^1.4.2":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.7.0.tgz#570e45dc84fb97852e363f1e00f47e604a0b8bcc"
+ integrity sha512-NUSz1aTlIzzTjFFVFyzrbo8oFjHg3K/M9MzYByqbMCxeFdErhLAcGITVfXzSz+Yvp5OOpMu3HkIttB0NyKl54Q==
+ dependencies:
+ "@typescript-eslint/parser" "1.7.0"
+ "@typescript-eslint/typescript-estree" "1.7.0"
+ eslint-utils "^1.3.1"
+ regexpp "^2.0.1"
+ requireindex "^1.2.0"
+ tsutils "^3.7.0"
+
+"@typescript-eslint/parser@1.7.0", "@typescript-eslint/parser@^1.4.2":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.7.0.tgz#c3ea0d158349ceefbb6da95b5b09924b75357851"
+ integrity sha512-1QFKxs2V940372srm12ovSE683afqc1jB6zF/f8iKhgLz1yoSjYeGHipasao33VXKI+0a/ob9okeogGdKGvvlg==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "1.7.0"
+ eslint-scope "^4.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+"@typescript-eslint/typescript-estree@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.7.0.tgz#59ec02f5371964da1cc679dba7b878a417bc8c60"
+ integrity sha512-K5uedUxVmlYrVkFbyV3htDipvLqTE3QMOUQEHYJaKtgzxj6r7c5Ca/DG1tGgFxX+fsbi9nDIrf4arq7Ib7H/Yw==
+ dependencies:
+ lodash.unescape "4.0.1"
+ semver "5.5.0"
+
+JSONStream@^1.0.3, JSONStream@^1.0.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
+ integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
+ dependencies:
+ jsonparse "^1.2.0"
+ through ">=2.2.7 <3"
+
+abab@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+ integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@~1.3.5:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.6.tgz#27de8682f0833e966dde5c5d7a63ec8523106e4b"
+ integrity sha512-QsaoUD2dpVpjENy8JFpQnXP9vyzoZPmAoKrE3S6HtSB7qzSebkJNnmdY4p004FQUSSiHXPueENpoeuUW/7a8Ig==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.1"
+
+acorn-dynamic-import@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948"
+ integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==
+
+acorn-globals@^1.0.4:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
+ integrity sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=
+ dependencies:
+ acorn "^2.1.0"
+
+acorn-jsx@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
+ integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+
+acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.6.2.tgz#b7d7ceca6f22e6417af933a62cad4de01048d5d2"
+ integrity sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==
+ dependencies:
+ acorn "^6.0.2"
+ acorn-dynamic-import "^4.0.0"
+ acorn-walk "^6.1.0"
+ xtend "^4.0.1"
+
+acorn-walk@^6.1.0:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
+ integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
+
+acorn@^2.1.0, acorn@^2.4.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
+ integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=
+
+acorn@^5.0.0:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
+
+acorn@^6.0.2, acorn@^6.0.7:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f"
+ integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==
+
+add-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
+ integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=
+
+address@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709"
+ integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ==
+
+ajv-keywords@^3.0.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d"
+ integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==
+
+ajv@^6.0.1, ajv@^6.5.0, ajv@^6.5.5, ajv@^6.9.1:
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1"
+ integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+aliasify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/aliasify/-/aliasify-2.1.0.tgz#7c30825b9450b9e6185ba27533eaf6e2067d4b42"
+ integrity sha1-fDCCW5RQueYYW6J1M+r24gZ9S0I=
+ dependencies:
+ browserify-transform-tools "~1.7.0"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
+
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
+ dependencies:
+ string-width "^2.0.0"
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+any-observable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+ integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
+any-promise@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
+anymatch@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+ integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
+ dependencies:
+ micromatch "^2.1.5"
+ normalize-path "^2.0.0"
+
+aproba@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+arch@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e"
+ integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+arg@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545"
+ integrity sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+args@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/args/-/args-4.0.0.tgz#5ca24cdba43d4b17111c56616f5f2e9d91933954"
+ integrity sha512-4b7lVF58nlo7sNtq8s2OueroOY/UHn0Nt/NVjsx9zn28u6yDVb9bQ/uy/5jKtHCbUDil4MlMyDLF5+OHEgnTug==
+ dependencies:
+ camelcase "5.0.0"
+ chalk "2.3.2"
+ leven "2.1.0"
+ mri "1.1.0"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-filter@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-ify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
+ integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=
+
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+array-map@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
+
+array-reduce@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.0, arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asar@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/asar/-/asar-1.0.0.tgz#5624ffa1369aa929871dfc036de02c20871bdc2e"
+ integrity sha512-MBiDU5cDr9UWuY2F0zq2fZlnyRq1aOPmJGMas22Qa14K1odpRXL3xkMHPN3uw2hAK5mD89Q+/KidOUtpi4V0Cg==
+ dependencies:
+ chromium-pickle-js "^0.2.0"
+ commander "^2.19.0"
+ cuint "^0.2.2"
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+ tmp-promise "^1.0.5"
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
+ dependencies:
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async@^1.4.0, async@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob-lite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+babel-code-frame@^6.20.0, babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+bail@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
+ integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2, base64-js@^1.2.3:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+ integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+basic-auth@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba"
+ integrity sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=
+ dependencies:
+ safe-buffer "5.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+before-after-hook@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d"
+ integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bl@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+bluebird@3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+ integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
+
+bluebird@^3.5.0:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714"
+ integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.18.3:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
+ integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
+ dependencies:
+ bytes "3.0.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "~1.6.3"
+ iconv-lite "0.4.23"
+ on-finished "~2.3.0"
+ qs "6.5.2"
+ raw-body "2.3.3"
+ type-is "~1.6.16"
+
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
+boxen@1.3.0, boxen@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
+ integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
+ dependencies:
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^2.0.1"
+ cli-boxes "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^1.2.0"
+ widest-line "^2.0.0"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browser-pack@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774"
+ integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==
+ dependencies:
+ JSONStream "^1.0.3"
+ combine-source-map "~0.8.0"
+ defined "^1.0.0"
+ safe-buffer "^5.1.1"
+ through2 "^2.0.0"
+ umd "^3.0.0"
+
+browser-resolve@^1.11.0, browser-resolve@^1.7.0:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-transform-tools@~1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz#83e277221f63259bed2e7eb2a283a970a501f4c4"
+ integrity sha1-g+J3Ih9jJZvtLn6yooOpcKUB9MQ=
+ dependencies:
+ falafel "^2.0.0"
+ through "^2.3.7"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+browserify-zlib@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserify@^16.2.3:
+ version "16.2.3"
+ resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.3.tgz#7ee6e654ba4f92bce6ab3599c3485b1cc7a0ad0b"
+ integrity sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==
+ dependencies:
+ JSONStream "^1.0.3"
+ assert "^1.4.0"
+ browser-pack "^6.0.1"
+ browser-resolve "^1.11.0"
+ browserify-zlib "~0.2.0"
+ buffer "^5.0.2"
+ cached-path-relative "^1.0.0"
+ concat-stream "^1.6.0"
+ console-browserify "^1.1.0"
+ constants-browserify "~1.0.0"
+ crypto-browserify "^3.0.0"
+ defined "^1.0.0"
+ deps-sort "^2.0.0"
+ domain-browser "^1.2.0"
+ duplexer2 "~0.1.2"
+ events "^2.0.0"
+ glob "^7.1.0"
+ has "^1.0.0"
+ htmlescape "^1.1.0"
+ https-browserify "^1.0.0"
+ inherits "~2.0.1"
+ insert-module-globals "^7.0.0"
+ labeled-stream-splicer "^2.0.0"
+ mkdirp "^0.5.0"
+ module-deps "^6.0.0"
+ os-browserify "~0.3.0"
+ parents "^1.0.1"
+ path-browserify "~0.0.0"
+ process "~0.11.0"
+ punycode "^1.3.2"
+ querystring-es3 "~0.2.0"
+ read-only-stream "^2.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.1.4"
+ shasum "^1.0.0"
+ shell-quote "^1.6.1"
+ stream-browserify "^2.0.0"
+ stream-http "^2.0.0"
+ string_decoder "^1.1.1"
+ subarg "^1.0.0"
+ syntax-error "^1.1.1"
+ through2 "^2.0.0"
+ timers-browserify "^1.0.1"
+ tty-browserify "0.0.1"
+ url "~0.11.0"
+ util "~0.10.1"
+ vm-browserify "^1.0.0"
+ xtend "^4.0.0"
+
+btoa-lite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
+ integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0, buffer-from@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^5.0.2:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
+ integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+cached-path-relative@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db"
+ integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+ dependencies:
+ callsites "^0.2.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase-keys@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77"
+ integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=
+ dependencies:
+ camelcase "^4.1.0"
+ map-obj "^2.0.0"
+ quick-lru "^1.0.0"
+
+camelcase@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
+ integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^4.0.0, camelcase@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+capture-stack-trace@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+ccount@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff"
+ integrity sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
+ integrity sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.0.tgz#a060a297a6b57e15b61ca63ce84995daa0fe6e52"
+ integrity sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+character-entities-html4@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.2.tgz#c44fdde3ce66b52e8d321d6c1bf46101f0150610"
+ integrity sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c"
+ integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==
+
+character-entities@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363"
+ integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed"
+ integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+check-for-leaks@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/check-for-leaks/-/check-for-leaks-1.2.0.tgz#ea3b50164e975779332c62813195ff8c6af826cc"
+ integrity sha512-bJ2Bzo6RtsYqamMnsjtVzowGvBNVrR5IPK8Bd+lx5W1TNgOKMsF+AyNHVkqFqO7cpDZNfny5SaqH6gEovpV5Gw==
+ dependencies:
+ anymatch "^1.3.0"
+ minimist "^1.2.0"
+ parse-gitignore "^0.4.0"
+ walk-sync "^0.3.2"
+
+checksum@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/checksum/-/checksum-0.1.1.tgz#dc6527d4c90be8560dbd1ed4cecf3297d528e9e9"
+ integrity sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=
+ dependencies:
+ optimist "~0.3.5"
+
+cheerio@^0.20.0:
+ version "0.20.0"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35"
+ integrity sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.0"
+ entities "~1.1.1"
+ htmlparser2 "~3.8.1"
+ lodash "^4.1.0"
+ optionalDependencies:
+ jsdom "^7.0.2"
+
+cheerio@^1.0.0-rc.2:
+ version "1.0.0-rc.3"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
+ integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.1"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash "^4.15.0"
+ parse5 "^3.0.1"
+
+chokidar@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+chownr@^1.0.1, chownr@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+ integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+
+chromium-pickle-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+ integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+ integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+clang-format@^1.2.3:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.2.4.tgz#4bb4b0a98180428deb093cf20982e9fc1af20b6c"
+ integrity sha512-sw+nrGUp3hvmANd1qF8vZPuezSYQAiXgGBiEtkXTtJnnu6b00fCqkkDIsnRKrNgg4nv6NYZE92ejvOMIXZoejw==
+ dependencies:
+ async "^1.5.2"
+ glob "^7.0.0"
+ resolve "^1.1.6"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+clean-deep@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/clean-deep/-/clean-deep-2.0.2.tgz#77cdd94e6b266644f0f790b2f576cbef038e27c1"
+ integrity sha1-d83ZTmsmZkTw95Cy9XbL7wOOJ8E=
+ dependencies:
+ lodash.isempty "^4.4.0"
+ lodash.isplainobject "^4.0.6"
+ lodash.transform "^4.6.0"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+ integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
+
+cli-cursor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-spinners@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
+ integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=
+
+cli-spinners@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7"
+ integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==
+
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+clipboardy@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef"
+ integrity sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==
+ dependencies:
+ arch "^2.1.0"
+ execa "^0.8.0"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+co@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
+ integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collapse-white-space@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091"
+ integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+colors@^1.1.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
+ integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
+
+combine-source-map@^0.8.0, combine-source-map@~0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
+ integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=
+ dependencies:
+ convert-source-map "~1.1.0"
+ inline-source-map "~0.6.0"
+ lodash.memoize "~3.0.3"
+ source-map "~0.5.3"
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.9.0, commander@~2.20.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
+compare-func@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
+ integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
+ dependencies:
+ array-ify "^1.0.0"
+ dot-prop "^3.0.0"
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compressible@~2.0.16:
+ version "2.0.17"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
+ integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
+ dependencies:
+ mime-db ">= 1.40.0 < 2"
+
+compression@^1.6.2:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
+ integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ dependencies:
+ accepts "~1.3.5"
+ bytes "3.0.0"
+ compressible "~2.0.16"
+ debug "2.6.9"
+ on-headers "~1.0.2"
+ safe-buffer "5.1.2"
+ vary "~1.1.2"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
+ integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+ integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
+
+content-type@1.0.4, content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+conventional-changelog-angular@^1.6.6:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f"
+ integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==
+ dependencies:
+ compare-func "^1.3.1"
+ q "^1.5.1"
+
+conventional-changelog-atom@^0.2.8:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz#8037693455990e3256f297320a45fa47ee553a14"
+ integrity sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-cli@^1.2.0:
+ version "1.3.22"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz#13570fe1728f56f013ff7a88878ff49d5162a405"
+ integrity sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==
+ dependencies:
+ add-stream "^1.0.0"
+ conventional-changelog "^1.1.24"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ tempfile "^1.1.1"
+
+conventional-changelog-codemirror@^0.3.8:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz#a1982c8291f4ee4d6f2f62817c6b2ecd2c4b7b47"
+ integrity sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-core@^2.0.11:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287"
+ integrity sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==
+ dependencies:
+ conventional-changelog-writer "^3.0.9"
+ conventional-commits-parser "^2.1.7"
+ dateformat "^3.0.0"
+ get-pkg-repo "^1.0.0"
+ git-raw-commits "^1.3.6"
+ git-remote-origin-url "^2.0.0"
+ git-semver-tags "^1.3.6"
+ lodash "^4.2.1"
+ normalize-package-data "^2.3.5"
+ q "^1.5.1"
+ read-pkg "^1.1.0"
+ read-pkg-up "^1.0.1"
+ through2 "^2.0.0"
+
+conventional-changelog-ember@^0.3.12:
+ version "0.3.12"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz#b7d31851756d0fcb49b031dffeb6afa93b202400"
+ integrity sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-eslint@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz#b13cc7e4b472c819450ede031ff1a75c0e3d07d3"
+ integrity sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-express@^0.3.6:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz#4a6295cb11785059fb09202180d0e59c358b9c2c"
+ integrity sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==
+ dependencies:
+ q "^1.5.1"
+
+conventional-changelog-jquery@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510"
+ integrity sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=
+ dependencies:
+ q "^1.4.1"
+
+conventional-changelog-jscs@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c"
+ integrity sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=
+ dependencies:
+ q "^1.4.1"
+
+conventional-changelog-jshint@^0.3.8:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz#9051c1ac0767abaf62a31f74d2fe8790e8acc6c8"
+ integrity sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==
+ dependencies:
+ compare-func "^1.3.1"
+ q "^1.5.1"
+
+conventional-changelog-preset-loader@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373"
+ integrity sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==
+
+conventional-changelog-writer@^3.0.9:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634"
+ integrity sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==
+ dependencies:
+ compare-func "^1.3.1"
+ conventional-commits-filter "^1.1.6"
+ dateformat "^3.0.0"
+ handlebars "^4.0.2"
+ json-stringify-safe "^5.0.1"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ semver "^5.5.0"
+ split "^1.0.0"
+ through2 "^2.0.0"
+
+conventional-changelog@^1.1.24:
+ version "1.1.24"
+ resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.24.tgz#3d94c29c960f5261c002678315b756cdd3d7d1f0"
+ integrity sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==
+ dependencies:
+ conventional-changelog-angular "^1.6.6"
+ conventional-changelog-atom "^0.2.8"
+ conventional-changelog-codemirror "^0.3.8"
+ conventional-changelog-core "^2.0.11"
+ conventional-changelog-ember "^0.3.12"
+ conventional-changelog-eslint "^1.0.9"
+ conventional-changelog-express "^0.3.6"
+ conventional-changelog-jquery "^0.1.0"
+ conventional-changelog-jscs "^0.1.0"
+ conventional-changelog-jshint "^0.3.8"
+ conventional-changelog-preset-loader "^1.1.8"
+
+conventional-commits-filter@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831"
+ integrity sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==
+ dependencies:
+ is-subset "^0.1.1"
+ modify-values "^1.0.0"
+
+conventional-commits-parser@^2.1.7:
+ version "2.1.7"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e"
+ integrity sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==
+ dependencies:
+ JSONStream "^1.0.4"
+ is-text-path "^1.0.0"
+ lodash "^4.2.1"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+ trim-off-newlines "^1.0.0"
+
+convert-source-map@^1.1.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convert-source-map@~1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
+ integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.0.2:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8"
+ integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.0"
+ parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-error-class@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.0.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
+css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-what@2.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
+ integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==
+
+cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad"
+ integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==
+
+"cssstyle@>= 0.2.29 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
+ dependencies:
+ cssom "0.3.x"
+
+cuint@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
+ integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+dargs@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
+ integrity sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=
+
+dargs@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17"
+ integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+dash-ast@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37"
+ integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-fns@^1.27.2:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+ integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+dateformat@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
+ integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
+
+debug-log@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+ integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=
+
+debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize-keys@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
+ integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
+ dependencies:
+ decamelize "^1.1.0"
+ map-obj "^1.0.0"
+
+decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decamelize@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7"
+ integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==
+ dependencies:
+ xregexp "4.0.0"
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e"
+ integrity sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+ dependencies:
+ clone "^1.0.2"
+
+define-properties@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+defined@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
+
+deglob@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.1.tgz#d268e168727799862e8eac07042e165957c1f3be"
+ integrity sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==
+ dependencies:
+ find-root "^1.0.0"
+ glob "^7.0.5"
+ ignore "^3.0.9"
+ pkg-config "^1.1.0"
+ run-parallel "^1.1.2"
+ uniq "^1.0.1"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
+ integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deprecation@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-1.0.1.tgz#2df79b79005752180816b7b6e079cbd80490d711"
+ integrity sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==
+
+deps-sort@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
+ integrity sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=
+ dependencies:
+ JSONStream "^1.0.3"
+ shasum "^1.0.0"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+detect-port@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.2.3.tgz#15bf49820d02deb84bfee0a74876b32d791bf610"
+ integrity sha512-IDbrX6PxqnYy8jV4wSHBaJlErYKTJvW8OQb9F7xivl1iQLqiUYHGa+nZ61Do6+N5uuOn/pReXKNqI9rUn04vug==
+ dependencies:
+ address "^1.0.1"
+ debug "^2.6.0"
+
+detective@^5.0.2:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b"
+ integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==
+ dependencies:
+ acorn-node "^1.6.1"
+ defined "^1.0.0"
+ minimist "^1.1.1"
+
+diff@^3.0.1, diff@^3.1.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-serializer@0, dom-serializer@~0.1.0, dom-serializer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
+ integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
+ dependencies:
+ domelementtype "^1.3.0"
+ entities "^1.1.1"
+
+domain-browser@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
+ integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
+
+domhandler@2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
+ integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg=
+ dependencies:
+ domelementtype "1"
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5, domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc=
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
+ dependencies:
+ is-obj "^1.0.0"
+
+dotenv-safe@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/dotenv-safe/-/dotenv-safe-4.0.4.tgz#8b0e7ced8e70b1d3c5d874ef9420e406f39425b3"
+ integrity sha1-iw587Y5wsdPF2HTvlCDkBvOUJbM=
+ dependencies:
+ dotenv "^4.0.0"
+
+dotenv@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
+ integrity sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=
+
+dugite@^1.45.0:
+ version "1.87.0"
+ resolved "https://registry.yarnpkg.com/dugite/-/dugite-1.87.0.tgz#ba42c25401420a92c6c8f0c71823ac54124b4b65"
+ integrity sha512-+aW2Ql3yw1AEO8Z8nVbjOAEzsinMJMmAg4uf5lzTewFUAHd0danuMPXMP9uMuGuUYN/LQtt4kR2XLuWoD8wRSQ==
+ dependencies:
+ checksum "^0.1.1"
+ mkdirp "^0.5.1"
+ progress "^2.0.3"
+ request "^2.88.0"
+ rimraf "^2.5.4"
+ tar "^4.4.7"
+
+duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=
+ dependencies:
+ readable-stream "^2.0.2"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexify@^3.5.0, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-docs-linter@^3.0.0, electron-docs-linter@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/electron-docs-linter/-/electron-docs-linter-3.0.3.tgz#7da49f9b94e113f9ee8321818d9205220bc19975"
+ integrity sha512-65HmaIH/i/jyxK6a+TPz1IBlUunnNtEb2juYNXrnP0bPusQyWvkkiyExwn5D5mukfkbobwqfIzTxu78xEGHSbQ==
+ dependencies:
+ cheerio "^1.0.0-rc.2"
+ clean-deep "^2.0.1"
+ decamelize "^2.0.0"
+ dedent "^0.7.0"
+ electron-docs "^3.0.2"
+ entities "^1.1.2"
+ keyed-array "^2.1.2"
+ lodash.merge "^4.6.0"
+ lodash.pick "^4.2.1"
+ marky-markdown-lite "^1.2.0"
+ minimist "^1.2.0"
+ ora "^3.0.0"
+ path-exists "^3.0.0"
+ pify "^4.0.1"
+ revalidator "^0.3.1"
+ semver "^5.6.0"
+
+electron-docs@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/electron-docs/-/electron-docs-2.0.1.tgz#01123a4fccb6be27acc1280027bfcb240c54b1d2"
+ integrity sha1-ARI6T8y2vieswSgAJ7/LJAxUsdI=
+ dependencies:
+ got "^6.3.0"
+ gunzip-maybe "^1.3.1"
+ node-dir "^0.1.12"
+ ora "^0.2.3"
+ path-exists "^3.0.0"
+ pify "^2.3.0"
+ semver "^5.1.0"
+ tar-fs "^1.13.0"
+
+electron-docs@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/electron-docs/-/electron-docs-3.0.2.tgz#340d57e6c0dbf86a97249fd451dff6221021754a"
+ integrity sha1-NA1X5sDb+GqXJJ/UUd/2IhAhdUo=
+ dependencies:
+ got "^6.3.0"
+ gunzip-maybe "^1.3.1"
+ node-dir "^0.1.12"
+ ora "^0.2.3"
+ path-exists "^3.0.0"
+ pify "^2.3.0"
+ semver "^5.1.0"
+ tar-fs "^1.13.0"
+
+electron-typescript-definitions@^8.2.2:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/electron-typescript-definitions/-/electron-typescript-definitions-8.3.0.tgz#6f429aa7ddaeddfc6ffb1d178220070da4bf609c"
+ integrity sha512-ihLjmUZQZPeYtb9qsiTvCX2oxETxfEorkb6cUlZrOKqxluaYFVDF8DCZiiaF9u44zuuVIj6yX3rgn9mfgjBF9A==
+ dependencies:
+ "@types/node" "^7.0.18"
+ colors "^1.1.2"
+ debug "^2.6.3"
+ electron-docs "^2.0.0"
+ electron-docs-linter "^3.0.0"
+ lodash "^4.17.11"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ tslint "^4.5.1"
+ typescript "^2.2.1"
+
+elegant-spinner@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+ integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
+elliptic@^6.0.0:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
+ integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+ensure-posix-path@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce"
+ integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==
+
+entities@1.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
+ integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=
+
+entities@^1.1.1, entities@^1.1.2, entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.7.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-keys "^1.0.12"
+
+es-to-primitive@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es6-object-assign@^1.0.3:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
+ integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+escodegen@^1.6.1:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510"
+ integrity sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==
+ dependencies:
+ esprima "^3.1.3"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
+eslint-config-standard-jsx@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz#90c9aa16ac2c4f8970c13fc7efc608bacd02da70"
+ integrity sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==
+
+eslint-config-standard@12.0.0, eslint-config-standard@^12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+ integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.1, eslint-import-resolver-node@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.5.0"
+
+eslint-module-utils@^2.2.0, eslint-module-utils@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a"
+ integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-es@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6"
+ integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==
+ dependencies:
+ eslint-utils "^1.3.0"
+ regexpp "^2.0.1"
+
+eslint-plugin-import@^2.17.2:
+ version "2.17.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb"
+ integrity sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==
+ dependencies:
+ array-includes "^3.0.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.2"
+ eslint-module-utils "^2.4.0"
+ has "^1.0.3"
+ lodash "^4.17.11"
+ minimatch "^3.0.4"
+ read-pkg-up "^2.0.0"
+ resolve "^1.10.0"
+
+eslint-plugin-import@~2.14.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8"
+ integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==
+ dependencies:
+ contains-path "^0.1.0"
+ debug "^2.6.8"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.1"
+ eslint-module-utils "^2.2.0"
+ has "^1.0.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+ resolve "^1.6.0"
+
+eslint-plugin-mocha@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz#cf3eb18ae0e44e433aef7159637095a7cb19b15b"
+ integrity sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A==
+ dependencies:
+ ramda "^0.26.1"
+
+eslint-plugin-node@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
+ integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
+ dependencies:
+ eslint-plugin-es "^1.3.1"
+ eslint-utils "^1.3.1"
+ ignore "^5.0.2"
+ minimatch "^3.0.4"
+ resolve "^1.8.1"
+ semver "^5.5.0"
+
+eslint-plugin-node@~7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz#a6e054e50199b2edd85518b89b4e7b323c9f36db"
+ integrity sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==
+ dependencies:
+ eslint-plugin-es "^1.3.1"
+ eslint-utils "^1.3.1"
+ ignore "^4.0.2"
+ minimatch "^3.0.4"
+ resolve "^1.8.1"
+ semver "^5.5.0"
+
+eslint-plugin-promise@~4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2"
+ integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==
+
+eslint-plugin-react@~7.11.1:
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c"
+ integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==
+ dependencies:
+ array-includes "^3.0.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.0.1"
+ prop-types "^15.6.2"
+
+eslint-plugin-standard@^4.0.0, eslint-plugin-standard@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c"
+ integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==
+
+eslint-plugin-typescript@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-typescript/-/eslint-plugin-typescript-0.14.0.tgz#068549c3f4c7f3f85d88d398c29fa96bf500884c"
+ integrity sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==
+ dependencies:
+ requireindex "~1.1.0"
+
+eslint-scope@^4.0.0, eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.3.0, eslint-utils@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
+ integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
+
+eslint-visitor-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
+ integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+
+eslint@^5.13.0:
+ version "5.16.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+ integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.9.1"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^4.0.3"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^5.0.1"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.7.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^6.2.2"
+ js-yaml "^3.13.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.11"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^5.5.1"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+
+eslint@~5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.4.0.tgz#d068ec03006bb9e06b429dc85f7e46c1b69fac62"
+ integrity sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==
+ dependencies:
+ ajv "^6.5.0"
+ babel-code-frame "^6.26.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^3.1.0"
+ doctrine "^2.1.0"
+ eslint-scope "^4.0.0"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^4.0.0"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.7.0"
+ ignore "^4.0.2"
+ imurmurhash "^0.1.4"
+ inquirer "^5.2.0"
+ is-resolvable "^1.1.0"
+ js-yaml "^3.11.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.5"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ pluralize "^7.0.0"
+ progress "^2.0.0"
+ regexpp "^2.0.0"
+ require-uncached "^1.0.3"
+ semver "^5.5.0"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^4.0.3"
+ text-table "^0.2.0"
+
+espree@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
+ integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
+ dependencies:
+ acorn "^6.0.2"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+espree@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+ integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+ dependencies:
+ acorn "^6.0.7"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+esprima@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+events@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5"
+ integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da"
+ integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=
+ dependencies:
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+ integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+express@^4.16.4:
+ version "4.16.4"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
+ integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
+ dependencies:
+ accepts "~1.3.5"
+ array-flatten "1.1.1"
+ body-parser "1.18.3"
+ content-disposition "0.5.2"
+ content-type "~1.0.4"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.1.1"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.4"
+ qs "6.5.2"
+ range-parser "~1.2.0"
+ safe-buffer "5.1.2"
+ send "0.16.2"
+ serve-static "1.13.2"
+ setprototypeof "1.1.0"
+ statuses "~1.4.0"
+ type-is "~1.6.16"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+external-editor@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
+ integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+falafel@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c"
+ integrity sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=
+ dependencies:
+ acorn "^5.0.0"
+ foreach "^2.0.5"
+ isarray "0.0.1"
+ object-keys "^1.0.6"
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-glob@^2.0.2:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295"
+ integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fault@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa"
+ integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==
+ dependencies:
+ format "^0.2.2"
+
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+filesize@3.6.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
+ integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
+
+fill-range@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^3.0.0"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+finalhandler@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
+ integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.2"
+ statuses "~1.4.0"
+ unpipe "~1.0.0"
+
+find-parent-dir@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54"
+ integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=
+
+find-root@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+findup-sync@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
+ integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=
+ dependencies:
+ glob "~5.0.0"
+
+flat-cache@^1.2.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+ dependencies:
+ circular-json "^0.3.1"
+ graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
+ write "^0.2.1"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
+ integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
+
+fn-name@^2.0.1, fn-name@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+ integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
+folder-hash@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/folder-hash/-/folder-hash-2.1.2.tgz#7109f9cd0cbca271936d1b5544b156d6571e6cfd"
+ integrity sha512-PmMwEZyNN96EMshf7sek4OIB7ADNsHOJ7VIw7pO0PBI0BNfEsi7U8U56TBjjqqwQ0WuBv8se0HEfmbw5b/Rk+w==
+ dependencies:
+ debug "^3.1.0"
+ graceful-fs "~4.1.11"
+ minimatch "~3.0.4"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+ integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k=
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+format@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+ integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b"
+ integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+g-status@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+ integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+ dependencies:
+ arrify "^1.0.1"
+ matcher "^1.0.0"
+ simple-git "^1.85.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-assigned-identifiers@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1"
+ integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
+ integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==
+
+get-pkg-repo@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d"
+ integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0=
+ dependencies:
+ hosted-git-info "^2.1.4"
+ meow "^3.3.0"
+ normalize-package-data "^2.3.0"
+ parse-github-repo-url "^1.3.0"
+ through2 "^2.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+git-raw-commits@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff"
+ integrity sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==
+ dependencies:
+ dargs "^4.0.1"
+ lodash.template "^4.0.2"
+ meow "^4.0.0"
+ split2 "^2.0.0"
+ through2 "^2.0.0"
+
+git-remote-origin-url@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f"
+ integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=
+ dependencies:
+ gitconfiglocal "^1.0.0"
+ pify "^2.3.0"
+
+git-semver-tags@^1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5"
+ integrity sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==
+ dependencies:
+ meow "^4.0.0"
+ semver "^5.5.0"
+
+gitconfiglocal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b"
+ integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=
+ dependencies:
+ ini "^1.3.2"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@~5.0.0:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
+globals@^11.7.0:
+ version "11.11.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
+ integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+got@^6.3.0, got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11:
+ version "4.1.15"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+ integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+
+gunzip-maybe@^1.3.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz#39c72ed89d1b49ba708e18776500488902a52027"
+ integrity sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==
+ dependencies:
+ browserify-zlib "^0.1.4"
+ is-deflate "^1.0.0"
+ is-gzip "^1.0.0"
+ peek-stream "^1.1.0"
+ pumpify "^1.3.3"
+ through2 "^2.0.3"
+
+handlebars@4.0.11:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+ integrity sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+handlebars@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
+ integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
+ dependencies:
+ neo-async "^2.6.0"
+ optimist "^0.6.1"
+ source-map "^0.6.1"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.0, has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+ integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+
+htmlescape@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
+ integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=
+
+htmlparser2@^3.9.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
+ integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
+ dependencies:
+ domelementtype "^1.3.1"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.1.1"
+
+htmlparser2@~3.8.1:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
+ integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg=
+ dependencies:
+ domelementtype "1"
+ domhandler "2.3"
+ domutils "1.5"
+ entities "1.0"
+ readable-stream "1.1"
+
+http-errors@1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+ integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=
+ dependencies:
+ depd "1.1.1"
+ inherits "2.0.3"
+ setprototypeof "1.0.3"
+ statuses ">= 1.3.1 < 2"
+
+http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+husky@^0.14.3:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3"
+ integrity sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==
+ dependencies:
+ is-ci "^1.0.10"
+ normalize-path "^1.0.0"
+ strip-indent "^2.0.0"
+
+iconv-lite@0.4.19:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+ integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
+
+iconv-lite@0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+ integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^3.0.9, ignore@^3.2.0, ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.2, ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.2:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.1.tgz#2fc6b8f518aff48fef65a7f348ed85632448e4a5"
+ integrity sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA==
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390"
+ integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inline-source-map@~0.6.0:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
+ integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=
+ dependencies:
+ source-map "~0.5.3"
+
+inquirer@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726"
+ integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.1.0"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^5.5.2"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+inquirer@^6.2.2:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7"
+ integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^2.0.0"
+ lodash "^4.17.11"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^2.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+insert-module-globals@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba"
+ integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==
+ dependencies:
+ JSONStream "^1.0.3"
+ acorn-node "^1.5.2"
+ combine-source-map "^0.8.0"
+ concat-stream "^1.6.1"
+ is-buffer "^1.1.0"
+ path-is-absolute "^1.0.1"
+ process "~0.11.0"
+ through2 "^2.0.0"
+ undeclared-identifiers "^1.1.2"
+ xtend "^4.0.0"
+
+interpret@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+ip@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
+
+ipaddr.js@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+irregular-plurals@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872"
+ integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41"
+ integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==
+
+is-alphanumeric@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+ integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40"
+ integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^1.0.10:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-decimal@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff"
+ integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==
+
+is-deflate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14"
+ integrity sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-empty@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
+ integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-file/-/is-file-1.0.0.tgz#28a44cfbd9d3db193045f22b65fce8edf9620596"
+ integrity sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-gzip@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+ integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=
+
+is-hexadecimal@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835"
+ integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==
+
+is-hidden@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-hidden/-/is-hidden-1.1.1.tgz#82ee6a93aeef3fb007ad5b9457c0584d45329f38"
+ integrity sha512-175UKecS8+U4hh2PSY0j4xnm2GKYzvSKnbh+naC93JjuBA7LgIo6YxlbcsSo6seFBdQO3RuIcH980yvqqD/2cA==
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+ integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-obj@^1.0.0, is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
+ integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
+
+is-observable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+ integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+ dependencies:
+ symbol-observable "^1.1.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+ integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
+
+is-stream@1.1.0, is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-subset@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6"
+ integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
+
+is-text-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
+ integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=
+ dependencies:
+ text-extensions "^1.0.0"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-whitespace-character@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed"
+ integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==
+
+is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-word-character@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553"
+ integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isarray@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7"
+ integrity sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.6.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+jsdom@^7.0.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e"
+ integrity sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=
+ dependencies:
+ abab "^1.0.0"
+ acorn "^2.4.0"
+ acorn-globals "^1.0.4"
+ cssom ">= 0.3.0 < 0.4.0"
+ cssstyle ">= 0.2.29 < 0.3.0"
+ escodegen "^1.6.1"
+ nwmatcher ">= 1.3.7 < 2.0.0"
+ parse5 "^1.5.1"
+ request "^2.55.0"
+ sax "^1.1.4"
+ symbol-tree ">= 3.1.0 < 4.0.0"
+ tough-cookie "^2.2.0"
+ webidl-conversions "^2.0.0"
+ whatwg-url-compat "~0.6.5"
+ xml-name-validator ">= 2.0.1 < 3.0.0"
+
+json-parse-better-errors@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stable-stringify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
+ integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jsx-ast-utils@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz#0ee4e2c971fb9601c67b5641b71be80faecf0b36"
+ integrity sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==
+ dependencies:
+ array-includes "^3.0.3"
+
+keyed-array@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/keyed-array/-/keyed-array-2.1.2.tgz#8ac137b61322ed5ed1c7b41b9f9cd066631cace0"
+ integrity sha1-isE3thMi7V7Rx7Qbn5zQZmMcrOA=
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+klaw@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146"
+ integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==
+ dependencies:
+ graceful-fs "^4.1.9"
+
+labeled-stream-splicer@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926"
+ integrity sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==
+ dependencies:
+ inherits "^2.0.1"
+ isarray "^2.0.4"
+ stream-splicer "^2.0.0"
+
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
+ dependencies:
+ package-json "^4.0.0"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
+
+leven@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linkify-it@~1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a"
+ integrity sha1-B3NSbDF8j9E71TTuHRgP+Iq/iBo=
+ dependencies:
+ uc.micro "^1.0.1"
+
+lint-staged@^8.1.0:
+ version "8.1.5"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.5.tgz#372476fe1a58b8834eb562ed4c99126bd60bdd79"
+ integrity sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==
+ dependencies:
+ chalk "^2.3.1"
+ commander "^2.14.1"
+ cosmiconfig "^5.0.2"
+ debug "^3.1.0"
+ dedent "^0.7.0"
+ del "^3.0.0"
+ execa "^1.0.0"
+ find-parent-dir "^0.3.0"
+ g-status "^2.0.2"
+ is-glob "^4.0.0"
+ is-windows "^1.0.2"
+ listr "^0.14.2"
+ listr-update-renderer "^0.5.0"
+ lodash "^4.17.11"
+ log-symbols "^2.2.0"
+ micromatch "^3.1.8"
+ npm-which "^3.0.1"
+ p-map "^1.1.1"
+ path-is-inside "^1.0.2"
+ pify "^3.0.0"
+ please-upgrade-node "^3.0.2"
+ staged-git-files "1.1.2"
+ string-argv "^0.0.2"
+ stringify-object "^3.2.2"
+ yup "^0.26.10"
+
+lint@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/lint/-/lint-1.1.2.tgz#35ed064f322547c331358d899868664968ba371f"
+ integrity sha1-Ne0GTzIlR8MxNY2JmGhmSWi6Nx8=
+
+listr-silent-renderer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+ integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+ integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+ dependencies:
+ chalk "^1.1.3"
+ cli-truncate "^0.2.1"
+ elegant-spinner "^1.0.1"
+ figures "^1.7.0"
+ indent-string "^3.0.0"
+ log-symbols "^1.0.2"
+ log-update "^2.3.0"
+ strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+ integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+ dependencies:
+ chalk "^2.4.1"
+ cli-cursor "^2.1.0"
+ date-fns "^1.27.2"
+ figures "^2.0.0"
+
+listr@^0.14.2:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+ integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+ dependencies:
+ "@samverschueren/stream-to-observable" "^0.3.0"
+ is-observable "^1.1.0"
+ is-promise "^2.1.0"
+ is-stream "^1.1.0"
+ listr-silent-renderer "^1.1.1"
+ listr-update-renderer "^0.5.0"
+ listr-verbose-renderer "^0.5.0"
+ p-map "^2.0.0"
+ rxjs "^6.3.3"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+load-plugin@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-2.3.0.tgz#577b6a956b344fd2ae80d8ecff5944febeea8eb7"
+ integrity sha512-OxHNMfT3aeHFSpzeMQRcE40kXULv3KA8fGgnySC+rO3Be+0oMWkcRKMJ5zWzUCTuUnabCsQyJzNjo/BLdbmRxA==
+ dependencies:
+ npm-prefix "^1.2.0"
+ resolve-from "^4.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+
+lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.get@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash.isempty@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
+ integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
+
+lodash.memoize@~3.0.3:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
+ integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=
+
+lodash.merge@^4.6.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
+ integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==
+
+lodash.pick@^4.2.1:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+ integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
+
+lodash.range@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d"
+ integrity sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=
+
+lodash.set@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+ integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
+
+lodash.template@^4.0.2:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
+lodash.transform@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
+ integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=
+
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@^4.1.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+ dependencies:
+ chalk "^1.0.0"
+
+log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
+log-update@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+ integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ cli-cursor "^2.0.0"
+ wrap-ansi "^3.0.1"
+
+longest-streak@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e"
+ integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lru-cache@^4.0.1:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+ integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+ dependencies:
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
+
+macos-release@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.2.0.tgz#ab58d55dd4714f0a05ad4b0e90f4370fef5cdea8"
+ integrity sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==
+
+make-dir@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
+ dependencies:
+ pify "^3.0.0"
+
+make-error@^1.1.1:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
+ integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-obj@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
+ integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-escapes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122"
+ integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==
+
+markdown-extensions@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
+ integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
+
+markdown-it-named-headers@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz#82efc28324240a6b1e77b9aae501771d5f351c1f"
+ integrity sha1-gu/CgyQkCmsed7mq5QF3HV81HB8=
+ dependencies:
+ string "^3.0.1"
+
+markdown-it@^6.0.1:
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-6.1.1.tgz#ced037f4473ee9f5153ac414f77dc83c91ba927c"
+ integrity sha1-ztA39Ec+6fUVOsQU933IPJG6knw=
+ dependencies:
+ argparse "^1.0.7"
+ entities "~1.1.1"
+ linkify-it "~1.2.2"
+ mdurl "~1.0.1"
+ uc.micro "^1.0.1"
+
+markdown-table@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786"
+ integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw==
+
+marky-markdown-lite@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/marky-markdown-lite/-/marky-markdown-lite-1.2.0.tgz#74eda984b8136557dee1064efd15e40617406997"
+ integrity sha1-dO2phLgTZVfe4QZO/RXkBhdAaZc=
+ dependencies:
+ cheerio "^0.20.0"
+ conventional-changelog-cli "^1.2.0"
+ is-file "^1.0.0"
+ markdown-it "^6.0.1"
+ markdown-it-named-headers "0.0.4"
+
+matcher-collection@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838"
+ integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==
+ dependencies:
+ minimatch "^3.0.2"
+
+matcher@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+ integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+ dependencies:
+ escape-string-regexp "^1.0.4"
+
+math-random@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+ integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdast-comment-marker@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.0.tgz#81129dd4182eaeafbd40bb1f79be4da587a1dc52"
+ integrity sha512-NqHAs8nmu08I6MGzpKzgTd9qiCP7oshkyzQrlZxLMsLPUOPjp/Zb/ZtorKD0oOJ38vdZxFCdOlXvlDf77AqEDg==
+
+mdast-util-compact@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.2.tgz#c12ebe16fffc84573d3e19767726de226e95f649"
+ integrity sha512-d2WS98JSDVbpSsBfVvD9TaDMlqPRz7ohM/11G0rp5jOBb5q96RJ6YLszQ/09AAixyzh23FeIpCGqfaamEADtWg==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+mdast-util-heading-style@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-1.0.4.tgz#8e796de77f91c141691620ebbb5c9140609e3fd2"
+ integrity sha512-n4fUvwpR5Uj1Ti658KxYDq9gR0UF3FK1UVTVig12imrSOssQU2OpUysje8nps5Cb85b6eau5akpWW7Zkxtv1XA==
+
+mdast-util-to-string@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.5.tgz#3552b05428af22ceda34f156afe62ec8e6d731ca"
+ integrity sha512-2qLt/DEOo5F6nc2VFScQiHPzQ0XXcabquRJxKMhKte8nt42o08HUxNDPk7tt0YPxnWjAT11I1SYi0X0iPnfI5A==
+
+mdurl@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+meow@^3.1.0, meow@^3.3.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+meow@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975"
+ integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==
+ dependencies:
+ camelcase-keys "^4.0.0"
+ decamelize-keys "^1.0.0"
+ loud-rejection "^1.0.0"
+ minimist "^1.1.3"
+ minimist-options "^3.0.1"
+ normalize-package-data "^2.3.4"
+ read-pkg-up "^3.0.0"
+ redent "^2.0.0"
+ trim-newlines "^2.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge2@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
+ integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micro-compress@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/micro-compress/-/micro-compress-1.0.0.tgz#53f5a80b4ad0320ca165a559b6e3df145d4f704f"
+ integrity sha1-U/WoC0rQMgyhZaVZtuPfFF1PcE8=
+ dependencies:
+ compression "^1.6.2"
+
+micro@9.3.1:
+ version "9.3.1"
+ resolved "https://registry.yarnpkg.com/micro/-/micro-9.3.1.tgz#0c37eba0171554b1beccda5215ff8ea4e7aa59d6"
+ integrity sha512-83uimpPJqfwkfKvJl2WWontBlV3hmzrIgyJ+L2uhDXKNk7Ll+/ezK3zBz7TljubpKPqjM0JdT2Ker4MTPmhjgA==
+ dependencies:
+ arg "2.0.0"
+ chalk "2.4.0"
+ content-type "1.0.4"
+ is-stream "1.1.0"
+ raw-body "2.3.2"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.1.10, micromatch@^3.1.8:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.40.0, "mime-db@>= 1.40.0 < 2":
+ version "1.40.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+ integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
+
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+ integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
+
+mime-types@2.1.18:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
+ dependencies:
+ mime-db "~1.33.0"
+
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.24"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+ integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
+ dependencies:
+ mime-db "1.40.0"
+
+mime@1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+ integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist-options@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954"
+ integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+modify-values@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
+ integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==
+
+module-deps@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.0.tgz#d41a2e790245ce319171e4e7c4d8c73993ba3cd5"
+ integrity sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==
+ dependencies:
+ JSONStream "^1.0.3"
+ browser-resolve "^1.7.0"
+ cached-path-relative "^1.0.0"
+ concat-stream "~1.6.0"
+ defined "^1.0.0"
+ detective "^5.0.2"
+ duplexer2 "^0.1.2"
+ inherits "^2.0.1"
+ parents "^1.0.0"
+ readable-stream "^2.0.2"
+ resolve "^1.4.0"
+ stream-combiner2 "^1.1.1"
+ subarg "^1.0.0"
+ through2 "^2.0.0"
+ xtend "^4.0.0"
+
+mri@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a"
+ integrity sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+nan@^2.12.1:
+ version "2.13.2"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
+ integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388"
+ integrity sha512-CaLXV3W8Vnbps8ZANqDGz7j4x7Yj1LW4TWF/TQuDfj7Cfx4nAPTvw98qgTevtto1oHDrh3pQkaODbqupXlsWTg==
+ dependencies:
+ debug "^4.1.0"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+ integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
+
+neo-async@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
+ integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-dir@^0.1.12:
+ version "0.1.17"
+ resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
+ integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=
+ dependencies:
+ minimatch "^3.0.2"
+
+node-fetch@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.4.1.tgz#b2e38f1117b8acbedbe0524f041fb3177188255d"
+ integrity sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw==
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-version@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.1.3.tgz#1081c87cce6d2dbbd61d0e51e28c287782678496"
+ integrity sha512-rEwE51JWn0yN3Wl5BXeGn5d52OGbSXzWiiXRjAQeuyvcGKyvuSILW2rb3G7Xh+nexzLwhTpek6Ehxd6IjvHePg==
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379"
+ integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=
+
+normalize-path@^2.0.0, normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc"
+ integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-path@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+ integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+ dependencies:
+ which "^1.2.10"
+
+npm-prefix@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/npm-prefix/-/npm-prefix-1.2.0.tgz#e619455f7074ba54cc66d6d0d37dd9f1be6bcbc0"
+ integrity sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=
+ dependencies:
+ rc "^1.1.0"
+ shellsubstitute "^1.1.0"
+ untildify "^2.1.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-which@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+ integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+ dependencies:
+ commander "^2.9.0"
+ npm-path "^2.0.2"
+ which "^1.2.10"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
+nugget@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
+ integrity sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=
+ dependencies:
+ debug "^2.1.3"
+ minimist "^1.1.0"
+ pretty-bytes "^1.0.2"
+ progress-stream "^1.1.0"
+ request "^2.45.0"
+ single-line-log "^1.1.2"
+ throttleit "0.0.2"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+"nwmatcher@>= 1.3.7 < 2.0.0":
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
+ integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-keys@^1.0.12, object-keys@^1.0.6:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+octicons@^7.3.0:
+ version "7.4.0"
+ resolved "https://registry.yarnpkg.com/octicons/-/octicons-7.4.0.tgz#0be0082ed75b81e680800ef978bf47078b670091"
+ integrity sha512-j53BDX+FpJ4DQwENARbk9hHkwG/Oaq5NPUMNzYdGxRA/R5M6BbPVQEakUVMNKLzvzPue/gEEUTtSj6utFse5QQ==
+ dependencies:
+ object-assign "^4.1.1"
+
+octokit-pagination-methods@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
+ integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+ integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+openssl-self-signed-certificate@1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/openssl-self-signed-certificate/-/openssl-self-signed-certificate-1.1.6.tgz#9d3a4776b1a57e9847350392114ad2f915a83dd4"
+ integrity sha1-nTpHdrGlfphHNQOSEUrS+RWoPdQ=
+
+opn@5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c"
+ integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optimist@^0.6.1, optimist@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optimist@~0.3.5:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9"
+ integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=
+ dependencies:
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+ora@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
+ integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=
+ dependencies:
+ chalk "^1.1.1"
+ cli-cursor "^1.0.2"
+ cli-spinners "^0.1.2"
+ object-assign "^4.0.1"
+
+ora@^3.0.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
+ integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
+ dependencies:
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-spinners "^2.0.0"
+ log-symbols "^2.2.0"
+ strip-ansi "^5.2.0"
+ wcwidth "^1.0.1"
+
+os-browserify@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-name@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
+ integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==
+ dependencies:
+ macos-release "^2.2.0"
+ windows-release "^3.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
+ dependencies:
+ got "^6.7.1"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parents@^1.0.0, parents@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
+ integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=
+ dependencies:
+ path-platform "~0.11.15"
+
+parse-asn1@^5.0.0:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
+ integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-entities@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69"
+ integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-github-repo-url@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
+ integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A=
+
+parse-gitignore@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/parse-gitignore/-/parse-gitignore-0.4.0.tgz#abf702e4b900524fff7902b683862857b63f93fe"
+ integrity sha1-q/cC5LkAUk//eQK2g4YoV7Y/k/4=
+ dependencies:
+ array-unique "^0.3.2"
+ is-glob "^3.1.0"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse5@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+ integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
+
+parse5@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+ integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+ dependencies:
+ "@types/node" "*"
+
+parseurl@~1.3.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@~0.0.0:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@1.0.2, path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-platform@~0.11.15:
+ version "0.11.15"
+ resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
+ integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@3.0.0, path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+peek-stream@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67"
+ integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==
+ dependencies:
+ buffer-from "^1.0.0"
+ duplexify "^3.5.0"
+ through2 "^2.0.3"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-conf@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
+ integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^4.0.0"
+
+pkg-config@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
+ integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=
+ dependencies:
+ debug-log "^1.0.0"
+ find-root "^1.0.0"
+ xtend "^4.0.1"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+please-upgrade-node@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
+ integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
+ dependencies:
+ semver-compare "^1.0.0"
+
+plist@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c"
+ integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==
+ dependencies:
+ base64-js "^1.2.3"
+ xmlbuilder "^9.0.7"
+ xmldom "0.1.x"
+
+plur@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b"
+ integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==
+ dependencies:
+ irregular-plurals "^2.0.0"
+
+pluralize@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+ integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+pre-flight@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pre-flight/-/pre-flight-1.1.1.tgz#482fb1649fb400616a86b2706b11591f5cc8402d"
+ integrity sha512-glqyc2Hh3K+sYeSsVs+HhjyUVf8j6xwuFej0yjYjRYfSnOK8P3Na9GznkoPn48fR+9kTOfkocYIWrtWktp4AqA==
+ dependencies:
+ colors "^1.1.2"
+ commander "^2.9.0"
+ semver "^5.1.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84"
+ integrity sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.1.0"
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+process@~0.11.0:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress-stream@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77"
+ integrity sha1-LNPP6jO6OonJwSHsM0er6asSX3c=
+ dependencies:
+ speedometer "~0.1.2"
+ through2 "~0.2.3"
+
+progress@^2.0.0, progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+prop-types@^15.6.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+property-expr@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+ integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
+proxy-addr@~2.0.4:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.0"
+
+pseudomap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24, psl@^1.1.28:
+ version "1.1.31"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
+ integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
+ integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.3.2, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0, punycode@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+q@^1.4.1, q@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
+qs@6.5.2, qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+querystring-es3@~0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+quick-lru@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
+ integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+
+ramda@^0.26.1:
+ version "0.26.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
+ integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
+
+randomatic@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+ integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+ integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
+
+raw-body@2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+ integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.2"
+ iconv-lite "0.4.19"
+ unpipe "1.0.0"
+
+raw-body@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
+ integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
+ dependencies:
+ bytes "3.0.0"
+ http-errors "1.6.3"
+ iconv-lite "0.4.23"
+ unpipe "1.0.0"
+
+rc@^1.0.1, rc@^1.1.0, rc@^1.1.6, rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-is@^16.8.1:
+ version "16.8.6"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
+ integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
+
+read-only-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
+ integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=
+ dependencies:
+ readable-stream "^2.0.2"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
+ integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg@^1.0.0, read-pkg@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+readable-stream@1.1:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
+ integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@^3.1.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9"
+ integrity sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+redent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa"
+ integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=
+ dependencies:
+ indent-string "^3.0.0"
+ strip-indent "^2.0.0"
+
+regenerator-runtime@^0.12.0:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
+ integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^2.0.0, regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+registry-auth-token@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
+ integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-auth-token@^3.0.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e"
+ integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-url@3.1.0, registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
+ dependencies:
+ rc "^1.0.1"
+
+remark-cli@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-4.0.0.tgz#bb84c14ffeb6f5b658eff4dfbb77cdd7775bab73"
+ integrity sha512-q5GMjGypUS4rTZb3WfMQcGpClSC38A9Ogg1h/HB2GLsqypDetmAfy0X+tuJ6JeyCPVOXXCDgsDCQq4QPqKmxBA==
+ dependencies:
+ markdown-extensions "^1.1.0"
+ remark "^8.0.0"
+ unified-args "^4.0.0"
+
+remark-lint-blockquote-indentation@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.2.tgz#e84ab0dc4bf468ca10c53f09e1cb8dd0c2f56a95"
+ integrity sha512-u3ruA+4ZZOpt3YmTCdCOcYiGBMSQ/b/iJvZs/fibF6rwSBmkod48aGGJVoOLMuIuTYYbbXpzigxS+PeJwN0CDQ==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-code-block-style@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.2.tgz#f24ef71767d5933ed83de93a54a85faf9e02c197"
+ integrity sha512-fTSCga/lJ710zBaD808NwqzAatVoLQFizvXWpetygKwoAfXCyMYQ9DUdDE5jdDhwOu2JPnKbxY+4t6m4SrKKWA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-definition-case@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-1.0.3.tgz#4dbc9322eeb7f8d0402f4f1056eaf97812a47557"
+ integrity sha512-ORRDV+ETVWnXoPE3fX0zXFGC5NQvdsB1Ihjeqmw38IWVKnOR34f5s/9BZNnbflBzdKWnLVg1g3IwQLf8eVBsow==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-definition-spacing@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.3.tgz#f7fc54d0fe7b3cd6b94e2e1290220dd1a3cfb1ff"
+ integrity sha512-8lFBtgSE3xbvvSuO95B6lUiD6Ph1wZr5xevKokwwfKoyfOkXDpN85wh7JepIZnUj1OnTXvupCwr7yYUEji/Rrw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-emphasis-marker@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.2.tgz#df77c6b62b87a61ddf683e791d13ccfae050c318"
+ integrity sha512-c+uvvnYesMaqy/X0dU62dbI6/rk+4dxMXdnfLC/NKBA8GU+4kljWqluW797S6nBG94QZjKIv8m49zJl38QfImQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-fenced-code-flag@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.2.tgz#614232ab7923fc0a3e8694b485bc7ae664c7046b"
+ integrity sha512-6/412zYtz+qKpFJryEPSMurWr6tO5MTVohJF3byFc3+3SSEZLWY3Dg8gbwFlumZ9T4HgmfUm/LT7Idm96zj0nw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-fenced-code-marker@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.2.tgz#07959311cf7b9cbe35ae279ea3cb7823205cb29f"
+ integrity sha512-yAP59Q1JoI1jjOFCn0GoNx4uDji99ROLvdwvmz7+9YR9guDArBcR4i9Wem/wN6apauWPk2DbAZFavHvbZaT8HQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-file-extension@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-1.0.2.tgz#c52c6e00c9d1f5e729f515c1bb9c23de9aef4983"
+ integrity sha512-qx0uki74rmALIKE3r5J3neasbXnz6h+l88OngvpwWkELsnJmfk81JdxfEd0tZ++uTj6CN0TZuhMKad9smfNtRw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-final-definition@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-1.0.2.tgz#63e013c9f95c9b52197f19c6e0d14b622352e0f3"
+ integrity sha512-F+n8eauYOJGdcSrnD7w2YgQSERx1rAwXTxStaJ2tLmoXlT7eQgpVGHz1U4Y76cg8OANbq8pT0KTNJ85JNqkq4g==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-hard-break-spaces@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.3.tgz#0485fc09265dcea436f5eb3420a3b6f616c6fad7"
+ integrity sha512-GiC0uXeFwef6/Pfo+EYBN0WIVlEFffh+9TdeJ4uLt89ZweaRVDPCTJQqkkuXoiXSPnZGD7cGHdkWCfXU1PaU7Q==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-heading-increment@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.2.tgz#5da0771232711a42acb66fa79c3c6686de402c3e"
+ integrity sha512-CE3MmARKFk6LK+nBuOUubhr64LnbJfLNx1gA8XgxWJ4s/gf8yZO23KsaWk3ftVmmwk0d8Eqh4qKg8vvvaMyrWQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-heading-style@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-1.0.2.tgz#87bdab061c9d259f50b5c51ce478d1c65bd31ae8"
+ integrity sha512-d0aIbL8PU5LWfZVI8p49vEV5wWIfD/DdUjc+O8j5E0UWUgcRgPGB66xznkOb8AiniXpcaYggRW8hGZsxoYNt1g==
+ dependencies:
+ mdast-util-heading-style "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-link-title-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.3.tgz#4dd3aafaf9824523d4f0c8e11171581c89071702"
+ integrity sha512-1cJ/gNoIwX36FB0w8TiT+/Cy0evSJRyn0uV0jeB5Ik+fX+tVxHRkuX/DtmFw0fGImQW882r/3eaZHaKabVR1yg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+ vfile-location "^2.0.1"
+
+remark-lint-list-item-content-indent@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.2.tgz#2564f4b661c4a82a92ecf60a1c4a2b867355c654"
+ integrity sha512-I7VkspA/jeMmIWZ4cGmW/4oWnT6fP8pn5n11MR7azRMKgooj3N2qGF084UqrWHh/dLJcakJUNl3NTXv1XCS1Mw==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-list-item-indent@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.3.tgz#93dac0cc312ee8dd9c8a0749b44b17b95b765f53"
+ integrity sha512-/IcVUPIxQ2X/oCKzqiAtH85CS8An3xQbcMD0DRBHZjBrIUO0Ot7lBiQedSHwCg9lnh7pDOTvHrmNS3FaWjVQqw==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-list-item-spacing@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.2.tgz#55f0d38b0bc1b1c1a553c2d7418066ad1aed9d16"
+ integrity sha512-IhG28ofW85o/2+eVH1ft1zgQmjxqDhNp3+217EQLQviPt/+jVcMsua4W4ZQECPg0E9473yiY9TKbBodp2kOMkg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-maximum-heading-length@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.2.tgz#8588923a480d3f039d6c28ae60a6b03cf864b5c8"
+ integrity sha512-kDdwgRItpVGhxdUC+kbWn5YisCrtF4KggP8z36z26tBmDuPj1ohjQvfMWY0oKL8I0Y6UuXyE0vQx3m4R8Qrj+A==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-maximum-line-length@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.0.tgz#40ca341c0e40285a3708da62279476cb5ead70bf"
+ integrity sha512-tqqZ8YCvfz9ZvKN2vRA12qgNKM+DKb73rJMMb6zq9yd2Nt32n7S+1nobSpKQqAR7/bn2ysUGu/NNA7FjlRXt6g==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-no-auto-link-without-protocol@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.2.tgz#4532087419b1b131b4057ecf0a3a446f0afc2c6e"
+ integrity sha512-3GtkSxOyd6we4b8JdtJsNgt8+3UN+hpw1UiMoE9X96ahc1rqsCFm6miorNUnF/gfPQ1liHBvZUed2SIenDmpkg==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-blockquote-without-marker@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.2.tgz#61b6a0a74fbfba8fd168ac0fcc2a673eb47b9880"
+ integrity sha512-jkfZ4hFiviZttEo7Ac7GZWFgMQ/bdVPfSluLeuf+qwL8sQvR4ClklKJ0Xbkk3cLRjvlGsc8U8uZR8qqH5MSLoA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+ vfile-location "^2.0.1"
+
+remark-lint-no-consecutive-blank-lines@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.2.tgz#ba7c8944335a80e67c811028732f12e521d07d93"
+ integrity sha512-KbOm6EX5Yl9uzRC93soTB+HlqtCzu9XJWsV9CVcoDKtNnpKfyTwQOy6dmUbQrLp4xBdNk4s9S9CsemRaHEkFGA==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-duplicate-headings@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.2.tgz#774b1c1e9f8d8313ca32f8b44a4ab3fcf2456e12"
+ integrity sha512-RO3/eQxLjUoHirHIVC+bE5Abzl+gWiJcdPr48gGSP34xfwCeaBAaeorOAxY/hOqOQ/EVNTTA/JHCBVSNPZWIeg==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-stringify-position "^1.1.2"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-emphasis-as-heading@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.2.tgz#a4616ad3f085e4db013132306312973b3fe76ac0"
+ integrity sha512-lKlwiRQOFOoPSwjbZf065RaUr6RZmO82zZYjXhVT9xwMkWXIAQyG0GJuLB2/+rlMEtlgoUD3ePch+Pzf+KrSJQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-file-name-articles@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.2.tgz#a8187e44584e56ccc37fcd7bbc758e940a5b1829"
+ integrity sha512-5FuxJ0Hd2AgVSP1javG51qPbMBWxma1LrCKI6JmBsu/GM7ZYOgemMyH5v4I1ejTPGj7P30xmIjMNSnV8IBMq3g==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-consecutive-dashes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.2.tgz#e8536f4c9f349965d9b4990a75a27857dac72488"
+ integrity sha512-VvCxG3AfRm6ROFNJ8+tdOOkk61mEKj+PytB8xg5WNQypKWhhJ734mJ3GzXD4XEov7Bdd1GVXJFXlLFtfoAewHw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-irregular-characters@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.2.tgz#0dffe8f4dc7ffe79f634d4609a8f28261a981552"
+ integrity sha512-8A+DYXsiPBu0q4cvqtYwzRj6SWrKnPh+oI1H1t64pCQiSnLmG9e3mAUXMxH9PiM6y5OW7Vw8Xh4KYsnRwGEuMQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-mixed-case@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.2.tgz#965606ac41b53fef8a4c8d0c7bd1bed63e26a357"
+ integrity sha512-OMH2kpjvDAsyyw8ar9h6WI1kUXSpQ2r2c5JZv3NBNYxwzTBfhCR2MSQq+eEI7yUmD2ehqNUY5LwZTQZG6cK4vw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-outer-dashes@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.3.tgz#d5b217a8341ac79b4a378770488b3ccc8bc4a5b5"
+ integrity sha512-imUWm8Bi9PxV+IQtQC2/BV1Yj0VboC9hPMZh3sae8pZvCjXquTyYiSFa7hQxX6KWCNUiRPHMSlaSVvfvM2e4pQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-heading-punctuation@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.2.tgz#c520d8614d641b05ac75c25502901df9218b4b5e"
+ integrity sha512-nYc2a0ihQ5cPy7elaM0lRPYKEMpEK6EjyJH6pHYlgG8NQwjKXhsVaek0fmAm12PaYoYOGW1pDxfzxnFUocU20g==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-inline-padding@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.3.tgz#a31e3a04ab0d47ea7e7be8416b5d2d668ad8f7cf"
+ integrity sha512-zEe7LjM13kQshdBtPnSzzCUNzGIX/XiGspMb7HZBCDWYsPJ73s01X+m+YI99Dz7wKvB3EUTZ7/MFhTUIvqcGRw==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-no-literal-urls@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.2.tgz#1c60160a76bd9ddacd42819b43dadeb481a530df"
+ integrity sha512-+mWZIJA4yAqpKIclcFP5wRy/6hxcPnfU9Xmgp4fR7OD4JQ4JHkKq9O7MUbda14PLez1aMX+Is0O0hWI7OuqsSw==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-multiple-toplevel-headings@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.2.tgz#65f7288f66a1a14394f6c6f0910d36112f60e3eb"
+ integrity sha512-Zxkw7wIyMOyYQb5C5NTswSttZPCLqm/60Wnt0TEWzXVDkVk5DrxrCCxbMKgpXve1Co5CXPmMixNr/xYBqzxzWg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-stringify-position "^1.1.2"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shell-dollars@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.2.tgz#361599631271f7237b2147e692be40e08975330c"
+ integrity sha512-eIjBebX9iOFWbMdjol5JJBXI7ku+7UyJpNrd++rl8QenLLZ76beh+xONCzJw/k5dhEw5voBmQLh7VK9HPU/ang==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shortcut-reference-image@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.2.tgz#784011b832173ad9e87d4f40c90f935de0841764"
+ integrity sha512-IVYv5pgyf70jYcrn+BNHVO37BuQJg26rFOLzi2mj+/8EdFpolJiJcTvkChJgz5yip7317DmQQSNLX6gCExuDrQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shortcut-reference-link@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.3.tgz#4210d37d234b427dd131eb11473a7a2d3719a819"
+ integrity sha512-v5mk4wYQL+YRmlOTqi8avpzhoGZg+P42dDRda2jedysDIx7TJBEXUH6oMFEbo/qV6PMmtr7fr066M3RrOrLpiQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-table-indentation@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.3.tgz#03eaa9c9d4609999cda101451451270656809c78"
+ integrity sha512-argI2JADlVrlwsdORdbmE89QXB9XtBtAy2YBHZv/q/d247CyL+h+hw9wpg06P1lLQwbllxYJD5u1bNtfgv3XVg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-ordered-list-marker-style@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.2.tgz#ad7461306a7701fc931245300dfd7dbd9fbb589f"
+ integrity sha512-4EHuHxZqy8IT4k+4Vc8P38I34AiZfgl07fS5/iqGhCdoSMCvvxdOuzTWTgpDFbx/W2QpHelBfJ+FtOp+E0J4Lg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-ordered-list-marker-value@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.2.tgz#26f5f1ddfadb7c958f8e2c15cd3aa9f2be985be6"
+ integrity sha512-vIPD07u+FBjTjEETZ+UWUp2nydzvOe5AHIX812JlNXWuHYuCybq8DGnkYUcoiK3HbIE+KdG+e7C5xHkim0PSjw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-rule-style@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-1.0.2.tgz#51f82acb1e6cdf76ea6107bb231d2336615fa98d"
+ integrity sha512-D9mMPKA7rtCe4Yx+ryip6FyfNG9uGOaHxRgJClfte7D66QzxiiWtHYyNCXI4rkv8Ax9PrEdpWCPcIl3D2LrXhw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-strong-marker@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.2.tgz#6ce3670f79bf5978b7518af35e6072c8425f0f46"
+ integrity sha512-oUSKqYJVLgbXe25NmcTOfQ8wsFasc+qhEoGjPEGPuJMV2aZIGuOEbGVqD5B1ckYGBEwbTuet3btvMohz8HaBDQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-table-cell-padding@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.3.tgz#fafec50deb8476cb3241f2da4ef0b8b66f549741"
+ integrity sha512-beXwMK8KAGIDQWixf7wzte4GhyB9w33DxTGgmP4HWOWMVXHvBnufJvnIozBBOH9nOsi1fP8NYRb/01hrgjNnmw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-table-pipe-alignment@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.2.tgz#3d79927c18b5a5713079a7890a392b740e0bc45a"
+ integrity sha512-gLJwduvBI2soR7Dyf39KGUl3M9ZCK/7pFfWBeOv8J27D7px/1lXooqlX4Y9NQ/+9jc7DyLF9upPxh7UWm7UXGg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-table-pipes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.2.tgz#a7e95c93d6908c2b515651aa44fc8c922626ad32"
+ integrity sha512-BGKcOviuUC6fILIOPYFe6awqk57ApzNJpK3OYBrweGoFF55nZ/qf3q6JpzA0chd6wKj7VrcfQEd3QSQQ+8Wcrw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-unordered-list-marker-style@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.2.tgz#2d631c3e7e0604e1d45d5586a0bbb21474bb89a4"
+ integrity sha512-qdnF9JuMWzFJzGIfdAWfOHyjad8dqIQSs+cTzqMlNZHOGrrCJdTUWzybzcZMGn1yuwreklZdHKhOglXQFwSD3A==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-6.0.4.tgz#13def899efd7d7d105188c274663a60e0fe8fa59"
+ integrity sha512-miD6SKhjEkLgdJXgAmNhGsdY1yIGAzwpoGIn/59MR6nZhshdxSm9/pLPiw9fK3loNASA3j7k//kea6x5vHb+jQ==
+ dependencies:
+ remark-message-control "^4.0.0"
+
+remark-message-control@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-4.1.1.tgz#a3f0b08dffda484e7196f0539de1488220f1d251"
+ integrity sha512-DojJPPeSux/U7aHCN6GUWBgp6F1EQFPUNvnk2gfuGgiMCHVubz/xAC3TkvPaf5w1F0PEGaOEpCtvxJK6O4Kmiw==
+ dependencies:
+ mdast-comment-marker "^1.0.0"
+ unified-message-control "^1.0.0"
+ xtend "^4.0.1"
+
+remark-parse@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b"
+ integrity sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.0.2"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-preset-lint-markdown-style-guide@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.2.tgz#a945814f4b014d3e6c0888fc034418bdfd77f44c"
+ integrity sha512-0mYeeO084o3ZuDSQCvj5vpMZEGQ/HxPcO5vdNpicu+wKpuGNKV2hYZeHbXa/uZV0gjiQeuRmCHIDgNaDsMj5fg==
+ dependencies:
+ remark-lint "^6.0.0"
+ remark-lint-blockquote-indentation "^1.0.0"
+ remark-lint-code-block-style "^1.0.0"
+ remark-lint-definition-case "^1.0.0"
+ remark-lint-definition-spacing "^1.0.0"
+ remark-lint-emphasis-marker "^1.0.0"
+ remark-lint-fenced-code-flag "^1.0.0"
+ remark-lint-fenced-code-marker "^1.0.0"
+ remark-lint-file-extension "^1.0.0"
+ remark-lint-final-definition "^1.0.0"
+ remark-lint-hard-break-spaces "^1.0.0"
+ remark-lint-heading-increment "^1.0.0"
+ remark-lint-heading-style "^1.0.0"
+ remark-lint-link-title-style "^1.0.0"
+ remark-lint-list-item-content-indent "^1.0.0"
+ remark-lint-list-item-indent "^1.0.0"
+ remark-lint-list-item-spacing "^1.0.0"
+ remark-lint-maximum-heading-length "^1.0.0"
+ remark-lint-maximum-line-length "^1.0.0"
+ remark-lint-no-auto-link-without-protocol "^1.0.0"
+ remark-lint-no-blockquote-without-marker "^2.0.0"
+ remark-lint-no-consecutive-blank-lines "^1.0.0"
+ remark-lint-no-duplicate-headings "^1.0.0"
+ remark-lint-no-emphasis-as-heading "^1.0.0"
+ remark-lint-no-file-name-articles "^1.0.0"
+ remark-lint-no-file-name-consecutive-dashes "^1.0.0"
+ remark-lint-no-file-name-irregular-characters "^1.0.0"
+ remark-lint-no-file-name-mixed-case "^1.0.0"
+ remark-lint-no-file-name-outer-dashes "^1.0.0"
+ remark-lint-no-heading-punctuation "^1.0.0"
+ remark-lint-no-inline-padding "^1.0.0"
+ remark-lint-no-literal-urls "^1.0.0"
+ remark-lint-no-multiple-toplevel-headings "^1.0.0"
+ remark-lint-no-shell-dollars "^1.0.0"
+ remark-lint-no-shortcut-reference-image "^1.0.0"
+ remark-lint-no-shortcut-reference-link "^1.0.0"
+ remark-lint-no-table-indentation "^1.0.0"
+ remark-lint-ordered-list-marker-style "^1.0.0"
+ remark-lint-ordered-list-marker-value "^1.0.0"
+ remark-lint-rule-style "^1.0.0"
+ remark-lint-strong-marker "^1.0.0"
+ remark-lint-table-cell-padding "^1.0.0"
+ remark-lint-table-pipe-alignment "^1.0.0"
+ remark-lint-table-pipes "^1.0.0"
+ remark-lint-unordered-list-marker-style "^1.0.0"
+
+remark-stringify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87"
+ integrity sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==
+ dependencies:
+ ccount "^1.0.0"
+ is-alphanumeric "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ longest-streak "^2.0.1"
+ markdown-escapes "^1.0.0"
+ markdown-table "^1.1.0"
+ mdast-util-compact "^1.0.0"
+ parse-entities "^1.0.2"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ stringify-entities "^1.0.1"
+ unherit "^1.0.4"
+ xtend "^4.0.1"
+
+remark@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-8.0.0.tgz#287b6df2fe1190e263c1d15e486d3fa835594d6d"
+ integrity sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==
+ dependencies:
+ remark-parse "^4.0.0"
+ remark-stringify "^4.0.0"
+ unified "^6.0.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+replace-ext@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request@^2.45.0, request@^2.55.0, request@^2.88.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-uncached@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+requireindex@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
+ integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
+
+requireindex@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
+ integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+ integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
+
+resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1:
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
+ integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+revalidator@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.3.1.tgz#ff2cc4cf7cc7c6385ac710178276e6dbcd03762f"
+ integrity sha1-/yzEz3zHxjhaxxAXgnbm280Ddi8=
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.2.6:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+ integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+run-parallel@^1.1.2:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
+rxjs@^5.5.2:
+ version "5.5.12"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+ integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+ dependencies:
+ symbol-observable "1.0.1"
+
+rxjs@^6.3.3, rxjs@^6.4.0:
+ version "6.5.1"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4"
+ integrity sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+ integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
+
+safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.1.4, sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
+ dependencies:
+ semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
+ integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+
+semver@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+send@0.16.2:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
+ integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.6.2"
+ mime "1.4.1"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.4.0"
+
+serve-static@1.13.2:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
+ integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.2"
+ send "0.16.2"
+
+serve@^6.5.8:
+ version "6.5.8"
+ resolved "https://registry.yarnpkg.com/serve/-/serve-6.5.8.tgz#fd7ad6b9c10ba12084053030cc1a8b636c0a10a7"
+ integrity sha512-GZYlJz7f6E7Xq6xbg1rTSvQQV9x4v/yYB/sum6egzSBLa/mdk1PViDSX2JvL0Me83sxu3JpEpQELfakDKbGcrw==
+ dependencies:
+ args "4.0.0"
+ basic-auth "2.0.0"
+ bluebird "3.5.1"
+ boxen "1.3.0"
+ chalk "2.4.1"
+ clipboardy "1.2.3"
+ dargs "5.1.0"
+ detect-port "1.2.3"
+ filesize "3.6.1"
+ fs-extra "6.0.1"
+ handlebars "4.0.11"
+ ip "1.1.5"
+ micro "9.3.1"
+ micro-compress "1.0.0"
+ mime-types "2.1.18"
+ node-version "1.1.3"
+ openssl-self-signed-certificate "1.1.6"
+ opn "5.3.0"
+ path-is-inside "1.0.2"
+ path-type "3.0.0"
+ send "0.16.2"
+ update-check "1.5.1"
+
+set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+ integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=
+
+setprototypeof@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
+
+sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shasum@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
+ integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8=
+ dependencies:
+ json-stable-stringify "~0.0.0"
+ sha.js "~2.4.4"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shell-quote@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
+ dependencies:
+ array-filter "~0.0.0"
+ array-map "~0.0.0"
+ array-reduce "~0.0.0"
+ jsonify "~0.0.0"
+
+shelljs@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
+ integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+shellsubstitute@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shellsubstitute/-/shellsubstitute-1.2.0.tgz#e4f702a50c518b0f6fe98451890d705af29b6b70"
+ integrity sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=
+
+shx@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.2.tgz#40501ce14eb5e0cbcac7ddbd4b325563aad8c123"
+ integrity sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==
+ dependencies:
+ es6-object-assign "^1.0.3"
+ minimist "^1.2.0"
+ shelljs "^0.8.1"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-concat@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
+ integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
+
+simple-git@^1.85.0:
+ version "1.110.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.110.0.tgz#54eb179089d055a7783d32399246cebc9d9933e9"
+ integrity sha512-UYY0rQkknk0P5eb+KW+03F4TevZ9ou0H+LoGaj7iiVgpnZH4wdj/HTViy/1tNNkmIPcmtxuBqXWiYt2YwlRKOQ==
+ dependencies:
+ debug "^4.0.1"
+
+single-line-log@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+ integrity sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=
+ dependencies:
+ string-width "^1.0.1"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+sliced@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6:
+ version "0.5.12"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
+ integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1"
+ integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==
+
+speedometer@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d"
+ integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+split2@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493"
+ integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==
+ dependencies:
+ through2 "^2.0.2"
+
+split@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
+ integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
+ dependencies:
+ through "2"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+staged-git-files@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+ integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
+standard-engine@~9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-9.0.0.tgz#d3a3d74c4c1b91f51a1e66362465261ca7610316"
+ integrity sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==
+ dependencies:
+ deglob "^2.1.0"
+ get-stdin "^6.0.0"
+ minimist "^1.1.0"
+ pkg-conf "^2.0.0"
+
+standard-markdown@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/standard-markdown/-/standard-markdown-5.0.1.tgz#39598c611bfe03b2d4313df792f365544959a592"
+ integrity sha512-rvbuTqF4zJX3yxgHhRB6o0uGq+V87Dbzk8QeBy9dyb9RdBWL4OG3nCpxfEnM0KHjycMCSMK36r60k/MGThERdA==
+ dependencies:
+ commander "^2.18.0"
+ globby "^8.0.1"
+ lodash.flatten "^4.4.0"
+ lodash.range "^3.2.0"
+ ora "^3.0.0"
+ standard "^12.0.1"
+
+standard@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-12.0.1.tgz#0fc5a8aa6c34c546c5562aae644242b24dae2e61"
+ integrity sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==
+ dependencies:
+ eslint "~5.4.0"
+ eslint-config-standard "12.0.0"
+ eslint-config-standard-jsx "6.0.2"
+ eslint-plugin-import "~2.14.0"
+ eslint-plugin-node "~7.0.1"
+ eslint-plugin-promise "~4.0.0"
+ eslint-plugin-react "~7.11.1"
+ eslint-plugin-standard "~4.0.0"
+ standard-engine "~9.0.0"
+
+state-toggle@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a"
+ integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+statuses@~1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
+ integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
+
+stream-browserify@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-combiner2@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
+ integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4=
+ dependencies:
+ duplexer2 "~0.1.0"
+ readable-stream "^2.0.2"
+
+stream-http@^2.0.0:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+stream-splicer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
+ integrity sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
+string-argv@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+ integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
+string-width@^1.0.0, string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string@^3.0.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0"
+ integrity sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=
+
+string_decoder@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
+ integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-entities@^1.0.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7"
+ integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+stringify-object@^3.2.2:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+ integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=
+
+strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+subarg@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
+ integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI=
+ dependencies:
+ minimist "^1.1.0"
+
+sumchecker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e"
+ integrity sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=
+ dependencies:
+ debug "^2.2.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+ integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
+ dependencies:
+ has-flag "^2.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+symbol-observable@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+ integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
+symbol-observable@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+"symbol-tree@>= 3.1.0 < 4.0.0":
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+ integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
+
+synchronous-promise@^2.0.5:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.7.tgz#3574b3d2fae86b145356a4b89103e1577f646fe3"
+ integrity sha512-16GbgwTmFMYFyQMLvtQjvNWh30dsFe1cAW5Fg1wm5+dg84L9Pe36mftsIRU95/W2YsISxsz/xq4VB23sqpgb/A==
+
+syntax-error@^1.1.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c"
+ integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==
+ dependencies:
+ acorn-node "^1.2.0"
+
+table@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
+ integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==
+ dependencies:
+ ajv "^6.0.1"
+ ajv-keywords "^3.0.0"
+ chalk "^2.1.0"
+ lodash "^4.17.4"
+ slice-ansi "1.0.0"
+ string-width "^2.1.1"
+
+table@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
+ integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
+ dependencies:
+ ajv "^6.9.1"
+ lodash "^4.17.11"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tar-fs@^1.13.0:
+ version "1.16.3"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
+ integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
+ dependencies:
+ chownr "^1.0.1"
+ mkdirp "^0.5.1"
+ pump "^1.0.0"
+ tar-stream "^1.1.2"
+
+tar-stream@^1.1.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+ integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+ dependencies:
+ bl "^1.0.0"
+ buffer-alloc "^1.2.0"
+ end-of-stream "^1.0.0"
+ fs-constants "^1.0.0"
+ readable-stream "^2.3.0"
+ to-buffer "^1.1.1"
+ xtend "^4.0.0"
+
+tar@^4, tar@^4.4.7:
+ version "4.4.8"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
+ integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.4"
+ minizlib "^1.1.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+temp@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=
+ dependencies:
+ os-tmpdir "^1.0.0"
+ rimraf "~2.2.6"
+
+tempfile@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
+ integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=
+ dependencies:
+ os-tmpdir "^1.0.0"
+ uuid "^2.0.1"
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+text-extensions@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
+ integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throttleit@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
+ integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8=
+
+through2@^2.0.0, through2@^2.0.2, through2@^2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f"
+ integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=
+ dependencies:
+ readable-stream "~1.1.9"
+ xtend "~2.1.1"
+
+through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.7:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@^1.0.1:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+ integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=
+ dependencies:
+ process "~0.11.0"
+
+tmp-promise@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.0.5.tgz#3208d7fa44758f86a2a4c4060f3c33fea30e8038"
+ integrity sha512-hOabTz9Tp49wCozFwuJe5ISrOqkECm6kzw66XTP23DuzNU7QS/KiZq5LC9Y7QSy8f1rPSLy4bKaViP0OwGI1cA==
+ dependencies:
+ bluebird "^3.5.0"
+ tmp "0.0.33"
+
+tmp@0.0.33, tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-buffer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+ integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+to-vfile@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-2.2.0.tgz#342d1705e6df526d569b1fc8bfa29f1f36d6c416"
+ integrity sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==
+ dependencies:
+ is-buffer "^1.1.4"
+ vfile "^2.0.0"
+ x-is-function "^1.0.4"
+
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tough-cookie@^2.2.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tr46@~0.0.1:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-newlines@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
+ integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+
+trim-off-newlines@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
+ integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM=
+
+trim-trailing-lines@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9"
+ integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24"
+ integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==
+
+ts-node@^6.0.3:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-6.2.0.tgz#65a0ae2acce319ea4fd7ac8d7c9f1f90c5da6baf"
+ integrity sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==
+ dependencies:
+ arrify "^1.0.0"
+ buffer-from "^1.1.0"
+ diff "^3.1.0"
+ make-error "^1.1.1"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.5.6"
+ yn "^2.0.0"
+
+tsconfig@^5.0.3:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-5.0.3.tgz#5f4278e701800967a8fc383fd19648878f2a6e3a"
+ integrity sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=
+ dependencies:
+ any-promise "^1.3.0"
+ parse-json "^2.2.0"
+ strip-bom "^2.0.0"
+ strip-json-comments "^2.0.0"
+
+tsify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/tsify/-/tsify-4.0.1.tgz#b19b0ddf7f184368dbf65839293d2c5a6d48453d"
+ integrity sha512-ClznEI+pmwY5wmD0J7HCSVERwkD+l71ch3Dqyod2JuQLEsFaiNDI+vPjaGadsuVFVvmzgoI7HghrBtWsSmCDHQ==
+ dependencies:
+ convert-source-map "^1.1.0"
+ fs.realpath "^1.0.0"
+ object-assign "^4.1.0"
+ semver "^5.6.0"
+ through2 "^2.0.0"
+ tsconfig "^5.0.3"
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+ integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+tslint@^4.5.1:
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b"
+ integrity sha1-BTVocb7yOkNJBnNABvwYgza6gks=
+ dependencies:
+ babel-code-frame "^6.20.0"
+ colors "^1.1.2"
+ diff "^3.0.1"
+ findup-sync "~0.3.0"
+ glob "^7.1.1"
+ optimist "~0.6.0"
+ resolve "^1.1.7"
+ tsutils "^1.1.0"
+ update-notifier "^2.0.0"
+
+tsutils@^1.1.0:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0"
+ integrity sha1-ufmrROVa+WgYMdXyjQrur1x1DLA=
+
+tsutils@^3.7.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6"
+ integrity sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811"
+ integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-is@~1.6.16:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^2.2.1:
+ version "2.9.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c"
+ integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==
+
+typescript@~3.3.3333:
+ version "3.3.4000"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.4000.tgz#76b0f89cfdbf97827e1112d64f283f1151d6adf0"
+ integrity sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==
+
+uc.micro@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+uglify-js@^2.6:
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-js@^3.1.4:
+ version "3.5.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.9.tgz#372fbf95939555b1f460b1777d33a67d4a994ac9"
+ integrity sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ==
+ dependencies:
+ commander "~2.20.0"
+ source-map "~0.6.1"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
+
+umd@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf"
+ integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==
+
+undeclared-identifiers@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f"
+ integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==
+ dependencies:
+ acorn-node "^1.3.0"
+ dash-ast "^1.0.0"
+ get-assigned-identifiers "^1.2.0"
+ simple-concat "^1.0.0"
+ xtend "^4.0.1"
+
+unherit@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c"
+ integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==
+ dependencies:
+ inherits "^2.0.1"
+ xtend "^4.0.1"
+
+unified-args@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-4.0.0.tgz#8d9b9b8ad347beb37f430562a62c4d361b42220f"
+ integrity sha1-jZubitNHvrN/QwVipixNNhtCIg8=
+ dependencies:
+ camelcase "^4.0.0"
+ chalk "^2.0.0"
+ chokidar "^1.5.1"
+ minimist "^1.2.0"
+ text-table "^0.2.0"
+ unified-engine "^4.0.0"
+
+unified-engine@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-4.0.1.tgz#9692aa97fd5c4ec36889779e12514bef8e863fc3"
+ integrity sha1-lpKql/1cTsNoiXeeElFL746GP8M=
+ dependencies:
+ concat-stream "^1.5.1"
+ debug "^2.2.0"
+ fault "^1.0.0"
+ fn-name "^2.0.1"
+ glob "^7.0.3"
+ ignore "^3.2.0"
+ is-empty "^1.0.0"
+ is-hidden "^1.0.1"
+ is-object "^1.0.1"
+ js-yaml "^3.6.1"
+ load-plugin "^2.0.0"
+ parse-json "^2.2.0"
+ to-vfile "^2.0.0"
+ trough "^1.0.0"
+ vfile-reporter "^4.0.0"
+ vfile-statistics "^1.1.0"
+ x-is-function "^1.0.4"
+ x-is-string "^0.1.0"
+ xtend "^4.0.1"
+
+unified-lint-rule@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.3.tgz#e302b0c4a7ac428c0980e049a500e59528001299"
+ integrity sha512-6z+HH3mtlFdj/w3MaQpObrZAd9KRiro370GxBFh13qkV8LYR21lLozA4iQiZPhe7KuX/lHewoGOEgQ4AWrAR3Q==
+ dependencies:
+ wrapped "^1.0.1"
+
+unified-message-control@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-1.0.4.tgz#a5e02c07112f78c6687b83a10392c2fba86dc09b"
+ integrity sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==
+ dependencies:
+ trim "0.0.1"
+ unist-util-visit "^1.0.0"
+ vfile-location "^2.0.0"
+
+unified@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
+ integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^1.1.0"
+ trough "^1.0.0"
+ vfile "^2.0.0"
+ x-is-string "^0.1.0"
+
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unist-util-generated@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.3.tgz#ca650470aef2fbcc5fe54c465bc26b41ca109e2b"
+ integrity sha512-qlPeDqnQnd84KIqwphzOR+l02cxjDzvEYEBl84EjmKRrX4eUmjyAo8xJv1SCDhJqNjyHRnBMZWNKAiBtXE6hBg==
+
+unist-util-is@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db"
+ integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==
+
+unist-util-position@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.2.tgz#80ad4a05efc4ab01a66886cc70493893ba73c5eb"
+ integrity sha512-npmFu92l/+b1Ao6uGP4I1WFz9hsKv7qleZ4aliw6x0RVu6A9A3tAf57NMpFfzQ02jxRtJZuRn+C8xWT7GWnH0g==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb"
+ integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1, unist-util-stringify-position@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+ integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
+unist-util-visit-parents@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217"
+ integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==
+ dependencies:
+ unist-util-is "^2.1.2"
+
+unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1"
+ integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+universal-user-agent@^2.0.0, universal-user-agent@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c"
+ integrity sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g==
+ dependencies:
+ os-name "^3.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+untildify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0"
+ integrity sha1-F+soB5h/dpUunASF/DEdBqgmouA=
+ dependencies:
+ os-homedir "^1.0.0"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+update-check@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.1.tgz#24fc52266273cb8684d2f1bf9687c0e52dcf709f"
+ integrity sha512-M3rjq5KwSrWZrm2GVPIQIF+NXpIn5I9mIV67gGoydptQvzRjLp9ZbM6ctFJeNuaWSm5+mNP7aInELjSiLcIw6A==
+ dependencies:
+ registry-auth-token "3.3.2"
+ registry-url "3.1.0"
+
+update-notifier@^2.0.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
+ integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
+ dependencies:
+ boxen "^1.2.1"
+ chalk "^2.0.1"
+ configstore "^3.0.0"
+ import-lazy "^2.1.0"
+ is-ci "^1.0.10"
+ is-installed-globally "^0.1.0"
+ is-npm "^1.0.0"
+ latest-version "^3.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-template@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
+ integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
+
+url@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@~0.10.1:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
+ integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
+ dependencies:
+ inherits "2.0.3"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+ integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
+
+uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-location@^2.0.0, vfile-location@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55"
+ integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==
+
+vfile-message@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+ integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+ dependencies:
+ unist-util-stringify-position "^1.1.1"
+
+vfile-reporter@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-4.0.0.tgz#ea6f0ae1342f4841573985e05f941736f27de9da"
+ integrity sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=
+ dependencies:
+ repeat-string "^1.5.0"
+ string-width "^1.0.0"
+ supports-color "^4.1.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-statistics "^1.1.0"
+
+vfile-statistics@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.2.tgz#c50132627e4669a3afa07c64ff1e7aa7695e8151"
+ integrity sha512-16wAC9eEGXdsD35LX9m/iXCRIZyX5LIrDgDtAF92rbATSqsBRbC4n05e0Rj5vt3XRpcKu0UJeWnTxWsSyvNZ+w==
+
+vfile@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
+ integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
+ dependencies:
+ is-buffer "^1.1.4"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-message "^1.0.0"
+
+vm-browserify@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
+
+walk-sync@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4"
+ integrity sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==
+ dependencies:
+ ensure-posix-path "^1.0.0"
+ matcher-collection "^1.0.0"
+
+wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+ dependencies:
+ defaults "^1.0.3"
+
+webidl-conversions@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506"
+ integrity sha1-O/glj30xjHRDw28uFpQCoaZwNQY=
+
+whatwg-url-compat@~0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf"
+ integrity sha1-AImBEa9om7CXVBzVpFymyHmERb8=
+ dependencies:
+ tr46 "~0.0.1"
+
+which@^1.2.10, which@^1.2.9:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
+ dependencies:
+ string-width "^2.1.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
+
+windows-release@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f"
+ integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==
+ dependencies:
+ execa "^1.0.0"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+wrap-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+ integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+
+wrapped@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242"
+ integrity sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=
+ dependencies:
+ co "3.1.0"
+ sliced "^1.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write-file-atomic@^2.0.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9"
+ integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+ dependencies:
+ mkdirp "^0.5.1"
+
+x-is-function@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e"
+ integrity sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=
+
+x-is-string@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+ integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
+
+"xml-name-validator@>= 2.0.1 < 3.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+ integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=
+
+xmlbuilder@^9.0.7:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
+
+xmldom@0.1.x:
+ version "0.1.27"
+ resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
+ integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk=
+
+xregexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
+ integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
+ dependencies:
+ object-keys "~0.4.0"
+
+yallist@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yn@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
+ integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=
+
+yup@^0.26.10:
+ version "0.26.10"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1"
+ integrity sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==
+ dependencies:
+ "@babel/runtime" "7.0.0"
+ fn-name "~2.0.1"
+ lodash "^4.17.10"
+ property-expr "^1.5.0"
+ synchronous-promise "^2.0.5"
+ toposort "^2.0.2"
diff --git a/devel/electron6/pkg-descr b/devel/electron6/pkg-descr
new file mode 100644
index 000000000000..bb5485e9e735
--- /dev/null
+++ b/devel/electron6/pkg-descr
@@ -0,0 +1,10 @@
+Build cross platform desktop apps with JavaScript, HTML, and CSS.
+
+It's easier than you think.
+
+If you can build a website, you can build a desktop app. Electron is a
+framework for creating native applications with web technologies like
+JavaScript, HTML, and CSS. It takes care of the hard parts so you can
+focus on the core of your application.
+
+WWW: https://electronjs.org/
diff --git a/devel/electron6/pkg-plist b/devel/electron6/pkg-plist
new file mode 100644
index 000000000000..73456e413aad
--- /dev/null
+++ b/devel/electron6/pkg-plist
@@ -0,0 +1,124 @@
+bin/electron%%ELECTRON_VER_MAJOR%%
+%%DATADIR%%/LICENSE
+%%DATADIR%%/LICENSES.chromium.html
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DRIVER%%%%DATADIR%%/chromedriver
+%%DATADIR%%/electron
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/mksnapshot
+%%DATADIR%%/natives_blob.bin
+%%DATADIR%%/node_headers/include/node/common.gypi
+%%DATADIR%%/node_headers/include/node/config.gypi
+%%DATADIR%%/node_headers/include/node/js_native_api.h
+%%DATADIR%%/node_headers/include/node/js_native_api_types.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform-export.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform.h
+%%DATADIR%%/node_headers/include/node/libplatform/v8-tracing.h
+%%DATADIR%%/node_headers/include/node/node.h
+%%DATADIR%%/node_headers/include/node/node_api.h
+%%DATADIR%%/node_headers/include/node/node_api_types.h
+%%DATADIR%%/node_headers/include/node/node_buffer.h
+%%DATADIR%%/node_headers/include/node/node_object_wrap.h
+%%DATADIR%%/node_headers/include/node/node_version.h
+%%DATADIR%%/node_headers/include/node/uv.h
+%%DATADIR%%/node_headers/include/node/uv/aix.h
+%%DATADIR%%/node_headers/include/node/uv/android-ifaddrs.h
+%%DATADIR%%/node_headers/include/node/uv/bsd.h
+%%DATADIR%%/node_headers/include/node/uv/darwin.h
+%%DATADIR%%/node_headers/include/node/uv/errno.h
+%%DATADIR%%/node_headers/include/node/uv/linux.h
+%%DATADIR%%/node_headers/include/node/uv/os390.h
+%%DATADIR%%/node_headers/include/node/uv/posix.h
+%%DATADIR%%/node_headers/include/node/uv/stdint-msvc2008.h
+%%DATADIR%%/node_headers/include/node/uv/sunos.h
+%%DATADIR%%/node_headers/include/node/uv/threadpool.h
+%%DATADIR%%/node_headers/include/node/uv/tree.h
+%%DATADIR%%/node_headers/include/node/uv/unix.h
+%%DATADIR%%/node_headers/include/node/uv/version.h
+%%DATADIR%%/node_headers/include/node/uv/win.h
+%%DATADIR%%/node_headers/include/node/v8-internal.h
+%%DATADIR%%/node_headers/include/node/v8-platform.h
+%%DATADIR%%/node_headers/include/node/v8-profiler.h
+%%DATADIR%%/node_headers/include/node/v8-testing.h
+%%DATADIR%%/node_headers/include/node/v8-util.h
+%%DATADIR%%/node_headers/include/node/v8-value-serializer-version.h
+%%DATADIR%%/node_headers/include/node/v8-version-string.h
+%%DATADIR%%/node_headers/include/node/v8-version.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-posix.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-win.h
+%%DATADIR%%/node_headers/include/node/v8.h
+%%DATADIR%%/node_headers/include/node/v8config.h
+%%DATADIR%%/node_headers/include/node/zconf.h
+%%DATADIR%%/node_headers/include/node/zlib.h
+%%DIST%%%%DATADIR%%/releases/SHASUMS256.txt
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/default_app.asar
+%%DATADIR%%/resources/electron.asar
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DATADIR%%/v8_context_snapshot_generator
+%%DATADIR%%/version
diff --git a/devel/electron7/Makefile b/devel/electron7/Makefile
new file mode 100644
index 000000000000..ac9f6f120b5c
--- /dev/null
+++ b/devel/electron7/Makefile
@@ -0,0 +1,305 @@
+# $FreeBSD$
+
+PORTNAME= electron
+DISTVERSIONPREFIX= v
+DISTVERSION= ${ELECTRON_VER:S/-beta./.b/}
+PORTREVISION= 1
+CATEGORIES= devel java
+MASTER_SITES= https://github.com/tagattie/FreeBSD-Electron/releases/download/v7.1.5/:chromium \
+ https://commondatastorage.googleapis.com/chromium-browser-official/:chromium_official \
+ https://commondatastorage.googleapis.com/chromium-nodejs/:chromium_node \
+ https://commondatastorage.googleapis.com/chromium-fonts/:chromium_testfonts
+PKGNAMESUFFIX= ${ELECTRON_VER_MAJOR}
+DISTFILES= chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
+ chromium-${CHROMIUM_OFFICIAL_VER}${EXTRACT_SUFX}:chromium_official \
+ ${CHROMIUM_NODE_MODULES_HASH}:chromium_node \
+ ${CHROMIUM_TEST_FONTS_HASH}:chromium_testfonts \
+ electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= tagattie@FreeBSD.org
+COMMENT= Build cross-platform desktop apps with JavaScript, HTML, and CSS
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/electron/LICENSE
+
+FETCH_DEPENDS= yarn-node${NODE_VER_MAJOR}>0:www/yarn-node${NODE_VER_MAJOR}
+EXTRACT_DEPENDS= yarn-node${NODE_VER_MAJOR}>0:www/yarn-node${NODE_VER_MAJOR}
+PATCH_DEPENDS= git:devel/git
+BUILD_DEPENDS= ${LOCALBASE}/bin/ar:devel/binutils \
+ gperf:devel/gperf \
+ yasm:devel/yasm \
+ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
+ node${NODE_VER_MAJOR}>0:www/node${NODE_VER_MAJOR} \
+ npm-node${NODE_VER_MAJOR}>0:www/npm-node${NODE_VER_MAJOR}
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libatspi.so:accessibility/at-spi2-core \
+ libsnappy.so:archivers/snappy \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libdbus-1.so:devel/dbus \
+ libnotify.so:devel/libnotify \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libre2.so:devel/re2 \
+ libdrm.so:graphics/libdrm \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libopenh264.so:multimedia/openh264 \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+RUN_DEPENDS= xdg-open:devel/xdg-utils
+TEST_DEPENDS= git:devel/git \
+ ${PYTHON_PKGNAMEPREFIX}python-dbusmock>0:devel/py-python-dbusmock@${PY_FLAVOR} \
+ npm-node${NODE_VER_MAJOR}>0:www/npm-node${NODE_VER_MAJOR}
+
+USES= bison dos2unix gettext-tools gl gnome jpeg localbase:ldflags \
+ ninja pkgconfig python:2.7,build,test tar:xz xorg
+
+USE_GITHUB= yes
+GH_TAGNAME= ${DISTVERSIONPREFIX}${ELECTRON_VER}
+GH_TUPLE= nodejs:node:v${NODE_VER}:node \
+ nodejs:nan:${NAN_VER}:nan
+
+# Official chromium version containing "gn" which is known to work
+CHROMIUM_OFFICIAL_VER= 78.0.3904.108
+# See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
+CHROMIUM_VER= 78.0.3904.130
+# See ${WRKSRC}/third_party/node/node_modules.tar.gz.sha1 for CHROMIUM_NODE_MODULES_HASH
+CHROMIUM_NODE_MODULES_HASH= ab7f28fee456b5af5fbd3fcb5bcc7c61420788c9
+# See ${WRKSRC}/third_party/test_fonts/test_fonts.tar.gz.sha1 for CHROMIUM_TEST_FONTS_HASH
+CHROMIUM_TEST_FONTS_HASH= a22de844e32a3f720d219e3911c3da3478039f89
+# See ${WRKSRC}/electron/DEPS for NODE_VER
+NODE_VER= 12.8.1
+NODE_VER_MAJOR= ${NODE_VER:C/\..*$//}
+# See ${WRKSRC}/electron/DEPS for NAN_VER
+NAN_VER= 2ee313aaca52e2b478965ac50eb5082520380d1b
+
+NO_WRKSUBDIR= yes
+WRKSRC_SUBDIR= src
+
+DATADIR= ${PREFIX}/share/${PORTNAME}${PKGNAMESUFFIX}
+
+DOS2UNIX_FILES= third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrandr \
+ xrender xscrnsaver xtst
+USE_GL= gl glesv2
+USE_GNOME= atk cairo pango gdkpixbuf2 gtk30 libxml2 libxslt
+USE_JAVA= yes
+JAVA_VERSION= 1.8
+JAVA_BUILD= yes
+
+USE_LDCONFIG= ${DATADIR}
+
+GN_ARGS+= clang_use_chrome_plugins=false \
+ enable_hangout_services_extension=true \
+ enable_nacl=false \
+ enable_one_click_signin=true \
+ enable_remoting=false \
+ fieldtrial_testing_like_official_build=true \
+ is_clang=true \
+ toolkit_views=true \
+ treat_warnings_as_errors=false \
+ use_allocator="none" \
+ use_allocator_shim=false \
+ use_aura=true \
+ use_bundled_fontconfig=false \
+ use_custom_libcxx=false \
+ use_gnome_keyring=false \
+ use_jumbo_build=true \
+ use_lld=true \
+ use_sysroot=false \
+ use_system_freetype=true \
+ use_system_harfbuzz=true \
+ use_system_libjpeg=true \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
+
+ALL_TARGET= electron third_party/electron_node:headers
+MAKE_ARGS= -C out/${BUILDTYPE}
+MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
+ CPLUS_INCLUDE_PATH=${LOCALBASE}/include
+
+OPTIONS_DEFINE= CUPS DEBUG DIST DRIVER KERBEROS
+DIST_DESC= Build distribution zip files
+DRIVER_DESC= Install chromedriver
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO
+OPTIONS_DEFAULT= CUPS DRIVER KERBEROS ALSA
+OPTIONS_SUB= yes
+
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins
+ALSA_VARS= GN_ARGS+=use_alsa=true
+ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
+
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+CUPS_VARS= GN_ARGS+=use_cups=true
+CUPS_VARS_OFF= GN_ARGS+=use_cups=false
+
+DEBUG_VARS= BUILDTYPE=Debug \
+ GN_ARGS+=is_component_build=false
+DEBUG_VARS_OFF= BUILDTYPE=Release
+
+DIST_IMPLIES= DRIVER
+
+DRIVER_ALL_TARGET= chromedriver
+
+KERBEROS_VARS= GN_ARGS+=use_kerberos=true
+KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
+PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
+
+POST_BUILD_TARGETS= licenses version
+POST_BUILD_DIST_TARGETS= electron_dist_zip electron_chromedriver_zip electron_mksnapshot_zip
+
+YARN_TIMESTAMP= 1591165014
+
+PLIST_SUB= ELECTRON_VER=${ELECTRON_VER} \
+ ELECTRON_VER_MAJOR=${ELECTRON_VER_MAJOR}
+
+.include "Makefile.version"
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "amd64"
+PLIST_SUB+= AMD64=""
+.else
+PLIST_SUB+= AMD64="@comment "
+.endif
+
+.if ${ARCH} == "i386"
+PLIST_SUB+= I386=""
+.else
+PLIST_SUB+= I386="@comment "
+.endif
+
+pre-fetch:
+ @${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
+ if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} ]; \
+ then ${MKDIR} ${WRKDIR}; \
+ ${ECHO_CMD} 'yarn-offline-mirror "./yarn-offline-cache"' >> \
+ ${WRKDIR}/.yarnrc; \
+ ${CP} ${FILESDIR}/package.json ${FILESDIR}/yarn.lock ${WRKDIR}; \
+ cd ${WRKDIR} && ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache \
+ yarn --frozen-lockfile --ignore-scripts; \
+ ${MTREE_CMD} -cbnSp yarn-offline-cache | ${MTREE_CMD} -C | ${SED} \
+ -e 's:time=[0-9.]*:time=${YARN_TIMESTAMP}.000000000:' \
+ -e 's:\([gu]id\)=[0-9]*:\1=0:g' \
+ -e 's:flags=.*:flags=none:' \
+ -e 's:^\.:./yarn-offline-cache:' > yarn-offline-cache.mtree; \
+ ${TAR} cJf ${DISTDIR}/${DIST_SUBDIR}/electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX} \
+ @yarn-offline-cache.mtree; \
+ ${RM} -r ${WRKDIR}; \
+ fi
+
+post-extract:
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
+ ${RM} -r ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_OFFICIAL_VER}/tools/gn \
+ ${WRKSRC}/tools/gn
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${PORTNAME}-${ELECTRON_VER} ${WRKSRC}/electron
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_nan}-${NAN_VER} \
+ ${WRKSRC}/third_party/nan
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/${GH_PROJECT_node}-${NODE_VER} \
+ ${WRKSRC}/third_party/electron_node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/yarn-offline-cache ${WRKDIR}
+ ${ECHO_CMD} 'yarn-offline-mirror "../../../yarn-offline-cache"' >> ${WRKSRC}/electron/.yarnrc
+ cd ${WRKSRC}/electron && \
+ ${SETENV} HOME=${WRKDIR} XDG_CACHE_HOME=${WRKDIR}/.cache yarn --frozen-lockfile --offline
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/node_modules ${WRKSRC}/third_party/node
+ ${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/test_fonts ${WRKSRC}/third_party/test_fonts
+
+pre-patch:
+ ${SH} ${FILESDIR}/apply-electron-patches.sh ${WRKSRC}
+ # ${FIND} ${WRKSRC} -type f -name '*.orig' -print -delete
+ # ${FIND} ${WRKSRC} -type f -name '*~' -print -delete
+
+pre-configure:
+ # We used to remove bundled libraries to be sure that chromium uses
+ # system libraries and not shipped ones.
+ # cd ${WRKSRC} && ${PYTHON_CMD} \
+ #./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
+ ./build/linux/unbundle/replace_gn_files.py --system-libraries \
+ ffmpeg flac freetype harfbuzz-ng libdrm libusb libwebp libxml \
+ libxslt openh264 opus snappy yasm || ${FALSE}
+
+do-configure:
+ # GN generator bootstrapping and generating ninja files
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
+ READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
+ ./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn gen out/${BUILDTYPE} \
+ --args='import("//electron/build/args/${BUILDTYPE:tl}.gn") ${GN_ARGS}'
+ # Setup nodejs dependency
+ ${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin
+ ${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin/node
+ # Setup java dependency
+ ${MKDIR} ${WRKDIR}/bin
+ ${LN} -sf ${LOCALBASE}/openjdk8/bin/java ${WRKDIR}/bin/java
+
+post-build:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_TARGETS}
+
+post-build-DIST-on:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ${MAKE_CMD} ${MAKE_ARGS} ${POST_BUILD_DIST_TARGETS}
+ cd ${WRKSRC}/out/${BUILDTYPE} && \
+ ${CP} chromedriver.zip chromedriver-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} dist.zip electron-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${CP} mksnapshot.zip mksnapshot-v${ELECTRON_VER}-freebsd-${ARCH:S/amd64/x64/:S/i386/ia32/}.zip && \
+ ${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | ${SED} -e 's/ / */' > SHASUMS256.txt
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+.for f in electron mksnapshot v8_context_snapshot_generator
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/swiftshader
+.for f in libEGL.so libGLESv2.so libvk_swiftshader.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/swiftshader/${f} ${STAGEDIR}${DATADIR}/swiftshader
+.endfor
+.for f in LICENSE LICENSES.chromium.html icudtl.dat natives_blob.bin snapshot_blob.bin v8_context_snapshot.bin version
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+.for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+ ${MKDIR} ${STAGEDIR}${DATADIR}/locales
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/locales/*.pak ${STAGEDIR}${DATADIR}/locales
+ ${MKDIR} ${STAGEDIR}${DATADIR}/resources
+.for f in default_app.asar
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/resources/${f} ${STAGEDIR}${DATADIR}/resources
+.endfor
+ cd ${WRKSRC}/out/${BUILDTYPE}/gen && ${COPYTREE_SHARE} node_headers ${STAGEDIR}${DATADIR}
+ ${RLN} ${STAGEDIR}${DATADIR}/electron ${STAGEDIR}${PREFIX}/bin/electron${PKGNAMESUFFIX}
+
+post-install-DIST-on:
+ ${MKDIR} ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/SHASUMS256.txt ${STAGEDIR}${DATADIR}/releases
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*-v${ELECTRON_VER}-freebsd-*.zip ${STAGEDIR}${DATADIR}/releases
+
+post-install-DRIVER-on:
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chromedriver ${STAGEDIR}${DATADIR}
+
+do-test:
+ # Note 1: "npm install" will run before actual tests are executed
+ # Note 2: Xvfb or something similar is necessary for headless testing
+ cd ${WRKSRC}/electron && \
+ ${SETENV} ${TEST_ENV} ELECTRON_OUT_DIR=${BUILDTYPE} LOCAL_GIT_DIRECTORY=${LOCALBASE} \
+ npm run test -- --ci
+
+.include <bsd.port.post.mk>
diff --git a/devel/electron7/Makefile.version b/devel/electron7/Makefile.version
new file mode 100644
index 000000000000..d1f814117325
--- /dev/null
+++ b/devel/electron7/Makefile.version
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+ELECTRON_VER= 7.3.1
+ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron7/distinfo b/devel/electron7/distinfo
new file mode 100644
index 000000000000..3f5bb58f593d
--- /dev/null
+++ b/devel/electron7/distinfo
@@ -0,0 +1,17 @@
+TIMESTAMP = 1591165606
+SHA256 (electron/chromium-78.0.3904.130.tar.xz) = 6f9656a345e8cd4938520a70d1979672190f386ac710421be8d32cb542008fc2
+SIZE (electron/chromium-78.0.3904.130.tar.xz) = 1405077664
+SHA256 (electron/chromium-78.0.3904.108.tar.xz) = f9c53839f306d2973de27723360024f7904101d426b9e7e9cdb56e8bcc775b0e
+SIZE (electron/chromium-78.0.3904.108.tar.xz) = 742906260
+SHA256 (electron/ab7f28fee456b5af5fbd3fcb5bcc7c61420788c9) = a45b953ebd15f4f13f1e0c675ccf59e9ed0352049497c4bea0111dbc2c9a5997
+SIZE (electron/ab7f28fee456b5af5fbd3fcb5bcc7c61420788c9) = 4593699
+SHA256 (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 6e331676d098a57c53c1250821dc47ed84c47f823901bf30c4704df90d8a34be
+SIZE (electron/a22de844e32a3f720d219e3911c3da3478039f89) = 17469927
+SHA256 (electron/electron-yarn-cache-7.3.1.tar.xz) = e927298e19105f59c3cd444512b1affc12ceb6909f98d5a53221faa4d757c4f9
+SIZE (electron/electron-yarn-cache-7.3.1.tar.xz) = 24834380
+SHA256 (electron/electron-electron-v7.3.1_GH0.tar.gz) = d6e6baed5cc37065236fa881ff77188e68712402886da90ed0700e2d4de7f533
+SIZE (electron/electron-electron-v7.3.1_GH0.tar.gz) = 5451776
+SHA256 (electron/nodejs-node-v12.8.1_GH0.tar.gz) = 11648d586f68ee5fc38e4cadf3974541aac4a67709fa028e9075aff42e28d9b9
+SIZE (electron/nodejs-node-v12.8.1_GH0.tar.gz) = 72104419
+SHA256 (electron/nodejs-nan-2ee313aaca52e2b478965ac50eb5082520380d1b_GH0.tar.gz) = e6d0727f2f33d6c0fdbee3182543cb23679551dc15318cc8a2489901eabe9915
+SIZE (electron/nodejs-nan-2ee313aaca52e2b478965ac50eb5082520380d1b_GH0.tar.gz) = 173099
diff --git a/devel/electron7/files/apply-electron-patches.sh b/devel/electron7/files/apply-electron-patches.sh
new file mode 100644
index 000000000000..17365d1f06b1
--- /dev/null
+++ b/devel/electron7/files/apply-electron-patches.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+PATH=/bin:/usr/bin:/usr/local/bin
+
+PATCH_CMD="git apply"
+#PATCH_FLAGS="--numstat --check" # for debugging
+PATCH_FLAGS="--verbose --reject"
+
+WRKSRC=$1
+PATCH_CONF=${WRKSRC}/electron/patches/config.json
+
+PATCHD_REPOD_PAIRS=$(sed -e '1d; $d; /^$/d; s/[",]//g; s/: */:/' "${PATCH_CONF}")
+for prp in ${PATCHD_REPOD_PAIRS}; do
+ pd=$(echo "${prp}" | awk -F: '{print $1}' | sed -e 's/src/./')
+ rd=$(echo "${prp}" | awk -F: '{print $2}' | sed -e 's/src/./')
+ (cd "${WRKSRC}/${rd}" && \
+ while read -r p; do
+ ${PATCH_CMD} ${PATCH_FLAGS} "${WRKSRC}/${pd}/${p}"
+ done < "${WRKSRC}/${pd}/.patches")
+done
diff --git a/devel/electron7/files/package.json b/devel/electron7/files/package.json
new file mode 100644
index 000000000000..cbf8bdb1d424
--- /dev/null
+++ b/devel/electron7/files/package.json
@@ -0,0 +1,129 @@
+{
+ "name": "electron",
+ "version": "7.3.1",
+ "repository": "https://github.com/electron/electron",
+ "description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
+ "devDependencies": {
+ "@electron/docs-parser": "^0.4.2",
+ "@electron/typescript-definitions": "^8.6.4",
+ "@octokit/rest": "^16.3.2",
+ "@primer/octicons": "^9.1.1",
+ "@types/chai": "^4.1.7",
+ "@types/chai-as-promised": "^7.1.0",
+ "@types/express": "^4.16.1",
+ "@types/fs-extra": "^5.0.5",
+ "@types/mocha": "^5.2.6",
+ "@types/node": "^12.0.10",
+ "@types/semver": "^6.0.1",
+ "@types/split": "^1.0.0",
+ "@types/webpack": "^4.4.32",
+ "@types/webpack-env": "^1.13.9",
+ "@typescript-eslint/eslint-plugin": "^1.4.2",
+ "@typescript-eslint/parser": "^1.4.2",
+ "asar": "^1.0.0",
+ "check-for-leaks": "^1.2.1",
+ "colors": "^1.1.2",
+ "dotenv-safe": "^4.0.4",
+ "dugite": "^1.45.0",
+ "eslint": "^5.13.0",
+ "eslint-config-standard": "^12.0.0",
+ "eslint-plugin-import": "^2.17.2",
+ "eslint-plugin-mocha": "^5.2.0",
+ "eslint-plugin-node": "^8.0.1",
+ "eslint-plugin-standard": "^4.0.0",
+ "eslint-plugin-typescript": "^0.14.0",
+ "express": "^4.16.4",
+ "folder-hash": "^2.1.1",
+ "fs-extra": "^7.0.1",
+ "husky": "^2.2.0",
+ "klaw": "^3.0.0",
+ "lint": "^1.1.2",
+ "lint-staged": "^8.1.0",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "pre-flight": "^1.1.0",
+ "remark-cli": "^4.0.0",
+ "remark-preset-lint-markdown-style-guide": "^2.1.1",
+ "request": "^2.88.0",
+ "semver": "^5.6.0",
+ "shx": "^0.3.2",
+ "standard-markdown": "^5.0.0",
+ "sumchecker": "^2.0.2",
+ "tap-xunit": "^2.4.1",
+ "temp": "^0.8.3",
+ "timers-browserify": "1.4.2",
+ "ts-loader": "^6.0.2",
+ "ts-node": "^6.0.3",
+ "typescript": "^3.5.2",
+ "webpack": "^4.32.2",
+ "webpack-cli": "^3.3.2"
+ },
+ "private": true,
+ "scripts": {
+ "asar": "asar",
+ "generate-version-json": "node script/generate-version-json.js",
+ "lint": "node ./script/lint.js && npm run lint:clang-format && npm run lint:docs",
+ "lint:js": "node ./script/lint.js --js",
+ "lint:clang-format": "python script/run-clang-format.py -r -c atom/ chromium_src/ || (echo \"\\nCode not formatted correctly.\" && exit 1)",
+ "lint:cpp": "node ./script/lint.js --cc",
+ "lint:objc": "node ./script/lint.js --objc",
+ "lint:py": "node ./script/lint.js --py",
+ "lint:gn": "node ./script/lint.js --gn",
+ "lint:docs": "remark docs -qf && npm run lint:js-in-markdown && npm run create-typescript-definitions && npm run lint:docs-relative-links && npm run lint:check-trailing-whitespace",
+ "lint:docs-relative-links": "python ./script/check-relative-doc-links.py",
+ "lint:check-trailing-whitespace": "python ./script/check-trailing-whitespace.py",
+ "lint:js-in-markdown": "standard-markdown docs",
+ "create-api-json": "electron-docs-parser --dir=./",
+ "create-typescript-definitions": "npm run create-api-json && electron-typescript-definitions --api=electron-api.json && node spec/ts-smoke/runner.js",
+ "gn-typescript-definitions": "npm run create-typescript-definitions && shx cp electron.d.ts",
+ "pre-flight": "pre-flight",
+ "preinstall": "node -e 'process.exit(0)'",
+ "prepack": "check-for-leaks",
+ "repl": "node ./script/start.js --interactive",
+ "start": "node ./script/start.js",
+ "test": "node ./script/spec-runner.js",
+ "tsc": "tsc",
+ "webpack": "node build/webpack/run-compiler"
+ },
+ "license": "MIT",
+ "author": "Electron Community",
+ "keywords": [
+ "electron"
+ ],
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged",
+ "pre-push": "check-for-leaks"
+ }
+ },
+ "lint-staged": {
+ "*.{js,ts}": [
+ "node script/lint.js --js --fix --only --",
+ "git add"
+ ],
+ "*.{js,ts,d.ts}": [
+ "node script/gen-filenames.js",
+ "git add"
+ ],
+ "*.{cc,mm,c,h}": [
+ "python script/run-clang-format.py -r -c --fix",
+ "git add"
+ ],
+ "*.md": [
+ "remark -qf"
+ ],
+ "*.{gn,gni}": [
+ "python script/run-gn-format.py",
+ "git add"
+ ],
+ "*.py": [
+ "node script/lint.js --py --fix --only --",
+ "git add"
+ ],
+ "docs/api/**/*.md": [
+ "node script/gen-filenames.js",
+ "python script/check-trailing-whitespace.py --fix",
+ "git add filenames.auto.gni"
+ ]
+ }
+}
diff --git a/devel/electron7/files/patch-BUILD.gn b/devel/electron7/files/patch-BUILD.gn
new file mode 100644
index 000000000000..ace8ea6c33f9
--- /dev/null
+++ b/devel/electron7/files/patch-BUILD.gn
@@ -0,0 +1,95 @@
+--- BUILD.gn.orig 2019-12-12 12:38:54 UTC
++++ BUILD.gn
+@@ -404,7 +404,7 @@ group("gn_all") {
+ ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ deps += [
+ "//third_party/breakpad:breakpad_unittests",
+ "//third_party/breakpad:core-2-minidump",
+@@ -445,8 +445,6 @@ group("gn_all") {
+ "//net:disk_cache_memory_test",
+ "//net:quic_client",
+ "//net:quic_server",
+- "//sandbox/linux:chrome_sandbox",
+- "//sandbox/linux:sandbox_linux_unittests",
+ "//testing:empty_main",
+ ]
+
+@@ -501,10 +499,6 @@ group("gn_all") {
+ "//chrome/test:load_library_perf_tests",
+ "//chrome/test:sync_performance_tests",
+ "//chrome/test/chromedriver:chromedriver",
+- "//courgette:courgette",
+- "//courgette:courgette_fuzz",
+- "//courgette:courgette_minimal_tool",
+- "//courgette:courgette_unittests",
+ "//media/cast:generate_barcode_video",
+ "//media/cast:generate_timecode_audio",
+ "//net:crash_cache",
+@@ -560,10 +554,6 @@ group("gn_all") {
+ "//mojo:mojo_perftests",
+ "//services/service_manager/public/cpp",
+ "//testing/gmock:gmock_main",
+- "//third_party/breakpad:dump_syms($host_toolchain)",
+- "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+- "//third_party/breakpad:minidump_dump($host_toolchain)",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+
+ if (!is_android) {
+@@ -637,7 +627,7 @@ group("gn_all") {
+ host_os == "win") {
+ deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
+ }
+- } else if (!is_android && !is_ios && !is_fuchsia) {
++ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
+ deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+ }
+
+@@ -776,7 +766,6 @@ group("gn_all") {
+ "//chrome/browser/vr:vr_common_perftests",
+ "//chrome/browser/vr:vr_common_unittests",
+ "//chrome/browser/vr:vr_pixeltests",
+- "//tools/perf/contrib/vr_benchmarks:vr_perf_tests",
+ ]
+ if (is_desktop_linux && use_ozone) {
+ deps += [ "//chrome/browser/vr/testapp:vr_testapp" ]
+@@ -896,7 +885,6 @@ if (is_chromeos) {
+ "//ppapi/examples/video_decode",
+ "//sandbox/linux:chrome_sandbox",
+ "//sandbox/linux:sandbox_linux_unittests",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+
+ # Blocked on https://github.com/catapult-project/catapult/issues/2297
+ #"//third_party/catapult/telemetry:bitmaptools",
+@@ -1065,7 +1053,7 @@ if (!is_ios) {
+ ]
+ }
+
+- if (!is_win && !is_android) {
++ if (!is_win && !is_android && !is_bsd) {
+ data_deps +=
+ [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+@@ -1074,7 +1062,7 @@ if (!is_ios) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+@@ -1216,9 +1204,6 @@ group("chromium_builder_perf") {
+
+ if (is_win) {
+ data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
+- } else {
+- data_deps +=
+- [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+ if (is_win || is_android) {
+ data_deps += [
diff --git a/devel/electron7/files/patch-apps_ui_views_app__window__frame__view.cc b/devel/electron7/files/patch-apps_ui_views_app__window__frame__view.cc
new file mode 100644
index 000000000000..21df7f2cc178
--- /dev/null
+++ b/devel/electron7/files/patch-apps_ui_views_app__window__frame__view.cc
@@ -0,0 +1,11 @@
+--- apps/ui/views/app_window_frame_view.cc.orig 2019-12-12 12:38:55 UTC
++++ apps/ui/views/app_window_frame_view.cc
+@@ -125,7 +125,7 @@ gfx::Rect AppWindowFrameView::GetBoundsForClientView()
+ gfx::Rect AppWindowFrameView::GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ gfx::Rect window_bounds = client_bounds;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Get the difference between the widget's client area bounds and window
+ // bounds, and grow |window_bounds| by that amount.
+ gfx::Insets native_frame_insets =
diff --git a/devel/electron7/files/patch-ash_display_mirror__window__controller.cc b/devel/electron7/files/patch-ash_display_mirror__window__controller.cc
new file mode 100644
index 000000000000..96e2248cf8d6
--- /dev/null
+++ b/devel/electron7/files/patch-ash_display_mirror__window__controller.cc
@@ -0,0 +1,14 @@
+--- ash/display/mirror_window_controller.cc.orig 2019-12-12 12:38:55 UTC
++++ ash/display/mirror_window_controller.cc
+@@ -274,7 +274,11 @@ void MirrorWindowController::UpdateWindow(
+ return info.id() == iter->first;
+ }) == display_info_list.end()) {
+ CloseAndDeleteHost(iter->second, true);
++#if defined(__llvm__)
++ mirroring_host_info_map_.erase(iter++);
++#else
+ iter = mirroring_host_info_map_.erase(iter);
++#endif
+ } else {
+ ++iter;
+ }
diff --git a/devel/electron7/files/patch-base_BUILD.gn b/devel/electron7/files/patch-base_BUILD.gn
new file mode 100644
index 000000000000..7da1e0702910
--- /dev/null
+++ b/devel/electron7/files/patch-base_BUILD.gn
@@ -0,0 +1,67 @@
+--- base/BUILD.gn.orig 2019-12-12 12:38:58 UTC
++++ base/BUILD.gn
+@@ -1266,7 +1266,7 @@ jumbo_component("base") {
+ # Needed for <atomic> if using newer C++ library than sysroot, except if
+ # building inside the cros_sdk environment - use host_toolchain as a
+ # more robust check for this.
+- if (!use_sysroot && (is_android || (is_linux && !is_chromecast)) &&
++ if (!use_sysroot && (is_android || (is_linux && !is_chromecast) && !is_clang) &&
+ host_toolchain != "//build/toolchain/cros:host") {
+ libs += [ "atomic" ]
+ }
+@@ -1292,7 +1292,7 @@ jumbo_component("base") {
+ "allocator/allocator_shim_override_glibc_weak_symbols.h",
+ ]
+ deps += [ "//base/allocator:tcmalloc" ]
+- } else if (is_linux && use_allocator == "none") {
++ } else if ((is_linux && !is_bsd) && use_allocator == "none") {
+ sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
+ } else if (is_android && use_allocator == "none") {
+ sources += [
+@@ -1893,6 +1893,33 @@ jumbo_component("base") {
+ }
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "files/file_path_watcher_linux.cc",
++ "files/file_util_linux.cc",
++ "process/memory_linux.cc",
++ "process/process_handle_linux.cc",
++ "process/process_iterator_linux.cc",
++ "process/process_metrics_linux.cc",
++ "system/sys_info_linux.cc"
++ ]
++ sources += [
++ "files/file_path_watcher_kqueue.cc",
++ "files/file_path_watcher_kqueue.h",
++ "files/file_path_watcher_stub.cc",
++ "process/memory_stubs.cc",
++ "process/process_handle_freebsd.cc",
++ "process/process_iterator_freebsd.cc",
++ "process/process_metrics_freebsd.cc",
++ "system/sys_info_freebsd.cc",
++ ]
++ libs = [
++ "execinfo", # logging.cc
++ "kvm", # process_metrics_freebsd
++ "util" # process_metrics_freebsd
++ ]
++ }
++
+ # iOS
+ if (is_ios) {
+ set_sources_assignment_filter([])
+@@ -3041,6 +3068,12 @@ test("base_unittests") {
+ ]
+ set_sources_assignment_filter(sources_assignment_filter)
+ }
++
++ if (is_bsd) {
++ sources -= [
++ "debug/proc_maps_linux_unittest.cc",
++ ]
++ }
+
+ if (is_win) {
+ deps += [ "//base:scoped_handle_test_dll" ]
diff --git a/devel/electron7/files/patch-base_allocator_allocator__shim.cc b/devel/electron7/files/patch-base_allocator_allocator__shim.cc
new file mode 100644
index 000000000000..fbf962ab5979
--- /dev/null
+++ b/devel/electron7/files/patch-base_allocator_allocator__shim.cc
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim.cc.orig 2019-12-12 12:38:58 UTC
++++ base/allocator/allocator_shim.cc
+@@ -71,7 +71,7 @@ inline const base::allocator::AllocatorDispatch* GetCh
+ // Unfortunately due to that bug NoBarrier_Load() is mistakenly fully
+ // barriered on Linux+Clang, and that causes visible perf regressons.
+ return reinterpret_cast<const base::allocator::AllocatorDispatch*>(
+-#if defined(OS_LINUX) && defined(__clang__)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(__clang__)
+ *static_cast<const volatile base::subtle::AtomicWord*>(&g_chain_head)
+ #else
+ base::subtle::NoBarrier_Load(&g_chain_head)
diff --git a/devel/electron7/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc b/devel/electron7/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
new file mode 100644
index 000000000000..c9a46f3fa08b
--- /dev/null
+++ b/devel/electron7/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
@@ -0,0 +1,76 @@
+--- base/allocator/allocator_shim_default_dispatch_to_glibc.cc.orig 2019-12-12 12:38:58 UTC
++++ base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+@@ -5,18 +5,28 @@
+ #include "base/allocator/allocator_shim.h"
+
+ #include <dlfcn.h>
+-#include <malloc.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc_np.h>
+
+ // This translation unit defines a default dispatch for the allocator shim which
+ // routes allocations to libc functions.
+-// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
++// The code here is strongly inspired from tcmalloc's override_glibc.h.
+
+ extern "C" {
+-void* __libc_malloc(size_t size);
+-void* __libc_calloc(size_t n, size_t size);
+-void* __libc_realloc(void* address, size_t size);
+-void* __libc_memalign(size_t alignment, size_t size);
+-void __libc_free(void* ptr);
++void* __malloc(size_t size);
++void* __calloc(size_t n, size_t size);
++void* __realloc(void* address, size_t len);
++void* __memalign(size_t alignment, size_t size) {
++ void *ret;
++ if (__posix_memalign(&ret, alignment, size) != 0) {
++ return nullptr;
++ } else {
++ return ret;
++ }
++}
++int __posix_memalign(void **ptr, size_t alignment, size_t size);
++void __free(void* ptr);
+ } // extern "C"
+
+ namespace {
+@@ -24,32 +34,32 @@ namespace {
+ using base::allocator::AllocatorDispatch;
+
+ void* GlibcMalloc(const AllocatorDispatch*, size_t size, void* context) {
+- return __libc_malloc(size);
++ return __malloc(size);
+ }
+
+ void* GlibcCalloc(const AllocatorDispatch*,
+ size_t n,
+ size_t size,
+ void* context) {
+- return __libc_calloc(n, size);
++ return __calloc(n, size);
+ }
+
+ void* GlibcRealloc(const AllocatorDispatch*,
+ void* address,
+ size_t size,
+ void* context) {
+- return __libc_realloc(address, size);
++ return __realloc(address, size);
+ }
+
+ void* GlibcMemalign(const AllocatorDispatch*,
+ size_t alignment,
+ size_t size,
+ void* context) {
+- return __libc_memalign(alignment, size);
++ return __memalign(alignment, size);
+ }
+
+ void GlibcFree(const AllocatorDispatch*, void* address, void* context) {
+- __libc_free(address);
++ __free(address);
+ }
+
+ size_t GlibcGetSizeEstimate(const AllocatorDispatch*,
diff --git a/devel/electron7/files/patch-base_allocator_allocator__shim__override__libc__symbols.h b/devel/electron7/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
new file mode 100644
index 000000000000..6aac722ab545
--- /dev/null
+++ b/devel/electron7/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim_override_libc_symbols.h.orig 2019-12-12 12:38:58 UTC
++++ base/allocator/allocator_shim_override_libc_symbols.h
+@@ -10,7 +10,7 @@
+ #endif
+ #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_LIBC_SYMBOLS_H_
+
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "base/allocator/allocator_shim_internals.h"
+
diff --git a/devel/electron7/files/patch-base_allocator_allocator__shim__unittest.cc b/devel/electron7/files/patch-base_allocator_allocator__shim__unittest.cc
new file mode 100644
index 000000000000..922debaed2f8
--- /dev/null
+++ b/devel/electron7/files/patch-base_allocator_allocator__shim__unittest.cc
@@ -0,0 +1,36 @@
+--- base/allocator/allocator_shim_unittest.cc.orig 2019-12-12 12:38:58 UTC
++++ base/allocator/allocator_shim_unittest.cc
+@@ -348,7 +348,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_size[61], 1u);
+ #endif // !OS_WIN
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void* memalign_ptr = memalign(128, 53);
+ ASSERT_NE(nullptr, memalign_ptr);
+ ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(memalign_ptr) % 128);
+@@ -361,7 +361,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_alignment[kPageSize], 1u);
+ // pvalloc rounds the size up to the next page.
+ ASSERT_GE(aligned_allocs_intercepted_by_size[kPageSize], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ char* realloc_ptr = static_cast<char*>(malloc(10));
+ strcpy(realloc_ptr, "foobar");
+@@ -377,13 +377,13 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ free(zero_alloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(zero_alloc_ptr)], 1u);
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ free(memalign_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
+
+ free(pvalloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ #if !defined(OS_WIN)
+ free(posix_memalign_ptr);
diff --git a/devel/electron7/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h b/devel/electron7/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..a5d875eba33f
--- /dev/null
+++ b/devel/electron7/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,11 @@
+--- base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-12-12 12:38:58 UTC
++++ base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -19,7 +19,7 @@
+ #if defined(OS_ANDROID)
+ #include <sys/prctl.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_BSD) || defined(OS_LINUX)
+ #include <sys/resource.h>
+
+ #include <algorithm>
diff --git a/devel/electron7/files/patch-base_base__switches.cc b/devel/electron7/files/patch-base_base__switches.cc
new file mode 100644
index 000000000000..635b2a537404
--- /dev/null
+++ b/devel/electron7/files/patch-base_base__switches.cc
@@ -0,0 +1,20 @@
+--- base/base_switches.cc.orig 2019-12-12 12:38:58 UTC
++++ base/base_switches.cc
+@@ -117,7 +117,7 @@ const char kDisableHighResTimer[] = "disable-highres-t
+ const char kDisableUsbKeyboardDetect[] = "disable-usb-keyboard-detect";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The /dev/shm partition is too small in certain VM environments, causing
+ // Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
+ // work-around this issue (a temporary directory will always be used to create
+@@ -138,7 +138,7 @@ const char kEnableCrashReporterForTesting[] =
+ const char kEnableReachedCodeProfiler[] = "enable-reached-code-profiler";
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Controls whether or not retired instruction counts are surfaced for threads
+ // in trace events on Linux.
+ //
diff --git a/devel/electron7/files/patch-base_base__switches.h b/devel/electron7/files/patch-base_base__switches.h
new file mode 100644
index 000000000000..4f517f709081
--- /dev/null
+++ b/devel/electron7/files/patch-base_base__switches.h
@@ -0,0 +1,20 @@
+--- base/base_switches.h.orig 2019-12-12 12:38:58 UTC
++++ base/base_switches.h
+@@ -38,7 +38,7 @@ extern const char kDisableHighResTimer[];
+ extern const char kDisableUsbKeyboardDetect[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kDisableDevShmUsage[];
+ #endif
+
+@@ -51,7 +51,7 @@ extern const char kEnableReachedCodeProfiler[];
+ extern const char kOrderfileMemoryOptimization[];
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kEnableThreadInstructionCount[];
+ #endif
+
diff --git a/devel/electron7/files/patch-base_cpu.cc b/devel/electron7/files/patch-base_cpu.cc
new file mode 100644
index 000000000000..305d0cddb866
--- /dev/null
+++ b/devel/electron7/files/patch-base_cpu.cc
@@ -0,0 +1,38 @@
+--- base/cpu.cc.orig 2019-12-12 12:38:58 UTC
++++ base/cpu.cc
+@@ -14,7 +14,7 @@
+
+ #include "base/stl_util.h"
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/files/file_util.h"
+ #endif
+
+@@ -135,7 +135,7 @@ uint64_t xgetbv(uint32_t xcr) {
+
+ #endif // ARCH_CPU_X86_FAMILY
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ std::string* CpuInfoBrand() {
+ static std::string* brand = []() {
+ // This function finds the value from /proc/cpuinfo under the key "model
+@@ -165,7 +165,7 @@ std::string* CpuInfoBrand() {
+ return brand;
+ }
+ #endif // defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) ||
+- // defined(OS_LINUX))
++ // defined(OS_LINUX) || defined(OS_BSD))
+
+ } // namespace
+
+@@ -287,7 +287,7 @@ void CPU::Initialize() {
+ }
+ }
+ #elif defined(ARCH_CPU_ARM_FAMILY)
+-#if (defined(OS_ANDROID) || defined(OS_LINUX))
++#if (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ cpu_brand_ = *CpuInfoBrand();
+ #elif defined(OS_WIN)
+ // Windows makes high-resolution thread timing information available in
diff --git a/devel/electron7/files/patch-base_debug_debugger__posix.cc b/devel/electron7/files/patch-base_debug_debugger__posix.cc
new file mode 100644
index 000000000000..b0046e50c906
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_debugger__posix.cc
@@ -0,0 +1,56 @@
+--- base/debug/debugger_posix.cc.orig 2019-12-12 12:38:58 UTC
++++ base/debug/debugger_posix.cc
+@@ -90,7 +90,7 @@ bool BeingDebugged() {
+ KERN_PROC,
+ KERN_PROC_PID,
+ getpid()
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ , sizeof(struct kinfo_proc),
+ 0
+ #endif
+@@ -98,33 +98,35 @@ bool BeingDebugged() {
+
+ // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
+ // binary interfaces may change.
+- struct kinfo_proc info;
+- size_t info_size = sizeof(info);
++ struct kinfo_proc *info;
++ size_t info_size;
+
+-#if defined(OS_OPENBSD)
+ if (sysctl(mib, base::size(mib), NULL, &info_size, NULL, 0) < 0)
+ return -1;
+
++ info = (struct kinfo_proc *)malloc(info_size);
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+-#endif
+
+- int sysctl_result = sysctl(mib, base::size(mib), &info, &info_size, NULL, 0);
++ int sysctl_result = sysctl(mib, base::size(mib), info, &info_size, NULL, 0);
+ DCHECK_EQ(sysctl_result, 0);
+ if (sysctl_result != 0) {
+ is_set = true;
+ being_debugged = false;
+- return being_debugged;
++ goto out;
+ }
+
+ // This process is being debugged if the P_TRACED flag is set.
+ is_set = true;
+ #if defined(OS_FREEBSD)
+- being_debugged = (info.ki_flag & P_TRACED) != 0;
++ being_debugged = (info->ki_flag & P_TRACED) != 0;
+ #elif defined(OS_BSD)
+- being_debugged = (info.p_flag & P_TRACED) != 0;
++ being_debugged = (info->p_flag & P_TRACED) != 0;
+ #else
+- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
++ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0;
+ #endif
++
++out:
++ free(info);
+ return being_debugged;
+ }
+
diff --git a/devel/electron7/files/patch-base_debug_elf__reader.cc b/devel/electron7/files/patch-base_debug_elf__reader.cc
new file mode 100644
index 000000000000..a1b48851c3fe
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_elf__reader.cc
@@ -0,0 +1,18 @@
+--- base/debug/elf_reader.cc.orig 2019-12-12 12:38:58 UTC
++++ base/debug/elf_reader.cc
+@@ -83,6 +83,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ reinterpret_cast<const Nhdr*>(elf_base + header.p_vaddr);
+ bool found = false;
+ while (current_note < section_end) {
++#if !defined(OS_BSD)
+ if (current_note->n_type == NT_GNU_BUILD_ID) {
+ const char* note_name =
+ reinterpret_cast<const char*>(current_note) + sizeof(Nhdr);
+@@ -92,6 +93,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ break;
+ }
+ }
++#endif
+
+ current_note = reinterpret_cast<const Nhdr*>(
+ reinterpret_cast<const char*>(current_note) + sizeof(Nhdr) +
diff --git a/devel/electron7/files/patch-base_debug_proc__maps__linux.cc b/devel/electron7/files/patch-base_debug_proc__maps__linux.cc
new file mode 100644
index 000000000000..f24eec2dcde6
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_proc__maps__linux.cc
@@ -0,0 +1,11 @@
+--- base/debug/proc_maps_linux.cc.orig 2019-12-12 12:38:58 UTC
++++ base/debug/proc_maps_linux.cc
+@@ -12,7 +12,7 @@
+ #include "base/strings/string_split.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_ANDROID)
+ #include <inttypes.h>
+ #endif
+
diff --git a/devel/electron7/files/patch-base_debug_stack__trace.cc b/devel/electron7/files/patch-base_debug_stack__trace.cc
new file mode 100644
index 000000000000..7a20a4a2ddfe
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_stack__trace.cc
@@ -0,0 +1,11 @@
+--- base/debug/stack_trace.cc.orig 2019-12-12 12:38:58 UTC
++++ base/debug/stack_trace.cc
+@@ -14,7 +14,7 @@
+
+ #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <pthread.h>
+ #include "base/process/process_handle.h"
+ #include "base/threading/platform_thread.h"
diff --git a/devel/electron7/files/patch-base_debug_stack__trace.h b/devel/electron7/files/patch-base_debug_stack__trace.h
new file mode 100644
index 000000000000..20ed00e051eb
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_stack__trace.h
@@ -0,0 +1,10 @@
+--- base/debug/stack_trace.h.orig 2019-12-12 12:38:58 UTC
++++ base/debug/stack_trace.h
+@@ -19,6 +19,7 @@
+ #if !defined(OS_NACL)
+ #include <signal.h>
+ #endif
++#include <sys/stdint.h>
+ #include <unistd.h>
+ #endif
+
diff --git a/devel/electron7/files/patch-base_debug_stack__trace__posix.cc b/devel/electron7/files/patch-base_debug_stack__trace__posix.cc
new file mode 100644
index 000000000000..44ab3dd9143c
--- /dev/null
+++ b/devel/electron7/files/patch-base_debug_stack__trace__posix.cc
@@ -0,0 +1,31 @@
+--- base/debug/stack_trace_posix.cc.orig 2019-12-12 12:38:58 UTC
++++ base/debug/stack_trace_posix.cc
+@@ -35,7 +35,7 @@
+ #include <AvailabilityMacros.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/debug/proc_maps_linux.h"
+ #endif
+
+@@ -657,6 +657,11 @@ class SandboxSymbolizeHelper {
+ // for the modules that are loaded in the current process.
+ // Returns true on success.
+ bool CacheMemoryRegions() {
++#if defined(OS_BSD)
++ // TODO (rene) avoid link error, implement something?
++ NOTIMPLEMENTED();
++ return false;
++#else
+ // Reads /proc/self/maps.
+ std::string contents;
+ if (!ReadProcMaps(&contents)) {
+@@ -674,6 +679,7 @@ class SandboxSymbolizeHelper {
+
+ is_initialized_ = true;
+ return true;
++#endif
+ }
+
+ // Opens all object files and caches their file descriptors.
diff --git a/devel/electron7/files/patch-base_files_file__path__unittest.cc b/devel/electron7/files/patch-base_files_file__path__unittest.cc
new file mode 100644
index 000000000000..4b6958a54e3a
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__path__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_unittest.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_path_unittest.cc
+@@ -1139,7 +1139,7 @@ TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe)
+ "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
+ };
+
+-#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX)
++#if !defined(SYSTEM_NATIVE_UTF8) && (defined(OS_LINUX) || defined(OS_BSD))
+ ScopedLocale locale("en_US.UTF-8");
+ #endif
+
diff --git a/devel/electron7/files/patch-base_files_file__path__watcher.cc b/devel/electron7/files/patch-base_files_file__path__watcher.cc
new file mode 100644
index 000000000000..2c442d175aeb
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__path__watcher.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_path_watcher.cc
+@@ -20,7 +20,7 @@ FilePathWatcher::~FilePathWatcher() {
+ // static
+ bool FilePathWatcher::RecursiveWatchAvailable() {
+ #if (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_WIN) || \
+- defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++ defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ return true;
+ #else
+ // FSEvents isn't available on iOS.
diff --git a/devel/electron7/files/patch-base_files_file__path__watcher__kqueue.h b/devel/electron7/files/patch-base_files_file__path__watcher__kqueue.h
new file mode 100644
index 000000000000..78060fe54644
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__path__watcher__kqueue.h
@@ -0,0 +1,13 @@
+--- base/files/file_path_watcher_kqueue.h.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,10 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
+ #include <sys/event.h>
+
+ #include <memory>
diff --git a/devel/electron7/files/patch-base_files_file__path__watcher__stub.cc b/devel/electron7/files/patch-base_files_file__path__watcher__stub.cc
new file mode 100644
index 000000000000..658aee57f7a7
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__path__watcher__stub.cc
@@ -0,0 +1,51 @@
+--- base/files/file_path_watcher_stub.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_path_watcher_stub.cc
+@@ -1,14 +1,15 @@
+-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
++// Copyright 2014 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-// This file exists for Unix systems which don't have the inotify headers, and
+-// thus cannot build file_watcher_inotify.cc
+
+-#include "base/files/file_path_watcher.h"
++#include <memory>
+
++#include "base/files/file_path_watcher.h"
++#include "base/files/file_path_watcher_kqueue.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
++#include "build/build_config.h"
+
+ namespace base {
+
+@@ -22,12 +23,26 @@ class FilePathWatcherImpl : public FilePathWatcher::Pl
+ bool Watch(const FilePath& path,
+ bool recursive,
+ const FilePathWatcher::Callback& callback) override {
+- return false;
++ DCHECK(!impl_.get());
++ if (recursive) {
++ if (!FilePathWatcher::RecursiveWatchAvailable())
++ return false;
++ } else {
++ impl_ = std::make_unique<FilePathWatcherKQueue>();
++ }
++ DCHECK(impl_.get());
++ return impl_->Watch(path, recursive, callback);
+ }
+
+- void Cancel() override {}
++ void Cancel() override {
++ if (impl_.get())
++ impl_->Cancel();
++ set_cancelled();
++ }
+
+ private:
++ std::unique_ptr<PlatformDelegate> impl_;
++
+ DISALLOW_COPY_AND_ASSIGN(FilePathWatcherImpl);
+ };
+
diff --git a/devel/electron7/files/patch-base_files_file__path__watcher__unittest.cc b/devel/electron7/files/patch-base_files_file__path__watcher__unittest.cc
new file mode 100644
index 000000000000..45c49c15af43
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__path__watcher__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_watcher_unittest.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_path_watcher_unittest.cc
+@@ -435,7 +435,7 @@ TEST_F(FilePathWatcherTest, WatchDirectory) {
+ VLOG(1) << "Waiting for file1 creation";
+ ASSERT_TRUE(WaitForEvents());
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Mac implementation does not detect files modified in a directory.
+ ASSERT_TRUE(WriteFile(file1, "content v2"));
+ VLOG(1) << "Waiting for file1 modification";
diff --git a/devel/electron7/files/patch-base_files_file__util.h b/devel/electron7/files/patch-base_files_file__util.h
new file mode 100644
index 000000000000..1107907e3a50
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__util.h
@@ -0,0 +1,11 @@
+--- base/files/file_util.h.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_util.h
+@@ -497,7 +497,7 @@ BASE_EXPORT bool VerifyPathControlledByAdmin(const bas
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ BASE_EXPORT int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron7/files/patch-base_files_file__util__posix.cc b/devel/electron7/files/patch-base_files_file__util__posix.cc
new file mode 100644
index 000000000000..ae41eeea8c88
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/file_util_posix.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/file_util_posix.cc
+@@ -426,7 +426,7 @@ bool CreatePipe(ScopedFD* read_fd, ScopedFD* write_fd,
+ }
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron7/files/patch-base_files_scoped__file.cc b/devel/electron7/files/patch-base_files_scoped__file.cc
new file mode 100644
index 000000000000..e474c17469c3
--- /dev/null
+++ b/devel/electron7/files/patch-base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- base/files/scoped_file.cc.orig 2019-12-12 12:38:58 UTC
++++ base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron7/files/patch-base_i18n_icu__util.cc b/devel/electron7/files/patch-base_i18n_icu__util.cc
new file mode 100644
index 000000000000..36554bf60033
--- /dev/null
+++ b/devel/electron7/files/patch-base_i18n_icu__util.cc
@@ -0,0 +1,20 @@
+--- base/i18n/icu_util.cc.orig 2019-12-12 12:38:58 UTC
++++ base/i18n/icu_util.cc
+@@ -20,7 +20,7 @@
+ #include "build/build_config.h"
+ #include "third_party/icu/source/common/unicode/putil.h"
+ #include "third_party/icu/source/common/unicode/udata.h"
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
++#if (defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)) || defined(OS_ANDROID)
+ #include "third_party/icu/source/i18n/unicode/timezone.h"
+ #endif
+
+@@ -285,7 +285,7 @@ bool InitializeICU() {
+ // TODO(jungshik): Some callers do not care about tz at all. If necessary,
+ // add a boolean argument to this function to init'd the default tz only
+ // when requested.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (result)
+ std::unique_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
+ #endif
diff --git a/devel/electron7/files/patch-base_linux__util.cc b/devel/electron7/files/patch-base_linux__util.cc
new file mode 100644
index 000000000000..cf60bbe90d8c
--- /dev/null
+++ b/devel/electron7/files/patch-base_linux__util.cc
@@ -0,0 +1,18 @@
+--- base/linux_util.cc.orig 2019-12-12 12:38:58 UTC
++++ base/linux_util.cc
+@@ -90,12 +90,14 @@ char g_linux_distro[kDistroSize] =
+ "CrOS";
+ #elif defined(OS_ANDROID)
+ "Android";
++#elif defined(OS_BSD)
++ "BSD";
+ #else // if defined(OS_LINUX)
+ "Unknown";
+ #endif
+
+ std::string GetLinuxDistro() {
+-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ return g_linux_distro;
+ #elif defined(OS_LINUX)
+ LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
diff --git a/devel/electron7/files/patch-base_logging__unittest.cc b/devel/electron7/files/patch-base_logging__unittest.cc
new file mode 100644
index 000000000000..eddafb8be9a1
--- /dev/null
+++ b/devel/electron7/files/patch-base_logging__unittest.cc
@@ -0,0 +1,11 @@
+--- base/logging_unittest.cc.orig 2019-12-12 12:38:58 UTC
++++ base/logging_unittest.cc
+@@ -590,7 +590,7 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
+ // need the arch-specific boilerplate below, which is inspired by breakpad.
+ // At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
+ uintptr_t crash_addr = 0;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
+ #else // OS_POSIX && !OS_MACOSX
+ ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
diff --git a/devel/electron7/files/patch-base_memory_platform__shared__memory__region.h b/devel/electron7/files/patch-base_memory_platform__shared__memory__region.h
new file mode 100644
index 000000000000..8423436755c4
--- /dev/null
+++ b/devel/electron7/files/patch-base_memory_platform__shared__memory__region.h
@@ -0,0 +1,29 @@
+--- base/memory/platform_shared_memory_region.h.orig 2019-12-12 12:38:59 UTC
++++ base/memory/platform_shared_memory_region.h
+@@ -28,7 +28,7 @@
+ #include "base/files/scoped_file.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ namespace content {
+ class SandboxIPCHandler;
+ }
+@@ -122,7 +122,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
+ kMaxValue = GET_SHMEM_TEMP_DIR_FAILURE
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Structure to limit access to executable region creation.
+ struct ExecutableRegion {
+ private:
+@@ -276,7 +276,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
+ CheckPlatformHandlePermissionsCorrespondToMode);
+ static PlatformSharedMemoryRegion Create(Mode mode,
+ size_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ bool executable = false
+ #endif
diff --git a/devel/electron7/files/patch-base_memory_platform__shared__memory__region__posix.cc b/devel/electron7/files/patch-base_memory_platform__shared__memory__region__posix.cc
new file mode 100644
index 000000000000..b203930fa652
--- /dev/null
+++ b/devel/electron7/files/patch-base_memory_platform__shared__memory__region__posix.cc
@@ -0,0 +1,38 @@
+--- base/memory/platform_shared_memory_region_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/memory/platform_shared_memory_region_posix.cc
+@@ -76,7 +76,7 @@ FDPair ScopedFDPair::get() const {
+ return {fd.get(), readonly_fd.get()};
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ ScopedFD PlatformSharedMemoryRegion::ExecutableRegion::CreateFD(size_t size) {
+ PlatformSharedMemoryRegion region =
+@@ -85,7 +85,7 @@ ScopedFD PlatformSharedMemoryRegion::ExecutableRegion:
+ return region.PassPlatformHandle().fd;
+ return ScopedFD();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Take(
+@@ -224,7 +224,7 @@ bool PlatformSharedMemoryRegion::MapAtInternal(off_t o
+ // static
+ PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Create(Mode mode,
+ size_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ bool executable
+ #endif
+@@ -255,7 +255,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion:
+ // flag.
+ FilePath directory;
+ if (!GetShmemTempDir(
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ executable,
+ #else
+ false /* executable */,
diff --git a/devel/electron7/files/patch-base_memory_protected__memory__posix.cc b/devel/electron7/files/patch-base_memory_protected__memory__posix.cc
new file mode 100644
index 000000000000..98657482ccd8
--- /dev/null
+++ b/devel/electron7/files/patch-base_memory_protected__memory__posix.cc
@@ -0,0 +1,31 @@
+--- base/memory/protected_memory_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/memory/protected_memory_posix.cc
+@@ -8,9 +8,9 @@
+ #include <sys/mman.h>
+ #include <unistd.h>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ #include <mach/mach.h>
+@@ -44,7 +44,7 @@ bool AutoWritableMemory::SetMemoryReadOnly(void* start
+ return SetMemory(start, end, PROT_READ);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void AssertMemoryIsReadOnly(const void* ptr) {
+ #if DCHECK_IS_ON()
+ const uintptr_t page_mask = ~(base::GetPageSize() - 1);
+@@ -74,6 +74,6 @@ void AssertMemoryIsReadOnly(const void* ptr) {
+ DCHECK_EQ(region_info.protection, VM_PROT_READ);
+ #endif // DCHECK_IS_ON()
+ }
+-#endif // defined(OS_LINUX) || (defined(OS_MACOSX) && !defined(OS_IOS))
++#endif // defined(OS_LINUX) || (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_BSD)
+
+ } // namespace base
diff --git a/devel/electron7/files/patch-base_native__library__posix.cc b/devel/electron7/files/patch-base_native__library__posix.cc
new file mode 100644
index 000000000000..8fd0f6f1b026
--- /dev/null
+++ b/devel/electron7/files/patch-base_native__library__posix.cc
@@ -0,0 +1,11 @@
+--- base/native_library_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/native_library_posix.cc
+@@ -29,7 +29,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
+ // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
+ // and http://crbug.com/40794.
+ int flags = RTLD_LAZY;
+-#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND)
++#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND) || defined(OS_BSD)
+ // Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
+ // further investigation, as it might vary across versions. Crash here to
+ // warn developers that they're trying to rely on uncertain behavior.
diff --git a/devel/electron7/files/patch-base_native__library__unittest.cc b/devel/electron7/files/patch-base_native__library__unittest.cc
new file mode 100644
index 000000000000..96c08fe82e29
--- /dev/null
+++ b/devel/electron7/files/patch-base_native__library__unittest.cc
@@ -0,0 +1,11 @@
+--- base/native_library_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/native_library_unittest.cc
+@@ -120,7 +120,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
+ // Android dlopen() requires further investigation, as it might vary across
+ // versions with respect to symbol resolution scope.
+ // TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
+-#if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
++#if !defined(OS_ANDROID) && !defined(OS_BSD) && !defined(THREAD_SANITIZER) && \
+ !defined(MEMORY_SANITIZER)
+
+ // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
diff --git a/devel/electron7/files/patch-base_numerics_safe__math__shared__impl.h b/devel/electron7/files/patch-base_numerics_safe__math__shared__impl.h
new file mode 100644
index 000000000000..652624923dd6
--- /dev/null
+++ b/devel/electron7/files/patch-base_numerics_safe__math__shared__impl.h
@@ -0,0 +1,12 @@
+--- base/numerics/safe_math_shared_impl.h.orig 2019-12-12 12:38:59 UTC
++++ base/numerics/safe_math_shared_impl.h
+@@ -23,8 +23,7 @@
+ // Where available use builtin math overflow support on Clang and GCC.
+ #elif !defined(__native_client__) && \
+ ((defined(__clang__) && \
+- ((__clang_major__ > 3) || \
+- (__clang_major__ == 3 && __clang_minor__ >= 4))) || \
++ (__clang_major__ > 6)) || \
+ (defined(__GNUC__) && __GNUC__ >= 5))
+ #include "base/numerics/safe_math_clang_gcc_impl.h"
+ #define BASE_HAS_OPTIMIZED_SAFE_MATH (1)
diff --git a/devel/electron7/files/patch-base_posix_can__lower__nice__to.cc b/devel/electron7/files/patch-base_posix_can__lower__nice__to.cc
new file mode 100644
index 000000000000..74f3db3bf710
--- /dev/null
+++ b/devel/electron7/files/patch-base_posix_can__lower__nice__to.cc
@@ -0,0 +1,20 @@
+--- base/posix/can_lower_nice_to.cc.orig 2019-12-12 12:38:59 UTC
++++ base/posix/can_lower_nice_to.cc
+@@ -31,6 +31,9 @@ bool CanLowerNiceTo(int nice_value) {
+ if (geteuid() == 0)
+ return true;
+
++#if defined(OS_BSD)
++ return false;
++#else
+ // 2. Skip checking the CAP_SYS_NICE permission because it would require
+ // libcap.so.
+
+@@ -54,6 +57,7 @@ bool CanLowerNiceTo(int nice_value) {
+ // And lowering niceness to |nice_value| is allowed if it is greater than or
+ // equal to the limit:
+ return nice_value >= lowest_nice_allowed;
++#endif
+ }
+
+ } // namespace internal
diff --git a/devel/electron7/files/patch-base_posix_unix__domain__socket.cc b/devel/electron7/files/patch-base_posix_unix__domain__socket.cc
new file mode 100644
index 000000000000..58d72a4930bf
--- /dev/null
+++ b/devel/electron7/files/patch-base_posix_unix__domain__socket.cc
@@ -0,0 +1,49 @@
+--- base/posix/unix_domain_socket.cc.orig 2019-12-12 12:38:59 UTC
++++ base/posix/unix_domain_socket.cc
+@@ -5,7 +5,10 @@
+ #include "base/posix/unix_domain_socket.h"
+
+ #include <errno.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/ucred.h>
+ #if !defined(OS_NACL_NONSFI)
+ #include <sys/un.h>
+ #endif
+@@ -28,6 +31,14 @@ namespace base {
+
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+
++#ifndef SCM_CREDENTIALS
++# define SCM_CREDENTIALS 0x9001
++#endif
++
++#ifndef SO_PASSCRED
++# define SO_PASSCRED 0x9002
++#endif
++
+ #if !defined(OS_NACL_NONSFI)
+ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+ int raw_socks[2];
+@@ -150,7 +161,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ #if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ // The PNaCl toolchain for Non-SFI binary build and macOS do not support
+ // ucred. macOS supports xucred, but this structure is insufficient.
+- + CMSG_SPACE(sizeof(struct ucred))
++ + CMSG_SPACE(sizeof(struct cmsgcred))
+ #endif // OS_NACL_NONSFI or OS_MACOSX
+ ;
+ char control_buffer[kControlBufferSize];
+@@ -180,9 +191,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ // SCM_CREDENTIALS.
+ if (cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
+- DCHECK_EQ(payload_len, sizeof(struct ucred));
++ DCHECK_EQ(payload_len, sizeof(struct cmsgcred));
+ DCHECK_EQ(pid, -1);
+- pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
++ pid = getpid();
+ }
+ #endif // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ }
diff --git a/devel/electron7/files/patch-base_posix_unix__domain__socket__unittest.cc b/devel/electron7/files/patch-base_posix_unix__domain__socket__unittest.cc
new file mode 100644
index 000000000000..2d83f7b43fbf
--- /dev/null
+++ b/devel/electron7/files/patch-base_posix_unix__domain__socket__unittest.cc
@@ -0,0 +1,12 @@
+--- base/posix/unix_domain_socket_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/posix/unix_domain_socket_unittest.cc
+@@ -8,6 +8,9 @@
+ #include <stdint.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
+ #include <unistd.h>
+
+ #include "base/bind.h"
diff --git a/devel/electron7/files/patch-base_process_internal__linux.cc b/devel/electron7/files/patch-base_process_internal__linux.cc
new file mode 100644
index 000000000000..70ed99e68b10
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_internal__linux.cc
@@ -0,0 +1,16 @@
+--- base/process/internal_linux.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/internal_linux.cc
+@@ -60,10 +60,13 @@ bool ReadProcFile(const FilePath& file, std::string* b
+ // Synchronously reading files in /proc is safe.
+ ThreadRestrictions::ScopedAllowIO allow_io;
+
++#if !defined(OS_BSD)
+ if (!ReadFileToString(file, buffer)) {
+ DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
+ return false;
+ }
++#endif
++
+ return !buffer->empty();
+ }
+
diff --git a/devel/electron7/files/patch-base_process_internal__linux.h b/devel/electron7/files/patch-base_process_internal__linux.h
new file mode 100644
index 000000000000..ebbb7cfed0e4
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_internal__linux.h
@@ -0,0 +1,11 @@
+--- base/process/internal_linux.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/internal_linux.h
+@@ -14,6 +14,8 @@
+
+ #include "base/files/file_path.h"
+
++#include <unistd.h> /* pid_t */
++
+ namespace base {
+
+ class Time;
diff --git a/devel/electron7/files/patch-base_process_kill.h b/devel/electron7/files/patch-base_process_kill.h
new file mode 100644
index 000000000000..a40eaf78358c
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_kill.h
@@ -0,0 +1,16 @@
+--- base/process/kill.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/kill.h
+@@ -111,11 +111,11 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
+ BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
+ ProcessHandle handle, int* exit_code);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Spawns a thread to wait asynchronously for the child |process| to exit
+ // and then reaps it.
+ BASE_EXPORT void EnsureProcessGetsReaped(Process process);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #endif // defined(OS_POSIX)
+
+ // Registers |process| to be asynchronously monitored for termination, forcibly
diff --git a/devel/electron7/files/patch-base_process_kill__posix.cc b/devel/electron7/files/patch-base_process_kill__posix.cc
new file mode 100644
index 000000000000..3f23896a31ed
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_kill__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/kill_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/kill_posix.cc
+@@ -168,7 +168,7 @@ void EnsureProcessTerminated(Process process) {
+ 0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void EnsureProcessGetsReaped(Process process) {
+ DCHECK(!process.is_current());
+
+@@ -179,7 +179,7 @@ void EnsureProcessGetsReaped(Process process) {
+ PlatformThread::CreateNonJoinable(
+ 0, new BackgroundReaper(std::move(process), TimeDelta()));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #endif // !defined(OS_MACOSX)
+ #endif // !defined(OS_NACL_NONSFI)
diff --git a/devel/electron7/files/patch-base_process_launch.cc b/devel/electron7/files/patch-base_process_launch.cc
new file mode 100644
index 000000000000..5d2612677510
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_launch.cc
@@ -0,0 +1,11 @@
+--- base/process/launch.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/launch.cc
+@@ -15,7 +15,7 @@ LaunchOptions::~LaunchOptions() = default;
+
+ LaunchOptions LaunchOptionsForTest() {
+ LaunchOptions options;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // To prevent accidental privilege sharing to an untrusted child, processes
+ // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
+ // new child will be used for testing only.
diff --git a/devel/electron7/files/patch-base_process_launch.h b/devel/electron7/files/patch-base_process_launch.h
new file mode 100644
index 000000000000..5820538410e1
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_launch.h
@@ -0,0 +1,20 @@
+--- base/process/launch.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/launch.h
+@@ -181,7 +181,7 @@ struct BASE_EXPORT LaunchOptions {
+ bool clear_environment = false;
+ #endif // OS_WIN || OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If non-zero, start the process using clone(), using flags as provided.
+ // Unlike in clone, clone_flags may not contain a custom termination signal
+ // that is sent to the parent when the child dies. The termination signal will
+@@ -194,7 +194,7 @@ struct BASE_EXPORT LaunchOptions {
+
+ // Sets parent process death signal to SIGKILL.
+ bool kill_on_parent_death = false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ // Mach ports that will be accessible to the child process. These are not
diff --git a/devel/electron7/files/patch-base_process_launch__posix.cc b/devel/electron7/files/patch-base_process_launch__posix.cc
new file mode 100644
index 000000000000..83fbcd8b3b04
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_launch__posix.cc
@@ -0,0 +1,10 @@
+--- base/process/launch_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/launch_posix.cc
+@@ -65,6 +65,7 @@
+ #error "macOS should use launch_mac.cc"
+ #endif
+
++#pragma weak environ
+ extern char** environ;
+
+ namespace base {
diff --git a/devel/electron7/files/patch-base_process_memory.cc b/devel/electron7/files/patch-base_process_memory.cc
new file mode 100644
index 000000000000..16233a9e8e30
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_memory.cc
@@ -0,0 +1,20 @@
+--- base/process/memory.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/memory.cc
+@@ -10,7 +10,7 @@
+ namespace base {
+
+ // Defined in memory_win.cc for Windows.
+-#if !defined(OS_WIN)
++#if !defined(OS_WIN) && !defined(OS_BSD)
+
+ namespace {
+
+@@ -31,7 +31,7 @@ void TerminateBecauseOutOfMemory(size_t size) {
+ #endif
+
+ // Defined in memory_mac.mm for Mac.
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+ const size_t alloc_size = num_items * size;
diff --git a/devel/electron7/files/patch-base_process_memory.h b/devel/electron7/files/patch-base_process_memory.h
new file mode 100644
index 000000000000..31ec96bed7ed
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_memory.h
@@ -0,0 +1,11 @@
+--- base/process/memory.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/memory.h
+@@ -24,7 +24,7 @@ BASE_EXPORT void EnableTerminationOnOutOfMemory();
+ // Crash reporting classifies such crashes as OOM.
+ BASE_EXPORT void TerminateBecauseOutOfMemory(size_t size);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ BASE_EXPORT extern size_t g_oom_size;
+
+ // The maximum allowed value for the OOM score.
diff --git a/devel/electron7/files/patch-base_process_memory__unittest.cc b/devel/electron7/files/patch-base_process_memory__unittest.cc
new file mode 100644
index 000000000000..fae63fb49bf7
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_memory__unittest.cc
@@ -0,0 +1,18 @@
+--- base/process/memory_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/memory_unittest.cc
+@@ -104,7 +104,7 @@ TEST(MemoryTest, AllocatorShimWorking) {
+ // OpenBSD does not support these tests. Don't test these on ASan/TSan/MSan
+ // configurations: only test the real allocator.
+ // Windows only supports these tests with the allocator shim in place.
+-#if !defined(OS_OPENBSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
++#if !defined(OS_BSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
+ !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+
+ namespace {
+@@ -527,5 +527,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
+ EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
+ EXPECT_TRUE(value_ == nullptr);
+ }
+-#endif // !defined(OS_OPENBSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
++#endif // !defined(OS_BSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
+ // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/devel/electron7/files/patch-base_process_process__handle.cc b/devel/electron7/files/patch-base_process_process__handle.cc
new file mode 100644
index 000000000000..c4575276fab2
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__handle.cc
@@ -0,0 +1,11 @@
+--- base/process/process_handle.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_handle.cc
+@@ -28,7 +28,7 @@ UniqueProcId GetUniqueIdForProcess() {
+ : UniqueProcId(GetCurrentProcId());
+ }
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
+ DCHECK(pid_outside_of_namespace != kNullProcessId);
diff --git a/devel/electron7/files/patch-base_process_process__handle.h b/devel/electron7/files/patch-base_process_process__handle.h
new file mode 100644
index 000000000000..638951f20779
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__handle.h
@@ -0,0 +1,11 @@
+--- base/process/process_handle.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_handle.h
+@@ -103,7 +103,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
+ // processes may be reused.
+ BASE_EXPORT UniqueProcId GetUniqueIdForProcess();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // When a process is started in a different PID namespace from the browser
+ // process, this function must be called with the process's PID in the browser's
+ // PID namespace in order to initialize its unique ID. Not thread safe.
diff --git a/devel/electron7/files/patch-base_process_process__handle__freebsd.cc b/devel/electron7/files/patch-base_process_process__handle__freebsd.cc
new file mode 100644
index 000000000000..9f9ae3afd626
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__handle__freebsd.cc
@@ -0,0 +1,17 @@
+--- base/process/process_handle_freebsd.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_handle_freebsd.cc
+@@ -16,10 +16,13 @@ namespace base {
+
+ ProcessId GetParentProcessId(ProcessHandle process) {
+ struct kinfo_proc info;
+- size_t length;
++ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
+
+ if (sysctl(mib, base::size(mib), &info, &length, NULL, 0) < 0)
++ return -1;
++
++ if (length < sizeof(struct kinfo_proc))
+ return -1;
+
+ return info.ki_ppid;
diff --git a/devel/electron7/files/patch-base_process_process__iterator__freebsd.cc b/devel/electron7/files/patch-base_process_process__iterator__freebsd.cc
new file mode 100644
index 000000000000..42a706175d6e
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__iterator__freebsd.cc
@@ -0,0 +1,44 @@
+--- base/process/process_iterator_freebsd.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_iterator_freebsd.cc
+@@ -10,6 +10,10 @@
+ #include <sys/sysctl.h>
+ #include <unistd.h>
+
++/* getuid() */
++#include <unistd.h>
++#include <sys/types.h>
++
+ #include "base/logging.h"
+ #include "base/stl_util.h"
+ #include "base/strings/string_split.h"
+@@ -40,7 +44,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
+ num_of_kinfo_proc += 16;
+ kinfo_procs_.resize(num_of_kinfo_proc);
+ len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
+- if (sysctl(mib, base::size(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
++ if (sysctl(mib, base::size(mib), kinfo_procs_.data(), &len, NULL, 0) < 0) {
+ // If we get a mem error, it just means we need a bigger buffer, so
+ // loop around again. Anything else is a real error and give up.
+ if (errno != ENOMEM) {
+@@ -72,18 +76,13 @@ bool ProcessIterator::CheckForNextProcess() {
+ for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
+ size_t length;
+ struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
+- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
+
+ if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
+ continue;
+
+- length = 0;
+- if (sysctl(mib, base::size(mib), NULL, &length, NULL, 0) < 0) {
+- LOG(ERROR) << "failed to figure out the buffer size for a command line";
+- continue;
+- }
+-
+- data.resize(length);
++ data.resize(ARG_MAX);
++ length = ARG_MAX;
+
+ if (sysctl(mib, base::size(mib), &data[0], &length, NULL, 0) < 0) {
+ LOG(ERROR) << "failed to fetch a commandline";
diff --git a/devel/electron7/files/patch-base_process_process__linux.cc b/devel/electron7/files/patch-base_process_process__linux.cc
new file mode 100644
index 000000000000..c021feafba53
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__linux.cc
@@ -0,0 +1,18 @@
+--- base/process/process_linux.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_linux.cc
+@@ -88,6 +88,7 @@ Time Process::CreationTime() const {
+ return Time(boot_time + start_offset);
+ }
+
++#if !defined(OS_BSD)
+ // static
+ bool Process::CanBackgroundProcesses() {
+ #if defined(OS_CHROMEOS)
+@@ -139,6 +140,7 @@ bool Process::SetProcessBackgrounded(bool background)
+ DPCHECK(result == 0);
+ return result == 0;
+ }
++#endif // !defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ bool IsProcessBackgroundedCGroup(const StringPiece& cgroup_contents) {
diff --git a/devel/electron7/files/patch-base_process_process__metrics.cc b/devel/electron7/files/patch-base_process_process__metrics.cc
new file mode 100644
index 000000000000..7c4300cb8b76
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__metrics.cc
@@ -0,0 +1,38 @@
+--- base/process/process_metrics.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_metrics.cc
+@@ -57,7 +57,7 @@ SystemMetrics SystemMetrics::Sample() {
+ SystemMetrics system_metrics;
+
+ system_metrics.committed_memory_ = GetSystemCommitCharge();
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ GetSystemMemoryInfo(&system_metrics.memory_info_);
+ GetVmStatInfo(&system_metrics.vmstat_info_);
+ GetSystemDiskInfo(&system_metrics.disk_info_);
+@@ -75,7 +75,7 @@ std::unique_ptr<Value> SystemMetrics::ToValue() const
+ std::unique_ptr<DictionaryValue> res(new DictionaryValue());
+
+ res->SetIntKey("committed_memory", static_cast<int>(committed_memory_));
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ std::unique_ptr<DictionaryValue> meminfo = memory_info_.ToValue();
+ std::unique_ptr<DictionaryValue> vmstat = vmstat_info_.ToValue();
+ meminfo->MergeDictionary(vmstat.get());
+@@ -126,7 +126,7 @@ double ProcessMetrics::GetPlatformIndependentCPUUsage(
+ }
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int ProcessMetrics::CalculateIdleWakeupsPerSecond(
+ uint64_t absolute_idle_wakeups) {
+ return CalculateEventsPerSecond(absolute_idle_wakeups,
+@@ -138,7 +138,7 @@ int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED(); // http://crbug.com/120488
+ return 0;
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ int ProcessMetrics::CalculatePackageIdleWakeupsPerSecond(
diff --git a/devel/electron7/files/patch-base_process_process__metrics.h b/devel/electron7/files/patch-base_process_process__metrics.h
new file mode 100644
index 000000000000..ed6b4dcfba2c
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__metrics.h
@@ -0,0 +1,131 @@
+--- base/process/process_metrics.h.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_metrics.h
+@@ -41,7 +41,7 @@ namespace base {
+ // Full declaration is in process_metrics_iocounters.h.
+ struct IoCounters;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Minor and major page fault counts since the process creation.
+ // Both counts are process-wide, and exclude child processes.
+ //
+@@ -51,7 +51,7 @@ struct PageFaultCounts {
+ int64_t minor;
+ int64_t major;
+ };
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Convert a POSIX timeval to microseconds.
+ BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv);
+@@ -92,7 +92,7 @@ class BASE_EXPORT ProcessMetrics {
+ // convenience wrapper for CreateProcessMetrics().
+ static std::unique_ptr<ProcessMetrics> CreateCurrentProcessMetrics();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Resident Set Size is a Linux/Android specific memory concept. Do not
+ // attempt to extend this to other platforms.
+ BASE_EXPORT size_t GetResidentSetSize() const;
+@@ -172,14 +172,14 @@ class BASE_EXPORT ProcessMetrics {
+ int GetOpenFdSoftLimit() const;
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Bytes of swap as reported by /proc/[pid]/status.
+ uint64_t GetVmSwapBytes() const;
+
+ // Minor and major page fault count as reported by /proc/[pid]/stat.
+ // Returns true for success.
+ bool GetPageFaultCounts(PageFaultCounts* counts) const;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns total memory usage of malloc.
+ size_t GetMallocUsage();
+@@ -191,7 +191,7 @@ class BASE_EXPORT ProcessMetrics {
+ ProcessMetrics(ProcessHandle process, PortProvider* port_provider);
+ #endif // !defined(OS_MACOSX) || defined(OS_IOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -220,7 +220,7 @@ class BASE_EXPORT ProcessMetrics {
+ // Number of bytes transferred to/from disk in bytes.
+ uint64_t last_cumulative_disk_usage_ = 0;
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Same thing for idle wakeups.
+ TimeTicks last_idle_wakeups_time_;
+ uint64_t last_absolute_idle_wakeups_;
+@@ -271,7 +271,7 @@ BASE_EXPORT size_t GetHandleLimit();
+ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_descriptors);
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+ // Data about system-wide memory consumption. Values are in KB. Available on
+ // Windows, Mac, Linux, Android and Chrome OS.
+@@ -305,7 +305,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int avail_phys = 0;
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // This provides an estimate of available memory as described here:
+ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
+ // NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
+@@ -319,7 +319,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int swap_free = 0;
+ #endif
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ int buffers = 0;
+ int cached = 0;
+@@ -329,7 +329,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int inactive_file = 0;
+ int dirty = 0;
+ int reclaimable = 0;
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) ||
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) ||
+ // defined(OS_FUCHSIA)
+
+ #if defined(OS_CHROMEOS)
+@@ -355,10 +355,10 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ // Exposed for memory debugging widget.
+ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo);
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // Parse the data found in /proc/<pid>/stat and return the sum of the
+ // CPU-related ticks. Returns -1 on parse error.
+ // Exposed for testing.
+@@ -431,7 +431,7 @@ BASE_EXPORT bool GetSystemDiskInfo(SystemDiskInfo* dis
+ // Returns the amount of time spent in user space since boot across all CPUs.
+ BASE_EXPORT TimeDelta GetUserCpuTimeSinceBoot();
+
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // Data from files in directory /sys/block/zram0 about ZRAM usage.
+@@ -526,7 +526,7 @@ class BASE_EXPORT SystemMetrics {
+ FRIEND_TEST_ALL_PREFIXES(SystemMetricsTest, SystemMetrics);
+
+ size_t committed_memory_;
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ SystemMemoryInfoKB memory_info_;
+ VmStatInfo vmstat_info_;
+ SystemDiskInfo disk_info_;
diff --git a/devel/electron7/files/patch-base_process_process__metrics__freebsd.cc b/devel/electron7/files/patch-base_process_process__metrics__freebsd.cc
new file mode 100644
index 000000000000..e091385afce2
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__metrics__freebsd.cc
@@ -0,0 +1,259 @@
+--- base/process/process_metrics_freebsd.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_metrics_freebsd.cc
+@@ -5,6 +5,7 @@
+ #include "base/process/process_metrics.h"
+
+ #include <stddef.h>
++#include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <sys/user.h>
+ #include <unistd.h>
+@@ -14,11 +15,29 @@
+ #include "base/process/process_metrics_iocounters.h"
+ #include "base/stl_util.h"
+
++#include <unistd.h> /* getpagesize() */
++#include <fcntl.h> /* O_RDONLY */
++#include <kvm.h>
++#include <libutil.h>
++
+ namespace base {
++namespace {
+
++int GetPageShift() {
++ int pagesize = getpagesize();
++ int pageshift = 0;
++
++ while (pagesize > 1) {
++ pageshift++;
++ pagesize >>= 1;
++ }
++
++ return pageshift;
++}
++}
++
+ ProcessMetrics::ProcessMetrics(ProcessHandle process)
+- : process_(process),
+- last_cpu_(0) {}
++ : process_(process) {}
+
+ // static
+ std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
+@@ -69,4 +88,216 @@ size_t GetSystemCommitCharge() {
+ return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
+ }
+
++int GetNumberOfThreads(ProcessHandle process) {
++ // Taken from FreeBSD top (usr.bin/top/machine.c)
++
++ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
++ if (kd == NULL)
++ return 0;
++
++ struct kinfo_proc* pbase;
++ int nproc;
++ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
++ if (pbase == NULL)
++ return 0;
++
++ if (kvm_close(kd) == -1)
++ return 0;
++
++ return nproc;
++}
++
++bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
++ unsigned int mem_total, mem_free, swap_total, swap_used;
++ size_t length;
++ int pagesizeKB;
++
++ pagesizeKB = getpagesize() / 1024;
++
++ length = sizeof(mem_total);
++ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
++ &length, NULL, 0) != 0 || length != sizeof(mem_total))
++ return false;
++
++ length = sizeof(mem_free);
++ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
++ != 0 || length != sizeof(mem_free))
++ return false;
++
++ length = sizeof(swap_total);
++ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
++ != 0 || length != sizeof(swap_total))
++ return false;
++
++ length = sizeof(swap_used);
++ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
++ != 0 || length != sizeof(swap_used))
++ return false;
++
++ meminfo->total = mem_total * pagesizeKB;
++ meminfo->free = mem_free * pagesizeKB;
++ meminfo->swap_total = swap_total * pagesizeKB;
++ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
++
++ return true;
++}
++
++int ProcessMetrics::GetOpenFdCount() const {
++ struct kinfo_file * kif;
++ int cnt;
++
++ if ((kif = kinfo_getfile(process_, &cnt)) == NULL)
++ return -1;
++
++ free(kif);
++
++ return cnt;
++}
++
++int ProcessMetrics::GetOpenFdSoftLimit() const {
++ size_t length;
++ int total_count = 0;
++ int mib[] = { CTL_KERN, KERN_MAXFILESPERPROC };
++
++ length = sizeof(total_count);
++
++ if (sysctl(mib, base::size(mib), &total_count, &length, NULL, 0) < 0) {
++ total_count = -1;
++ }
++
++ return total_count;
++}
++
++size_t ProcessMetrics::GetResidentSetSize() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t rss;
++
++ if (nproc > 0) {
++ rss = pp->ki_rssize << GetPageShift();
++ } else {
++ rss = 0;
++ }
++
++ kvm_close(kd);
++ return rss;
++}
++
++uint64_t ProcessMetrics::GetVmSwapBytes() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t swrss;
++
++ if (nproc > 0) {
++ swrss = pp->ki_swrss > pp->ki_rssize
++ ? (pp->ki_swrss - pp->ki_rssize) << GetPageShift()
++ : 0;
++ } else {
++ swrss = 0;
++ }
++
++ kvm_close(kd);
++ return swrss;
++}
++
++int ProcessMetrics::GetIdleWakeupsPerSecond() {
++ NOTIMPLEMENTED();
++ return 0;
++}
++
++bool GetSystemDiskInfo(SystemDiskInfo* diskinfo) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++bool GetVmStatInfo(VmStatInfo* vmstat) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++SystemDiskInfo::SystemDiskInfo() {
++ reads = 0;
++ reads_merged = 0;
++ sectors_read = 0;
++ read_time = 0;
++ writes = 0;
++ writes_merged = 0;
++ sectors_written = 0;
++ write_time = 0;
++ io = 0;
++ io_time = 0;
++ weighted_io_time = 0;
++}
++
++SystemDiskInfo::SystemDiskInfo(const SystemDiskInfo& other) = default;
++
++std::unique_ptr<Value> SystemDiskInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++
++ // Write out uint64_t variables as doubles.
++ // Note: this may discard some precision, but for JS there's no other option.
++ res->SetDouble("reads", static_cast<double>(reads));
++ res->SetDouble("reads_merged", static_cast<double>(reads_merged));
++ res->SetDouble("sectors_read", static_cast<double>(sectors_read));
++ res->SetDouble("read_time", static_cast<double>(read_time));
++ res->SetDouble("writes", static_cast<double>(writes));
++ res->SetDouble("writes_merged", static_cast<double>(writes_merged));
++ res->SetDouble("sectors_written", static_cast<double>(sectors_written));
++ res->SetDouble("write_time", static_cast<double>(write_time));
++ res->SetDouble("io", static_cast<double>(io));
++ res->SetDouble("io_time", static_cast<double>(io_time));
++ res->SetDouble("weighted_io_time", static_cast<double>(weighted_io_time));
++
++ return std::move(res);
++}
++
++std::unique_ptr<DictionaryValue> SystemMemoryInfoKB::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("total", total);
++ res->SetIntKey("free", free);
++ res->SetIntKey("available", available);
++ res->SetIntKey("buffers", buffers);
++ res->SetIntKey("cached", cached);
++ res->SetIntKey("active_anon", active_anon);
++ res->SetIntKey("inactive_anon", inactive_anon);
++ res->SetIntKey("active_file", active_file);
++ res->SetIntKey("inactive_file", inactive_file);
++ res->SetIntKey("swap_total", swap_total);
++ res->SetIntKey("swap_free", swap_free);
++ res->SetIntKey("swap_used", swap_total - swap_free);
++ res->SetIntKey("dirty", dirty);
++ res->SetIntKey("reclaimable", reclaimable);
++
++ return res;
++}
++
++std::unique_ptr<DictionaryValue> VmStatInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("pswpin", pswpin);
++ res->SetIntKey("pswpout", pswpout);
++ res->SetIntKey("pgmajfault", pgmajfault);
++ return res;
++}
+ } // namespace base
diff --git a/devel/electron7/files/patch-base_process_process__metrics__posix.cc b/devel/electron7/files/patch-base_process_process__metrics__posix.cc
new file mode 100644
index 000000000000..8e01ca8dca75
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__metrics__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_metrics_posix.cc
+@@ -20,6 +20,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_FREEBSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -117,7 +119,7 @@ size_t ProcessMetrics::GetMallocUsage() {
+ #else
+ return minfo.hblkhd + minfo.arena;
+ #endif
+-#elif defined(OS_FUCHSIA)
++#elif defined(OS_FUCHSIA) || defined(OS_BSD)
+ // TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
+ return 0;
+ #endif
diff --git a/devel/electron7/files/patch-base_process_process__unittest.cc b/devel/electron7/files/patch-base_process_process__unittest.cc
new file mode 100644
index 000000000000..9550ce5b6d1a
--- /dev/null
+++ b/devel/electron7/files/patch-base_process_process__unittest.cc
@@ -0,0 +1,11 @@
+--- base/process/process_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/process/process_unittest.cc
+@@ -148,7 +148,7 @@ TEST_F(ProcessTest, CreationTimeOtherProcess) {
+ // was spawned and a time recorded after it was spawned. However, since the
+ // base::Time and process creation clocks don't match, tolerate some error.
+ constexpr base::TimeDelta kTolerance =
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, process creation time is relative to boot time which has a
+ // 1-second resolution. Tolerate 1 second for the imprecise boot time and
+ // 100 ms for the imprecise clock.
diff --git a/devel/electron7/files/patch-base_profiler_stack__sampling__profiler__unittest.cc b/devel/electron7/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
new file mode 100644
index 000000000000..b8f3d1497a5f
--- /dev/null
+++ b/devel/electron7/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
@@ -0,0 +1,11 @@
+--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/profiler/stack_sampling_profiler_unittest.cc
+@@ -41,7 +41,7 @@
+ #include <intrin.h>
+ #include <malloc.h>
+ #include <windows.h>
+-#else
++#elif !defined(OS_BSD)
+ #include <alloca.h>
+ #endif
+
diff --git a/devel/electron7/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc b/devel/electron7/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
new file mode 100644
index 000000000000..b210f2506a40
--- /dev/null
+++ b/devel/electron7/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
@@ -0,0 +1,24 @@
+--- base/sampling_heap_profiler/sampling_heap_profiler.cc.orig 2019-12-12 12:38:59 UTC
++++ base/sampling_heap_profiler/sampling_heap_profiler.cc
+@@ -29,6 +29,10 @@
+ #include <sys/prctl.h>
+ #endif
+
++#if defined(OS_BSD)
++#include <pthread_np.h>
++#endif
++
+ #if defined(OS_ANDROID) && BUILDFLAG(CAN_UNWIND_WITH_CFI_TABLE) && \
+ defined(OFFICIAL_BUILD)
+ #include "base/trace_event/cfi_backtrace_android.h"
+@@ -64,6 +68,10 @@ const char* GetAndLeakThreadName() {
+ #elif defined(OS_MACOSX)
+ int err = pthread_getname_np(pthread_self(), name, kBufferLen);
+ if (err == 0 && *name != '\0')
++ return strdup(name);
++#elif defined(OS_BSD) && __FreeBSD__ >= 12
++ pthread_get_name_np(pthread_self(), name, kBufferLen);
++ if (*name != '\0')
+ return strdup(name);
+ #endif // defined(OS_LINUX) || defined(OS_ANDROID)
+
diff --git a/devel/electron7/files/patch-base_security__unittest.cc b/devel/electron7/files/patch-base_security__unittest.cc
new file mode 100644
index 000000000000..ec5eb1b2d413
--- /dev/null
+++ b/devel/electron7/files/patch-base_security__unittest.cc
@@ -0,0 +1,11 @@
+--- base/security_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/security_unittest.cc
+@@ -60,7 +60,7 @@ NOINLINE Type HideValueFromCompiler(volatile Type valu
+ // FAILS_ is too clunky.
+ void OverflowTestsSoftExpectTrue(bool overflow_detected) {
+ if (!overflow_detected) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_NACL)
+ // Sadly, on Linux, Android, and OSX we don't have a good story yet. Don't
+ // fail the test, but report.
+ printf("Platform has overflow: %s\n",
diff --git a/devel/electron7/files/patch-base_strings_safe__sprintf__unittest.cc b/devel/electron7/files/patch-base_strings_safe__sprintf__unittest.cc
new file mode 100644
index 000000000000..9253e826377b
--- /dev/null
+++ b/devel/electron7/files/patch-base_strings_safe__sprintf__unittest.cc
@@ -0,0 +1,18 @@
+--- base/strings/safe_sprintf_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/strings/safe_sprintf_unittest.cc
+@@ -730,6 +730,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
+ }
+
+ TEST(SafeSPrintfTest, EmitNULL) {
++/* Avoid compiler error: http://pastebin.com/1edWUE84
+ char buf[40];
+ #if defined(__GNUC__)
+ #pragma GCC diagnostic push
+@@ -741,6 +742,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
+ EXPECT_EQ("0x0", std::string(buf));
+ EXPECT_EQ(6, SafeSPrintf(buf, "%s", NULL));
+ EXPECT_EQ("<NULL>", std::string(buf));
++*/
+ #if defined(__GCC__)
+ #pragma GCC diagnostic pop
+ #endif
diff --git a/devel/electron7/files/patch-base_syslog__logging.cc b/devel/electron7/files/patch-base_syslog__logging.cc
new file mode 100644
index 000000000000..0dd0be8ef3a4
--- /dev/null
+++ b/devel/electron7/files/patch-base_syslog__logging.cc
@@ -0,0 +1,20 @@
+--- base/syslog_logging.cc.orig 2019-12-12 12:38:59 UTC
++++ base/syslog_logging.cc
+@@ -14,7 +14,7 @@
+ #include "base/debug/stack_trace.h"
+ #include "base/strings/string_util.h"
+ #include "base/win/win_util.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // <syslog.h> defines LOG_INFO, LOG_WARNING macros that could conflict with
+ // base::LOG_INFO, base::LOG_WARNING.
+ #include <syslog.h>
+@@ -113,7 +113,7 @@ EventLogMessage::~EventLogMessage() {
+
+ if (user_sid != nullptr)
+ ::LocalFree(user_sid);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kEventSource[] = "chrome";
+ openlog(kEventSource, LOG_NOWAIT | LOG_PID, LOG_USER);
+ // We can't use the defined names for the logging severity from syslog.h
diff --git a/devel/electron7/files/patch-base_system_sys__info.h b/devel/electron7/files/patch-base_system_sys__info.h
new file mode 100644
index 000000000000..e32ab2f83ad6
--- /dev/null
+++ b/devel/electron7/files/patch-base_system_sys__info.h
@@ -0,0 +1,11 @@
+--- base/system/sys_info.h.orig 2019-12-12 12:38:59 UTC
++++ base/system/sys_info.h
+@@ -192,7 +192,7 @@ class BASE_EXPORT SysInfo {
+ static bool IsLowEndDeviceImpl();
+ static HardwareInfo GetHardwareInfoSync();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ static int64_t AmountOfAvailablePhysicalMemory(
+ const SystemMemoryInfoKB& meminfo);
+ #endif
diff --git a/devel/electron7/files/patch-base_system_sys__info__freebsd.cc b/devel/electron7/files/patch-base_system_sys__info__freebsd.cc
new file mode 100644
index 000000000000..23141b8da3b8
--- /dev/null
+++ b/devel/electron7/files/patch-base_system_sys__info__freebsd.cc
@@ -0,0 +1,59 @@
+--- base/system/sys_info_freebsd.cc.orig 2019-12-12 12:38:59 UTC
++++ base/system/sys_info_freebsd.cc
+@@ -13,26 +13,46 @@
+ namespace base {
+
+ int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
+- int pages, page_size;
++ int pages, page_size, r = 0;
+ size_t size = sizeof(pages);
+- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+- if (pages == -1 || page_size == -1) {
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
++ if(r == 0)
++ r =sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+ }
+
+-// static
+-uint64_t SysInfo::MaxSharedMemorySize() {
+- size_t limit;
+- size_t size = sizeof(limit);
+- if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
++int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
++ int page_size, r = 0;
++ unsigned pgfree, pginact, pgcache;
++ size_t size = sizeof(page_size);
++ size_t szpg = sizeof(pgfree);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+- return static_cast<uint64_t>(limit);
++ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
+ }
+
++// static
++std::string SysInfo::CPUModelName() {
++ int mib[] = { CTL_HW, HW_MODEL };
++ char name[256];
++ size_t size = base::size(name);
++ if (sysctl(mib, base::size(mib), &name, &size, NULL, 0) == 0)
++ return name;
++ return std::string();
++}
+ } // namespace base
diff --git a/devel/electron7/files/patch-base_system_sys__info__posix.cc b/devel/electron7/files/patch-base_system_sys__info__posix.cc
new file mode 100644
index 000000000000..e04f71d00e24
--- /dev/null
+++ b/devel/electron7/files/patch-base_system_sys__info__posix.cc
@@ -0,0 +1,11 @@
+--- base/system/sys_info_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/system/sys_info_posix.cc
+@@ -220,6 +220,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron7/files/patch-base_task_thread__pool_environment__config__unittest.cc b/devel/electron7/files/patch-base_task_thread__pool_environment__config__unittest.cc
new file mode 100644
index 000000000000..25fc8953b299
--- /dev/null
+++ b/devel/electron7/files/patch-base_task_thread__pool_environment__config__unittest.cc
@@ -0,0 +1,11 @@
+--- base/task/thread_pool/environment_config_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/task/thread_pool/environment_config_unittest.cc
+@@ -14,7 +14,7 @@ namespace internal {
+ TEST(ThreadPoolEnvironmentConfig, CanUseBackgroundPriorityForWorker) {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
+ EXPECT_TRUE(CanUseBackgroundPriorityForWorkerThread());
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS) || defined(OS_NACL)
+ EXPECT_FALSE(CanUseBackgroundPriorityForWorkerThread());
+ #else
diff --git a/devel/electron7/files/patch-base_test_fontconfig__util__linux.cc b/devel/electron7/files/patch-base_test_fontconfig__util__linux.cc
new file mode 100644
index 000000000000..1fccc0ad2475
--- /dev/null
+++ b/devel/electron7/files/patch-base_test_fontconfig__util__linux.cc
@@ -0,0 +1,408 @@
+--- base/test/fontconfig_util_linux.cc.orig 2019-12-12 12:38:59 UTC
++++ base/test/fontconfig_util_linux.cc
+@@ -6,24 +6,397 @@
+
+ #include <fontconfig/fontconfig.h>
+
+-#include <memory>
+-
+ #include "base/base_paths.h"
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
++#include "base/files/file_util.h"
+ #include "base/logging.h"
++#include "base/macros.h"
+ #include "base/path_service.h"
++#include "base/strings/string_util.h"
+
+ namespace base {
+
++namespace {
++
++const char kFontsConfTemplate[] = R"(<?xml version="1.0"?>
++<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
++<fontconfig>
++
++ <!-- Cache location. -->
++ <cachedir>$1</cachedir>
++
++ <!-- GCS-synced fonts. -->
++ <dir>$2</dir>
++
++ <!-- Default properties. -->
++ <match target="font">
++ <edit name="embeddedbitmap" mode="append_last">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- Some layout tests specify Helvetica as a family and we need to make sure
++ that we don't fallback to Tinos for them -->
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Helvetica</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans-serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>mono</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>monospace</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>cursive</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Comic Sans MS</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>fantasy</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Impact</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Monaco</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Arial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier New</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Georgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times New Roman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Verdana</string>
++ </test>
++ <!-- NOT metrically compatible! -->
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- TODO(thomasanderson): Move these configs to be test-specific. -->
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonAntiAliasedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="antialias" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedGeorgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonHintedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <!-- These deliberately contradict each other. The 'hinting' preference
++ should take priority -->
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>AutohintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>HintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>false</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>FullAndAutoHintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelEnabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>rgb</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelDisabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>none</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- FontConfig doesn't currently provide a well-defined way to turn on
++ subpixel positioning. This is just an arbitrary pattern to use after
++ turning subpixel positioning on globally to ensure that we don't have
++ issues with our style getting cached for other tests. -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioning</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- See comments above -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioningAhem</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>ahem</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedTimesNewRoman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <!-- When we encounter a character that the current font doesn't
++ support, gfx::GetFallbackFontForChar() returns the first font
++ that does have a glyph for the character. The list of fonts is
++ sorted by a pattern that includes the current locale, but doesn't
++ include a font family (which means that the fallback font depends
++ on the locale but not on the current font).
++
++ DejaVu Sans is commonly the only font that supports some
++ characters, such as "⇧", and even when other candidates are
++ available, DejaVu Sans is commonly first among them, because of
++ the way Fontconfig is ordinarily configured. For example, the
++ configuration in the Fonconfig source lists DejaVu Sans under the
++ sans-serif generic family, and appends sans-serif to patterns
++ that don't already include a generic family (such as the pattern
++ in gfx::GetFallbackFontForChar()).
++
++ To get the same fallback font in the layout tests, we could
++ duplicate this configuration here, or more directly, simply
++ append DejaVu Sans to all patterns. -->
++ <match target="pattern">
++ <edit name="family" mode="append_last">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++</fontconfig>
++)";
++
++} // namespace
++
+ void SetUpFontconfig() {
+- FilePath dir_module;
+- CHECK(PathService::Get(DIR_MODULE, &dir_module));
++ std::unique_ptr<Environment> env = Environment::Create();
++ if (!env->HasVar("FONTCONFIG_FILE")) {
++ // fonts.conf must be generated on-the-fly since it contains absolute paths
++ // which may be different if
++ // 1. The user moves/renames their build directory (or any parent dirs).
++ // 2. The build directory is mapped on a swarming bot at a location
++ // different from the one the buildbot used.
++ FilePath dir_module;
++ PathService::Get(DIR_MODULE, &dir_module);
++ FilePath font_cache = dir_module.Append("fontconfig_caches");
++ FilePath test_fonts = dir_module.Append("test_fonts");
++ std::string fonts_conf = ReplaceStringPlaceholders(
++ kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr);
+
+- std::unique_ptr<Environment> env(Environment::Create());
+- // TODO(thomasanderson): This still stat()'s the real /etc/fonts/fonts.conf.
+- // Prevent fontconfig from doing this.
+- CHECK(env->SetVar("FONTCONFIG_SYSROOT", dir_module.value().c_str()));
++ // Write the data to a different file and then atomically rename it to
++ // fonts.conf. This avoids the file being in a bad state when different
++ // parallel tests call this function at the same time.
++ FilePath fonts_conf_file_temp;
++ if(!CreateTemporaryFileInDir(dir_module, &fonts_conf_file_temp))
++ CHECK(CreateTemporaryFile(&fonts_conf_file_temp));
++ CHECK(
++ WriteFile(fonts_conf_file_temp, fonts_conf.c_str(), fonts_conf.size()));
++ FilePath fonts_conf_file = dir_module.Append("fonts.conf");
++ if (ReplaceFile(fonts_conf_file_temp, fonts_conf_file, nullptr))
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file.value());
++ else
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file_temp.value());
++ }
+ }
+
+ } // namespace base
diff --git a/devel/electron7/files/patch-base_test_generate__fontconfig__caches.cc b/devel/electron7/files/patch-base_test_generate__fontconfig__caches.cc
new file mode 100644
index 000000000000..164224117f84
--- /dev/null
+++ b/devel/electron7/files/patch-base_test_generate__fontconfig__caches.cc
@@ -0,0 +1,25 @@
+--- base/test/generate_fontconfig_caches.cc.orig 2019-12-12 12:38:59 UTC
++++ base/test/generate_fontconfig_caches.cc
+@@ -52,14 +52,21 @@ int main() {
+
+ // Delete directory before generating fontconfig caches. This will notify
+ // future fontconfig_caches changes.
+- CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true));
+
++ CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true));
+ base::SetUpFontconfig();
+ FcInit();
+ FcFini();
+
+ // Check existence of intended fontconfig cache file.
++#if defined(OS_BSD)
++ // Our version of fontconfig is too old to respect .uuid files in font directories,
++ // so we check for the CACHEDIR.TAG file instead
+ CHECK(base::PathExists(
++ fontconfig_caches.Append("CACHEDIR.TAG")));
++#else
++ CHECK(base::PathExists(
+ fontconfig_caches.Append(base::StrCat({uuid, "-le64.cache-7"}))));
++#endif
+ return 0;
+ }
diff --git a/devel/electron7/files/patch-base_test_launcher_test__launcher.cc b/devel/electron7/files/patch-base_test_launcher_test__launcher.cc
new file mode 100644
index 000000000000..2b6329da75a1
--- /dev/null
+++ b/devel/electron7/files/patch-base_test_launcher_test__launcher.cc
@@ -0,0 +1,10 @@
+--- base/test/launcher/test_launcher.cc.orig 2019-12-12 12:38:59 UTC
++++ base/test/launcher/test_launcher.cc
+@@ -54,6 +54,7 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+
+ #if defined(OS_POSIX)
++#include <signal.h>
+ #include <fcntl.h>
+
+ #include "base/files/file_descriptor_watcher_posix.h"
diff --git a/devel/electron7/files/patch-base_test_test__file__util__linux.cc b/devel/electron7/files/patch-base_test_test__file__util__linux.cc
new file mode 100644
index 000000000000..ec7077dfd16d
--- /dev/null
+++ b/devel/electron7/files/patch-base_test_test__file__util__linux.cc
@@ -0,0 +1,13 @@
+--- base/test/test_file_util_linux.cc.orig 2019-12-12 12:38:59 UTC
++++ base/test/test_file_util_linux.cc
+@@ -51,8 +51,10 @@ bool EvictFileFromSystemCache(const FilePath& file) {
+ return false;
+ if (fdatasync(fd.get()) != 0)
+ return false;
++#if !defined(OS_BSD)
+ if (posix_fadvise(fd.get(), 0, 0, POSIX_FADV_DONTNEED) != 0)
+ return false;
++#endif
+ return true;
+ }
+
diff --git a/devel/electron7/files/patch-base_test_test__file__util__posix.cc b/devel/electron7/files/patch-base_test_test__file__util__posix.cc
new file mode 100644
index 000000000000..3e278261b9d2
--- /dev/null
+++ b/devel/electron7/files/patch-base_test_test__file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/test/test_file_util_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/test/test_file_util_posix.cc
+@@ -85,7 +85,7 @@ void SyncPageCacheToDisk() {
+ sync();
+ }
+
+-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ bool EvictFileFromSystemCache(const FilePath& file) {
+ // There doesn't seem to be a POSIX way to cool the disk cache.
+ NOTIMPLEMENTED();
diff --git a/devel/electron7/files/patch-base_third__party_libevent_BUILD.gn b/devel/electron7/files/patch-base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..2c6a362ed19d
--- /dev/null
+++ b/devel/electron7/files/patch-base_third__party_libevent_BUILD.gn
@@ -0,0 +1,24 @@
+--- base/third_party/libevent/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ base/third_party/libevent/BUILD.gn
+@@ -43,13 +43,20 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
+- } else if (is_linux) {
++ } else if (is_linux && !is_bsd) {
+ sources += [
+ "epoll.c",
+ "linux/config.h",
+ "linux/event-config.h",
+ ]
+ include_dirs = [ "linux" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_android) {
+ sources += [
+ "android/config.h",
diff --git a/devel/electron7/files/patch-base_threading_platform__thread.h b/devel/electron7/files/patch-base_threading_platform__thread.h
new file mode 100644
index 000000000000..70970f918ea1
--- /dev/null
+++ b/devel/electron7/files/patch-base_threading_platform__thread.h
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread.h.orig 2019-12-12 12:38:59 UTC
++++ base/threading/platform_thread.h
+@@ -221,7 +221,7 @@ class BASE_EXPORT PlatformThread {
+
+ static ThreadPriority GetCurrentThreadPriority();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Toggles a specific thread's priority at runtime. This can be used to
+ // change the priority of a thread in a different process and will fail
+ // if the calling process does not have proper permissions. The
diff --git a/devel/electron7/files/patch-base_threading_platform__thread__linux.cc b/devel/electron7/files/patch-base_threading_platform__thread__linux.cc
new file mode 100644
index 000000000000..644345925489
--- /dev/null
+++ b/devel/electron7/files/patch-base_threading_platform__thread__linux.cc
@@ -0,0 +1,30 @@
+--- base/threading/platform_thread_linux.cc.orig 2019-12-12 12:38:59 UTC
++++ base/threading/platform_thread_linux.cc
+@@ -18,7 +18,9 @@
+
+ #if !defined(OS_NACL) && !defined(OS_AIX)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -99,7 +101,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToN
+
+ Optional<bool> CanIncreaseCurrentThreadPriorityForPlatform(
+ ThreadPriority priority) {
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // A non-zero soft-limit on RLIMIT_RTPRIO is required to be allowed to invoke
+ // pthread_setschedparam in SetCurrentThreadPriorityForPlatform().
+ struct rlimit rlim;
+@@ -141,7 +143,7 @@ Optional<ThreadPriority> GetCurrentThreadPriorityForPl
+ void PlatformThread::SetName(const std::string& name) {
+ ThreadIdNameManager::GetInstance()->SetName(name);
+
+-#if !defined(OS_NACL) && !defined(OS_AIX)
++#if !defined(OS_NACL) && !defined(OS_AIX) && !defined(OS_BSD)
+ // On linux we can get the thread names to show up in the debugger by setting
+ // the process name for the LWP. We don't want to do this for the main
+ // thread because that would rename the process, causing tools like killall
diff --git a/devel/electron7/files/patch-base_threading_platform__thread__posix.cc b/devel/electron7/files/patch-base_threading_platform__thread__posix.cc
new file mode 100644
index 000000000000..0f861a580d83
--- /dev/null
+++ b/devel/electron7/files/patch-base_threading_platform__thread__posix.cc
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread_posix.cc.orig 2019-12-12 12:38:59 UTC
++++ base/threading/platform_thread_posix.cc
+@@ -66,7 +66,7 @@ void* ThreadFunc(void* params) {
+ if (!thread_params->joinable)
+ base::ThreadRestrictions::SetSingletonAllowed(false);
+
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // Threads on linux/android may inherit their priority from the thread
+ // where they were created. This explicitly sets the priority of all new
+ // threads.
diff --git a/devel/electron7/files/patch-base_threading_thread__local__storage__unittest.cc b/devel/electron7/files/patch-base_threading_thread__local__storage__unittest.cc
new file mode 100644
index 000000000000..f2843e3e9e91
--- /dev/null
+++ b/devel/electron7/files/patch-base_threading_thread__local__storage__unittest.cc
@@ -0,0 +1,11 @@
+--- base/threading/thread_local_storage_unittest.cc.orig 2019-12-12 12:38:59 UTC
++++ base/threading/thread_local_storage_unittest.cc
+@@ -86,7 +86,7 @@ class ThreadLocalStorageRunner : public DelegateSimple
+ void ThreadLocalStorageCleanup(void *value) {
+ int *ptr = reinterpret_cast<int*>(value);
+ // Destructors should never be called with a NULL.
+- ASSERT_NE(reinterpret_cast<int*>(NULL), ptr);
++ ASSERT_NE(static_cast<int*>(NULL), ptr);
+ if (*ptr == kFinalTlsValue)
+ return; // We've been called enough times.
+ ASSERT_LT(kFinalTlsValue, *ptr);
diff --git a/devel/electron7/files/patch-base_threading_thread__task__runner__handle.cc b/devel/electron7/files/patch-base_threading_thread__task__runner__handle.cc
new file mode 100644
index 000000000000..0b9f22e5cf23
--- /dev/null
+++ b/devel/electron7/files/patch-base_threading_thread__task__runner__handle.cc
@@ -0,0 +1,26 @@
+--- base/threading/thread_task_runner_handle.cc.orig 2019-12-12 12:38:59 UTC
++++ base/threading/thread_task_runner_handle.cc
+@@ -8,6 +8,7 @@
+ #include <utility>
+
+ #include "base/bind.h"
++#include "base/callback_helpers.h"
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/run_loop.h"
+@@ -37,6 +38,7 @@ bool ThreadTaskRunnerHandle::IsSet() {
+ return !!thread_task_runner_tls.Pointer()->Get();
+ }
+
++#if defined(OS_BSD)
+ // static
+ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideForTesting(
+ scoped_refptr<SingleThreadTaskRunner> overriding_task_runner) {
+@@ -81,6 +83,7 @@ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideFo
+ base::Unretained(ttrh->task_runner_.get()),
+ std::move(no_running_during_override)));
+ }
++#endif
+
+ ThreadTaskRunnerHandle::ThreadTaskRunnerHandle(
+ scoped_refptr<SingleThreadTaskRunner> task_runner)
diff --git a/devel/electron7/files/patch-base_trace__event_malloc__dump__provider.cc b/devel/electron7/files/patch-base_trace__event_malloc__dump__provider.cc
new file mode 100644
index 000000000000..51fa45f5ef79
--- /dev/null
+++ b/devel/electron7/files/patch-base_trace__event_malloc__dump__provider.cc
@@ -0,0 +1,21 @@
+--- base/trace_event/malloc_dump_provider.cc.orig 2019-12-12 12:38:59 UTC
++++ base/trace_event/malloc_dump_provider.cc
+@@ -17,6 +17,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_BSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -132,6 +134,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
+ }
+ #elif defined(OS_FUCHSIA)
+ // TODO(fuchsia): Port, see https://crbug.com/706592.
++#elif defined(OS_BSD)
++ total_virtual_size = 0;
++ allocated_objects_size = 0;
+ #else
+ struct mallinfo info = mallinfo();
+ DCHECK_GE(info.arena + info.hblkhd, info.uordblks);
diff --git a/devel/electron7/files/patch-base_trace__event_process__memory__dump.cc b/devel/electron7/files/patch-base_trace__event_process__memory__dump.cc
new file mode 100644
index 000000000000..3a1c41fe1ffa
--- /dev/null
+++ b/devel/electron7/files/patch-base_trace__event_process__memory__dump.cc
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.cc.orig 2019-12-12 12:38:59 UTC
++++ base/trace_event/process_memory_dump.cc
+@@ -94,7 +94,7 @@ size_t ProcessMemoryDump::CountResidentBytes(void* sta
+ #if defined(OS_WIN)
+ std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
+ new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<char[]> vec(new char[max_vec_size]);
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
diff --git a/devel/electron7/files/patch-base_trace__event_process__memory__dump.h b/devel/electron7/files/patch-base_trace__event_process__memory__dump.h
new file mode 100644
index 000000000000..86286cf98f33
--- /dev/null
+++ b/devel/electron7/files/patch-base_trace__event_process__memory__dump.h
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.h.orig 2019-12-12 12:38:59 UTC
++++ base/trace_event/process_memory_dump.h
+@@ -22,7 +22,7 @@
+
+ // Define COUNT_RESIDENT_BYTES_SUPPORTED if platform supports counting of the
+ // resident memory.
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ #define COUNT_RESIDENT_BYTES_SUPPORTED
+ #endif
+
diff --git a/devel/electron7/files/patch-build_config_BUILD.gn b/devel/electron7/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..11c36af56013
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ build/config/BUILD.gn
+@@ -149,7 +149,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
++ } else if ((is_linux || is_bsd) && current_cpu == "x64" && enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+ # TODO(phajdan.jr): Should we enable this for all of POSIX?
+@@ -247,9 +247,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -337,7 +335,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_config" ]
+ if (is_chromecast) {
+ configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/devel/electron7/files/patch-build_config_BUILDCONFIG.gn b/devel/electron7/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..0cea3001b7a1
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,48 @@
+--- build/config/BUILDCONFIG.gn.orig 2019-12-16 13:32:58 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -134,10 +134,10 @@ declare_args() {
+ is_official_build = false
+
+ # Whether we're a traditional desktop unix.
+- is_desktop_linux = current_os == "linux"
++ is_desktop_linux = current_os == "linux" || current_os == "freebsd"
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64")
+@@ -189,8 +189,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" && target_os != "freebsd") {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+ } else if (is_clang) {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -227,7 +227,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -291,10 +291,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "chromeos" || current_os == "linux"
++is_linux = current_os == "chromeos" || current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+
+ is_posix = !is_win && !is_fuchsia
+
diff --git a/devel/electron7/files/patch-build_config_compiler_BUILD.gn b/devel/electron7/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..fa9eb6b79c6b
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,92 @@
+--- build/config/compiler/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ build/config/compiler/BUILD.gn
+@@ -57,7 +57,7 @@ declare_args() {
+ # only two architectures that are currently checked in). Turn this off when
+ # you are using a custom toolchain and need to control -B in cflags.
+ linux_use_bundled_binutils =
+- linux_use_bundled_binutils_override && is_linux &&
++ linux_use_bundled_binutils_override && (is_linux && !is_bsd) &&
+ (current_cpu == "x64" || current_cpu == "x86")
+ binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
+ root_build_dir)
+@@ -288,7 +288,7 @@ config("compiler") {
+
+ # Linker warnings.
+ if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
+- !is_mac && !is_ios && current_os != "aix") {
++ !is_mac && !is_ios && current_os != "aix" && !is_bsd) {
+ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
+ ldflags += [ "-Wl,--fatal-warnings" ]
+ }
+@@ -383,7 +383,7 @@ config("compiler") {
+
+ # Compiler instrumentation can introduce dependencies in DSOs to symbols in
+ # the executable they are loaded into, so they are unresolved at link-time.
+- if (!using_sanitizer) {
++ if (!using_sanitizer && !is_bsd) {
+ ldflags += [
+ "-Wl,-z,defs",
+ "-Wl,--as-needed",
+@@ -483,7 +483,7 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
++ if (is_clang && !is_nacl && !use_xcode_clang && !is_bsd) {
+ cflags += [ "-fcrash-diagnostics-dir=" +
+ rebase_path("//tools/clang/crashreports", root_build_dir) ]
+
+@@ -753,7 +753,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1104,7 +1104,7 @@ config("compiler_deterministic") {
+ "-Xclang",
+ ".",
+ ]
+- if (!is_win) {
++ if (!is_win && !is_bsd) {
+ # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+ asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+ }
+@@ -1493,7 +1493,7 @@ config("default_warnings") {
+ cflags += [ "-Wno-nonportable-include-path" ]
+ }
+
+- if (current_toolchain == host_toolchain || !use_xcode_clang) {
++ if ((current_toolchain == host_toolchain || !use_xcode_clang) && !is_bsd) {
+ # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
+ # recognize.
+ cflags += [
+@@ -1722,7 +1722,7 @@ config("thin_archive") {
+ # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
+ # have a "thin archive" mode (it does accept -T, but it means truncating
+ # archive names to 16 characters, which is not what we want).
+- if ((is_posix && !is_nacl && !is_mac && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_mac && !is_ios && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ } else if (is_win && use_lld) {
+ arflags = [ "/llvmlibthin" ]
+@@ -2292,7 +2292,7 @@ config("symbols") {
+ # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+ # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+ if (!is_nacl || is_clang) {
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+
+ if (use_debug_fission && !is_nacl && !is_android) {
+@@ -2313,7 +2313,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ if (!is_mac && !is_ios && !is_nacl && current_cpu != "x86" &&
+- (use_gold || use_lld)) {
++ (use_gold || use_lld) && !is_bsd) {
+ if (is_clang) {
+ # This flag enables the GNU-format pubnames and pubtypes sections,
+ # which lld needs in order to generate a correct GDB index.
diff --git a/devel/electron7/files/patch-build_config_compiler_compiler.gni b/devel/electron7/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..3fb0469c7965
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- build/config/compiler/compiler.gni.orig 2019-12-12 12:38:59 UTC
++++ build/config/compiler/compiler.gni
+@@ -188,7 +188,7 @@ declare_args() {
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+ use_gold =
+- !use_lld && !(is_chromecast && is_linux &&
++ !is_bsd && !use_lld && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ ((is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
diff --git a/devel/electron7/files/patch-build_config_features.gni b/devel/electron7/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..b779ba793ff5
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig 2019-12-12 12:38:59 UTC
++++ build/config/features.gni
+@@ -26,7 +26,7 @@ declare_args() {
+ proprietary_codecs = is_chrome_branded || is_chromecast
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = is_linux && !is_chromecast
++ use_udev = is_linux && !is_chromecast && !is_bsd
+
+ use_dbus = is_linux && !is_chromecast
+
diff --git a/devel/electron7/files/patch-build_config_freetype_freetype.gni b/devel/electron7/files/patch-build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..b91138e3185b
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- build/config/freetype/freetype.gni.orig 2019-12-12 12:38:59 UTC
++++ build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/devel/electron7/files/patch-build_config_linux_BUILD.gn b/devel/electron7/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..c8fa33f48557
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ build/config/linux/BUILD.gn
+@@ -28,7 +28,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/devel/electron7/files/patch-build_config_linux_pkg-config.py b/devel/electron7/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..c3cff115c73d
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig 2019-12-12 12:38:59 UTC
++++ build/config/linux/pkg-config.py
+@@ -59,8 +59,12 @@ def SetConfigPath(options):
+ print("You must specify an architecture via -a if using a sysroot.")
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -109,7 +113,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print("[[],[],[],[],[]]")
+ return 0
+
diff --git a/devel/electron7/files/patch-build_config_sysroot.gni b/devel/electron7/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..9d0cc2cc00e8
--- /dev/null
+++ b/devel/electron7/files/patch-build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- build/config/sysroot.gni.orig 2019-12-12 12:38:59 UTC
++++ build/config/sysroot.gni
+@@ -15,9 +15,10 @@ declare_args() {
+ # The absolute path to directory containing linux sysroot images
+ target_sysroot_dir = "//build/linux"
+
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (
++ current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (current_os == target_os && current_cpu == target_cpu &&
diff --git a/devel/electron7/files/patch-build_detect__host__arch.py b/devel/electron7/files/patch-build_detect__host__arch.py
new file mode 100644
index 000000000000..a0ab500a5c14
--- /dev/null
+++ b/devel/electron7/files/patch-build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- build/detect_host_arch.py.orig 2019-12-12 12:38:59 UTC
++++ build/detect_host_arch.py
+@@ -21,6 +21,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/devel/electron7/files/patch-build_gn__run__binary.py b/devel/electron7/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..1b9db04d2bd1
--- /dev/null
+++ b/devel/electron7/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig 2019-12-12 12:38:59 UTC
++++ build/gn_run_binary.py
+@@ -24,7 +24,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/devel/electron7/files/patch-build_linux_chrome.map b/devel/electron7/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..ca4ed2e750d0
--- /dev/null
+++ b/devel/electron7/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig 2019-12-12 12:38:59 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -81,7 +88,4 @@ global:
+ localtime64;
+ localtime64_r;
+ localtime_r;
+-
+-local:
+- *;
+ };
diff --git a/devel/electron7/files/patch-build_linux_libpci_BUILD.gn b/devel/electron7/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..be5d024232e1
--- /dev/null
+++ b/devel/electron7/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/devel/electron7/files/patch-build_linux_unbundle_libusb.gn b/devel/electron7/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..46cef00fa011
--- /dev/null
+++ b/devel/electron7/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig 2019-12-16 13:33:53 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/devel/electron7/files/patch-build_linux_unbundle_replace__gn__files.py b/devel/electron7/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..7243b19ecb39
--- /dev/null
+++ b/devel/electron7/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig 2019-12-12 12:38:59 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/devel/electron7/files/patch-build_toolchain_gcc__toolchain.gni b/devel/electron7/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..5c6da09e8207
--- /dev/null
+++ b/devel/electron7/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig 2019-12-12 12:38:59 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -36,6 +36,11 @@ if (is_linux && target_os == "android") {
+ enable_resource_whitelist_generation = false
+ }
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -589,13 +594,23 @@ template("clang_toolchain") {
+ }
+
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "$prefix/clang"
+- cxx = "$prefix/clang++"
+- ld = cxx
+- readelf = "${toolprefix}readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${toolprefix}nm"
++ if (is_bsd) {
++ prefix = "/usr/local/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ readelf = "readelf"
++ ar = "${prefix}/ar"
++ nm = "${toolprefix}nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${toolprefix}readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${toolprefix}nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/devel/electron7/files/patch-build_toolchain_get__concurrent__links.py b/devel/electron7/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..f91e57e044c8
--- /dev/null
+++ b/devel/electron7/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig 2019-12-12 12:38:59 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -48,6 +48,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/devel/electron7/files/patch-build_toolchain_linux_BUILD.gn b/devel/electron7/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..4184009bb3ad
--- /dev/null
+++ b/devel/electron7/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -22,7 +22,6 @@ clang_toolchain("clang_arm") {
+ }
+
+ clang_toolchain("clang_arm64") {
+- toolprefix = "aarch64-linux-gnu-"
+ toolchain_args = {
+ current_cpu = "arm64"
+ current_os = "linux"
diff --git a/devel/electron7/files/patch-cc_BUILD.gn b/devel/electron7/files/patch-cc_BUILD.gn
new file mode 100644
index 000000000000..5bebee90b145
--- /dev/null
+++ b/devel/electron7/files/patch-cc_BUILD.gn
@@ -0,0 +1,21 @@
+--- cc/BUILD.gn.orig 2019-12-12 12:38:59 UTC
++++ cc/BUILD.gn
+@@ -572,7 +572,7 @@ cc_test_static_library("test_support") {
+ if (enable_vulkan) {
+ deps += [ "//gpu/vulkan/init" ]
+ }
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ data_deps = [
+ "//third_party/mesa_headers",
+ ]
+@@ -776,9 +776,6 @@ cc_test("cc_unittests") {
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ "//ui/gl:test_support",
+- ]
+- data_deps = [
+- "//third_party/mesa_headers",
+ ]
+
+ if (enable_vulkan) {
diff --git a/devel/electron7/files/patch-cc_layers_scrollbar__layer__impl__base.cc b/devel/electron7/files/patch-cc_layers_scrollbar__layer__impl__base.cc
new file mode 100644
index 000000000000..9e8589171b52
--- /dev/null
+++ b/devel/electron7/files/patch-cc_layers_scrollbar__layer__impl__base.cc
@@ -0,0 +1,13 @@
+--- cc/layers/scrollbar_layer_impl_base.cc.orig 2019-12-12 12:38:59 UTC
++++ cc/layers/scrollbar_layer_impl_base.cc
+@@ -218,8 +218,8 @@ gfx::Rect ScrollbarLayerImplBase::ComputeThumbQuadRect
+ int thumb_offset = TrackStart();
+ if (maximum > 0) {
+ float ratio = clamped_current_pos / maximum;
+- float max_offset = track_length - thumb_length;
+- thumb_offset += static_cast<int>(ratio * max_offset);
++ float _max_offset = track_length - thumb_length;
++ thumb_offset += static_cast<int>(ratio * _max_offset);
+ }
+
+ float thumb_thickness_adjustment =
diff --git a/devel/electron7/files/patch-cc_trees_property__tree.cc b/devel/electron7/files/patch-cc_trees_property__tree.cc
new file mode 100644
index 000000000000..78f2a4bb7c60
--- /dev/null
+++ b/devel/electron7/files/patch-cc_trees_property__tree.cc
@@ -0,0 +1,20 @@
+--- cc/trees/property_tree.cc.orig 2019-12-12 12:39:00 UTC
++++ cc/trees/property_tree.cc
+@@ -1278,13 +1278,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scro
+
+ gfx::Size clip_layer_bounds = container_bounds(scroll_node->id);
+
+- gfx::ScrollOffset max_offset(
++ gfx::ScrollOffset _max_offset(
+ scaled_scroll_bounds.width() - clip_layer_bounds.width(),
+ scaled_scroll_bounds.height() - clip_layer_bounds.height());
+
+- max_offset.Scale(1 / scale_factor);
+- max_offset.SetToMax(gfx::ScrollOffset());
+- return max_offset;
++ _max_offset.Scale(1 / scale_factor);
++ _max_offset.SetToMax(gfx::ScrollOffset());
++ return _max_offset;
+ }
+
+ gfx::SizeF ScrollTree::scroll_bounds(int scroll_node_id) const {
diff --git a/devel/electron7/files/patch-chrome_app_chrome__command__ids.h b/devel/electron7/files/patch-chrome_app_chrome__command__ids.h
new file mode 100644
index 000000000000..4a839d5e2cfc
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_chrome__command__ids.h
@@ -0,0 +1,11 @@
+--- chrome/app/chrome_command_ids.h.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/chrome_command_ids.h
+@@ -63,7 +63,7 @@
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_2 34049
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_3 34050
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #define IDC_USE_SYSTEM_TITLE_BAR 34051
+ #define IDC_RESTORE_WINDOW 34052
+ #endif
diff --git a/devel/electron7/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc b/devel/electron7/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc
new file mode 100644
index 000000000000..bedc3ec93f94
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_chrome__content__browser__overlay__manifest.cc
@@ -0,0 +1,20 @@
+--- chrome/app/chrome_content_browser_overlay_manifest.cc.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/chrome_content_browser_overlay_manifest.cc
+@@ -69,7 +69,7 @@
+ #include "chrome/services/app_service/public/cpp/manifest.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ #include "chrome/browser/performance_manager/webui_graph_dump.mojom.h" // nogncheck
+ #include "chrome/browser/ui/webui/discards/discards.mojom.h"
+@@ -205,7 +205,7 @@ const service_manager::Manifest& GetChromeContentBrows
+ #else
+ app_management::mojom::PageHandlerFactory,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ mojom::DiscardsDetailsProvider,
+ performance_manager::mojom::WebUIGraphDump,
diff --git a/devel/electron7/files/patch-chrome_app_chrome__main.cc b/devel/electron7/files/patch-chrome_app_chrome__main.cc
new file mode 100644
index 000000000000..ff56044b016d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_chrome__main.cc
@@ -0,0 +1,16 @@
+--- chrome/app/chrome_main.cc.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/chrome_main.cc
+@@ -101,11 +101,11 @@ int ChromeMain(int argc, const char** argv) {
+ MainThreadStackSamplingProfiler scoped_sampling_profiler;
+
+ // Chrome-specific process modes.
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ if (command_line->HasSwitch(switches::kHeadless)) {
+ return headless::HeadlessShellMain(params);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ int rv = content::ContentMain(params);
+
diff --git a/devel/electron7/files/patch-chrome_app_chrome__main__delegate.cc b/devel/electron7/files/patch-chrome_app_chrome__main__delegate.cc
new file mode 100644
index 000000000000..0c05a2b85d05
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_chrome__main__delegate.cc
@@ -0,0 +1,144 @@
+--- chrome/app/chrome_main_delegate.cc.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/chrome_main_delegate.cc
+@@ -99,7 +99,7 @@
+ #include "chrome/app/shutdown_signal_handlers_posix.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ #include "components/nacl/common/nacl_paths.h"
+ #include "components/nacl/zygote/nacl_fork_delegate_linux.h"
+ #endif
+@@ -137,7 +137,7 @@
+ #include "v8/include/v8.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #endif
+
+@@ -240,7 +240,7 @@ bool UseHooks() {
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ void AdjustLinuxOOMScore(const std::string& process_type) {
+ // Browsers and zygotes should still be killable, but killed last.
+ const int kZygoteScore = 0;
+@@ -299,13 +299,13 @@ void AdjustLinuxOOMScore(const std::string& process_ty
+ if (score > -1)
+ base::AdjustOOMScore(base::GetCurrentProcId(), score);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ // Returns true if this subprocess type needs the ResourceBundle initialized
+ // and resources loaded.
+ bool SubprocessNeedsResourceBundle(const std::string& process_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The zygote process opens the resources for the renderers.
+ process_type == service_manager::switches::kZygoteProcess ||
+ #endif
+@@ -344,7 +344,7 @@ bool HandleVersionSwitches(const base::CommandLine& co
+ return false;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Show the man page if --help or -h is on the command line.
+ void HandleHelpSwitches(const base::CommandLine& command_line) {
+ if (command_line.HasSwitch(switches::kHelp) ||
+@@ -354,7 +354,7 @@ void HandleHelpSwitches(const base::CommandLine& comma
+ PLOG(FATAL) << "execlp failed";
+ }
+ }
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ void SIGTERMProfilingShutdown(int signal) {
+@@ -408,7 +408,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, Chrome does not support running multiple copies under different
+ // DISPLAYs, so the profile directory can be specified in the environment to
+ // support the virtual desktop use-case.
+@@ -420,7 +420,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ user_data_dir = base::FilePath::FromUTF8Unsafe(user_data_dir_string);
+ }
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_MACOSX)
+ policy::path_parser::CheckUserDataDirPolicy(&user_data_dir);
+ #endif // OS_MAC
+@@ -477,7 +477,7 @@ void InitLogging(const std::string& process_type) {
+ void RecordMainStartupMetrics(base::TimeTicks exe_entry_point_ticks) {
+ if (!exe_entry_point_ticks.is_null())
+ startup_metric_utils::RecordExeMainEntryPointTicks(exe_entry_point_ticks);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Record the startup process creation time on supported platforms.
+ startup_metric_utils::RecordStartupProcessCreationTime(
+ base::Process::Current().CreationTime());
+@@ -654,7 +654,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ *exit_code = 0;
+ return true; // Got a --version switch; exit with a success error code.
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This will directly exit if the user asked for help.
+ HandleHelpSwitches(command_line);
+ #endif
+@@ -678,7 +678,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ #if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+ #endif
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ nacl::RegisterPathProvider();
+ #endif
+
+@@ -872,7 +872,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ #if defined(OS_WIN)
+ child_process_logging::Init();
+ #endif
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
+@@ -996,7 +996,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ InitializePDF();
+ #endif
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Zygote needs to call InitCrashReporter() in RunZygote().
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ #if defined(OS_ANDROID)
+@@ -1011,7 +1011,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ breakpad::InitCrashReporter(process_type);
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // After all the platform Breakpads have been initialized, store the command
+ // line for crash reporting.
+@@ -1021,7 +1021,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
+ // Note: If you are adding a new process type below, be sure to adjust the
+ // AdjustLinuxOOMScore function too.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ AdjustLinuxOOMScore(process_type);
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron7/files/patch-chrome_app_chromium__strings.grd b/devel/electron7/files/patch-chrome_app_chromium__strings.grd
new file mode 100644
index 000000000000..a55db99e25d2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_chromium__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/chromium_strings.grd.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/chromium_strings.grd
+@@ -694,7 +694,7 @@ Signing in anyway will merge Chromium information like
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured Chromium to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -825,7 +825,7 @@ Signing in anyway will merge Chromium information like
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Chromium process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chromium has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.
+ </message>
+@@ -1069,7 +1069,7 @@ Signing in anyway will merge Chromium information like
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chromium to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron7/files/patch-chrome_app_generated__resources.grd b/devel/electron7/files/patch-chrome_app_generated__resources.grd
new file mode 100644
index 000000000000..2e023ae28803
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_generated__resources.grd
@@ -0,0 +1,29 @@
+--- chrome/app/generated_resources.grd.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/generated_resources.grd
+@@ -4885,7 +4885,7 @@ Keep your key file in a safe place. You will need it t
+ </if>
+
+ <!-- chrome://browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_TITLE" desc="about:browser-switch page title">
+ Legacy Browser Support
+ </message>
+@@ -6520,7 +6520,7 @@ the Bookmarks menu.">
+ Google Pay
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+ Use system title bar and borders
+ </message>
+@@ -7401,7 +7401,7 @@ Please help our engineers fix this problem. Tell us wh
+ Set as default
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_MINIMIZE_WINDOW_MENU" desc="The Linux browser window menu item text for minimizing the window.">
+ Minimize
+ </message>
diff --git a/devel/electron7/files/patch-chrome_app_google__chrome__strings.grd b/devel/electron7/files/patch-chrome_app_google__chrome__strings.grd
new file mode 100644
index 000000000000..256daa8d776a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_google__chrome__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/google_chrome_strings.grd.orig 2019-12-12 12:39:04 UTC
++++ chrome/app/google_chrome_strings.grd
+@@ -706,7 +706,7 @@ Signing in anyway will merge Chrome information like b
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured Google Chrome to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -837,7 +837,7 @@ Signing in anyway will merge Chrome information like b
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Google Chrome process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chrome has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chrome.
+ </message>
+@@ -1088,7 +1088,7 @@ Signing in anyway will merge Chrome information like b
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chrome to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/devel/electron7/files/patch-chrome_app_settings__strings.grdp b/devel/electron7/files/patch-chrome_app_settings__strings.grdp
new file mode 100644
index 000000000000..2c84d31bd8a6
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_settings__strings.grdp
@@ -0,0 +1,20 @@
+--- chrome/app/settings_strings.grdp.orig 2019-12-12 12:39:06 UTC
++++ chrome/app/settings_strings.grdp
+@@ -757,7 +757,7 @@
+ Themes
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SETTINGS_SYSTEM_THEME" desc="Text of the label describing the system (GTK+) browser theme on Linux">
+ GTK+
+ </message>
+@@ -771,7 +771,7 @@
+ Use Classic
+ </message>
+ </if>
+- <if expr="not is_linux or chromeos">
++ <if expr="not is_posix or chromeos">
+ <message name="IDS_SETTINGS_RESET_TO_DEFAULT_THEME" desc="Name of the control which resets the browser theme back to the default theme.">
+ Reset to default
+ </message>
diff --git a/devel/electron7/files/patch-chrome_app_shutdown__signal__handlers__posix.cc b/devel/electron7/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
new file mode 100644
index 000000000000..1a06edd9aeb5
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
@@ -0,0 +1,21 @@
+--- chrome/app/shutdown_signal_handlers_posix.cc.orig 2019-12-12 12:39:06 UTC
++++ chrome/app/shutdown_signal_handlers_posix.cc
+@@ -186,12 +186,18 @@ void InstallShutdownSignalHandlers(
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ // PTHREAD_STACK_MIN causes chromium to crash under FreeBSD,
++ // we request the default pthread stack size by specifying 0 here.
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+ // ASan instrumentation bloats the stack frames, so we need to increase the
+ // stack size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ ShutdownDetector* detector = new ShutdownDetector(
+ g_shutdown_pipe_read_fd, std::move(shutdown_callback), task_runner);
diff --git a/devel/electron7/files/patch-chrome_app_theme_chrome__unscaled__resources.grd b/devel/electron7/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
new file mode 100644
index 000000000000..ca75c7a3b577
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
@@ -0,0 +1,20 @@
+--- chrome/app/theme/chrome_unscaled_resources.grd.orig 2019-12-12 12:39:06 UTC
++++ chrome/app/theme/chrome_unscaled_resources.grd
+@@ -18,7 +18,7 @@
+ <include name="IDR_PRODUCT_LOGO_64" file="google_chrome/product_logo_64.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128" file="google_chrome/product_logo_128.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_256" file="google_chrome/product_logo_256.png" type="BINDATA" />
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <include name="IDR_PRODUCT_LOGO_128_BETA" file="google_chrome/product_logo_128_beta.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128_DEV" file="google_chrome/product_logo_128_dev.png" type="BINDATA" />
+ </if>
+@@ -109,7 +109,7 @@
+ <include name="IDR_PROFILE_AVATAR_2X_25" file="default_200_percent/common/profile_avatar_sun_cloud.png" type="BINDATA" />
+ <include name="IDR_PROFILE_AVATAR_2X_26" file="default_200_percent/common/profile_avatar_placeholder.png" type="BINDATA" />
+ </if>
+- <if expr="is_linux and enable_app_list">
++ <if expr="is_posix and enable_app_list">
+ <!-- App Launcher icons for desktop icon. -->
+ <if expr="_google_chrome">
+ <then>
diff --git a/devel/electron7/files/patch-chrome_app_theme_theme__resources.grd b/devel/electron7/files/patch-chrome_app_theme_theme__resources.grd
new file mode 100644
index 000000000000..c10ff84a82ca
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_app_theme_theme__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/app/theme/theme_resources.grd.orig 2019-12-12 12:39:07 UTC
++++ chrome/app/theme/theme_resources.grd
+@@ -25,7 +25,7 @@
+ <!-- KEEP THESE IN ALPHABETICAL ORDER! DO NOT ADD TO RANDOM PLACES JUST
+ BECAUSE YOUR RESOURCES ARE FUNCTIONALLY RELATED OR FALL UNDER THE
+ SAME CONDITIONALS. -->
+- <if expr="is_linux or is_win or chromeos">
++ <if expr="is_posix or is_win or chromeos">
+ <structure type="chrome_scaled_image" name="IDR_ACCESSIBILITY_CAPTIONS_PREVIEW_BACKGROUND" file="common/captions-preview-bg.png" />
+ </if>
+ <if expr="toolkit_views and not is_macosx">
diff --git a/devel/electron7/files/patch-chrome_browser_about__flags.cc b/devel/electron7/files/patch-chrome_browser_about__flags.cc
new file mode 100644
index 000000000000..eb35ee59782a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_about__flags.cc
@@ -0,0 +1,285 @@
+--- chrome/browser/about_flags.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/about_flags.cc
+@@ -162,7 +162,7 @@
+ #include "ui/gl/gl_switches.h"
+ #include "ui/native_theme/native_theme_features.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/allocator/buildflags.h"
+ #endif
+
+@@ -716,7 +716,7 @@ const FeatureEntry::FeatureVariation
+ nullptr}};
+ #endif // OS_ANDROID
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const FeatureEntry::FeatureParam
+ kAutofillSaveCreditCardUsesImprovedMessagingStoreCard[] = {
+ {autofill::features::
+@@ -763,7 +763,7 @@ const FeatureEntry::FeatureVariation
+ kAutofillSaveCreditCardUsesImprovedMessagingConfirmAndSaveCard),
+ nullptr},
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const FeatureEntry::Choice kMemlogModeChoices[] = {
+ {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
+@@ -816,7 +816,7 @@ const FeatureEntry::Choice kMemlogSamplingRateChoices[
+ heap_profiling::kMemlogSamplingRate5MB},
+ };
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const FeatureEntry::FeatureParam kOmniboxDocumentProviderServerScoring[] = {
+ {"DocumentUseServerScore", "true"},
+ {"DocumentUseClientScore", "false"},
+@@ -854,7 +854,7 @@ const FeatureEntry::FeatureVariation kOmniboxDocumentP
+ base::size(kOmniboxDocumentProviderClientScoring), nullptr},
+ {"server and client scores", kOmniboxDocumentProviderServerAndClientScoring,
+ base::size(kOmniboxDocumentProviderServerAndClientScoring), nullptr}};
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ const FeatureEntry::FeatureParam kOmniboxOnFocusSuggestionsParamNTPOmnibox[] = {
+ {"ZeroSuggestVariant:7:*", ZeroSuggestProvider::kRemoteNoUrlVariant}};
+@@ -932,7 +932,7 @@ const FeatureEntry::FeatureVariation kOmniboxMaxURLMat
+ {"6 matches", kOmniboxMaxURLMatches6, base::size(kOmniboxMaxURLMatches6),
+ nullptr}};
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const FeatureEntry::FeatureParam kTranslateBubbleUIButton[] = {
+ {language::kTranslateUIBubbleKey, language::kTranslateUIBubbleButtonValue}};
+@@ -948,7 +948,7 @@ const FeatureEntry::FeatureVariation kTranslateBubbleU
+ {"Tab", kTranslateBubbleUITab, base::size(kTranslateBubbleUITab), nullptr},
+ {"Button_GM2", kTranslateBubbleUIButtonGM2,
+ base::size(kTranslateBubbleUIButton), nullptr}};
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_BSD || OS_CHROMEOS
+
+ const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = {
+ {security_state::features::kMarkHttpAsFeatureParameterName,
+@@ -1849,13 +1849,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kCloudPrintXpsDescription, kOsWin,
+ SINGLE_VALUE_TYPE(switches::kEnableCloudPrintXps)},
+ #endif // OS_WIN
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl2-compute-context",
+ flag_descriptions::kWebGL2ComputeContextName,
+ flag_descriptions::kWebGL2ComputeContextDescription,
+ kOsWin | kOsLinux | kOsCrOS,
+ SINGLE_VALUE_TYPE(switches::kEnableWebGL2ComputeContext)},
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl-draft-extensions",
+ flag_descriptions::kWebglDraftExtensionsName,
+ flag_descriptions::kWebglDraftExtensionsDescription, kOsAll,
+@@ -1904,14 +1904,14 @@ const FeatureEntry kFeatureEntries[] = {
+ "OverrideTranslateTriggerInIndia")},
+ #endif // OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"translate-ui-bubble-options", flag_descriptions::kTranslateBubbleUIName,
+ flag_descriptions::kTranslateBubbleUIDescription, kOsDesktop,
+ FEATURE_WITH_PARAMS_VALUE_TYPE(language::kUseButtonTranslateBubbleUi,
+ kTranslateBubbleUIVariations,
+ "UseButtonTranslateBubbleUI")},
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS || OS_BSD
+
+ #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
+ {"enable-native-notifications",
+@@ -1983,7 +1983,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kCrostiniBackupDescription, kOsCrOS,
+ FEATURE_VALUE_TYPE(chromeos::features::kCrostiniBackup)},
+ #endif // OS_CHROMEOS
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ {"terminal-system-app", flag_descriptions::kTerminalSystemAppName,
+ flag_descriptions::kTerminalSystemAppDescription, kOsCrOS | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kTerminalSystemApp)},
+@@ -1992,7 +1992,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kDynamicTcmallocDescription, kOsCrOS | kOsLinux,
+ FEATURE_VALUE_TYPE(performance_manager::features::kDynamicTcmallocTuning)},
+ #endif // BUILDFLAG(USE_TCMALLOC)
+-#endif // OS_CHROMEOS || OS_LINUX
++#endif // OS_CHROMEOS || OS_LINUX || defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ {"enable-credit-card-assist", flag_descriptions::kCreditCardAssistName,
+ flag_descriptions::kCreditCardAssistDescription, kOsAndroid,
+@@ -2075,7 +2075,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(
+ previews::features::kHTTPSServerPreviewsUsingURLLoader)},
+ #endif // OS_ANDROID
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-save-data", flag_descriptions::kEnableSaveDataName,
+ flag_descriptions::kEnableSaveDataDescription, kOsCrOS,
+ SINGLE_VALUE_TYPE(
+@@ -2427,12 +2427,12 @@ const FeatureEntry kFeatureEntries[] = {
+ "AndroidNightMode")},
+ #endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE)
+ #endif // OS_ANDROID
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"enable-dbus-and-x11-status-icons",
+ flag_descriptions::kEnableDbusAndX11StatusIconsName,
+ flag_descriptions::kEnableDbusAndX11StatusIconsDescription, kOsLinux,
+ FEATURE_VALUE_TYPE(features::kEnableDbusAndX11StatusIcons)},
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"enable-experimental-accessibility-features",
+ flag_descriptions::kExperimentalAccessibilityFeaturesName,
+ flag_descriptions::kExperimentalAccessibilityFeaturesDescription, kOsCrOS,
+@@ -2752,7 +2752,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kOmniboxLocalEntitySuggestionsDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kOmniboxLocalEntitySuggestions)},
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ {"omnibox-experimental-keyword-mode",
+ flag_descriptions::kOmniboxExperimentalKeywordModeName,
+ flag_descriptions::kOmniboxExperimentalKeywordModeDescription, kOsDesktop,
+@@ -2806,7 +2806,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kDocumentProvider,
+ kOmniboxDocumentProviderVariations,
+ "OmniboxBundledExperimentV1")},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ {"enable-speculative-service-worker-start-on-query-input",
+ flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputName,
+@@ -3026,13 +3026,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kClickToOpenPDFDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"direct-manipulation-stylus",
+ flag_descriptions::kDirectManipulationStylusName,
+ flag_descriptions::kDirectManipulationStylusDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kDirectManipulationStylus)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if !defined(OS_ANDROID)
+ {"chrome-colors", flag_descriptions::kChromeColorsName,
+@@ -3729,7 +3729,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(kClickToCallReceiver)},
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"click-to-call-context-menu-selected-text",
+ flag_descriptions::kClickToCallContextMenuForSelectedTextName,
+@@ -3739,7 +3739,7 @@ const FeatureEntry kFeatureEntries[] = {
+ {"click-to-call-ui", flag_descriptions::kClickToCallUIName,
+ flag_descriptions::kClickToCallUIDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(kClickToCallUI)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ {"shared-clipboard-receiver",
+@@ -3859,13 +3859,13 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(printing::features::kEnableCustomMacPaperSizes)},
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"enable-reopen-tab-in-product-help",
+ flag_descriptions::kReopenTabInProductHelpName,
+ flag_descriptions::kReopenTabInProductHelpDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(feature_engagement::kIPHReopenTabFeature)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ {"enable-audio-focus-enforcement",
+@@ -4245,7 +4245,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kAudioWorkletRealtimeThreadDescription, kOsAll,
+ FEATURE_VALUE_TYPE(blink::features::kAudioWorkletRealtimeThread)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-autofill-save-credit-card-uses-improved-messaging",
+ flag_descriptions::kEnableAutofillSaveCreditCardUsesImprovedMessagingName,
+ flag_descriptions::
+@@ -4255,7 +4255,7 @@ const FeatureEntry kFeatureEntries[] = {
+ autofill::features::kAutofillSaveCreditCardUsesImprovedMessaging,
+ kAutofillSaveCreditCardUsesImprovedMessagingVariations,
+ "AutofillSaveCreditCardUsesImprovedMessaging")},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ {"release-notes", flag_descriptions::kReleaseNotesName,
+@@ -4337,12 +4337,12 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kEnableSyncUSSNigoriDescription, kOsAll,
+ FEATURE_VALUE_TYPE(switches::kSyncUSSNigori)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"global-media-controls", flag_descriptions::kGlobalMediaControlsName,
+ flag_descriptions::kGlobalMediaControlsDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(media::kGlobalMediaControls)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN)
+ {"win-use-native-spellchecker",
+@@ -4355,12 +4355,12 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kSafetyTipDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kSafetyTipUI)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"animated-avatar-button", flag_descriptions::kAnimatedAvatarButtonName,
+ flag_descriptions::kAnimatedAvatarButtonDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kAnimatedAvatarButton)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ {"crostini-webui-installer", flag_descriptions::kCrostiniWebUIInstallerName,
+@@ -4484,12 +4484,12 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kBundledHTTPExchangesDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kBundledHTTPExchanges)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"profile-menu-revamp", flag_descriptions::kProfileMenuRevampName,
+ flag_descriptions::kProfileMenuRevampDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kProfileMenuRevamp)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ {"password-leak-detection", flag_descriptions::kPasswordLeakDetectionName,
+ flag_descriptions::kPasswordLeakDetectionDescription, kOsAll,
+@@ -4543,11 +4543,11 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(content_settings::kImprovedCookieControls)},
+ #endif // !defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"sync-clipboard-service", flag_descriptions::kSyncClipboardServiceName,
+ flag_descriptions::kSyncClipboardServiceDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(features::kSyncClipboardServiceFeature)},
+-#endif // OS_WIN || OS_MACOSX || OS_LINUX
++#endif // OS_WIN || OS_MACOSX || OS_LINUX || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ {"enable-clipboard-provider-text-suggestions",
diff --git a/devel/electron7/files/patch-chrome_browser_after__startup__task__utils.cc b/devel/electron7/files/patch-chrome_browser_after__startup__task__utils.cc
new file mode 100644
index 000000000000..07b7adc53d4a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_after__startup__task__utils.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/after_startup_task_utils.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/after_startup_task_utils.cc
+@@ -32,7 +32,7 @@
+ #include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -118,7 +118,7 @@ void QueueTask(std::unique_ptr<AfterStartupTask> queue
+
+ void SetBrowserStartupIsComplete() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Process::Current().CreationTime() is not available on all platforms.
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+@@ -126,7 +126,7 @@ void SetBrowserStartupIsComplete() {
+ UMA_HISTOGRAM_LONG_TIMES("Startup.AfterStartupTaskDelayedUntilTime",
+ base::Time::Now() - process_creation_time);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("Startup.AfterStartupTaskCount",
+ g_after_startup_tasks.Get().size());
+ g_startup_complete_flag.Get().Set();
+@@ -135,7 +135,7 @@ void SetBrowserStartupIsComplete() {
+ g_after_startup_tasks.Get().clear();
+ g_after_startup_tasks.Get().shrink_to_fit();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make sure we complete the startup notification sequence, or launchers will
+ // get confused by not receiving the expected message from the main process.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/devel/electron7/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc b/devel/electron7/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
new file mode 100644
index 000000000000..ff7025324a99
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
@@ -0,0 +1,70 @@
+--- chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc
+@@ -4,6 +4,11 @@
+
+ #include "chrome/browser/apps/platform_apps/api/music_manager_private/device_id.h"
+
++#if defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <net/if_dl.h>
++#endif
++
+ #include <ifaddrs.h>
+ #include <net/if.h>
+ #include <stddef.h>
+@@ -106,9 +111,36 @@ class MacAddressProcessor {
+ const char* const prefixes[],
+ size_t prefixes_count) {
+ const int MAC_LENGTH = 6;
++#if defined(OS_FREEBSD)
++ struct ifaddrs *ifap, *ifinfo;
++#else
+ struct ifreq ifinfo;
++#endif
+
+ memset(&ifinfo, 0, sizeof(ifinfo));
++
++#if defined(OS_FREEBSD)
++ int result = getifaddrs(&ifap);
++
++ if (result != 0)
++ return true;
++
++ result = 1; // no MAC found yet
++
++ for (ifinfo = ifap; ifinfo != NULL; ifinfo = ifinfo->ifa_next) {
++ struct sockaddr* sa = ifinfo->ifa_addr;
++ if (sa->sa_family == AF_LINK &&
++ !strncmp(ifinfo->ifa_name, ifaddr->ifa_name,
++ sizeof(ifinfo->ifa_name) - 1)) {
++ result = 0;
++ break;
++ }
++ }
++
++ char mac_address[6];
++
++ strncpy(mac_address, (const char*)LLADDR((struct sockaddr_dl*)ifinfo->ifa_addr), sizeof(mac_address));
++#else
+ strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1);
+
+ int sd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -120,11 +152,18 @@ class MacAddressProcessor {
+
+ const char* mac_address =
+ static_cast<const char*>(ifinfo.ifr_hwaddr.sa_data);
++#endif
++
+ if (!is_valid_mac_address_.Run(mac_address, MAC_LENGTH))
+ return true;
+
++#if defined(OS_FREEBSD)
++ if (!IsValidPrefix(ifinfo->ifa_name, prefixes, prefixes_count))
++ return true;
++#else
+ if (!IsValidPrefix(ifinfo.ifr_name, prefixes, prefixes_count))
+ return true;
++#endif
+
+ // Got one!
+ found_mac_address_ =
diff --git a/devel/electron7/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc b/devel/electron7/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
new file mode 100644
index 000000000000..f5a68f327c75
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+@@ -59,12 +59,12 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForSch
+ return metrics::OmniboxInputType::QUERY;
+
+ case ExternalProtocolHandler::UNKNOWN: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Linux impl of GetApplicationNameForProtocol doesn't distinguish
+ // between URL schemes with handers and those without. This will
+ // make the default behaviour be search on Linux.
+ return metrics::OmniboxInputType::EMPTY;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // If block state is unknown, check if there is an application registered
+ // for the url scheme.
+ GURL url(scheme + "://");
diff --git a/devel/electron7/files/patch-chrome_browser_background_background__mode__manager.cc b/devel/electron7/files/patch-chrome_browser_background_background__mode__manager.cc
new file mode 100644
index 000000000000..9bc3d3093bb6
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_background_background__mode__manager.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/background/background_mode_manager.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/background/background_mode_manager.cc
+@@ -769,7 +769,7 @@ gfx::ImageSkia GetStatusTrayIcon() {
+ return gfx::ImageSkia();
+
+ return family->CreateExact(size).AsImageSkia();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+ IDR_PRODUCT_LOGO_128);
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-chrome_browser_background_background__mode__optimizer.cc b/devel/electron7/files/patch-chrome_browser_background_background__mode__optimizer.cc
new file mode 100644
index 000000000000..1d55f7d5f674
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_background_background__mode__optimizer.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/background/background_mode_optimizer.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/background/background_mode_optimizer.cc
+@@ -30,10 +30,10 @@ std::unique_ptr<BackgroundModeOptimizer> BackgroundMod
+ switches::kKeepAliveForTest))
+ return nullptr;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kBackgroundModeAllowRestart))
+ return base::WrapUnique(new BackgroundModeOptimizer());
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ return nullptr;
+ }
diff --git a/devel/electron7/files/patch-chrome_browser_browser__features.cc b/devel/electron7/files/patch-chrome_browser_browser__features.cc
new file mode 100644
index 000000000000..38f916a57109
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_browser__features.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/browser_features.cc.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/browser_features.cc
+@@ -13,9 +13,9 @@ const base::Feature kDoubleTapToZoomInTabletMode{
+ "DoubleTapToZoomInTabletMode", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Feature kSyncClipboardServiceFeature{
+ "SyncClipboardService", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // OS_WIN || OS_MACOSX || OS_LINUX
++#endif // OS_WIN || OS_MACOSX || OS_LINUX || defined(OS_BSD)
+
+ } // namespace features
diff --git a/devel/electron7/files/patch-chrome_browser_browser__features.h b/devel/electron7/files/patch-chrome_browser_browser__features.h
new file mode 100644
index 000000000000..79f3b7ab9dd9
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_browser__features.h
@@ -0,0 +1,14 @@
+--- chrome/browser/browser_features.h.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/browser_features.h
+@@ -20,9 +20,9 @@ namespace features {
+ extern const base::Feature kDoubleTapToZoomInTabletMode;
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const base::Feature kSyncClipboardServiceFeature;
+-#endif // OS_WIN || OS_MACOSX || OS_LINUX
++#endif // OS_WIN || OS_MACOSX || OS_LINUX || defined(OS_BSD)
+
+ } // namespace features
+
diff --git a/devel/electron7/files/patch-chrome_browser_browser__resources.grd b/devel/electron7/files/patch-chrome_browser_browser__resources.grd
new file mode 100644
index 000000000000..b03da3726ccf
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_browser__resources.grd
@@ -0,0 +1,20 @@
+--- chrome/browser/browser_resources.grd.orig 2019-12-12 12:39:07 UTC
++++ chrome/browser/browser_resources.grd
+@@ -106,7 +106,7 @@
+ <include name="IDR_DISCARDS_SORTED_TABLE_BEHAVIOR_JS" file="resources\discards\sorted_table_behavior.js" compress="gzip" type="BINDATA" />
+ <include name="IDR_DISCARDS_WEBUI_GRAPH_DUMP_MOJOM_LITE_JS" file="${root_gen_dir}\chrome\browser\performance_manager\webui_graph_dump.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" />
+ </if>
+- <if expr="is_win or is_macosx or (is_linux and not is_chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not is_chromeos)">
+ <include name="IDR_BROWSER_SWITCH_APP_HTML" file="resources\browser_switch\app.html" compress="gzip" allowexternalscript="true" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_APP_JS" file="resources\browser_switch\app.js" compress="gzip" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_PROXY_HTML" file="resources\browser_switch\browser_switch_proxy.html" compress="gzip" allowexternalscript="true" type="BINDATA" />
+@@ -561,7 +561,7 @@
+ <include name="IDR_IME_WINDOW_CLOSE_H" file="resources\input_ime\ime_window_close_hover.png" type="BINDATA" />
+ </if>
+ <include name="IDR_SSL_ERROR_ASSISTANT_PB" file="${root_gen_dir}/chrome/browser/resources/ssl/ssl_error_assistant/ssl_error_assistant.pb" use_base_dir="false" type="BINDATA" />
+- <if expr="is_android or is_linux">
++ <if expr="is_android or is_posix">
+ <include name="IDR_SANDBOX_INTERNALS_HTML" file="resources\sandbox_internals\sandbox_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_SANDBOX_INTERNALS_JS" file="resources\sandbox_internals\sandbox_internals.js" type="BINDATA" compress="gzip" />
+ </if>
diff --git a/devel/electron7/files/patch-chrome_browser_chrome__browser__main.cc b/devel/electron7/files/patch-chrome_browser_chrome__browser__main.cc
new file mode 100644
index 000000000000..016a36b929c8
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_chrome__browser__main.cc
@@ -0,0 +1,75 @@
+--- chrome/browser/chrome_browser_main.cc.orig 2019-12-12 12:39:08 UTC
++++ chrome/browser/chrome_browser_main.cc
+@@ -222,9 +222,9 @@
+ #include "components/arc/metrics/stability_metrics_manager.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/first_run/upgrade_util_linux.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ #if defined(OS_LINUX)
+ #include "components/crash/content/app/breakpad_linux.h"
+@@ -261,7 +261,7 @@
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+ #include "chrome/browser/profiles/profile_activity_metrics_recorder.h"
+ #endif
+@@ -1075,7 +1075,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Create directory for user-level Native Messaging manifest files. This
+ // makes it less likely that the directory will be created by third-party
+ // software with incorrect owner or permission. See crbug.com/725513 .
+@@ -1084,14 +1084,14 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ &user_native_messaging_dir));
+ if (!base::PathExists(user_native_messaging_dir))
+ base::CreateDirectory(user_native_messaging_dir);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ // Set the product channel for crash reports.
+ breakpad::SetChannelCrashKey(chrome::GetChannelName());
+-#endif // defined(OS_LINUX) || defined(OS_OPENBSD)
++#endif // defined(OS_LINUX)
+
+ #if defined(OS_MACOSX)
+ // Get the Keychain API to register for distributed notifications on the main
+@@ -1121,7 +1121,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ metrics::DesktopSessionDurationTracker::Initialize();
+ ProfileActivityMetricsRecorder::Initialize();
+ #endif
+@@ -1280,6 +1280,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::TimeDelta::FromMinutes(1));
+
+ #if !defined(OS_ANDROID)
++#if !defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kWebUsb)) {
+ web_usb_detector_.reset(new WebUsbDetector());
+ base::PostTask(
+@@ -1288,6 +1289,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::BindOnce(&WebUsbDetector::Initialize,
+ base::Unretained(web_usb_detector_.get())));
+ }
++#endif
+ if (base::FeatureList::IsEnabled(features::kTabMetricsLogging)) {
+ // Initialize the TabActivityWatcher to begin logging tab activity events.
+ resource_coordinator::TabActivityWatcher::GetInstance();
diff --git a/devel/electron7/files/patch-chrome_browser_chrome__browser__main__linux.cc b/devel/electron7/files/patch-chrome_browser_chrome__browser__main__linux.cc
new file mode 100644
index 000000000000..359890dcee6d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_chrome__browser__main__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/chrome_browser_main_linux.cc.orig 2019-12-12 12:39:08 UTC
++++ chrome/browser/chrome_browser_main_linux.cc
+@@ -91,12 +91,14 @@ void ChromeBrowserMainPartsLinux::PreProfileInit() {
+ void ChromeBrowserMainPartsLinux::PostProfileInit() {
+ ChromeBrowserMainPartsPosix::PostProfileInit();
+
++#if !defined(OS_BSD)
+ g_browser_process->metrics_service()->RecordBreakpadRegistration(
+ breakpad::IsCrashReporterEnabled());
++#endif
+ }
+
+ void ChromeBrowserMainPartsLinux::PostMainMessageLoopStart() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Initialize(nullptr /* system_bus */);
+ #endif
+
+@@ -104,7 +106,7 @@ void ChromeBrowserMainPartsLinux::PostMainMessageLoopS
+ }
+
+ void ChromeBrowserMainPartsLinux::PostDestroyThreads() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Shutdown();
+ bluez::BluezDBusThreadManager::Shutdown();
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_chrome__browser__main__posix.cc b/devel/electron7/files/patch-chrome_browser_chrome__browser__main__posix.cc
new file mode 100644
index 000000000000..e9dd14fff82f
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_chrome__browser__main__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/chrome_browser_main_posix.cc.orig 2019-12-12 12:39:08 UTC
++++ chrome/browser/chrome_browser_main_posix.cc
+@@ -70,7 +70,7 @@ void ExitHandler::ExitWhenPossibleOnUIThread(int signa
+ // ExitHandler takes care of deleting itself.
+ new ExitHandler();
+ } else {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ switch (signal) {
+ case SIGINT:
+ case SIGHUP:
+@@ -166,7 +166,7 @@ void ChromeBrowserMainPartsPosix::PostMainMessageLoopS
+ void ChromeBrowserMainPartsPosix::ShowMissingLocaleMessageBox() {
+ #if defined(OS_CHROMEOS)
+ NOTREACHED(); // Should not ever happen on ChromeOS.
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+ #elif defined(USE_AURA)
diff --git a/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.cc b/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.cc
new file mode 100644
index 000000000000..c7b10ad5e591
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.cc
@@ -0,0 +1,83 @@
+--- chrome/browser/chrome_content_browser_client.cc.orig 2019-12-12 12:39:08 UTC
++++ chrome/browser/chrome_content_browser_client.cc
+@@ -403,7 +403,7 @@
+ #include "components/user_manager/user.h"
+ #include "components/user_manager/user_manager.h"
+ #include "services/service_manager/public/mojom/interface_provider_spec.mojom.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/chrome_browser_main_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "base/android/application_status_listener.h"
+@@ -459,7 +459,7 @@
+ #endif // !defined(OS_ANDROID)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_navigation_throttle.h"
+ #endif
+
+@@ -485,7 +485,7 @@
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux_x11.h"
+ #else
+@@ -1200,7 +1200,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ #elif defined(OS_CHROMEOS)
+ main_parts = std::make_unique<chromeos::ChromeBrowserMainPartsChromeos>(
+ parameters, startup_data_);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ main_parts =
+ std::make_unique<ChromeBrowserMainPartsLinux>(parameters, startup_data_);
+ #elif defined(OS_ANDROID)
+@@ -1226,7 +1226,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ // Construct additional browser parts. Stages are called in the order in
+ // which they are added.
+ #if defined(TOOLKIT_VIEWS)
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViewsLinuxX11());
+ #else
+@@ -2029,7 +2029,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ command_line->AppendSwitchASCII(switches::kMetricsClientID,
+ client_info->client_id);
+ }
+-#elif defined(OS_POSIX)
++#elif defined(OS_POSIX) && !defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ bool enable_crash_reporter = true;
+ #else
+@@ -2267,7 +2267,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ StackSamplingConfiguration::Get()->AppendCommandLineSwitchForChildProcess(
+ process_type, command_line);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Processes may only query perf_event_open with the BPF sandbox disabled.
+ if (browser_command_line.HasSwitch(switches::kEnableThreadInstructionCount) &&
+ command_line->HasSwitch(service_manager::switches::kNoSandbox)) {
+@@ -3575,7 +3575,7 @@ void ChromeContentBrowserClient::GetAdditionalFileSyst
+ }
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -4245,7 +4245,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigati
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<content::NavigationThrottle> browser_switcher_throttle =
+ browser_switcher::BrowserSwitcherNavigationThrottle ::
+ MaybeCreateThrottleFor(handle);
diff --git a/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.h b/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.h
new file mode 100644
index 000000000000..1ae1e498405d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_chrome__content__browser__client.h
@@ -0,0 +1,17 @@
+--- chrome/browser/chrome_content_browser_client.h.orig 2019-12-12 12:39:08 UTC
++++ chrome/browser/chrome_content_browser_client.h
+@@ -360,12 +360,12 @@ class ChromeContentBrowserClient : public content::Con
+ void OverridePageVisibilityState(
+ content::RenderFrameHost* render_frame_host,
+ content::PageVisibilityState* visibility_state) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #if defined(OS_WIN)
+ bool PreSpawnRenderer(sandbox::TargetPolicy* policy,
+ RendererSpawnFlags flags) override;
diff --git a/devel/electron7/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc b/devel/electron7/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
new file mode 100644
index 000000000000..17f85cd60c49
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/custom_handlers/protocol_handler_registry.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/custom_handlers/protocol_handler_registry.cc
+@@ -43,7 +43,7 @@ const ProtocolHandler& LookupHandler(
+ // If true default protocol handlers will be removed if the OS level
+ // registration for a protocol is no longer Chrome.
+ bool ShouldRemoveHandlersNotInOS() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // We don't do this on Linux as the OS registration there is not reliable,
+ // and Chrome OS doesn't have any notion of OS registration.
+ // TODO(benwells): When Linux support is more reliable remove this
diff --git a/devel/electron7/files/patch-chrome_browser_defaults.cc b/devel/electron7/files/patch-chrome_browser_defaults.cc
new file mode 100644
index 000000000000..db51b7910e4e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_defaults.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/defaults.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/defaults.cc
+@@ -43,7 +43,7 @@ const bool kSyncAutoStarts = true;
+ const bool kSyncAutoStarts = false;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const bool kScrollEventChangesTab = true;
+ #else
+ const bool kScrollEventChangesTab = false;
diff --git a/devel/electron7/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc b/devel/electron7/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
new file mode 100644
index 000000000000..65e525c2c84a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/devtools/devtools_eye_dropper.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/devtools/devtools_eye_dropper.cc
+@@ -163,7 +163,7 @@ void DevToolsEyeDropper::UpdateCursor() {
+ // magnified projection only with centered hotspot.
+ // Mac Retina requires cursor to be > 120px in order to render smoothly.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const float kCursorSize = 63;
+ const float kDiameter = 63;
+ const float kHotspotOffset = 32;
diff --git a/devel/electron7/files/patch-chrome_browser_diagnostics_diagnostics__writer.h b/devel/electron7/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
new file mode 100644
index 000000000000..b02b6d6ef16a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
@@ -0,0 +1,11 @@
+--- chrome/browser/diagnostics/diagnostics_writer.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/diagnostics/diagnostics_writer.h
+@@ -15,6 +15,8 @@ namespace diagnostics {
+ // Console base class used internally.
+ class SimpleConsole;
+
++#undef MACHINE
++
+ class DiagnosticsWriter : public DiagnosticsModel::Observer {
+ public:
+ // The type of formatting done by this writer.
diff --git a/devel/electron7/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc b/devel/electron7/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
new file mode 100644
index 000000000000..76b34bf8d9a6
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/chrome_download_manager_delegate.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/chrome_download_manager_delegate.cc
+@@ -1257,7 +1257,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+ target_info->is_filetype_handled_safely)
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (item->GetOriginalMimeType() == "application/x-x509-user-cert")
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+ #endif
+@@ -1287,7 +1287,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+
+ bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile(
+ const base::FilePath& path) {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) {
+ return !download_prefs_->ShouldOpenPdfInSystemReader();
+ }
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__commands.cc b/devel/electron7/files/patch-chrome_browser_download_download__commands.cc
new file mode 100644
index 000000000000..48df142619a5
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__commands.cc
@@ -0,0 +1,35 @@
+--- chrome/browser/download/download_commands.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_commands.cc
+@@ -30,7 +30,7 @@
+ #include "net/base/url_util.h"
+ #include "ui/base/clipboard/scoped_clipboard_writer.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser.h"
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
+@@ -157,7 +157,7 @@ void DownloadCommands::ExecuteCommand(Command command)
+ model_->ExecuteCommand(this, command);
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ Browser* DownloadCommands::GetBrowser() const {
+ chrome::ScopedTabbedBrowserDisplayer browser_displayer(model_->profile());
+@@ -180,12 +180,12 @@ bool DownloadCommands::CanOpenPdfInSystemViewer() cons
+ return IsDownloadPdf() &&
+ (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date
+ : true);
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return IsDownloadPdf();
+ #endif
+ }
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void DownloadCommands::CopyFileAsImageToClipboard() {
+ if (model_->GetState() != download::DownloadItem::COMPLETE ||
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__commands.h b/devel/electron7/files/patch-chrome_browser_download_download__commands.h
new file mode 100644
index 000000000000..2c07d5f85d49
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__commands.h
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_commands.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_commands.h
+@@ -45,7 +45,7 @@ class DownloadCommands {
+ bool IsCommandVisible(Command command) const;
+ void ExecuteCommand(Command command);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool IsDownloadPdf() const;
+ bool CanOpenPdfInSystemViewer() const;
+ Browser* GetBrowser() const;
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__item__model.cc b/devel/electron7/files/patch-chrome_browser_download_download__item__model.cc
new file mode 100644
index 000000000000..8a416580cf0b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__item__model.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_item_model.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_item_model.cc
+@@ -565,7 +565,7 @@ bool DownloadItemModel::IsCommandChecked(
+ return download_->GetOpenWhenComplete() ||
+ download_crx_util::IsExtensionDownload(*download_);
+ case DownloadCommands::ALWAYS_OPEN_TYPE:
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+ return prefs->ShouldOpenPdfInSystemReader();
+@@ -602,7 +602,7 @@ void DownloadItemModel::ExecuteCommand(DownloadCommand
+ bool is_checked = IsCommandChecked(download_commands,
+ DownloadCommands::ALWAYS_OPEN_TYPE);
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ prefs->SetShouldOpenPdfInSystemReader(!is_checked);
+ SetShouldPreferOpeningInBrowser(is_checked);
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__prefs.cc b/devel/electron7/files/patch-chrome_browser_download_download__prefs.cc
new file mode 100644
index 000000000000..105eff4201ff
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__prefs.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/download/download_prefs.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_prefs.cc
+@@ -62,7 +62,7 @@ namespace {
+ // Consider downloads 'dangerous' if they go to the home directory on Linux and
+ // to the desktop on any platform.
+ bool DownloadPathIsDangerous(const base::FilePath& download_path) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath home_dir = base::GetHomeDir();
+ if (download_path == home_dir) {
+ return true;
+@@ -155,7 +155,7 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profi
+ GetDefaultDownloadDirectoryForProfile()));
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ should_open_pdf_in_system_reader_ =
+ prefs->GetBoolean(prefs::kOpenPdfDownloadInSystemReader);
+ #endif
+@@ -257,7 +257,7 @@ void DownloadPrefs::RegisterProfilePrefs(
+ default_download_path);
+ registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ default_download_path);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
+ #endif
+ #if defined(OS_ANDROID)
+@@ -354,7 +354,7 @@ bool DownloadPrefs::IsDownloadPathManaged() const {
+ }
+
+ bool DownloadPrefs::IsAutoOpenUsed() const {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (ShouldOpenPdfInSystemReader())
+ return true;
+ #endif
+@@ -368,7 +368,7 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension(
+ return false;
+ DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
+ extension.erase(0, 1);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (base::FilePath::CompareEqualIgnoreCase(extension,
+ FILE_PATH_LITERAL("pdf")) &&
+ ShouldOpenPdfInSystemReader())
+@@ -405,7 +405,7 @@ void DownloadPrefs::DisableAutoOpenBasedOnExtension(
+ SaveAutoOpenState();
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void DownloadPrefs::SetShouldOpenPdfInSystemReader(bool should_open) {
+ if (should_open_pdf_in_system_reader_ == should_open)
+ return;
+@@ -426,7 +426,7 @@ bool DownloadPrefs::ShouldOpenPdfInSystemReader() cons
+ #endif
+
+ void DownloadPrefs::ResetAutoOpen() {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ SetShouldOpenPdfInSystemReader(false);
+ #endif
+ auto_open_.clear();
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__prefs.h b/devel/electron7/files/patch-chrome_browser_download_download__prefs.h
new file mode 100644
index 000000000000..8ff4a435b563
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__prefs.h
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_prefs.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_prefs.h
+@@ -102,7 +102,7 @@ class DownloadPrefs {
+ // Disables auto-open based on file extension.
+ void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Store the user preference to disk. If |should_open| is true, also disable
+ // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
+ void SetShouldOpenPdfInSystemReader(bool should_open);
+@@ -150,7 +150,7 @@ class DownloadPrefs {
+ AutoOpenCompareFunctor> AutoOpenSet;
+ AutoOpenSet auto_open_;
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool should_open_pdf_in_system_reader_;
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__query.cc b/devel/electron7/files/patch-chrome_browser_download_download__query.cc
new file mode 100644
index 000000000000..dbfc79d3fac0
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__query.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/download/download_query.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_query.cc
+@@ -27,7 +27,11 @@
+ #include "components/download/public/common/download_item.h"
+ #include "components/url_formatter/url_formatter.h"
+ #include "content/public/browser/content_browser_client.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using download::DownloadDangerType;
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__shelf__context__menu.cc b/devel/electron7/files/patch-chrome_browser_download_download__shelf__context__menu.cc
new file mode 100644
index 000000000000..86c2196fcb5c
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__shelf__context__menu.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_shelf_context_menu.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_shelf_context_menu.cc
+@@ -127,7 +127,7 @@ base::string16 DownloadShelfContextMenu::GetLabelForCo
+ : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
+ }
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (can_open_pdf_in_system_viewer) {
+ id = IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
diff --git a/devel/electron7/files/patch-chrome_browser_download_download__status__updater.cc b/devel/electron7/files/patch-chrome_browser_download_download__status__updater.cc
new file mode 100644
index 000000000000..8b45729ebd3e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_download_download__status__updater.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_status_updater.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/download/download_status_updater.cc
+@@ -13,7 +13,7 @@
+ #include "base/memory/ptr_util.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -136,7 +136,7 @@ void DownloadStatusUpdater::OnDownloadUpdated(content:
+ #if defined(OS_ANDROID) || (defined(USE_AURA) && !defined(OS_WIN))
+ void DownloadStatusUpdater::UpdateAppIconDownloadProgress(
+ download::DownloadItem* download) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ float progress = 0;
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_BUILD.gn b/devel/electron7/files/patch-chrome_browser_extensions_BUILD.gn
new file mode 100644
index 000000000000..a6eb11018269
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_BUILD.gn
@@ -0,0 +1,15 @@
+--- chrome/browser/extensions/BUILD.gn.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/BUILD.gn
+@@ -1128,6 +1128,12 @@ jumbo_static_library("extensions") {
+ deps += [ "//chrome/common:service_process_mojom" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "api/image_writer_private/removable_storage_provider_linux.cc",
++ ]
++ }
++
+ if (enable_service_discovery) {
+ sources += [
+ "api/mdns/mdns_api.cc",
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_activity__log_activity__log.cc b/devel/electron7/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
new file mode 100644
index 000000000000..11018dbf4008
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/extensions/activity_log/activity_log.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/activity_log/activity_log.cc
+@@ -54,7 +54,11 @@
+ #include "extensions/browser/extensions_browser_client.h"
+ #include "extensions/common/extension.h"
+ #include "extensions/common/extension_messages.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ namespace constants = activity_log_constants;
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc b/devel/electron7/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
new file mode 100644
index 000000000000..4434c086f1ef
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc
+@@ -21,6 +21,7 @@ static base::LazyInstance<scoped_refptr<StorageDeviceL
+
+ void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
++#if !defined(OS_BSD)
+ if (g_test_device_list.Get().get() != nullptr) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+@@ -34,6 +35,9 @@ void RemovableStorageProvider::GetAllDevices(DeviceLis
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+ base::BindOnce(&RemovableStorageProvider::PopulateDeviceList),
+ std::move(callback));
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ // static
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h b/devel/electron7/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
new file mode 100644
index 000000000000..4357c1c439e2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/input_ime/input_ime_api.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/api/input_ime/input_ime_api.h
+@@ -31,7 +31,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_nonchromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc b/devel/electron7/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
new file mode 100644
index 000000000000..9446f5e2f153
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+@@ -299,6 +299,8 @@ bool ChromeRuntimeAPIDelegate::GetPlatformInfo(Platfor
+ info->os = extensions::api::runtime::PLATFORM_OS_CROS;
+ } else if (strcmp(os, "linux") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_LINUX;
++ } else if (strcmp(os, "freebsd") == 0) {
++ info->os = extensions::api::runtime::PLATFORM_OS_FREEBSD;
+ } else if (strcmp(os, "openbsd") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_OPENBSD;
+ } else {
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc b/devel/electron7/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
new file mode 100644
index 000000000000..6c68e710a82e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/settings_private/prefs_util.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -155,7 +155,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ (*s_whitelist)[::prefs::kUseCustomChromeFrame] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
+@@ -165,7 +165,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ // Appearance settings.
+ (*s_whitelist)[::prefs::kCurrentThemeID] =
+ settings_api::PrefType::PREF_TYPE_STRING;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUsesSystemTheme] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc b/devel/electron7/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
new file mode 100644
index 000000000000..f3b89d02185f
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
@@ -0,0 +1,43 @@
+--- chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc
+@@ -29,7 +29,7 @@
+ #include "extensions/browser/process_manager.h"
+ #include "extensions/common/error_utils.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "extensions/common/permissions/permissions_data.h"
+ #endif
+
+@@ -38,7 +38,7 @@ namespace {
+ bool CanEnableAudioDebugRecordingsFromExtension(
+ const extensions::Extension* extension) {
+ bool enabled_by_permissions = false;
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ if (extension) {
+ enabled_by_permissions =
+ extension->permissions_data()->active_permissions().HasAPIPermission(
+@@ -557,7 +557,7 @@ void WebrtcLoggingPrivateStartEventLoggingFunction::Fi
+ }
+
+ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::RunAsync() {
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Unlike other WebrtcLoggingPrivate functions that take a RequestInfo object,
+ // this function shouldn't be called by a component extension on behalf of
+ // some web code. It returns a DirectoryEntry for use directly in the calling
+@@ -580,11 +580,11 @@ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::Run
+ &WebrtcLoggingPrivateGetLogsDirectoryFunction::FireErrorCallback,
+ this));
+ return true;
+-#else // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#else // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ SetError("Not supported on the current OS");
+ SendResponse(false);
+ return false;
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void WebrtcLoggingPrivateGetLogsDirectoryFunction::FireCallback(
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc b/devel/electron7/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..235bf0c555cb
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/browser_context_keyed_service_factories.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/browser_context_keyed_service_factories.cc
+@@ -55,7 +55,7 @@
+ #include "chrome/browser/chromeos/extensions/input_method_api.h"
+ #include "chrome/browser/chromeos/extensions/media_player_api.h"
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #endif
+
+@@ -94,7 +94,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ extensions::InputImeAPI::GetFactoryInstance();
+ extensions::InputMethodAPI::GetFactoryInstance();
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ extensions::InputImeAPI::GetFactoryInstance();
+ #endif
+ extensions::LanguageSettingsPrivateDelegateFactory::GetInstance();
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_external__provider__impl.cc b/devel/electron7/files/patch-chrome_browser_extensions_external__provider__impl.cc
new file mode 100644
index 000000000000..f47722b58de9
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_external__provider__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/external_provider_impl.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/external_provider_impl.cc
+@@ -765,7 +765,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ chromeos::DemoSession::Get()->SetExtensionsExternalLoader(loader);
+ provider_list->push_back(std::move(demo_apps_provider));
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
+@@ -793,7 +793,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ bundled_extension_creation_flags));
+
+ // Define a per-user source of external extensions.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING))
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
diff --git a/devel/electron7/files/patch-chrome_browser_extensions_install__signer.cc b/devel/electron7/files/patch-chrome_browser_extensions_install__signer.cc
new file mode 100644
index 000000000000..2c413b360146
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_extensions_install__signer.cc
@@ -0,0 +1,18 @@
+--- chrome/browser/extensions/install_signer.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/extensions/install_signer.cc
+@@ -293,13 +293,13 @@ void LogRequestStartHistograms() {
+ DCHECK(g_single_thread_checker.Get().CalledOnValidThread());
+
+ // Process::Current().CreationTime is only defined on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+ UMA_HISTOGRAM_COUNTS_1M(
+ "ExtensionInstallSigner.UptimeAtTimeOfRequest",
+ (base::Time::Now() - process_creation_time).InSeconds());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ base::TimeDelta delta;
+ base::TimeTicks now = base::TimeTicks::Now();
diff --git a/devel/electron7/files/patch-chrome_browser_first__run_first__run__dialog.h b/devel/electron7/files/patch-chrome_browser_first__run_first__run__dialog.h
new file mode 100644
index 000000000000..b73629ad5cb2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_first__run_first__run__dialog.h
@@ -0,0 +1,11 @@
+--- chrome/browser/first_run/first_run_dialog.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/first_run/first_run_dialog.h
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+
+ // Hide this function on platforms where the dialog does not exist.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ class Profile;
+
diff --git a/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal.h b/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal.h
new file mode 100644
index 000000000000..74b304a62485
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal.h
@@ -0,0 +1,18 @@
+--- chrome/browser/first_run/first_run_internal.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/first_run/first_run_internal.h
+@@ -64,13 +64,13 @@ FirstRunState DetermineFirstRunState(bool has_sentinel
+ bool force_first_run,
+ bool no_first_run);
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For testing, forces the first run dialog to either be shown or not. If not
+ // called, the decision to show the dialog or not will be made by Chrome based
+ // on a number of factors (such as install type, whether it's a Chrome-branded
+ // build, etc).
+ void ForceFirstRunDialogShownForTesting(bool shown);
+-#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace internal
+ } // namespace first_run
diff --git a/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal__posix.cc b/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
new file mode 100644
index 000000000000..2843915bd9fb
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/first_run/first_run_internal_posix.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/first_run/first_run_internal_posix.cc
+@@ -45,7 +45,7 @@ enum class ForcedShowDialogState {
+ ForcedShowDialogState g_forced_show_dialog_state =
+ ForcedShowDialogState::kNotForced;
+
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ // Returns whether the first run dialog should be shown. This is only true for
+ // certain builds, and only if the user has not already set preferences. In a
+ // real, official-build first run, initializes the default metrics reporting if
+@@ -96,7 +96,7 @@ void ForceFirstRunDialogShownForTesting(bool shown) {
+ }
+
+ void DoPostImportPlatformSpecificTasks(Profile* profile) {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (!ShouldShowFirstRunDialog())
+ return;
+
diff --git a/devel/electron7/files/patch-chrome_browser_flag__descriptions.cc b/devel/electron7/files/patch-chrome_browser_flag__descriptions.cc
new file mode 100644
index 000000000000..ab5d6f53f219
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_flag__descriptions.cc
@@ -0,0 +1,79 @@
+--- chrome/browser/flag_descriptions.cc.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/flag_descriptions.cc
+@@ -3637,7 +3637,7 @@ const char kZeroStateFilesDescription[] =
+
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kTerminalSystemAppName[] = "Terminal System App";
+ const char kTerminalSystemAppDescription[] =
+ "Enables the Terminal System App at chrome://terminal which is used for "
+@@ -3650,7 +3650,7 @@ const char kDynamicTcmallocDescription[] =
+ "utilization.";
+ #endif // BUILDFLAG(USE_TCMALLOC)
+
+-#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // All views-based platforms --------------------------------------------------
+
+@@ -3675,15 +3675,15 @@ const char kReopenTabInProductHelpDescription[] =
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ const char kWebGL2ComputeContextName[] = "WebGL 2.0 Compute";
+ const char kWebGL2ComputeContextDescription[] =
+ "Enable the use of WebGL 2.0 Compute API.";
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+
+ const char kClickToCallContextMenuForSelectedTextName[] =
+@@ -3698,10 +3698,10 @@ const char kClickToCallUIDescription[] =
+ "Enables click to call feature signals to be handled on desktop by showing "
+ "a list of user's available devices with telephony functionality.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kDirectManipulationStylusName[] = "Direct Manipulation Stylus";
+ const char kDirectManipulationStylusDescription[] =
+@@ -3720,7 +3720,7 @@ const char kSyncClipboardServiceName[] = "Sync Clipboa
+ const char kSyncClipboardServiceDescription[] =
+ "Enables clipboard syncing via Chrome Sync.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
+@@ -3830,7 +3830,7 @@ extern const char kWebrtcPipeWireCapturerDescription[]
+
+ #endif // #if defined(WEBRTC_USE_PIPEWIRE)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ const char kEnableDbusAndX11StatusIconsName[] =
+ "Enable DBus and X11 status icons";
+@@ -3839,7 +3839,7 @@ const char kEnableDbusAndX11StatusIconsDescription[] =
+ "(X11) implementations of status icons. Otherwise, uses libappindicator's "
+ "and GTK's implementations.";
+
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ const char kAvoidFlashBetweenNavigationName[] =
+ "Enable flash avoidance between same-origin navigations";
diff --git a/devel/electron7/files/patch-chrome_browser_flag__descriptions.h b/devel/electron7/files/patch-chrome_browser_flag__descriptions.h
new file mode 100644
index 000000000000..9cce599d91a2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_flag__descriptions.h
@@ -0,0 +1,87 @@
+--- chrome/browser/flag_descriptions.h.orig 2019-12-12 12:39:10 UTC
++++ chrome/browser/flag_descriptions.h
+@@ -20,9 +20,9 @@
+ #include "ui/android/buildflags.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/allocator/buildflags.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // This file declares strings used in chrome://flags. These messages are not
+ // translated, because instead of end-users they target Chromium developers and
+@@ -2181,7 +2181,7 @@ extern const char kZeroStateFilesDescription[];
+
+ #endif // #if defined(OS_CHROMEOS)
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kTerminalSystemAppName[];
+ extern const char kTerminalSystemAppDescription[];
+
+@@ -2190,7 +2190,7 @@ extern const char kDynamicTcmallocName[];
+ extern const char kDynamicTcmallocDescription[];
+ #endif // BUILDFLAG(USE_TCMALLOC)
+
+-#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // All views-based platforms --------------------------------------------------
+
+@@ -2209,14 +2209,14 @@ extern const char kReopenTabInProductHelpDescription[]
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ extern const char kWebGL2ComputeContextName[];
+ extern const char kWebGL2ComputeContextDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+
+ extern const char kClickToCallContextMenuForSelectedTextName[];
+@@ -2225,10 +2225,10 @@ extern const char kClickToCallContextMenuForSelectedTe
+ extern const char kClickToCallUIName[];
+ extern const char kClickToCallUIDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kDirectManipulationStylusName[];
+ extern const char kDirectManipulationStylusDescription[];
+@@ -2242,7 +2242,7 @@ extern const char kProfileMenuRevampDescription[];
+ extern const char kSyncClipboardServiceName[];
+ extern const char kSyncClipboardServiceDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
+@@ -2333,12 +2333,12 @@ extern const char kWebrtcPipeWireCapturerDescription[]
+
+ #endif // #if defined(WEBRTC_USE_PIPEWIRE)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ extern const char kEnableDbusAndX11StatusIconsName[];
+ extern const char kEnableDbusAndX11StatusIconsDescription[];
+
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ // ============================================================================
+ // Don't just add flags to the end, put them in the right section in
diff --git a/devel/electron7/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc b/devel/electron7/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
new file mode 100644
index 000000000000..aef2d876779a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc
+@@ -39,10 +39,12 @@ void MTPDeviceMapService::RegisterMTPFileSystem(
+ // Note that this initializes the delegate asynchronously, but since
+ // the delegate will only be used from the IO thread, it is guaranteed
+ // to be created before use of it expects it to be there.
++#if !defined(OS_FREEBSD)
+ CreateMTPDeviceAsyncDelegate(
+ device_location, read_only,
+ base::Bind(&MTPDeviceMapService::AddAsyncDelegate,
+ base::Unretained(this), device_location, read_only));
++#endif
+ mtp_device_usage_map_[key] = 0;
+ }
+
diff --git a/devel/electron7/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc b/devel/electron7/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
new file mode 100644
index 000000000000..32000dbb1037
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/media_galleries/media_file_system_registry.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media_galleries/media_file_system_registry.cc
+@@ -732,7 +732,10 @@ class MediaFileSystemRegistry::MediaFileSystemContextI
+ // Constructor in 'private' section because depends on private class definition.
+ MediaFileSystemRegistry::MediaFileSystemRegistry()
+ : file_system_context_(new MediaFileSystemContextImpl) {
+- StorageMonitor::GetInstance()->AddObserver(this);
++ // This conditional is needed for shutdown. Destructors
++ // try to get the media file system registry.
++ if (StorageMonitor::GetInstance())
++ StorageMonitor::GetInstance()->AddObserver(this);
+ }
+
+ MediaFileSystemRegistry::~MediaFileSystemRegistry() {
diff --git a/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc b/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
new file mode 100644
index 000000000000..44cf35d64ca7
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_posix.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_posix.cc
+@@ -10,6 +10,7 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <sys/time.h>
+
+ #include <algorithm>
+
+@@ -19,7 +20,7 @@
+ #include "chrome/browser/media/router/discovery/discovery_network_list_wifi.h"
+ #include "net/base/net_errors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include <netpacket/packet.h>
+ #else
+ #include <net/if_dl.h>
+@@ -28,7 +29,7 @@
+ namespace media_router {
+ namespace {
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ using sll = struct sockaddr_ll;
+ #define SOCKET_ARP_TYPE(s) ((s)->sll_hatype)
+ #define SOCKET_ADDRESS_LEN(s) ((s)->sll_halen)
diff --git a/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc b/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
new file mode 100644
index 000000000000..3f8479c6f961
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc
+@@ -9,8 +9,6 @@
+ #include <sys/socket.h>
+ #include <sys/types.h>
+
+-#include <linux/wireless.h>
+-
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"
+ #include "net/base/network_interfaces_linux.h"
+@@ -20,6 +18,7 @@ namespace media_router {
+ bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) {
+ DCHECK(ssid_out);
+
++#if !defined(OS_BSD)
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+ if (!ioctl_socket.is_valid()) {
+ // AF_INET is for IPv4, so it may fail for IPv6-only hosts even when there
+@@ -41,6 +40,7 @@ bool MaybeGetWifiSSID(const std::string& if_name, std:
+ ssid_out->assign(ssid);
+ return true;
+ }
++#endif
+ return false;
+ }
+
diff --git a/devel/electron7/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc b/devel/electron7/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
new file mode 100644
index 000000000000..c76bfb615f1b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
@@ -0,0 +1,23 @@
+--- chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc
+@@ -112,6 +112,12 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ bool incognito,
+ CreateRouteCallback callback) {
+ DCHECK(!base::Contains(presentations_, presentation_id));
++#if defined(OS_BSD)
++ std::move(callback).Run(base::nullopt, nullptr,
++ std::string("Not implemented"),
++ RouteRequestResult::UNKNOWN_ERROR);
++ return;
++#else
+ base::Optional<Display> display = GetDisplayBySinkId(sink_id);
+ if (!display) {
+ std::move(callback).Run(base::nullopt, nullptr,
+@@ -138,6 +144,7 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ std::move(callback).Run(route, nullptr, base::nullopt,
+ RouteRequestResult::OK);
+ NotifyRouteObservers();
++#endif
+ }
+
+ void WiredDisplayMediaRouteProvider::JoinRoute(
diff --git a/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
new file mode 100644
index 000000000000..a80783abb370
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_event_log_uploader.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+@@ -36,7 +36,7 @@ constexpr size_t kExpectedMimeOverheadBytes = 1000; /
+ const char kProduct[] = "Chrome";
+ #elif defined(OS_MACOSX)
+ const char kProduct[] = "Chrome_Mac";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kProduct[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char kProduct[] = "Chrome_Android";
diff --git a/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
new file mode 100644
index 000000000000..622048dbd308
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_log_uploader.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/webrtc/webrtc_log_uploader.cc
+@@ -358,6 +358,8 @@ void WebRtcLogUploader::SetupMultipart(
+ const char product[] = "Chrome_Android";
+ #elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc
new file mode 100644
index 000000000000..83599743ed5a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc
@@ -0,0 +1,33 @@
+--- chrome/browser/media/webrtc/webrtc_logging_controller.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_controller.cc
+@@ -24,10 +24,10 @@
+ #include "content/public/browser/render_process_host.h"
+ #include "services/service_manager/public/cpp/connector.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "content/public/browser/child_process_security_policy.h"
+ #include "storage/browser/fileapi/isolated_context.h"
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ using webrtc_event_logging::WebRtcEventLogManager;
+
+@@ -267,7 +267,7 @@ void WebRtcLoggingController::StartEventLogging(
+ web_app_id, callback);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ void WebRtcLoggingController::GetLogsDirectory(
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback) {
+@@ -312,7 +312,7 @@ void WebRtcLoggingController::GrantLogsDirectoryAccess
+ base::SequencedTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::BindOnce(callback, file_system.id(), registered_name));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ void WebRtcLoggingController::OnRtpPacket(
+ std::unique_ptr<uint8_t[]> packet_header,
diff --git a/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h
new file mode 100644
index 000000000000..c412e553b486
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h
@@ -0,0 +1,36 @@
+--- chrome/browser/media/webrtc/webrtc_logging_controller.h.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_controller.h
+@@ -129,13 +129,13 @@ class WebRtcLoggingController
+ size_t web_app_id,
+ const StartEventLoggingCallback& callback);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Ensures that the WebRTC Logs directory exists and then grants render
+ // process access to the 'WebRTC Logs' directory, and invokes |callback| with
+ // the ids necessary to create a DirectoryEntry object.
+ void GetLogsDirectory(const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // chrome::mojom::WebRtcLoggingClient methods:
+ void OnAddMessages(
+@@ -188,7 +188,7 @@ class WebRtcLoggingController
+ bool success,
+ const std::string& error_message);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Grants the render process access to the 'WebRTC Logs' directory, and
+ // invokes |callback| with the ids necessary to create a DirectoryEntry
+ // object. If the |logs_path| couldn't be created or found, |error_callback|
+@@ -197,7 +197,7 @@ class WebRtcLoggingController
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback,
+ const base::FilePath& logs_path);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ static base::FilePath GetLogDirectoryAndEnsureExists(
+ const base::FilePath& browser_context_directory_path);
diff --git a/devel/electron7/files/patch-chrome_browser_memory__details.cc b/devel/electron7/files/patch-chrome_browser_memory__details.cc
new file mode 100644
index 000000000000..26fef10f78ba
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_memory__details.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/memory_details.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/memory_details.cc
+@@ -38,7 +38,7 @@
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/zygote_host_linux.h"
+ #endif
+
+@@ -336,7 +336,7 @@ void MemoryDetails::CollectChildInfoOnUIThread() {
+ process.titles.push_back(title);
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ if (service_manager::ZygoteHost::GetInstance()->IsZygotePid(process.pid)) {
+ process.process_type = content::PROCESS_TYPE_ZYGOTE;
+ }
diff --git a/devel/electron7/files/patch-chrome_browser_memory__details__linux.cc b/devel/electron7/files/patch-chrome_browser_memory__details__linux.cc
new file mode 100644
index 000000000000..315a7d4b301d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_memory__details__linux.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/memory_details_linux.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/memory_details_linux.cc
+@@ -72,8 +72,10 @@ ProcessData GetProcessDataMemoryInformation(
+
+ std::unique_ptr<base::ProcessMetrics> metrics(
+ base::ProcessMetrics::CreateProcessMetrics(pid));
++#if !defined(OS_BSD)
+ pmi.num_open_fds = metrics->GetOpenFdCount();
+ pmi.open_fds_soft_limit = metrics->GetOpenFdSoftLimit();
++#endif
+
+ process_data.processes.push_back(pmi);
+ }
diff --git a/devel/electron7/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc b/devel/electron7/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
new file mode 100644
index 000000000000..f463301daffd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/metrics/bluetooth_available_utility.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/metrics/bluetooth_available_utility.cc
+@@ -76,8 +76,10 @@ void ReportBluetoothAvailability() {
+ return;
+ }
+
++#if !defined(OS_BSD)
+ device::BluetoothAdapterFactory::Get().GetAdapter(
+ base::BindOnce(&OnGetAdapter));
++#endif
+ }
+
+ } // namespace bluetooth_utility
diff --git a/devel/electron7/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc b/devel/electron7/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
new file mode 100644
index 000000000000..73a413a141ff
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
@@ -0,0 +1,21 @@
+--- chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+@@ -47,7 +47,9 @@
+
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include <gnu/libc-version.h>
++#endif
+
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+@@ -55,7 +57,7 @@
+ #if defined(USE_X11)
+ #include "ui/base/x/x11_util.h"
+ #endif
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(USE_OZONE) || defined(USE_X11)
+ #include "ui/events/devices/device_data_manager.h"
diff --git a/devel/electron7/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc b/devel/electron7/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
new file mode 100644
index 000000000000..2d08191eca0c
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/metrics/chrome_metrics_service_client.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/metrics/chrome_metrics_service_client.cc
+@@ -721,11 +721,11 @@ void ChromeMetricsServiceClient::RegisterMetricsServic
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics_service_->RegisterMetricsProvider(
+ std::make_unique<DesktopPlatformFeaturesMetricsProvider>());
+ #endif // defined(OS_WIN) || defined(OS_MACOSX) || \
+- // (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ plugin_metrics_provider_ = new PluginMetricsProvider(local_state);
+@@ -974,7 +974,7 @@ bool ChromeMetricsServiceClient::RegisterForProfileEve
+ }
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This creates the DesktopProfileSessionDurationsServices if it didn't exist
+ // already.
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetForBrowserContext(
diff --git a/devel/electron7/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc b/devel/electron7/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
new file mode 100644
index 000000000000..b6721f75005a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/metrics/process_memory_metrics_emitter.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/metrics/process_memory_metrics_emitter.cc
+@@ -378,7 +378,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+
+ builder->SetPrivateMemoryFootprint(pmd.os_dump().private_footprint_kb / 1024);
+ builder->SetSharedMemoryFootprint(pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ builder->SetPrivateSwapFootprint(pmd.os_dump().private_footprint_swap_kb /
+ 1024);
+ #endif
+@@ -401,7 +401,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+ MEMORY_METRICS_HISTOGRAM_MB(std::string(kMemoryHistogramPrefix) +
+ process_name + ".SharedMemoryFootprint",
+ pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ MEMORY_METRICS_HISTOGRAM_MB(std::string(kMemoryHistogramPrefix) +
+ process_name + ".PrivateSwapFootprint",
+ pmd.os_dump().private_footprint_swap_kb / 1024);
diff --git a/devel/electron7/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc b/devel/electron7/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc
new file mode 100644
index 000000000000..3b2a08ccac45
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
+@@ -225,7 +225,7 @@ const struct {
+ {base::DIR_APP_DATA, nullptr, true},
+ {base::DIR_HOME, FILE_PATH_LITERAL("Library"), true},
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux also block access to devices via /dev, as well as security
+ // sensitive data in /sys and /proc.
+ {kNoBasePathKey, FILE_PATH_LITERAL("/dev"), true},
diff --git a/devel/electron7/files/patch-chrome_browser_net_system__network__context__manager.cc b/devel/electron7/files/patch-chrome_browser_net_system__network__context__manager.cc
new file mode 100644
index 000000000000..595be57d2b04
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_net_system__network__context__manager.cc
@@ -0,0 +1,64 @@
+--- chrome/browser/net/system_network_context_manager.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/net/system_network_context_manager.cc
+@@ -78,11 +78,11 @@
+ #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/common/chrome_paths_internal.h"
+ #include "chrome/grit/chromium_strings.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_EXTENSIONS)
+ #include "extensions/common/constants.h"
+@@ -206,10 +206,10 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAut
+ auth_dynamic_params->enable_negotiate_port =
+ local_state->GetBoolean(prefs::kEnableAuthNegotiatePort);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ auth_dynamic_params->delegate_by_kdc_policy =
+ local_state->GetBoolean(prefs::kAuthNegotiateDelegateByKdcPolicy);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ auth_dynamic_params->ntlm_v2_enabled =
+@@ -457,10 +457,10 @@ SystemNetworkContextManager::SystemNetworkContextManag
+ pref_change_registrar_.Add(prefs::kEnableAuthNegotiatePort,
+ auth_pref_callback);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ pref_change_registrar_.Add(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ auth_pref_callback);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ pref_change_registrar_.Add(prefs::kNtlmV2Enabled, auth_pref_callback);
+@@ -509,10 +509,10 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRe
+ registry->RegisterStringPref(prefs::kAuthServerWhitelist, std::string());
+ registry->RegisterStringPref(prefs::kAuthNegotiateDelegateWhitelist,
+ std::string());
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ false);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ registry->RegisterBooleanPref(
+@@ -620,7 +620,7 @@ void SystemNetworkContextManager::OnNetworkServiceCrea
+ insecure_stub_resolver_enabled, secure_dns_mode,
+ std::move(dns_over_https_servers));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ const base::CommandLine& command_line =
+ *base::CommandLine::ForCurrentProcess();
+
diff --git a/devel/electron7/files/patch-chrome_browser_notifications_notification__display__service__impl.cc b/devel/electron7/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
new file mode 100644
index 000000000000..eb8ab052c69a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/notifications/notification_display_service_impl.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/notifications/notification_display_service_impl.cc
+@@ -33,7 +33,7 @@
+ #include "chrome/browser/notifications/notification_platform_bridge_message_center.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -122,7 +122,7 @@ NotificationDisplayServiceImpl::NotificationDisplaySer
+ AddNotificationHandler(NotificationHandler::Type::WEB_PERSISTENT,
+ std::make_unique<PersistentNotificationHandler>());
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ AddNotificationHandler(
+ NotificationHandler::Type::SEND_TAB_TO_SELF,
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(
diff --git a/devel/electron7/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc b/devel/electron7/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
new file mode 100644
index 000000000000..a116ba344580
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/password_manager/chrome_password_manager_client.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -84,7 +84,11 @@
+ #include "net/base/url_util.h"
+ #include "net/cert/cert_status_flags.h"
+ #include "services/metrics/public/cpp/ukm_recorder.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/url_constants.h"
+
+ #if BUILDFLAG(FULL_SAFE_BROWSING)
diff --git a/devel/electron7/files/patch-chrome_browser_password__manager_password__store__factory.cc b/devel/electron7/files/patch-chrome_browser_password__manager_password__store__factory.cc
new file mode 100644
index 000000000000..1ddf887941c0
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_password__manager_password__store__factory.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/password_manager/password_store_factory.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/password_manager/password_store_factory.cc
+@@ -181,7 +181,7 @@ PasswordStoreFactory::BuildServiceInstanceFor(
+ base::TimeDelta::FromSeconds(20));
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<password_manager::PasswordStoreSigninNotifier> notifier =
+ std::make_unique<password_manager::PasswordStoreSigninNotifierImpl>(
+ IdentityManagerFactory::GetForProfile(profile));
diff --git a/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc b/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
new file mode 100644
index 000000000000..54ee1129991a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/performance_monitor/process_metrics_history.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.cc
+@@ -47,7 +47,7 @@ void ProcessMetricsHistory::SampleMetrics() {
+ #if defined(OS_WIN)
+ disk_usage_ = process_metrics_->GetDiskUsageBytesPerSecond();
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ idle_wakeups_ = process_metrics_->GetIdleWakeupsPerSecond();
+ #endif
+ #if defined(OS_MACOSX)
+@@ -88,7 +88,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kDiskUsageHistogramMin, kDiskUsageHistogramMax,
+ kDiskUsageHistogramBucketCount);
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.BrowserProcess", idle_wakeups_);
+ #endif
+@@ -109,7 +109,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.RendererProcess",
+ true);
+ }
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.RendererProcess", idle_wakeups_);
+ #endif
+@@ -129,7 +129,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kHistogramBucketCount);
+ if (cpu_usage_ > kHighCPUUtilizationThreshold)
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.GPUProcess", true);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("PerformanceMonitor.IdleWakeups.GPUProcess",
+ idle_wakeups_);
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.h b/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
new file mode 100644
index 000000000000..64ca0fa3819a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
@@ -0,0 +1,11 @@
+--- chrome/browser/performance_monitor/process_metrics_history.h.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.h
+@@ -72,7 +72,7 @@ class ProcessMetricsHistory {
+ uint64_t disk_usage_ = 0;
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int idle_wakeups_ = 0;
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-chrome_browser_platform__util.h b/devel/electron7/files/patch-chrome_browser_platform__util.h
new file mode 100644
index 000000000000..262e7989117c
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_platform__util.h
@@ -0,0 +1,11 @@
+--- chrome/browser/platform_util.h.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/platform_util.h
+@@ -41,7 +41,7 @@ enum OpenOperationResult {
+ enum OpenItemType {
+ OPEN_FILE,
+ OPEN_FOLDER,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SHOW_ITEM_IN_FOLDER
+ #endif
+ };
diff --git a/devel/electron7/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc b/devel/electron7/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
new file mode 100644
index 000000000000..468c606aea6e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugin_info_host_impl.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/plugins/plugin_info_host_impl.cc
+@@ -383,7 +383,7 @@ void PluginInfoHostImpl::ComponentPluginLookupDone(
+ std::unique_ptr<component_updater::ComponentInfo> cus_plugin_info) {
+ if (cus_plugin_info) {
+ output->status = chrome::mojom::PluginStatus::kComponentUpdateRequired;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (cus_plugin_info->version != base::Version("0")) {
+ output->status = chrome::mojom::PluginStatus::kRestartRequired;
+ }
diff --git a/devel/electron7/files/patch-chrome_browser_plugins_plugins__resource__service.cc b/devel/electron7/files/patch-chrome_browser_plugins_plugins__resource__service.cc
new file mode 100644
index 000000000000..4daa8d69e3b7
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_plugins_plugins__resource__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugins_resource_service.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/plugins/plugins_resource_service.cc
+@@ -63,7 +63,7 @@ GURL GetPluginsServerURL() {
+ filename = "plugins_win.json";
+ #elif defined(OS_CHROMEOS)
+ filename = "plugins_chromeos.json";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ filename = "plugins_linux.json";
+ #elif defined(OS_MACOSX)
+ filename = "plugins_mac.json";
diff --git a/devel/electron7/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc b/devel/electron7/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc
new file mode 100644
index 000000000000..a19edeb578ce
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/browser_signin_policy_handler.cc.orig 2019-12-12 12:39:11 UTC
++++ chrome/browser/policy/browser_signin_policy_handler.cc
+@@ -39,7 +39,7 @@ void BrowserSigninPolicyHandler::ApplyPolicySettings(c
+ }
+ switch (static_cast<BrowserSigninMode>(int_value)) {
+ case BrowserSigninMode::kForced:
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ prefs->SetValue(prefs::kForceBrowserSignin, base::Value(true));
+ #endif
+ FALLTHROUGH;
diff --git a/devel/electron7/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc b/devel/electron7/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
new file mode 100644
index 000000000000..504aed67d0a9
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
@@ -0,0 +1,43 @@
+--- chrome/browser/policy/configuration_policy_handler_list_factory.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/policy/configuration_policy_handler_list_factory.cc
+@@ -113,7 +113,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -333,11 +333,11 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ prefs::kSafeBrowsingSendFilesForMalwareCheck,
+ base::Value::Type::INTEGER
+ },
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ { key::kAuthNegotiateDelegateByKdcPolicy,
+ prefs::kAuthNegotiateDelegateByKdcPolicy,
+ base::Value::Type::BOOLEAN },
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #if defined(OS_POSIX)
+ { key::kNtlmV2Enabled,
+ prefs::kNtlmV2Enabled,
+@@ -1064,7 +1064,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ base::Value::Type::BOOLEAN },
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ { key::kAlternativeBrowserPath,
+ browser_switcher::prefs::kAlternativeBrowserPath,
+ base::Value::Type::STRING },
+@@ -1125,7 +1125,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ browser_switcher::prefs::kChromeParameters,
+ base::Value::Type::LIST },
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ { key::kBrowserGuestModeEnforced,
+ prefs::kBrowserGuestModeEnforced,
+ base::Value::Type::BOOLEAN },
diff --git a/devel/electron7/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc b/devel/electron7/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
new file mode 100644
index 000000000000..9f3f75be4b60
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/policy_prefs_browsertest.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/policy/policy_prefs_browsertest.cc
+@@ -184,6 +184,8 @@ class PolicyTestCase {
+ const std::string os("chromeos");
+ #elif defined(OS_LINUX)
+ const std::string os("linux");
++#elif defined(OS_FREEBSD)
++ const std::string os("freebsd");
+ #else
+ #error "Unknown platform"
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_prefs_browser__prefs.cc b/devel/electron7/files/patch-chrome_browser_prefs_browser__prefs.cc
new file mode 100644
index 000000000000..90f46e1f7de4
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_prefs_browser__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/prefs/browser_prefs.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/prefs/browser_prefs.cc
+@@ -346,7 +346,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -951,7 +951,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySync
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc b/devel/electron7/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
new file mode 100644
index 000000000000..b2ef6cc6ec21
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/prefs/pref_service_incognito_whitelist.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/prefs/pref_service_incognito_whitelist.cc
+@@ -186,7 +186,7 @@ const char* const kPersistentPrefNames[] = {
+ prefs::kShowFullscreenToolbar,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Toggleing custom frames affects all open windows in the profile, hence
+ // should be written to the regular profile when changed in incognito mode.
+ prefs::kUseCustomChromeFrame,
diff --git a/devel/electron7/files/patch-chrome_browser_process__singleton__posix.cc b/devel/electron7/files/patch-chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..8aafd173c9dd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/process_singleton_posix.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/process_singleton_posix.cc
+@@ -95,11 +95,11 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/process_singleton_dialog_linux.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -296,7 +296,7 @@ bool DisplayProfileInUseError(const base::FilePath& lo
+ if (g_disable_prompt)
+ return g_user_opted_unlock_in_use_profile;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::string16 relaunch_button_text = l10n_util::GetStringUTF16(
+ IDS_PROFILE_IN_USE_LINUX_RELAUNCH);
+ return ShowProcessSingletonDialog(error, relaunch_button_text);
+@@ -872,7 +872,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ SendRemoteProcessInteractionResultHistogram(REMOTE_PROCESS_SHUTTING_DOWN);
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron7/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc b/devel/electron7/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
new file mode 100644
index 000000000000..d93c1081dd4f
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+@@ -181,7 +181,7 @@
+ #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/sync/sync_clipboard_service_factory.h"
+ #endif
+
+@@ -336,7 +336,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ MediaGalleriesPreferencesFactory::GetInstance();
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetInstance();
+ #endif
+ ModelTypeStoreServiceFactory::GetInstance();
+@@ -398,7 +398,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ SpellcheckServiceFactory::GetInstance();
+ #endif
+ suggestions::SuggestionsServiceFactory::GetInstance();
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ SyncClipboardServiceFactory::GetInstance();
+ #endif
+ TabRestoreServiceFactory::GetInstance();
diff --git a/devel/electron7/files/patch-chrome_browser_profiles_profile__attributes__entry.cc b/devel/electron7/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
new file mode 100644
index 000000000000..800da17bbabc
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/profile_attributes_entry.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/profiles/profile_attributes_entry.cc
+@@ -83,7 +83,7 @@ void ProfileAttributesEntry::Initialize(ProfileInfoCac
+ if (is_force_signin_enabled_) {
+ if (!IsAuthenticated())
+ is_force_signin_profile_locked_ = true;
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ } else if (IsSigninRequired()) {
+ // Profiles that require signin in the absence of an enterprise policy are
+ // left-overs from legacy supervised users. Just unlock them, so users can
diff --git a/devel/electron7/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc b/devel/electron7/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
new file mode 100644
index 000000000000..31b90afcf3b4
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_context_menu/render_view_context_menu.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
+@@ -1699,7 +1699,7 @@ void RenderViewContextMenu::AppendEditableItems() {
+ // 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+ // We make an exception for OS X as context clicking will select the closest
+ // word. In this case both items are always shown.
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
+ IDS_CONTENT_CONTEXT_UNDO);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
+@@ -1741,7 +1741,7 @@ void RenderViewContextMenu::AppendLanguageSettings() {
+ if (!use_spelling)
+ return;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS,
+ IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS);
+ #else
+@@ -2045,7 +2045,7 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id)
+ case IDC_CHECK_SPELLING_WHILE_TYPING:
+ return prefs->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
+
+-#if !defined(OS_MACOSX) && defined(OS_POSIX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD) && defined(OS_POSIX)
+ // TODO(suzhe): this should not be enabled for password fields.
+ case IDC_INPUT_METHODS_MENU:
+ return true;
diff --git a/devel/electron7/files/patch-chrome_browser_renderer__preferences__util.cc b/devel/electron7/files/patch-chrome_browser_renderer__preferences__util.cc
new file mode 100644
index 000000000000..e681c2d25b47
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_renderer__preferences__util.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_preferences_util.cc.orig 2019-12-12 12:39:12 UTC
++++ chrome/browser/renderer_preferences_util.cc
+@@ -30,7 +30,7 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/themes/theme_service.h"
+ #include "chrome/browser/themes/theme_service_factory.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -130,7 +130,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ prefs->caret_blink_interval = interval;
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
+@@ -149,7 +149,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_BSD)
+ content::UpdateFontRendererPreferencesFromSystemSettings(prefs);
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py b/devel/electron7/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
new file mode 100644
index 000000000000..b8bf086f3b4f
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
@@ -0,0 +1,19 @@
+--- chrome/browser/resources/safe_browsing/gen_file_type_proto.py.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/resources/safe_browsing/gen_file_type_proto.py
+@@ -31,6 +31,7 @@ def PlatformTypes():
+ "android": download_file_types_pb2.DownloadFileType.PLATFORM_ANDROID,
+ "chromeos": download_file_types_pb2.DownloadFileType.PLATFORM_CHROME_OS,
+ "linux": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
++ "bsd": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
+ "mac": download_file_types_pb2.DownloadFileType.PLATFORM_MAC,
+ "win": download_file_types_pb2.DownloadFileType.PLATFORM_WINDOWS,
+ }
+@@ -169,7 +170,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenera
+ 'Outfile must have a %d for version and %s for platform.')
+ parser.add_option('-t', '--type',
+ help='The platform type. One of android, chromeos, ' +
+- 'linux, mac, win')
++ 'linux, bsd, mac, win')
+
+ def AddExtraCommandLineArgsForVirtualEnvRun(self, opts, command):
+ if opts.type is not None:
diff --git a/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
new file mode 100644
index 000000000000..1dc370e85719
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
@@ -0,0 +1,20 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js
+@@ -19,7 +19,7 @@ cr.define('settings', function() {
+
+ useDefaultTheme() {}
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ useSystemTheme() {}
+
+ // </if>
+@@ -59,7 +59,7 @@ cr.define('settings', function() {
+ chrome.send('useDefaultTheme');
+ }
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /** @override */
+ useSystemTheme() {
+ chrome.send('useSystemTheme');
diff --git a/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
new file mode 100644
index 000000000000..c0e0f6981ba3
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
@@ -0,0 +1,29 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.html.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.html
+@@ -67,7 +67,7 @@
+ <cr-link-row class="first" hidden="[[!pageVisibility.setTheme]]"
+ label="$i18n{themes}" sub-label="[[themeSublabel_]]"
+ on-click="openThemeUrl_" external></cr-link-row>
+-<if expr="not is_linux or chromeos">
++<if expr="not is_posix or chromeos">
+ <template is="dom-if" if="[[prefs.extensions.theme.id.value]]">
+ <div class="separator"></div>
+ <cr-button id="useDefault" on-click="onUseDefaultTap_">
+@@ -75,7 +75,7 @@
+ </cr-button>
+ </template>
+ </if>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <div class="settings-row continuation"
+ hidden="[[!showThemesSecondary_(
+ prefs.extensions.theme.id.value, useSystemTheme_)]]"
+@@ -138,7 +138,7 @@
+ pref="{{prefs.bookmark_bar.show_on_all_tabs}}"
+ label="$i18n{showBookmarksBar}">
+ </settings-toggle-button>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <settings-toggle-button
+ class$="[[getFirst_(pageVisibility.bookmarksBar)]]"
+ pref="{{prefs.browser.custom_chrome_frame}}"
diff --git a/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
new file mode 100644
index 000000000000..586243c078af
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
@@ -0,0 +1,33 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.js.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.js
+@@ -130,7 +130,7 @@ Polymer({
+ 'defaultFontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
+ 'themeChanged_(prefs.extensions.theme.id.value, useSystemTheme_)',
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ // NOTE: this pref only exists on Linux.
+ 'useSystemThemePrefChanged_(prefs.extensions.theme.use_system.value)',
+ // </if>
+@@ -238,7 +238,7 @@ Polymer({
+ this.appearanceBrowserProxy_.useDefaultTheme();
+ },
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /**
+ * @param {boolean} useSystemTheme
+ * @private
+@@ -315,10 +315,10 @@ Polymer({
+ }
+
+ let i18nId;
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ i18nId = useSystemTheme ? 'systemTheme' : 'classicTheme';
+ // </if>
+- // <if expr="not is_linux or chromeos">
++ // <if expr="not is_bsd or chromeos">
+ i18nId = 'chooseFromWebStore';
+ // </if>
+ this.themeSublabel_ = this.i18n(i18nId);
diff --git a/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc b/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
new file mode 100644
index 000000000000..8b9eeb4c7e45
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc
+@@ -8,7 +8,12 @@
+
+ #include "base/hash/hash.h"
+ #include "base/logging.h"
++//XXX(rene) needs shim headers?
++#if defined(USE_SYSTEM_PROTOBUF)
++#include <google/protobuf/message_lite.h>
++#else
+ #include "third_party/protobuf/src/google/protobuf/message_lite.h"
++#endif
+
+ namespace safe_browsing {
+
diff --git a/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc b/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
new file mode 100644
index 000000000000..ce7bc48bf3ce
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+@@ -713,7 +713,7 @@ void IncidentReportingService::OnEnvironmentDataCollec
+ environment_collection_pending_ = false;
+
+ // Process::Current().CreationTime() is missing on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeDelta uptime =
+ first_incident_time_ - base::Process::Current().CreationTime();
+ environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/devel/electron7/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc b/devel/electron7/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc
new file mode 100644
index 000000000000..857c906fc5dd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/search/search_suggest/search_suggest_service.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/search/search_suggest/search_suggest_service.cc
+@@ -17,7 +17,11 @@
+ #include "components/prefs/scoped_user_pref_update.h"
+ #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
+ #include "components/signin/public/identity_manager/identity_manager.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron7/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc b/devel/electron7/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
new file mode 100644
index 000000000000..6688d36ef421
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
+@@ -11,7 +11,7 @@
+ #include "chrome/browser/profiles/profile.h"
+ #include "chrome/browser/send_tab_to_self/receiving_ui_handler.h"
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -32,7 +32,7 @@ ReceivingUiHandlerRegistry* ReceivingUiHandlerRegistry
+ // Instantiates all the handlers relevant to this platform.
+ void ReceivingUiHandlerRegistry::InstantiatePlatformSpecificHandlers(
+ Profile* profile) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ applicable_handlers_.push_back(
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(profile));
+ #elif defined(OS_ANDROID)
diff --git a/devel/electron7/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc b/devel/electron7/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
new file mode 100644
index 000000000000..ca25bcc8ac03
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc
+@@ -41,7 +41,7 @@ void SendTabToSelfClientService::SendTabToSelfModelLoa
+ void SendTabToSelfClientService::EntriesAddedRemotely(
+ const std::vector<const SendTabToSelfEntry*>& new_entries) {
+ for (const std::unique_ptr<ReceivingUiHandler>& handler : GetHandlers()) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ // Only respond to notifications corresponding to this service's profile
+ // for these OSes; mobile does not have a Profile.
+ // Cast note: on desktop, handlers are guaranteed to be the derived class
diff --git a/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.cc b/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.cc
new file mode 100644
index 000000000000..2c70cd534cf7
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/sharing/click_to_call/feature.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/sharing/click_to_call/feature.cc
+@@ -9,12 +9,12 @@ const base::Feature kClickToCallReceiver{"ClickToCallR
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const base::Feature kClickToCallContextMenuForSelectedText{
+ "ClickToCallContextMenuForSelectedText", base::FEATURE_DISABLED_BY_DEFAULT};
+
+ const base::Feature kClickToCallUI{"ClickToCallUI",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
diff --git a/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.h b/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.h
new file mode 100644
index 000000000000..190c70c746fd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_sharing_click__to__call_feature.h
@@ -0,0 +1,20 @@
+--- chrome/browser/sharing/click_to_call/feature.h.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/sharing/click_to_call/feature.h
+@@ -13,7 +13,7 @@
+ extern const base::Feature kClickToCallReceiver;
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // Feature to allow click to call gets processed on desktop.
+ extern const base::Feature kClickToCallUI;
+@@ -21,7 +21,7 @@ extern const base::Feature kClickToCallUI;
+ // Feature to show click to call in context menu when selected text is a phone
+ // number.
+ extern const base::Feature kClickToCallContextMenuForSelectedText;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #endif // CHROME_BROWSER_SHARING_CLICK_TO_CALL_FEATURE_H_
diff --git a/devel/electron7/files/patch-chrome_browser_signin_signin__util.cc b/devel/electron7/files/patch-chrome_browser_signin_signin__util.cc
new file mode 100644
index 000000000000..c6eb214fb843
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_signin_signin__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/signin/signin_util.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/signin/signin_util.cc
+@@ -34,7 +34,7 @@
+ #include "google_apis/gaia/gaia_auth_util.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/browser_list.h"
+ #include "chrome/browser/ui/browser_list_observer.h"
+@@ -46,7 +46,7 @@ namespace {
+
+ constexpr char kSignoutSettingKey[] = "signout_setting";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #define CAN_DELETE_PROFILE
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc b/devel/electron7/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc
new file mode 100644
index 000000000000..11e72959a466
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ssl_captive__portal__blocking__page.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ssl/captive_portal_blocking_page.cc.orig 2019-12-12 12:39:15 UTC
++++ chrome/browser/ssl/captive_portal_blocking_page.cc
+@@ -124,7 +124,7 @@ std::string CaptivePortalBlockingPage::GetWiFiSSID() c
+ wifi_service->GetConnectedNetworkSSID(&ssid, &error);
+ if (!error.empty())
+ return std::string();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ssid = net::GetWifiSSID();
+ #elif defined(OS_ANDROID)
+ ssid = net::android::GetWifiSSID();
diff --git a/devel/electron7/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc b/devel/electron7/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
new file mode 100644
index 000000000000..a7cc7d9553f9
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ssl/ssl_error_controller_client.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ssl/ssl_error_controller_client.cc
+@@ -79,7 +79,7 @@ void LaunchDateAndTimeSettingsImpl() {
+ #if defined(OS_ANDROID)
+ chrome::android::OpenDateAndTimeSettings();
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ struct ClockCommand {
+ const char* const pathname;
+ const char* const argument;
+@@ -204,7 +204,7 @@ void SSLErrorControllerClient::Proceed() {
+ }
+
+ bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_WIN)
+ return true;
+ #else
diff --git a/devel/electron7/files/patch-chrome_browser_sync_chrome__sync__client.cc b/devel/electron7/files/patch-chrome_browser_sync_chrome__sync__client.cc
new file mode 100644
index 000000000000..83a099a53bf6
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_sync_chrome__sync__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/sync/chrome_sync_client.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/sync/chrome_sync_client.cc
+@@ -389,7 +389,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ GetSyncableServiceForType(syncer::APP_LIST), dump_stack));
+ #endif // BUILDFLAG(ENABLE_APP_LIST)
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Dictionary sync is enabled by default.
+ if (!disabled_types.Has(syncer::DICTIONARY)) {
+ controllers.push_back(
+@@ -397,7 +397,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ syncer::DICTIONARY, GetModelTypeStoreService()->GetStoreFactory(),
+ GetSyncableServiceForType(syncer::DICTIONARY), dump_stack));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ if (arc::IsArcAllowedForProfile(profile_) &&
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.cc b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.cc
new file mode 100644
index 000000000000..7e465425baf5
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.cc
@@ -0,0 +1,56 @@
+--- chrome/browser/task_manager/sampling/task_group.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/sampling/task_group.cc
+@@ -33,9 +33,9 @@ const int kBackgroundRefreshTypesMask =
+ #if defined(OS_WIN)
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME |
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if BUILDFLAG(ENABLE_NACL)
+ REFRESH_TYPE_NACL |
+ #endif // BUILDFLAG(ENABLE_NACL)
+@@ -114,9 +114,9 @@ TaskGroup::TaskGroup(
+ #if BUILDFLAG(ENABLE_NACL)
+ nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown),
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ open_fd_count_(-1),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ idle_wakeups_per_second_(-1),
+ gpu_memory_has_duplicates_(false),
+ is_backgrounded_(false) {
+@@ -129,10 +129,10 @@ TaskGroup::TaskGroup(
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnOpenFdCountRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnProcessPriorityDone,
+ weak_ptr_factory_.GetWeakPtr()));
+
+@@ -300,14 +300,14 @@ void TaskGroup::OnRefreshNaClDebugStubPortDone(int nac
+ }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void TaskGroup::OnOpenFdCountRefreshDone(int open_fd_count) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ open_fd_count_ = open_fd_count;
+ OnBackgroundRefreshTypeFinished(REFRESH_TYPE_FD_COUNT);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void TaskGroup::OnCpuRefreshDone(double cpu_usage) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.h b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.h
new file mode 100644
index 000000000000..0a3d182238ce
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group.h
@@ -0,0 +1,48 @@
+--- chrome/browser/task_manager/sampling/task_group.h.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/sampling/task_group.h
+@@ -39,7 +39,7 @@ constexpr int kUnsupportedVMRefreshFlags =
+ REFRESH_TYPE_WEBCACHE_STATS | REFRESH_TYPE_NETWORK_USAGE |
+ REFRESH_TYPE_NACL | REFRESH_TYPE_IDLE_WAKEUPS | REFRESH_TYPE_HANDLES |
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME | REFRESH_TYPE_PRIORITY |
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+ #endif
+ REFRESH_TYPE_HARD_FAULTS;
+@@ -122,9 +122,9 @@ class TaskGroup {
+ int nacl_debug_stub_port() const { return nacl_debug_stub_port_; }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int open_fd_count() const { return open_fd_count_; }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ int idle_wakeups_per_second() const { return idle_wakeups_per_second_; }
+
+@@ -138,9 +138,9 @@ class TaskGroup {
+ void RefreshNaClDebugStubPort(int child_process_unique_id);
+ void OnRefreshNaClDebugStubPortDone(int port);
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void OnOpenFdCountRefreshDone(int open_fd_count);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void OnCpuRefreshDone(double cpu_usage);
+ void OnSwappedMemRefreshDone(int64_t swapped_mem_bytes);
+@@ -209,10 +209,10 @@ class TaskGroup {
+ #if BUILDFLAG(ENABLE_NACL)
+ int nacl_debug_stub_port_;
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // The number of file descriptors currently open by the process.
+ int open_fd_count_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int idle_wakeups_per_second_;
+ bool gpu_memory_has_duplicates_;
+ bool is_backgrounded_;
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
new file mode 100644
index 000000000000..84d20534a83b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.cc
+@@ -43,9 +43,9 @@ TaskGroupSampler::TaskGroupSampler(
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_swapped_mem_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority)
+ : process_(std::move(process)),
+ process_metrics_(CreateProcessMetrics(process_.Handle())),
+@@ -53,9 +53,9 @@ TaskGroupSampler::TaskGroupSampler(
+ on_cpu_refresh_callback_(on_cpu_refresh),
+ on_swapped_mem_refresh_callback_(on_swapped_mem_refresh),
+ on_idle_wakeups_callback_(on_idle_wakeups),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_open_fd_count_callback_(on_open_fd_count),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_process_priority_callback_(on_process_priority) {
+ DCHECK(blocking_pool_runner.get());
+
+@@ -86,7 +86,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ on_swapped_mem_refresh_callback_);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_IDLE_WAKEUPS,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -95,9 +95,9 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshIdleWakeupsPerSecond, this),
+ on_idle_wakeups_callback_);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_FD_COUNT,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -106,7 +106,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::Bind(&TaskGroupSampler::RefreshOpenFdCount, this),
+ on_open_fd_count_callback_);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_PRIORITY,
+ refresh_flags)) {
+@@ -149,13 +149,13 @@ int TaskGroupSampler::RefreshIdleWakeupsPerSecond() {
+ return process_metrics_->GetIdleWakeupsPerSecond();
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int TaskGroupSampler::RefreshOpenFdCount() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
+
+ return process_metrics_->GetOpenFdCount();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ bool TaskGroupSampler::RefreshProcessPriority() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
new file mode 100644
index 000000000000..4417302d505e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
@@ -0,0 +1,50 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.h.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.h
+@@ -32,9 +32,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ using OnCpuRefreshCallback = base::Callback<void(double)>;
+ using OnSwappedMemRefreshCallback = base::Callback<void(int64_t)>;
+ using OnIdleWakeupsCallback = base::Callback<void(int)>;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnOpenFdCountCallback = base::Callback<void(int)>;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnProcessPriorityCallback = base::Callback<void(bool)>;
+
+ TaskGroupSampler(
+@@ -43,9 +43,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_memory_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority);
+
+ // Refreshes the expensive process' stats (CPU usage, memory usage, and idle
+@@ -60,9 +60,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ double RefreshCpuUsage();
+ int64_t RefreshSwappedMem();
+ int RefreshIdleWakeupsPerSecond();
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int RefreshOpenFdCount();
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool RefreshProcessPriority();
+
+ // The process that holds the handle that we own so that we can use it for
+@@ -84,9 +84,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback on_cpu_refresh_callback_;
+ const OnSwappedMemRefreshCallback on_swapped_mem_refresh_callback_;
+ const OnIdleWakeupsCallback on_idle_wakeups_callback_;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback on_open_fd_count_callback_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback on_process_priority_callback_;
+
+ // To assert we're running on the correct thread.
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
new file mode 100644
index 000000000000..7ccfadda34ea
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/sampling/task_manager_impl.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/sampling/task_manager_impl.cc
+@@ -219,11 +219,11 @@ void TaskManagerImpl::GetUSERHandles(TaskId task_id,
+ }
+
+ int TaskManagerImpl::GetOpenFdCount(TaskId task_id) const {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return GetTaskGroupByTaskId(task_id)->open_fd_count();
+ #else
+ return -1;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ }
+
+ bool TaskManagerImpl::IsTaskOnBackgroundedProcess(TaskId task_id) const {
diff --git a/devel/electron7/files/patch-chrome_browser_task__manager_task__manager__observer.h b/devel/electron7/files/patch-chrome_browser_task__manager_task__manager__observer.h
new file mode 100644
index 000000000000..bde636f87154
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_task__manager_task__manager__observer.h
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/task_manager_observer.h.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/task_manager/task_manager_observer.h
+@@ -43,11 +43,11 @@ enum RefreshType {
+ // or backgrounded.
+ REFRESH_TYPE_PRIORITY = 1 << 13,
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // For observers interested in getting the number of open file descriptors of
+ // processes.
+ REFRESH_TYPE_FD_COUNT = 1 << 14,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ REFRESH_TYPE_KEEPALIVE_COUNT = 1 << 15,
+ REFRESH_TYPE_MEMORY_FOOTPRINT = 1 << 16,
diff --git a/devel/electron7/files/patch-chrome_browser_themes_theme__service__factory.cc b/devel/electron7/files/patch-chrome_browser_themes_theme__service__factory.cc
new file mode 100644
index 000000000000..019898710ed7
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_themes_theme__service__factory.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/themes/theme_service_factory.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/themes/theme_service_factory.cc
+@@ -18,7 +18,7 @@
+
+ #if defined(OS_WIN)
+ #include "chrome/browser/themes/theme_service_win.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/themes/theme_service_aura_linux.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+@@ -60,7 +60,7 @@ KeyedService* ThemeServiceFactory::BuildServiceInstanc
+ ThemeService* provider = NULL;
+ #if defined(OS_WIN)
+ provider = new ThemeServiceWin;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ provider = new ThemeServiceAuraLinux;
+ #else
+ provider = new ThemeService;
+@@ -72,7 +72,7 @@ KeyedService* ThemeServiceFactory::BuildServiceInstanc
+
+ void ThemeServiceFactory::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool default_uses_system_theme = false;
+
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/devel/electron7/files/patch-chrome_browser_tracing_crash__service__uploader.cc b/devel/electron7/files/patch-chrome_browser_tracing_crash__service__uploader.cc
new file mode 100644
index 000000000000..e77ff7f337a5
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_tracing_crash__service__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/tracing/crash_service_uploader.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/tracing/crash_service_uploader.cc
+@@ -161,6 +161,8 @@ void TraceCrashServiceUploader::DoCompressOnBackground
+ const char product[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_browser__command__controller.cc b/devel/electron7/files/patch-chrome_browser_ui_browser__command__controller.cc
new file mode 100644
index 000000000000..80c67213df41
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_browser__command__controller.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/browser_command_controller.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ui/browser_command_controller.cc
+@@ -81,7 +81,7 @@
+ #include "chrome/browser/ui/browser_commands_chromeos.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+
+@@ -251,7 +251,7 @@ bool BrowserCommandController::IsReservedCommandOrKey(
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // If this key was registered by the user as a content editing hotkey, then
+ // it is not reserved.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+@@ -467,7 +467,7 @@ bool BrowserCommandController::ExecuteCommandWithDispo
+ break;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case IDC_MINIMIZE_WINDOW:
+ browser_->window()->Minimize();
+ break;
+@@ -925,7 +925,7 @@ void BrowserCommandController::InitCommandState() {
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_2, true);
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_3, true);
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ command_updater_.UpdateCommandEnabled(IDC_MINIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_MAXIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_RESTORE_WINDOW, true);
diff --git a/devel/electron7/files/patch-chrome_browser_ui_browser__view__prefs.cc b/devel/electron7/files/patch-chrome_browser_ui_browser__view__prefs.cc
new file mode 100644
index 000000000000..bceeb4330115
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_browser__view__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/browser_view_prefs.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ui/browser_view_prefs.cc
+@@ -34,7 +34,7 @@ void RegisterBrowserViewLocalPrefs(PrefRegistrySimple*
+
+ void RegisterBrowserViewProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool custom_frame_pref_default = false;
+ #if defined(USE_X11)
+ custom_frame_pref_default = ui::GetCustomFramePrefDefault();
+@@ -45,7 +45,7 @@ void RegisterBrowserViewProfilePrefs(
+ #endif
+ registry->RegisterBooleanPref(prefs::kUseCustomChromeFrame,
+ custom_frame_pref_default);
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX && !OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void MigrateBrowserTabStripPrefs(PrefService* prefs) {
diff --git a/devel/electron7/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc b/devel/electron7/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
new file mode 100644
index 000000000000..bd5a484d2187
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc
+@@ -16,7 +16,7 @@
+
+ // NOTE(koz): Linux doesn't use the thick shadowed border, so we add padding
+ // here.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const int ExclusiveAccessBubble::kPaddingPx = 8;
+ #else
+ const int ExclusiveAccessBubble::kPaddingPx = 15;
diff --git a/devel/electron7/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc b/devel/electron7/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
new file mode 100644
index 000000000000..696a04bbeacd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine_base.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ui/input_method/input_method_engine_base.cc
+@@ -30,7 +30,7 @@
+ #include "ui/base/ime/chromeos/ime_keymap.h"
+ #elif defined(OS_WIN)
+ #include "ui/events/keycodes/keyboard_codes_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/keycodes/keyboard_codes_posix.h"
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc b/devel/electron7/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
new file mode 100644
index 000000000000..82f821073e38
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_libgtkui_print__dialog__gtk.cc
@@ -0,0 +1,10 @@
+--- chrome/browser/ui/libgtkui/print_dialog_gtk.cc.orig 2019-12-12 12:39:16 UTC
++++ chrome/browser/ui/libgtkui/print_dialog_gtk.cc
+@@ -336,6 +336,7 @@ void PrintDialogGtk::ShowDialog(
+ // Since we only generate PDF, only show printers that support PDF.
+ // TODO(thestig) Add more capabilities to support?
+ GtkPrintCapabilities cap = static_cast<GtkPrintCapabilities>(
++ GTK_PRINT_CAPABILITY_GENERATE_PS |
+ GTK_PRINT_CAPABILITY_GENERATE_PDF |
+ GTK_PRINT_CAPABILITY_PAGE_SET |
+ GTK_PRINT_CAPABILITY_COPIES |
diff --git a/devel/electron7/files/patch-chrome_browser_ui_sad__tab.cc b/devel/electron7/files/patch-chrome_browser_ui_sad__tab.cc
new file mode 100644
index 000000000000..74586cbe7c8a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_sad__tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/sad_tab.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/sad_tab.cc
+@@ -181,7 +181,7 @@ std::vector<int> SadTab::GetSubMessages() {
+ // Only show incognito suggestion if not already in Incognito mode.
+ if (!web_contents_->GetBrowserContext()->IsOffTheRecord())
+ message_ids.insert(message_ids.begin(), IDS_SAD_TAB_RELOAD_INCOGNITO);
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Note: on macOS, Linux and ChromeOS, the first bullet is either one of
+ // IDS_SAD_TAB_RELOAD_CLOSE_TABS or IDS_SAD_TAB_RELOAD_CLOSE_NOTABS
+ // followed by one of the above suggestions.
diff --git a/devel/electron7/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc b/devel/electron7/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
new file mode 100644
index 000000000000..f551b428b097
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/startup/bad_flags_prompt.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/startup/bad_flags_prompt.cc
+@@ -89,7 +89,7 @@ static const char* kBadFlags[] = {
+ extensions::switches::kExtensionsOnChromeURLs,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
+ // http://crbug.com/327295
+ switches::kEnableSpeechDispatcher,
diff --git a/devel/electron7/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc b/devel/electron7/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
new file mode 100644
index 000000000000..d4539b6438b5
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
@@ -0,0 +1,31 @@
+--- chrome/browser/ui/startup/startup_browser_creator.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/startup/startup_browser_creator.cc
+@@ -85,7 +85,7 @@
+ #include "chrome/browser/ui/user_manager.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+
+@@ -295,7 +295,7 @@ bool IsSilentLaunchEnabled(const base::CommandLine& co
+ // true, send a warning if guest mode is requested but not allowed by policy.
+ bool IsGuestModeEnforced(const base::CommandLine& command_line,
+ bool show_warning) {
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ PrefService* service = g_browser_process->local_state();
+ DCHECK(service);
+
+@@ -666,8 +666,10 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
+ }
+ #endif // OS_CHROMEOS
+
++#if 0 /* XXX */
+ #if defined(TOOLKIT_VIEWS) && defined(USE_X11)
+ ui::TouchFactory::SetTouchDeviceListFromCommandLine();
++#endif
+ #endif
+
+ #if defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-chrome_browser_ui_tab__helpers.cc b/devel/electron7/files/patch-chrome_browser_ui_tab__helpers.cc
new file mode 100644
index 000000000000..24c4c8357ebe
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_tab__helpers.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/ui/tab_helpers.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/tab_helpers.cc
+@@ -121,7 +121,7 @@
+ #include "components/zoom/zoom_controller.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
+ #include "chrome/browser/ui/hats/hats_helper.h"
+ #endif
+@@ -313,11 +313,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_con
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopSessionDurationObserver::CreateForWebContents(web_contents);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ features::kHappinessTrackingSurveysForDesktop) ||
+ base::FeatureList::IsEnabled(
diff --git a/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc b/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
new file mode 100644
index 000000000000..53824718b6c0
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/ui/task_manager/task_manager_columns.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/task_manager/task_manager_columns.cc
+@@ -93,10 +93,10 @@ const TableColumnData kColumns[] = {
+ base::size("100000") * kCharWidth, -1, true, false, false},
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
+ base::size("999") * kCharWidth, -1, true, false, false},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN, ui::TableColumn::LEFT, -1, 0,
+ base::size("background") * kCharWidth, -1, true, true, false},
+ {IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
diff --git a/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc b/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
new file mode 100644
index 000000000000..3a9af86a444c
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
@@ -0,0 +1,50 @@
+--- chrome/browser/ui/task_manager/task_manager_table_model.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/task_manager/task_manager_table_model.cc
+@@ -451,13 +451,13 @@ base::string16 TaskManagerTableModel::GetText(int row,
+ ? stringifier_->backgrounded_string()
+ : stringifier_->foregrounded_string();
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
+ return fd_count >= 0 ? base::FormatNumber(fd_count)
+ : stringifier_->n_a_string();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ case IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN: {
+ return stringifier_->GetKeepaliveCountText(
+@@ -617,7 +617,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ return BooleanCompare(is_proc1_bg, is_proc2_bg);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int proc1_fd_count =
+ observed_task_manager()->GetOpenFdCount(tasks_[row1]);
+@@ -625,7 +625,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ observed_task_manager()->GetOpenFdCount(tasks_[row2]);
+ return ValueCompare(proc1_fd_count, proc2_fd_count);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
+@@ -791,11 +791,11 @@ void TaskManagerTableModel::UpdateRefreshTypes(int col
+ type = REFRESH_TYPE_KEEPALIVE_COUNT;
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
+ type = REFRESH_TYPE_FD_COUNT;
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
diff --git a/devel/electron7/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc b/devel/electron7/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
new file mode 100644
index 000000000000..e4992aae421a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/toolbar/app_menu_model.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/toolbar/app_menu_model.cc
+@@ -685,7 +685,7 @@ bool AppMenuModel::IsCommandIdVisible(int command_id)
+ return app_menu_icon_controller_->GetTypeAndSeverity().type ==
+ AppMenuIconController::IconType::UPGRADE_NOTIFICATION;
+ }
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ case IDC_BOOKMARK_THIS_TAB:
+ return !chrome::ShouldRemoveBookmarkThisTabUI(browser_->profile());
+ case IDC_BOOKMARK_ALL_TABS:
diff --git a/devel/electron7/files/patch-chrome_browser_ui_ui__features.cc b/devel/electron7/files/patch-chrome_browser_ui_ui__features.cc
new file mode 100644
index 000000000000..e6ee4d1ba4c8
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_ui__features.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/ui_features.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/ui_features.cc
+@@ -81,7 +81,7 @@ const base::Feature kWebFooterExperiment{"WebFooterExp
+ const base::Feature kWebUITabStrip{"WebUITabStrip",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ constexpr base::Feature kEnableDbusAndX11StatusIcons{
+ "EnableDbusAndX11StatusIcons", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_ui__features.h b/devel/electron7/files/patch-chrome_browser_ui_ui__features.h
new file mode 100644
index 000000000000..623d1ee95dc0
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_ui__features.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/ui_features.h.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/ui_features.h
+@@ -46,7 +46,7 @@ extern const base::Feature kWebFooterExperiment;
+
+ extern const base::Feature kWebUITabStrip;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const base::Feature kEnableDbusAndX11StatusIcons;
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_accelerator__table.cc b/devel/electron7/files/patch-chrome_browser_ui_views_accelerator__table.cc
new file mode 100644
index 000000000000..39375875559b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_accelerator__table.cc
@@ -0,0 +1,46 @@
+--- chrome/browser/ui/views/accelerator_table.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/accelerator_table.cc
+@@ -51,7 +51,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR, IDC_SAVE_PAGE},
+ {ui::VKEY_9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT},
+@@ -81,7 +81,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_NUMPAD7, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_6},
+ {ui::VKEY_8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1},
+@@ -99,7 +99,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR},
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX || OS_BSD) && !OS_CHROMEOS
+ {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
+ IDC_SHOW_BOOKMARK_BAR},
+ {ui::VKEY_OEM_MINUS, ui::EF_PLATFORM_ACCELERATOR, IDC_ZOOM_MINUS},
+@@ -125,14 +125,14 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ IDC_SHOW_AVATAR_MENU},
+
+ // Platform-specific key maps.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK},
+ {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD},
+ {ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash.
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc b/devel/electron7/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
new file mode 100644
index 000000000000..4db4e1857b8b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
+@@ -36,7 +36,7 @@
+ #include "ui/wm/core/wm_state.h"
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -46,7 +46,7 @@
+ #include "chrome/grit/generated_resources.h"
+ #include "content/public/common/content_switches.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ // This connector is used in ui_devtools's TracingAgent to hook up with the
+ // tracing service.
+@@ -109,7 +109,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ devtools_server_->tracing_agent());
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // On the Linux desktop, we want to prevent the user from logging in as root,
+ // so that we don't destroy the profile. Now that we have some minimal ui
+ // initialized, check to see if we're running as root and bail if we are.
+@@ -140,7 +140,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ base::RunLoop().RunUntilIdle();
+
+ exit(EXIT_FAILURE);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ }
+
+ void ChromeBrowserMainExtraPartsViews::PostBrowserStart() {
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_chrome__views__delegate.h b/devel/electron7/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
new file mode 100644
index 000000000000..24026f54982a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/chrome_views_delegate.h.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/chrome_views_delegate.h
+@@ -44,7 +44,7 @@ class ChromeViewsDelegate : public views::ViewsDelegat
+ HICON GetSmallWindowIcon() const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ base::OnceClosure callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ bool WindowManagerProvidesTitleBar(bool maximized) override;
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_first__run__dialog.cc b/devel/electron7/files/patch-chrome_browser_ui_views_first__run__dialog.cc
new file mode 100644
index 000000000000..01566bbe0936
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_first__run__dialog.cc
@@ -0,0 +1,24 @@
+--- chrome/browser/ui/views/first_run_dialog.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/first_run_dialog.cc
+@@ -37,8 +37,10 @@
+ namespace {
+
+ void InitCrashReporterIfEnabled(bool enabled) {
++#if !defined(OS_BSD)
+ if (enabled)
+ breakpad::InitCrashReporter(std::string());
++#endif
+ }
+
+ } // namespace
+@@ -108,8 +110,10 @@ std::unique_ptr<views::View> FirstRunDialog::CreateExt
+ bool FirstRunDialog::Accept() {
+ GetWidget()->Hide();
+
++#if !defined(OS_BSD)
+ ChangeMetricsReportingStateWithReply(report_crashes_->GetChecked(),
+ base::Bind(&InitCrashReporterIfEnabled));
++#endif
+
+ if (make_default_->GetChecked())
+ shell_integration::SetAsDefaultBrowser();
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__frame.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
new file mode 100644
index 000000000000..1c46fc482d3b
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_frame.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/browser_frame.cc
+@@ -46,7 +46,7 @@
+ namespace {
+
+ bool IsUsingGtkTheme(Profile* profile) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme();
+ #else
+ return false;
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
new file mode 100644
index 000000000000..4c5dc67b00d2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+@@ -13,7 +13,7 @@
+ #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -32,7 +32,7 @@ OpaqueBrowserFrameView* CreateOpaqueBrowserFrameView(
+ BrowserView* browser_view) {
+ #if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
+ std::unique_ptr<views::NavButtonProvider> nav_button_provider;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (ThemeServiceFactory::GetForProfile(browser_view->browser()->profile())
+ ->UsingSystemTheme() &&
+ views::LinuxUI::instance()) {
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__view.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__view.cc
new file mode 100644
index 000000000000..9614c93134ff
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_browser__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_view.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/browser_view.cc
+@@ -1581,7 +1581,7 @@ void BrowserView::UserChangedTheme(BrowserThemeChangeT
+ const bool should_use_native_frame = frame_->ShouldUseNativeFrame();
+
+ bool must_regenerate_frame;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // GTK and user theme changes can both change frame buttons, so the frame
+ // always needs to be regenerated on Linux.
+ must_regenerate_frame = true;
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
new file mode 100644
index 000000000000..3740da714edf
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+@@ -47,7 +47,7 @@
+ #include "ui/views/window/vector_icons/vector_icons.h"
+ #include "ui/views/window/window_shape.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/controls/menu/menu_runner.h"
+ #endif
+
+@@ -352,7 +352,7 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Butt
+ void OpaqueBrowserFrameView::OnMenuButtonClicked(views::Button* source,
+ const gfx::Point& point,
+ const ui::Event* event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ views::MenuRunner menu_runner(frame()->GetSystemMenuModel(),
+ views::MenuRunner::HAS_MNEMONICS);
+ menu_runner.RunMenuAt(
+@@ -478,7 +478,7 @@ bool OpaqueBrowserFrameView::EverHasVisibleBackgroundT
+
+ OpaqueBrowserFrameView::FrameButtonStyle
+ OpaqueBrowserFrameView::GetFrameButtonStyle() const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return FrameButtonStyle::kMdButton;
+ #else
+ return FrameButtonStyle::kImageButton;
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
new file mode 100644
index 000000000000..17cf83c8020a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc
+@@ -6,7 +6,7 @@
+
+ #include "build/build_config.h"
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_FREEBSD)
+
+ // static
+ std::unique_ptr<OpaqueBrowserFrameViewPlatformSpecific>
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
new file mode 100644
index 000000000000..fbf8ea2f0ede
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_builder.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_builder.cc
+@@ -80,7 +80,7 @@ void SystemMenuModelBuilder::BuildMenu(ui::SimpleMenuM
+
+ void SystemMenuModelBuilder::BuildSystemMenuForBrowserWindow(
+ ui::SimpleMenuModel* model) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ model->AddItemWithStringId(IDC_MINIMIZE_WINDOW, IDS_MINIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_MAXIMIZE_WINDOW, IDS_MAXIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_RESTORE_WINDOW, IDS_RESTORE_WINDOW_MENU);
+@@ -93,7 +93,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForBrowser
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddCheckItemWithStringId(IDC_USE_SYSTEM_TITLE_BAR,
+ IDS_SHOW_WINDOW_DECORATIONS_MENU);
+@@ -131,7 +131,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForAppOrPo
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_CLOSE_WINDOW, IDS_CLOSE);
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc b/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
new file mode 100644
index 000000000000..a5520c3b0fe1
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_delegate.cc.orig 2019-12-12 12:39:17 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_delegate.cc
+@@ -15,7 +15,7 @@
+ #include "components/sessions/core/tab_restore_service.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/pref_names.h"
+ #include "components/prefs/pref_service.h"
+ #endif
+@@ -30,7 +30,7 @@ SystemMenuModelDelegate::SystemMenuModelDelegate(
+ SystemMenuModelDelegate::~SystemMenuModelDelegate() {}
+
+ bool SystemMenuModelDelegate::IsCommandIdChecked(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (command_id == IDC_USE_SYSTEM_TITLE_BAR) {
+ PrefService* prefs = browser_->profile()->GetPrefs();
+ return !prefs->GetBoolean(prefs::kUseCustomChromeFrame);
+@@ -44,7 +44,7 @@ bool SystemMenuModelDelegate::IsCommandIdEnabled(int c
+ }
+
+ bool SystemMenuModelDelegate::IsCommandIdVisible(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool is_maximized = browser_->window()->IsMaximized();
+ switch (command_id) {
+ case IDC_MAXIMIZE_WINDOW:
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_hung__renderer__view.cc b/devel/electron7/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
new file mode 100644
index 000000000000..d3dc57392619
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/hung_renderer_view.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/views/hung_renderer_view.cc
+@@ -390,7 +390,7 @@ bool HungRendererDialogView::Cancel() {
+ content::RenderProcessHost* rph =
+ hung_pages_table_model_->GetRenderWidgetHost()->GetProcess();
+ if (rph) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A generic |CrashDumpHungChildProcess()| is not implemented for Linux.
+ // Instead we send an explicit IPC to crash on the renderer's IO thread.
+ rph->ForceCrash();
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
new file mode 100644
index 000000000000..7e89698d22f0
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/new_tab_button.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/views/tabs/new_tab_button.cc
+@@ -69,7 +69,7 @@ const gfx::Size NewTabButton::kButtonSize{28, 28};
+ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
+ : views::ImageButton(listener), tab_strip_(tab_strip) {
+ set_animate_on_state_change(true);
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_triggerable_event_flags(triggerable_event_flags() |
+ ui::EF_MIDDLE_MOUSE_BUTTON);
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab.cc b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab.cc
new file mode 100644
index 000000000000..ed744a5a634a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/tabs/tab.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/views/tabs/tab.cc
+@@ -512,7 +512,7 @@ void Tab::OnMouseCaptureLost() {
+ void Tab::OnMouseMoved(const ui::MouseEvent& event) {
+ tab_style_->SetHoverLocation(event.location());
+ controller_->OnMouseEventInTab(this, event);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ MaybeUpdateHoverStatus(event);
+ #endif
+ }
+@@ -522,7 +522,7 @@ void Tab::OnMouseEntered(const ui::MouseEvent& event)
+ }
+
+ void Tab::MaybeUpdateHoverStatus(const ui::MouseEvent& event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Move the hit test area for hovering up so that it is not overlapped by tab
+ // hover cards when they are shown.
+ // TODO(crbug/978134): Once Linux/CrOS widget transparency is solved, remove
diff --git a/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
new file mode 100644
index 000000000000..7f4d37eedbed
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/tabs/tab_drag_controller.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/views/tabs/tab_drag_controller.cc
+@@ -443,7 +443,7 @@ void TabDragController::Init(TabDragContext* source_co
+ // synchronous on desktop Linux, so use that.
+ // - Chrome OS
+ // Releasing capture on Ash cancels gestures so avoid it.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ can_release_capture_ = false;
+ #endif
+ start_point_in_screen_ = gfx::Point(source_tab_offset, mouse_offset.y());
+@@ -865,7 +865,7 @@ TabDragController::DragBrowserToNewTabStrip(TabDragCon
+ else
+ SetCapture(target_context);
+
+-#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if (!defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(OS_BSD)
+ // EndMoveLoop is going to snap the window back to its original location.
+ // Hide it so users don't see this. Hiding a window in Linux aura causes
+ // it to lose capture so skip it.
+@@ -2003,7 +2003,7 @@ TabDragController::Liveness TabDragController::GetLoca
+ if (dragged_window)
+ exclude.insert(dragged_window);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Exclude windows which are pending deletion via Browser::TabStripEmpty().
+ // These windows can be returned in the Linux Aura port because the browser
+ // window which was used for dragging is not hidden once all of its tabs are
diff --git a/devel/electron7/files/patch-chrome_browser_ui_webui_about__ui.cc b/devel/electron7/files/patch-chrome_browser_ui_webui_about__ui.cc
new file mode 100644
index 000000000000..21ecec66ae91
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_webui_about__ui.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/about_ui.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/webui/about_ui.cc
+@@ -562,7 +562,7 @@ std::string ChromeURLs() {
+ return html;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string AboutLinuxProxyConfig() {
+ std::string data;
+ AppendHeader(&data, 0,
+@@ -617,7 +617,7 @@ void AboutUIHTMLSource::StartDataRequest(
+ .GetRawDataResource(idr)
+ .as_string();
+ }
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc b/devel/electron7/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
new file mode 100644
index 000000000000..f852885b3037
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
@@ -0,0 +1,55 @@
+--- chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -212,11 +212,11 @@
+ #include "chrome/browser/ui/webui/conflicts/conflicts_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/sandbox_internals_ui.h"
+ #endif
+
+@@ -338,7 +338,7 @@ bool IsAboutUI(const GURL& url) {
+ #if !defined(OS_ANDROID)
+ || url.host_piece() == chrome::kChromeUITermsHost
+ #endif
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ || url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -654,7 +654,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ if (url.host_piece() == chrome::kChromeUINaClHost)
+ return &NewWebUI<NaClUI>;
+ #endif
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUITabModalConfirmDialogHost)
+ return &NewWebUI<ConstrainedWebDialogUI>;
+ #endif
+@@ -702,17 +702,17 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ return &NewWebUI<CastUI>;
+ }
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUISandboxHost) {
+ return &NewWebUI<SandboxInternalsUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIDiscardsHost)
+ return &NewWebUI<DiscardsUI>;
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIBrowserSwitchHost)
+ return &NewWebUI<BrowserSwitchUI>;
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
new file mode 100644
index 000000000000..0920412ba908
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.cc
+@@ -27,7 +27,7 @@ void AppearanceHandler::RegisterMessages() {
+ "useDefaultTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme,
+ base::Unretained(this)));
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ web_ui()->RegisterMessageCallback(
+ "useSystemTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme,
+@@ -39,7 +39,7 @@ void AppearanceHandler::HandleUseDefaultTheme(const ba
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
+ if (profile_->IsSupervised())
+ NOTREACHED();
diff --git a/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
new file mode 100644
index 000000000000..ebcf890b16dd
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.h.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.h
+@@ -36,7 +36,7 @@ class AppearanceHandler : public SettingsPageUIHandler
+ // Changes the UI theme of the browser to the default theme.
+ void HandleUseDefaultTheme(const base::ListValue* args);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Changes the UI theme of the browser to the system (GTK+) theme.
+ void HandleUseSystemTheme(const base::ListValue* args);
+ #endif
diff --git a/devel/electron7/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
new file mode 100644
index 000000000000..641d3f836a1d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc.orig 2019-12-12 12:39:18 UTC
++++ chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+@@ -702,7 +702,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
+ {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
+ {"themes", IDS_SETTINGS_THEMES},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
+ {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
+ {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
+@@ -722,7 +722,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"openWallpaperApp", IDS_OS_SETTINGS_OPEN_WALLPAPER_APP},
+ {"setWallpaper", IDS_OS_SETTINGS_SET_WALLPAPER},
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc b/devel/electron7/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc
new file mode 100644
index 000000000000..a087bd74dae7
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/extensions/bookmark_app_finalizer_utils.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/browser/web_applications/extensions/bookmark_app_finalizer_utils.cc
+@@ -15,7 +15,7 @@ namespace {
+
+ #if !defined(OS_CHROMEOS)
+ bool CanOsAddDesktopShortcuts() {
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron7/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc b/devel/electron7/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
new file mode 100644
index 000000000000..3dd378aee8d2
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_browser_web__applications_extensions_web__app__extension__shortcut.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/browser/web_applications/extensions/web_app_extension_shortcut.cc
+@@ -50,7 +50,7 @@ namespace {
+ #if defined(OS_MACOSX)
+ const int kDesiredSizes[] = {16, 32, 128, 256, 512};
+ const size_t kNumDesiredSizes = base::size(kDesiredSizes);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux supports icons of any size. FreeDesktop Icon Theme Specification states
+ // that "Minimally you should install a 48x48 icon in the hicolor theme."
+ const int kDesiredSizes[] = {16, 32, 48, 128, 256, 512};
diff --git a/devel/electron7/files/patch-chrome_common_BUILD.gn b/devel/electron7/files/patch-chrome_common_BUILD.gn
new file mode 100644
index 000000000000..5fc446c5e2d9
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_BUILD.gn
@@ -0,0 +1,13 @@
+--- chrome/common/BUILD.gn.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/BUILD.gn
+@@ -293,6 +293,10 @@ static_library("common") {
+ public_deps += [ "//ppapi/shared_impl" ]
+ }
+
++ if (is_bsd) {
++ sources -= [ "component_flash_hint_file_linux.cc" ]
++ }
++
+ if (enable_extensions) {
+ sources += [
+ "cast_messages.cc",
diff --git a/devel/electron7/files/patch-chrome_common_chrome__features.cc b/devel/electron7/files/patch-chrome_common_chrome__features.cc
new file mode 100644
index 000000000000..59255cea0d18
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__features.cc
@@ -0,0 +1,27 @@
+--- chrome/common/chrome_features.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_features.cc
+@@ -84,13 +84,13 @@ const base::Feature kAutoFetchOnNetErrorPage{"AutoFetc
+ base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables the Restart background mode optimization. When all Chrome UI is
+ // closed and it goes in the background, allows to restart the browser to
+ // discard memory.
+ const base::Feature kBackgroundModeAllowRestart{
+ "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Enables or disables whether permission prompts are automatically blocked
+ // after the user has explicitly dismissed them too many times.
+@@ -140,7 +140,7 @@ const base::Feature kThirdPartyModulesBlocking{
+ "ThirdPartyModulesBlocking", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Enables the dual certificate verification trial feature.
+ // https://crbug.com/649026
+ const base::Feature kCertDualVerificationTrialFeature{
diff --git a/devel/electron7/files/patch-chrome_common_chrome__features.h b/devel/electron7/files/patch-chrome_common_chrome__features.h
new file mode 100644
index 000000000000..fd3c06fc0c7a
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__features.h
@@ -0,0 +1,24 @@
+--- chrome/common/chrome_features.h.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_features.h
+@@ -64,10 +64,10 @@ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kAutoFetchOnNetErrorPage;
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBackgroundModeAllowRestart;
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBlockPromptsIfDismissedOften;
+@@ -86,7 +86,7 @@ extern const base::Feature kBundledConnectionHelpFeatu
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kCaptionSettings;
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kCertDualVerificationTrialFeature;
+ #endif
diff --git a/devel/electron7/files/patch-chrome_common_chrome__paths.cc b/devel/electron7/files/patch-chrome_common_chrome__paths.cc
new file mode 100644
index 000000000000..facf6eeb024d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__paths.cc
@@ -0,0 +1,101 @@
+--- chrome/common/chrome_paths.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_paths.cc
+@@ -52,21 +52,21 @@ const base::FilePath::CharType kPepperFlashSystemBaseD
+ FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer");
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The path to the external extension <id>.json files.
+ // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
+ const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+- FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/google-chrome/extensions");
+ #else
+- FILE_PATH_LITERAL("/usr/share/chromium/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/chromium/extensions");
+ #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
+
+ // The path to the hint file that tells the pepper plugin loader
+ // where it can find the latest component updated flash.
+ const base::FilePath::CharType kComponentUpdatedFlashHint[] =
+ FILE_PATH_LITERAL("latest-component-updated-flash");
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ const base::FilePath::CharType kChromeOSComponentFlash[] = FILE_PATH_LITERAL(
+@@ -197,7 +197,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ break;
+ case chrome::DIR_DEFAULT_DOWNLOADS_SAFE:
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (!GetUserDownloadsDirectorySafe(&cur))
+ return false;
+ break;
+@@ -489,7 +489,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ #endif
+ #if defined(OS_CHROMEOS) || \
+- (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
++ ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
+ case chrome::DIR_USER_EXTERNAL_EXTENSIONS: {
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+ return false;
+@@ -497,7 +497,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ }
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
+ break;
+@@ -532,7 +532,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ #endif
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_NATIVE_MESSAGING:
+ #if defined(OS_MACOSX)
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+@@ -546,6 +546,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/opt/chrome/native-messaging-hosts"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/native-messaging-hosts"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/chromium/native-messaging-hosts"));
+@@ -558,7 +561,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ cur = cur.Append(FILE_PATH_LITERAL("NativeMessagingHosts"));
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if !defined(OS_ANDROID)
+ case chrome::DIR_GLOBAL_GCM_STORE:
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+@@ -566,7 +569,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ cur = cur.Append(kGCMStoreDirname);
+ break;
+ #endif // !defined(OS_ANDROID)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::FILE_COMPONENT_FLASH_HINT:
+ if (!base::PathService::Get(
+ chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &cur)) {
+@@ -574,7 +577,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ cur = cur.Append(kComponentUpdatedFlashHint);
+ break;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ case chrome::FILE_CHROME_OS_COMPONENT_FLASH:
+ cur = base::FilePath(kChromeOSComponentFlash);
diff --git a/devel/electron7/files/patch-chrome_common_chrome__paths.h b/devel/electron7/files/patch-chrome_common_chrome__paths.h
new file mode 100644
index 000000000000..34ee5803883f
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__paths.h
@@ -0,0 +1,42 @@
+--- chrome/common/chrome_paths.h.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_paths.h
+@@ -53,7 +53,7 @@ enum {
+ // contains subdirectories.
+ #endif
+ #if defined(OS_CHROMEOS) || \
+- (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
++ ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
+ DIR_USER_EXTERNAL_EXTENSIONS, // Directory for per-user external extensions
+ // on Chrome Mac and Chromium Linux.
+ // On Chrome OS, this path is used for OEM
+@@ -61,7 +61,7 @@ enum {
+ // create it.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_STANDALONE_EXTERNAL_EXTENSIONS, // Directory for 'per-extension'
+ // definition manifest files that
+ // describe extensions which are to be
+@@ -119,7 +119,7 @@ enum {
+ DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, // Directory where sanitized
+ // supervised user whitelists are
+ // installed.
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ DIR_NATIVE_MESSAGING, // System directory where native messaging host
+ // manifest files are stored.
+ DIR_USER_NATIVE_MESSAGING, // Directory with Native Messaging Hosts
+@@ -134,10 +134,10 @@ enum {
+ DIR_GEN_TEST_DATA, // Directory where generated test data resides.
+ DIR_TEST_DATA, // Directory where unit test data resides.
+ DIR_TEST_TOOLS, // Directory where unit test tools reside.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ FILE_COMPONENT_FLASH_HINT, // A file in a known location that points to
+ // the component updated flash plugin.
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ FILE_CHROME_OS_COMPONENT_FLASH, // The location of component updated Flash on
+ // Chrome OS.
diff --git a/devel/electron7/files/patch-chrome_common_chrome__paths__internal.h b/devel/electron7/files/patch-chrome_common_chrome__paths__internal.h
new file mode 100644
index 000000000000..747b86c64712
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__paths__internal.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_paths_internal.h.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_paths_internal.h
+@@ -45,7 +45,7 @@ void GetUserCacheDirectory(const base::FilePath& profi
+ // Get the path to the user's documents directory.
+ bool GetUserDocumentsDirectory(base::FilePath* result);
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Gets the path to a safe default download directory for a user.
+ bool GetUserDownloadsDirectorySafe(base::FilePath* result);
+ #endif
diff --git a/devel/electron7/files/patch-chrome_common_chrome__switches.cc b/devel/electron7/files/patch-chrome_common_chrome__switches.cc
new file mode 100644
index 000000000000..c47b5a300596
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__switches.cc
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_switches.cc
+@@ -853,7 +853,7 @@ const char kAllowNaClFileHandleAPI[] = "allow-n
+ const char kAllowNaClSocketAPI[] = "allow-nacl-socket-api";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const char kEnableNewAppMenuIcon[] = "enable-new-app-menu-icon";
+
+ // Causes the browser to launch directly in guest mode.
diff --git a/devel/electron7/files/patch-chrome_common_chrome__switches.h b/devel/electron7/files/patch-chrome_common_chrome__switches.h
new file mode 100644
index 000000000000..3ebc75416e1e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_chrome__switches.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.h.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/chrome_switches.h
+@@ -264,7 +264,7 @@ extern const char kAllowNaClFileHandleAPI[];
+ extern const char kAllowNaClSocketAPI[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const char kEnableNewAppMenuIcon[];
+ extern const char kGuest[];
+ #endif
diff --git a/devel/electron7/files/patch-chrome_common_extensions_api_api__sources.gni b/devel/electron7/files/patch-chrome_common_extensions_api_api__sources.gni
new file mode 100644
index 000000000000..fe69d1570ba8
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_extensions_api_api__sources.gni
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/api/api_sources.gni.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/extensions/api/api_sources.gni
+@@ -109,7 +109,7 @@ if (is_chromeos) {
+ "wallpaper.json",
+ "wallpaper_private.json",
+ ]
+-} else if (is_linux || is_win) {
++} else if (is_linux || is_bsd || is_win) {
+ schema_sources_ += [ "input_ime.json" ]
+ }
+
diff --git a/devel/electron7/files/patch-chrome_common_extensions_command.cc b/devel/electron7/files/patch-chrome_common_extensions_command.cc
new file mode 100644
index 000000000000..2bc8ab7f6511
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_extensions_command.cc
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/command.cc.orig 2019-12-12 12:39:19 UTC
++++ chrome/common/extensions/command.cc
+@@ -300,7 +300,7 @@ std::string Command::CommandPlatform() {
+ return values::kKeybindingPlatformMac;
+ #elif defined(OS_CHROMEOS)
+ return values::kKeybindingPlatformChromeOs;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return values::kKeybindingPlatformLinux;
+ #else
+ return "";
diff --git a/devel/electron7/files/patch-chrome_common_features.gni b/devel/electron7/files/patch-chrome_common_features.gni
new file mode 100644
index 000000000000..aac3422e4a25
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_features.gni
@@ -0,0 +1,14 @@
+--- chrome/common/features.gni.orig 2019-12-12 12:39:20 UTC
++++ chrome/common/features.gni
+@@ -42,9 +42,9 @@ declare_args() {
+ (is_desktop_linux && use_dbus) || is_chromeos
+
+ enable_one_click_signin =
+- is_win || is_mac || (is_linux && !is_chromeos && !is_chromecast)
++ is_win || is_mac || is_bsd || (is_linux && !is_chromeos && !is_chromecast)
+
+- enable_service_discovery = (enable_mdns && !is_android) || is_mac
++ enable_service_discovery = (enable_mdns && !is_android) || is_mac || is_bsd
+
+ # Enables use of the session service, which is enabled by default.
+ # Android stores them separately on the Java side.
diff --git a/devel/electron7/files/patch-chrome_common_pref__names.cc b/devel/electron7/files/patch-chrome_common_pref__names.cc
new file mode 100644
index 000000000000..f6d8290669b8
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_pref__names.cc
@@ -0,0 +1,44 @@
+--- chrome/common/pref_names.cc.orig 2019-12-12 12:39:20 UTC
++++ chrome/common/pref_names.cc
+@@ -1026,7 +1026,7 @@ const char kForceYouTubeRestrict[] = "settings.force_y
+ // only using an account that belongs to one of the domains from this pref.
+ const char kAllowedDomainsForApps[] = "settings.allowed_domains_for_apps";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Linux specific preference on whether we should match the system theme.
+ const char kUsesSystemTheme[] = "extensions.theme.use_system";
+ #endif
+@@ -1153,7 +1153,7 @@ const char kShowUpdatePromotionInfoBar[] =
+ "browser.show_update_promotion_info_bar";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Boolean that is false if we should show window manager decorations. If
+ // true, we draw a custom chrome frame (thicker title bar and blue border).
+ const char kUseCustomChromeFrame[] = "browser.custom_chrome_frame";
+@@ -1540,7 +1540,7 @@ const char kDownloadDefaultDirectory[] = "download.def
+ // upgrade a unsafe location to a safe location.
+ const char kDownloadDirUpgraded[] = "download.directory_upgrade";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const char kOpenPdfDownloadInSystemReader[] =
+ "download.open_pdf_in_system_reader";
+ #endif
+@@ -1791,12 +1791,12 @@ const char kAuthAndroidNegotiateAccountType[] =
+ // domain sub-content requests.
+ const char kAllowCrossOriginAuthPrompt[] = "auth.allow_cross_origin_prompt";
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Boolean that specifies whether OK-AS-DELEGATE flag from KDC is respected
+ // along with kAuthNegotiateDelegateWhitelist.
+ const char kAuthNegotiateDelegateByKdcPolicy[] =
+ "auth.negotiate_delegate_by_kdc_policy";
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // Boolean that specifies whether NTLMv2 is enabled.
diff --git a/devel/electron7/files/patch-chrome_common_pref__names.h b/devel/electron7/files/patch-chrome_common_pref__names.h
new file mode 100644
index 000000000000..a37206103448
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_pref__names.h
@@ -0,0 +1,41 @@
+--- chrome/common/pref_names.h.orig 2019-12-12 12:39:20 UTC
++++ chrome/common/pref_names.h
+@@ -326,7 +326,7 @@ extern const char kHistoryMenuPromoShown[];
+ extern const char kForceGoogleSafeSearch[];
+ extern const char kForceYouTubeRestrict[];
+ extern const char kAllowedDomainsForApps[];
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUsesSystemTheme[];
+ #endif
+ extern const char kCurrentThemePackFilename[];
+@@ -357,7 +357,7 @@ extern const char kDefaultBrowserSettingEnabled[];
+ #if defined(OS_MACOSX)
+ extern const char kShowUpdatePromotionInfoBar[];
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUseCustomChromeFrame[];
+ #endif
+ #if BUILDFLAG(ENABLE_PLUGINS)
+@@ -511,7 +511,7 @@ extern const char kAppWindowPlacement[];
+ extern const char kDownloadDefaultDirectory[];
+ extern const char kDownloadExtensionsToOpen[];
+ extern const char kDownloadDirUpgraded[];
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const char kOpenPdfDownloadInSystemReader[];
+ #endif
+ #if defined(OS_ANDROID)
+@@ -708,9 +708,9 @@ extern const char kGSSAPILibraryName[];
+ extern const char kAuthAndroidNegotiateAccountType[];
+ extern const char kAllowCrossOriginAuthPrompt[];
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ extern const char kAuthNegotiateDelegateByKdcPolicy[];
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ extern const char kNtlmV2Enabled[];
diff --git a/devel/electron7/files/patch-chrome_common_webui__url__constants.cc b/devel/electron7/files/patch-chrome_common_webui__url__constants.cc
new file mode 100644
index 000000000000..fa7f2728c123
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_webui__url__constants.cc
@@ -0,0 +1,48 @@
+--- chrome/common/webui_url_constants.cc.orig 2019-12-12 12:39:20 UTC
++++ chrome/common/webui_url_constants.cc
+@@ -311,7 +311,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
+ const char kChromeUICastHost[] = "cast";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kChromeUIDiscardsHost[] = "discards";
+ const char kChromeUIDiscardsURL[] = "chrome://discards/";
+ const char kChromeUIHatsHost[] = "hats";
+@@ -322,17 +322,17 @@ const char kChromeUIHatsURL[] = "chrome://hats/";
+ const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const char kChromeUISandboxHost[] = "sandbox";
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ const char kChromeUIBrowserSwitchHost[] = "browser-switch";
+ const char kChromeUIBrowserSwitchURL[] = "chrome://browser-switch/";
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+ #endif
+
+@@ -586,13 +586,13 @@ const char* const kChromeHostURLs[] = {
+ kChromeUIInternetDetailDialogHost,
+ kChromeUIAssistantOptInHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ kChromeUIDiscardsHost,
+ #endif
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ kChromeUILinuxProxyConfigHost,
+ #endif
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ kChromeUISandboxHost,
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron7/files/patch-chrome_common_webui__url__constants.h b/devel/electron7/files/patch-chrome_common_webui__url__constants.h
new file mode 100644
index 000000000000..93f15b2bb72d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_common_webui__url__constants.h
@@ -0,0 +1,32 @@
+--- chrome/common/webui_url_constants.h.orig 2019-12-12 12:39:20 UTC
++++ chrome/common/webui_url_constants.h
+@@ -270,7 +270,7 @@ bool IsSystemWebUIHost(base::StringPiece host);
+ extern const char kChromeUICastHost[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kChromeUIDiscardsHost[];
+ extern const char kChromeUIDiscardsURL[];
+ extern const char kChromeUIHatsHost[];
+@@ -282,17 +282,17 @@ extern const char kChromeUIHatsURL[];
+ extern const char kChromeUILinuxProxyConfigHost[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ extern const char kChromeUISandboxHost[];
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kChromeUIBrowserSwitchHost[];
+ extern const char kChromeUIBrowserSwitchURL[];
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ extern const char kChromeUITabModalConfirmDialogHost[];
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_renderer_chrome__content__renderer__client.cc b/devel/electron7/files/patch-chrome_renderer_chrome__content__renderer__client.cc
new file mode 100644
index 000000000000..a23ce2246bc6
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_renderer_chrome__content__renderer__client.cc
@@ -0,0 +1,45 @@
+--- chrome/renderer/chrome_content_renderer_client.cc.orig 2019-12-12 12:39:21 UTC
++++ chrome/renderer/chrome_content_renderer_client.cc
+@@ -154,13 +154,13 @@
+ #include "chrome/renderer/searchbox/searchbox_extension.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/allocator/buildflags.h"
+ #if BUILDFLAG(USE_TCMALLOC)
+ #include "chrome/common/performance_manager/mojom/tcmalloc.mojom.h"
+ #include "chrome/renderer/performance_manager/mechanisms/tcmalloc_tunables_impl.h"
+ #endif // BUILDFLAG(USE_TCMALLOC)
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #endif
+@@ -1040,7 +1040,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
+ }
+
+ case chrome::mojom::PluginStatus::kRestartRequired: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ placeholder =
+ create_blocked_plugin(IDR_BLOCKED_PLUGIN_HTML,
+ l10n_util::GetStringFUTF16(
+@@ -1636,7 +1636,7 @@ void ChromeContentRendererClient::BindReceiverOnMainTh
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if BUILDFLAG(USE_TCMALLOC)
+ if (auto setter_receiver = receiver.As<tcmalloc::mojom::TcmallocTunables>()) {
+ performance_manager::mechanism::TcmallocTunablesImpl::Create(
+@@ -1644,7 +1644,7 @@ void ChromeContentRendererClient::BindReceiverOnMainTh
+ return;
+ }
+ #endif // BUILDFLAG(USE_TCMALLOC)
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // TODO(crbug.com/977637): Get rid of the use of BinderRegistry here. This was
+ // done only to avoid churning spellcheck code while eliminting the "chrome"
diff --git a/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc b/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
new file mode 100644
index 000000000000..82c7dae1540e
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
@@ -0,0 +1,29 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.cc.orig 2019-12-12 12:39:21 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.cc
+@@ -15,7 +15,7 @@
+ #include "ppapi/proxy/ppapi_messages.h"
+ #include "ppapi/proxy/serialized_structs.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "content/public/common/common_sandbox_support_linux.h"
+ #elif defined(OS_WIN)
+@@ -29,7 +29,7 @@ PepperFlashFontFileHost::PepperFlashFontFileHost(
+ const ppapi::proxy::SerializedFontDescription& description,
+ PP_PrivateFontCharset charset)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The global SkFontConfigInterface is configured and initialized with a
+ // SkFontconfigInterface compatible font_service::FontLoader in
+ // RendererBlinkPlatformImpl (called from RenderThreadImpl::Init) at startup
+@@ -74,7 +74,7 @@ bool PepperFlashFontFileHost::GetFontData(uint32_t tab
+ void* buffer,
+ size_t* length) {
+ bool result = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (font_file_.IsValid()) {
+ result = content::GetFontTable(font_file_.GetPlatformFile(), table,
+ 0 /* offset */,
diff --git a/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h b/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
new file mode 100644
index 000000000000..0eb6ea79ceef
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
@@ -0,0 +1,20 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.h.orig 2019-12-12 12:39:21 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.h
+@@ -14,7 +14,7 @@
+ #include "ppapi/c/private/pp_private_font_charset.h"
+ #include "ppapi/host/resource_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file.h"
+ #elif defined(OS_WIN)
+ #include "third_party/skia/include/core/SkRefCnt.h"
+@@ -50,7 +50,7 @@ class PepperFlashFontFileHost : public ppapi::host::Re
+ uint32_t table);
+ bool GetFontData(uint32_t table, void* buffer, size_t* length);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::File font_file_;
+ #elif defined(OS_WIN)
+ sk_sp<SkTypeface> typeface_;
diff --git a/devel/electron7/files/patch-chrome_service_cloud__print_print__system.cc b/devel/electron7/files/patch-chrome_service_cloud__print_print__system.cc
new file mode 100644
index 000000000000..b997f1f70341
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_service_cloud__print_print__system.cc
@@ -0,0 +1,11 @@
+--- chrome/service/cloud_print/print_system.cc.orig 2019-12-12 12:39:21 UTC
++++ chrome/service/cloud_print/print_system.cc
+@@ -36,7 +36,7 @@ std::string PrintSystem::GenerateProxyId() {
+ return base::GenerateGUID();
+ }
+
+-#if defined(OS_LINUX) && !defined(USE_CUPS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(USE_CUPS)
+ scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
+ const base::DictionaryValue*) {
+ return nullptr;
diff --git a/devel/electron7/files/patch-chrome_test_BUILD.gn b/devel/electron7/files/patch-chrome_test_BUILD.gn
new file mode 100644
index 000000000000..eac23536ec62
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_test_BUILD.gn
@@ -0,0 +1,11 @@
+--- chrome/test/BUILD.gn.orig 2019-12-12 12:39:21 UTC
++++ chrome/test/BUILD.gn
+@@ -5797,7 +5797,7 @@ test("chrome_app_unittests") {
+ "//components/safe_browsing:buildflags",
+ "//components/tracing",
+ ]
+- if (!is_fuchsia) {
++ if (!is_fuchsia && !is_bsd) {
+ # TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
+ deps += [ "//third_party/breakpad:client" ]
+ }
diff --git a/devel/electron7/files/patch-chrome_test_base_in__process__browser__test.cc b/devel/electron7/files/patch-chrome_test_base_in__process__browser__test.cc
new file mode 100644
index 000000000000..9e49d98a2e3d
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_test_base_in__process__browser__test.cc
@@ -0,0 +1,22 @@
+--- chrome/test/base/in_process_browser_test.cc.orig 2019-12-12 12:39:22 UTC
++++ chrome/test/base/in_process_browser_test.cc
+@@ -76,6 +76,10 @@
+ #include "chrome/test/base/scoped_bundle_swizzler_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <signal.h>
++#endif
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -103,7 +107,7 @@
+ #include "ui/events/test/event_generator.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/test/test_desktop_screen_x11.h"
+ #endif
+
diff --git a/devel/electron7/files/patch-chrome_test_base_testing__browser__process.h b/devel/electron7/files/patch-chrome_test_base_testing__browser__process.h
new file mode 100644
index 000000000000..288fedaf0ade
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_test_base_testing__browser__process.h
@@ -0,0 +1,13 @@
+--- chrome/test/base/testing_browser_process.h.orig 2019-12-12 12:39:22 UTC
++++ chrome/test/base/testing_browser_process.h
+@@ -116,8 +116,8 @@ class TestingBrowserProcess : public BrowserProcess {
+ DownloadRequestLimiter* download_request_limiter() override;
+ StartupData* startup_data() override;
+
+-#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+- void StartAutoupdateTimer() override {}
++#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
++ void StartAutoupdateTimer() /*override*/ {}
+ #endif
+
+ component_updater::ComponentUpdateService* component_updater() override;
diff --git a/devel/electron7/files/patch-chrome_test_chromedriver_chrome__launcher.cc b/devel/electron7/files/patch-chrome_test_chromedriver_chrome__launcher.cc
new file mode 100644
index 000000000000..b4302ca7f296
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_test_chromedriver_chrome__launcher.cc
@@ -0,0 +1,13 @@
+--- chrome/test/chromedriver/chrome_launcher.cc.orig 2019-12-12 12:39:22 UTC
++++ chrome/test/chromedriver/chrome_launcher.cc
+@@ -67,6 +67,10 @@
+ #include "chrome/test/chromedriver/keycode_text_conversion.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <sys/wait.h>
++#endif
++
+ namespace {
+
+ // TODO(eseckler): Remove --ignore-certificate-errors for newer Chrome versions
diff --git a/devel/electron7/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc b/devel/electron7/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
new file mode 100644
index 000000000000..1735059414ee
--- /dev/null
+++ b/devel/electron7/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
@@ -0,0 +1,20 @@
+--- chrome/test/chromedriver/chrome/chrome_finder.cc.orig 2019-12-12 12:39:22 UTC
++++ chrome/test/chromedriver/chrome/chrome_finder.cc
+@@ -48,7 +48,7 @@ void GetApplicationDirs(std::vector<base::FilePath>* l
+ installation_locations[i].Append(L"Chromium\\Application"));
+ }
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ void GetApplicationDirs(std::vector<base::FilePath>* locations) {
+ // TODO: Respect users' PATH variables.
+ // Until then, we use an approximation of the most common defaults.
+@@ -135,7 +135,7 @@ bool FindChrome(base::FilePath* browser_exe) {
+ #elif defined(OS_MACOSX)
+ base::FilePath("Google Chrome.app/Contents/MacOS/Google Chrome"),
+ base::FilePath("Chromium.app/Contents/MacOS/Chromium")
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath("google-chrome"),
+ base::FilePath("chrome"),
+ base::FilePath("chromium"),
diff --git a/devel/electron7/files/patch-chromecast_browser_cast__browser__main__parts.cc b/devel/electron7/files/patch-chromecast_browser_cast__browser__main__parts.cc
new file mode 100644
index 000000000000..01113879bc31
--- /dev/null
+++ b/devel/electron7/files/patch-chromecast_browser_cast__browser__main__parts.cc
@@ -0,0 +1,38 @@
+--- chromecast/browser/cast_browser_main_parts.cc.orig 2019-12-12 12:39:27 UTC
++++ chromecast/browser/cast_browser_main_parts.cc
+@@ -71,7 +71,7 @@
+ #include "ui/base/ui_base_switches.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include <signal.h>
+ #include <sys/prctl.h>
+@@ -283,7 +283,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {cc::switches::kDisableThreadedAnimation, ""},
+ #endif // defined(OS_ANDROID)
+ #endif // BUILDFLAG(IS_CAST_AUDIO_ONLY)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(ARCH_CPU_X86_FAMILY)
+ // This is needed for now to enable the x11 Ozone platform to work with
+ // current Linux/NVidia OpenGL drivers.
+@@ -293,7 +293,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {switches::kEnableHardwareOverlays, "cast"},
+ #endif
+ #endif
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // It's better to start GPU process on demand. For example, for TV platforms
+ // cast starts in background and can't render until TV switches to cast
+ // input.
+@@ -433,7 +433,7 @@ void CastBrowserMainParts::ToolkitInitialized() {
+ views_delegate_ = std::make_unique<CastViewsDelegate>();
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Without this call, the FontConfig library gets implicitly initialized
+ // on the first call to FontConfig. Since it's not safe to initialize it
+ // concurrently from multiple threads, we explicitly initialize it here
diff --git a/devel/electron7/files/patch-chromecast_browser_cast__content__browser__client.cc b/devel/electron7/files/patch-chromecast_browser_cast__content__browser__client.cc
new file mode 100644
index 000000000000..3f9e89a8879b
--- /dev/null
+++ b/devel/electron7/files/patch-chromecast_browser_cast__content__browser__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/browser/cast_content_browser_client.cc.orig 2019-12-12 12:39:27 UTC
++++ chromecast/browser/cast_content_browser_client.cc
+@@ -534,7 +534,7 @@ void CastContentBrowserClient::AppendExtraCommandLineS
+ switches::kAudioOutputChannels));
+ }
+ } else if (process_type == switches::kGpuProcess) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Necessary for accelerated 2d canvas. By default on Linux, Chromium assumes
+ // GLES2 contexts can be lost to a power-save mode, which breaks GPU canvas
+ // apps.
diff --git a/devel/electron7/files/patch-chromecast_browser_metrics_BUILD.gn b/devel/electron7/files/patch-chromecast_browser_metrics_BUILD.gn
new file mode 100644
index 000000000000..d8d4bd606d19
--- /dev/null
+++ b/devel/electron7/files/patch-chromecast_browser_metrics_BUILD.gn
@@ -0,0 +1,11 @@
+--- chromecast/browser/metrics/BUILD.gn.orig 2019-12-12 12:39:27 UTC
++++ chromecast/browser/metrics/BUILD.gn
+@@ -32,7 +32,7 @@ cast_source_set("metrics") {
+ "//third_party/metrics_proto",
+ ]
+
+- if (is_linux) {
++ if (is_linux || is_bsd) {
+ sources += [
+ "external_metrics.cc",
+ "external_metrics.h",
diff --git a/devel/electron7/files/patch-chromecast_browser_tts_tts__controller__impl.cc b/devel/electron7/files/patch-chromecast_browser_tts_tts__controller__impl.cc
new file mode 100644
index 000000000000..b6c00da4182d
--- /dev/null
+++ b/devel/electron7/files/patch-chromecast_browser_tts_tts__controller__impl.cc
@@ -0,0 +1,14 @@
+--- chromecast/browser/tts/tts_controller_impl.cc.orig 2019-12-12 12:39:27 UTC
++++ chromecast/browser/tts/tts_controller_impl.cc
+@@ -390,7 +390,11 @@ int TtsControllerImpl::QueueSize() {
+ }
+
+ TtsPlatformImpl* TtsControllerImpl::GetPlatformImpl() {
++#if defined(OS_BSD)
++ return NULL;
++#else
+ return platform_impl_.get();
++#endif // defined(OS_BSD)
+ }
+
+ std::string TtsControllerImpl::GetApplicationLocale() const {
diff --git a/devel/electron7/files/patch-chromecast_media_base_monotonic__clock.cc b/devel/electron7/files/patch-chromecast_media_base_monotonic__clock.cc
new file mode 100644
index 000000000000..a7ecf1b150cd
--- /dev/null
+++ b/devel/electron7/files/patch-chromecast_media_base_monotonic__clock.cc
@@ -0,0 +1,23 @@
+--- chromecast/media/base/monotonic_clock.cc.orig 2019-12-12 12:39:27 UTC
++++ chromecast/media/base/monotonic_clock.cc
+@@ -9,9 +9,9 @@
+ #include "base/time/time.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chromecast/media/base/buildflags.h"
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #include <zircon/syscalls.h>
+@@ -20,7 +20,7 @@
+ namespace chromecast {
+ namespace media {
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ int64_t MonotonicClockNow() {
+ timespec now = {0, 0};
+ #if BUILDFLAG(MEDIA_CLOCK_MONOTONIC_RAW)
diff --git a/devel/electron7/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc b/devel/electron7/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
new file mode 100644
index 000000000000..8073c7563124
--- /dev/null
+++ b/devel/electron7/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
@@ -0,0 +1,14 @@
+--- components/autofill/content/renderer/password_form_conversion_utils.cc.orig 2019-12-12 12:39:28 UTC
++++ components/autofill/content/renderer/password_form_conversion_utils.cc
+@@ -36,7 +36,11 @@
+ #include "third_party/blink/public/web/web_form_control_element.h"
+ #include "third_party/blink/public/web/web_input_element.h"
+ #include "third_party/blink/public/web/web_local_frame.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using blink::WebElement;
diff --git a/devel/electron7/files/patch-components_autofill_core_browser_autofill__experiments.cc b/devel/electron7/files/patch-components_autofill_core_browser_autofill__experiments.cc
new file mode 100644
index 000000000000..ef92ca114ba9
--- /dev/null
+++ b/devel/electron7/files/patch-components_autofill_core_browser_autofill__experiments.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/browser/autofill_experiments.cc.orig 2019-12-12 12:39:28 UTC
++++ components/autofill/core/browser/autofill_experiments.cc
+@@ -234,7 +234,7 @@ bool IsAutofillNoLocalSaveOnUploadSuccessExperimentEna
+ }
+
+ bool OfferStoreUnmaskedCards(bool is_off_the_record) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The checkbox can be forced on with a flag, but by default we don't store
+ // on Linux due to lack of system keychain integration. See crbug.com/162735
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/devel/electron7/files/patch-components_autofill_core_browser_personal__data__manager.cc b/devel/electron7/files/patch-components_autofill_core_browser_personal__data__manager.cc
new file mode 100644
index 000000000000..dfe748aaf162
--- /dev/null
+++ b/devel/electron7/files/patch-components_autofill_core_browser_personal__data__manager.cc
@@ -0,0 +1,15 @@
+--- components/autofill/core/browser/personal_data_manager.cc.orig 2019-12-12 12:39:29 UTC
++++ components/autofill/core/browser/personal_data_manager.cc
+@@ -1925,10 +1925,10 @@ bool PersonalDataManager::IsServerCard(const CreditCar
+
+ bool PersonalDataManager::ShouldShowCardsFromAccountOption() const {
+ // The feature is only for Linux, Windows and Mac.
+-#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) || \
++#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) || \
+ defined(OS_CHROMEOS)
+ return false;
+-#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) ||
++#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) ||
+ // defined(OS_CHROMEOS)
+
+ // This option should only be shown for users that have not enabled the Sync
diff --git a/devel/electron7/files/patch-components_autofill_core_common_autofill__payments__features.cc b/devel/electron7/files/patch-components_autofill_core_common_autofill__payments__features.cc
new file mode 100644
index 000000000000..c7de2e729610
--- /dev/null
+++ b/devel/electron7/files/patch-components_autofill_core_common_autofill__payments__features.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_payments_features.cc.orig 2019-12-12 12:39:29 UTC
++++ components/autofill/core/common/autofill_payments_features.cc
+@@ -159,7 +159,7 @@ const base::Feature kAutofillUpstreamEditableExpiratio
+
+ bool ShouldShowImprovedUserConsentForCreditCardSave() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The new user consent UI is fully launched on MacOS, Windows and Linux.
+ return true;
+ #endif
diff --git a/devel/electron7/files/patch-components_autofill_core_common_autofill__util.cc b/devel/electron7/files/patch-components_autofill_core_common_autofill__util.cc
new file mode 100644
index 000000000000..ddc373f97d87
--- /dev/null
+++ b/devel/electron7/files/patch-components_autofill_core_common_autofill__util.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_util.cc.orig 2019-12-12 12:39:29 UTC
++++ components/autofill/core/common/autofill_util.cc
+@@ -213,7 +213,7 @@ bool SanitizedFieldIsEmpty(const base::string16& value
+ }
+
+ bool ShouldAutoselectFirstSuggestionOnArrowDown() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron7/files/patch-components_content__settings_core_browser_website__settings__registry.cc b/devel/electron7/files/patch-components_content__settings_core_browser_website__settings__registry.cc
new file mode 100644
index 000000000000..62b6921d8665
--- /dev/null
+++ b/devel/electron7/files/patch-components_content__settings_core_browser_website__settings__registry.cc
@@ -0,0 +1,11 @@
+--- components/content_settings/core/browser/website_settings_registry.cc.orig 2019-12-12 12:39:29 UTC
++++ components/content_settings/core/browser/website_settings_registry.cc
+@@ -66,7 +66,7 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Re
+ #if defined(OS_WIN)
+ if (!(platform & PLATFORM_WINDOWS))
+ return nullptr;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!(platform & PLATFORM_LINUX))
+ return nullptr;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron7/files/patch-components_cookie__config_cookie__store__util.cc b/devel/electron7/files/patch-components_cookie__config_cookie__store__util.cc
new file mode 100644
index 000000000000..36b1e09f886c
--- /dev/null
+++ b/devel/electron7/files/patch-components_cookie__config_cookie__store__util.cc
@@ -0,0 +1,24 @@
+--- components/cookie_config/cookie_store_util.cc.orig 2019-12-12 12:39:29 UTC
++++ components/cookie_config/cookie_store_util.cc
+@@ -11,7 +11,7 @@
+
+ namespace cookie_config {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ namespace {
+
+ // Use the operating system's mechanisms to encrypt cookies before writing
+@@ -63,10 +63,10 @@ base::LazyInstance<CookieOSCryptoDelegate>::Destructor
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return g_cookie_crypto_delegate.Pointer();
+ }
+-#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return NULL;
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace cookie_config
diff --git a/devel/electron7/files/patch-components_crash_content_app_BUILD.gn b/devel/electron7/files/patch-components_crash_content_app_BUILD.gn
new file mode 100644
index 000000000000..4d4114a41ebd
--- /dev/null
+++ b/devel/electron7/files/patch-components_crash_content_app_BUILD.gn
@@ -0,0 +1,20 @@
+--- components/crash/content/app/BUILD.gn.orig 2019-12-12 12:39:29 UTC
++++ components/crash/content/app/BUILD.gn
+@@ -54,7 +54,7 @@ static_library("app") {
+ sources += [ "crashpad.cc" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "breakpad_linux.cc",
+ "breakpad_linux.h",
+@@ -98,7 +98,7 @@ static_library("app") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
diff --git a/devel/electron7/files/patch-components_crash_content_app_crashpad.cc b/devel/electron7/files/patch-components_crash_content_app_crashpad.cc
new file mode 100644
index 000000000000..297d992541e4
--- /dev/null
+++ b/devel/electron7/files/patch-components_crash_content_app_crashpad.cc
@@ -0,0 +1,43 @@
+--- components/crash/content/app/crashpad.cc.orig 2019-12-12 12:39:29 UTC
++++ components/crash/content/app/crashpad.cc
+@@ -104,6 +104,12 @@ void InitializeCrashpadImpl(bool initial_client,
+ const base::FilePath& exe_path,
+ const std::vector<std::string>& initial_arguments,
+ bool embedded_handler) {
++
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return;
++#endif
++
+ static bool initialized = false;
+ DCHECK(!initialized);
+ initialized = true;
+@@ -124,7 +130,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ DCHECK(browser_process || process_type == "Chrome Installer" ||
+ process_type == "notification-helper" ||
+ process_type == "GCPW Installer" || process_type == "GCPW DLL");
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ DCHECK(browser_process);
+ #else
+ #error Port.
+@@ -192,7 +198,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // other "main, first process" to initialize things. There is no "relauncher"
+ // on Windows, so this is synonymous with initial_client.
+ const bool should_initialize_database_and_set_upload_policy = initial_client;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const bool should_initialize_database_and_set_upload_policy = browser_process;
+ #endif
+ if (should_initialize_database_and_set_upload_policy) {
+@@ -272,7 +278,9 @@ bool GetUploadsEnabled() {
+
+ #if !defined(OS_ANDROID)
+ void DumpWithoutCrashing() {
++#if !defined(OS_BSD)
+ CRASHPAD_SIMULATE_CRASH();
++#endif
+ }
+ #endif
+
diff --git a/devel/electron7/files/patch-components_crash_content_browser_BUILD.gn b/devel/electron7/files/patch-components_crash_content_browser_BUILD.gn
new file mode 100644
index 000000000000..e72e55545eda
--- /dev/null
+++ b/devel/electron7/files/patch-components_crash_content_browser_BUILD.gn
@@ -0,0 +1,27 @@
+--- components/crash/content/browser/BUILD.gn.orig 2019-12-12 12:39:29 UTC
++++ components/crash/content/browser/BUILD.gn
+@@ -28,7 +28,7 @@ source_set("browser") {
+ "//content/public/common",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ set_sources_assignment_filter([])
+
+ # Want this file on both Linux and Android.
+@@ -42,13 +42,13 @@ source_set("browser") {
+ deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
+
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
+ # This is not in the GYP build but this target includes breakpad client
+ # headers, so add the dependency here.
+- if ((is_posix && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_ios && !is_bsd) || is_fuchsia) {
+ configs += [ "//third_party/breakpad:client_config" ]
+ public_configs = [ "//third_party/breakpad:client_config" ]
+ }
diff --git a/devel/electron7/files/patch-components_crash_core_common_BUILD.gn b/devel/electron7/files/patch-components_crash_core_common_BUILD.gn
new file mode 100644
index 000000000000..4a744f1bbf1b
--- /dev/null
+++ b/devel/electron7/files/patch-components_crash_core_common_BUILD.gn
@@ -0,0 +1,28 @@
+--- components/crash/core/common/BUILD.gn.orig 2019-12-12 12:39:29 UTC
++++ components/crash/core/common/BUILD.gn
+@@ -7,7 +7,7 @@ import("//components/gwp_asan/buildflags/buildflags.gn
+
+ declare_args() {
+ # If set to true, this will stub out and disable the entire crash key system.
+- use_crash_key_stubs = is_fuchsia
++ use_crash_key_stubs = is_fuchsia || is_bsd
+ }
+
+ group("common") {
+@@ -93,7 +93,6 @@ target(crash_key_target_type, "crash_key") {
+ ]
+ }
+
+- deps += [ "//third_party/breakpad:client" ]
+ }
+ }
+
+@@ -153,7 +152,7 @@ source_set("unit_tests") {
+ sources += [ "objc_zombie_unittest.mm" ]
+ }
+
+- if (!is_mac && !is_ios && !is_win && !is_fuchsia && !is_android) {
++ if (!is_mac && !is_ios && !is_win && !is_fuchsia && !is_android && !is_bsd) {
+ include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
+ sources += [ "crash_key_breakpad_unittest.cc" ]
+ }
diff --git a/devel/electron7/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc b/devel/electron7/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
new file mode 100644
index 000000000000..d118620adc5c
--- /dev/null
+++ b/devel/electron7/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
@@ -0,0 +1,20 @@
+--- components/discardable_memory/service/discardable_shared_memory_manager.cc.orig 2019-12-12 12:39:30 UTC
++++ components/discardable_memory/service/discardable_shared_memory_manager.cc
+@@ -32,7 +32,7 @@
+ #include "components/discardable_memory/common/discardable_shared_memory_heap.h"
+ #include "mojo/public/cpp/bindings/strong_binding.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file_path.h"
+ #include "base/files/file_util.h"
+ #include "base/metrics/histogram_macros.h"
+@@ -176,7 +176,7 @@ int64_t GetDefaultMemoryLimit() {
+ max_default_memory_limit /= 8;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath shmem_dir;
+ if (base::GetShmemTempDir(false, &shmem_dir)) {
+ int64_t shmem_dir_amount_of_free_space =
diff --git a/devel/electron7/files/patch-components_download_internal_common_base__file.cc b/devel/electron7/files/patch-components_download_internal_common_base__file.cc
new file mode 100644
index 000000000000..584185972369
--- /dev/null
+++ b/devel/electron7/files/patch-components_download_internal_common_base__file.cc
@@ -0,0 +1,20 @@
+--- components/download/internal/common/base_file.cc.orig 2019-12-12 12:39:30 UTC
++++ components/download/internal/common/base_file.cc
+@@ -593,7 +593,7 @@ GURL GetEffectiveAuthorityURL(const GURL& source_url,
+
+ } // namespace
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ DownloadInterruptReason BaseFile::AnnotateWithSourceInformationSync(
+ const std::string& client_guid,
+@@ -611,7 +611,7 @@ DownloadInterruptReason BaseFile::AnnotateWithSourceIn
+
+ return QuarantineFileResultToReason(result);
+ }
+-#else // !OS_WIN && !OS_MACOSX && !OS_LINUX
++#else // !OS_WIN && !OS_MACOSX && !OS_LINUX && !OS_BSD
+ DownloadInterruptReason BaseFile::AnnotateWithSourceInformationSync(
+ const std::string& client_guid,
+ const GURL& source_url,
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_event__constants.cc b/devel/electron7/files/patch-components_feature__engagement_public_event__constants.cc
new file mode 100644
index 000000000000..de423b3c49c0
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_event__constants.cc
@@ -0,0 +1,27 @@
+--- components/feature_engagement/public/event_constants.cc.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/event_constants.cc
+@@ -12,12 +12,12 @@ namespace feature_engagement {
+ namespace events {
+
+ #if defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) || \
+- defined(OS_LINUX) || defined(OS_CHROMEOS)
++ defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ const char kNewTabOpened[] = "new_tab_opened";
+ #endif // defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) ||
+- // defined(OS_LINUX) || defined(OS_CHROMEOS)
++ // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const char kReopenTabConditionsMet[] = "reopen_tab_conditions_met";
+ const char kTabReopened[] = "tab_reopened";
+@@ -39,7 +39,7 @@ const char kIncognitoWindowOpened[] = "incognito_windo
+ const char kIncognitoWindowSessionTimeMet[] =
+ "incognito_window_session_time_met";
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_IOS)
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_event__constants.h b/devel/electron7/files/patch-components_feature__engagement_public_event__constants.h
new file mode 100644
index 000000000000..a5f1d675fbcd
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_event__constants.h
@@ -0,0 +1,30 @@
+--- components/feature_engagement/public/event_constants.h.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/event_constants.h
+@@ -14,15 +14,15 @@ namespace events {
+
+ // Desktop and IOS.
+ #if defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) || \
+- defined(OS_LINUX) || defined(OS_CHROMEOS)
++ defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The user has explicitly opened a new tab via an entry point from inside of
+ // Chrome.
+ extern const char kNewTabOpened[];
+ #endif // defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) ||
+- // defined(OS_LINUX) || defined(OS_CHROMEOS)
++ // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // Desktop
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // All conditions for reopen closed tab IPH were met. Since this IPH needs to
+ // track user events (opening/closing tabs, focusing the omnibox, etc) on the
+@@ -75,7 +75,7 @@ extern const char kIncognitoWindowOpened[];
+ extern const char kIncognitoWindowSessionTimeMet[];
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_IOS)
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.cc b/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.cc
new file mode 100644
index 000000000000..238d43a92494
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.cc
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_constants.cc.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/feature_constants.cc
+@@ -14,7 +14,7 @@ const base::Feature kIPHDemoMode{"IPH_DemoMode",
+ const base::Feature kIPHDummyFeature{"IPH_Dummy",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const base::Feature kIPHFocusModeFeature{"IPH_FocusMode",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -31,7 +31,7 @@ const base::Feature kIPHIncognitoWindowFeature{
+ const base::Feature kIPHNewTabFeature{"IPH_NewTab",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_ANDROID)
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.h b/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.h
new file mode 100644
index 000000000000..01bf73341bec
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_feature__constants.h
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_constants.h.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/feature_constants.h
+@@ -17,7 +17,7 @@ extern const base::Feature kIPHDemoMode;
+ // A feature to ensure all arrays can contain at least one feature.
+ extern const base::Feature kIPHDummyFeature;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ extern const base::Feature kIPHFocusModeFeature;
+ extern const base::Feature kIPHGlobalMediaControlsFeature;
+@@ -28,7 +28,7 @@ extern const base::Feature kIPHBookmarkFeature;
+ extern const base::Feature kIPHIncognitoWindowFeature;
+ extern const base::Feature kIPHNewTabFeature;
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IPH)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ // All the features declared for Android below that are also used in Java,
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_feature__list.cc b/devel/electron7/files/patch-components_feature__engagement_public_feature__list.cc
new file mode 100644
index 000000000000..38bb25a58b28
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_feature__list.cc
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_list.cc.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/feature_list.cc
+@@ -57,7 +57,7 @@ const base::Feature* const kAllFeatures[] = {
+ &kIPHBadgedReadingListFeature,
+ &kIPHBadgedTranslateManualTriggerFeature,
+ #endif // defined(OS_IOS)
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ &kIPHFocusModeFeature,
+ &kIPHGlobalMediaControlsFeature,
+@@ -67,7 +67,7 @@ const base::Feature* const kAllFeatures[] = {
+ &kIPHIncognitoWindowFeature,
+ &kIPHNewTabFeature,
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+ };
+ } // namespace
diff --git a/devel/electron7/files/patch-components_feature__engagement_public_feature__list.h b/devel/electron7/files/patch-components_feature__engagement_public_feature__list.h
new file mode 100644
index 000000000000..a040a2102f6b
--- /dev/null
+++ b/devel/electron7/files/patch-components_feature__engagement_public_feature__list.h
@@ -0,0 +1,38 @@
+--- components/feature_engagement/public/feature_list.h.orig 2019-12-12 12:39:30 UTC
++++ components/feature_engagement/public/feature_list.h
+@@ -107,7 +107,7 @@ DEFINE_VARIATION_PARAM(kIPHBadgedTranslateManualTrigge
+ "IPH_BadgedTranslateManualTrigger");
+ #endif // defined(OS_IOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ DEFINE_VARIATION_PARAM(kIPHFocusModeFeature, "IPH_FocusMode");
+ DEFINE_VARIATION_PARAM(kIPHGlobalMediaControls, "IPH_GlobalMediaControls");
+@@ -117,7 +117,7 @@ DEFINE_VARIATION_PARAM(kIPHBookmarkFeature, "IPH_Bookm
+ DEFINE_VARIATION_PARAM(kIPHIncognitoWindowFeature, "IPH_IncognitoWindow");
+ DEFINE_VARIATION_PARAM(kIPHNewTabFeature, "IPH_NewTab");
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ } // namespace
+@@ -166,7 +166,7 @@ constexpr flags_ui::FeatureEntry::FeatureVariation
+ VARIATION_ENTRY(kIPHNewIncognitoTabTipFeature),
+ VARIATION_ENTRY(kIPHBadgedReadingListFeature),
+ VARIATION_ENTRY(kIPHBadgedTranslateManualTriggerFeature),
+-#elif defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#elif defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ VARIATION_ENTRY(kIPHFocusModeFeature),
+ VARIATION_ENTRY(kIPHGlobalMediaControls),
+@@ -176,7 +176,7 @@ constexpr flags_ui::FeatureEntry::FeatureVariation
+ VARIATION_ENTRY(kIPHIncognitoWindowFeature),
+ VARIATION_ENTRY(kIPHNewTabFeature),
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+ };
+
diff --git a/devel/electron7/files/patch-components_feedback_anonymizer__tool.cc b/devel/electron7/files/patch-components_feedback_anonymizer__tool.cc
new file mode 100644
index 000000000000..c8005bb81d6e
--- /dev/null
+++ b/devel/electron7/files/patch-components_feedback_anonymizer__tool.cc
@@ -0,0 +1,14 @@
+--- components/feedback/anonymizer_tool.cc.orig 2019-12-12 12:39:30 UTC
++++ components/feedback/anonymizer_tool.cc
+@@ -14,7 +14,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "content/public/browser/browser_thread.h"
+ #include "net/base/ip_address.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using re2::RE2;
+
diff --git a/devel/electron7/files/patch-components_flags__ui_flags__state.cc b/devel/electron7/files/patch-components_flags__ui_flags__state.cc
new file mode 100644
index 000000000000..eb2990f6af11
--- /dev/null
+++ b/devel/electron7/files/patch-components_flags__ui_flags__state.cc
@@ -0,0 +1,11 @@
+--- components/flags_ui/flags_state.cc.orig 2019-12-12 12:39:30 UTC
++++ components/flags_ui/flags_state.cc
+@@ -690,7 +690,7 @@ int FlagsState::GetCurrentPlatform() {
+ return kOsWin;
+ #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check.
+ return kOsCrOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_FREEBSD)
+ return kOsLinux;
+ #elif defined(OS_ANDROID)
+ return kOsAndroid;
diff --git a/devel/electron7/files/patch-components_gcm__driver_gcm__client.h b/devel/electron7/files/patch-components_gcm__driver_gcm__client.h
new file mode 100644
index 000000000000..a74edf485eae
--- /dev/null
+++ b/devel/electron7/files/patch-components_gcm__driver_gcm__client.h
@@ -0,0 +1,10 @@
+--- components/gcm_driver/gcm_client.h.orig 2019-12-12 12:39:30 UTC
++++ components/gcm_driver/gcm_client.h
+@@ -86,6 +86,7 @@ class GCMClient {
+ PLATFORM_CROS,
+ PLATFORM_IOS,
+ PLATFORM_ANDROID,
++ PLATFORM_BSD,
+ PLATFORM_UNSPECIFIED
+ };
+
diff --git a/devel/electron7/files/patch-components_gcm__driver_gcm__client__impl.cc b/devel/electron7/files/patch-components_gcm__driver_gcm__client__impl.cc
new file mode 100644
index 000000000000..e5aa6ab338fa
--- /dev/null
+++ b/devel/electron7/files/patch-components_gcm__driver_gcm__client__impl.cc
@@ -0,0 +1,12 @@
+--- components/gcm_driver/gcm_client_impl.cc.orig 2019-12-12 12:39:30 UTC
++++ components/gcm_driver/gcm_client_impl.cc
+@@ -134,6 +134,9 @@ void ToCheckinProtoVersion(
+ case GCMClient::PLATFORM_CROS:
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS;
+ break;
++ case GCMClient::PLATFORM_BSD:
++ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
++ break;
+ case GCMClient::PLATFORM_UNSPECIFIED:
+ // For unknown platform, return as LINUX.
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
diff --git a/devel/electron7/files/patch-components_keyed__service_core_dependency__graph__unittest.cc b/devel/electron7/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
new file mode 100644
index 000000000000..a79bf2414d3f
--- /dev/null
+++ b/devel/electron7/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
@@ -0,0 +1,14 @@
+--- components/keyed_service/core/dependency_graph_unittest.cc.orig 2019-12-12 12:39:30 UTC
++++ components/keyed_service/core/dependency_graph_unittest.cc
+@@ -9,7 +9,11 @@
+ #include "components/keyed_service/core/dependency_graph.h"
+ #include "components/keyed_service/core/dependency_node.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/devel/electron7/files/patch-components_metrics_BUILD.gn b/devel/electron7/files/patch-components_metrics_BUILD.gn
new file mode 100644
index 000000000000..6f178893ccb7
--- /dev/null
+++ b/devel/electron7/files/patch-components_metrics_BUILD.gn
@@ -0,0 +1,14 @@
+--- components/metrics/BUILD.gn.orig 2019-12-12 12:39:30 UTC
++++ components/metrics/BUILD.gn
+@@ -164,6 +164,11 @@ jumbo_static_library("metrics") {
+ if (is_fuchsia) {
+ sources += [ "drive_metrics_provider_fuchsia.cc" ]
+ }
++
++ if (is_bsd) {
++ sources -= [ "system_memory_stats_recorder_linux.cc" ]
++ }
++
+ }
+
+ # The component metrics provider is a separate target because it depends upon
diff --git a/devel/electron7/files/patch-components_metrics_drive__metrics__provider__linux.cc b/devel/electron7/files/patch-components_metrics_drive__metrics__provider__linux.cc
new file mode 100644
index 000000000000..14845ae91b56
--- /dev/null
+++ b/devel/electron7/files/patch-components_metrics_drive__metrics__provider__linux.cc
@@ -0,0 +1,16 @@
+--- components/metrics/drive_metrics_provider_linux.cc.orig 2019-12-12 12:39:30 UTC
++++ components/metrics/drive_metrics_provider_linux.cc
+@@ -4,7 +4,13 @@
+
+ #include "components/metrics/drive_metrics_provider.h"
+
++#if defined(OS_BSD)
++#include <sys/types.h>
++#define MAJOR(dev) major(dev)
++#define MINOR(dev) minor(dev)
++#else
+ #include <linux/kdev_t.h> // For MAJOR()/MINOR().
++#endif
+ #include <sys/stat.h>
+ #include <string>
+
diff --git a/devel/electron7/files/patch-components_metrics_metrics__log.cc b/devel/electron7/files/patch-components_metrics_metrics__log.cc
new file mode 100644
index 000000000000..718e4b94a788
--- /dev/null
+++ b/devel/electron7/files/patch-components_metrics_metrics__log.cc
@@ -0,0 +1,11 @@
+--- components/metrics/metrics_log.cc.orig 2019-12-12 12:39:30 UTC
++++ components/metrics/metrics_log.cc
+@@ -202,7 +202,7 @@ void MetricsLog::RecordCoreSystemProfile(
+ // OperatingSystemVersion refers to the ChromeOS release version.
+ #if defined(OS_CHROMEOS)
+ os->set_kernel_version(base::SysInfo::KernelVersion());
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux operating system version is copied over into kernel version to be
+ // consistent.
+ os->set_kernel_version(base::SysInfo::OperatingSystemVersion());
diff --git a/devel/electron7/files/patch-components_metrics_system__memory__stats__recorder__linux.cc b/devel/electron7/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
new file mode 100644
index 000000000000..d0d8ef1ef9be
--- /dev/null
+++ b/devel/electron7/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
@@ -0,0 +1,18 @@
+--- components/metrics/system_memory_stats_recorder_linux.cc.orig 2019-12-12 12:39:30 UTC
++++ components/metrics/system_memory_stats_recorder_linux.cc
+@@ -30,6 +30,7 @@ namespace metrics {
+ UMA_HISTOGRAM_LINEAR(name, sample, 2500, 50)
+
+ void RecordMemoryStats(RecordMemoryStatsType type) {
++#if !defined(OS_FREEBSD)
+ base::SystemMemoryInfoKB memory;
+ if (!base::GetSystemMemoryInfo(&memory))
+ return;
+@@ -81,6 +82,7 @@ void RecordMemoryStats(RecordMemoryStatsType type) {
+ break;
+ }
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace metrics
diff --git a/devel/electron7/files/patch-components_neterror_resources_neterror.js b/devel/electron7/files/patch-components_neterror_resources_neterror.js
new file mode 100644
index 000000000000..3e8ae614bd79
--- /dev/null
+++ b/devel/electron7/files/patch-components_neterror_resources_neterror.js
@@ -0,0 +1,11 @@
+--- components/neterror/resources/neterror.js.orig 2019-12-12 12:39:30 UTC
++++ components/neterror/resources/neterror.js
+@@ -160,7 +160,7 @@ function setUpCachedButton(buttonStrings) {
+ }
+
+ var primaryControlOnLeft = true;
+-// <if expr="is_macosx or is_ios or is_linux or is_android">
++// <if expr="is_macosx or is_ios or is_linux or is_android or is_bsd">
+ primaryControlOnLeft = false;
+ // </if>
+
diff --git a/devel/electron7/files/patch-components_network__session__configurator_browser_network__session__configurator.cc b/devel/electron7/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
new file mode 100644
index 000000000000..19ba955c8dd9
--- /dev/null
+++ b/devel/electron7/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
@@ -0,0 +1,11 @@
+--- components/network_session_configurator/browser/network_session_configurator.cc.orig 2019-12-12 12:39:30 UTC
++++ components/network_session_configurator/browser/network_session_configurator.cc
+@@ -763,7 +763,7 @@ net::URLRequestContextBuilder::HttpCacheParams::Type C
+ }
+ #endif // #if !defined(OS_ANDROID)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE;
+ #else
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE;
diff --git a/devel/electron7/files/patch-components_new__or__sad__tab__strings.grdp b/devel/electron7/files/patch-components_new__or__sad__tab__strings.grdp
new file mode 100644
index 000000000000..cf892388be18
--- /dev/null
+++ b/devel/electron7/files/patch-components_new__or__sad__tab__strings.grdp
@@ -0,0 +1,38 @@
+--- components/new_or_sad_tab_strings.grdp.orig 2019-12-12 12:39:30 UTC
++++ components/new_or_sad_tab_strings.grdp
+@@ -51,7 +51,7 @@
+ Open page in a new Incognito window (⇧⌘N)
+ </message>
+ </if>
+- <if expr="is_win or is_linux or chromeos">
++ <if expr="is_win or is_posix or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_INCOGNITO" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to open the web page in Chrome's Incognito mode.">
+ Open page in a new Incognito window (Ctrl-Shift-N)
+ </message>
+@@ -66,7 +66,7 @@
+ Close other tabs or apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_TABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other Chrome tabs or programs running on their computer.">
+ Close other tabs or programs
+ </message>
+@@ -76,7 +76,7 @@
+ Close other apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_NOTABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other programs running on their computer (Linux).">
+ Close other programs
+ </message>
+@@ -91,7 +91,7 @@
+ Restart Chromium
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_RESTART_DEVICE" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to restart their computer.">
+ Restart your computer
+ </message>
diff --git a/devel/electron7/files/patch-components_os__crypt_os__crypt.h b/devel/electron7/files/patch-components_os__crypt_os__crypt.h
new file mode 100644
index 000000000000..3676c4387896
--- /dev/null
+++ b/devel/electron7/files/patch-components_os__crypt_os__crypt.h
@@ -0,0 +1,48 @@
+--- components/os_crypt/os_crypt.h.orig 2019-12-12 12:39:30 UTC
++++ components/os_crypt/os_crypt.h
+@@ -15,9 +15,9 @@
+ #include "base/strings/string16.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ class KeyStorageLinux;
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ class PrefRegistrySimple;
+@@ -34,13 +34,13 @@ struct Config;
+ // true for Linux, if a password management tool is available.
+ class OSCrypt {
+ public:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Set the configuration of OSCrypt.
+ static COMPONENT_EXPORT(OS_CRYPT) void SetConfig(
+ std::unique_ptr<os_crypt::Config> config);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // On Linux returns true iff the real secret key (not hardcoded one) is
+ // available. On MacOS returns true if Keychain is available (for mock
+ // Keychain it returns true if not using locked Keychain, false if using
+@@ -112,7 +112,7 @@ class OSCrypt {
+ DISALLOW_IMPLICIT_CONSTRUCTORS(OSCrypt);
+ };
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For unit testing purposes, inject methods to be used.
+ // |get_key_storage_mock| provides the desired |KeyStorage| implementation.
+ // If the provider returns |nullptr|, a hardcoded password will be used.
+@@ -127,6 +127,6 @@ void UseMockKeyStorageForTesting(
+ // Clears any caching and most lazy initialisations performed by the production
+ // code. Should be used after any test which required a password.
+ COMPONENT_EXPORT(OS_CRYPT) void ClearCacheForTesting();
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #endif // COMPONENTS_OS_CRYPT_OS_CRYPT_H_
diff --git a/devel/electron7/files/patch-components_os__crypt_os__crypt__unittest.cc b/devel/electron7/files/patch-components_os__crypt_os__crypt__unittest.cc
new file mode 100644
index 000000000000..ca0db9a26970
--- /dev/null
+++ b/devel/electron7/files/patch-components_os__crypt_os__crypt__unittest.cc
@@ -0,0 +1,11 @@
+--- components/os_crypt/os_crypt_unittest.cc.orig 2019-12-12 12:39:30 UTC
++++ components/os_crypt/os_crypt_unittest.cc
+@@ -18,7 +18,7 @@
+ #include "components/os_crypt/os_crypt_mocker.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "components/os_crypt/os_crypt_mocker_linux.h"
+ #endif
+
diff --git a/devel/electron7/files/patch-components_plugins_renderer_plugin__placeholder.cc b/devel/electron7/files/patch-components_plugins_renderer_plugin__placeholder.cc
new file mode 100644
index 000000000000..482f1c1f03c9
--- /dev/null
+++ b/devel/electron7/files/patch-components_plugins_renderer_plugin__placeholder.cc
@@ -0,0 +1,14 @@
+--- components/plugins/renderer/plugin_placeholder.cc.orig 2019-12-12 12:39:31 UTC
++++ components/plugins/renderer/plugin_placeholder.cc
+@@ -17,7 +17,11 @@
+ #include "third_party/blink/public/web/web_plugin_container.h"
+ #include "third_party/blink/public/web/web_script_source.h"
+ #include "third_party/blink/public/web/web_serialized_script_value.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace plugins {
+
diff --git a/devel/electron7/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc b/devel/electron7/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
new file mode 100644
index 000000000000..ec4d4b22a8b4
--- /dev/null
+++ b/devel/electron7/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
@@ -0,0 +1,73 @@
+--- components/policy/core/common/cloud/cloud_policy_util.cc.orig 2019-12-12 12:39:31 UTC
++++ components/policy/core/common/cloud/cloud_policy_util.cc
+@@ -16,7 +16,7 @@
+ #include <wincred.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include <pwd.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -28,7 +28,7 @@
+ #include <sys/sysctl.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include <limits.h> // For HOST_NAME_MAX
+ #endif
+
+@@ -52,7 +52,7 @@
+ #include "base/system/sys_info.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/system/sys_info.h"
+ #endif
+
+@@ -61,11 +61,24 @@ namespace policy {
+ namespace em = enterprise_management;
+
+ std::string GetMachineName() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
+ return hostname;
+ return std::string();
++#elif defined(OS_BSD)
++ long host_name_max = sysconf(_SC_HOST_NAME_MAX);
++ if (host_name_max != -1) {
++ char *hostname = new char[host_name_max + 1]();
++ std::string hostname_r;
++
++ if (gethostname(hostname, host_name_max) == 0)
++ hostname_r = hostname;
++
++ delete[] hostname;
++ return hostname_r;
++ }
++ return std::string();
+ #elif defined(OS_MACOSX)
+ // Do not use NSHost currentHost, as it's very slow. http://crbug.com/138570
+ SCDynamicStoreContext context = {0, NULL, NULL, NULL};
+@@ -111,7 +124,7 @@ std::string GetMachineName() {
+ }
+
+ std::string GetOSVersion() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ return base::SysInfo::OperatingSystemVersion();
+ #elif defined(OS_WIN)
+ base::win::OSInfo::VersionNumber version_number =
+@@ -134,7 +147,7 @@ std::string GetOSArchitecture() {
+ }
+
+ std::string GetOSUsername() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ struct passwd* creds = getpwuid(getuid());
+ if (!creds || !creds->pw_name)
+ return std::string();
diff --git a/devel/electron7/files/patch-components_policy_core_common_schema.cc b/devel/electron7/files/patch-components_policy_core_common_schema.cc
new file mode 100644
index 000000000000..c01d57d27756
--- /dev/null
+++ b/devel/electron7/files/patch-components_policy_core_common_schema.cc
@@ -0,0 +1,14 @@
+--- components/policy/core/common/schema.cc.orig 2019-12-12 12:39:31 UTC
++++ components/policy/core/common/schema.cc
+@@ -23,7 +23,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "components/policy/core/common/json_schema_constants.h"
+ #include "components/policy/core/common/schema_internal.h"
++#if defined(OS_FREEBSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace schema = json_schema_constants;
+
diff --git a/devel/electron7/files/patch-components_policy_resources_policy__templates.json b/devel/electron7/files/patch-components_policy_resources_policy__templates.json
new file mode 100644
index 000000000000..1da7f6c419c3
--- /dev/null
+++ b/devel/electron7/files/patch-components_policy_resources_policy__templates.json
@@ -0,0 +1,83 @@
+--- components/policy/resources/policy_templates.json.orig 2019-12-12 12:39:31 UTC
++++ components/policy/resources/policy_templates.json
+@@ -1038,7 +1038,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1068,7 +1068,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1095,7 +1095,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
++ 'supported_on': ['chrome.*:58-', 'chrome_os:58-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1821,7 +1821,7 @@
+ 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
++ 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-', 'chrome.freebsd:25-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -3536,7 +3536,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.linux:9-'],
++ 'supported_on': ['chrome.linux:9-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'dynamic_refresh': False,
+ 'per_profile': False,
+@@ -3590,7 +3590,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
++ 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-', 'chrome.freebsd:63-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -6919,7 +6919,7 @@
+ 'owners': ['file://src/net/cert/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
++ 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-', 'chrome.freebsd:30-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -8119,7 +8119,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
++ 'supported_on': ['chrome.win:19-', 'chrome.linux:19-', 'chrome.freebsd:19-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -8713,7 +8713,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
++ 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-', 'chrome.freebsd:31-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': True,
diff --git a/devel/electron7/files/patch-components_policy_tools_generate__policy__source.py b/devel/electron7/files/patch-components_policy_tools_generate__policy__source.py
new file mode 100644
index 000000000000..a6634ab31491
--- /dev/null
+++ b/devel/electron7/files/patch-components_policy_tools_generate__policy__source.py
@@ -0,0 +1,19 @@
+--- components/policy/tools/generate_policy_source.py.orig 2019-12-12 12:39:31 UTC
++++ components/policy/tools/generate_policy_source.py
+@@ -92,6 +92,7 @@ class PolicyDetails:
+ 'chrome.linux',
+ 'chrome.mac',
+ 'chrome.fuchsia',
++ 'chrome.freebsd',
+ 'chrome.*',
+ 'chrome.win7',
+ ]:
+@@ -114,7 +115,7 @@ class PolicyDetails:
+ if platform.startswith('chrome.'):
+ platform_sub = platform[7:]
+ if platform_sub == '*':
+- self.platforms.extend(['win', 'mac', 'linux', 'fuchsia'])
++ self.platforms.extend(['win', 'mac', 'linux', 'fuchsia', 'freebsd'])
+ elif platform_sub == 'win7':
+ self.platforms.append('win')
+ else:
diff --git a/devel/electron7/files/patch-components_previews_core_previews__features.cc b/devel/electron7/files/patch-components_previews_core_previews__features.cc
new file mode 100644
index 000000000000..186eb8d66f25
--- /dev/null
+++ b/devel/electron7/files/patch-components_previews_core_previews__features.cc
@@ -0,0 +1,18 @@
+--- components/previews/core/previews_features.cc.orig 2019-12-12 12:39:32 UTC
++++ components/previews/core/previews_features.cc
+@@ -14,12 +14,12 @@ namespace features {
+ // are enabled are controlled by other features.
+ const base::Feature kPreviews {
+ "Previews",
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Previews allowed for Android (but also allow on Linux for dev/debug).
+ base::FEATURE_ENABLED_BY_DEFAULT
+-#else // !defined(OS_ANDROID) || defined(OS_LINUX)
++#else // !defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Enables the Offline previews on android slow connections.
diff --git a/devel/electron7/files/patch-components_storage__monitor_BUILD.gn b/devel/electron7/files/patch-components_storage__monitor_BUILD.gn
new file mode 100644
index 000000000000..02ab3798f141
--- /dev/null
+++ b/devel/electron7/files/patch-components_storage__monitor_BUILD.gn
@@ -0,0 +1,16 @@
+--- components/storage_monitor/BUILD.gn.orig 2019-12-12 12:39:33 UTC
++++ components/storage_monitor/BUILD.gn
+@@ -81,6 +81,13 @@ static_library("storage_monitor") {
+ }
+ }
+
++ if (is_bsd) {
++ sources += [
++ "storage_monitor_freebsd.cc",
++ "storage_monitor_freebsd.h",
++ ]
++ }
++
+ if (use_udev) {
+ sources += [
+ "udev_util_linux.cc",
diff --git a/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.cc b/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.cc
new file mode 100644
index 000000000000..a2d4f2c93777
--- /dev/null
+++ b/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.cc
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.cc.orig 2019-12-12 12:39:33 UTC
++++ components/storage_monitor/removable_device_constants.cc
+@@ -10,7 +10,7 @@ namespace storage_monitor {
+ const char kFSUniqueIdPrefix[] = "UUID:";
+ const char kVendorModelSerialPrefix[] = "VendorModelSerial:";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kVendorModelVolumeStoragePrefix[] = "VendorModelVolumeStorage:";
+ #endif
+
diff --git a/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.h b/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.h
new file mode 100644
index 000000000000..ea4659b12bd6
--- /dev/null
+++ b/devel/electron7/files/patch-components_storage__monitor_removable__device__constants.h
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.h.orig 2019-12-12 12:39:33 UTC
++++ components/storage_monitor/removable_device_constants.h
+@@ -15,7 +15,7 @@ namespace storage_monitor {
+ extern const char kFSUniqueIdPrefix[];
+ extern const char kVendorModelSerialPrefix[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kVendorModelVolumeStoragePrefix[];
+ #endif
+
diff --git a/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.cc b/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
new file mode 100644
index 000000000000..d2cc7fb1533d
--- /dev/null
+++ b/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
@@ -0,0 +1,57 @@
+--- components/storage_monitor/storage_monitor_freebsd.cc.orig 2019-12-16 13:33:55 UTC
++++ components/storage_monitor/storage_monitor_freebsd.cc
+@@ -0,0 +1,54 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD implementation.
++
++#include "components/storage_monitor/storage_monitor_freebsd.h"
++
++#include <stdio.h>
++
++#include <list>
++
++#include "base/bind.h"
++#include "base/metrics/histogram.h"
++#include "base/process/kill.h"
++#include "base/process/launch.h"
++#include "base/stl_util.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/utf_string_conversions.h"
++#include "components/storage_monitor/media_storage_util.h"
++#include "components/storage_monitor/removable_device_constants.h"
++#include "components/storage_monitor/storage_info.h"
++
++using content::BrowserThread;
++
++namespace storage_monitor {
++
++namespace {
++
++} // namespace
++
++StorageMonitorFreeBSD::StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++StorageMonitorFreeBSD::~StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++void StorageMonitorFreeBSD::Init() {
++}
++
++bool StorageMonitorFreeBSD::GetStorageInfoForPath(
++ const base::FilePath& path,
++ StorageInfo* device_info) const {
++ return false; // TODO
++}
++
++StorageMonitor* StorageMonitor::CreateInternal() {
++ return new StorageMonitorFreeBSD();
++}
++
++} // namespace storage_monitor
diff --git a/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.h b/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.h
new file mode 100644
index 000000000000..7f01f73ea80d
--- /dev/null
+++ b/devel/electron7/files/patch-components_storage__monitor_storage__monitor__freebsd.h
@@ -0,0 +1,48 @@
+--- components/storage_monitor/storage_monitor_freebsd.h.orig 2019-12-16 13:33:55 UTC
++++ components/storage_monitor/storage_monitor_freebsd.h
+@@ -0,0 +1,45 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD processes mount point change events, notifies listeners
++// about the addition and deletion of media devices, and answers queries about
++// mounted devices.
++// StorageMonitorFreeBSD lives on the UI thread, and uses ???
++// the FILE thread to get mount point change events.
++
++#ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++#define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++
++#include <map>
++#include <string>
++
++#include "base/compiler_specific.h"
++#include "base/files/file_path.h"
++#include "base/files/file_path_watcher.h"
++#include "base/memory/weak_ptr.h"
++#include "components/storage_monitor/storage_monitor.h"
++#include "content/public/browser/browser_thread.h"
++
++namespace storage_monitor {
++
++class StorageMonitorFreeBSD : public StorageMonitor {
++ public:
++ // Should only be called by browser start up code.
++ // Use StorageMonitor::GetInstance() instead.
++ explicit StorageMonitorFreeBSD();
++ virtual ~StorageMonitorFreeBSD();
++
++ // Must be called for StorageMonitorFreeBSD to work.
++ virtual void Init() override;
++ private:
++ // StorageMonitor implementation.
++ virtual bool GetStorageInfoForPath(const base::FilePath& path,
++ StorageInfo* device_info) const override;
++
++ DISALLOW_COPY_AND_ASSIGN(StorageMonitorFreeBSD);
++};
++
++} // namespace storage_monitor
++
++#endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
diff --git a/devel/electron7/files/patch-components_sync__device__info_local__device__info__util__linux.cc b/devel/electron7/files/patch-components_sync__device__info_local__device__info__util__linux.cc
new file mode 100644
index 000000000000..58cc14eb2b15
--- /dev/null
+++ b/devel/electron7/files/patch-components_sync__device__info_local__device__info__util__linux.cc
@@ -0,0 +1,26 @@
+--- components/sync_device_info/local_device_info_util_linux.cc.orig 2019-12-12 12:39:36 UTC
++++ components/sync_device_info/local_device_info_util_linux.cc
+@@ -30,6 +30,23 @@ std::string GetSessionNameInternal() {
+ break;
+ }
+ return "Chromebook";
++#elif defined(OS_BSD)
++ long len = sysconf(_SC_HOST_NAME_MAX);
++
++ if (len == -1)
++ return "FreeBSD";
++
++ char *hostname = new (std::nothrow) char[len]();
++
++ if ((hostname == nullptr) || (gethostname(hostname, len) == -1)) {
++ delete[](hostname);
++ return "FreeBSD";
++ }
++
++ std::string res{hostname};
++
++ delete[](hostname);
++ return res;
+ #else
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
diff --git a/devel/electron7/files/patch-components_update__client_update__query__params.cc b/devel/electron7/files/patch-components_update__client_update__query__params.cc
new file mode 100644
index 000000000000..aa0252b0b7e3
--- /dev/null
+++ b/devel/electron7/files/patch-components_update__client_update__query__params.cc
@@ -0,0 +1,11 @@
+--- components/update_client/update_query_params.cc.orig 2019-12-12 12:39:37 UTC
++++ components/update_client/update_query_params.cc
+@@ -39,6 +39,8 @@ const char kOs[] =
+ "fuchsia";
+ #elif defined(OS_OPENBSD)
+ "openbsd";
++#elif defined(OS_FREEBSD)
++ "freebsd";
+ #else
+ #error "unknown os"
+ #endif
diff --git a/devel/electron7/files/patch-components_url__matcher_regex__set__matcher.cc b/devel/electron7/files/patch-components_url__matcher_regex__set__matcher.cc
new file mode 100644
index 000000000000..93c2da44ee5b
--- /dev/null
+++ b/devel/electron7/files/patch-components_url__matcher_regex__set__matcher.cc
@@ -0,0 +1,16 @@
+--- components/url_matcher/regex_set_matcher.cc.orig 2019-12-12 12:39:37 UTC
++++ components/url_matcher/regex_set_matcher.cc
+@@ -11,8 +11,13 @@
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+ #include "components/url_matcher/substring_set_matcher.h"
++#if defined(OS_BSD)
++#include <re2/filtered_re2.h>
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/filtered_re2.h"
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron7/files/patch-components_url__matcher_url__matcher__factory.cc b/devel/electron7/files/patch-components_url__matcher_url__matcher__factory.cc
new file mode 100644
index 000000000000..8142955ef14c
--- /dev/null
+++ b/devel/electron7/files/patch-components_url__matcher_url__matcher__factory.cc
@@ -0,0 +1,14 @@
+--- components/url_matcher/url_matcher_factory.cc.orig 2019-12-12 12:39:37 UTC
++++ components/url_matcher/url_matcher_factory.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "components/url_matcher/url_matcher_constants.h"
+ #include "components/url_matcher/url_matcher_helpers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/devel/electron7/files/patch-components_webcrypto_algorithms_test__helpers.cc b/devel/electron7/files/patch-components_webcrypto_algorithms_test__helpers.cc
new file mode 100644
index 000000000000..13d5ef836a77
--- /dev/null
+++ b/devel/electron7/files/patch-components_webcrypto_algorithms_test__helpers.cc
@@ -0,0 +1,14 @@
+--- components/webcrypto/algorithms/test_helpers.cc.orig 2019-12-12 12:39:37 UTC
++++ components/webcrypto/algorithms/test_helpers.cc
+@@ -25,7 +25,11 @@
+ #include "components/webcrypto/status.h"
+ #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
+ #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace webcrypto {
+
diff --git a/devel/electron7/files/patch-content_app_content__main__runner__impl.cc b/devel/electron7/files/patch-content_app_content__main__runner__impl.cc
new file mode 100644
index 000000000000..90354417ed7c
--- /dev/null
+++ b/devel/electron7/files/patch-content_app_content__main__runner__impl.cc
@@ -0,0 +1,73 @@
+--- content/app/content_main_runner_impl.cc.orig 2019-12-12 12:39:37 UTC
++++ content/app/content_main_runner_impl.cc
+@@ -102,17 +102,17 @@
+ #include "base/posix/global_descriptors.h"
+ #include "content/public/common/content_descriptors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_fork_delegate_linux.h"
+ #endif
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "sandbox/linux/services/libc_interceptor.h"
+ #include "services/service_manager/zygote/zygote_main.h"
+ #endif
+
+ #endif // OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/native_library.h"
+ #include "base/rand_util.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
+@@ -133,7 +133,7 @@
+ #include "content/public/common/content_client.h"
+ #endif
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || defined(OS_BSD)
+
+ #if !defined(CHROME_MULTIPLE_DLL_BROWSER)
+ #include "content/child/field_trial.h"
+@@ -318,7 +318,7 @@ void InitializeZygoteSandboxForBrowserProcess(
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ // Loads the (native) libraries but does not initialize them (i.e., does not
+@@ -415,7 +415,7 @@ void PreSandboxInit() {
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ #if !defined(CHROME_MULTIPLE_DLL_CHILD)
+ void InitializeBrowserClientProcessImpl() {
+@@ -482,7 +482,7 @@ int RunZygote(ContentMainDelegate* delegate) {
+ delegate->ZygoteStarting(&zygote_fork_delegates);
+ media::InitializeMediaLibrary();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PreSandboxInit();
+ #endif
+
+@@ -647,11 +647,11 @@ int ContentMainRunnerImpl::Initialize(const ContentMai
+ base::GlobalDescriptors::kBaseDescriptor);
+ #endif // !OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ g_fds->Set(service_manager::kCrashDumpSignal,
+ service_manager::kCrashDumpSignal +
+ base::GlobalDescriptors::kBaseDescriptor);
+-#endif // OS_LINUX || OS_OPENBSD
++#endif // OS_LINUX
+
+ #endif // !OS_WIN
+
diff --git a/devel/electron7/files/patch-content_browser_browser__main__loop.cc b/devel/electron7/files/patch-content_browser_browser__main__loop.cc
new file mode 100644
index 000000000000..248d6d3ea380
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_browser__main__loop.cc
@@ -0,0 +1,46 @@
+--- content/browser/browser_main_loop.cc.orig 2019-12-16 13:32:58 UTC
++++ content/browser/browser_main_loop.cc
+@@ -244,6 +244,13 @@
+ #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h"
+ #endif
+
++#if defined(OS_BSD)
++#include "content/browser/sandbox_host_linux.h"
++#include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#include "content/public/common/common_sandbox_support_linux.h"
++#include "services/service_manager/sandbox/sandbox.h"
++#endif
++
+ // One of the linux specific headers defines this as a macro.
+ #ifdef DestroyAll
+ #undef DestroyAll
+@@ -573,6 +580,11 @@ int BrowserMainLoop::EarlyInitialization() {
+ // by now since a thread to start the ServiceManager has been created
+ // before the browser main loop starts.
+ DCHECK(SandboxHostLinux::GetInstance()->IsInitialized());
++#elif defined(OS_BSD)
++ SandboxHostLinux::GetInstance()->Init();
++ base::FileHandleMappingVector fds_to_map;
++ const int sfd = SandboxHostLinux::GetInstance()->GetChildSocket();
++ fds_to_map.push_back(std::make_pair(sfd, service_manager::GetSandboxFD()));
+ #endif
+
+ #if defined(USE_X11)
+@@ -618,7 +630,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ }
+ #endif // !defined(OS_MACOSX)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // We use quite a few file descriptors for our IPC as well as disk the disk
+ // cache,and the default limit on the Mac is low (256), so bump it up.
+@@ -628,7 +640,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ // users can easily hit this limit with many open tabs. Bump up the limit to
+ // an arbitrarily high number. See https://crbug.com/539567
+ base::IncreaseFdLimitTo(8192);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) ||
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) ||
+ // defined(OS_ANDROID)
+
+ #if defined(OS_WIN)
diff --git a/devel/electron7/files/patch-content_browser_child__process__launcher__helper__linux.cc b/devel/electron7/files/patch-content_browser_child__process__launcher__helper__linux.cc
new file mode 100644
index 000000000000..411e688c2fb7
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_child__process__launcher__helper__linux.cc
@@ -0,0 +1,92 @@
+--- content/browser/child_process_launcher_helper_linux.cc.orig 2019-12-16 13:32:59 UTC
++++ content/browser/child_process_launcher_helper_linux.cc
+@@ -17,7 +17,9 @@
+ #include "content/public/common/sandboxed_process_launcher_delegate.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#if !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_handle.h"
++#endif
+ #include "services/service_manager/zygote/host/zygote_communication_linux.h"
+ #include "services/service_manager/zygote/host/zygote_host_impl_linux.h"
+
+@@ -55,6 +57,7 @@ bool ChildProcessLauncherHelper::BeforeLaunchOnLaunche
+ options->fds_to_remap.push_back(
+ std::make_pair(sandbox_fd, service_manager::GetSandboxFD()));
+
++#if !defined(OS_BSD)
+ // (For Electron), if we're launching without zygote, that means we're
+ // launching an unsandboxed process (since all sandboxed processes are
+ // forked from the zygote). Relax the allow_new_privs option to permit
+@@ -66,6 +69,7 @@ bool ChildProcessLauncherHelper::BeforeLaunchOnLaunche
+ if (!zygote_handle) {
+ options->allow_new_privs = true;
+ }
++#endif
+ }
+
+ options->environment = delegate_->GetEnvironment();
+@@ -81,6 +85,7 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ int* launch_result) {
+ *is_synchronous_launch = true;
+
++#if !defined(OS_BSD)
+ service_manager::ZygoteHandle zygote_handle =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoZygote)
+ ? nullptr
+@@ -94,7 +99,6 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ GetProcessType());
+ *launch_result = LAUNCH_RESULT_SUCCESS;
+
+-#if !defined(OS_OPENBSD)
+ if (handle) {
+ // This is just a starting score for a renderer or extension (the
+ // only types of processes that will be started this way). It will
+@@ -105,13 +109,13 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ service_manager::ZygoteHostImpl::GetInstance()->AdjustRendererOOMScore(
+ handle, kLowestRendererOomScore);
+ }
+-#endif
+
+ Process process;
+ process.process = base::Process(handle);
+ process.zygote = zygote_handle;
+ return process;
+ }
++#endif
+
+ Process process;
+ process.process = base::LaunchProcess(*command_line(), options);
+@@ -129,10 +133,14 @@ ChildProcessTerminationInfo ChildProcessLauncherHelper
+ const ChildProcessLauncherHelper::Process& process,
+ bool known_dead) {
+ ChildProcessTerminationInfo info;
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ info.status = process.zygote->GetTerminationStatus(
+ process.process.Handle(), known_dead, &info.exit_code);
+ } else if (known_dead) {
++#else
++ if (known_dead) {
++#endif
+ info.status = base::GetKnownDeadTerminationStatus(process.process.Handle(),
+ &info.exit_code);
+ } else {
+@@ -156,13 +164,17 @@ void ChildProcessLauncherHelper::ForceNormalProcessTer
+ DCHECK(CurrentlyOnProcessLauncherTaskRunner());
+ process.process.Terminate(service_manager::RESULT_CODE_NORMAL_EXIT, false);
+ // On POSIX, we must additionally reap the child.
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ // If the renderer was created via a zygote, we have to proxy the reaping
+ // through the zygote process.
+ process.zygote->EnsureProcessTerminated(process.process.Handle());
+ } else {
++#endif
+ base::EnsureProcessTerminated(std::move(process.process));
++#if !defined(OS_BSD)
+ }
++#endif
+ }
+
+ void ChildProcessLauncherHelper::SetProcessPriorityOnLauncherThread(
diff --git a/devel/electron7/files/patch-content_browser_devtools_protocol_system__info__handler.cc b/devel/electron7/files/patch-content_browser_devtools_protocol_system__info__handler.cc
new file mode 100644
index 000000000000..b0324c4cadb7
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_devtools_protocol_system__info__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/devtools/protocol/system_info_handler.cc.orig 2019-12-12 12:39:38 UTC
++++ content/browser/devtools/protocol/system_info_handler.cc
+@@ -48,7 +48,7 @@ std::unique_ptr<SystemInfo::Size> GfxSizeToSystemInfoS
+ // Give the GPU process a few seconds to provide GPU info.
+ // Linux Debug builds need more time -- see Issue 796437.
+ // Windows builds need more time -- see Issue 873112.
+-#if (defined(OS_LINUX) && !defined(NDEBUG)) || defined(OS_WIN)
++#if ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(NDEBUG)) || defined(OS_WIN)
+ const int kGPUInfoWatchdogTimeoutMs = 20000;
+ #else
+ const int kGPUInfoWatchdogTimeoutMs = 5000;
diff --git a/devel/electron7/files/patch-content_browser_gpu_gpu__process__host.cc b/devel/electron7/files/patch-content_browser_gpu_gpu__process__host.cc
new file mode 100644
index 000000000000..04a2ce8aea5e
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_gpu_gpu__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/gpu/gpu_process_host.cc.orig 2019-12-16 13:32:59 UTC
++++ content/browser/gpu/gpu_process_host.cc
+@@ -1095,7 +1095,7 @@ bool GpuProcessHost::LaunchGpuProcess() {
+ std::unique_ptr<base::CommandLine> cmd_line =
+ std::make_unique<base::CommandLine>(base::CommandLine::NO_PROGRAM);
+ #else
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int child_flags = gpu_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-content_browser_media_media__internals.cc b/devel/electron7/files/patch-content_browser_media_media__internals.cc
new file mode 100644
index 000000000000..eace02929769
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_media_media__internals.cc
@@ -0,0 +1,11 @@
+--- content/browser/media/media_internals.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/media/media_internals.cc
+@@ -505,7 +505,7 @@ void MediaInternals::UpdateVideoCaptureDeviceCapabilit
+ device_dict->SetString("id", descriptor.device_id);
+ device_dict->SetString("name", descriptor.GetNameAndModel());
+ device_dict->Set("formats", std::move(format_list));
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ device_dict->SetString("captureApi", descriptor.GetCaptureApiTypeString());
+ #endif
diff --git a/devel/electron7/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc b/devel/electron7/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
new file mode 100644
index 000000000000..60b68c29170b
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
@@ -0,0 +1,27 @@
+--- content/browser/memory/swap_metrics_driver_impl_linux.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/memory/swap_metrics_driver_impl_linux.cc
+@@ -43,6 +43,7 @@ SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinu
+
+ SwapMetricsDriver::SwapMetricsUpdateResult
+ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
++#if !defined(OS_BSD)
+ base::VmStatInfo vmstat;
+ if (!base::GetVmStatInfo(&vmstat)) {
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
+@@ -55,12 +56,15 @@ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base
+
+ if (interval.is_zero())
+ return SwapMetricsDriver::SwapMetricsUpdateResult::
+- kSwapMetricsUpdateSuccess;
++ kSwapMetricsUpdateSuccess;
+
+ delegate_->OnSwapInCount(in_counts, interval);
+ delegate_->OnSwapOutCount(out_counts, interval);
+
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateSuccess;
++#else
++ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
++#endif
+ }
+
+ } // namespace content
diff --git a/devel/electron7/files/patch-content_browser_ppapi__plugin__process__host.cc b/devel/electron7/files/patch-content_browser_ppapi__plugin__process__host.cc
new file mode 100644
index 000000000000..c44be5bc06ad
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_ppapi__plugin__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/ppapi_plugin_process_host.cc.orig 2019-12-16 13:32:59 UTC
++++ content/browser/ppapi_plugin_process_host.cc
+@@ -373,7 +373,7 @@ bool PpapiPluginProcessHost::Init(const PepperPluginIn
+ base::CommandLine::StringType plugin_launcher =
+ browser_command_line.GetSwitchValueNative(switches::kPpapiPluginLauncher);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = plugin_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF :
+ ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc b/devel/electron7/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
new file mode 100644
index 000000000000..8b2b3313d8d1
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/input/input_device_change_observer.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/input/input_device_change_observer.cc
+@@ -10,7 +10,7 @@
+
+ #if defined(OS_WIN)
+ #include "ui/events/devices/input_device_observer_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/devices/device_data_manager.h"
+ #elif defined(OS_ANDROID)
+ #include "ui/events/devices/input_device_observer_android.h"
+@@ -22,7 +22,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ render_view_host_impl_ = rvhi;
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::DeviceDataManager::GetInstance()->AddObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
+@@ -32,7 +32,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ InputDeviceChangeObserver::~InputDeviceChangeObserver() {
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc b/devel/electron7/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
new file mode 100644
index 000000000000..90fa05fce1d8
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
@@ -0,0 +1,20 @@
+--- content/browser/renderer_host/pepper/pepper_file_io_host.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/pepper/pepper_file_io_host.cc
+@@ -433,7 +433,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
+ base::File::Error error_code) {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Quarantining a file before its contents are available is only supported on
+ // Windows and Linux.
+ if (!FileOpenForWrite(open_flags_) || error_code != base::File::FILE_OK) {
+@@ -453,7 +453,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ #endif
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ void PepperFileIOHost::OnLocalFileQuarantined(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.cc b/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.cc
new file mode 100644
index 000000000000..9fdc4c296de7
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_message_filter.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/render_message_filter.cc
+@@ -70,7 +70,7 @@
+ #if defined(OS_MACOSX)
+ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/threading/platform_thread.h"
+ #endif
+@@ -148,7 +148,7 @@ void RenderMessageFilter::CreateFullscreenWidget(
+ std::move(callback).Run(route_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriorityOnFileThread(
+ base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority) {
+@@ -169,7 +169,7 @@ void RenderMessageFilter::SetThreadPriorityOnFileThrea
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) {
+ constexpr base::TaskTraits kTraits = {
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.h b/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.h
new file mode 100644
index 000000000000..be729662da75
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__message__filter.h
@@ -0,0 +1,19 @@
+--- content/browser/renderer_host/render_message_filter.h.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/render_message_filter.h
+@@ -86,14 +86,14 @@ class CONTENT_EXPORT RenderMessageFilter
+ mojom::WidgetPtr widget,
+ CreateFullscreenWidgetCallback callback) override;
+ void HasGpuProcess(HasGpuProcessCallback callback) override;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) override;
+ #endif
+
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority);
+ #endif
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.cc b/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.cc
new file mode 100644
index 000000000000..441d04ad5ae0
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.cc
@@ -0,0 +1,47 @@
+--- content/browser/renderer_host/render_process_host_impl.cc.orig 2019-12-16 13:32:59 UTC
++++ content/browser/renderer_host/render_process_host_impl.cc
+@@ -231,7 +231,7 @@
+ #include "content/browser/gpu/gpu_data_manager_impl.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+ #include <sys/time.h>
+
+@@ -1212,7 +1212,7 @@ static constexpr size_t kUnknownPlatformProcessLimit =
+ // to indicate failure and std::numeric_limits<size_t>::max() to indicate
+ // unlimited.
+ size_t GetPlatformProcessLimit() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct rlimit limit;
+ if (getrlimit(RLIMIT_NPROC, &limit) != 0)
+ return kUnknownPlatformProcessLimit;
+@@ -1223,7 +1223,7 @@ size_t GetPlatformProcessLimit() {
+ #else
+ // TODO(https://crbug.com/104689): Implement on other platforms.
+ return kUnknownPlatformProcessLimit;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+@@ -1257,7 +1257,7 @@ class RenderProcessHostImpl::IOThreadHostImpl
+
+ // mojom::ChildProcessHost implementation:
+ void BindHostReceiver(mojo::GenericPendingReceiver receiver) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (auto font_receiver = receiver.As<font_service::mojom::FontService>()) {
+ ConnectToFontService(std::move(font_receiver));
+ return;
+@@ -1611,7 +1611,7 @@ bool RenderProcessHostImpl::Init() {
+ renderer_prefix =
+ browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = renderer_prefix.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.h b/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.h
new file mode 100644
index 000000000000..1c7a35b5b8e7
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__process__host__impl.h
@@ -0,0 +1,15 @@
+--- content/browser/renderer_host/render_process_host_impl.h.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/render_process_host_impl.h
+@@ -423,10 +423,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
+ is_for_guests_only_ = is_for_guests_only;
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Launch the zygote early in the browser startup.
+ static void EarlyZygoteLaunch();
+-#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ RendererAudioOutputStreamFactoryContext*
+ GetRendererAudioOutputStreamFactoryContext() override;
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__view__host__impl.cc b/devel/electron7/files/patch-content_browser_renderer__host_render__view__host__impl.cc
new file mode 100644
index 000000000000..78df621a3553
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__view__host__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_view_host_impl.cc.orig 2019-12-16 13:32:59 UTC
++++ content/browser/renderer_host/render_view_host_impl.cc
+@@ -162,7 +162,7 @@ void GetPlatformSpecificPrefs(blink::mojom::RendererPr
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CYVSCROLL);
+ prefs->arrow_bitmap_width_horizontal_scroll_bar_in_dips =
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXHSCROLL);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ prefs->system_font_family_name = gfx::Font().GetFontName();
+ #endif
+ }
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc b/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
new file mode 100644
index 000000000000..7b8de19066b1
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_widget_host_view_aura.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/render_widget_host_view_aura.cc
+@@ -116,7 +116,7 @@
+ #include "content/browser/accessibility/browser_accessibility_auralinux.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+@@ -2203,7 +2203,7 @@ bool RenderWidgetHostViewAura::NeedsInputGrab() {
+ }
+
+ bool RenderWidgetHostViewAura::NeedsMouseCapture() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ return NeedsInputGrab();
+ #endif
+ return false;
+@@ -2388,7 +2388,7 @@ void RenderWidgetHostViewAura::ForwardKeyboardEventWit
+ if (!target_host)
+ return;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* keybinding_delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
diff --git a/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc b/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
new file mode 100644
index 000000000000..a6d1de73067b
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_widget_host_view_event_handler.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/renderer_host/render_widget_host_view_event_handler.cc
+@@ -620,7 +620,7 @@ bool RenderWidgetHostViewEventHandler::CanRendererHand
+ if (event->type() == ui::ET_MOUSE_EXITED) {
+ if (mouse_locked || selection_popup)
+ return false;
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Don't forward the mouse leave message which is received when the context
+ // menu is displayed by the page. This confuses the page and causes state
+ // changes.
diff --git a/devel/electron7/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc
new file mode 100644
index 000000000000..1b583481ce4a
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc
@@ -0,0 +1,11 @@
+--- content/browser/scheduler/responsiveness/jank_monitor.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/scheduler/responsiveness/jank_monitor.cc
+@@ -293,7 +293,7 @@ void JankMonitor::ThreadExecutionState::DidRunTaskOrEv
+ // in context menus, among others). Simply ignore the mismatches for now.
+ // See https://crbug.com/929813 for the details of why the mismatch
+ // happens.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ task_execution_metadata_.clear();
+ #endif
+ return;
diff --git a/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
new file mode 100644
index 000000000000..90edc5a98ff2
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.cc
+@@ -15,7 +15,7 @@
+
+ #include "ui/events/platform/platform_event_source.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/env.h"
+ #include "ui/events/event.h"
+ #endif
+@@ -39,7 +39,7 @@ NativeEventObserver::~NativeEventObserver() {
+ DeregisterObserver();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeEventObserver::RegisterObserver() {
+ aura::Env::GetInstance()->AddWindowEventDispatcherObserver(this);
+ }
+@@ -61,7 +61,7 @@ void NativeEventObserver::OnWindowEventDispatcherFinis
+ did_run_event_callback_.Run(info.unique_id);
+ events_being_processed_.pop_back();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ void NativeEventObserver::RegisterObserver() {
diff --git a/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
new file mode 100644
index 000000000000..329fa92cdfd3
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
@@ -0,0 +1,47 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.h.orig 2019-12-12 12:39:39 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.h
+@@ -14,7 +14,7 @@
+ #include "content/public/browser/native_event_processor_observer_mac.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/window_event_dispatcher_observer.h"
+ #endif
+
+@@ -39,7 +39,7 @@ namespace responsiveness {
+ class CONTENT_EXPORT NativeEventObserver
+ #if defined(OS_MACOSX)
+ : public NativeEventProcessorObserver
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ : public aura::WindowEventDispatcherObserver
+ #elif defined(OS_WIN)
+ : public base::MessagePumpForUI::Observer
+@@ -56,7 +56,7 @@ class CONTENT_EXPORT NativeEventObserver
+ NativeEventObserver(WillRunEventCallback will_run_event_callback,
+ DidRunEventCallback did_run_event_callback);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ~NativeEventObserver() override;
+ #else
+ virtual ~NativeEventObserver();
+@@ -68,7 +68,7 @@ class CONTENT_EXPORT NativeEventObserver
+ // Exposed for tests.
+ void WillRunNativeEvent(const void* opaque_identifier) override;
+ void DidRunNativeEvent(const void* opaque_identifier) override;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // aura::WindowEventDispatcherObserver overrides:
+ void OnWindowEventDispatcherStartedProcessing(
+ aura::WindowEventDispatcher* dispatcher,
+@@ -85,7 +85,7 @@ class CONTENT_EXPORT NativeEventObserver
+ void RegisterObserver();
+ void DeregisterObserver();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct EventInfo {
+ const void* unique_id;
+ };
diff --git a/devel/electron7/files/patch-content_browser_scheduler_responsiveness_watcher.cc b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_watcher.cc
new file mode 100644
index 000000000000..ba472a666147
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_scheduler_responsiveness_watcher.cc
@@ -0,0 +1,20 @@
+--- content/browser/scheduler/responsiveness/watcher.cc.orig 2019-12-12 12:39:39 UTC
++++ content/browser/scheduler/responsiveness/watcher.cc
+@@ -96,7 +96,7 @@ void Watcher::DidRunTask(const base::PendingTask* task
+ // in context menus, among others). Simply ignore the mismatches for now.
+ // See https://crbug.com/929813 for the details of why the mismatch
+ // happens.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ return currently_running_metadata_ui_.clear();
+ #endif
+ DCHECK_LE(*mismatched_task_identifiers, 1);
+@@ -156,7 +156,7 @@ void Watcher::DidRunEventOnUIThread(const void* opaque
+ mismatched_event_identifiers_ui_ += 1;
+ // See comment in DidRunTask() for why |currently_running_metadata_ui_| may
+ // be reset.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ return currently_running_metadata_ui_.clear();
+ #endif
+ DCHECK_LE(mismatched_event_identifiers_ui_, 1);
diff --git a/devel/electron7/files/patch-content_browser_utility__process__host.cc b/devel/electron7/files/patch-content_browser_utility__process__host.cc
new file mode 100644
index 000000000000..9333bef553d6
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_utility__process__host.cc
@@ -0,0 +1,29 @@
+--- content/browser/utility_process_host.cc.orig 2019-12-12 12:39:40 UTC
++++ content/browser/utility_process_host.cc
+@@ -55,7 +55,7 @@
+ #include "services/network/network_sandbox_win.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/mojom/font_service.mojom.h" // nogncheck
+ #include "content/browser/font_service.h" // nogncheck
+ #endif
+@@ -216,7 +216,7 @@ UtilityProcessHost::UtilityProcessHost()
+
+ UtilityProcessHost::UtilityProcessHost(std::unique_ptr<Client> client)
+ : sandbox_type_(service_manager::SANDBOX_TYPE_UTILITY),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ child_flags_(ChildProcessHost::CHILD_ALLOW_SELF),
+ #else
+ child_flags_(ChildProcessHost::CHILD_NORMAL),
+@@ -515,7 +515,7 @@ void UtilityProcessHost::OnProcessCrashed(int exit_cod
+
+ void UtilityProcessHost::BindHostReceiver(
+ mojo::GenericPendingReceiver receiver) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (auto font_receiver = receiver.As<font_service::mojom::FontService>()) {
+ ConnectToFontService(std::move(font_receiver));
+ return;
diff --git a/devel/electron7/files/patch-content_browser_webui_shared__resources__data__source.cc b/devel/electron7/files/patch-content_browser_webui_shared__resources__data__source.cc
new file mode 100644
index 000000000000..9dee9750ab32
--- /dev/null
+++ b/devel/electron7/files/patch-content_browser_webui_shared__resources__data__source.cc
@@ -0,0 +1,17 @@
+--- content/browser/webui/shared_resources_data_source.cc.orig 2019-12-12 12:39:40 UTC
++++ content/browser/webui/shared_resources_data_source.cc
+@@ -123,12 +123,12 @@ const std::map<int, std::string> CreateMojoResourceIdT
+ "mojo/mojo/public/mojom/base/string16.mojom.html"},
+ {IDR_MOJO_STRING16_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/string16.mojom-lite.js"},
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {IDR_MOJO_TIME_MOJOM_HTML,
+ "mojo/mojo/public/mojom/base/time.mojom.html"},
+ {IDR_MOJO_TIME_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/time.mojom-lite.js"},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+ }
+
diff --git a/devel/electron7/files/patch-content_common_BUILD.gn b/devel/electron7/files/patch-content_common_BUILD.gn
new file mode 100644
index 000000000000..87115f5ac730
--- /dev/null
+++ b/devel/electron7/files/patch-content_common_BUILD.gn
@@ -0,0 +1,15 @@
+--- content/common/BUILD.gn.orig 2019-12-12 12:39:40 UTC
++++ content/common/BUILD.gn
+@@ -367,6 +367,12 @@ source_set("common") {
+ libs += [ "android" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "sandbox_init_linux.cc",
++ ]
++ }
++
+ if (is_debug && !is_component_build && enable_plugins) {
+ # Content depends on the PPAPI message logging stuff; if this isn't here,
+ # some unit test binaries won't compile. This only worked in release mode
diff --git a/devel/electron7/files/patch-content_common_common__sandbox__support__linux.cc b/devel/electron7/files/patch-content_common_common__sandbox__support__linux.cc
new file mode 100644
index 000000000000..f242bc735b58
--- /dev/null
+++ b/devel/electron7/files/patch-content_common_common__sandbox__support__linux.cc
@@ -0,0 +1,10 @@
+--- content/common/common_sandbox_support_linux.cc.orig 2019-12-12 12:39:40 UTC
++++ content/common/common_sandbox_support_linux.cc
+@@ -5,6 +5,7 @@
+ #include "content/public/common/common_sandbox_support_linux.h"
+
+ #include <sys/stat.h>
++#include <unistd.h>
+
+ #include <limits>
+ #include <memory>
diff --git a/devel/electron7/files/patch-content_common_user__agent.cc b/devel/electron7/files/patch-content_common_user__agent.cc
new file mode 100644
index 000000000000..666931dffdff
--- /dev/null
+++ b/devel/electron7/files/patch-content_common_user__agent.cc
@@ -0,0 +1,17 @@
+--- content/common/user_agent.cc.orig 2019-12-12 12:39:40 UTC
++++ content/common/user_agent.cc
+@@ -124,6 +124,14 @@ std::string BuildOSCpuInfo(bool include_android_build_
+ #endif
+ );
+
++#if defined(OS_BSD)
++#if defined(__x86_64__)
++ base::StringAppendF(&os_cpu, "; Linux x86_64");
++#else
++ base::StringAppendF(&os_cpu, "; Linux i686");
++#endif
++#endif
++
+ return os_cpu;
+ }
+
diff --git a/devel/electron7/files/patch-content_gpu_BUILD.gn b/devel/electron7/files/patch-content_gpu_BUILD.gn
new file mode 100644
index 000000000000..9ed361783c8d
--- /dev/null
+++ b/devel/electron7/files/patch-content_gpu_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/gpu/BUILD.gn.orig 2019-12-12 12:39:40 UTC
++++ content/gpu/BUILD.gn
+@@ -125,7 +125,7 @@ target(link_target_type, "gpu_sources") {
+
+ # Use DRI on desktop Linux builds.
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+- (!is_chromecast || is_cast_desktop_build)) {
++ (!is_chromecast || is_cast_desktop_build) && !is_bsd) {
+ configs += [ "//build/config/linux/dri" ]
+ }
+ }
diff --git a/devel/electron7/files/patch-content_gpu_gpu__main.cc b/devel/electron7/files/patch-content_gpu_gpu__main.cc
new file mode 100644
index 000000000000..380d185ba885
--- /dev/null
+++ b/devel/electron7/files/patch-content_gpu_gpu__main.cc
@@ -0,0 +1,56 @@
+--- content/gpu/gpu_main.cc.orig 2019-12-16 13:32:59 UTC
++++ content/gpu/gpu_main.cc
+@@ -82,7 +82,7 @@
+ #include "ui/gfx/x/x11_switches.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/gpu/gpu_sandbox_hook_linux.h"
+ #include "content/public/common/sandbox_init.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+@@ -111,7 +111,7 @@ namespace content {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread*,
+ const gpu::GPUInfo*,
+ const gpu::GpuPreferences&);
+@@ -172,7 +172,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHel
+ bool EnsureSandboxInitialized(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ return StartSandboxLinux(watchdog_thread, gpu_info, gpu_prefs);
+ #elif defined(OS_WIN)
+ return StartSandboxWindows(sandbox_info_);
+@@ -280,7 +280,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ main_thread_task_executor =
+ std::make_unique<base::SingleThreadTaskExecutor>(
+ gpu_preferences.message_pump_type);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #error "Unsupported Linux platform."
+ #elif defined(OS_MACOSX)
+ // Cross-process CoreAnimation requires a CFRunLoop to function at all, and
+@@ -388,7 +388,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) {
+@@ -423,7 +423,7 @@ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdo
+
+ return res;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ bool StartSandboxWindows(const sandbox::SandboxInterfaceInfo* sandbox_info) {
diff --git a/devel/electron7/files/patch-content_gpu_gpu__sandbox__hook__linux.cc b/devel/electron7/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..638308bfa4c0
--- /dev/null
+++ b/devel/electron7/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
@@ -0,0 +1,58 @@
+--- content/gpu/gpu_sandbox_hook_linux.cc.orig 2019-12-12 12:39:40 UTC
++++ content/gpu/gpu_sandbox_hook_linux.cc
+@@ -96,8 +96,9 @@ static const char kLibV4lEncPluginPath[] =
+ "/usr/lib/libv4l/plugins/libv4l-encplugin.so";
+ #endif
+
+-constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
++constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL;
+
++#if !defined(OS_BSD)
+ void AddV4L2GpuWhitelist(
+ std::vector<BrokerFilePermission>* permissions,
+ const service_manager::SandboxSeccompBPF::Options& options) {
+@@ -299,8 +300,10 @@ std::vector<BrokerFilePermission> FilePermissionsForGp
+ AddStandardGpuWhiteList(&permissions);
+ return permissions;
+ }
++#endif
+
+ void LoadArmGpuLibraries() {
++#if !defined(OS_BSD)
+ // Preload the Mali library.
+ if (UseChromecastSandboxWhitelist()) {
+ for (const char* path : kWhitelistedChromecastPaths) {
+@@ -315,6 +318,7 @@ void LoadArmGpuLibraries() {
+ // Preload the Tegra V4L2 (video decode acceleration) library.
+ dlopen(kLibTegraPath, dlopen_flag);
+ }
++#endif
+ }
+
+ bool LoadAmdGpuLibraries() {
+@@ -370,6 +374,7 @@ bool LoadLibrariesForGpu(
+ return true;
+ }
+
++#if !defined(OS_BSD)
+ sandbox::syscall_broker::BrokerCommandSet CommandSetForGPU(
+ const service_manager::SandboxLinux::Options& options) {
+ sandbox::syscall_broker::BrokerCommandSet command_set;
+@@ -390,13 +395,17 @@ bool BrokerProcessPreSandboxHook(
+ service_manager::SetProcessTitleFromCommandLine(nullptr);
+ return true;
+ }
++#endif
+
+ } // namespace
+
+ bool GpuProcessPreSandboxHook(service_manager::SandboxLinux::Options options) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ service_manager::SandboxLinux::GetInstance()->StartBrokerProcess(
+ CommandSetForGPU(options), FilePermissionsForGpu(options),
+ base::BindOnce(BrokerProcessPreSandboxHook), options);
++#endif
+
+ if (!LoadLibrariesForGpu(options))
+ return false;
diff --git a/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc b/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
new file mode 100644
index 000000000000..54596a4e2374
--- /dev/null
+++ b/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
@@ -0,0 +1,38 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.cc.orig 2019-12-12 12:39:40 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.cc
+@@ -19,7 +19,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #include "mojo/public/cpp/bindings/pending_remote.h"
+ #endif
+@@ -34,7 +34,7 @@ typedef struct CGFont* CGFontRef;
+ namespace content {
+
+ PpapiBlinkPlatformImpl::PpapiBlinkPlatformImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ ChildThread::Get()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -51,7 +51,7 @@ PpapiBlinkPlatformImpl::~PpapiBlinkPlatformImpl() {
+ }
+
+ void PpapiBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -61,7 +61,7 @@ void PpapiBlinkPlatformImpl::Shutdown() {
+ }
+
+ blink::WebSandboxSupport* PpapiBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h b/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
new file mode 100644
index 000000000000..faaa76042db6
--- /dev/null
+++ b/devel/electron7/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
@@ -0,0 +1,25 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.h.orig 2019-12-12 12:39:40 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "content/child/blink_platform_impl.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -36,11 +36,11 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImp
+ blink::WebThemeEngine* ThemeEngine() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron7/files/patch-content_public_app_content__main__delegate.cc b/devel/electron7/files/patch-content_public_app_content__main__delegate.cc
new file mode 100644
index 000000000000..fba46113805d
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_app_content__main__delegate.cc
@@ -0,0 +1,18 @@
+--- content/public/app/content_main_delegate.cc.orig 2019-12-12 12:39:40 UTC
++++ content/public/app/content_main_delegate.cc
+@@ -38,13 +38,13 @@ bool ContentMainDelegate::DelaySandboxInitialization(
+ return false;
+ }
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+
+ void ContentMainDelegate::ZygoteStarting(
+ std::vector<std::unique_ptr<service_manager::ZygoteForkDelegate>>*
+ delegates) {}
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ int ContentMainDelegate::TerminateForFatalInitializationError() {
+ CHECK(false);
diff --git a/devel/electron7/files/patch-content_public_app_content__main__delegate.h b/devel/electron7/files/patch-content_public_app_content__main__delegate.h
new file mode 100644
index 000000000000..15bfb755c990
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_app_content__main__delegate.h
@@ -0,0 +1,20 @@
+--- content/public/app/content_main_delegate.h.orig 2019-12-12 12:39:40 UTC
++++ content/public/app/content_main_delegate.h
+@@ -71,7 +71,7 @@ class CONTENT_EXPORT ContentMainDelegate {
+ // want it at all.
+ virtual bool DelaySandboxInitialization(const std::string& process_type);
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Tells the embedder that the zygote process is starting, and allows it to
+ // specify one or more zygote delegates if it wishes by storing them in
+ // |*delegates|.
+@@ -81,7 +81,7 @@ class CONTENT_EXPORT ContentMainDelegate {
+
+ // Called every time the zygote process forks.
+ virtual void ZygoteForked() {}
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Allows the embedder to prevent locking the scheme registry. The scheme
+ // registry is the list of URL schemes we recognize, with some additional
diff --git a/devel/electron7/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc b/devel/electron7/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
new file mode 100644
index 000000000000..6ddae0571348
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_app_v8__snapshot__overlay__manifest.cc
@@ -0,0 +1,11 @@
+--- content/public/app/v8_snapshot_overlay_manifest.cc.orig 2019-12-12 12:39:40 UTC
++++ content/public/app/v8_snapshot_overlay_manifest.cc
+@@ -15,7 +15,7 @@ namespace content {
+ const service_manager::Manifest& GetV8SnapshotOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest {
+ service_manager::ManifestBuilder()
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .PreloadFile(kV8NativesDataDescriptor,
+ base::FilePath(FILE_PATH_LITERAL("natives_blob.bin")))
+ #if defined(USE_V8_CONTEXT_SNAPSHOT)
diff --git a/devel/electron7/files/patch-content_public_common_child__process__host.h b/devel/electron7/files/patch-content_public_common_child__process__host.h
new file mode 100644
index 000000000000..b1e38eb56a18
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_child__process__host.h
@@ -0,0 +1,11 @@
+--- content/public/common/child_process_host.h.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/child_process_host.h
+@@ -52,7 +52,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // No special behavior requested.
+ CHILD_NORMAL = 0,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Indicates that the child execed after forking may be execced from
+ // /proc/self/exe rather than using the "real" app path. This prevents
+ // autoupdate from confusing us if it changes the file out from under us.
diff --git a/devel/electron7/files/patch-content_public_common_common__param__traits__macros.h b/devel/electron7/files/patch-content_public_common_common__param__traits__macros.h
new file mode 100644
index 000000000000..c97d7b001ad6
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_common__param__traits__macros.h
@@ -0,0 +1,11 @@
+--- content/public/common/common_param_traits_macros.h.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/common_param_traits_macros.h
+@@ -337,7 +337,7 @@ IPC_STRUCT_TRAITS_BEGIN(blink::mojom::RendererPreferen
+ IPC_STRUCT_TRAITS_MEMBER(disable_client_blocked_error_page)
+ IPC_STRUCT_TRAITS_MEMBER(plugin_fullscreen_allowed)
+ IPC_STRUCT_TRAITS_MEMBER(network_contry_iso)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(system_font_family_name)
+ #endif
+ #if defined(OS_WIN)
diff --git a/devel/electron7/files/patch-content_public_common_content__features.cc b/devel/electron7/files/patch-content_public_common_content__features.cc
new file mode 100644
index 000000000000..01dbae3dd16a
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_content__features.cc
@@ -0,0 +1,29 @@
+--- content/public/common/content_features.cc.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/content_features.cc
+@@ -47,7 +47,7 @@ const base::Feature kAudioServiceLaunchOnStartup{
+ const base::Feature kAudioServiceOutOfProcess{
+ "AudioServiceOutOfProcess",
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+ base::FEATURE_DISABLED_BY_DEFAULT
+@@ -634,7 +634,7 @@ const base::Feature kWebAssemblyThreads {
+ };
+
+ // Enable WebAssembly trap handler.
+-#if (defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
++#if (defined(OS_BSD) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
+ defined(ARCH_CPU_X86_64)
+ const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+@@ -669,7 +669,7 @@ const base::Feature kWebAuthBle{"WebAuthenticationBle"
+ // https://w3c.github.io/webauthn
+ const base::Feature kWebAuthCable {
+ "WebAuthenticationCable",
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #else
+ base::FEATURE_ENABLED_BY_DEFAULT
diff --git a/devel/electron7/files/patch-content_public_common_content__switches.cc b/devel/electron7/files/patch-content_public_common_content__switches.cc
new file mode 100644
index 000000000000..25344f56c7c8
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_content__switches.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.cc.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/content_switches.cc
+@@ -980,7 +980,7 @@ const char kEnableAggressiveDOMStorageFlushing[] =
+ // Enable indication that browser is controlled by automation.
+ const char kEnableAutomation[] = "enable-automation";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ // Allows sending text-to-speech requests to speech-dispatcher, a common
+ // Linux speech service. Because it's buggy, the user must explicitly
+ // enable it so that visiting a random webpage can't cause instability.
diff --git a/devel/electron7/files/patch-content_public_common_content__switches.h b/devel/electron7/files/patch-content_public_common_content__switches.h
new file mode 100644
index 000000000000..802bb1675f36
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_content__switches.h
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.h.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/content_switches.h
+@@ -270,7 +270,7 @@ CONTENT_EXPORT extern const char kRemoteDebuggingSocke
+ CONTENT_EXPORT extern const char kRendererWaitForJavaDebugger[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
+ #endif
+
diff --git a/devel/electron7/files/patch-content_public_common_use__zoom__for__dsf__policy.cc b/devel/electron7/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
new file mode 100644
index 000000000000..805ca02294ec
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
@@ -0,0 +1,11 @@
+--- content/public/common/use_zoom_for_dsf_policy.cc.orig 2019-12-12 12:39:41 UTC
++++ content/public/common/use_zoom_for_dsf_policy.cc
+@@ -25,7 +25,7 @@ const base::Feature kUseZoomForDsfEnabledByDefault{
+ #endif
+
+ bool IsUseZoomForDSFEnabledByDefault() {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return true;
+ #elif defined(OS_WIN) || defined(OS_ANDROID)
+ return base::FeatureList::IsEnabled(kUseZoomForDsfEnabledByDefault);
diff --git a/devel/electron7/files/patch-content_public_test_browser__test__base.cc b/devel/electron7/files/patch-content_public_test_browser__test__base.cc
new file mode 100644
index 000000000000..eae307ac348d
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_test_browser__test__base.cc
@@ -0,0 +1,13 @@
+--- content/public/test/browser_test_base.cc.orig 2019-12-12 12:39:41 UTC
++++ content/public/test/browser_test_base.cc
+@@ -96,6 +96,10 @@
+ #include "ui/views/test/event_generator_delegate_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#endif
++
+ #if defined(OS_POSIX)
+ #include "base/process/process_handle.h"
+ #endif
diff --git a/devel/electron7/files/patch-content_public_test_mock__render__thread.cc b/devel/electron7/files/patch-content_public_test_mock__render__thread.cc
new file mode 100644
index 000000000000..445d046fb8dc
--- /dev/null
+++ b/devel/electron7/files/patch-content_public_test_mock__render__thread.cc
@@ -0,0 +1,11 @@
+--- content/public/test/mock_render_thread.cc.orig 2019-12-12 12:39:41 UTC
++++ content/public/test/mock_render_thread.cc
+@@ -74,7 +74,7 @@ class MockRenderMessageFilterImpl : public mojom::Rend
+ std::move(callback).Run(false);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t platform_thread_id,
+ base::ThreadPriority thread_priority) override {}
+ #endif
diff --git a/devel/electron7/files/patch-content_renderer_media_audio_audio__device__factory.cc b/devel/electron7/files/patch-content_renderer_media_audio_audio__device__factory.cc
new file mode 100644
index 000000000000..14b72624b8a8
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_media_audio_audio__device__factory.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/audio/audio_device_factory.cc.orig 2019-12-12 12:39:41 UTC
++++ content/renderer/media/audio/audio_device_factory.cc
+@@ -35,7 +35,7 @@ AudioDeviceFactory* AudioDeviceFactory::factory_ = nul
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Due to driver deadlock issues on Windows (http://crbug/422522) there is a
+ // chance device authorization response is never received from the browser side.
+ // In this case we will time out, to avoid renderer hang forever waiting for
diff --git a/devel/electron7/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc b/devel/electron7/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
new file mode 100644
index 000000000000..869377bc8081
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_media_webrtc_webrtc__audio__renderer__unittest.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc.orig 2019-12-12 12:39:41 UTC
++++ content/renderer/media/webrtc/webrtc_audio_renderer_unittest.cc
+@@ -244,7 +244,7 @@ TEST_F(WebRtcAudioRendererTest, MultipleRenderers) {
+ TEST_F(WebRtcAudioRendererTest, VerifySinkParameters) {
+ SetupRenderer(kDefaultOutputDeviceId);
+ renderer_proxy_->Start();
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ static const int kExpectedBufferSize = kHardwareSampleRate / 100;
+ #elif defined(OS_ANDROID)
+ static const int kExpectedBufferSize = 2 * kHardwareSampleRate / 100;
diff --git a/devel/electron7/files/patch-content_renderer_render__process__impl.cc b/devel/electron7/files/patch-content_renderer_render__process__impl.cc
new file mode 100644
index 000000000000..a5cd5dff082e
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_render__process__impl.cc
@@ -0,0 +1,20 @@
+--- content/renderer/render_process_impl.cc.orig 2019-12-12 12:39:41 UTC
++++ content/renderer/render_process_impl.cc
+@@ -43,7 +43,7 @@
+ #if defined(OS_WIN)
+ #include "base/win/win_util.h"
+ #endif
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #include "v8/include/v8-wasm-trap-handler-posix.h"
+ #endif
+ namespace {
+@@ -158,7 +158,7 @@ RenderProcessImpl::RenderProcessImpl()
+
+ SetV8FlagIfNotFeature(features::kWebAssemblyTrapHandler,
+ "--no-wasm-trap-handler");
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ if (base::FeatureList::IsEnabled(features::kWebAssemblyTrapHandler)) {
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ if (!command_line->HasSwitch(
diff --git a/devel/electron7/files/patch-content_renderer_render__thread__impl.cc b/devel/electron7/files/patch-content_renderer_render__thread__impl.cc
new file mode 100644
index 000000000000..64884a3016bc
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_render__thread__impl.cc
@@ -0,0 +1,51 @@
+--- content/renderer/render_thread_impl.cc.orig 2019-12-16 13:32:58 UTC
++++ content/renderer/render_thread_impl.cc
+@@ -185,12 +185,21 @@
+ #include "mojo/public/cpp/bindings/message_dumper.h"
+ #endif
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
+ #endif
++#endif
+
++#if defined(OS_BSD)
++#include <stddef.h>
++#include <stdint.h>
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#endif
++
+ using base::ThreadRestrictions;
+ using blink::WebDocument;
+ using blink::WebFrame;
+@@ -901,7 +910,7 @@ void RenderThreadImpl::Init() {
+ DCHECK(parsed_num_raster_threads) << string_value;
+ DCHECK_GT(num_raster_threads, 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ categorized_worker_pool_->SetBackgroundingCallback(
+ main_thread_scheduler_->DefaultTaskRunner(),
+ base::BindOnce(
+@@ -930,7 +939,7 @@ void RenderThreadImpl::Init() {
+ base::DiscardableMemoryAllocator::SetInstance(
+ discardable_shared_memory_manager_.get());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ blink::features::kBlinkCompositorUseDisplayThreadPriority)) {
+ render_message_filter()->SetThreadPriority(
+@@ -1309,7 +1318,7 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl:
+ !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames);
+ #else
+ cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ const bool enable_media_stream_gpu_memory_buffers =
+ enable_gpu_memory_buffers &&
+ base::FeatureList::IsEnabled(
diff --git a/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.cc b/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.cc
new file mode 100644
index 000000000000..df1e9b2c1ad7
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.cc
@@ -0,0 +1,56 @@
+--- content/renderer/renderer_blink_platform_impl.cc.orig 2019-12-16 13:32:59 UTC
++++ content/renderer/renderer_blink_platform_impl.cc
+@@ -102,7 +102,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -183,7 +183,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ if (RenderThreadImpl::current()) {
+ io_runner_ = RenderThreadImpl::current()->GetIOTaskRunner();
+ thread_safe_sender_ = RenderThreadImpl::current()->thread_safe_sender();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ RenderThreadImpl::current()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -193,7 +193,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ #endif
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (sandboxEnabled()) {
+ #if defined(OS_MACOSX)
+ std::unique_ptr<service_manager::Connector> sandbox_connector;
+@@ -224,7 +224,7 @@ RendererBlinkPlatformImpl::~RendererBlinkPlatformImpl(
+ }
+
+ void RendererBlinkPlatformImpl::Shutdown() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // SandboxSupport contains a map of OutOfProcessFont objects, which hold
+ // WebStrings and WebVectors, which become invalidated when blink is shut
+ // down. Hence, we need to clear that map now, just before blink::shutdown()
+@@ -289,7 +289,7 @@ RendererBlinkPlatformImpl::CreateNetworkURLLoaderFacto
+
+ void RendererBlinkPlatformImpl::SetDisplayThreadPriority(
+ base::PlatformThreadId thread_id) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) {
+ render_thread->render_message_filter()->SetThreadPriority(
+ thread_id, base::ThreadPriority::DISPLAY);
+@@ -302,7 +302,7 @@ blink::BlameContext* RendererBlinkPlatformImpl::GetTop
+ }
+
+ blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ // These platforms do not require sandbox support.
diff --git a/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.h b/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.h
new file mode 100644
index 000000000000..5cee6bbdfed3
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_renderer__blink__platform__impl.h
@@ -0,0 +1,29 @@
+--- content/renderer/renderer_blink_platform_impl.h.orig 2019-12-16 13:32:59 UTC
++++ content/renderer/renderer_blink_platform_impl.h
+@@ -30,7 +30,7 @@
+ #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
+ #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -226,7 +226,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+@@ -253,7 +253,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ std::unique_ptr<blink::WebTransmissionEncodingInfoHandler>
+ web_transmission_encoding_info_handler_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron7/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc b/devel/electron7/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
new file mode 100644
index 000000000000..8806823c7216
--- /dev/null
+++ b/devel/electron7/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
@@ -0,0 +1,19 @@
+--- content/renderer/renderer_main_platform_delegate_linux.cc.orig 2019-12-12 12:39:41 UTC
++++ content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -30,6 +30,7 @@ void RendererMainPlatformDelegate::PlatformUninitializ
+ }
+
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if !defined(OS_BSD)
+ // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+ // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox.md
+ //
+@@ -65,7 +66,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
+ CHECK_EQ(errno, EPERM);
+ }
+ #endif // __x86_64__
+-
++#endif // ! OS_BSD
+ return true;
+ }
+
diff --git a/devel/electron7/files/patch-content_shell_BUILD.gn b/devel/electron7/files/patch-content_shell_BUILD.gn
new file mode 100644
index 000000000000..25c1bd8d7c9b
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/shell/BUILD.gn.orig 2019-12-12 12:39:41 UTC
++++ content/shell/BUILD.gn
+@@ -962,7 +962,7 @@ group("content_shell_crash_test") {
+ if (is_win) {
+ data_deps += [ "//build/win:copy_cdb_to_output" ]
+ }
+- if (is_posix) {
++ if (is_posix && !is_bsd) {
+ data_deps += [
+ "//third_party/breakpad:dump_syms",
+ "//third_party/breakpad:minidump_stackwalk",
diff --git a/devel/electron7/files/patch-content_shell_app_shell__main__delegate.cc b/devel/electron7/files/patch-content_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..dd8f8c90a8eb
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_app_shell__main__delegate.cc
@@ -0,0 +1,20 @@
+--- content/shell/app/shell_main_delegate.cc.orig 2019-12-12 12:39:41 UTC
++++ content/shell/app/shell_main_delegate.cc
+@@ -170,7 +170,7 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit
+
+ v8_crashpad_support::SetUp();
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ breakpad::SetFirstChanceExceptionHandler(v8::TryHandleWebAssemblyTrapPosix);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -317,7 +317,7 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit
+ }
+
+ void ShellMainDelegate::PreSandboxStartup() {
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
diff --git a/devel/electron7/files/patch-content_shell_browser_shell__browser__context.cc b/devel/electron7/files/patch-content_shell_browser_shell__browser__context.cc
new file mode 100644
index 000000000000..56498d914343
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_browser_shell__browser__context.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_context.cc.orig 2019-12-12 12:39:41 UTC
++++ content/shell/browser/shell_browser_context.cc
+@@ -32,7 +32,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -107,7 +107,7 @@ void ShellBrowserContext::InitWhileIOAllowed() {
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
+ path_ = path_.Append(std::wstring(L"content_shell"));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(
+ base::nix::GetXDGDirectory(env.get(),
diff --git a/devel/electron7/files/patch-content_shell_browser_shell__browser__main__parts.cc b/devel/electron7/files/patch-content_shell_browser_shell__browser__main__parts.cc
new file mode 100644
index 000000000000..325a7f8634b5
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_browser_shell__browser__main__parts.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_main_parts.cc.orig 2019-12-12 12:39:41 UTC
++++ content/shell/browser/shell_browser_main_parts.cc
+@@ -47,7 +47,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -125,7 +125,7 @@ int ShellBrowserMainParts::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__context.cc b/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
new file mode 100644
index 000000000000..7f6ec38eb8d9
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_context.cc.orig 2019-12-12 12:39:42 UTC
++++ content/shell/browser/web_test/web_test_browser_context.cc
+@@ -26,7 +26,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
diff --git a/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc b/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
new file mode 100644
index 000000000000..6940b485e9d8
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_main_parts.cc.orig 2019-12-12 12:39:42 UTC
++++ content/shell/browser/web_test/web_test_browser_main_parts.cc
+@@ -36,7 +36,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
diff --git a/devel/electron7/files/patch-content_shell_test__runner_test__runner.cc b/devel/electron7/files/patch-content_shell_test__runner_test__runner.cc
new file mode 100644
index 000000000000..66f6ff9bf7df
--- /dev/null
+++ b/devel/electron7/files/patch-content_shell_test__runner_test__runner.cc
@@ -0,0 +1,29 @@
+--- content/shell/test_runner/test_runner.cc.orig 2019-12-12 12:39:42 UTC
++++ content/shell/test_runner/test_runner.cc
+@@ -64,7 +64,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/skia_util.h"
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "third_party/blink/public/platform/web_font_render_style.h"
+ #endif
+
+@@ -1533,7 +1533,7 @@ void TestRunner::Reset() {
+ drag_image_.reset();
+
+ blink::WebSecurityPolicy::ClearOriginAccessList();
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ blink::WebFontRenderStyle::SetSubpixelPositioning(false);
+ #endif
+
+@@ -2118,7 +2118,7 @@ void TestRunner::AddOriginAccessAllowListEntry(
+ }
+
+ void TestRunner::SetTextSubpixelPositioning(bool value) {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Since FontConfig doesn't provide a variable to control subpixel
+ // positioning, we'll fall back to setting it globally for all fonts.
+ blink::WebFontRenderStyle::SetSubpixelPositioning(value);
diff --git a/devel/electron7/files/patch-content_test_content__test__suite.cc b/devel/electron7/files/patch-content_test_content__test__suite.cc
new file mode 100644
index 000000000000..88d992ccb8ae
--- /dev/null
+++ b/devel/electron7/files/patch-content_test_content__test__suite.cc
@@ -0,0 +1,18 @@
+--- content/test/content_test_suite.cc.orig 2019-12-12 12:39:42 UTC
++++ content/test/content_test_suite.cc
+@@ -81,6 +81,7 @@ void ContentTestSuite::Initialize() {
+ // to initialize GL, so don't do it here.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_child_process = command_line->HasSwitch(switches::kTestChildProcess);
++#if !defined(OS_BSD)
+ if (!is_child_process) {
+ gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
+ auto* gpu_feature_info = gpu::GetTestGpuThreadHolder()->GetGpuFeatureInfo();
+@@ -88,6 +89,7 @@ void ContentTestSuite::Initialize() {
+ gpu_feature_info->disabled_extensions);
+ gl::init::InitializeExtensionSettingsOneOffPlatform();
+ }
++#endif
+ testing::TestEventListeners& listeners =
+ testing::UnitTest::GetInstance()->listeners();
+ listeners.Append(new TestInitializationListener);
diff --git a/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc b/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
new file mode 100644
index 000000000000..00f2b3628e7d
--- /dev/null
+++ b/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
@@ -0,0 +1,29 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.cc.orig 2019-12-12 12:39:43 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.cc
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -18,7 +18,7 @@ namespace content {
+ UtilityBlinkPlatformWithSandboxSupportImpl::
+ UtilityBlinkPlatformWithSandboxSupportImpl(
+ service_manager::Connector* connector) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ UtilityThread::Get()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -35,7 +35,7 @@ UtilityBlinkPlatformWithSandboxSupportImpl::
+
+ blink::WebSandboxSupport*
+ UtilityBlinkPlatformWithSandboxSupportImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h b/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
new file mode 100644
index 000000000000..539710e9ba17
--- /dev/null
+++ b/devel/electron7/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
@@ -0,0 +1,24 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.h.orig 2019-12-12 12:39:43 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.h
+@@ -11,7 +11,7 @@
+ #include "build/build_config.h"
+ #include "third_party/blink/public/platform/platform.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -39,10 +39,10 @@ class UtilityBlinkPlatformWithSandboxSupportImpl : pub
+ blink::WebSandboxSupport* GetSandboxSupport() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/devel/electron7/files/patch-device_bluetooth_BUILD.gn b/devel/electron7/files/patch-device_bluetooth_BUILD.gn
new file mode 100644
index 000000000000..bd8b4e687db1
--- /dev/null
+++ b/devel/electron7/files/patch-device_bluetooth_BUILD.gn
@@ -0,0 +1,11 @@
+--- device/bluetooth/BUILD.gn.orig 2019-12-12 12:39:43 UTC
++++ device/bluetooth/BUILD.gn
+@@ -277,7 +277,7 @@ component("bluetooth") {
+ ]
+ }
+
+- if (is_chromeos || is_linux) {
++ if (is_chromeos || (is_linux && !is_bsd)) {
+ if (use_dbus) {
+ sources += [
+ "bluez/bluetooth_adapter_bluez.cc",
diff --git a/devel/electron7/files/patch-device_gamepad_gamepad__provider.cc b/devel/electron7/files/patch-device_gamepad_gamepad__provider.cc
new file mode 100644
index 000000000000..2b9e4806146e
--- /dev/null
+++ b/devel/electron7/files/patch-device_gamepad_gamepad__provider.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/gamepad_provider.cc.orig 2019-12-12 12:39:43 UTC
++++ device/gamepad/gamepad_provider.cc
+@@ -167,7 +167,7 @@ void GamepadProvider::Initialize(std::unique_ptr<Gamep
+
+ if (!polling_thread_)
+ polling_thread_.reset(new base::Thread("Gamepad polling thread"));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, the data fetcher needs to watch file descriptors, so the message
+ // loop needs to be a libevent loop.
+ const base::MessagePumpType kMessageLoopType = base::MessagePumpType::IO;
diff --git a/devel/electron7/files/patch-device_gamepad_hid__writer__linux.cc b/devel/electron7/files/patch-device_gamepad_hid__writer__linux.cc
new file mode 100644
index 000000000000..c45381cc6409
--- /dev/null
+++ b/devel/electron7/files/patch-device_gamepad_hid__writer__linux.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/hid_writer_linux.cc.orig 2019-12-12 12:39:43 UTC
++++ device/gamepad/hid_writer_linux.cc
+@@ -4,6 +4,8 @@
+
+ #include "device/gamepad/hid_writer_linux.h"
+
++#include <unistd.h>
++
+ #include "base/posix/eintr_wrapper.h"
+
+ namespace device {
diff --git a/devel/electron7/files/patch-electron_BUILD.gn b/devel/electron7/files/patch-electron_BUILD.gn
new file mode 100644
index 000000000000..d91fb1c58377
--- /dev/null
+++ b/devel/electron7/files/patch-electron_BUILD.gn
@@ -0,0 +1,40 @@
+--- electron/BUILD.gn.orig 2019-12-13 19:48:14 UTC
++++ electron/BUILD.gn
+@@ -458,6 +458,15 @@ source_set("electron_lib") {
+ sources = filenames.lib_sources
+ set_sources_assignment_filter(sources_assignment_filter)
+
++ if (is_bsd) {
++ sources -= [
++ "shell/common/crash_reporter/crash_reporter_linux.cc",
++ "shell/common/crash_reporter/crash_reporter_linux.h",
++ "shell/common/crash_reporter/linux/crash_dump_handler.cc",
++ "shell/common/crash_reporter/linux/crash_dump_handler.h",
++ ]
++ }
++
+ if (is_component_build) {
+ defines += [ "NODE_SHARED_MODE" ]
+ }
+@@ -525,6 +534,12 @@ source_set("electron_lib") {
+
+ sources += filenames.lib_sources_nss
+ }
++ if (is_bsd) {
++ deps -= [
++ "//third_party/breakpad:client",
++ ]
++ include_dirs -= [ "//third_party/breakpad" ]
++ }
+ if (is_win) {
+ libs += [ "dwmapi.lib" ]
+ deps += [
+@@ -1261,7 +1276,7 @@ dist_zip("electron_dist_zip") {
+ ":licenses",
+ ":electron_version",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//sandbox/linux:chrome_sandbox" ]
+ }
+ outputs = [
diff --git a/devel/electron7/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc b/devel/electron7/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..b0774a5a4bb0
--- /dev/null
+++ b/devel/electron7/files/patch-electron_chromium__src_chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,20 @@
+--- electron/chromium_src/chrome/browser/process_singleton_posix.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/chromium_src/chrome/browser/process_singleton_posix.cc
+@@ -95,7 +95,7 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -862,7 +862,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ // The other process is shutting down, it's safe to start a new process.
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/devel/electron7/files/patch-electron_default__app_default__app.ts b/devel/electron7/files/patch-electron_default__app_default__app.ts
new file mode 100644
index 000000000000..c7d4a920f486
--- /dev/null
+++ b/devel/electron7/files/patch-electron_default__app_default__app.ts
@@ -0,0 +1,11 @@
+--- electron/default_app/default_app.ts.orig 2020-03-24 05:00:48 UTC
++++ electron/default_app/default_app.ts
+@@ -59,7 +59,7 @@ async function createWindow () {
+ show: false
+ };
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ options.icon = path.join(__dirname, 'icon.png');
+ }
+
diff --git a/devel/electron7/files/patch-electron_lib_browser_api_app.ts b/devel/electron7/files/patch-electron_lib_browser_api_app.ts
new file mode 100644
index 000000000000..a0f67a9157c0
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_browser_api_app.ts
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/app.ts.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/browser/api/app.ts
+@@ -67,7 +67,7 @@ if (process.platform === 'darwin') {
+ app.dock!.getMenu = () => dockMenu;
+ }
+
+-if (process.platform === 'linux') {
++if (process.platform === 'linux' || process.platform === 'freebsd') {
+ const patternVmRSS = /^VmRSS:\s*(\d+) kB$/m;
+ const patternVmHWM = /^VmHWM:\s*(\d+) kB$/m;
+
diff --git a/devel/electron7/files/patch-electron_lib_browser_api_dialog.js b/devel/electron7/files/patch-electron_lib_browser_api_dialog.js
new file mode 100644
index 000000000000..6c7727e89dc9
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_browser_api_dialog.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/dialog.js.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/browser/api/dialog.js
+@@ -28,7 +28,7 @@ const normalizeAccessKey = (text) => {
+ // existing single underscores with a second underscore, replace double
+ // ampersands with a single ampersand, and replace a single ampersand with
+ // a single underscore
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return text.replace(/_/g, '__').replace(/&(.?)/g, (match, after) => {
+ if (after === '&') return after;
+ return `_${after}`;
diff --git a/devel/electron7/files/patch-electron_lib_browser_api_menu-item-roles.js b/devel/electron7/files/patch-electron_lib_browser_api_menu-item-roles.js
new file mode 100644
index 000000000000..20edb3caad35
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_browser_api_menu-item-roles.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/api/menu-item-roles.js.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/browser/api/menu-item-roles.js
+@@ -4,7 +4,7 @@ const { app } = require('electron');
+
+ const isMac = process.platform === 'darwin';
+ const isWindows = process.platform === 'win32';
+-const isLinux = process.platform === 'linux';
++const isLinux = (process.platform === 'linux' || process.platform === 'freebsd');
+
+ const roles = {
+ about: {
diff --git a/devel/electron7/files/patch-electron_lib_browser_init.ts b/devel/electron7/files/patch-electron_lib_browser_init.ts
new file mode 100644
index 000000000000..820d4e46a764
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_browser_init.ts
@@ -0,0 +1,11 @@
+--- electron/lib/browser/init.ts.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/browser/init.ts
+@@ -165,7 +165,7 @@ const mainStartupScript = packageJson.main || 'index.j
+ const KNOWN_XDG_DESKTOP_VALUES = ['Pantheon', 'Unity:Unity7', 'pop:GNOME'];
+
+ function currentPlatformSupportsAppIndicator () {
+- if (process.platform !== 'linux') return false;
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') return false;
+ const currentDesktop = process.env.XDG_CURRENT_DESKTOP;
+
+ if (!currentDesktop) return false;
diff --git a/devel/electron7/files/patch-electron_lib_browser_rpc-server.js b/devel/electron7/files/patch-electron_lib_browser_rpc-server.js
new file mode 100644
index 000000000000..afb2d76256bc
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_browser_rpc-server.js
@@ -0,0 +1,11 @@
+--- electron/lib/browser/rpc-server.js.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/browser/rpc-server.js
+@@ -484,7 +484,7 @@ const allowedClipboardMethods = (() => {
+ switch (process.platform) {
+ case 'darwin':
+ return new Set(['readFindText', 'writeFindText']);
+- case 'linux':
++ case 'linux': case 'freebsd':
+ return new Set(Object.keys(clipboard));
+ default:
+ return new Set();
diff --git a/devel/electron7/files/patch-electron_lib_common_api_clipboard.js b/devel/electron7/files/patch-electron_lib_common_api_clipboard.js
new file mode 100644
index 000000000000..0ee1d655c0fb
--- /dev/null
+++ b/devel/electron7/files/patch-electron_lib_common_api_clipboard.js
@@ -0,0 +1,11 @@
+--- electron/lib/common/api/clipboard.js.orig 2020-03-24 05:00:48 UTC
++++ electron/lib/common/api/clipboard.js
+@@ -14,7 +14,7 @@ if (process.type === 'renderer') {
+ };
+ };
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // On Linux we could not access clipboard in renderer process.
+ for (const method of Object.keys(clipboard)) {
+ clipboard[method] = makeRemoteMethod(method);
diff --git a/devel/electron7/files/patch-electron_script_lib_config.py b/devel/electron7/files/patch-electron_script_lib_config.py
new file mode 100644
index 000000000000..6399d1561ede
--- /dev/null
+++ b/devel/electron7/files/patch-electron_script_lib_config.py
@@ -0,0 +1,12 @@
+--- electron/script/lib/config.py.orig 2019-12-19 14:49:00 UTC
++++ electron/script/lib/config.py
+@@ -21,6 +21,9 @@ BASE_URL = os.getenv('LIBCHROMIUMCONTENT_MIRROR') or \
+ PLATFORM = {
+ 'cygwin': 'win32',
+ 'darwin': 'darwin',
++ 'freebsd11': 'freebsd',
++ 'freebsd12': 'freebsd',
++ 'freebsd13': 'freebsd',
+ 'linux': 'linux',
+ 'linux2': 'linux',
+ 'win32': 'win32',
diff --git a/devel/electron7/files/patch-electron_script_lib_utils.js b/devel/electron7/files/patch-electron_script_lib_utils.js
new file mode 100644
index 000000000000..4d081fa807b3
--- /dev/null
+++ b/devel/electron7/files/patch-electron_script_lib_utils.js
@@ -0,0 +1,11 @@
+--- electron/script/lib/utils.js.orig 2020-03-24 05:00:48 UTC
++++ electron/script/lib/utils.js
+@@ -16,7 +16,7 @@ function getElectronExec () {
+ return `out/${OUT_DIR}/Electron.app/Contents/MacOS/Electron`;
+ case 'win32':
+ return `out/${OUT_DIR}/electron.exe`;
+- case 'linux':
++ case 'linux': case 'freebsd':
+ return `out/${OUT_DIR}/electron`;
+ default:
+ throw new Error('Unknown platform');
diff --git a/devel/electron7/files/patch-electron_script_spec-runner.js b/devel/electron7/files/patch-electron_script_spec-runner.js
new file mode 100644
index 000000000000..b258b6dfcad2
--- /dev/null
+++ b/devel/electron7/files/patch-electron_script_spec-runner.js
@@ -0,0 +1,11 @@
+--- electron/script/spec-runner.js.orig 2020-03-24 05:00:48 UTC
++++ electron/script/spec-runner.js
+@@ -115,7 +115,7 @@ async function runElectronTests () {
+ async function runRemoteBasedElectronTests () {
+ let exe = path.resolve(BASE, utils.getElectronExec());
+ const runnerArgs = ['electron/spec', ...unknownArgs.slice(2)];
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ runnerArgs.unshift(path.resolve(__dirname, 'dbus_mock.py'), exe);
+ exe = 'python';
+ }
diff --git a/devel/electron7/files/patch-electron_shell_app_atom__main.cc b/devel/electron7/files/patch-electron_shell_app_atom__main.cc
new file mode 100644
index 000000000000..744d8967b647
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_app_atom__main.cc
@@ -0,0 +1,35 @@
+--- electron/shell/app/atom_main.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/app/atom_main.cc
+@@ -26,12 +26,12 @@
+ #include "shell/app/atom_main_delegate.h"
+ #include "shell/app/command_line_args.h"
+ #include "shell/common/crash_reporter/win/crash_service_main.h"
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+ #include <unistd.h>
+ #include <cstdio>
+ #include "content/public/app/content_main.h"
+ #include "shell/app/atom_main_delegate.h" // NOLINT
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+ #include <mach-o/dyld.h>
+ #include <unistd.h>
+ #include <cstdio>
+@@ -168,7 +168,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, w
+ return content::ContentMain(params);
+ }
+
+-#elif defined(OS_LINUX) // defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_BSD) // defined(OS_WIN)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
+@@ -189,7 +189,7 @@ int main(int argc, char* argv[]) {
+ return content::ContentMain(params);
+ }
+
+-#else // defined(OS_LINUX)
++#else // defined(OS_LINUX) || defined(OS_BSD)
+
+ int main(int argc, char* argv[]) {
+ FixStdioStreams();
diff --git a/devel/electron7/files/patch-electron_shell_app_atom__main__delegate.cc b/devel/electron7/files/patch-electron_shell_app_atom__main__delegate.cc
new file mode 100644
index 000000000000..d7888d6c22fd
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_app_atom__main__delegate.cc
@@ -0,0 +1,29 @@
+--- electron/shell/app/atom_main_delegate.cc.orig 2020-02-28 00:07:16 UTC
++++ electron/shell/app/atom_main_delegate.cc
+@@ -8,7 +8,7 @@
+ #include <memory>
+ #include <string>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
+@@ -205,7 +205,7 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_
+ base::win::PinUser32();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Check for --no-sandbox parameter when running as root.
+ if (getuid() == 0 && IsSandboxEnabled(command_line))
+ LOG(FATAL) << "Running as root without --"
+@@ -245,7 +245,7 @@ void AtomMainDelegate::PostEarlyInitialization(bool is
+ ui::ResourceBundle::GetSharedInstance().GetLocaleFilePath(locale, true);
+ if (!locale_file_path.empty()) {
+ custom_locale = locale;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ /* When built with USE_GLIB, libcc's GetApplicationLocaleInternal() uses
+ * glib's g_get_language_names(), which keys off of getenv("LC_ALL") */
+ g_setenv("LC_ALL", custom_locale.c_str(), TRUE);
diff --git a/devel/electron7/files/patch-electron_shell_app_node__main.cc b/devel/electron7/files/patch-electron_shell_app_node__main.cc
new file mode 100644
index 000000000000..feaf8606a395
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_app_node__main.cc
@@ -0,0 +1,20 @@
+--- electron/shell/app/node_main.cc.orig 2020-04-29 19:04:02 UTC
++++ electron/shell/app/node_main.cc
+@@ -32,7 +32,7 @@
+
+ namespace electron {
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ void AddExtraParameter(const std::string& key, const std::string& value) {
+ crash_reporter::CrashReporter::GetInstance()->AddExtraParameter(key, value);
+ }
+@@ -105,7 +105,7 @@ int NodeMain(int argc, char* argv[]) {
+ auto reporter = mate::Dictionary::CreateEmpty(gin_env.isolate());
+ reporter.SetMethod("start", &crash_reporter::CrashReporter::StartInstance);
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ reporter.SetMethod("addExtraParameter", &AddExtraParameter);
+ reporter.SetMethod("removeExtraParameter", &RemoveExtraParameter);
+ #endif
diff --git a/devel/electron7/files/patch-electron_shell_browser_api_atom__api__app.cc b/devel/electron7/files/patch-electron_shell_browser_api_atom__api__app.cc
new file mode 100644
index 000000000000..0b9f3de23310
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_api_atom__api__app.cc
@@ -0,0 +1,47 @@
+--- electron/shell/browser/api/atom_api_app.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/api/atom_api_app.cc
+@@ -599,7 +599,7 @@ void App::OnWillFinishLaunching() {
+ }
+
+ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Set the application name for audio streams shown in external
+ // applications. Only affects pulseaudio currently.
+ media::AudioManager::SetGlobalAppName(Browser::Get()->GetName());
+@@ -877,7 +877,7 @@ void App::SetPath(mate::Arguments* args,
+ }
+
+ void App::SetDesktopName(const std::string& desktop_name) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ env->SetVar("CHROME_DESKTOP", desktop_name);
+ #endif
+@@ -1201,7 +1201,7 @@ std::vector<mate::Dictionary> App::GetAppMetrics(v8::I
+ pid_dict.Set("creationTime",
+ process_metric.second->process.CreationTime().ToJsTime());
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ auto memory_info = process_metric.second->GetMemoryInfo();
+
+ mate::Dictionary memory_dict = mate::Dictionary::CreateEmpty(isolate);
+@@ -1438,7 +1438,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
+ .SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("setAboutPanelOptions",
+ base::BindRepeating(&Browser::SetAboutPanelOptions, browser))
+ .SetMethod("showAboutPanel",
+@@ -1457,7 +1457,7 @@ void App::BuildPrototype(v8::Isolate* isolate,
+ .SetMethod("getJumpListSettings", &App::GetJumpListSettings)
+ .SetMethod("setJumpList", &App::SetJumpList)
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ .SetMethod("isUnityRunning",
+ base::BindRepeating(&Browser::IsUnityRunning, browser))
+ #endif
diff --git a/devel/electron7/files/patch-electron_shell_browser_api_atom__api__web__contents.cc b/devel/electron7/files/patch-electron_shell_browser_api_atom__api__web__contents.cc
new file mode 100644
index 000000000000..e1ae0f744c26
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_api_atom__api__web__contents.cc
@@ -0,0 +1,34 @@
+--- electron/shell/browser/api/atom_api_web_contents.cc.orig 2020-05-15 00:25:58 UTC
++++ electron/shell/browser/api/atom_api_web_contents.cc
+@@ -106,11 +106,11 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
+ #include "ui/gfx/font_render_params.h"
+ #endif
+@@ -499,7 +499,7 @@ void WebContents::InitWithSessionAndOptions(
+ accept_languages.pop_back();
+ prefs->accept_languages = accept_languages;
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Update font settings.
+ static const base::NoDestructor<gfx::FontRenderParams> params(
+ gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr));
+@@ -516,7 +516,7 @@ void WebContents::InitWithSessionAndOptions(
+ base::TimeDelta interval;
+ if (ui::TextInsertionCaretBlinkPeriod(&interval))
+ prefs->caret_blink_interval = interval;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
+ prefs->caret_blink_interval = linux_ui->GetCursorBlinkInterval();
diff --git a/devel/electron7/files/patch-electron_shell_browser_api_process__metric.h b/devel/electron7/files/patch-electron_shell_browser_api_process__metric.h
new file mode 100644
index 000000000000..be7cfad493af
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_api_process__metric.h
@@ -0,0 +1,20 @@
+--- electron/shell/browser/api/process_metric.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/api/process_metric.h
+@@ -13,7 +13,7 @@
+
+ namespace electron {
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ struct ProcessMemoryInfo {
+ size_t working_set_size = 0;
+ size_t peak_working_set_size = 0;
+@@ -43,7 +43,7 @@ struct ProcessMetric {
+ std::unique_ptr<base::ProcessMetrics> metrics);
+ ~ProcessMetric();
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ ProcessMemoryInfo GetMemoryInfo() const;
+ #endif
+
diff --git a/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts.cc b/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts.cc
new file mode 100644
index 000000000000..fd14a9cc7623
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- electron/shell/browser/atom_browser_main_parts.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/atom_browser_main_parts.cc
+@@ -6,7 +6,7 @@
+
+ #include <utility>
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <glib.h> // for g_setenv()
+ #endif
+
diff --git a/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts__posix.cc b/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts__posix.cc
new file mode 100644
index 000000000000..7a997e175f36
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_atom__browser__main__parts__posix.cc
@@ -0,0 +1,20 @@
+--- electron/shell/browser/atom_browser_main_parts_posix.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/atom_browser_main_parts_posix.cc
+@@ -182,6 +182,9 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+@@ -189,6 +192,7 @@ void AtomBrowserMainParts::HandleShutdownSignals() {
+ // shadow stacks) bloat the stack frames, so we need to increase the stack
+ // size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ // TODO(viettrungluu,willchan): crbug.com/29675 - This currently leaks, so
+ // if you change this, you'll probably need to change the suppression.
diff --git a/devel/electron7/files/patch-electron_shell_browser_atom__paths.h b/devel/electron7/files/patch-electron_shell_browser_atom__paths.h
new file mode 100644
index 000000000000..c3d580cdbdd6
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_atom__paths.h
@@ -0,0 +1,18 @@
+--- electron/shell/browser/atom_paths.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/atom_paths.h
+@@ -26,13 +26,13 @@ enum {
+ DIR_USER_CACHE, // Directory where user cache can be written.
+ DIR_APP_LOGS, // Directory where app logs live
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_APP_DATA, // Application Data directory under the user profile.
+ #endif
+
+ PATH_END, // End of new paths. Those that follow redirect to base::DIR_*
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ DIR_APP_DATA = base::DIR_APP_DATA,
+ #endif
+
diff --git a/devel/electron7/files/patch-electron_shell_browser_browser.h b/devel/electron7/files/patch-electron_shell_browser_browser.h
new file mode 100644
index 000000000000..9bcc114d432a
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_browser.h
@@ -0,0 +1,33 @@
+--- electron/shell/browser/browser.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/browser.h
+@@ -186,7 +186,7 @@ class Browser : public WindowListObserver {
+
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ void ShowAboutPanel();
+ void SetAboutPanelOptions(const base::DictionaryValue& options);
+ #endif
+@@ -219,10 +219,10 @@ class Browser : public WindowListObserver {
+ PCWSTR GetAppUserModelID();
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Whether Unity launcher is running.
+ bool IsUnityRunning();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Tell the application to open a file.
+ bool OpenFile(const std::string& file_path);
+@@ -301,7 +301,7 @@ class Browser : public WindowListObserver {
+
+ std::unique_ptr<util::Promise> ready_promise_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::Value about_panel_options_;
+ #elif defined(OS_MACOSX)
+ base::DictionaryValue about_panel_options_;
diff --git a/devel/electron7/files/patch-electron_shell_browser_native__window__views.cc b/devel/electron7/files/patch-electron_shell_browser_native__window__views.cc
new file mode 100644
index 000000000000..7dbc2b217e65
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_native__window__views.cc
@@ -0,0 +1,47 @@
+--- electron/shell/browser/native_window_views.cc.orig 2020-01-22 19:14:27 UTC
++++ electron/shell/browser/native_window_views.cc
+@@ -301,7 +301,7 @@ NativeWindowViews::NativeWindowViews(const mate::Dicti
+ last_window_state_ = ui::SHOW_STATE_NORMAL;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Listen to move events.
+ aura::Window* window = GetNativeWindow();
+ if (window)
+@@ -317,7 +317,7 @@ NativeWindowViews::~NativeWindowViews() {
+ SetForwardMouseMessages(false);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1261,7 +1261,7 @@ void NativeWindowViews::OnWidgetBoundsChanged(views::W
+ }
+
+ void NativeWindowViews::OnWidgetDestroying(views::Widget* widget) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ aura::Window* window = GetNativeWindow();
+ if (window)
+ window->RemovePreTargetHandler(this);
+@@ -1354,7 +1354,7 @@ void NativeWindowViews::OnWidgetMove() {
+ void NativeWindowViews::HandleKeyboardEvent(
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (event.windows_key_code == ui::VKEY_BROWSER_BACK)
+ NotifyWindowExecuteAppCommand(kBrowserBackward);
+ else if (event.windows_key_code == ui::VKEY_BROWSER_FORWARD)
+@@ -1366,7 +1366,7 @@ void NativeWindowViews::HandleKeyboardEvent(
+ root_view_->HandleKeyEvent(event);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* event) {
+ if (event->type() != ui::ET_MOUSE_PRESSED)
+ return;
diff --git a/devel/electron7/files/patch-electron_shell_browser_native__window__views.h b/devel/electron7/files/patch-electron_shell_browser_native__window__views.h
new file mode 100644
index 000000000000..3a3868bfa528
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_native__window__views.h
@@ -0,0 +1,11 @@
+--- electron/shell/browser/native_window_views.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/native_window_views.h
+@@ -208,7 +208,7 @@ class NativeWindowViews : public NativeWindow,
+ content::WebContents*,
+ const content::NativeWebKeyboardEvent& event) override;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // ui::EventHandler:
+ void OnMouseEvent(ui::MouseEvent* event) override;
+ #endif
diff --git a/devel/electron7/files/patch-electron_shell_browser_relauncher__linux.cc b/devel/electron7/files/patch-electron_shell_browser_relauncher__linux.cc
new file mode 100644
index 000000000000..a66ef39f9b7a
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_relauncher__linux.cc
@@ -0,0 +1,32 @@
+--- electron/shell/browser/relauncher_linux.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/relauncher_linux.cc
+@@ -6,8 +6,10 @@
+
+ #include <fcntl.h>
+ #include <signal.h>
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
+ #include <sys/signalfd.h>
++#endif
+
+ #include "base/files/file_util.h"
+ #include "base/files/scoped_file.h"
+@@ -26,6 +28,10 @@ void RelauncherSynchronizeWithParent() {
+ base::ScopedFD relauncher_sync_fd(kRelauncherSyncFD);
+ static const auto signum = SIGUSR2;
+
++#if defined(__FreeBSD__)
++ PLOG(ERROR) << "signalfd & prctl";
++ fprintf(stderr, "Not Implemented signalfd & prctl in atom/browser/relauncher_linux.cc");
++#else
+ // send signum to current process when parent process ends.
+ if (HANDLE_EINTR(prctl(PR_SET_PDEATHSIG, signum)) != 0) {
+ PLOG(ERROR) << "prctl";
+@@ -50,6 +56,7 @@ void RelauncherSynchronizeWithParent() {
+
+ // Wait for the parent to exit
+ parentWaiter.Wait();
++#endif
+ }
+
+ int LaunchProgram(const StringVector& relauncher_args,
diff --git a/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.cc b/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.cc
new file mode 100644
index 000000000000..5e43f5246b0b
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.cc
@@ -0,0 +1,38 @@
+--- electron/shell/browser/ui/views/atom_views_delegate.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/ui/views/atom_views_delegate.cc
+@@ -9,7 +9,7 @@
+ #include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+ #include "ui/views/widget/native_widget_aura.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -17,7 +17,7 @@
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool IsDesktopEnvironmentUnity() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::nix::DesktopEnvironment desktop_env =
+@@ -53,7 +53,7 @@ void ViewsDelegate::NotifyMenuItemFocused(const base::
+ int item_count,
+ bool has_submenu) {}
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return NULL;
+ }
+@@ -85,7 +85,7 @@ void ViewsDelegate::OnBeforeWidgetInit(
+ }
+
+ bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Ubuntu Unity, the system always provides a title bar for maximized
+ // windows.
+ if (!maximized)
diff --git a/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.h b/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.h
new file mode 100644
index 000000000000..ce7e4bf6186e
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_ui_views_atom__views__delegate.h
@@ -0,0 +1,11 @@
+--- electron/shell/browser/ui/views/atom_views_delegate.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/ui/views/atom_views_delegate.h
+@@ -40,7 +40,7 @@ class ViewsDelegate : public views::ViewsDelegate {
+ bool IsWindowInMetro(gfx::NativeWindow window) const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ base::OnceClosure callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ #endif
+ views::NonClientFrameView* CreateDefaultNonClientFrameView(
diff --git a/devel/electron7/files/patch-electron_shell_browser_ui_views_submenu__button.cc b/devel/electron7/files/patch-electron_shell_browser_ui_views_submenu__button.cc
new file mode 100644
index 000000000000..69e4d3e87ab2
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_browser_ui_views_submenu__button.cc
@@ -0,0 +1,11 @@
+--- electron/shell/browser/ui/views/submenu_button.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/browser/ui/views/submenu_button.cc
+@@ -25,7 +25,7 @@ SubmenuButton::SubmenuButton(const base::string16& tit
+ : views::MenuButton(gfx::RemoveAcceleratorChar(title, '&', NULL, NULL),
+ menu_button_listener),
+ background_color_(background_color) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Dont' use native style border.
+ SetBorder(CreateDefaultBorder());
+ #endif
diff --git a/devel/electron7/files/patch-electron_shell_common_api_atom__api__crash__reporter.cc b/devel/electron7/files/patch-electron_shell_common_api_atom__api__crash__reporter.cc
new file mode 100644
index 000000000000..d2c3a30eb5eb
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_api_atom__api__crash__reporter.cc
@@ -0,0 +1,18 @@
+--- electron/shell/common/api/atom_api_crash_reporter.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/api/atom_api_crash_reporter.cc
+@@ -42,6 +42,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ v8::Local<v8::Context> context,
+ void* priv) {
+ using gin_util::SetMethod;
++#if !defined(OS_BSD)
+ auto reporter = base::Unretained(CrashReporter::GetInstance());
+ SetMethod(exports, "start",
+ base::BindRepeating(&CrashReporter::Start, reporter));
+@@ -58,6 +59,7 @@ void Initialize(v8::Local<v8::Object> exports,
+ base::BindRepeating(&CrashReporter::SetUploadToServer, reporter));
+ SetMethod(exports, "getUploadToServer",
+ base::BindRepeating(&CrashReporter::GetUploadToServer, reporter));
++#endif
+ }
+
+ } // namespace
diff --git a/devel/electron7/files/patch-electron_shell_common_api_electron__bindings.cc b/devel/electron7/files/patch-electron_shell_common_api_electron__bindings.cc
new file mode 100644
index 000000000000..1d818f4ed8ee
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_api_electron__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/shell/common/api/electron_bindings.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/api/electron_bindings.cc
+@@ -288,7 +288,7 @@ void ElectronBindings::DidReceiveMemoryDump(
+ if (base::GetCurrentProcId() == dump.pid()) {
+ mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
+ const auto& osdump = dump.os_dump();
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ dict.Set("residentSet", osdump.resident_set_kb);
+ #endif
+ dict.Set("private", osdump.private_footprint_kb);
diff --git a/devel/electron7/files/patch-electron_shell_common_atom__command__line.cc b/devel/electron7/files/patch-electron_shell_common_atom__command__line.cc
new file mode 100644
index 000000000000..69f4e93df3ac
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_atom__command__line.cc
@@ -0,0 +1,11 @@
+--- electron/shell/common/atom_command_line.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/atom_command_line.cc
+@@ -26,7 +26,7 @@ void AtomCommandLine::Init(int argc, base::CommandLine
+ argv_.assign(argv, argv + argc);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AtomCommandLine::InitializeFromCommandLine() {
+ argv_ = base::CommandLine::ForCurrentProcess()->argv();
diff --git a/devel/electron7/files/patch-electron_shell_common_atom__command__line.h b/devel/electron7/files/patch-electron_shell_common_atom__command__line.h
new file mode 100644
index 000000000000..c58bcecafdba
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_atom__command__line.h
@@ -0,0 +1,11 @@
+--- electron/shell/common/atom_command_line.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/atom_command_line.h
+@@ -21,7 +21,7 @@ class AtomCommandLine {
+
+ static void Init(int argc, base::CommandLine::CharType** argv);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux the command line has to be read from base::CommandLine since
+ // it is using zygote.
+ static void InitializeFromCommandLine();
diff --git a/devel/electron7/files/patch-electron_shell_common_crash__reporter_crash__reporter.cc b/devel/electron7/files/patch-electron_shell_common_crash__reporter_crash__reporter.cc
new file mode 100644
index 000000000000..3cbff5a35ab6
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_crash__reporter_crash__reporter.cc
@@ -0,0 +1,14 @@
+--- electron/shell/common/crash_reporter/crash_reporter.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/crash_reporter/crash_reporter.cc
+@@ -128,7 +128,11 @@ CrashReporter* CrashReporter::GetInstance() {
+ #endif
+
+ void CrashReporter::StartInstance(const mate::Dictionary& options) {
++#if !defined(OS_BSD)
+ auto* reporter = GetInstance();
++#else
++ CrashReporter *reporter = NULL;
++#endif
+ if (!reporter)
+ return;
+
diff --git a/devel/electron7/files/patch-electron_shell_common_node__bindings.cc b/devel/electron7/files/patch-electron_shell_common_node__bindings.cc
new file mode 100644
index 000000000000..848a1301027e
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_node__bindings.cc
@@ -0,0 +1,11 @@
+--- electron/shell/common/node_bindings.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/node_bindings.cc
+@@ -204,7 +204,7 @@ void NodeBindings::Initialize() {
+ node::g_standalone_mode = browser_env_ == BrowserEnvironment::BROWSER;
+ node::g_upstream_node_mode = false;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Get real command line in renderer process forked by zygote.
+ if (browser_env_ != BrowserEnvironment::BROWSER)
+ AtomCommandLine::InitializeFromCommandLine();
diff --git a/devel/electron7/files/patch-electron_shell_common_node__bindings__linux.cc b/devel/electron7/files/patch-electron_shell_common_node__bindings__linux.cc
new file mode 100644
index 000000000000..07eeeb073fcd
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_node__bindings__linux.cc
@@ -0,0 +1,69 @@
+--- electron/shell/common/node_bindings_linux.cc.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/node_bindings_linux.cc
+@@ -4,17 +4,31 @@
+
+ #include "shell/common/node_bindings_linux.h"
+
++#if !defined(OS_BSD)
+ #include <sys/epoll.h>
++#else
++#include <errno.h>
++#include <sys/select.h>
++#include <sys/sysctl.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#endif
+
+ namespace electron {
+
+ NodeBindingsLinux::NodeBindingsLinux(BrowserEnvironment browser_env)
++#if !defined(OS_BSD)
+ : NodeBindings(browser_env), epoll_(epoll_create(1)) {
++#else
++ : NodeBindings(browser_env) {
++#endif
++#if !defined(OS_BSD)
+ int backend_fd = uv_backend_fd(uv_loop_);
+ struct epoll_event ev = {0};
+ ev.events = EPOLLIN;
+ ev.data.fd = backend_fd;
+ epoll_ctl(epoll_, EPOLL_CTL_ADD, backend_fd, &ev);
++#endif
+ }
+
+ NodeBindingsLinux::~NodeBindingsLinux() {}
+@@ -37,6 +51,7 @@ void NodeBindingsLinux::OnWatcherQueueChanged(uv_loop_
+ }
+
+ void NodeBindingsLinux::PollEvents() {
++#if !defined(OS_BSD)
+ int timeout = uv_backend_timeout(uv_loop_);
+
+ // Wait for new libuv events.
+@@ -45,6 +60,26 @@ void NodeBindingsLinux::PollEvents() {
+ struct epoll_event ev;
+ r = epoll_wait(epoll_, &ev, 1, timeout);
+ } while (r == -1 && errno == EINTR);
++#else
++ struct timeval tv;
++ int timeout = uv_backend_timeout(uv_loop_);
++ if (timeout != -1) {
++ tv.tv_sec = timeout / 1000;
++ tv.tv_usec = (timeout % 1000) * 1000;
++ }
++
++ fd_set readset;
++ int fd = uv_backend_fd(uv_loop_);
++ FD_ZERO(&readset);
++ FD_SET(fd, &readset);
++
++ // Wait for new libuv events.
++ int r;
++ do {
++ r = select(fd + 1, &readset, nullptr, nullptr,
++ timeout == -1 ? nullptr : &tv);
++ } while (r == -1 && errno == EINTR);
++#endif
+ }
+
+ // static
diff --git a/devel/electron7/files/patch-electron_shell_common_platform__util.h b/devel/electron7/files/patch-electron_shell_common_platform__util.h
new file mode 100644
index 000000000000..a4f8a940fd59
--- /dev/null
+++ b/devel/electron7/files/patch-electron_shell_common_platform__util.h
@@ -0,0 +1,11 @@
+--- electron/shell/common/platform_util.h.orig 2019-12-13 19:48:14 UTC
++++ electron/shell/common/platform_util.h
+@@ -50,7 +50,7 @@ bool GetLoginItemEnabled();
+ bool SetLoginItemEnabled(bool enabled);
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a success flag.
+ // Unlike libgtkui, does *not* use "chromium-browser.desktop" as a fallback.
+ bool GetDesktopName(std::string* setme);
diff --git a/devel/electron7/files/patch-electron_spec-main_api-app-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-app-spec.ts
new file mode 100644
index 000000000000..cb6e31eb56d3
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-app-spec.ts
@@ -0,0 +1,100 @@
+--- electron/spec-main/api-app-spec.ts.orig 2020-06-01 19:28:27 UTC
++++ electron/spec-main/api-app-spec.ts
+@@ -130,7 +130,7 @@ describe('app module', () => {
+ describe('app.getLocaleCountryCode()', () => {
+ it('should be empty or have length of two', () => {
+ let expectedLength = 2
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ // Linux CI machines have no locale.
+ expectedLength = 0
+ }
+@@ -192,7 +192,7 @@ describe('app module', () => {
+ })
+
+ it('exits gracefully', async function () {
+- if (!['darwin', 'linux'].includes(process.platform)) {
++ if (!['darwin', 'linux', 'freebsd'].includes(process.platform)) {
+ this.skip()
+ return
+ }
+@@ -527,7 +527,7 @@ describe('app module', () => {
+ describe('app.badgeCount', () => {
+ const platformIsNotSupported =
+ (process.platform === 'win32') ||
+- (process.platform === 'linux' && !app.isUnityRunning())
++ ((process.platform === 'linux' || process.platform === 'freebsd') && !app.isUnityRunning())
+ const platformIsSupported = !platformIsNotSupported
+
+ const expectedBadgeCount = 42
+@@ -561,7 +561,7 @@ describe('app module', () => {
+ ]
+
+ before(function () {
+- if (process.platform === 'linux' || process.mas) this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.mas) this.skip()
+ })
+
+ beforeEach(() => {
+@@ -637,7 +637,7 @@ describe('app module', () => {
+ })
+
+ describe('accessibilitySupportEnabled property', () => {
+- if (process.platform === 'linux') return
++ if (process.platform === 'linux' || process.platform === 'freebsd') return
+
+ it('returns whether the Chrome has accessibility APIs enabled', () => {
+ expect(app.accessibilitySupportEnabled).to.be.a('boolean')
+@@ -674,6 +674,7 @@ describe('app module', () => {
+ const logsPaths = {
+ 'darwin': path.resolve(homedir(), 'Library', 'Logs'),
+ 'linux': path.resolve(homedir(), 'AppData', app.name),
++ 'freebsd': path.resolve(homedir(), 'AppData', app.name),
+ 'win32': path.resolve(homedir(), 'AppData', app.name),
+ }
+
+@@ -732,7 +733,7 @@ describe('app module', () => {
+ let w: BrowserWindow
+
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip()
+ }
+ })
+@@ -926,7 +927,7 @@ describe('app module', () => {
+ // doesn't affect nested `describe`s.
+ beforeEach(function () {
+ // FIXME Get these specs running on Linux CI
+- if (process.platform === 'linux' && isCI) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && isCI) {
+ this.skip()
+ }
+ })
+@@ -996,7 +997,7 @@ describe('app module', () => {
+ expect(entry.memory).to.have.property('privateBytes').that.is.greaterThan(0)
+ }
+
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ expect(entry.sandboxed).to.be.a('boolean')
+ }
+
+@@ -1063,7 +1064,7 @@ describe('app module', () => {
+
+ it('succeeds with complete GPUInfo', async () => {
+ const completeInfo = await getGPUInfo('complete')
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // For linux and macOS complete info is same as basic info
+ await verifyBasicGPUInfo(completeInfo)
+ const basicInfo = await getGPUInfo('basic')
+@@ -1091,7 +1092,7 @@ describe('app module', () => {
+ const socketPath = process.platform === 'win32' ? '\\\\.\\pipe\\electron-mixed-sandbox' : '/tmp/electron-mixed-sandbox'
+
+ beforeEach(function (done) {
+- if (process.platform === 'linux' && (process.arch === 'arm64' || process.arch === 'arm')) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && (process.arch === 'arm64' || process.arch === 'arm')) {
+ // Our ARM tests are run on VSTS rather than CircleCI, and the Docker
+ // setup on VSTS disallows syscalls that Chrome requires for setting up
+ // sandboxing.
diff --git a/devel/electron7/files/patch-electron_spec-main_api-browser-window-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-browser-window-spec.ts
new file mode 100644
index 000000000000..358f449b006c
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-browser-window-spec.ts
@@ -0,0 +1,74 @@
+--- electron/spec-main/api-browser-window-spec.ts.orig 2020-06-01 19:28:27 UTC
++++ electron/spec-main/api-browser-window-spec.ts
+@@ -878,7 +878,7 @@ describe('BrowserWindow module', () => {
+ w.setPosition(pos[0], pos[1])
+ })
+ })
+- ifdescribe(process.platform !== 'linux')(`Maximized state`, () => {
++ ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')(`Maximized state`, () => {
+ it(`checks normal bounds when maximized`, (done) => {
+ const bounds = w.getBounds()
+ w.once('maximize', () => {
+@@ -901,7 +901,7 @@ describe('BrowserWindow module', () => {
+ w.maximize()
+ })
+ })
+- ifdescribe(process.platform !== 'linux')(`Minimized state`, () => {
++ ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')(`Minimized state`, () => {
+ it(`checks normal bounds when minimized`, (done) => {
+ const bounds = w.getBounds()
+ w.once('minimize', () => {
+@@ -1368,7 +1368,7 @@ describe('BrowserWindow module', () => {
+ describe('BrowserWindow.setOpacity(opacity)', () => {
+ afterEach(closeAllWindows)
+
+- ifdescribe(process.platform !== 'linux')(('Windows and Mac'), () => {
++ ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')(('Windows and Mac'), () => {
+ it('make window with initial opacity', () => {
+ const w = new BrowserWindow({ show: false, opacity: 0.5 })
+ expect(w.getOpacity()).to.equal(0.5)
+@@ -1394,7 +1394,7 @@ describe('BrowserWindow module', () => {
+ })
+ })
+
+- ifdescribe(process.platform === 'linux')(('Linux'), () => {
++ ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')(('Linux'), () => {
+ it('sets 1 regardless of parameter', () => {
+ const w = new BrowserWindow({ show: false })
+ w.setOpacity(0)
+@@ -2189,7 +2189,7 @@ describe('BrowserWindow module', () => {
+ expect(test.version).to.equal(process.version)
+ expect(test.versions).to.deep.equal(process.versions)
+
+- if (process.platform === 'linux' && test.osSandbox) {
++ if ((process.platform === 'linux' || process.platform === 'freebsd') && test.osSandbox) {
+ expect(test.creationTime).to.be.null('creation time')
+ expect(test.systemMemoryInfo).to.be.null('system memory info')
+ } else {
+@@ -2592,7 +2592,7 @@ describe('BrowserWindow module', () => {
+ expect(visibilityState).to.equal('visible')
+ })
+
+- ifit(!(isCI && process.platform === 'linux'))('visibilityState changes when window is minimized', async () => {
++ ifit(!(isCI && (process.platform === 'linux' || process.platform === 'freebsd')))('visibilityState changes when window is minimized', async () => {
+ const w = new BrowserWindow({
+ width: 100,
+ height: 100,
+@@ -2692,7 +2692,7 @@ describe('BrowserWindow module', () => {
+ })
+ })
+
+- ifdescribe(process.platform !== 'linux')('max/minimize events', () => {
++ ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('max/minimize events', () => {
+ afterEach(closeAllWindows)
+ it('emits an event when window is maximized', (done) => {
+ const w = new BrowserWindow({show: false})
+@@ -3232,7 +3232,7 @@ describe('BrowserWindow module', () => {
+ })
+ })
+
+- ifdescribe(process.platform !== 'linux')('window states (excluding Linux)', () => {
++ ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('window states (excluding Linux)', () => {
+ // Not implemented on Linux.
+ afterEach(closeAllWindows)
+
diff --git a/devel/electron7/files/patch-electron_spec-main_api-content-tracing-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-content-tracing-spec.ts
new file mode 100644
index 000000000000..d50d8b1ef401
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-content-tracing-spec.ts
@@ -0,0 +1,11 @@
+--- electron/spec-main/api-content-tracing-spec.ts.orig 2019-12-13 19:48:14 UTC
++++ electron/spec-main/api-content-tracing-spec.ts
+@@ -11,7 +11,7 @@ const timeout = async (milliseconds: number) => {
+ }
+
+ // FIXME: The tests are skipped on arm/arm64.
+-ifdescribe(!(process.platform === 'linux' && ['arm', 'arm64'].includes(process.arch)))('contentTracing', () => {
++ifdescribe(!((process.platform === 'linux' || process.platform === 'freebsd') && ['arm', 'arm64'].includes(process.arch)))('contentTracing', () => {
+ const record = async (options: TraceConfig | TraceCategoriesAndOptions, outputFilePath: string | undefined, recordTimeInMilliseconds = 1e1) => {
+ await app.whenReady()
+
diff --git a/devel/electron7/files/patch-electron_spec-main_api-net-log-spec.js b/devel/electron7/files/patch-electron_spec-main_api-net-log-spec.js
new file mode 100644
index 000000000000..e5f8de947a32
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-net-log-spec.js
@@ -0,0 +1,29 @@
+--- electron/spec-main/api-net-log-spec.js.orig 2020-02-10 19:08:32 UTC
++++ electron/spec-main/api-net-log-spec.js
+@@ -124,7 +124,7 @@ describe('netLog module', () => {
+ })
+
+ it('should begin and end logging automatically when --log-net-log is passed', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -144,7 +144,7 @@ describe('netLog module', () => {
+ })
+
+ it('should begin and end logging automtically when --log-net-log is passed, and behave correctly when .startLogging() and .stopLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
+@@ -167,7 +167,7 @@ describe('netLog module', () => {
+ })
+
+ it('should end logging automatically when only .startLogging() is called', done => {
+- if (isCI && process.platform === 'linux') {
++ if (isCI && (process.platform === 'linux' || process.platform === 'freebsd')) {
+ done()
+ return
+ }
diff --git a/devel/electron7/files/patch-electron_spec-main_api-screen-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-screen-spec.ts
new file mode 100644
index 000000000000..20af745ccb8b
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-screen-spec.ts
@@ -0,0 +1,38 @@
+--- electron/spec-main/api-screen-spec.ts.orig 2019-12-13 19:48:14 UTC
++++ electron/spec-main/api-screen-spec.ts
+@@ -17,7 +17,7 @@ describe('screen module', () => {
+ })
+
+ it('has the correct non-object properties', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.property('scaleFactor').that.is.a('number')
+@@ -33,7 +33,7 @@ describe('screen module', () => {
+ })
+
+ it('has a size object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.property('size').that.is.an('object')
+@@ -43,7 +43,7 @@ describe('screen module', () => {
+ })
+
+ it('has a workAreaSize object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.property('workAreaSize').that.is.an('object')
+@@ -53,7 +53,7 @@ describe('screen module', () => {
+ })
+
+ it('has a bounds object property', function () {
+- if (process.platform === 'linux') this.skip()
++ if (process.platform === 'linux' || process.platform === 'freebsd') this.skip()
+ const display = screen.getPrimaryDisplay()
+
+ expect(display).to.have.property('bounds').that.is.an('object')
diff --git a/devel/electron7/files/patch-electron_spec-main_api-tray-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-tray-spec.ts
new file mode 100644
index 000000000000..4fbf02b6b9a2
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-tray-spec.ts
@@ -0,0 +1,11 @@
+--- electron/spec-main/api-tray-spec.ts.orig 2020-04-29 19:04:02 UTC
++++ electron/spec-main/api-tray-spec.ts
+@@ -63,7 +63,7 @@ describe('tray module', () => {
+ describe('tray.getBounds()', () => {
+ afterEach(() => { tray.destroy() })
+
+- ifit(process.platform !== 'linux') ('returns a bounds object', function () {
++ ifit(process.platform !== 'linux' && process.platform !== 'freebsd') ('returns a bounds object', function () {
+ const bounds = tray.getBounds()
+ expect(bounds).to.be.an('object').and.to.have.all.keys('x', 'y', 'width', 'height');
+ })
diff --git a/devel/electron7/files/patch-electron_spec-main_api-web-contents-spec.ts b/devel/electron7/files/patch-electron_spec-main_api-web-contents-spec.ts
new file mode 100644
index 000000000000..66ed9adfc0ed
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_api-web-contents-spec.ts
@@ -0,0 +1,11 @@
+--- electron/spec-main/api-web-contents-spec.ts.orig 2020-02-22 04:58:58 UTC
++++ electron/spec-main/api-web-contents-spec.ts
+@@ -124,7 +124,7 @@ describe('webContents module', () => {
+ }).to.throw('webContents.print(): Invalid optional callback provided.')
+ })
+
+- ifit(process.platform !== 'linux')('throws when an invalid deviceName is passed', () => {
++ ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('throws when an invalid deviceName is passed', () => {
+ expect(() => {
+ w.webContents.print({ deviceName: 'i-am-a-nonexistent-printer' }, () => {})
+ }).to.throw('webContents.print(): Invalid deviceName provided.')
diff --git a/devel/electron7/files/patch-electron_spec-main_version-bump-spec.ts b/devel/electron7/files/patch-electron_spec-main_version-bump-spec.ts
new file mode 100644
index 000000000000..a69137c0d07e
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_version-bump-spec.ts
@@ -0,0 +1,18 @@
+--- electron/spec-main/version-bump-spec.ts.orig 2019-12-13 19:48:14 UTC
++++ electron/spec-main/version-bump-spec.ts
+@@ -43,7 +43,7 @@ describe('version-bumper', () => {
+
+ // On macOS Circle CI we don't have a real git environment due to running
+ // gclient sync on a linux machine. These tests therefore don't run as expected.
+- ifdescribe(!(process.platform === 'linux' && process.arch === 'arm') && !(isCI && process.platform === 'darwin'))('nextVersion', () => {
++ ifdescribe(!((process.platform === 'linux' || process.platform === 'freebsd') && process.arch === 'arm') && !(isCI && process.platform === 'darwin'))('nextVersion', () => {
+ const nightlyPattern = /[0-9.]*(-nightly.(\d{4})(\d{2})(\d{2}))$/g
+ const betaPattern = /[0-9.]*(-beta[0-9.]*)/g
+
+@@ -120,4 +120,4 @@ describe('version-bumper', () => {
+ ).to.be.rejectedWith('Invalid bump type.')
+ })
+ })
+-})
+\ No newline at end of file
++})
diff --git a/devel/electron7/files/patch-electron_spec-main_visibility-state-spec.ts b/devel/electron7/files/patch-electron_spec-main_visibility-state-spec.ts
new file mode 100644
index 000000000000..262c870e7e0d
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec-main_visibility-state-spec.ts
@@ -0,0 +1,11 @@
+--- electron/spec-main/visibility-state-spec.ts.orig 2019-12-13 19:48:14 UTC
++++ electron/spec-main/visibility-state-spec.ts
+@@ -9,7 +9,7 @@ import { ifdescribe } from './spec-helpers';
+
+ // visibilityState specs pass on linux with a real window manager but on CI
+ // the environment does not let these specs pass
+-ifdescribe(process.platform !== 'linux' || !isCI)('document.visibilityState', () => {
++ifdescribe((process.platform !== 'linux' && process.platform !== 'freebsd') || !isCI)('document.visibilityState', () => {
+ let w: BrowserWindow
+
+ afterEach(() => {
diff --git a/devel/electron7/files/patch-electron_spec_api-clipboard-spec.js b/devel/electron7/files/patch-electron_spec_api-clipboard-spec.js
new file mode 100644
index 000000000000..99b3dbc410fd
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-clipboard-spec.js
@@ -0,0 +1,38 @@
+--- electron/spec/api-clipboard-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-clipboard-spec.js
+@@ -34,7 +34,7 @@ describe('clipboard module', () => {
+ describe('clipboard.readHTML()', () => {
+ it('returns markup correctly', () => {
+ const text = '<string>Hi</string>';
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>';
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><string>Hi</string>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><string>Hi</string>' : '<string>Hi</string>';
+ clipboard.writeHTML(text);
+ expect(clipboard.readHTML()).to.equal(markup);
+ });
+@@ -50,7 +50,7 @@ describe('clipboard module', () => {
+
+ describe('clipboard.readBookmark', () => {
+ before(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip();
+ }
+ });
+@@ -76,7 +76,7 @@ describe('clipboard module', () => {
+ const rtf = '{\\rtf1\\utf8 text}';
+ const p = path.join(fixtures, 'assets', 'logo.png');
+ const i = nativeImage.createFromPath(p);
+- const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : process.platform === 'linux' ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>';
++ const markup = process.platform === 'darwin' ? "<meta charset='utf-8'><b>Hi</b>" : (process.platform === 'linux' || process.platform === 'freebsd') ? '<meta http-equiv="content-type" ' + 'content="text/html; charset=utf-8"><b>Hi</b>' : '<b>Hi</b>';
+ const bookmark = { title: 'a title', url: 'test' };
+ clipboard.write({
+ text: 'test',
+@@ -91,7 +91,7 @@ describe('clipboard module', () => {
+ expect(clipboard.readRTF()).to.equal(rtf);
+ expect(clipboard.readImage().toDataURL()).to.equal(i.toDataURL());
+
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ expect(clipboard.readBookmark()).to.deep.equal(bookmark);
+ }
+ });
diff --git a/devel/electron7/files/patch-electron_spec_api-crash-reporter-spec.js b/devel/electron7/files/patch-electron_spec_api-crash-reporter-spec.js
new file mode 100644
index 000000000000..63485c3e9122
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-crash-reporter-spec.js
@@ -0,0 +1,101 @@
+--- electron/spec/api-crash-reporter-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-crash-reporter-spec.js
+@@ -19,7 +19,7 @@ describe('crashReporter module', () => {
+ if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return;
+
+ // TODO(alexeykuzmin): [Ch66] Fails. Fix it and enable back.
+- if (process.platform === 'linux') return;
++ if (process.platform === 'linux' || process.platform === 'freebsd') return;
+
+ let originalTempDirectory = null;
+ let tempDirectory = null;
+@@ -90,7 +90,7 @@ describe('crashReporter module', () => {
+ let dumpFile;
+ let crashesDir = crashReporter.getCrashesDirectory();
+ const existingDumpFiles = new Set();
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ // crashpad puts the dump files in the "completed" subdirectory
+ if (process.platform === 'darwin') {
+ crashesDir = path.join(crashesDir, 'completed');
+@@ -101,7 +101,7 @@ describe('crashReporter module', () => {
+ }
+ const testDone = (uploaded) => {
+ if (uploaded) return done(new Error('Uploaded crash report'));
+- if (process.platform !== 'linux') crashReporter.setUploadToServer(true);
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') crashReporter.setUploadToServer(true);
+ expect(fs.existsSync(dumpFile)).to.be.true();
+ done();
+ };
+@@ -151,7 +151,7 @@ describe('crashReporter module', () => {
+ });
+
+ it('should send minidump with updated extra parameters when node processes crash', function (done) {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -305,7 +305,7 @@ describe('crashReporter module', () => {
+ expect(() => require('electron').crashReporter.getUploadToServer()).to.throw();
+ });
+ it('returns true when uploadToServer is set to true', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -319,7 +319,7 @@ describe('crashReporter module', () => {
+ expect(crashReporter.getUploadToServer()).to.be.true();
+ });
+ it('returns false when uploadToServer is set to false', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -340,7 +340,7 @@ describe('crashReporter module', () => {
+ expect(() => require('electron').crashReporter.setUploadToServer('arg')).to.throw();
+ });
+ it('sets uploadToServer false when called with false', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -355,7 +355,7 @@ describe('crashReporter module', () => {
+ expect(crashReporter.getUploadToServer()).to.be.false();
+ });
+ it('sets uploadToServer true when called with true', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -382,7 +382,7 @@ describe('crashReporter module', () => {
+ expect(parameters).to.be.an('object');
+ });
+ it('adds a parameter to current parameters', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -397,7 +397,7 @@ describe('crashReporter module', () => {
+ expect(crashReporter.getParameters()).to.have.a.property('hello');
+ });
+ it('removes a parameter from current parameters', function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -490,7 +490,7 @@ const startServer = ({ callback, processType, done, pr
+ server.listen(port, '127.0.0.1', () => {
+ port = server.address().port;
+ remote.process.port = port;
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ crashReporter.start({
+ companyName: 'Umbrella Corporation',
+ submitURL: 'http://127.0.0.1:' + port
diff --git a/devel/electron7/files/patch-electron_spec_api-notification-dbus-spec.js b/devel/electron7/files/patch-electron_spec_api-notification-dbus-spec.js
new file mode 100644
index 000000000000..a1e824e5d8be
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-notification-dbus-spec.js
@@ -0,0 +1,10 @@
+--- electron/spec/api-notification-dbus-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-notification-dbus-spec.js
+@@ -14,6 +14,7 @@ const { remote } = require('electron');
+ const { app } = remote;
+
+ const skip = process.platform !== 'linux' ||
++ process.platform !== 'freebsd' ||
+ process.arch === 'ia32' ||
+ process.arch.indexOf('arm') === 0 ||
+ !process.env.DBUS_SESSION_BUS_ADDRESS;
diff --git a/devel/electron7/files/patch-electron_spec_api-power-monitor-spec.js b/devel/electron7/files/patch-electron_spec_api-power-monitor-spec.js
new file mode 100644
index 000000000000..6effef210c7e
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-power-monitor-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-power-monitor-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-power-monitor-spec.js
+@@ -14,7 +14,7 @@ const Promise = require('bluebird');
+ const { expect } = chai;
+ chai.use(dirtyChai);
+
+-const skip = process.platform !== 'linux' || !process.env.DBUS_SYSTEM_BUS_ADDRESS;
++const skip = (process.platform !== 'linux' && process.platform !== 'freebsd') || !process.env.DBUS_SYSTEM_BUS_ADDRESS;
+
+ describe('powerMonitor', () => {
+ let logindMock, dbusMockPowerMonitor, getCalls, emitSignal, reset;
diff --git a/devel/electron7/files/patch-electron_spec_api-process-spec.js b/devel/electron7/files/patch-electron_spec_api-process-spec.js
new file mode 100644
index 000000000000..c8803311d046
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-process-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-process-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-process-spec.js
+@@ -50,7 +50,7 @@ describe('process module', () => {
+ it('resolves promise successfully with valid data', async () => {
+ const memoryInfo = await process.getProcessMemoryInfo();
+ expect(memoryInfo).to.be.an('object');
+- if (process.platform === 'linux' || process.platform === 'windows') {
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'windows') {
+ expect(memoryInfo.residentSet).to.be.a('number').greaterThan(0);
+ }
+ expect(memoryInfo.private).to.be.a('number').greaterThan(0);
diff --git a/devel/electron7/files/patch-electron_spec_api-shell-spec.js b/devel/electron7/files/patch-electron_spec_api-shell-spec.js
new file mode 100644
index 000000000000..687810bc3c8c
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-shell-spec.js
@@ -0,0 +1,23 @@
+--- electron/spec/api-shell-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-shell-spec.js
+@@ -42,7 +42,7 @@ describe('shell module', () => {
+ await closeWindow(w);
+ w = null;
+ // reset env vars to prevent side effects
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ process.env.DE = envVars.de;
+ process.env.BROWSER = envVars.browser;
+ process.env.DISPLAY = envVars.display;
+@@ -54,6 +54,11 @@ describe('shell module', () => {
+ let requestReceived;
+ if (process.platform === 'linux') {
+ process.env.BROWSER = '/bin/true';
++ process.env.DE = 'generic';
++ process.env.DISPLAY = '';
++ requestReceived = Promise.resolve();
++ } else if (process.platform === 'freebsd') {
++ process.env.BROWSER = '/usr/bin/true';
+ process.env.DE = 'generic';
+ process.env.DISPLAY = '';
+ requestReceived = Promise.resolve();
diff --git a/devel/electron7/files/patch-electron_spec_api-subframe-spec.js b/devel/electron7/files/patch-electron_spec_api-subframe-spec.js
new file mode 100644
index 000000000000..924543f97da6
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_api-subframe-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/api-subframe-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/api-subframe-spec.js
+@@ -188,7 +188,7 @@ describe('cross-site frame sandboxing', () => {
+ let server = null;
+
+ beforeEach(function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip();
+ }
+ });
diff --git a/devel/electron7/files/patch-electron_spec_chromium-spec.js b/devel/electron7/files/patch-electron_spec_chromium-spec.js
new file mode 100644
index 000000000000..72a0b169d90f
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_chromium-spec.js
@@ -0,0 +1,27 @@
+--- electron/spec/chromium-spec.js.orig 2020-05-15 00:25:58 UTC
++++ electron/spec/chromium-spec.js
+@@ -828,7 +828,7 @@ describe('chromium feature', () => {
+ });
+
+ it('can be get as context in canvas', () => {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // FIXME(alexeykuzmin): Skip the test.
+ // this.skip()
+ return;
+@@ -1413,12 +1413,13 @@ describe('font fallback', () => {
+ expect(fonts[0].familyName).to.equal({
+ 'win32': 'Arial',
+ 'darwin': 'Helvetica',
+- 'linux': 'DejaVu Sans' // I think this depends on the distro? We don't specify a default.
++ 'linux': 'DejaVu Sans', // I think this depends on the distro? We don't specify a default.
++ 'freebsd': 'DejaVu Sans'
+ }[process.platform]);
+ });
+
+ it('should fall back to Japanese font for sans-serif Japanese script', async function () {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return this.skip();
+ }
+ const html = `
diff --git a/devel/electron7/files/patch-electron_spec_fixtures_api_crash-restart.html b/devel/electron7/files/patch-electron_spec_fixtures_api_crash-restart.html
new file mode 100644
index 000000000000..560ff344917b
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_fixtures_api_crash-restart.html
@@ -0,0 +1,11 @@
+--- electron/spec/fixtures/api/crash-restart.html.orig 2019-12-13 19:48:14 UTC
++++ electron/spec/fixtures/api/crash-restart.html
+@@ -19,7 +19,7 @@ crashReporter.start({
+ })
+
+ setImmediate(() => {
+- if (process.platform !== 'linux') {
++ if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ crashReporter.addExtraParameter('extra2', 'extra2')
+ crashReporter.removeExtraParameter('extra3')
+ } else {
diff --git a/devel/electron7/files/patch-electron_spec_fixtures_module_crash.js b/devel/electron7/files/patch-electron_spec_fixtures_module_crash.js
new file mode 100644
index 000000000000..e48d962649db
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_fixtures_module_crash.js
@@ -0,0 +1,11 @@
+--- electron/spec/fixtures/module/crash.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/fixtures/module/crash.js
+@@ -10,7 +10,7 @@ process.crashReporter.start({
+ }
+ });
+
+-if (process.platform !== 'linux') {
++if (process.platform !== 'linux' && process.platform !== 'freebsd') {
+ process.crashReporter.addExtraParameter('newExtra', 'newExtra');
+ process.crashReporter.addExtraParameter('removeExtra', 'removeExtra');
+ process.crashReporter.removeExtraParameter('removeExtra');
diff --git a/devel/electron7/files/patch-electron_spec_node-spec.js b/devel/electron7/files/patch-electron_spec_node-spec.js
new file mode 100644
index 000000000000..59b8335bd095
--- /dev/null
+++ b/devel/electron7/files/patch-electron_spec_node-spec.js
@@ -0,0 +1,11 @@
+--- electron/spec/node-spec.js.orig 2020-03-24 05:00:48 UTC
++++ electron/spec/node-spec.js
+@@ -193,7 +193,7 @@ describe('node feature', () => {
+ });
+
+ describe('child_process.exec', () => {
+- (process.platform === 'linux' ? it : it.skip)('allows executing a setuid binary from non-sandboxed renderer', () => {
++ (process.platform === 'linux' || process.platform === 'freebsd' ? it : it.skip)('allows executing a setuid binary from non-sandboxed renderer', () => {
+ // Chrome uses prctl(2) to set the NO_NEW_PRIVILEGES flag on Linux (see
+ // https://github.com/torvalds/linux/blob/40fde647cc/Documentation/userspace-api/no_new_privs.rst).
+ // We disable this for unsandboxed processes, which the remote tests
diff --git a/devel/electron7/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc b/devel/electron7/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
new file mode 100644
index 000000000000..1544a8b2a5d7
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/declarative_webrequest/webrequest_action.cc.orig 2019-12-12 12:39:43 UTC
++++ extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -27,7 +27,11 @@
+ #include "extensions/common/extension.h"
+ #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+ #include "net/http/http_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using extension_web_request_api_helpers::EventResponseDelta;
+
diff --git a/devel/electron7/files/patch-extensions_browser_api_messaging_message__service.cc b/devel/electron7/files/patch-extensions_browser_api_messaging_message__service.cc
new file mode 100644
index 000000000000..0fc5098ff86e
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_browser_api_messaging_message__service.cc
@@ -0,0 +1,34 @@
+--- extensions/browser/api/messaging/message_service.cc.orig 2019-12-12 12:39:43 UTC
++++ extensions/browser/api/messaging/message_service.cc
+@@ -61,7 +61,7 @@ namespace {
+
+ const char kReceivingEndDoesntExistError[] =
+ "Could not establish connection. Receiving end does not exist.";
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kMissingPermissionError[] =
+ "Access to native messaging requires nativeMessaging permission.";
+ const char kProhibitedByPoliciesError[] =
+@@ -382,7 +382,7 @@ void MessageService::OpenChannelToNativeApp(
+ if (!opener_port->IsValidPort())
+ return;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ bool has_permission = extension->permissions_data()->HasAPIPermission(
+ APIPermission::kNativeMessaging);
+ if (!has_permission) {
+@@ -432,11 +432,11 @@ void MessageService::OpenChannelToNativeApp(
+ channel->opener->IncrementLazyKeepaliveCount();
+
+ AddChannel(std::move(channel), receiver_port_id);
+-#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ const char kNativeMessagingNotSupportedError[] =
+ "Native Messaging is not supported on this platform.";
+ opener_port->DispatchOnDisconnect(kNativeMessagingNotSupportedError);
+-#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ }
+
+ void MessageService::OpenChannelToTab(const ChannelEndpoint& source,
diff --git a/devel/electron7/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc b/devel/electron7/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
new file mode 100644
index 000000000000..e32f9cde42c4
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/networking_private/networking_private_delegate_factory.cc.orig 2019-12-12 12:39:43 UTC
++++ extensions/browser/api/networking_private/networking_private_delegate_factory.cc
+@@ -11,7 +11,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "extensions/browser/api/networking_private/networking_private_linux.h"
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ #include "components/wifi/wifi_service.h"
+@@ -61,7 +61,7 @@ KeyedService* NetworkingPrivateDelegateFactory::BuildS
+ NetworkingPrivateDelegate* delegate;
+ #if defined(OS_CHROMEOS)
+ delegate = new NetworkingPrivateChromeOS(browser_context);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ delegate = new NetworkingPrivateLinux();
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ std::unique_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
diff --git a/devel/electron7/files/patch-extensions_browser_api_web__request_form__data__parser.cc b/devel/electron7/files/patch-extensions_browser_api_web__request_form__data__parser.cc
new file mode 100644
index 000000000000..8f302e736561
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_browser_api_web__request_form__data__parser.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/web_request/form_data_parser.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/browser/api/web_request/form_data_parser.cc
+@@ -15,7 +15,11 @@
+ #include "base/values.h"
+ #include "net/base/escape.h"
+ #include "net/http/http_request_headers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::DictionaryValue;
+ using base::ListValue;
diff --git a/devel/electron7/files/patch-extensions_browser_browser__context__keyed__service__factories.cc b/devel/electron7/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..4fbd0f31b435
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
@@ -0,0 +1,11 @@
+--- extensions/browser/browser_context_keyed_service_factories.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/browser/browser_context_keyed_service_factories.cc
+@@ -84,7 +84,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ #if defined(OS_CHROMEOS)
+ NetworkingConfigServiceFactory::GetInstance();
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ NetworkingPrivateEventRouterFactory::GetInstance();
+ #endif
+ PowerAPI::GetFactoryInstance();
diff --git a/devel/electron7/files/patch-extensions_common_api___permission__features.json b/devel/electron7/files/patch-extensions_common_api___permission__features.json
new file mode 100644
index 000000000000..775c51cead16
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_api___permission__features.json
@@ -0,0 +1,29 @@
+--- extensions/common/api/_permission_features.json.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/api/_permission_features.json
+@@ -135,7 +135,7 @@
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+- "platforms": ["chromeos", "win", "mac", "linux"],
++ "platforms": ["chromeos", "win", "mac", "linux", "bsd"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/387169
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/387169
+@@ -461,7 +461,7 @@
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+@@ -492,7 +492,7 @@
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ // DO NOT ADD ANY MORE ENTRIES HERE.
+ // networkingPrivate is being migrated to networking.onc.
diff --git a/devel/electron7/files/patch-extensions_common_api_runtime.json b/devel/electron7/files/patch-extensions_common_api_runtime.json
new file mode 100644
index 000000000000..32f0f805a191
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_api_runtime.json
@@ -0,0 +1,11 @@
+--- extensions/common/api/runtime.json.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/api/runtime.json
+@@ -67,7 +67,7 @@
+ "id": "PlatformOs",
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+- "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
++ "enum": ["mac", "win", "android", "cros", "linux", "freebsd", "openbsd"]
+ },
+ {
+ "id": "PlatformArch",
diff --git a/devel/electron7/files/patch-extensions_common_feature__switch.cc b/devel/electron7/files/patch-extensions_common_feature__switch.cc
new file mode 100644
index 000000000000..4f0348977da5
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_feature__switch.cc
@@ -0,0 +1,16 @@
+--- extensions/common/feature_switch.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/feature_switch.cc
+@@ -42,11 +42,11 @@ class CommonSwitches {
+ FeatureSwitch::DEFAULT_ENABLED),
+ load_media_router_component_extension(
+ kLoadMediaRouterComponentExtensionFlag,
+-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
++#if BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_BSD)
+ FeatureSwitch::DEFAULT_ENABLED)
+ #else
+ FeatureSwitch::DEFAULT_DISABLED)
+-#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
++#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_BSD)
+ {
+ }
+
diff --git a/devel/electron7/files/patch-extensions_common_features_feature.cc b/devel/electron7/files/patch-extensions_common_features_feature.cc
new file mode 100644
index 000000000000..251aa6c71b88
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_features_feature.cc
@@ -0,0 +1,11 @@
+--- extensions/common/features/feature.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/features/feature.cc
+@@ -20,7 +20,7 @@ namespace extensions {
+ Feature::Platform Feature::GetCurrentPlatform() {
+ #if defined(OS_CHROMEOS)
+ return CHROMEOS_PLATFORM;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return LINUX_PLATFORM;
+ #elif defined(OS_MACOSX)
+ return MACOSX_PLATFORM;
diff --git a/devel/electron7/files/patch-extensions_common_image__util.cc b/devel/electron7/files/patch-extensions_common_image__util.cc
new file mode 100644
index 000000000000..8d760e4081d3
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_image__util.cc
@@ -0,0 +1,14 @@
+--- extensions/common/image_util.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/image_util.cc
+@@ -18,7 +18,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/time/time.h"
+ #include "base/timer/elapsed_timer.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkCanvas.h"
+ #include "third_party/skia/include/core/SkColor.h"
diff --git a/devel/electron7/files/patch-extensions_common_stack__frame.cc b/devel/electron7/files/patch-extensions_common_stack__frame.cc
new file mode 100644
index 000000000000..8018b7255058
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_common_stack__frame.cc
@@ -0,0 +1,14 @@
+--- extensions/common/stack_frame.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/common/stack_frame.cc
+@@ -7,7 +7,11 @@
+ #include <string>
+
+ #include "base/strings/utf_string_conversions.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace extensions {
+
diff --git a/devel/electron7/files/patch-extensions_renderer_bindings_api__binding__util.cc b/devel/electron7/files/patch-extensions_renderer_bindings_api__binding__util.cc
new file mode 100644
index 000000000000..5c9e0a4f5f68
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_renderer_bindings_api__binding__util.cc
@@ -0,0 +1,11 @@
+--- extensions/renderer/bindings/api_binding_util.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/renderer/bindings/api_binding_util.cc
+@@ -129,6 +129,8 @@ std::string GetPlatformString() {
+ return "mac";
+ #elif defined(OS_WIN)
+ return "win";
++#elif defined(OS_BSD)
++ return "bsd";
+ #else
+ NOTREACHED();
+ return std::string();
diff --git a/devel/electron7/files/patch-extensions_shell_app_shell__main__delegate.cc b/devel/electron7/files/patch-extensions_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..880090dd32ce
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_shell_app_shell__main__delegate.cc
@@ -0,0 +1,20 @@
+--- extensions/shell/app/shell_main_delegate.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/shell/app/shell_main_delegate.cc
+@@ -38,7 +38,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -70,7 +70,7 @@ base::FilePath GetDataPath() {
+ return cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
+
+ base::FilePath data_dir;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ data_dir = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/devel/electron7/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc b/devel/electron7/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc
new file mode 100644
index 000000000000..6cff8b8c974b
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
+@@ -45,7 +45,7 @@ void ShellRuntimeAPIDelegate::OpenURL(const GURL& unin
+ bool ShellRuntimeAPIDelegate::GetPlatformInfo(PlatformInfo* info) {
+ #if defined(OS_CHROMEOS)
+ info->os = api::runtime::PLATFORM_OS_CROS;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ info->os = api::runtime::PLATFORM_OS_LINUX;
+ #endif
+ return true;
diff --git a/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.cc b/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
new file mode 100644
index 000000000000..67894f413cba
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
@@ -0,0 +1,20 @@
+--- extensions/shell/browser/shell_extensions_api_client.cc.orig 2019-12-12 12:39:44 UTC
++++ extensions/shell/browser/shell_extensions_api_client.cc
+@@ -16,7 +16,7 @@
+ #include "extensions/shell/browser/shell_virtual_keyboard_delegate.h"
+ #include "extensions/shell/browser/shell_web_view_guest_delegate.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "extensions/shell/browser/api/file_system/shell_file_system_delegate.h"
+ #endif
+
+@@ -52,7 +52,7 @@ ShellExtensionsAPIClient::CreateDisplayInfoProvider()
+ return std::make_unique<ShellDisplayInfoProvider>();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* ShellExtensionsAPIClient::GetFileSystemDelegate() {
+ if (!file_system_delegate_)
+ file_system_delegate_ = std::make_unique<ShellFileSystemDelegate>();
diff --git a/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.h b/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.h
new file mode 100644
index 000000000000..e65b0ff5ac02
--- /dev/null
+++ b/devel/electron7/files/patch-extensions_shell_browser_shell__extensions__api__client.h
@@ -0,0 +1,19 @@
+--- extensions/shell/browser/shell_extensions_api_client.h.orig 2019-12-12 12:39:44 UTC
++++ extensions/shell/browser/shell_extensions_api_client.h
+@@ -32,14 +32,14 @@ class ShellExtensionsAPIClient : public ExtensionsAPIC
+ content::BrowserContext* browser_context) const override;
+ std::unique_ptr<DisplayInfoProvider> CreateDisplayInfoProvider()
+ const override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* GetFileSystemDelegate() override;
+ #endif
+ MessagingDelegate* GetMessagingDelegate() override;
+ FeedbackPrivateDelegate* GetFeedbackPrivateDelegate() override;
+
+ private:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<FileSystemDelegate> file_system_delegate_;
+ #endif
+ std::unique_ptr<MessagingDelegate> messaging_delegate_;
diff --git a/devel/electron7/files/patch-google__apis_gcm_engine_heartbeat__manager.cc b/devel/electron7/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
new file mode 100644
index 000000000000..da24249760ea
--- /dev/null
+++ b/devel/electron7/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
@@ -0,0 +1,53 @@
+--- google_apis/gcm/engine/heartbeat_manager.cc.orig 2019-12-12 12:39:44 UTC
++++ google_apis/gcm/engine/heartbeat_manager.cc
+@@ -31,13 +31,13 @@ const int kMinClientHeartbeatIntervalMs = 1000 * 30;
+ // Minimum time spent sleeping before we force a new heartbeat.
+ const int kMinSuspendTimeMs = 1000 * 10; // 10 seconds.
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The period at which to check if the heartbeat time has passed. Used to
+ // protect against platforms where the timer is delayed by the system being
+ // suspended. Only needed on linux because the other OSes provide a standard
+ // way to be notified of system suspend and resume events.
+ const int kHeartbeatMissedCheckMs = 1000 * 60 * 5; // 5 minutes.
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace
+
+@@ -191,7 +191,7 @@ void HeartbeatManager::RestartTimer() {
+ base::Bind(&HeartbeatManager::OnHeartbeatTriggered,
+ weak_ptr_factory_.GetWeakPtr()));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Windows, Mac, Android, iOS, and Chrome OS all provide a way to be notified
+ // when the system is suspending or resuming. The only one that does not is
+ // Linux so we need to poll to check for missed heartbeats.
+@@ -200,7 +200,7 @@ void HeartbeatManager::RestartTimer() {
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::CheckForMissedHeartbeat() {
+@@ -216,14 +216,14 @@ void HeartbeatManager::CheckForMissedHeartbeat() {
+ return;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Otherwise check again later.
+ io_task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::UpdateHeartbeatInterval() {
diff --git a/devel/electron7/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc b/devel/electron7/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..f8ef02c0b8b0
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/common/gpu_memory_buffer_support.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/common/gpu_memory_buffer_support.cc
+@@ -88,7 +88,7 @@ bool IsImageSizeValidForGpuMemoryBufferFormat(const gf
+ uint32_t GetPlatformSpecificTextureTarget() {
+ #if defined(OS_MACOSX)
+ return GL_TEXTURE_RECTANGLE_ARB;
+-#elif defined(OS_ANDROID) || defined(OS_LINUX)
++#elif defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ return GL_TEXTURE_EXTERNAL_OES;
+ #elif defined(OS_WIN) || defined(OS_FUCHSIA)
+ return GL_TEXTURE_2D;
diff --git a/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
new file mode 100644
index 000000000000..2ee2ef3ca8ca
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
@@ -0,0 +1,65 @@
+--- gpu/command_buffer/service/external_vk_image_backing.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/service/external_vk_image_backing.cc
+@@ -23,7 +23,7 @@
+ #include "ui/gl/buildflags.h"
+ #include "ui/gl/gl_context.h"
+
+-#if defined(OS_LINUX) && BUILDFLAG(USE_DAWN)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(USE_DAWN)
+ #include "gpu/command_buffer/service/external_vk_image_dawn_representation.h"
+ #endif
+
+@@ -31,7 +31,7 @@
+ #include "gpu/vulkan/fuchsia/vulkan_fuchsia_ext.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+ #endif
+
+@@ -504,7 +504,7 @@ std::unique_ptr<SharedImageRepresentationDawn>
+ ExternalVkImageBacking::ProduceDawn(SharedImageManager* manager,
+ MemoryTypeTracker* tracker,
+ DawnDevice dawnDevice) {
+-#if defined(OS_LINUX) && BUILDFLAG(USE_DAWN)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(USE_DAWN)
+ if (!dawn_format_) {
+ DLOG(ERROR) << "Format not supported for Dawn";
+ return nullptr;
+@@ -527,7 +527,7 @@ ExternalVkImageBacking::ProduceDawn(SharedImageManager
+ return std::make_unique<ExternalVkImageDawnRepresentation>(
+ manager, this, tracker, dawnDevice, dawn_format_.value(), memory_fd,
+ image_info.fAlloc.fSize, memory_type_index_.value());
+-#else // !defined(OS_LINUX) || !BUILDFLAG(USE_DAWN)
++#else // !defined(OS_LINUX) || !defined(OS_BSD) || !BUILDFLAG(USE_DAWN)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+ #endif
+@@ -544,7 +544,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ #if defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ GrVkImageInfo image_info;
+ bool result = backend_texture_.getVkImageInfo(&image_info);
+ DCHECK(result);
+@@ -604,7 +604,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ }
+ return std::make_unique<ExternalVkImageGlRepresentation>(
+ manager, this, tracker, texture_, texture_->service_id());
+-#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA)
++#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA) && !defined(OS_BSD)
+ #error Unsupported OS
+ #endif
+ }
+@@ -630,7 +630,7 @@ ExternalVkImageBacking::ProduceSkia(
+ tracker);
+ }
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int ExternalVkImageBacking::GetMemoryFd(const GrVkImageInfo& image_info) {
+ VkMemoryGetFdInfoKHR get_fd_info;
+ get_fd_info.sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
diff --git a/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.h b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.h
new file mode 100644
index 000000000000..da596284161f
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__backing.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/service/external_vk_image_backing.h.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/service/external_vk_image_backing.h
+@@ -133,7 +133,7 @@ class ExternalVkImageBacking : public SharedImageBacki
+ base::Optional<DawnTextureFormat> dawn_format,
+ base::Optional<uint32_t> memory_type_index);
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Extract file descriptor from image
+ int GetMemoryFd(const GrVkImageInfo& image_info);
+ #endif
diff --git a/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
new file mode 100644
index 000000000000..bebbf35c39cb
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/service/external_vk_image_gl_representation.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/service/external_vk_image_gl_representation.cc
+@@ -183,7 +183,7 @@ GLuint ExternalVkImageGlRepresentation::ImportVkSemaph
+ #if defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return 0;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ if (handle.vk_handle_type() !=
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT) {
+ DLOG(ERROR) << "Importing semaphore handle of unexpected type:"
+@@ -198,7 +198,7 @@ GLuint ExternalVkImageGlRepresentation::ImportVkSemaph
+ fd.release());
+
+ return gl_semaphore;
+-#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX)
++#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX) && !defined(OS_BSD)
+ #error Unsupported OS
+ #endif
+ }
diff --git a/devel/electron7/files/patch-gpu_command__buffer_service_program__manager.cc b/devel/electron7/files/patch-gpu_command__buffer_service_program__manager.cc
new file mode 100644
index 000000000000..e174297c026a
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_service_program__manager.cc
@@ -0,0 +1,14 @@
+--- gpu/command_buffer/service/program_manager.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/service/program_manager.cc
+@@ -30,7 +30,11 @@
+ #include "gpu/command_buffer/service/program_cache.h"
+ #include "gpu/command_buffer/service/shader_manager.h"
+ #include "gpu/config/gpu_preferences.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/progress_reporter.h"
+
diff --git a/devel/electron7/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
new file mode 100644
index 000000000000..5b711ce7fb9d
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
+@@ -638,7 +638,7 @@ class GLCopyTextureCHROMIUMES3Test : public GLCopyText
+
+ bool ShouldSkipNorm16() const {
+ DCHECK(!ShouldSkipTest());
+-#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)) && \
++#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)) && \
+ (defined(ARCH_CPU_X86) || defined(ARCH_CPU_X86_64))
+ // Make sure it's tested; it is safe to assume that the flag is always true
+ // on desktop.
diff --git a/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.cc b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
new file mode 100644
index 000000000000..213cec420b63
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/tests/gl_test_utils.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/tests/gl_test_utils.cc
+@@ -23,7 +23,7 @@
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/init/gl_factory.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gl/gl_image_native_pixmap.h"
+ #endif
+
+@@ -443,7 +443,7 @@ void GpuCommandBufferTestEGL::RestoreGLDefault() {
+ window_system_binding_info_ = gl::GLWindowSystemBindingInfo();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ scoped_refptr<gl::GLImageNativePixmap>
+ GpuCommandBufferTestEGL::CreateGLImageNativePixmap(gfx::BufferFormat format,
+ gfx::Size size,
diff --git a/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.h b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.h
new file mode 100644
index 000000000000..d91d91aec0d0
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_command__buffer_tests_gl__test__utils.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_test_utils.h.orig 2019-12-12 12:39:44 UTC
++++ gpu/command_buffer/tests/gl_test_utils.h
+@@ -120,7 +120,7 @@ class GpuCommandBufferTestEGL {
+ return gfx::HasExtension(gl_extensions_, extension);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Create GLImageNativePixmap filled in with the given pixels.
+ scoped_refptr<gl::GLImageNativePixmap> CreateGLImageNativePixmap(
+ gfx::BufferFormat format,
diff --git a/devel/electron7/files/patch-gpu_config_gpu__control__list.cc b/devel/electron7/files/patch-gpu_config_gpu__control__list.cc
new file mode 100644
index 000000000000..584a4d07fe62
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_config_gpu__control__list.cc
@@ -0,0 +1,32 @@
+--- gpu/config/gpu_control_list.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/config/gpu_control_list.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "build/build_config.h"
+ #include "gpu/config/gpu_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace gpu {
+ namespace {
+@@ -213,7 +217,7 @@ bool GpuControlList::More::GLVersionInfoMismatch(
+ GpuControlList::GLType GpuControlList::More::GetDefaultGLType() {
+ #if defined(OS_CHROMEOS)
+ return kGLTypeGL;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kGLTypeGL;
+ #elif defined(OS_MACOSX)
+ return kGLTypeGL;
+@@ -707,7 +711,7 @@ GpuControlList::OsType GpuControlList::GetOsType() {
+ return kOsAndroid;
+ #elif defined(OS_FUCHSIA)
+ return kOsFuchsia;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kOsLinux;
+ #elif defined(OS_MACOSX)
+ return kOsMacosx;
diff --git a/devel/electron7/files/patch-gpu_config_gpu__test__config.cc b/devel/electron7/files/patch-gpu_config_gpu__test__config.cc
new file mode 100644
index 000000000000..4c7cebe776a5
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_config_gpu__test__config.cc
@@ -0,0 +1,11 @@
+--- gpu/config/gpu_test_config.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/config/gpu_test_config.cc
+@@ -25,7 +25,7 @@ namespace {
+ GPUTestConfig::OS GetCurrentOS() {
+ #if defined(OS_CHROMEOS)
+ return GPUTestConfig::kOsChromeOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return GPUTestConfig::kOsLinux;
+ #elif defined(OS_WIN)
+ int32_t major_version = 0;
diff --git a/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc b/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..4eaf7081d822
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,56 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/client_native_pixmap_factory.h"
+ #include "ui/gfx/linux/client_native_pixmap_factory_dmabuf.h"
+ #endif
+@@ -22,7 +22,7 @@
+ #include "ui/ozone/public/ozone_platform.h"
+ #endif
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.h"
+ #endif
+
+@@ -40,7 +40,7 @@ namespace gpu {
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport() {
+ #if defined(USE_OZONE)
+ client_native_pixmap_factory_ = ui::CreateClientNativePixmapFactoryOzone();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ client_native_pixmap_factory_.reset(
+ gfx::CreateClientNativePixmapFactoryDmabuf());
+ #endif
+@@ -54,7 +54,7 @@ GpuMemoryBufferSupport::GetNativeGpuMemoryBufferType()
+ return gfx::IO_SURFACE_BUFFER;
+ #elif defined(OS_ANDROID)
+ return gfx::ANDROID_HARDWARE_BUFFER;
+-#elif defined(OS_LINUX) || defined(USE_OZONE)
++#elif defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ return gfx::NATIVE_PIXMAP;
+ #elif defined(OS_WIN)
+ return gfx::DXGI_SHARED_HANDLE;
+@@ -110,7 +110,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferCo
+ #elif defined(USE_OZONE)
+ return ui::OzonePlatform::EnsureInstance()->IsNativePixmapConfigSupported(
+ format, usage);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return false; // TODO(julian.isorce): Add linux support.
+ #elif defined(OS_WIN)
+ switch (usage) {
+@@ -166,7 +166,7 @@ GpuMemoryBufferSupport::CreateGpuMemoryBufferImplFromH
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ std::move(handle), size, format, usage, std::move(callback));
+ #endif
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ case gfx::NATIVE_PIXMAP:
+ return GpuMemoryBufferImplNativePixmap::CreateFromHandle(
+ client_native_pixmap_factory(), std::move(handle), size, format,
diff --git a/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h b/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
new file mode 100644
index 000000000000..5b4383cde05c
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
@@ -0,0 +1,29 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.h.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ namespace gfx {
+ class ClientNativePixmapFactory;
+ }
+@@ -38,7 +38,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format,
+ gfx::BufferUsage usage);
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ gfx::ClientNativePixmapFactory* client_native_pixmap_factory() {
+ return client_native_pixmap_factory_.get();
+ }
+@@ -61,7 +61,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ GpuMemoryBufferImpl::DestructionCallback callback);
+
+ private:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_;
+ #endif
+
diff --git a/devel/electron7/files/patch-gpu_ipc_service_gpu__init.cc b/devel/electron7/files/patch-gpu_ipc_service_gpu__init.cc
new file mode 100644
index 000000000000..fbc581115c73
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_service_gpu__init.cc
@@ -0,0 +1,118 @@
+--- gpu/ipc/service/gpu_init.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/service/gpu_init.cc
+@@ -109,7 +109,7 @@ void InitializePlatformOverlaySettings(GPUInfo* gpu_in
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ bool CanAccessNvidiaDeviceFile() {
+ bool res = true;
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+@@ -120,7 +120,7 @@ bool CanAccessNvidiaDeviceFile() {
+ }
+ return res;
+ }
+-#endif // OS_LINUX && !OS_CHROMEOS && !IS_CHROMECAST
++#endif // (OS_LINUX && !OS_CHROMEOS && !IS_CHROMECAST) || OS_BSD
+
+ class GpuWatchdogInit {
+ public:
+@@ -165,7 +165,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ // crash during feature collection.
+ gpu::SetKeysForCrashLogging(gpu_info_);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA
+ gpu_info_.gpu.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile())
+ return false;
+@@ -246,7 +246,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ sandbox_helper_->PreSandboxStartup();
+
+ bool attempted_startsandbox = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // On Chrome OS ARM Mali, GPU driver userspace creates threads when
+ // initializing a GL context, so start the sandbox early.
+ // TODO(zmo): Need to collect OS version before this.
+@@ -255,7 +255,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ watchdog_thread_.get(), &gpu_info_, gpu_preferences_);
+ attempted_startsandbox = true;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ base::TimeTicks before_initialize_one_off = base::TimeTicks::Now();
+
+@@ -304,14 +304,14 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ }
+ if (gl_initialized && use_swiftshader &&
+ gl::GetGLImplementation() != gl::kGLImplementationSwiftShaderGL) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
+ << "on Linux";
+ return false;
+ #else
+ gl::init::ShutdownGL(true);
+ gl_initialized = false;
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ }
+ if (!gl_initialized)
+ gl_initialized = gl::init::InitializeGLNoExtensionsOneOff();
+@@ -337,7 +337,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ command_line, gpu_feature_info_,
+ gpu_preferences_.disable_software_rasterizer, false);
+ if (use_swiftshader) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
+ << "on Linux";
+ return false;
+@@ -348,7 +348,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ << "failed";
+ return false;
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ }
+ }
+
+@@ -377,7 +377,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -396,7 +396,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
+@@ -569,7 +569,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -589,7 +589,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+ }
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
diff --git a/devel/electron7/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc b/devel/electron7/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
new file mode 100644
index 000000000000..fc095f246635
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_memory_buffer_factory.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/service/gpu_memory_buffer_factory.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_native_pixmap.h"
+ #endif
+
+@@ -34,7 +34,7 @@ GpuMemoryBufferFactory::CreateNativeType(
+ return std::make_unique<GpuMemoryBufferFactoryIOSurface>();
+ #elif defined(OS_ANDROID)
+ return std::make_unique<GpuMemoryBufferFactoryAndroidHardwareBuffer>();
+-#elif defined(OS_LINUX) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return std::make_unique<GpuMemoryBufferFactoryNativePixmap>(
+ vulkan_context_provider);
+ #elif defined(OS_WIN)
diff --git a/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc b/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
new file mode 100644
index 000000000000..e27b456da6bd
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
@@ -0,0 +1,76 @@
+--- gpu/ipc/service/gpu_watchdog_thread.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.cc
+@@ -45,8 +45,10 @@ const int kGpuTimeout = 10000;
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ const base::FilePath::CharType kTtyFilePath[] =
+ FILE_PATH_LITERAL("/sys/class/tty/tty0/active");
++#endif
+ const unsigned char text[20] = "check";
+ #endif
+
+@@ -68,9 +70,12 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
+ ,
+ display_(nullptr),
+ window_(0),
+- atom_(x11::None),
++ atom_(x11::None)
++#if !defined(OS_BSD)
++ ,
+ host_tty_(-1)
+ #endif
++#endif
+ {
+ base::subtle::NoBarrier_Store(&awaiting_acknowledge_, false);
+
+@@ -85,7 +90,9 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
+ #endif
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ tty_file_ = base::OpenFile(base::FilePath(kTtyFilePath), "r");
++#endif
+ SetupXServer();
+ #endif
+ base::MessageLoopCurrent::Get()->AddTaskObserver(&task_observer_);
+@@ -231,8 +238,10 @@ GpuWatchdogThreadImplV1::~GpuWatchdogThreadImplV1() {
+ base::PowerMonitor::RemoveObserver(this);
+
+ #if defined(USE_X11)
++#if !defined(OS_BSD)
+ if (tty_file_)
+ fclose(tty_file_);
++#endif
+ if (display_) {
+ DCHECK(window_);
+ XDestroyWindow(display_, window_);
+@@ -432,7 +441,7 @@ void GpuWatchdogThreadImplV1::DeliberatelyTerminateToR
+ return;
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ // Don't crash if we're not on the TTY of our host X11 server.
+ int active_tty = GetActiveTTY();
+ if (host_tty_ != -1 && active_tty != -1 && host_tty_ != active_tty) {
+@@ -516,7 +525,9 @@ void GpuWatchdogThreadImplV1::SetupXServer() {
+ CopyFromParent, InputOutput, CopyFromParent, 0, nullptr);
+ atom_ = XInternAtom(display_, "CHECK", x11::False);
+ }
++#if !defined(OS_BSD)
+ host_tty_ = GetActiveTTY();
++#endif
+ }
+
+ void GpuWatchdogThreadImplV1::SetupXChangeProp() {
+@@ -616,7 +627,7 @@ base::ThreadTicks GpuWatchdogThreadImplV1::GetWatchedT
+ }
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ int GpuWatchdogThreadImplV1::GetActiveTTY() const {
+ char tty_string[8] = {0};
+ if (tty_file_ && !fseek(tty_file_, 0, SEEK_SET) &&
diff --git a/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.h b/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
new file mode 100644
index 000000000000..6fc3a2079206
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
@@ -0,0 +1,13 @@
+--- gpu/ipc/service/gpu_watchdog_thread.h.orig 2019-12-12 12:39:44 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.h
+@@ -234,8 +234,10 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV1
+ XDisplay* display_;
+ gfx::AcceleratedWidget window_;
+ XAtom atom_;
++#if !defined(OS_BSD)
+ FILE* tty_file_;
+ int host_tty_;
++#endif
+ #endif
+
+ base::WeakPtrFactory<GpuWatchdogThreadImplV1> weak_factory_{this};
diff --git a/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.cc b/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.cc
new file mode 100644
index 000000000000..e485c1c66421
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.cc
@@ -0,0 +1,32 @@
+--- gpu/vulkan/vulkan_function_pointers.cc.orig 2019-12-12 12:39:44 UTC
++++ gpu/vulkan/vulkan_function_pointers.cc
+@@ -731,7 +731,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ }
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (gfx::HasExtension(enabled_extensions,
+ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME)) {
+ vkGetSemaphoreFdKHRFn = reinterpret_cast<PFN_vkGetSemaphoreFdKHR>(
+@@ -750,9 +750,9 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (gfx::HasExtension(enabled_extensions,
+ VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME)) {
+ vkGetMemoryFdKHRFn = reinterpret_cast<PFN_vkGetMemoryFdKHR>(
+@@ -763,7 +763,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ if (gfx::HasExtension(enabled_extensions,
diff --git a/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.h b/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.h
new file mode 100644
index 000000000000..8cc7d380b650
--- /dev/null
+++ b/devel/electron7/files/patch-gpu_vulkan_vulkan__function__pointers.h
@@ -0,0 +1,42 @@
+--- gpu/vulkan/vulkan_function_pointers.h.orig 2019-12-12 12:39:44 UTC
++++ gpu/vulkan/vulkan_function_pointers.h
+@@ -170,14 +170,14 @@ struct VulkanFunctionPointers {
+ vkGetAndroidHardwareBufferPropertiesANDROIDFn = nullptr;
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHRFn = nullptr;
+ PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHRFn = nullptr;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PFN_vkGetMemoryFdKHR vkGetMemoryFdKHRFn = nullptr;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ PFN_vkImportSemaphoreZirconHandleFUCHSIA
+@@ -356,16 +356,16 @@ struct VulkanFunctionPointers {
+ ->vkGetAndroidHardwareBufferPropertiesANDROIDFn
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #define vkGetSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkGetSemaphoreFdKHRFn
+ #define vkImportSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkImportSemaphoreFdKHRFn
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define vkGetMemoryFdKHR gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHRFn
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #define vkImportSemaphoreZirconHandleFUCHSIA \
diff --git a/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.cc b/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.cc
new file mode 100644
index 000000000000..3375ff9ff40b
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.cc
@@ -0,0 +1,20 @@
+--- headless/lib/browser/headless_content_browser_client.cc.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/browser/headless_content_browser_client.cc
+@@ -165,7 +165,7 @@ HeadlessContentBrowserClient::GetGeneratedCodeCacheSet
+ return content::GeneratedCodeCacheSettings(true, 0, context->GetPath());
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void HeadlessContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -176,7 +176,7 @@ void HeadlessContentBrowserClient::GetAdditionalMapped
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(HEADLESS_USE_BREAKPAD)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void HeadlessContentBrowserClient::AppendExtraCommandLineSwitches(
+ base::CommandLine* command_line,
diff --git a/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.h b/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.h
new file mode 100644
index 000000000000..f1c3e9cc327e
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_browser_headless__content__browser__client.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_content_browser_client.h.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/browser/headless_content_browser_client.h
+@@ -33,7 +33,7 @@ class HeadlessContentBrowserClient : public content::C
+ ::storage::OptionalQuotaSettingsCallback callback) override;
+ content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
+ content::BrowserContext* context) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
diff --git a/devel/electron7/files/patch-headless_lib_browser_headless__request__context__manager.cc b/devel/electron7/files/patch-headless_lib_browser_headless__request__context__manager.cc
new file mode 100644
index 000000000000..a1bbf187235b
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_browser_headless__request__context__manager.cc
@@ -0,0 +1,29 @@
+--- headless/lib/browser/headless_request_context_manager.cc.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/browser/headless_request_context_manager.cc
+@@ -25,7 +25,7 @@ namespace headless {
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ static char kProductName[] = "HeadlessChrome";
+ #endif
+
+@@ -55,7 +55,7 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTraffic
+ return traffic_annotation;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr BuildCryptConfigOnce(
+ const base::FilePath& user_data_path) {
+ static bool done_once = false;
+@@ -195,7 +195,7 @@ HeadlessRequestContextManager::HeadlessRequestContextM
+ proxy_config_monitor_ = std::make_unique<HeadlessProxyConfigMonitor>(
+ base::ThreadTaskRunnerHandle::Get());
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ auto crypt_config = BuildCryptConfigOnce(user_data_path_);
+ if (crypt_config)
+ content::GetNetworkService()->SetCryptConfig(std::move(crypt_config));
diff --git a/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.cc b/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.cc
new file mode 100644
index 000000000000..fd49de95c1fe
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.cc
@@ -0,0 +1,20 @@
+--- headless/lib/headless_content_main_delegate.cc.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/headless_content_main_delegate.cc
+@@ -328,7 +328,7 @@ int HeadlessContentMainDelegate::RunProcess(
+ }
+ #endif // !defined(CHROME_MULTIPLE_DLL_CHILD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SIGTERMProfilingShutdown(int signal) {
+ content::Profiling::Stop();
+ struct sigaction sigact;
+@@ -363,7 +363,7 @@ void HeadlessContentMainDelegate::ZygoteForked() {
+ breakpad::InitCrashReporter(process_type);
+ #endif
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ HeadlessContentMainDelegate* HeadlessContentMainDelegate::GetInstance() {
diff --git a/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.h b/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.h
new file mode 100644
index 000000000000..72046dbeb6ef
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_headless__content__main__delegate.h
@@ -0,0 +1,11 @@
+--- headless/lib/headless_content_main_delegate.h.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/headless_content_main_delegate.h
+@@ -58,7 +58,7 @@ class HEADLESS_EXPORT HeadlessContentMainDelegate
+
+ HeadlessBrowserImpl* browser() const { return browser_.get(); }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void ZygoteForked() override;
+ #endif
+
diff --git a/devel/electron7/files/patch-headless_lib_headless__macros.h b/devel/electron7/files/patch-headless_lib_headless__macros.h
new file mode 100644
index 000000000000..84c8721dfba3
--- /dev/null
+++ b/devel/electron7/files/patch-headless_lib_headless__macros.h
@@ -0,0 +1,13 @@
+--- headless/lib/headless_macros.h.orig 2019-12-12 12:39:44 UTC
++++ headless/lib/headless_macros.h
+@@ -7,8 +7,8 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #define HEADLESS_USE_BREAKPAD
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ #endif // HEADLESS_LIB_HEADLESS_MACROS_H_
diff --git a/devel/electron7/files/patch-ipc_ipc__channel.h b/devel/electron7/files/patch-ipc_ipc__channel.h
new file mode 100644
index 000000000000..87355b1bb3f6
--- /dev/null
+++ b/devel/electron7/files/patch-ipc_ipc__channel.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel.h.orig 2019-12-12 12:39:49 UTC
++++ ipc/ipc_channel.h
+@@ -256,7 +256,7 @@ class COMPONENT_EXPORT(IPC) Channel : public Sender {
+ static std::string GenerateUniqueRandomChannelID();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sandboxed processes live in a PID namespace, so when sending the IPC hello
+ // message from client to server we need to send the PID from the global
+ // PID namespace.
diff --git a/devel/electron7/files/patch-ipc_ipc__channel__common.cc b/devel/electron7/files/patch-ipc_ipc__channel__common.cc
new file mode 100644
index 000000000000..67d5c69add36
--- /dev/null
+++ b/devel/electron7/files/patch-ipc_ipc__channel__common.cc
@@ -0,0 +1,20 @@
+--- ipc/ipc_channel_common.cc.orig 2019-12-12 12:39:49 UTC
++++ ipc/ipc_channel_common.cc
+@@ -9,7 +9,7 @@
+
+ namespace IPC {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+ int g_global_pid = 0;
+@@ -25,7 +25,7 @@ int Channel::GetGlobalPid() {
+ return g_global_pid;
+ }
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ std::unique_ptr<Channel> Channel::CreateClient(
diff --git a/devel/electron7/files/patch-ipc_ipc__channel__mojo.cc b/devel/electron7/files/patch-ipc_ipc__channel__mojo.cc
new file mode 100644
index 000000000000..77912615d377
--- /dev/null
+++ b/devel/electron7/files/patch-ipc_ipc__channel__mojo.cc
@@ -0,0 +1,15 @@
+--- ipc/ipc_channel_mojo.cc.orig 2019-12-12 12:39:49 UTC
++++ ipc/ipc_channel_mojo.cc
+@@ -64,10 +64,10 @@ class MojoChannelFactory : public ChannelFactory {
+ };
+
+ base::ProcessId GetSelfPID() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (int global_pid = Channel::GetGlobalPid())
+ return global_pid;
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_NACL)
+ return -1;
+ #else
diff --git a/devel/electron7/files/patch-ipc_ipc__message__utils.cc b/devel/electron7/files/patch-ipc_ipc__message__utils.cc
new file mode 100644
index 000000000000..529f9fe4cbdb
--- /dev/null
+++ b/devel/electron7/files/patch-ipc_ipc__message__utils.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.cc.orig 2019-12-12 12:39:49 UTC
++++ ipc/ipc_message_utils.cc
+@@ -355,7 +355,7 @@ void ParamTraits<unsigned int>::Log(const param_type&
+ l->append(base::NumberToString(p));
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ void ParamTraits<long>::Log(const param_type& p, std::string* l) {
+ l->append(base::NumberToString(p));
diff --git a/devel/electron7/files/patch-ipc_ipc__message__utils.h b/devel/electron7/files/patch-ipc_ipc__message__utils.h
new file mode 100644
index 000000000000..d263a3fbb79a
--- /dev/null
+++ b/devel/electron7/files/patch-ipc_ipc__message__utils.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.h.orig 2019-12-12 12:39:49 UTC
++++ ipc/ipc_message_utils.h
+@@ -210,7 +210,7 @@ struct ParamTraits<unsigned int> {
+ // 3) Android 64 bit and Fuchsia also have int64_t typedef'd to long.
+ // Since we want to support Android 32<>64 bit IPC, as long as we don't have
+ // these traits for 32 bit ARM then that'll catch any errors.
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ template <>
+ struct ParamTraits<long> {
diff --git a/devel/electron7/files/patch-media_BUILD.gn b/devel/electron7/files/patch-media_BUILD.gn
new file mode 100644
index 000000000000..5cab64299525
--- /dev/null
+++ b/devel/electron7/files/patch-media_BUILD.gn
@@ -0,0 +1,12 @@
+--- media/BUILD.gn.orig 2019-12-12 12:39:49 UTC
++++ media/BUILD.gn
+@@ -62,6 +62,9 @@ config("media_config") {
+ defines += [ "DLOPEN_PULSEAUDIO" ]
+ }
+ }
++ if (use_sndio) {
++ defines += [ "USE_SNDIO" ]
++ }
+ if (use_cras) {
+ defines += [ "USE_CRAS" ]
+ }
diff --git a/devel/electron7/files/patch-media_audio_BUILD.gn b/devel/electron7/files/patch-media_audio_BUILD.gn
new file mode 100644
index 000000000000..d63f3fe7d045
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_BUILD.gn
@@ -0,0 +1,22 @@
+--- media/audio/BUILD.gn.orig 2019-12-16 13:32:58 UTC
++++ media/audio/BUILD.gn
+@@ -240,8 +240,18 @@ source_set("audio") {
+ deps += [ "//media/base/android:media_jni_headers" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !use_sndio) {
+ sources += [ "linux/audio_manager_linux.cc" ]
++ }
++ if (use_sndio) {
++ libs += [ "sndio" ]
++ sources += [
++ "openbsd/audio_manager_openbsd.cc",
++ "sndio/sndio_input.cc",
++ "sndio/sndio_input.h",
++ "sndio/sndio_output.cc",
++ "sndio/sndio_output.h"
++ ]
+ }
+
+ if (use_alsa) {
diff --git a/devel/electron7/files/patch-media_audio_alsa_audio__manager__alsa.cc b/devel/electron7/files/patch-media_audio_alsa_audio__manager__alsa.cc
new file mode 100644
index 000000000000..1d39c6f2aea4
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_alsa_audio__manager__alsa.cc
@@ -0,0 +1,54 @@
+--- media/audio/alsa/audio_manager_alsa.cc.orig 2019-12-12 12:39:49 UTC
++++ media/audio/alsa/audio_manager_alsa.cc
+@@ -92,7 +92,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ int card = -1;
+
+ // Loop through the sound cards to get ALSA device hints.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && card >= 0) {
++#endif
+ void** hints = NULL;
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+@@ -104,7 +106,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ DLOG(WARNING) << "GetAlsaAudioDevices: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+ }
+
+ void AudioManagerAlsa::GetAlsaDevicesInfo(AudioManagerAlsa::StreamType type,
+@@ -187,7 +191,11 @@ bool AudioManagerAlsa::IsAlsaDeviceAvailable(
+ // goes through software conversion if needed (e.g. incompatible
+ // sample rate).
+ // TODO(joi): Should we prefer "hw" instead?
++#ifdef OS_LINUX
+ static const char kDeviceTypeDesired[] = "plughw";
++#else
++ static const char kDeviceTypeDesired[] = "plug";
++#endif
+ return strncmp(kDeviceTypeDesired, device_name,
+ base::size(kDeviceTypeDesired) - 1) == 0;
+ }
+@@ -209,7 +217,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ // Loop through the sound cards.
+ // Don't use snd_device_name_hint(-1,..) since there is a access violation
+ // inside this ALSA API with libasound.so.2.0.0.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && (card >= 0) && !has_device) {
++#endif
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+ for (void** hint_iter = hints; *hint_iter != NULL; hint_iter++) {
+@@ -233,7 +243,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ DLOG(WARNING) << "HasAnyAudioDevice: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+
+ return has_device;
+ }
diff --git a/devel/electron7/files/patch-media_audio_audio__input__device.cc b/devel/electron7/files/patch-media_audio_audio__input__device.cc
new file mode 100644
index 000000000000..a52543952fca
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_audio__input__device.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_input_device.cc.orig 2019-12-12 12:39:49 UTC
++++ media/audio/audio_input_device.cc
+@@ -248,7 +248,7 @@ void AudioInputDevice::OnStreamCreated(
+ // also a risk of false positives if we are suspending when starting the stream
+ // here. See comments in AliveChecker and PowerObserverHelper for details and
+ // todos.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const bool stop_at_first_alive_notification = true;
+ const bool pause_check_during_suspend = false;
+ #else
diff --git a/devel/electron7/files/patch-media_audio_audio__manager.cc b/devel/electron7/files/patch-media_audio_audio__manager.cc
new file mode 100644
index 000000000000..2d929c5f8e4a
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_audio__manager.cc
@@ -0,0 +1,29 @@
+--- media/audio/audio_manager.cc.orig 2019-12-12 12:39:49 UTC
++++ media/audio/audio_manager.cc
+@@ -48,7 +48,7 @@ class AudioManagerHelper {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void set_app_name(const std::string& app_name) { app_name_ = app_name; }
+ const std::string& app_name() const { return app_name_; }
+ #endif
+@@ -59,7 +59,7 @@ class AudioManagerHelper {
+ std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_for_testing_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string app_name_;
+ #endif
+
+@@ -128,7 +128,7 @@ std::unique_ptr<AudioManager> AudioManager::CreateForT
+ return Create(std::move(audio_thread), GetHelper()->fake_log_factory());
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AudioManager::SetGlobalAppName(const std::string& app_name) {
+ GetHelper()->set_app_name(app_name);
diff --git a/devel/electron7/files/patch-media_audio_audio__manager.h b/devel/electron7/files/patch-media_audio_audio__manager.h
new file mode 100644
index 000000000000..cdf694e1f2e2
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_audio__manager.h
@@ -0,0 +1,11 @@
+--- media/audio/audio_manager.h.orig 2019-12-12 12:39:49 UTC
++++ media/audio/audio_manager.h
+@@ -60,7 +60,7 @@ class MEDIA_EXPORT AudioManager {
+ static std::unique_ptr<AudioManager> CreateForTesting(
+ std::unique_ptr<AudioThread> audio_thread);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sets the name of the audio source as seen by external apps. Only actually
+ // used with PulseAudio as of this writing.
+ static void SetGlobalAppName(const std::string& app_name);
diff --git a/devel/electron7/files/patch-media_audio_audio__output__proxy__unittest.cc b/devel/electron7/files/patch-media_audio_audio__output__proxy__unittest.cc
new file mode 100644
index 000000000000..f6ac62b01681
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_audio__output__proxy__unittest.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_output_proxy_unittest.cc.orig 2019-12-12 12:39:49 UTC
++++ media/audio/audio_output_proxy_unittest.cc
+@@ -412,7 +412,7 @@ class AudioOutputProxyTest : public testing::Test {
+ // |stream| is closed at this point. Start() should reopen it again.
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
+ .Times(2)
+- .WillRepeatedly(Return(reinterpret_cast<AudioOutputStream*>(NULL)));
++ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ EXPECT_CALL(callback_, OnError()).Times(2);
+
diff --git a/devel/electron7/files/patch-media_audio_pulse_pulse.sigs b/devel/electron7/files/patch-media_audio_pulse_pulse.sigs
new file mode 100644
index 000000000000..5068c1e29ec9
--- /dev/null
+++ b/devel/electron7/files/patch-media_audio_pulse_pulse.sigs
@@ -0,0 +1,46 @@
+--- media/audio/pulse/pulse.sigs.orig 2019-12-12 12:39:49 UTC
++++ media/audio/pulse/pulse.sigs
+@@ -24,11 +24,11 @@ pa_operation* pa_context_get_source_info_by_index(pa_c
+ pa_operation* pa_context_get_source_info_by_name(pa_context* c, const char* name, pa_source_info_cb_t cb, void *userdata);
+ pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
+ pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
+-pa_context_state_t pa_context_get_state(pa_context* c);
++pa_context_state_t pa_context_get_state(const pa_context *c);
+ pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
+ pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
+ void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata);
+-pa_operation_state_t pa_operation_get_state(pa_operation* o);
++pa_operation_state_t pa_operation_get_state(const pa_operation* o);
+ void pa_context_unref(pa_context* c);
+ void pa_operation_unref(pa_operation* o);
+ int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes);
+@@ -38,23 +38,23 @@ pa_operation* pa_stream_cork(pa_stream* s, int b, pa_s
+ int pa_stream_disconnect(pa_stream* s);
+ int pa_stream_drop(pa_stream *p);
+ pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
+-uint32_t pa_stream_get_device_index(pa_stream* s);
++uint32_t pa_stream_get_device_index(const pa_stream* s);
+ int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative);
+-pa_stream_state_t pa_stream_get_state(pa_stream* p);
++pa_stream_state_t pa_stream_get_state(const pa_stream* p);
+ pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
+ pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
+ pa_proplist* pa_proplist_new(void);
+-int pa_proplist_contains(pa_proplist* p, const char* key);
++int pa_proplist_contains(const pa_proplist* p, const char* key);
+ void pa_proplist_free(pa_proplist* p);
+-const char* pa_proplist_gets(pa_proplist* p, const char* key);
++const char* pa_proplist_gets(const pa_proplist* p, const char* key);
+ int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
+-size_t pa_stream_readable_size(pa_stream *p);
++size_t pa_stream_readable_size(const pa_stream *p);
+ int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
+ void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
+ void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
+ int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
+ void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
+ void pa_stream_unref(pa_stream* s);
+-int pa_context_errno(pa_context *c);
++int pa_context_errno(const pa_context *c);
+ const char* pa_strerror(int error);
+ pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v);
diff --git a/devel/electron7/files/patch-media_base_audio__latency.cc b/devel/electron7/files/patch-media_base_audio__latency.cc
new file mode 100644
index 000000000000..51d27693df3a
--- /dev/null
+++ b/devel/electron7/files/patch-media_base_audio__latency.cc
@@ -0,0 +1,11 @@
+--- media/base/audio_latency.cc.orig 2019-12-12 12:39:49 UTC
++++ media/base/audio_latency.cc
+@@ -106,7 +106,7 @@ int AudioLatency::GetRtcBufferSize(int sample_rate, in
+ return frames_per_buffer;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // On Linux, MacOS and Fuchsia, the low level IO implementations on the
+ // browser side supports all buffer size the clients want. We use the native
+ // peer connection buffer size (10ms) to achieve best possible performance.
diff --git a/devel/electron7/files/patch-media_base_scopedfd__helper.h b/devel/electron7/files/patch-media_base_scopedfd__helper.h
new file mode 100644
index 000000000000..6e186e89ee0e
--- /dev/null
+++ b/devel/electron7/files/patch-media_base_scopedfd__helper.h
@@ -0,0 +1,23 @@
+--- media/base/scopedfd_helper.h.orig 2019-12-12 12:39:49 UTC
++++ media/base/scopedfd_helper.h
+@@ -11,17 +11,17 @@
+ namespace media {
+
+ // Theoretically, we can test on defined(OS_POSIX) || defined(OS_FUCHSIA), but
+-// since the only current user is V4L2 we are limiting the scope to OS_LINUX so
++// since the only current user is V4L2 we are limiting the scope to OS_LINUX || OS_BSD so
+ // the binary size does not inflate on non-using systems. Feel free to adapt
+ // this and BUILD.gn as our needs evolve.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ // Return a new vector containing duplicates of |fds|, or PCHECKs in case of an
+ // error.
+ MEDIA_EXPORT std::vector<base::ScopedFD> DuplicateFDs(
+ const std::vector<base::ScopedFD>& fds);
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace media
+
diff --git a/devel/electron7/files/patch-media_base_video__frame.cc b/devel/electron7/files/patch-media_base_video__frame.cc
new file mode 100644
index 000000000000..29b8bca174c6
--- /dev/null
+++ b/devel/electron7/files/patch-media_base_video__frame.cc
@@ -0,0 +1,74 @@
+--- media/base/video_frame.cc.orig 2019-12-12 12:39:49 UTC
++++ media/base/video_frame.cc
+@@ -52,7 +52,7 @@ static std::string StorageTypeToString(
+ return "OWNED_MEMORY";
+ case VideoFrame::STORAGE_SHMEM:
+ return "SHMEM";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case VideoFrame::STORAGE_DMABUFS:
+ return "DMABUFS";
+ #endif
+@@ -67,7 +67,7 @@ static std::string StorageTypeToString(
+ // static
+ bool VideoFrame::IsStorageTypeMappable(VideoFrame::StorageType storage_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This is not strictly needed but makes explicit that, at VideoFrame
+ // level, DmaBufs are not mappable from userspace.
+ storage_type != VideoFrame::STORAGE_DMABUFS &&
+@@ -185,7 +185,7 @@ static base::Optional<VideoFrameLayout> GetDefaultLayo
+ return VideoFrameLayout::CreateWithPlanes(format, coded_size, planes);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This class allows us to embed a vector<ScopedFD> into a scoped_refptr, and
+ // thus to have several VideoFrames share the same set of DMABUF FDs.
+ class VideoFrame::DmabufHolder
+@@ -203,7 +203,7 @@ class VideoFrame::DmabufHolder
+ friend class base::RefCountedThreadSafe<DmabufHolder>;
+ ~DmabufHolder() = default;
+ };
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ bool VideoFrame::IsValidConfig(VideoPixelFormat format,
+@@ -468,7 +468,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuva
+ return frame;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ scoped_refptr<VideoFrame> VideoFrame::WrapExternalDmabufs(
+ const VideoFrameLayout& layout,
+@@ -604,7 +604,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(frame.dmabuf_fds_);
+ // If there are any |dmabuf_fds_| plugged in, we should refer them too.
+ wrapping_frame->dmabuf_fds_ = frame.dmabuf_fds_;
+@@ -911,7 +911,7 @@ VideoFrame::mailbox_holder(size_t texture_index) const
+ return mailbox_holders_[texture_index];
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const std::vector<base::ScopedFD>& VideoFrame::DmabufFds() const {
+ DCHECK_EQ(storage_type_, STORAGE_DMABUFS);
+
+@@ -986,7 +986,7 @@ VideoFrame::VideoFrame(const VideoFrameLayout& layout,
+ storage_type_(storage_type),
+ visible_rect_(Intersection(visible_rect, gfx::Rect(layout.coded_size()))),
+ natural_size_(natural_size),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ dmabuf_fds_(base::MakeRefCounted<DmabufHolder>()),
+ #endif
+ timestamp_(timestamp),
diff --git a/devel/electron7/files/patch-media_base_video__frame.h b/devel/electron7/files/patch-media_base_video__frame.h
new file mode 100644
index 000000000000..a7b5f7f04fe9
--- /dev/null
+++ b/devel/electron7/files/patch-media_base_video__frame.h
@@ -0,0 +1,50 @@
+--- media/base/video_frame.h.orig 2019-12-12 12:39:49 UTC
++++ media/base/video_frame.h
+@@ -39,9 +39,9 @@
+ #include "base/mac/scoped_cftyperef.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/scoped_file.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace media {
+
+@@ -76,7 +76,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ STORAGE_UNOWNED_MEMORY = 2, // External, non owned data pointers.
+ STORAGE_OWNED_MEMORY = 3, // VideoFrame has allocated its own data buffer.
+ STORAGE_SHMEM = 4, // Backed by unsafe (writable) shared memory.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(mcasas): Consider turning this type into STORAGE_NATIVE
+ // based on the idea of using this same enum value for both DMA
+ // buffers on Linux and CVPixelBuffers on Mac (which currently use
+@@ -229,7 +229,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ uint8_t* a_data,
+ base::TimeDelta timestamp);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Wraps provided dmabufs
+ // (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html) with a
+ // VideoFrame. The frame will take ownership of |dmabuf_fds|, and will
+@@ -444,7 +444,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // mailbox, the caller must wait for the included sync point.
+ const gpu::MailboxHolder& mailbox_holder(size_t texture_index) const;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a vector containing the backing DmaBufs for this frame. The number
+ // of returned DmaBufs will be equal or less than the number of planes of
+ // the frame. If there are less, this means that the last FD contains the
+@@ -630,7 +630,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ base::UnsafeSharedMemoryRegion owned_shm_region_;
+ base::WritableSharedMemoryMapping owned_shm_mapping_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ class DmabufHolder;
+
+ // Dmabufs for the frame, used when storage is STORAGE_DMABUFS. Size is either
diff --git a/devel/electron7/files/patch-media_capture_video_create__video__capture__device__factory.cc b/devel/electron7/files/patch-media_capture_video_create__video__capture__device__factory.cc
new file mode 100644
index 000000000000..c0d9f95aec73
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_create__video__capture__device__factory.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/create_video_capture_device_factory.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/create_video_capture_device_factory.cc
+@@ -10,7 +10,7 @@
+ #include "media/capture/video/fake_video_capture_device_factory.h"
+ #include "media/capture/video/file_video_capture_device_factory.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "media/capture/video/linux/video_capture_device_factory_linux.h"
+ #elif defined(OS_CHROMEOS)
+ #include "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
+@@ -82,7 +82,7 @@ CreateChromeOSVideoCaptureDeviceFactory(
+ std::unique_ptr<VideoCaptureDeviceFactory>
+ CreatePlatformSpecificVideoCaptureDeviceFactory(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return std::make_unique<VideoCaptureDeviceFactoryLinux>(ui_task_runner);
+ #elif defined(OS_CHROMEOS)
+ return CreateChromeOSVideoCaptureDeviceFactory(ui_task_runner, {});
diff --git a/devel/electron7/files/patch-media_capture_video_fake__video__capture__device__factory.cc b/devel/electron7/files/patch-media_capture_video_fake__video__capture__device__factory.cc
new file mode 100644
index 000000000000..d87798ff4809
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_fake__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/fake_video_capture_device_factory.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/fake_video_capture_device_factory.cc
+@@ -205,7 +205,7 @@ void FakeVideoCaptureDeviceFactory::GetDeviceDescripto
+ for (const auto& entry : devices_config_) {
+ device_descriptors->emplace_back(
+ base::StringPrintf("fake_device_%d", entry_index), entry.device_id,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #elif defined(OS_MACOSX)
+ VideoCaptureApi::MACOSX_AVFOUNDATION
diff --git a/devel/electron7/files/patch-media_capture_video_file__video__capture__device__factory.cc b/devel/electron7/files/patch-media_capture_video_file__video__capture__device__factory.cc
new file mode 100644
index 000000000000..783db98c98ce
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_file__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/file_video_capture_device_factory.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/file_video_capture_device_factory.cc
+@@ -54,7 +54,7 @@ void FileVideoCaptureDeviceFactory::GetDeviceDescripto
+ #elif defined(OS_MACOSX)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::MACOSX_AVFOUNDATION
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #else
diff --git a/devel/electron7/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc b/devel/electron7/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
new file mode 100644
index 000000000000..68c2683711f7
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
@@ -0,0 +1,26 @@
+--- media/capture/video/linux/v4l2_capture_delegate.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -4,8 +4,10 @@
+
+ #include "media/capture/video/linux/v4l2_capture_delegate.h"
+
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #include <linux/videodev2.h>
++#endif
+ #include <poll.h>
+ #include <sys/fcntl.h>
+ #include <sys/ioctl.h>
+@@ -24,10 +26,10 @@
+
+ using media::mojom::MeteringMode;
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
++// #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+ // 16 bit depth, Realsense F200.
+ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
+-#endif
++// #endif
+
+ // TODO(aleksandar.stojiljkovic): Wrap this with kernel version check once the
+ // format is introduced to kernel.
diff --git a/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc b/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
new file mode 100644
index 000000000000..4208b0366b5a
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__factory__linux.cc
@@ -0,0 +1,32 @@
+--- media/capture/video/linux/video_capture_device_factory_linux.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/linux/video_capture_device_factory_linux.cc
+@@ -259,6 +259,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (!(capabilities & V4L2_CAP_VIDEO_CAPTURE))
+ return false;
+
++#if !defined(OS_FREEBSD)
+ const std::vector<uint32_t>& usable_fourccs =
+ VideoCaptureDeviceLinux::GetListOfUsableFourCCs(false);
+ v4l2_fmtdesc fmtdesc = {};
+@@ -267,6 +268,7 @@ bool VideoCaptureDeviceFactoryLinux::HasUsableFormats(
+ if (base::Contains(usable_fourccs, fmtdesc.pixelformat))
+ return true;
+ }
++#endif
+
+ DVLOG(1) << "No usable formats found";
+ return false;
+@@ -312,9 +314,13 @@ void VideoCaptureDeviceFactoryLinux::GetSupportedForma
+ v4l2_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ for (; DoIoctl(fd, VIDIOC_ENUM_FMT, &v4l2_format) == 0; ++v4l2_format.index) {
+ VideoCaptureFormat supported_format;
++#if !defined(OS_FREEBSD)
+ supported_format.pixel_format =
+ VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+ v4l2_format.pixelformat);
++#else
++ supported_format.pixel_format = PIXEL_FORMAT_UNKNOWN;
++#endif
+
+ if (supported_format.pixel_format == PIXEL_FORMAT_UNKNOWN)
+ continue;
diff --git a/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__linux.cc b/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__linux.cc
new file mode 100644
index 000000000000..2145ec155389
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_linux_video__capture__device__linux.cc
@@ -0,0 +1,61 @@
+--- media/capture/video/linux/video_capture_device_linux.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/linux/video_capture_device_linux.cc
+@@ -37,6 +37,7 @@ int TranslatePowerLineFrequencyToV4L2(PowerLineFrequen
+
+ } // namespace
+
++#if !defined(OS_FREEBSD)
+ // Translates Video4Linux pixel formats to Chromium pixel formats.
+ // static
+ VideoPixelFormat VideoCaptureDeviceLinux::V4l2FourCcToChromiumPixelFormat(
+@@ -50,6 +51,7 @@ std::vector<uint32_t> VideoCaptureDeviceLinux::GetList
+ bool favour_mjpeg) {
+ return V4L2CaptureDelegate::GetListOfUsableFourCcs(favour_mjpeg);
+ }
++#endif // !defined(OS_FREEBSD)
+
+ VideoCaptureDeviceLinux::VideoCaptureDeviceLinux(
+ scoped_refptr<V4L2CaptureDevice> v4l2,
+@@ -71,6 +73,7 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ const VideoCaptureParams& params,
+ std::unique_ptr<VideoCaptureDevice::Client> client) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++#if !defined(OS_FREEBSD)
+ DCHECK(!capture_impl_);
+ if (v4l2_thread_.IsRunning())
+ return; // Wrong state.
+@@ -98,10 +101,12 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
+ for (auto& request : photo_requests_queue_)
+ v4l2_thread_.task_runner()->PostTask(FROM_HERE, std::move(request));
+ photo_requests_queue_.clear();
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++#if !defined(OS_FREEBSD)
+ if (!v4l2_thread_.IsRunning())
+ return; // Wrong state.
+ v4l2_thread_.task_runner()->PostTask(
+@@ -111,6 +116,7 @@ void VideoCaptureDeviceLinux::StopAndDeAllocate() {
+ v4l2_thread_.Stop();
+
+ capture_impl_ = nullptr;
++#endif // !defined(OS_FREEBSD)
+ }
+
+ void VideoCaptureDeviceLinux::TakePhoto(TakePhotoCallback callback) {
+@@ -158,11 +164,13 @@ void VideoCaptureDeviceLinux::SetPhotoOptions(
+ void VideoCaptureDeviceLinux::SetRotation(int rotation) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ rotation_ = rotation;
++#if !defined(OS_FREEBSD)
+ if (v4l2_thread_.IsRunning()) {
+ v4l2_thread_.task_runner()->PostTask(
+ FROM_HERE, base::BindOnce(&V4L2CaptureDelegate::SetRotation,
+ capture_impl_->GetWeakPtr(), rotation));
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace media
diff --git a/devel/electron7/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc b/devel/electron7/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
new file mode 100644
index 000000000000..36f98a60b18c
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_mock__gpu__memory__buffer__manager.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/mock_gpu_memory_buffer_manager.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/mock_gpu_memory_buffer_manager.cc
+@@ -115,7 +115,7 @@ class FakeGpuMemoryBuffer : public gfx::GpuMemoryBuffe
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::NATIVE_PIXMAP;
+ handle.id = handle_.id;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.native_pixmap_handle =
+ gfx::CloneHandleForIPC(handle_.native_pixmap_handle);
+ #endif
diff --git a/devel/electron7/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc b/devel/electron7/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
new file mode 100644
index 000000000000..1e20dd994dbc
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_buffer_pool_impl.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/video_capture_buffer_pool_impl.cc
+@@ -57,7 +57,7 @@ VideoCaptureBufferPoolImpl::CreateSharedMemoryViaRawFi
+ int buffer_id) {
+ // This requires platforms where base::SharedMemoryHandle is backed by a
+ // file descriptor.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::AutoLock lock(lock_);
+
+ VideoCaptureBufferTracker* tracker = GetTracker(buffer_id);
diff --git a/devel/electron7/files/patch-media_capture_video_video__capture__device__client.cc b/devel/electron7/files/patch-media_capture_video_video__capture__device__client.cc
new file mode 100644
index 000000000000..f086cd113c6c
--- /dev/null
+++ b/devel/electron7/files/patch-media_capture_video_video__capture__device__client.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_device_client.cc.orig 2019-12-12 12:39:49 UTC
++++ media/capture/video/video_capture_device_client.cc
+@@ -301,7 +301,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
+ // see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
+ // Windows RGB24 defines blue at lowest byte,
+ // see https://msdn.microsoft.com/en-us/library/windows/desktop/dd407253
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ fourcc_format = libyuv::FOURCC_RAW;
+ #elif defined(OS_WIN)
+ fourcc_format = libyuv::FOURCC_24BG;
diff --git a/devel/electron7/files/patch-media_filters_vp9__parser.h b/devel/electron7/files/patch-media_filters_vp9__parser.h
new file mode 100644
index 000000000000..7199e6a51764
--- /dev/null
+++ b/devel/electron7/files/patch-media_filters_vp9__parser.h
@@ -0,0 +1,10 @@
+--- media/filters/vp9_parser.h.orig 2019-12-12 12:39:49 UTC
++++ media/filters/vp9_parser.h
+@@ -14,6 +14,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <unistd.h>
+ #include <sys/types.h>
+
+ #include <memory>
diff --git a/devel/electron7/files/patch-media_formats_common_offset__byte__queue.cc b/devel/electron7/files/patch-media_formats_common_offset__byte__queue.cc
new file mode 100644
index 000000000000..d624c1492598
--- /dev/null
+++ b/devel/electron7/files/patch-media_formats_common_offset__byte__queue.cc
@@ -0,0 +1,20 @@
+--- media/formats/common/offset_byte_queue.cc.orig 2019-12-12 12:39:49 UTC
++++ media/formats/common/offset_byte_queue.cc
+@@ -46,13 +46,13 @@ void OffsetByteQueue::PeekAt(int64_t offset, const uin
+ *size = tail() - offset;
+ }
+
+-bool OffsetByteQueue::Trim(int64_t max_offset) {
+- if (max_offset < head_) return true;
+- if (max_offset > tail()) {
++bool OffsetByteQueue::Trim(int64_t _max_offset) {
++ if (_max_offset < head_) return true;
++ if (_max_offset > tail()) {
+ Pop(size_);
+ return false;
+ }
+- Pop(max_offset - head_);
++ Pop(_max_offset - head_);
+ return true;
+ }
+
diff --git a/devel/electron7/files/patch-media_formats_common_offset__byte__queue.h b/devel/electron7/files/patch-media_formats_common_offset__byte__queue.h
new file mode 100644
index 000000000000..b3dc321e3890
--- /dev/null
+++ b/devel/electron7/files/patch-media_formats_common_offset__byte__queue.h
@@ -0,0 +1,22 @@
+--- media/formats/common/offset_byte_queue.h.orig 2019-12-12 12:39:49 UTC
++++ media/formats/common/offset_byte_queue.h
+@@ -36,15 +36,15 @@ class MEDIA_EXPORT OffsetByteQueue {
+ // a null |buf| and a |size| of zero.
+ void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
+- // Marks the bytes up to (but not including) |max_offset| as ready for
++ // Marks the bytes up to (but not including) |_max_offset| as ready for
+ // deletion. This is relatively inexpensive, but will not necessarily reduce
+ // the resident buffer size right away (or ever).
+ //
+ // Returns true if the full range of bytes were successfully trimmed,
+- // including the case where |max_offset| is less than the current head.
+- // Returns false if |max_offset| > tail() (although all bytes currently
++ // including the case where |_max_offset| is less than the current head.
++ // Returns false if |_max_offset| > tail() (although all bytes currently
+ // buffered are still cleared).
+- bool Trim(int64_t max_offset);
++ bool Trim(int64_t _max_offset);
+
+ // The head and tail positions, in terms of the file's absolute offsets.
+ // tail() is an exclusive bound.
diff --git a/devel/electron7/files/patch-media_formats_mp2t_es__parser__adts.cc b/devel/electron7/files/patch-media_formats_mp2t_es__parser__adts.cc
new file mode 100644
index 000000000000..4cc67a36a276
--- /dev/null
+++ b/devel/electron7/files/patch-media_formats_mp2t_es__parser__adts.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_adts.cc.orig 2019-12-12 12:39:49 UTC
++++ media/formats/mp2t/es_parser_adts.cc
+@@ -62,11 +62,11 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - kADTSHeaderMinSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - kADTSHeaderMinSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (!isAdtsSyncWord(cur_buf))
+ continue;
+@@ -106,7 +106,7 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron7/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc b/devel/electron7/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
new file mode 100644
index 000000000000..e95b19d9b069
--- /dev/null
+++ b/devel/electron7/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_mpeg1audio.cc.orig 2019-12-12 12:39:49 UTC
++++ media/formats/mp2t/es_parser_mpeg1audio.cc
+@@ -108,11 +108,11 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (cur_buf[0] != 0xff)
+ continue;
+@@ -153,7 +153,7 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/devel/electron7/files/patch-media_gpu_libyuv__image__processor.cc b/devel/electron7/files/patch-media_gpu_libyuv__image__processor.cc
new file mode 100644
index 000000000000..56dca1b9e636
--- /dev/null
+++ b/devel/electron7/files/patch-media_gpu_libyuv__image__processor.cc
@@ -0,0 +1,38 @@
+--- media/gpu/libyuv_image_processor.cc.orig 2019-12-12 12:39:49 UTC
++++ media/gpu/libyuv_image_processor.cc
+@@ -91,7 +91,7 @@ std::unique_ptr<LibYUVImageProcessor> LibYUVImageProce
+ // LibYUVImageProcessor supports only memory-based video frame for input.
+ VideoFrame::StorageType input_storage_type = VideoFrame::STORAGE_UNKNOWN;
+ for (auto input_type : input_config.preferred_storage_types) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input_type == VideoFrame::STORAGE_DMABUFS) {
+ video_frame_mapper = VideoFrameMapperFactory::CreateMapper(
+ input_config.layout.format(), true);
+@@ -100,7 +100,7 @@ std::unique_ptr<LibYUVImageProcessor> LibYUVImageProce
+ break;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (VideoFrame::IsStorageTypeMappable(input_type)) {
+ input_storage_type = input_type;
+@@ -203,7 +203,7 @@ void LibYUVImageProcessor::ProcessTask(scoped_refptr<V
+ FrameReadyCB cb) {
+ DCHECK(process_thread_.task_runner()->BelongsToCurrentThread());
+ DVLOGF(4);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input_frame->storage_type() == VideoFrame::STORAGE_DMABUFS) {
+ DCHECK_NE(video_frame_mapper_.get(), nullptr);
+ input_frame = video_frame_mapper_->Map(std::move(input_frame));
+@@ -213,7 +213,7 @@ void LibYUVImageProcessor::ProcessTask(scoped_refptr<V
+ return;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ int res = DoConversion(input_frame.get(), output_frame.get());
+ if (res != 0) {
diff --git a/devel/electron7/files/patch-media_gpu_linux_platform__video__frame__utils.cc b/devel/electron7/files/patch-media_gpu_linux_platform__video__frame__utils.cc
new file mode 100644
index 000000000000..cd0c6c581bdd
--- /dev/null
+++ b/devel/electron7/files/patch-media_gpu_linux_platform__video__frame__utils.cc
@@ -0,0 +1,20 @@
+--- media/gpu/linux/platform_video_frame_utils.cc.orig 2019-12-12 12:39:49 UTC
++++ media/gpu/linux/platform_video_frame_utils.cc
+@@ -121,7 +121,7 @@ gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferHandle
+ DCHECK(video_frame);
+
+ gfx::GpuMemoryBufferHandle handle;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.type = gfx::NATIVE_PIXMAP;
+
+ std::vector<base::ScopedFD> duped_fds =
+@@ -136,7 +136,7 @@ gfx::GpuMemoryBufferHandle CreateGpuMemoryBufferHandle
+ }
+ #else
+ NOTREACHED();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ return handle;
+ }
+
diff --git a/devel/electron7/files/patch-media_media__options.gni b/devel/electron7/files/patch-media_media__options.gni
new file mode 100644
index 000000000000..1920643065e6
--- /dev/null
+++ b/devel/electron7/files/patch-media_media__options.gni
@@ -0,0 +1,12 @@
+--- media/media_options.gni.orig 2019-12-12 12:39:50 UTC
++++ media/media_options.gni
+@@ -110,6 +110,9 @@ declare_args() {
+ # Enables runtime selection of ALSA library for audio.
+ use_alsa = false
+
++ # Enable runtime selection of sndio(7)
++ use_sndio = false
++
+ # Alsa should be used on non-Android, non-Mac POSIX systems.
+ # Alsa should be used on desktop Chromecast and audio-only Chromecast builds.
+ if (is_posix && !is_android && !is_mac &&
diff --git a/devel/electron7/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc b/devel/electron7/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc
new file mode 100644
index 000000000000..9f4f44939a51
--- /dev/null
+++ b/devel/electron7/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc
@@ -0,0 +1,11 @@
+--- media/mojo/clients/mojo_video_encode_accelerator.cc.orig 2019-12-12 12:39:50 UTC
++++ media/mojo/clients/mojo_video_encode_accelerator.cc
+@@ -124,7 +124,7 @@ void MojoVideoEncodeAccelerator::Encode(scoped_refptr<
+ frame->layout().num_planes());
+ DCHECK(vea_.is_bound());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (frame->storage_type() == VideoFrame::STORAGE_DMABUFS) {
+ DCHECK(frame->HasDmaBufs());
+ vea_->Encode(
diff --git a/devel/electron7/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc b/devel/electron7/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc
new file mode 100644
index 000000000000..1339b45fe8f7
--- /dev/null
+++ b/devel/electron7/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc
@@ -0,0 +1,20 @@
+--- media/mojo/mojom/video_frame_mojom_traits.cc.orig 2019-12-12 12:39:50 UTC
++++ media/mojo/mojom/video_frame_mojom_traits.cc
+@@ -52,7 +52,7 @@ media::mojom::VideoFrameDataPtr MakeVideoFrameData(
+ mojo_frame->PlaneOffset(media::VideoFrame::kVPlane)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input->storage_type() == media::VideoFrame::STORAGE_DMABUFS) {
+ std::vector<mojo::ScopedHandle> dmabuf_fds;
+
+@@ -145,7 +145,7 @@ bool StructTraits<media::mojom::VideoFrameDataView,
+ shared_buffer_data.u_offset(), shared_buffer_data.v_offset(),
+ shared_buffer_data.y_stride(), shared_buffer_data.u_stride(),
+ shared_buffer_data.v_stride(), timestamp);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (data.is_dmabuf_data()) {
+ media::mojom::DmabufVideoFrameDataDataView dmabuf_data;
+ data.GetDmabufDataDataView(&dmabuf_data);
diff --git a/devel/electron7/files/patch-media_mojo_services_gpu__mojo__media__client.cc b/devel/electron7/files/patch-media_mojo_services_gpu__mojo__media__client.cc
new file mode 100644
index 000000000000..64194f9ed961
--- /dev/null
+++ b/devel/electron7/files/patch-media_mojo_services_gpu__mojo__media__client.cc
@@ -0,0 +1,20 @@
+--- media/mojo/services/gpu_mojo_media_client.cc.orig 2019-12-12 12:39:50 UTC
++++ media/mojo/services/gpu_mojo_media_client.cc
+@@ -65,7 +65,7 @@ namespace media {
+ namespace {
+
+ #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
+- defined(OS_WIN) || defined(OS_LINUX)
++ defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ gpu::CommandBufferStub* GetCommandBufferStub(
+ scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner,
+ base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
+@@ -245,7 +245,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::Crea
+ command_buffer_id->route_id));
+ }
+
+-#elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ video_decoder = VdaVideoDecoder::Create(
+ task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
+ gpu_preferences_, gpu_workarounds_,
diff --git a/devel/electron7/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc b/devel/electron7/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
new file mode 100644
index 000000000000..8640c7e64d50
--- /dev/null
+++ b/devel/electron7/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
@@ -0,0 +1,11 @@
+--- media/video/gpu_memory_buffer_video_frame_pool.cc.orig 2019-12-12 12:39:51 UTC
++++ media/video/gpu_memory_buffer_video_frame_pool.cc
+@@ -555,7 +555,7 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHa
+ }
+
+ bool is_software_backed_video_frame = !video_frame->HasTextures();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ is_software_backed_video_frame &= !video_frame->HasDmaBufs();
+ #endif
+
diff --git a/devel/electron7/files/patch-mojo_public_c_system_thunks.cc b/devel/electron7/files/patch-mojo_public_c_system_thunks.cc
new file mode 100644
index 000000000000..3dd288f9e27f
--- /dev/null
+++ b/devel/electron7/files/patch-mojo_public_c_system_thunks.cc
@@ -0,0 +1,58 @@
+--- mojo/public/c/system/thunks.cc.orig 2019-12-12 12:39:51 UTC
++++ mojo/public/c/system/thunks.cc
+@@ -16,7 +16,7 @@
+ #include "build/build_config.h"
+ #include "mojo/public/c/system/core.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
+ #include "base/optional.h"
+@@ -28,7 +28,7 @@ namespace {
+
+ typedef void (*MojoGetSystemThunksFunction)(MojoSystemThunks* thunks);
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ PROTECTED_MEMORY_SECTION
+ base::ProtectedMemory<MojoGetSystemThunksFunction> g_get_thunks;
+ #endif
+@@ -65,7 +65,7 @@ namespace mojo {
+ class CoreLibraryInitializer {
+ public:
+ CoreLibraryInitializer(const MojoInitializeOptions* options) {
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ bool application_provided_path = false;
+ base::Optional<base::FilePath> library_path;
+ if (options && options->struct_size >= sizeof(*options) &&
+@@ -84,7 +84,7 @@ class CoreLibraryInitializer {
+
+ if (!library_path) {
+ // Default to looking for the library in the current working directory.
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::FilePath::CharType kDefaultLibraryPathValue[] =
+ FILE_PATH_LITERAL("./libmojo_core.so");
+ #elif defined(OS_WIN)
+@@ -138,16 +138,16 @@ class CoreLibraryInitializer {
+
+ CHECK_GT(g_thunks->size, 0u)
+ << "Invalid mojo_core library: " << library_path->value();
+-#else // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#else // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ NOTREACHED()
+ << "Dynamic mojo_core loading is not supported on this platform.";
+-#endif // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ ~CoreLibraryInitializer() = default;
+
+ private:
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ base::Optional<base::ScopedNativeLibrary> library_;
+ #endif
+
diff --git a/devel/electron7/files/patch-mojo_public_js_mojo__bindings__resources.grd b/devel/electron7/files/patch-mojo_public_js_mojo__bindings__resources.grd
new file mode 100644
index 000000000000..dadcf886d9c2
--- /dev/null
+++ b/devel/electron7/files/patch-mojo_public_js_mojo__bindings__resources.grd
@@ -0,0 +1,11 @@
+--- mojo/public/js/mojo_bindings_resources.grd.orig 2019-12-12 12:39:51 UTC
++++ mojo/public/js/mojo_bindings_resources.grd
+@@ -60,7 +60,7 @@
+ use_base_dir="false"
+ type="BINDATA"
+ compress="gzip" />
+- <if expr="is_win or is_macosx or is_linux">
++ <if expr="is_win or is_macosx or is_posix">
+ <include name="IDR_MOJO_TIME_MOJOM_HTML"
+ file="${root_gen_dir}/mojo/public/mojom/base/time.mojom.html"
+ use_base_dir="false"
diff --git a/devel/electron7/files/patch-net_BUILD.gn b/devel/electron7/files/patch-net_BUILD.gn
new file mode 100644
index 000000000000..9d5928046e3e
--- /dev/null
+++ b/devel/electron7/files/patch-net_BUILD.gn
@@ -0,0 +1,46 @@
+--- net/BUILD.gn.orig 2019-12-12 12:39:52 UTC
++++ net/BUILD.gn
+@@ -105,7 +105,7 @@ net_configs = [
+ "//build/config/compiler:wexit_time_destructors",
+ ]
+
+-if (is_linux) {
++if (is_linux && !is_bsd) {
+ net_configs += [ "//build/config/linux:libresolv" ]
+ }
+
+@@ -1924,7 +1924,7 @@ component("net") {
+ }
+ }
+
+- if (is_android || is_chromeos) {
++ if (is_android || is_chromeos || is_bsd) {
+ sources += [
+ "base/network_change_notifier_posix.cc",
+ "base/network_change_notifier_posix.h",
+@@ -1957,7 +1957,7 @@ component("net") {
+ }
+
+ # Use getifaddrs() on POSIX platforms, except Linux and Android.
+- if (is_posix && !is_linux && !is_android) {
++ if (is_posix && ((!is_linux && !is_android) || (is_bsd))) {
+ sources += [
+ "base/network_interfaces_getifaddrs.cc",
+ "base/network_interfaces_getifaddrs.h",
+@@ -2051,6 +2051,16 @@ component("net") {
+ ]
+
+ sources -= [ "disk_cache/blockfile/file_posix.cc" ]
++ }
++
++ if (is_bsd) {
++ sources -= [
++ "base/address_tracker_linux.cc",
++ "base/address_tracker_linux.h",
++ "base/network_change_notifier_linux.cc",
++ "base/network_change_notifier_linux.h",
++ "base/network_interfaces_linux.cc",
++ ]
+ }
+
+ if (is_ios || is_mac) {
diff --git a/devel/electron7/files/patch-net_base_address__tracker__linux.cc b/devel/electron7/files/patch-net_base_address__tracker__linux.cc
new file mode 100644
index 000000000000..9c7d72523545
--- /dev/null
+++ b/devel/electron7/files/patch-net_base_address__tracker__linux.cc
@@ -0,0 +1,177 @@
+--- net/base/address_tracker_linux.cc.orig 2019-12-12 12:39:52 UTC
++++ net/base/address_tracker_linux.cc
+@@ -21,96 +21,10 @@
+ namespace net {
+ namespace internal {
+
+-namespace {
+-
+-// Some kernel functions such as wireless_send_event and rtnetlink_ifinfo_prep
+-// may send spurious messages over rtnetlink. RTM_NEWLINK messages where
+-// ifi_change == 0 and rta_type == IFLA_WIRELESS should be ignored.
+-bool IgnoreWirelessChange(const struct nlmsghdr* header,
+- const struct ifinfomsg* msg) {
+- size_t length = IFLA_PAYLOAD(header);
+- for (const struct rtattr* attr = IFLA_RTA(msg); RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- if (attr->rta_type == IFLA_WIRELESS && msg->ifi_change == 0)
+- return true;
+- }
+- return false;
+-}
+-
+-// Retrieves address from NETLINK address message.
+-// Sets |really_deprecated| for IPv6 addresses with preferred lifetimes of 0.
+-bool GetAddress(const struct nlmsghdr* header,
+- IPAddress* out,
+- bool* really_deprecated) {
+- if (really_deprecated)
+- *really_deprecated = false;
+- const struct ifaddrmsg* msg =
+- reinterpret_cast<struct ifaddrmsg*>(NLMSG_DATA(header));
+- size_t address_length = 0;
+- switch (msg->ifa_family) {
+- case AF_INET:
+- address_length = IPAddress::kIPv4AddressSize;
+- break;
+- case AF_INET6:
+- address_length = IPAddress::kIPv6AddressSize;
+- break;
+- default:
+- // Unknown family.
+- return false;
+- }
+- // Use IFA_ADDRESS unless IFA_LOCAL is present. This behavior here is based on
+- // getaddrinfo in glibc (check_pf.c). Judging from kernel implementation of
+- // NETLINK, IPv4 addresses have only the IFA_ADDRESS attribute, while IPv6
+- // have the IFA_LOCAL attribute.
+- uint8_t* address = NULL;
+- uint8_t* local = NULL;
+- size_t length = IFA_PAYLOAD(header);
+- for (const struct rtattr* attr =
+- reinterpret_cast<const struct rtattr*>(IFA_RTA(msg));
+- RTA_OK(attr, length);
+- attr = RTA_NEXT(attr, length)) {
+- switch (attr->rta_type) {
+- case IFA_ADDRESS:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- address = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_LOCAL:
+- DCHECK_GE(RTA_PAYLOAD(attr), address_length);
+- local = reinterpret_cast<uint8_t*>(RTA_DATA(attr));
+- break;
+- case IFA_CACHEINFO: {
+- const struct ifa_cacheinfo *cache_info =
+- reinterpret_cast<const struct ifa_cacheinfo*>(RTA_DATA(attr));
+- if (really_deprecated)
+- *really_deprecated = (cache_info->ifa_prefered == 0);
+- } break;
+- default:
+- break;
+- }
+- }
+- if (local)
+- address = local;
+- if (!address)
+- return false;
+- *out = IPAddress(address, address_length);
+- return true;
+-}
+-
+-} // namespace
+-
+ // static
+ char* AddressTrackerLinux::GetInterfaceName(int interface_index, char* buf) {
+- memset(buf, 0, IFNAMSIZ);
+- base::ScopedFD ioctl_socket = GetSocketForIoctl();
+- if (!ioctl_socket.is_valid())
+- return buf;
+-
+- struct ifreq ifr = {};
+- ifr.ifr_ifindex = interface_index;
+-
+- if (ioctl(ioctl_socket.get(), SIOCGIFNAME, &ifr) == 0)
+- strncpy(buf, ifr.ifr_name, IFNAMSIZ - 1);
+- return buf;
++ NOTIMPLEMENTED();
++ return NULL;
+ }
+
+ AddressTrackerLinux::AddressTrackerLinux()
+@@ -147,6 +61,7 @@ AddressTrackerLinux::AddressTrackerLinux(
+ AddressTrackerLinux::~AddressTrackerLinux() = default;
+
+ void AddressTrackerLinux::Init() {
++#if !defined(OS_FREEBSD)
+ netlink_fd_.reset(socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE));
+ if (!netlink_fd_.is_valid()) {
+ PLOG(ERROR) << "Could not create NETLINK socket";
+@@ -242,6 +157,7 @@ void AddressTrackerLinux::AbortAndForceOnline() {
+ connection_type_initialized_cv_.Broadcast();
+ }
+
++#if !defined(OS_BSD)
+ AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
+ AddressTrackerAutoLock lock(*this, address_map_lock_);
+ return address_map_;
+@@ -260,6 +176,7 @@ bool AddressTrackerLinux::IsInterfaceIgnored(int inter
+ const char* interface_name = get_interface_name_(interface_index, buf);
+ return ignored_interfaces_.find(interface_name) != ignored_interfaces_.end();
+ }
++#endif // !OS_BSD
+
+ NetworkChangeNotifier::ConnectionType
+ AddressTrackerLinux::GetCurrentConnectionType() {
+@@ -318,6 +235,7 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ bool* address_changed,
+ bool* link_changed,
+ bool* tunnel_changed) {
++#if !defined(OS_FREEBSD)
+ DCHECK(buffer);
+ for (struct nlmsghdr* header = reinterpret_cast<struct nlmsghdr*>(buffer);
+ NLMSG_OK(header, length);
+@@ -414,6 +332,10 @@ void AddressTrackerLinux::HandleMessage(char* buffer,
+ break;
+ }
+ }
++#else // !OS_FREEBSD
++ NOTIMPLEMENTED();
++ AbortAndForceOnline();
++#endif // !OS_FREEBSD
+ }
+
+ void AddressTrackerLinux::OnFileCanReadWithoutBlocking() {
+@@ -441,31 +363,7 @@ bool AddressTrackerLinux::IsTunnelInterfaceName(const
+ }
+
+ void AddressTrackerLinux::UpdateCurrentConnectionType() {
+- AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+- std::unordered_set<int> online_links = GetOnlineLinks();
+-
+- // Strip out tunnel interfaces from online_links
+- for (auto it = online_links.cbegin(); it != online_links.cend();) {
+- if (IsTunnelInterface(*it)) {
+- it = online_links.erase(it);
+- } else {
+- ++it;
+- }
+- }
+-
+- NetworkInterfaceList networks;
+- NetworkChangeNotifier::ConnectionType type =
+- NetworkChangeNotifier::CONNECTION_NONE;
+- if (GetNetworkListImpl(&networks, 0, online_links, address_map,
+- get_interface_name_)) {
+- type = NetworkChangeNotifier::ConnectionTypeFromInterfaceList(networks);
+- } else {
+- type = online_links.empty() ? NetworkChangeNotifier::CONNECTION_NONE
+- : NetworkChangeNotifier::CONNECTION_UNKNOWN;
+- }
+-
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- current_connection_type_ = type;
++ NOTIMPLEMENTED();
+ }
+
+ int AddressTrackerLinux::GetThreadsWaitingForConnectionTypeInitForTesting()
diff --git a/devel/electron7/files/patch-net_base_address__tracker__linux.h b/devel/electron7/files/patch-net_base_address__tracker__linux.h
new file mode 100644
index 000000000000..6bd9785ce329
--- /dev/null
+++ b/devel/electron7/files/patch-net_base_address__tracker__linux.h
@@ -0,0 +1,12 @@
+--- net/base/address_tracker_linux.h.orig 2019-12-12 12:39:52 UTC
++++ net/base/address_tracker_linux.h
+@@ -7,9 +7,6 @@
+
+ #include <sys/socket.h> // Needed to include netlink.
+ // Mask superfluous definition of |struct net|. This is fixed in Linux 2.6.38.
+-#define net net_kernel
+-#include <linux/rtnetlink.h>
+-#undef net
+ #include <stddef.h>
+
+ #include <map>
diff --git a/devel/electron7/files/patch-net_base_address__tracker__linux__unittest.cc b/devel/electron7/files/patch-net_base_address__tracker__linux__unittest.cc
new file mode 100644
index 000000000000..7c3a8d2ad1e7
--- /dev/null
+++ b/devel/electron7/files/patch-net_base_address__tracker__linux__unittest.cc
@@ -0,0 +1,14 @@
+--- net/base/address_tracker_linux_unittest.cc.orig 2019-12-12 12:39:52 UTC
++++ net/base/address_tracker_linux_unittest.cc
+@@ -4,7 +4,11 @@
+
+ #include "net/base/address_tracker_linux.h"
+
++#if defined(__linux__)
+ #include <linux/if.h>
++#else
++#include <net/if.h>
++#endif
+
+ #include <memory>
+ #include <unordered_set>
diff --git a/devel/electron7/files/patch-net_base_network__change__notifier.cc b/devel/electron7/files/patch-net_base_network__change__notifier.cc
new file mode 100644
index 000000000000..36864139d5c0
--- /dev/null
+++ b/devel/electron7/files/patch-net_base_network__change__notifier.cc
@@ -0,0 +1,19 @@
+--- net/base/network_change_notifier.cc.orig 2019-12-12 12:39:52 UTC
++++ net/base/network_change_notifier.cc
+@@ -35,7 +35,7 @@
+ #include "net/base/network_change_notifier_linux.h"
+ #elif defined(OS_MACOSX)
+ #include "net/base/network_change_notifier_mac.h"
+-#elif defined(OS_CHROMEOS)
++#elif defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "net/base/network_change_notifier_posix.h"
+ #elif defined(OS_FUCHSIA)
+ #include "net/base/network_change_notifier_fuchsia.h"
+@@ -236,7 +236,6 @@ std::unique_ptr<NetworkChangeNotifier> NetworkChangeNo
+ return std::make_unique<NetworkChangeNotifierFuchsia>(
+ 0 /* required_features */);
+ #else
+- NOTIMPLEMENTED();
+ return NULL;
+ #endif
+ }
diff --git a/devel/electron7/files/patch-net_base_network__interfaces__posix.h b/devel/electron7/files/patch-net_base_network__interfaces__posix.h
new file mode 100644
index 000000000000..c4ced80ae3a9
--- /dev/null
+++ b/devel/electron7/files/patch-net_base_network__interfaces__posix.h
@@ -0,0 +1,11 @@
+--- net/base/network_interfaces_posix.h.orig 2019-12-12 12:39:52 UTC
++++ net/base/network_interfaces_posix.h
+@@ -8,6 +8,8 @@
+ // This file provides some basic functionality shared between
+ // network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
+
++#include <sys/socket.h>
++
+ #include <string>
+
+ struct sockaddr;
diff --git a/devel/electron7/files/patch-net_disk__cache_blockfile_disk__format.h b/devel/electron7/files/patch-net_disk__cache_blockfile_disk__format.h
new file mode 100644
index 000000000000..490f8f840e3b
--- /dev/null
+++ b/devel/electron7/files/patch-net_disk__cache_blockfile_disk__format.h
@@ -0,0 +1,12 @@
+--- net/disk_cache/blockfile/disk_format.h.orig 2019-12-12 12:39:53 UTC
++++ net/disk_cache/blockfile/disk_format.h
+@@ -149,7 +149,9 @@ struct RankingsNode {
+ };
+ #pragma pack(pop)
+
++#if !defined(OS_BSD)
+ static_assert(sizeof(RankingsNode) == 36, "bad RankingsNode");
++#endif
+
+ } // namespace disk_cache
+
diff --git a/devel/electron7/files/patch-net_dns_address__sorter__posix.cc b/devel/electron7/files/patch-net_dns_address__sorter__posix.cc
new file mode 100644
index 000000000000..6eb02b0de7c5
--- /dev/null
+++ b/devel/electron7/files/patch-net_dns_address__sorter__posix.cc
@@ -0,0 +1,12 @@
+--- net/dns/address_sorter_posix.cc.orig 2019-12-12 12:39:53 UTC
++++ net/dns/address_sorter_posix.cc
+@@ -13,7 +13,9 @@
+ #include <sys/socket.h> // Must be included before ifaddrs.h.
+ #include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_var.h>
+ #include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #endif
diff --git a/devel/electron7/files/patch-net_dns_dns__config__service__posix__unittest.cc b/devel/electron7/files/patch-net_dns_dns__config__service__posix__unittest.cc
new file mode 100644
index 000000000000..3b08caa52aae
--- /dev/null
+++ b/devel/electron7/files/patch-net_dns_dns__config__service__posix__unittest.cc
@@ -0,0 +1,47 @@
+--- net/dns/dns_config_service_posix_unittest.cc.orig 2019-12-12 12:39:53 UTC
++++ net/dns/dns_config_service_posix_unittest.cc
+@@ -2,8 +2,6 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <resolv.h>
+-
+ #include <memory>
+
+ #include "base/cancelable_callback.h"
+@@ -50,7 +48,7 @@ const char* const kNameserversIPv4[] = {
+ "1.0.0.1",
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char* const kNameserversIPv6[] = {
+ NULL,
+ "2001:DB8:0::42",
+@@ -86,7 +84,7 @@ void InitializeResState(res_state res) {
+ ++res->nscount;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Install IPv6 addresses, replacing the corresponding IPv4 addresses.
+ unsigned nscount6 = 0;
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+@@ -107,7 +105,7 @@ void InitializeResState(res_state res) {
+ }
+
+ void CloseResState(res_state res) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (int i = 0; i < res->nscount; ++i) {
+ if (res->_u._ext.nsaddrs[i] != NULL)
+ free(res->_u._ext.nsaddrs[i]);
+@@ -132,7 +130,7 @@ void InitializeExpectedConfig(DnsConfig* config) {
+ config->nameservers.push_back(IPEndPoint(ip, NS_DEFAULTPORT + i));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+ if (!kNameserversIPv6[i])
+ continue;
diff --git a/devel/electron7/files/patch-net_dns_dns__reloader.cc b/devel/electron7/files/patch-net_dns_dns__reloader.cc
new file mode 100644
index 000000000000..078865505b8f
--- /dev/null
+++ b/devel/electron7/files/patch-net_dns_dns__reloader.cc
@@ -0,0 +1,13 @@
+--- net/dns/dns_reloader.cc.orig 2019-12-12 12:39:53 UTC
++++ net/dns/dns_reloader.cc
+@@ -7,6 +7,10 @@
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+
++#if defined(OS_FREEBSD)
++#include <netinet/in.h>
++#endif
++
+ #include <resolv.h>
+
+ #include "base/lazy_instance.h"
diff --git a/devel/electron7/files/patch-net_dns_dns__util.cc b/devel/electron7/files/patch-net_dns_dns__util.cc
new file mode 100644
index 000000000000..33c75f996006
--- /dev/null
+++ b/devel/electron7/files/patch-net_dns_dns__util.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_util.cc.orig 2019-12-16 13:32:59 UTC
++++ net/dns/dns_util.cc
+@@ -38,6 +38,8 @@ const uint16_t kFlagNamePointer = 0xc000;
+
+ } // namespace
+
++#include <sys/socket.h>
++
+ #if defined(OS_POSIX)
+ #include <netinet/in.h>
+ #if !defined(OS_NACL)
diff --git a/devel/electron7/files/patch-net_dns_host__resolver__proc.cc b/devel/electron7/files/patch-net_dns_host__resolver__proc.cc
new file mode 100644
index 000000000000..44a2768d3f67
--- /dev/null
+++ b/devel/electron7/files/patch-net_dns_host__resolver__proc.cc
@@ -0,0 +1,11 @@
+--- net/dns/host_resolver_proc.cc.orig 2019-12-12 12:39:53 UTC
++++ net/dns/host_resolver_proc.cc
+@@ -197,7 +197,7 @@ int SystemHostResolverCall(const std::string& host,
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+ base::BlockingType::WILL_BLOCK);
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+ DnsReloaderMaybeReload();
+ #endif
diff --git a/devel/electron7/files/patch-net_features.gni b/devel/electron7/files/patch-net_features.gni
new file mode 100644
index 000000000000..dfb2b6a3b1b8
--- /dev/null
+++ b/devel/electron7/files/patch-net_features.gni
@@ -0,0 +1,11 @@
+--- net/features.gni.orig 2019-12-12 12:39:53 UTC
++++ net/features.gni
+@@ -23,7 +23,7 @@ declare_args() {
+ disable_brotli_filter = false
+
+ # Multicast DNS.
+- enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios
++ enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios || is_bsd
+
+ # Reporting not used on iOS.
+ enable_reporting = !is_ios
diff --git a/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.cc b/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.cc
new file mode 100644
index 000000000000..2537104fd49a
--- /dev/null
+++ b/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.cc
@@ -0,0 +1,14 @@
+--- net/http/http_auth_gssapi_posix.cc.orig 2019-12-12 12:39:53 UTC
++++ net/http/http_auth_gssapi_posix.cc
+@@ -366,8 +366,9 @@ base::NativeLibrary GSSAPISharedLibrary::LoadSharedLib
+ static const char* const kDefaultLibraryNames[] = {
+ #if defined(OS_MACOSX)
+ "/System/Library/Frameworks/GSS.framework/GSS"
+-#elif defined(OS_OPENBSD)
+- "libgssapi.so" // Heimdal - OpenBSD
++#elif defined(OS_BSD)
++ "libgssapi_krb5.so.2", // MIT Kerberos - FreeBSD
++ "libgssapi.so" // Heimdal - OpenBSD, FreeBSD
+ #else
+ "libgssapi_krb5.so.2", // MIT Kerberos - FC, Suse10, Debian
+ "libgssapi.so.4", // Heimdal - Suse10, MDK
diff --git a/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.h b/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.h
new file mode 100644
index 000000000000..60f4d483634e
--- /dev/null
+++ b/devel/electron7/files/patch-net_http_http__auth__gssapi__posix.h
@@ -0,0 +1,12 @@
+--- net/http/http_auth_gssapi_posix.h.orig 2019-12-12 12:39:53 UTC
++++ net/http/http_auth_gssapi_posix.h
+@@ -21,6 +21,9 @@
+ #include <GSS/gssapi.h>
+ #elif defined(OS_FREEBSD)
+ #include <gssapi/gssapi.h>
++#ifndef GSS_C_DELEG_POLICY_FLAG
++#define GSS_C_DELEG_POLICY_FLAG 32768
++#endif
+ #else
+ #include <gssapi.h>
+ #endif
diff --git a/devel/electron7/files/patch-net_nqe_network__quality__estimator.cc b/devel/electron7/files/patch-net_nqe_network__quality__estimator.cc
new file mode 100644
index 000000000000..2754c50e01f8
--- /dev/null
+++ b/devel/electron7/files/patch-net_nqe_network__quality__estimator.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator.cc.orig 2019-12-12 12:39:53 UTC
++++ net/nqe/network_quality_estimator.cc
+@@ -101,7 +101,7 @@ nqe::internal::NetworkID DoGetCurrentNetworkID() {
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET:
+ break;
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI:
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ network_id.id = GetWifiSSID();
+ #endif
+ break;
diff --git a/devel/electron7/files/patch-net_nqe_network__quality__estimator__unittest.cc b/devel/electron7/files/patch-net_nqe_network__quality__estimator__unittest.cc
new file mode 100644
index 000000000000..e58b82e100c4
--- /dev/null
+++ b/devel/electron7/files/patch-net_nqe_network__quality__estimator__unittest.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator_unittest.cc.orig 2019-12-12 12:39:53 UTC
++++ net/nqe/network_quality_estimator_unittest.cc
+@@ -2144,7 +2144,7 @@ TEST_F(NetworkQualityEstimatorTest, TestGlobalSocketWa
+ // TestTCPSocketRTT requires kernel support for tcp_info struct, and so it is
+ // enabled only on certain platforms.
+ // ChromeOS is disabled due to crbug.com/986904
+-#if (defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID)) && \
++#if (defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)) && \
+ !defined(OS_CHROMEOS)
+ #define MAYBE_TestTCPSocketRTT TestTCPSocketRTT
+ #else
diff --git a/devel/electron7/files/patch-net_proxy__resolution_proxy__config__service__linux.cc b/devel/electron7/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
new file mode 100644
index 000000000000..9e43cc287e6a
--- /dev/null
+++ b/devel/electron7/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
@@ -0,0 +1,39 @@
+--- net/proxy_resolution/proxy_config_service_linux.cc.orig 2019-12-12 12:39:53 UTC
++++ net/proxy_resolution/proxy_config_service_linux.cc
+@@ -6,7 +6,9 @@
+
+ #include <errno.h>
+ #include <limits.h>
++#if !defined(OS_BSD)
+ #include <sys/inotify.h>
++#endif
+ #include <unistd.h>
+
+ #include <map>
+@@ -495,6 +497,7 @@ int StringToIntOrDefault(base::StringPiece value, int
+ return default_value;
+ }
+
++#if !defined(OS_BSD)
+ // This is the KDE version that reads kioslaverc and simulates gsettings.
+ // Doing this allows the main Delegate code, as well as the unit tests
+ // for it, to stay the same - and the settings map fairly well besides.
+@@ -986,6 +989,7 @@ class SettingGetterImplKDE : public ProxyConfigService
+
+ DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
+ };
++#endif
+
+ } // namespace
+
+@@ -1197,8 +1201,10 @@ ProxyConfigServiceLinux::Delegate::Delegate(
+ case base::nix::DESKTOP_ENVIRONMENT_KDE3:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE4:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE5:
++#if !defined(OS_BSD)
+ setting_getter_.reset(new SettingGetterImplKDE(env_var_getter_.get()));
+ break;
++#endif
+ case base::nix::DESKTOP_ENVIRONMENT_XFCE:
+ case base::nix::DESKTOP_ENVIRONMENT_OTHER:
+ break;
diff --git a/devel/electron7/files/patch-net_proxy__resolution_proxy__resolution__service.cc b/devel/electron7/files/patch-net_proxy__resolution_proxy__resolution__service.cc
new file mode 100644
index 000000000000..03e394546a53
--- /dev/null
+++ b/devel/electron7/files/patch-net_proxy__resolution_proxy__resolution__service.cc
@@ -0,0 +1,29 @@
+--- net/proxy_resolution/proxy_resolution_service.cc.orig 2019-12-12 12:39:53 UTC
++++ net/proxy_resolution/proxy_resolution_service.cc
+@@ -48,7 +48,7 @@
+ #elif defined(OS_MACOSX)
+ #include "net/proxy_resolution/proxy_config_service_mac.h"
+ #include "net/proxy_resolution/proxy_resolver_mac.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "net/proxy_resolution/proxy_config_service_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "net/proxy_resolution/proxy_config_service_android.h"
+@@ -62,7 +62,7 @@ namespace net {
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ constexpr net::NetworkTrafficAnnotationTag kSystemProxyConfigTrafficAnnotation =
+ net::DefineNetworkTrafficAnnotation("proxy_config_system", R"(
+ semantics {
+@@ -1547,7 +1547,7 @@ ProxyResolutionService::CreateSystemProxyConfigService
+ << "profile_io_data.cc::CreateProxyConfigService and this should "
+ << "be used only for examples.";
+ return std::make_unique<UnsetProxyConfigService>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
+ new ProxyConfigServiceLinux());
+
diff --git a/devel/electron7/files/patch-net_socket_socket__posix.cc b/devel/electron7/files/patch-net_socket_socket__posix.cc
new file mode 100644
index 000000000000..5a61a7f4d801
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/socket_posix.cc.orig 2019-12-12 12:39:54 UTC
++++ net/socket/socket_posix.cc
+@@ -520,7 +520,7 @@ void SocketPosix::ReadCompleted() {
+ }
+
+ int SocketPosix::DoWrite(IOBuffer* buf, int buf_len) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Disable SIGPIPE for this write. Although Chromium globally disables
+ // SIGPIPE, the net stack may be used in other consumers which do not do
+ // this. MSG_NOSIGNAL is a Linux-only API. On OS X, this is a setsockopt on
diff --git a/devel/electron7/files/patch-net_socket_socks5__client__socket.cc b/devel/electron7/files/patch-net_socket_socks5__client__socket.cc
new file mode 100644
index 000000000000..5a85507e7aa7
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_socks5__client__socket.cc
@@ -0,0 +1,13 @@
+--- net/socket/socks5_client_socket.cc.orig 2019-12-12 12:39:54 UTC
++++ net/socket/socks5_client_socket.cc
+@@ -4,6 +4,10 @@
+
+ #include "net/socket/socks5_client_socket.h"
+
++#if defined(OS_BSD)
++#include <netinet/in.h>
++#endif
++
+ #include <utility>
+
+ #include "base/bind.h"
diff --git a/devel/electron7/files/patch-net_socket_tcp__socket__posix.cc b/devel/electron7/files/patch-net_socket_tcp__socket__posix.cc
new file mode 100644
index 000000000000..65d680127d65
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_tcp__socket__posix.cc
@@ -0,0 +1,20 @@
+--- net/socket/tcp_socket_posix.cc.orig 2019-12-12 12:39:54 UTC
++++ net/socket/tcp_socket_posix.cc
+@@ -88,6 +88,17 @@ bool SetTCPKeepAlive(int fd, bool enable, int delay) {
+ PLOG(ERROR) << "Failed to set TCP_KEEPALIVE on fd: " << fd;
+ return false;
+ }
++#elif defined(OS_BSD)
++ // Set seconds until first TCP keep alive.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPIDLE on fd: " << fd;
++ return false;
++ }
++ // Set seconds between TCP keep alives.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPINTVL on fd: " << fd;
++ return false;
++ }
+ #endif
+ return true;
+ }
diff --git a/devel/electron7/files/patch-net_socket_udp__socket__posix.cc b/devel/electron7/files/patch-net_socket_udp__socket__posix.cc
new file mode 100644
index 000000000000..779ac8e50e92
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_udp__socket__posix.cc
@@ -0,0 +1,108 @@
+--- net/socket/udp_socket_posix.cc.orig 2019-12-12 12:39:54 UTC
++++ net/socket/udp_socket_posix.cc
+@@ -69,7 +69,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+ const base::TimeDelta kActivityMonitorMsThreshold =
+ base::TimeDelta::FromMilliseconds(100);
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
+ // requires passing IPv4 address instead of interface index. This function
+ // resolves IPv4 address by interface index. The |address| is returned in
+@@ -98,7 +98,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
+ return OK;
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+
+@@ -644,13 +644,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ }
+
+ void UDPSocketPosix::SetMsgConfirm(bool confirm) {
+-#if !defined(OS_MACOSX) && !defined(OS_IOS)
++#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ if (confirm) {
+ sendto_flags_ |= MSG_CONFIRM;
+ } else {
+ sendto_flags_ &= ~MSG_CONFIRM;
+ }
+-#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
++#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ }
+
+ int UDPSocketPosix::AllowAddressReuse() {
+@@ -665,17 +665,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ int value = broadcast ? 1 : 0;
+ int rv;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // SO_REUSEPORT on OSX permits multiple processes to each receive
+ // UDP multicast or broadcast datagrams destined for the bound
+ // port.
+ // This is only being set on OSX because its behavior is platform dependent
+ // and we are playing it safe by only setting it on platforms where things
+ // break.
++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
++ if (rv != 0)
++ return MapSystemError(errno);
+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
+ if (rv != 0)
+ return MapSystemError(errno);
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
+
+ return rv == 0 ? OK : MapSystemError(errno);
+@@ -935,7 +938,7 @@ int UDPSocketPosix::SetMulticastOptions() {
+ if (multicast_interface_ != 0) {
+ switch (addr_family_) {
+ case AF_INET: {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -947,7 +950,11 @@ int UDPSocketPosix::SetMulticastOptions() {
+ mreq.imr_address.s_addr = htonl(INADDR_ANY);
+ #endif // !defined(OS_MACOSX)
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
++#if defined(OS_BSD)
++ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr), sizeof(mreq.imr_interface.s_addr));
++#else
+ reinterpret_cast<const char*>(&mreq), sizeof(mreq));
++#endif
+ if (rv)
+ return MapSystemError(errno);
+ break;
+@@ -1009,7 +1016,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -1057,9 +1064,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
+ case IPAddress::kIPv4AddressSize: {
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
++#if defined(OS_BSD)
++ ip_mreq mreq = {};
++ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
++ &mreq.imr_interface.s_addr);
++
++ if (error != OK)
++ return error;
++#else
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = INADDR_ANY;
++#endif
+ memcpy(&mreq.imr_multiaddr, group_address.bytes().data(),
+ IPAddress::kIPv4AddressSize);
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_DROP_MEMBERSHIP,
diff --git a/devel/electron7/files/patch-net_socket_udp__socket__posix.h b/devel/electron7/files/patch-net_socket_udp__socket__posix.h
new file mode 100644
index 000000000000..ac84bd4d431d
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_udp__socket__posix.h
@@ -0,0 +1,11 @@
+--- net/socket/udp_socket_posix.h.orig 2019-12-12 12:39:54 UTC
++++ net/socket/udp_socket_posix.h
+@@ -33,7 +33,7 @@
+
+ #if defined(__ANDROID__) && defined(__aarch64__)
+ #define HAVE_SENDMMSG 1
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define HAVE_SENDMMSG 1
+ #else
+ #define HAVE_SENDMMSG 0
diff --git a/devel/electron7/files/patch-net_socket_unix__domain__client__socket__posix.cc b/devel/electron7/files/patch-net_socket_unix__domain__client__socket__posix.cc
new file mode 100644
index 000000000000..93c2cb269df9
--- /dev/null
+++ b/devel/electron7/files/patch-net_socket_unix__domain__client__socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/unix_domain_client_socket_posix.cc.orig 2019-12-12 12:39:54 UTC
++++ net/socket/unix_domain_client_socket_posix.cc
+@@ -56,7 +56,7 @@ bool UnixDomainClientSocket::FillAddress(const std::st
+ return true;
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Convert the path given into abstract socket name. It must start with
+ // the '\0' character, so we are adding it. |addr_len| must specify the
+ // length of the structure exactly, as potentially the socket name may
diff --git a/devel/electron7/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc b/devel/electron7/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
new file mode 100644
index 000000000000..b798cd19c323
--- /dev/null
+++ b/devel/electron7/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
@@ -0,0 +1,20 @@
+--- net/tools/cert_verify_tool/cert_verify_tool.cc.orig 2019-12-12 12:39:54 UTC
++++ net/tools/cert_verify_tool/cert_verify_tool.cc
+@@ -28,7 +28,7 @@
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "net/proxy_resolution/proxy_config.h"
+ #include "net/proxy_resolution/proxy_config_service_fixed.h"
+ #endif
+@@ -49,7 +49,7 @@ void SetUpOnNetworkThread(
+ base::WaitableEvent* initialization_complete_event) {
+ net::URLRequestContextBuilder url_request_context_builder;
+ url_request_context_builder.set_user_agent(GetUserAgent());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ //
diff --git a/devel/electron7/files/patch-net_tools_quic_quic__http__proxy__backend.cc b/devel/electron7/files/patch-net_tools_quic_quic__http__proxy__backend.cc
new file mode 100644
index 000000000000..bad15bfd16b1
--- /dev/null
+++ b/devel/electron7/files/patch-net_tools_quic_quic__http__proxy__backend.cc
@@ -0,0 +1,11 @@
+--- net/tools/quic/quic_http_proxy_backend.cc.orig 2019-12-12 12:39:54 UTC
++++ net/tools/quic/quic_http_proxy_backend.cc
+@@ -161,7 +161,7 @@ void QuicHttpProxyBackend::InitializeURLRequestContext
+ // Enable HTTP2, but disable QUIC on the backend
+ context_builder.SetSpdyAndQuicEnabled(true /* http2 */, false /* quic */);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ context_builder.set_proxy_config_service(
diff --git a/devel/electron7/files/patch-net_traffic__annotation_network__traffic__annotation.h b/devel/electron7/files/patch-net_traffic__annotation_network__traffic__annotation.h
new file mode 100644
index 000000000000..949ba3389b11
--- /dev/null
+++ b/devel/electron7/files/patch-net_traffic__annotation_network__traffic__annotation.h
@@ -0,0 +1,20 @@
+--- net/traffic_annotation/network_traffic_annotation.h.orig 2019-12-12 12:39:54 UTC
++++ net/traffic_annotation/network_traffic_annotation.h
+@@ -356,7 +356,7 @@ struct MutablePartialNetworkTrafficAnnotationTag {
+ } // namespace net
+
+ // Placeholder for unannotated usages.
+-#if !defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if !defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ #define TRAFFIC_ANNOTATION_WITHOUT_PROTO(ANNOTATION_ID) \
+ net::DefineNetworkTrafficAnnotation(ANNOTATION_ID, "No proto yet.")
+ #endif
+@@ -367,7 +367,7 @@ struct MutablePartialNetworkTrafficAnnotationTag {
+ //
+ // On Linux and Windows, use MISSING_TRAFFIC_ANNOTATION or
+ // TRAFFIC_ANNOTATION_FOR_TESTS.
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ #define NO_TRAFFIC_ANNOTATION_YET \
+ net::DefineNetworkTrafficAnnotation("undefined", "Nothing here yet.")
+
diff --git a/devel/electron7/files/patch-net_url__request_url__fetcher.cc b/devel/electron7/files/patch-net_url__request_url__fetcher.cc
new file mode 100644
index 000000000000..3ffe18204b74
--- /dev/null
+++ b/devel/electron7/files/patch-net_url__request_url__fetcher.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_fetcher.cc.orig 2019-12-12 12:39:54 UTC
++++ net/url_request/url_fetcher.cc
+@@ -11,7 +11,7 @@ namespace net {
+
+ URLFetcher::~URLFetcher() = default;
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // static
+ std::unique_ptr<URLFetcher> URLFetcher::Create(
+ const GURL& url,
diff --git a/devel/electron7/files/patch-net_url__request_url__fetcher.h b/devel/electron7/files/patch-net_url__request_url__fetcher.h
new file mode 100644
index 000000000000..d564e629053b
--- /dev/null
+++ b/devel/electron7/files/patch-net_url__request_url__fetcher.h
@@ -0,0 +1,11 @@
+--- net/url_request/url_fetcher.h.orig 2019-12-12 12:39:54 UTC
++++ net/url_request/url_fetcher.h
+@@ -113,7 +113,7 @@ class NET_EXPORT URLFetcher {
+ // The unannotated Create() methods are not available on desktop Linux +
+ // Windows. They are available on other platforms, since we only audit network
+ // annotations on Linux & Windows.
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // |url| is the URL to send the request to. It must be valid.
+ // |request_type| is the type of request to make.
+ // |d| the object that will receive the callback on fetch completion.
diff --git a/devel/electron7/files/patch-net_url__request_url__request__context.cc b/devel/electron7/files/patch-net_url__request_url__request__context.cc
new file mode 100644
index 000000000000..9f4ab7fed770
--- /dev/null
+++ b/devel/electron7/files/patch-net_url__request_url__request__context.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context.cc.orig 2019-12-12 12:39:54 UTC
++++ net/url_request/url_request_context.cc
+@@ -89,7 +89,7 @@ const HttpNetworkSession::Context* URLRequestContext::
+ return &network_session->context();
+ }
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ std::unique_ptr<URLRequest> URLRequestContext::CreateRequest(
+ const GURL& url,
+ RequestPriority priority,
diff --git a/devel/electron7/files/patch-net_url__request_url__request__context.h b/devel/electron7/files/patch-net_url__request_url__request__context.h
new file mode 100644
index 000000000000..98d85babbce4
--- /dev/null
+++ b/devel/electron7/files/patch-net_url__request_url__request__context.h
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context.h.orig 2019-12-12 12:39:54 UTC
++++ net/url_request/url_request_context.h
+@@ -90,7 +90,7 @@ class NET_EXPORT URLRequestContext
+ // session.
+ const HttpNetworkSession::Context* GetNetworkSessionContext() const;
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // This function should not be used in Chromium, please use the version with
+ // NetworkTrafficAnnotationTag in the future.
+ //
diff --git a/devel/electron7/files/patch-net_url__request_url__request__context__builder.cc b/devel/electron7/files/patch-net_url__request_url__request__context__builder.cc
new file mode 100644
index 000000000000..e1b9898dce01
--- /dev/null
+++ b/devel/electron7/files/patch-net_url__request_url__request__context__builder.cc
@@ -0,0 +1,20 @@
+--- net/url_request/url_request_context_builder.cc.orig 2019-12-12 12:39:54 UTC
++++ net/url_request/url_request_context_builder.cc
+@@ -519,7 +519,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ }
+
+ if (!proxy_resolution_service_) {
+-#if !defined(OS_LINUX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // TODO(willchan): Switch to using this code when
+ // ProxyResolutionService::CreateSystemProxyConfigService()'s signature
+ // doesn't suck.
+@@ -528,7 +528,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ ProxyResolutionService::CreateSystemProxyConfigService(
+ base::ThreadTaskRunnerHandle::Get().get());
+ }
+-#endif // !defined(OS_LINUX) && !defined(OS_ANDROID)
++#endif // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ proxy_resolution_service_ = CreateProxyResolutionService(
+ std::move(proxy_config_service_), context.get(),
+ context->host_resolver(), context->network_delegate(),
diff --git a/devel/electron7/files/patch-pdf_pdfium_pdfium__engine.cc b/devel/electron7/files/patch-pdf_pdfium_pdfium__engine.cc
new file mode 100644
index 000000000000..76ae6b3f7334
--- /dev/null
+++ b/devel/electron7/files/patch-pdf_pdfium_pdfium__engine.cc
@@ -0,0 +1,56 @@
+--- pdf/pdfium/pdfium_engine.cc.orig 2019-12-12 12:39:54 UTC
++++ pdf/pdfium/pdfium_engine.cc
+@@ -53,7 +53,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "v8/include/v8.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "pdf/pdfium/pdfium_font_linux.h"
+ #endif
+
+@@ -378,7 +378,7 @@ bool InitializeSDK(bool enable_v8) {
+ config.m_v8EmbedderSlot = gin::kEmbedderPDFium;
+ FPDF_InitLibraryWithConfig(&config);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ InitializeLinuxFontMapper();
+ #endif
+
+@@ -414,7 +414,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
+ IFSDK_PAUSE::user = nullptr;
+ IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreviewModeClient does not know its pp::Instance.
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+@@ -870,7 +870,7 @@ pp::Buffer_Dev PDFiumEngine::PrintPagesAsRasterPdf(
+
+ KillFormFocus();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+
+@@ -2696,7 +2696,7 @@ bool PDFiumEngine::ContinuePaint(int progressive_index
+ DCHECK(image_data);
+
+ last_progressive_start_time_ = base::Time::Now();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+
+@@ -3190,7 +3190,7 @@ void PDFiumEngine::SetCurrentPage(int index) {
+ FORM_DoPageAAction(old_page, form(), FPDFPAGE_AACTION_CLOSE);
+ }
+ most_visible_page_ = index;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+ if (most_visible_page_ != -1 && called_do_document_action_) {
diff --git a/devel/electron7/files/patch-ppapi_proxy_file__io__resource.cc b/devel/electron7/files/patch-ppapi_proxy_file__io__resource.cc
new file mode 100644
index 000000000000..e1be0670c2cf
--- /dev/null
+++ b/devel/electron7/files/patch-ppapi_proxy_file__io__resource.cc
@@ -0,0 +1,48 @@
+--- ppapi/proxy/file_io_resource.cc.orig 2019-12-12 12:39:54 UTC
++++ ppapi/proxy/file_io_resource.cc
+@@ -285,17 +285,19 @@ int32_t FileIOResource::Write(int64_t offset,
+
+ if (check_quota_) {
+ int64_t increase = 0;
+- uint64_t max_offset = 0;
++ uint64_t _max_offset = 0;
++ // (rene) avoid name collission with /usr/include/vm/vm_map.h on FreeBSD
++ // which also defines max_offset
+ bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
+ if (append) {
+ increase = bytes_to_write;
+ } else {
+- uint64_t max_offset = offset + bytes_to_write;
+- if (max_offset >
++ uint64_t _max_offset = offset + bytes_to_write;
++ if (_max_offset >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ return PP_ERROR_FAILED; // amount calculation would overflow.
+ }
+- increase = static_cast<int64_t>(max_offset) - max_written_offset_;
++ increase = static_cast<int64_t>(_max_offset) - max_written_offset_;
+ }
+
+ if (increase > 0) {
+@@ -319,7 +321,7 @@ int32_t FileIOResource::Write(int64_t offset,
+ if (append)
+ append_mode_write_amount_ += bytes_to_write;
+ else
+- max_written_offset_ = max_offset;
++ max_written_offset_ = _max_offset;
+ }
+ }
+ return WriteValidated(offset, buffer, bytes_to_write, callback);
+@@ -597,9 +599,9 @@ void FileIOResource::OnRequestWriteQuotaComplete(
+ } else {
+ DCHECK_LE(offset + bytes_to_write - max_written_offset_, granted);
+
+- int64_t max_offset = offset + bytes_to_write;
+- if (max_written_offset_ < max_offset)
+- max_written_offset_ = max_offset;
++ int64_t _max_offset = offset + bytes_to_write;
++ if (max_written_offset_ < _max_offset)
++ max_written_offset_ = _max_offset;
+ }
+
+ if (callback->is_blocking()) {
diff --git a/devel/electron7/files/patch-ppapi_proxy_flash__resource.cc b/devel/electron7/files/patch-ppapi_proxy_flash__resource.cc
new file mode 100644
index 000000000000..2e2978bed50e
--- /dev/null
+++ b/devel/electron7/files/patch-ppapi_proxy_flash__resource.cc
@@ -0,0 +1,11 @@
+--- ppapi/proxy/flash_resource.cc.orig 2019-12-12 12:39:54 UTC
++++ ppapi/proxy/flash_resource.cc
+@@ -136,7 +136,7 @@ double FlashResource::GetLocalTimeZoneOffset(PP_Instan
+ // require filesystem access prohibited by the sandbox.
+ // TODO(shess): Figure out why OSX needs the access, the sandbox warmup should
+ // handle it. http://crbug.com/149006
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int32_t result = SyncCall<PpapiPluginMsg_Flash_GetLocalTimeZoneOffsetReply>(
+ BROWSER,
+ PpapiHostMsg_Flash_GetLocalTimeZoneOffset(PPTimeToTime(t)),
diff --git a/devel/electron7/files/patch-printing_cups__config__helper.py b/devel/electron7/files/patch-printing_cups__config__helper.py
new file mode 100644
index 000000000000..96eda0df4958
--- /dev/null
+++ b/devel/electron7/files/patch-printing_cups__config__helper.py
@@ -0,0 +1,11 @@
+--- printing/cups_config_helper.py.orig 2019-12-12 12:39:54 UTC
++++ printing/cups_config_helper.py
+@@ -65,7 +65,7 @@ def main():
+ mode = sys.argv[1]
+ if len(sys.argv) > 2 and sys.argv[2]:
+ sysroot = sys.argv[2]
+- cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
++ cups_config = os.path.join(sysroot, 'bin', 'cups-config')
+ if not os.path.exists(cups_config):
+ print 'cups-config not found: %s' % cups_config
+ return 1
diff --git a/devel/electron7/files/patch-remoting_base_chromoting__event.cc b/devel/electron7/files/patch-remoting_base_chromoting__event.cc
new file mode 100644
index 000000000000..5da38adcaf1a
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_base_chromoting__event.cc
@@ -0,0 +1,11 @@
+--- remoting/base/chromoting_event.cc.orig 2019-12-12 12:39:54 UTC
++++ remoting/base/chromoting_event.cc
+@@ -188,7 +188,7 @@ void ChromotingEvent::AddSystemInfo() {
+ SetString(kCpuKey, base::SysInfo::OperatingSystemArchitecture());
+ SetString(kOsVersionKey, base::SysInfo::OperatingSystemVersion());
+ SetString(kWebAppVersionKey, STRINGIZE(VERSION));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ Os os = Os::CHROMOTING_LINUX;
+ #elif defined(OS_CHROMEOS)
+ Os os = Os::CHROMOTING_CHROMEOS;
diff --git a/devel/electron7/files/patch-remoting_client_display_sys__opengl.h b/devel/electron7/files/patch-remoting_client_display_sys__opengl.h
new file mode 100644
index 000000000000..7a80ece55f99
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_client_display_sys__opengl.h
@@ -0,0 +1,11 @@
+--- remoting/client/display/sys_opengl.h.orig 2019-12-12 12:39:54 UTC
++++ remoting/client/display/sys_opengl.h
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_IOS)
+ #include <OpenGLES/ES3/gl.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_GLEXT_PROTOTYPES
+ #include <GL/gl.h>
+ #include <GL/glext.h>
diff --git a/devel/electron7/files/patch-remoting_host_evaluate__capability.cc b/devel/electron7/files/patch-remoting_host_evaluate__capability.cc
new file mode 100644
index 000000000000..0544a8f2fc2f
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_evaluate__capability.cc
@@ -0,0 +1,11 @@
+--- remoting/host/evaluate_capability.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/evaluate_capability.cc
+@@ -50,7 +50,7 @@ base::FilePath BuildHostBinaryPath() {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (path.BaseName().value() ==
+ FILE_PATH_LITERAL("chrome-remote-desktop-host")) {
+ return path;
diff --git a/devel/electron7/files/patch-remoting_host_host__attributes.cc b/devel/electron7/files/patch-remoting_host_host__attributes.cc
new file mode 100644
index 000000000000..85cb8d572285
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_host__attributes.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_attributes.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/host_attributes.cc
+@@ -124,7 +124,7 @@ std::string GetHostAttributes() {
+ media::InitializeMediaFoundation()) {
+ result.push_back("HWEncoder");
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ result.push_back("HWEncoder");
+ #endif
+
diff --git a/devel/electron7/files/patch-remoting_host_host__details.cc b/devel/electron7/files/patch-remoting_host_host__details.cc
new file mode 100644
index 000000000000..751f497e46cd
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_host__details.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_details.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/host_details.cc
+@@ -22,7 +22,7 @@ std::string GetHostOperatingSystemName() {
+ return "Mac";
+ #elif defined(OS_CHROMEOS)
+ return "ChromeOS";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return "Linux";
+ #elif defined(OS_ANDROID)
+ return "Android";
diff --git a/devel/electron7/files/patch-remoting_host_host__main.cc b/devel/electron7/files/patch-remoting_host_host__main.cc
new file mode 100644
index 000000000000..40a7cee70eb1
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_host__main.cc
@@ -0,0 +1,27 @@
+--- remoting/host/host_main.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/host_main.cc
+@@ -49,9 +49,9 @@ int DesktopProcessMain();
+ int FileChooserMain();
+ int RdpDesktopSessionMain();
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int XSessionChooserMain();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+
+@@ -146,10 +146,10 @@ MainRoutineFn SelectMainRoutine(const std::string& pro
+ } else if (process_type == kProcessTypeRdpDesktopSession) {
+ main_routine = &RdpDesktopSessionMain;
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (process_type == kProcessTypeXSessionChooser) {
+ main_routine = &XSessionChooserMain;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ return main_routine;
diff --git a/devel/electron7/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc b/devel/electron7/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
new file mode 100644
index 000000000000..17b292f07b52
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
@@ -0,0 +1,35 @@
+--- remoting/host/it2me/it2me_native_messaging_host_main.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/it2me/it2me_native_messaging_host_main.cc
+@@ -28,12 +28,12 @@
+ #include "remoting/host/resources.h"
+ #include "remoting/host/usage_stats_consent.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+
+ #include "base/linux_util.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ #include "base/mac/scoped_nsautorelease_pool.h"
+@@ -108,7 +108,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+
+ remoting::LoadResources("");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Required in order for us to run multiple X11 threads.
+ XInitThreads();
+
+@@ -124,7 +124,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+ // Need to prime the host OS version value for linux to prevent IO on the
+ // network thread. base::GetLinuxDistro() caches the result.
+ base::GetLinuxDistro();
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ base::File read_file;
+ base::File write_file;
diff --git a/devel/electron7/files/patch-remoting_host_me2me__desktop__environment.cc b/devel/electron7/files/patch-remoting_host_me2me__desktop__environment.cc
new file mode 100644
index 000000000000..590a020ff368
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_me2me__desktop__environment.cc
@@ -0,0 +1,11 @@
+--- remoting/host/me2me_desktop_environment.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/me2me_desktop_environment.cc
+@@ -129,7 +129,7 @@ bool Me2MeDesktopEnvironment::InitializeSecurity(
+
+ // Otherwise, if the session is shared with the local user start monitoring
+ // the local input and create the in-session UI.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool want_user_interface = false;
+ #elif defined(OS_MACOSX)
+ // Don't try to display any UI on top of the system's login screen as this
diff --git a/devel/electron7/files/patch-remoting_host_remoting__me2me__host.cc b/devel/electron7/files/patch-remoting_host_remoting__me2me__host.cc
new file mode 100644
index 000000000000..b8a446dd9fd4
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_remoting__me2me__host.cc
@@ -0,0 +1,108 @@
+--- remoting/host/remoting_me2me_host.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/remoting_me2me_host.cc
+@@ -120,13 +120,13 @@
+ #include "remoting/host/mac/permission_utils.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+ #include "base/linux_util.h"
+ #include "remoting/host/audio_capturer_linux.h"
+ #include "remoting/host/linux/certificate_watcher.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #include <commctrl.h>
+@@ -161,11 +161,11 @@ const char kApplicationName[] = "chromoting";
+ const char kStdinConfigPath[] = "-";
+ #endif // !defined(REMOTING_MULTI_PROCESS)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The command line switch used to pass name of the pipe to capture audio on
+ // linux.
+ const char kAudioPipeSwitchName[] = "audio-pipe-name";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // The command line switch used to pass name of the unix domain socket used to
+@@ -358,7 +358,7 @@ class HostProcess : public ConfigWatcher::Delegate,
+
+ std::unique_ptr<ChromotingHostContext> context_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Watch for certificate changes and kill the host when changes occur
+ std::unique_ptr<CertificateWatcher> cert_watcher_;
+ #endif
+@@ -555,10 +555,10 @@ bool HostProcess::InitWithCommandLine(const base::Comm
+ enable_window_capture_ = cmd_line->HasSwitch(kWindowIdSwitchName);
+ if (enable_window_capture_) {
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ LOG(WARNING) << "Window capturing is not fully supported on Linux or "
+ "Windows.";
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // uint32_t is large enough to hold window IDs on all platforms.
+ uint32_t window_id;
+@@ -753,7 +753,7 @@ void HostProcess::CreateAuthenticatorFactory() {
+ DCHECK(third_party_auth_config_.token_url.is_valid());
+ DCHECK(third_party_auth_config_.token_validation_url.is_valid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!cert_watcher_) {
+ cert_watcher_.reset(new CertificateWatcher(
+ base::Bind(&HostProcess::ShutdownHost, this, kSuccessExitCode),
+@@ -839,7 +839,7 @@ void HostProcess::StartOnUiThread() {
+ base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)),
+ base::Bind(&HostProcess::OnPolicyError, base::Unretained(this)));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If an audio pipe is specific on the command-line then initialize
+ // AudioCapturerLinux to capture from it.
+ base::FilePath audio_pipe_name = base::CommandLine::ForCurrentProcess()->
+@@ -848,7 +848,7 @@ void HostProcess::StartOnUiThread() {
+ remoting::AudioCapturerLinux::InitializePipeReader(
+ context_->audio_task_runner(), audio_pipe_name);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ base::FilePath security_key_socket_name =
+@@ -903,7 +903,7 @@ void HostProcess::ShutdownOnUiThread() {
+ // It is now safe for the HostProcess to be deleted.
+ self_ = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Cause the global AudioPipeReader to be freed, otherwise the audio
+ // thread will remain in-use and prevent the process from exiting.
+ // TODO(wez): DesktopEnvironmentFactory should own the pipe reader.
+@@ -1532,7 +1532,7 @@ void HostProcess::StartHost() {
+ host_->AddExtension(std::make_unique<TestEchoExtension>());
+
+ // TODO(simonmorris): Get the maximum session duration from a policy.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20));
+ #endif
+
+@@ -1711,7 +1711,7 @@ void HostProcess::OnCrash(const std::string& function_
+ int HostProcessMain() {
+ HOST_LOG << "Starting host process: version " << STRINGIZE(VERSION);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ kReportOfflineReasonSwitchName)) {
+ // Required in order for us to run multiple X11 threads.
diff --git a/devel/electron7/files/patch-remoting_host_switches.cc b/devel/electron7/files/patch-remoting_host_switches.cc
new file mode 100644
index 000000000000..2cb8c7cc028a
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_switches.cc
@@ -0,0 +1,14 @@
+--- remoting/host/switches.cc.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/switches.cc
+@@ -21,9 +21,9 @@ const char kProcessTypeHost[] = "host";
+ const char kProcessTypeRdpDesktopSession[] = "rdp_desktop_session";
+ const char kProcessTypeEvaluateCapability[] = "evaluate_capability";
+ const char kProcessTypeFileChooser[] = "file_chooser";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kProcessTypeXSessionChooser[] = "xsession_chooser";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kEvaluateCapabilitySwitchName[] = "evaluate-type";
+
diff --git a/devel/electron7/files/patch-remoting_host_switches.h b/devel/electron7/files/patch-remoting_host_switches.h
new file mode 100644
index 000000000000..4edf0990ff6b
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_host_switches.h
@@ -0,0 +1,14 @@
+--- remoting/host/switches.h.orig 2019-12-12 12:39:55 UTC
++++ remoting/host/switches.h
+@@ -34,9 +34,9 @@ extern const char kProcessTypeHost[];
+ extern const char kProcessTypeRdpDesktopSession[];
+ extern const char kProcessTypeEvaluateCapability[];
+ extern const char kProcessTypeFileChooser[];
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kProcessTypeXSessionChooser[];
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kEvaluateCapabilitySwitchName[];
+
diff --git a/devel/electron7/files/patch-remoting_resources_remoting__strings.grd b/devel/electron7/files/patch-remoting_resources_remoting__strings.grd
new file mode 100644
index 000000000000..6ddef565e120
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_resources_remoting__strings.grd
@@ -0,0 +1,20 @@
+--- remoting/resources/remoting_strings.grd.orig 2019-12-12 12:39:55 UTC
++++ remoting/resources/remoting_strings.grd
+@@ -1332,7 +1332,7 @@ If '<ph name="SERVICE_SCRIPT_NAME">$3<ex>org.chromium.
+ Not Now
+ </message>
+ </if>
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_SESSION_DIALOG_MESSAGE" desc="The message to show at the top of the session-selection dialog.">
+ Select a session to launch within your Chrome Remote Desktop environment. (Note that some session types may not support running within Chrome Remote Desktop and on the local console simultaneously.)
+ </message>
+@@ -1348,7 +1348,7 @@ If '<ph name="SERVICE_SCRIPT_NAME">$3<ex>org.chromium.
+ <message name="IDS_SESSION_DIALOG_DEFAULT_SESSION_COMMENT" desc="The comment for the entry to launch the default session.">
+ Launch the default XSession
+ </message>
+- </if> <!-- is_linux -->
++ </if> <!-- is_posix -->
+ </messages>
+ </release>
+ </grit>
diff --git a/devel/electron7/files/patch-remoting_webapp_base_js_platform.js b/devel/electron7/files/patch-remoting_webapp_base_js_platform.js
new file mode 100644
index 000000000000..f10871324095
--- /dev/null
+++ b/devel/electron7/files/patch-remoting_webapp_base_js_platform.js
@@ -0,0 +1,17 @@
+--- remoting/webapp/base/js/platform.js.orig 2019-12-12 12:39:56 UTC
++++ remoting/webapp/base/js/platform.js
+@@ -107,6 +107,14 @@ remoting.getSystemInfo = function() {
+ return result;
+ }
+
++ match = new RegExp('FreeBSD ([a-zA-Z0-9_]*)').exec(userAgent);
++ if (match && (match.length >= 2)) {
++ result.osName = remoting.Os.LINUX;
++ result.osVersion = '';
++ result.cpu = match[1];
++ return result;
++ }
++
+ match = new RegExp('([a-zA-Z]*) Mac OS X ([0-9_]*)').exec(userAgent);
+ if (match && (match.length >= 3)) {
+ result.osName = remoting.Os.MAC;
diff --git a/devel/electron7/files/patch-sandbox_features.gni b/devel/electron7/files/patch-sandbox_features.gni
new file mode 100644
index 000000000000..ba20f99b81a5
--- /dev/null
+++ b/devel/electron7/files/patch-sandbox_features.gni
@@ -0,0 +1,10 @@
+--- sandbox/features.gni.orig 2019-12-12 12:39:56 UTC
++++ sandbox/features.gni
+@@ -12,6 +12,6 @@ use_seccomp_bpf =
+ (is_linux || is_android) &&
+ (current_cpu == "x86" || current_cpu == "x64" || current_cpu == "arm" ||
+ current_cpu == "arm64" || current_cpu == "mipsel" ||
+- current_cpu == "mips64el")
++ current_cpu == "mips64el") && !is_bsd
+
+ use_seccomp_bpf = use_seccomp_bpf || is_nacl_nonsfi
diff --git a/devel/electron7/files/patch-sandbox_linux_BUILD.gn b/devel/electron7/files/patch-sandbox_linux_BUILD.gn
new file mode 100644
index 000000000000..d77f26457b0d
--- /dev/null
+++ b/devel/electron7/files/patch-sandbox_linux_BUILD.gn
@@ -0,0 +1,47 @@
+--- sandbox/linux/BUILD.gn.orig 2019-12-12 12:39:56 UTC
++++ sandbox/linux/BUILD.gn
+@@ -12,12 +12,12 @@ if (is_android) {
+ }
+
+ declare_args() {
+- compile_suid_client = is_linux
++ compile_suid_client = is_linux && !is_bsd
+
+- compile_credentials = is_linux
++ compile_credentials = is_linux && !is_bsd
+
+ # On Android, use plain GTest.
+- use_base_test_suite = is_linux
++ use_base_test_suite = is_linux && !is_bsd
+ }
+
+ if (is_nacl_nonsfi) {
+@@ -379,7 +379,7 @@ component("sandbox_services") {
+ public_deps += [ ":sandbox_services_headers" ]
+ }
+
+- if (is_nacl_nonsfi) {
++ if (is_nacl_nonsfi || is_bsd) {
+ cflags = [ "-fgnu-inline-asm" ]
+
+ sources -= [
+@@ -387,6 +387,8 @@ component("sandbox_services") {
+ "services/init_process_reaper.h",
+ "services/scoped_process.cc",
+ "services/scoped_process.h",
++ "services/syscall_wrappers.cc",
++ "services/syscall_wrappers.h",
+ "services/yama.cc",
+ "services/yama.h",
+ "syscall_broker/broker_channel.cc",
+@@ -405,6 +407,10 @@ component("sandbox_services") {
+ "syscall_broker/broker_process.h",
+ "syscall_broker/broker_simple_message.cc",
+ "syscall_broker/broker_simple_message.h",
++ ]
++ sources += [
++ "services/libc_interceptor.cc",
++ "services/libc_interceptor.h",
+ ]
+ } else if (!is_android) {
+ sources += [
diff --git a/devel/electron7/files/patch-sandbox_linux_services_init__process__reaper.cc b/devel/electron7/files/patch-sandbox_linux_services_init__process__reaper.cc
new file mode 100644
index 000000000000..27cb9925a3ad
--- /dev/null
+++ b/devel/electron7/files/patch-sandbox_linux_services_init__process__reaper.cc
@@ -0,0 +1,15 @@
+--- sandbox/linux/services/init_process_reaper.cc.orig 2019-12-12 12:39:56 UTC
++++ sandbox/linux/services/init_process_reaper.cc
+@@ -1,6 +1,7 @@
+ // Copyright 2013 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "sandbox/linux/services/init_process_reaper.h"
+
+@@ -100,3 +101,4 @@ bool CreateInitProcessReaper(base::OnceClosure post_fo
+ }
+
+ } // namespace sandbox.
++#endif
diff --git a/devel/electron7/files/patch-sandbox_linux_services_libc__interceptor.cc b/devel/electron7/files/patch-sandbox_linux_services_libc__interceptor.cc
new file mode 100644
index 000000000000..189467414de4
--- /dev/null
+++ b/devel/electron7/files/patch-sandbox_linux_services_libc__interceptor.cc
@@ -0,0 +1,21 @@
+--- sandbox/linux/services/libc_interceptor.cc.orig 2019-12-12 12:39:56 UTC
++++ sandbox/linux/services/libc_interceptor.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <time.h>
+@@ -94,7 +96,7 @@ bool ReadTimeStruct(base::PickleIterator* iter,
+ } else {
+ base::AutoLock lock(g_timezones_lock.Get());
+ auto ret_pair = g_timezones.Get().insert(timezone);
+- output->tm_zone = ret_pair.first->c_str();
++ output->tm_zone = (char *)ret_pair.first->c_str();
+ }
+
+ return true;
diff --git a/devel/electron7/files/patch-services_audio_BUILD.gn b/devel/electron7/files/patch-services_audio_BUILD.gn
new file mode 100644
index 000000000000..d1afff7b92aa
--- /dev/null
+++ b/devel/electron7/files/patch-services_audio_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/audio/BUILD.gn.orig 2019-12-12 12:39:56 UTC
++++ services/audio/BUILD.gn
+@@ -99,7 +99,7 @@ source_set("lib") {
+ "//services/service_manager/sandbox:sandbox",
+ ]
+
+- if (is_linux) {
++ if ((is_linux) && (!is_bsd)) {
+ sources += [
+ "audio_sandbox_hook_linux.cc",
+ "audio_sandbox_hook_linux.h",
diff --git a/devel/electron7/files/patch-services_device_geolocation_location__arbitrator.cc b/devel/electron7/files/patch-services_device_geolocation_location__arbitrator.cc
new file mode 100644
index 000000000000..fc595f4542ae
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_geolocation_location__arbitrator.cc
@@ -0,0 +1,11 @@
+--- services/device/geolocation/location_arbitrator.cc.orig 2019-12-12 12:39:56 UTC
++++ services/device/geolocation/location_arbitrator.cc
+@@ -156,7 +156,7 @@ LocationArbitrator::NewNetworkLocationProvider(
+
+ std::unique_ptr<LocationProvider>
+ LocationArbitrator::NewSystemLocationProvider() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ return nullptr;
+ #else
diff --git a/devel/electron7/files/patch-services_device_hid_BUILD.gn b/devel/electron7/files/patch-services_device_hid_BUILD.gn
new file mode 100644
index 000000000000..f3770946c496
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_BUILD.gn
@@ -0,0 +1,22 @@
+--- services/device/hid/BUILD.gn.orig 2019-12-12 12:39:56 UTC
++++ services/device/hid/BUILD.gn
+@@ -51,6 +51,19 @@ source_set("hid") {
+ deps += [ "//device/udev_linux" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "hid_connection_linux.cc",
++ "hid_connection_linux.h",
++ ]
++ sources += [
++ "hid_connection_freebsd.cc",
++ "hid_connection_freebsd.h",
++ "hid_service_freebsd.cc",
++ "hid_service_freebsd.h",
++ ]
++ }
++
+ if (is_chromeos) {
+ deps += [ "//chromeos/dbus/permission_broker" ]
+ }
diff --git a/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.cc b/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.cc
new file mode 100644
index 000000000000..50ab83e890b5
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.cc
@@ -0,0 +1,243 @@
+--- services/device/hid/hid_connection_freebsd.cc.orig 2019-12-16 13:33:58 UTC
++++ services/device/hid/hid_connection_freebsd.cc
+@@ -0,0 +1,240 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_connection_freebsd.h"
++
++#include <dev/usb/usbhid.h>
++#include <dev/usb/usb_ioctl.h>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/location.h"
++#include "base/numerics/safe_math.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/strings/stringprintf.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_service.h"
++
++namespace device {
++
++class HidConnectionFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::ScopedFD fd,
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::WeakPtr<HidConnectionFreeBSD> connection)
++ : fd_(std::move(fd)),
++ connection_(connection),
++ origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++ // Report buffers must always have room for the report ID.
++ report_buffer_size_ = device_info->max_input_report_size() + 1;
++ has_report_id_ = device_info->has_report_id();
++ }
++
++ ~BlockingTaskHelper() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
++
++ // Starts the FileDescriptorWatcher that reads input events from the device.
++ // Must be called on a thread that has a base::MessageLoopForIO.
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::internal::AssertBlockingAllowed();
++
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ fd_.get(), base::Bind(&BlockingTaskHelper::OnFileCanReadWithoutBlocking,
++ base::Unretained(this)));
++ }
++
++ void Write(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++
++ auto data = buffer->front();
++ size_t size = buffer->size();
++ // if report id is 0, it shouldn't be included
++ if (data[0] == 0) {
++ data++;
++ size--;
++ }
++
++ ssize_t result = HANDLE_EINTR(write(fd_.get(), data, size));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Write failed";
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), false));
++ } else {
++ if (static_cast<size_t>(result) != size)
++ HID_LOG(EVENT) << "Incomplete HID write: " << result << " != " << size;
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ void GetFeatureReport(uint8_t report_id,
++ scoped_refptr<base::RefCountedBytes> buffer,
++ ReadCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_GET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to get feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else if (result == 0) {
++ HID_LOG(EVENT) << "Get feature result too short.";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true, buffer, result));
++ }
++ }
++
++ void SendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ // FreeBSD does not require report id if it's not used
++ if (buffer->front()[0] == 0) {
++ ugd.ugd_data = buffer->front() + 1;
++ ugd.ugd_maxlen = buffer->size() - 1;
++ } else {
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ }
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_SET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to send feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ private:
++ void OnFileCanReadWithoutBlocking() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ scoped_refptr<base::RefCountedBytes> buffer(new base::RefCountedBytes(report_buffer_size_));
++ unsigned char* data = buffer->front();
++ size_t length = report_buffer_size_;
++ if (!has_report_id_) {
++ // FreeBSD will not prefix the buffer with a report ID if report IDs are not
++ // used by the device. Prefix the buffer with 0.
++ *data++ = 0;
++ length--;
++ }
++
++ ssize_t bytes_read = HANDLE_EINTR(read(fd_.get(), data, length));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_PLOG(EVENT) << "Read failed";
++ // This assumes that the error is unrecoverable and disables reading
++ // from the device until it has been re-opened.
++ // TODO(reillyg): Investigate starting and stopping the file descriptor
++ // watcher in response to pending read requests so that per-request
++ // errors can be returned to the client.
++ file_watcher_.reset();
++ }
++ return;
++ }
++ if (!has_report_id_) {
++ // Behave as if the byte prefixed above as the the report ID was read.
++ bytes_read++;
++ }
++
++ origin_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&HidConnectionFreeBSD::ProcessInputReport,
++ connection_, buffer, bytes_read));
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++ base::ScopedFD fd_;
++ size_t report_buffer_size_;
++ bool has_report_id_;
++ base::WeakPtr<HidConnectionFreeBSD> connection_;
++ const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidConnectionFreeBSD::HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
++ : HidConnection(device_info),
++ blocking_task_runner_(std::move(blocking_task_runner)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(std::move(fd), device_info,
++ weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&BlockingTaskHelper::Start,
++ base::Unretained(helper_.get())));
++}
++
++HidConnectionFreeBSD::~HidConnectionFreeBSD() {}
++
++void HidConnectionFreeBSD::PlatformClose() {
++ // By closing the device on the blocking task runner 1) the requirement that
++ // base::ScopedFD is destroyed on a thread where I/O is allowed is satisfied
++ // and 2) any tasks posted to this task runner that refer to this file will
++ // complete before it is closed.
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++void HidConnectionFreeBSD::PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::Write, base::Unretained(helper_.get()),
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) {
++ // The first byte of the destination buffer is the report ID being requested
++ // and is overwritten by the feature report.
++ DCHECK_GT(device_info()->max_feature_report_size(), 0u);
++ scoped_refptr<base::RefCountedBytes> buffer(
++ new base::RefCountedBytes(device_info()->max_feature_report_size() + 1));
++ if (report_id != 0)
++ buffer->data()[0] = report_id;
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::GetFeatureReport,
++ base::Unretained(helper_.get()), report_id,
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformSendFeatureReport(
++ scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::SendFeatureReport,
++ base::Unretained(helper_.get()), buffer, std::move(callback)));
++}
++
++} // namespace device
diff --git a/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.h b/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.h
new file mode 100644
index 000000000000..dacc48e2ecf5
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_hid__connection__freebsd.h
@@ -0,0 +1,71 @@
+--- services/device/hid/hid_connection_freebsd.h.orig 2019-12-16 13:33:58 UTC
++++ services/device/hid/hid_connection_freebsd.h
+@@ -0,0 +1,68 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++#define DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++
++#include <stddef.h>
++#include <stdint.h>
++
++#include "base/files/scoped_file.h"
++#include "base/macros.h"
++#include "base/memory/ptr_util.h"
++#include "base/memory/ref_counted_memory.h"
++#include "base/memory/weak_ptr.h"
++#include "base/sequence_checker.h"
++#include "services/device/hid/hid_connection.h"
++
++namespace base {
++class SequencedTaskRunner;
++}
++
++namespace net {
++class IOBuffer;
++}
++
++namespace device {
++
++class HidConnectionFreeBSD : public HidConnection {
++ public:
++ HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
++
++ private:
++ friend class base::RefCountedThreadSafe<HidConnectionFreeBSD>;
++ class BlockingTaskHelper;
++
++ ~HidConnectionFreeBSD() override;
++
++ // HidConnection implementation.
++ void PlatformClose() override;
++ void PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) override;
++ void PlatformSendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++
++ // |helper_| lives on the sequence to which |blocking_task_runner_| posts
++ // tasks so all calls must be posted there including this object's
++ // destruction.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ base::WeakPtrFactory<HidConnectionFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidConnectionFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_CONNECTION_FREEBSD_H_
diff --git a/devel/electron7/files/patch-services_device_hid_hid__service.cc b/devel/electron7/files/patch-services_device_hid_hid__service.cc
new file mode 100644
index 000000000000..6682c4fa222c
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_hid__service.cc
@@ -0,0 +1,20 @@
+--- services/device/hid/hid_service.cc.orig 2019-12-12 12:39:56 UTC
++++ services/device/hid/hid_service.cc
+@@ -16,6 +16,8 @@
+
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ #include "services/device/hid/hid_service_linux.h"
++#elif defined(OS_BSD)
++#include "services/device/hid/hid_service_freebsd.h"
+ #elif defined(OS_MACOSX)
+ #include "services/device/hid/hid_service_mac.h"
+ #elif defined(OS_WIN)
+@@ -36,6 +38,8 @@ constexpr base::TaskTraits HidService::kBlockingTaskTr
+ std::unique_ptr<HidService> HidService::Create() {
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ return base::WrapUnique(new HidServiceLinux());
++#elif defined(OS_BSD)
++ return base::WrapUnique(new HidServiceFreeBSD());
+ #elif defined(OS_MACOSX)
+ return base::WrapUnique(new HidServiceMac());
+ #elif defined(OS_WIN)
diff --git a/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.cc b/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.cc
new file mode 100644
index 000000000000..3483a065076d
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.cc
@@ -0,0 +1,378 @@
+--- services/device/hid/hid_service_freebsd.cc.orig 2019-12-16 13:33:58 UTC
++++ services/device/hid/hid_service_freebsd.cc
+@@ -0,0 +1,375 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_service_freebsd.h"
++
++#include <dev/usb/usb_ioctl.h>
++#include <stdint.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <set>
++#include <string>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/files/file_enumerator.h"
++#include "base/files/file.h"
++#include "base/location.h"
++#include "base/logging.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/stl_util.h"
++#include "base/strings/pattern.h"
++#include "base/strings/stringprintf.h"
++#include "base/strings/sys_string_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/string_split.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_connection_freebsd.h"
++
++const int kMaxPermissionChecks = 5;
++
++namespace device {
++
++struct HidServiceFreeBSD::ConnectParams {
++ ConnectParams(scoped_refptr<HidDeviceInfo> device_info,
++ const ConnectCallback& callback)
++ : device_info(std::move(device_info)),
++ callback(callback),
++ task_runner(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)) {}
++ ~ConnectParams() {}
++
++ scoped_refptr<HidDeviceInfo> device_info;
++ ConnectCallback callback;
++ scoped_refptr<base::SequencedTaskRunner> task_runner;
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
++ base::ScopedFD fd;
++};
++
++class HidServiceFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::WeakPtr<HidServiceFreeBSD> service)
++ : service_(std::move(service)),
++ task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++
++ timer_.reset(new base::RepeatingTimer());
++ devd_buffer_ = new net::IOBufferWithSize(1024);
++ }
++
++ ~BlockingTaskHelper() {
++ }
++
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const base::FilePath kDevRoot("/dev");
++ const std::string kUHIDPattern("/dev/uhid*");
++
++ base::FileEnumerator enumerator(kDevRoot, false, base::FileEnumerator::FILES);
++ do {
++ const base::FilePath next_device_path(enumerator.Next());
++ const std::string next_device = next_device_path.value();
++ if (next_device.empty())
++ break;
++
++ if (base::MatchPattern(next_device, kUHIDPattern))
++ OnDeviceAdded(next_device.substr(5));
++ } while (true);
++
++ SetupDevdMonitor();
++
++ task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::FirstEnumerationComplete, service_));
++ }
++
++ bool HaveReadWritePermissions(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid())
++ return false;
++
++ return true;
++ }
++
++ void OnDeviceAdded(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ std::string device_node = "/dev/" + device_id;
++ uint16_t vendor_id = 0xffff;
++ uint16_t product_id = 0xffff;
++ std::string product_name = "";
++ std::string serial_number = "";
++
++ std::vector<uint8_t> report_descriptor;
++
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(ERROR) << "Failed to open '" << device_node
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ return;
++ }
++
++ base::ScopedFD fd;
++ fd.reset(device_file.TakePlatformFile());
++
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_data = NULL;
++ ugd.ugd_maxlen = 0xffff;
++ int result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor size";
++ return;
++ }
++
++ report_descriptor.resize(ugd.ugd_actlen);
++
++ ugd.ugd_data = report_descriptor.data();
++ ugd.ugd_maxlen = ugd.ugd_actlen;
++ result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor";
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo(
++ device_id, vendor_id, product_id, product_name, serial_number,
++ device::mojom::HidBusType::kHIDBusTypeUSB,
++ report_descriptor, device_node));
++
++ task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceFreeBSD::AddDevice,
++ service_, device_info));
++ }
++
++ void OnDeviceRemoved(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ task_runner_->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::RemoveDevice, service_,
++ device_id));
++ }
++
++ private:
++
++ void CheckPendingPermissionChange() {
++ base::internal::AssertBlockingAllowed();
++ std::map<std::string, int>::iterator it;
++ for (it = permissions_checks_attempts_.begin(); it != permissions_checks_attempts_.end();) {
++ std::string device_name = it->first;
++ bool keep = true;
++ if (HaveReadWritePermissions(device_name)) {
++ OnDeviceAdded(device_name);
++ keep = false;
++ }
++ else if (it->second-- <= 0) {
++ HID_LOG(ERROR) << "Still don't have write permissions to '" << device_name
++ << "' after " << kMaxPermissionChecks << " attempts";
++ keep = false;
++ }
++
++ if (keep)
++ ++it;
++ else
++ permissions_checks_attempts_.erase(it++);
++ }
++
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++
++ void SetupDevdMonitor() {
++ base::internal::AssertBlockingAllowed();
++
++ int devd_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
++ if (devd_fd < 0)
++ return;
++
++ struct sockaddr_un sa;
++
++ sa.sun_family = AF_UNIX;
++ strlcpy(sa.sun_path, "/var/run/devd.seqpacket.pipe", sizeof(sa.sun_path));
++ if (connect(devd_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
++ close(devd_fd);
++ return;
++ }
++
++ devd_fd_.reset(devd_fd);
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ devd_fd_.get(), base::Bind(&BlockingTaskHelper::OnDevdMessageCanBeRead,
++ base::Unretained(this)));
++ }
++
++ void OnDevdMessageCanBeRead() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ ssize_t bytes_read = HANDLE_EINTR(recv(devd_fd_.get(), devd_buffer_->data(),
++ devd_buffer_->size() - 1, MSG_WAITALL));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_LOG(ERROR) << "Read failed";
++ file_watcher_.reset();
++ }
++ return;
++ }
++
++ devd_buffer_->data()[bytes_read] = 0;
++ char *data = devd_buffer_->data();
++ // It may take some time for devd to change permissions
++ // on /dev/uhidX node. So do not fail immediately if
++ // open fail. Retry each second for kMaxPermissionChecks
++ // times before giving up entirely
++ if (base::StartsWith(data, "+uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '+'
++ if (HaveReadWritePermissions(device_name))
++ OnDeviceAdded(parts[0].substr(1));
++ else {
++ // Do not re-add to checks
++ if (permissions_checks_attempts_.find(device_name) == permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.insert(std::pair<std::string, int>(device_name, kMaxPermissionChecks));
++ timer_->Start(FROM_HERE, base::TimeDelta::FromSeconds(1),
++ this, &BlockingTaskHelper::CheckPendingPermissionChange);
++ }
++ }
++ }
++ }
++
++ if (base::StartsWith(data, "-uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '-'
++ auto it = permissions_checks_attempts_.find(device_name);
++ if (it != permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.erase(it);
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++ OnDeviceRemoved(parts[0].substr(1));
++ }
++ }
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ // This weak pointer is only valid when checked on this task runner.
++ base::WeakPtr<HidServiceFreeBSD> service_;
++ scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++ std::unique_ptr<base::RepeatingTimer> timer_;
++ base::ScopedFD devd_fd_;
++ scoped_refptr<net::IOBufferWithSize> devd_buffer_;
++ std::map<std::string, int> permissions_checks_attempts_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidServiceFreeBSD::HidServiceFreeBSD()
++ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner_(
++ base::CreateSequencedTaskRunnerWithTraits(kBlockingTaskTraits)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&BlockingTaskHelper::Start, base::Unretained(helper_.get())));
++}
++
++HidServiceFreeBSD::~HidServiceFreeBSD() {
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++base::WeakPtr<HidService> HidServiceFreeBSD::GetWeakPtr() {
++ return weak_factory_.GetWeakPtr();
++}
++
++// static
++void HidServiceFreeBSD::OpenOnBlockingThread(
++ std::unique_ptr<ConnectParams> params) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ base::FilePath device_path(params->device_info->device_node());
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(EVENT) << "Failed to open '" << params->device_info->device_node()
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ task_runner->PostTask(FROM_HERE, base::Bind(params->callback, nullptr));
++ return;
++ }
++ params->fd.reset(device_file.TakePlatformFile());
++ FinishOpen(std::move(params));
++}
++
++void HidServiceFreeBSD::Connect(const std::string& device_guid,
++ const ConnectCallback& callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const auto& map_entry = devices().find(device_guid);
++ if (map_entry == devices().end()) {
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, base::Bind(callback, nullptr));
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info = map_entry->second;
++
++ auto params = std::make_unique<ConnectParams>(device_info, callback);
++
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
++ params->blocking_task_runner;
++ blocking_task_runner->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::OpenOnBlockingThread,
++ base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::FinishOpen(std::unique_ptr<ConnectParams> params) {
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ task_runner->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::CreateConnection, base::Passed(&params)));
++}
++
++// static
++void HidServiceFreeBSD::CreateConnection(std::unique_ptr<ConnectParams> params) {
++ DCHECK(params->fd.is_valid());
++ params->callback.Run(base::MakeRefCounted<HidConnectionFreeBSD>(
++ std::move(params->device_info), std::move(params->fd),
++ std::move(params->blocking_task_runner)));
++}
++
++} // namespace device
diff --git a/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.h b/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.h
new file mode 100644
index 000000000000..a17dede195f5
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_hid_hid__service__freebsd.h
@@ -0,0 +1,51 @@
+--- services/device/hid/hid_service_freebsd.h.orig 2019-12-16 13:33:58 UTC
++++ services/device/hid/hid_service_freebsd.h
+@@ -0,0 +1,48 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_SERVICE_FREEBSD_H_
++#define DEVICE_HID_HID_SERVICE_FREEBSD_H_
++
++#include <string>
++
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/memory/weak_ptr.h"
++#include "base/timer/timer.h"
++#include "services/device/hid/hid_service.h"
++#include "net/base/io_buffer.h"
++
++namespace device {
++
++class HidServiceFreeBSD : public HidService {
++ public:
++ HidServiceFreeBSD();
++ ~HidServiceFreeBSD() override;
++
++ void Connect(const std::string& device_guid,
++ const ConnectCallback& connect) override;
++ base::WeakPtr<HidService> GetWeakPtr() override;
++
++ private:
++ struct ConnectParams;
++ class BlockingTaskHelper;
++
++ static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
++ static void FinishOpen(std::unique_ptr<ConnectParams> params);
++ static void CreateConnection(std::unique_ptr<ConnectParams> params);
++
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ // |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
++ // a weak reference back to the service that owns it.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++ base::WeakPtrFactory<HidServiceFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidServiceFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_SERVICE_FREEBSD_H_
diff --git a/devel/electron7/files/patch-services_device_serial_BUILD.gn b/devel/electron7/files/patch-services_device_serial_BUILD.gn
new file mode 100644
index 000000000000..d81c6b6e869e
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_serial_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/serial/BUILD.gn.orig 2019-12-12 12:39:56 UTC
++++ services/device/serial/BUILD.gn
+@@ -4,7 +4,7 @@
+
+ import("//build/config/features.gni")
+
+-if (is_win || (is_linux && use_udev) || is_mac) {
++if (is_win || (is_linux && use_udev) || is_mac || is_bsd) {
+ config("platform_support") {
+ visibility = [ ":serial" ]
+ if (is_win) {
diff --git a/devel/electron7/files/patch-services_device_serial_serial__io__handler__posix.cc b/devel/electron7/files/patch-services_device_serial_serial__io__handler__posix.cc
new file mode 100644
index 000000000000..25259eb98776
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_serial_serial__io__handler__posix.cc
@@ -0,0 +1,11 @@
+--- services/device/serial/serial_io_handler_posix.cc.orig 2019-12-12 12:39:56 UTC
++++ services/device/serial/serial_io_handler_posix.cc
+@@ -66,7 +66,7 @@ bool BitrateToSpeedConstant(int bitrate, speed_t* spee
+ BITRATE_TO_SPEED_CASE(9600)
+ BITRATE_TO_SPEED_CASE(19200)
+ BITRATE_TO_SPEED_CASE(38400)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ BITRATE_TO_SPEED_CASE(57600)
+ BITRATE_TO_SPEED_CASE(115200)
+ BITRATE_TO_SPEED_CASE(230400)
diff --git a/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc b/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
new file mode 100644
index 000000000000..164a4cfe837a
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor.cc
@@ -0,0 +1,20 @@
+--- services/device/time_zone_monitor/time_zone_monitor.cc.orig 2019-12-12 12:39:56 UTC
++++ services/device/time_zone_monitor/time_zone_monitor.cc
+@@ -29,7 +29,7 @@ void TimeZoneMonitor::Bind(device::mojom::TimeZoneMoni
+
+ void TimeZoneMonitor::NotifyClients() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+-#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && defined(IS_CHROMECAST))
++#if defined(OS_CHROMEOS) || ((defined(OS_BSD) || defined(OS_LINUX)) && defined(IS_CHROMECAST))
+ // On CrOS (and Chromecast), ICU's default tz is already set to a new zone. No
+ // need to redetect it with detectHostTimeZone().
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::createDefault());
+@@ -41,7 +41,7 @@ void TimeZoneMonitor::NotifyClients() {
+ #else
+ std::unique_ptr<icu::TimeZone> new_zone(icu::TimeZone::detectHostTimeZone());
+ #endif
+-#if defined(OS_LINUX) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ // We get here multiple times on Linux per a single tz change, but
+ // want to update the ICU default zone and notify renderer only once.
+ std::unique_ptr<icu::TimeZone> current_zone(icu::TimeZone::createDefault());
diff --git a/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc b/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
new file mode 100644
index 000000000000..98e784ee1bd9
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
@@ -0,0 +1,14 @@
+--- services/device/time_zone_monitor/time_zone_monitor_linux.cc.orig 2019-12-12 12:39:56 UTC
++++ services/device/time_zone_monitor/time_zone_monitor_linux.cc
+@@ -104,7 +104,11 @@ class TimeZoneMonitorLinuxImpl
+ // false positives are harmless, assuming the false positive rate is
+ // reasonable.
+ const char* const kFilesToWatch[] = {
++#if defined(OS_BSD)
++ "/etc/localtime",
++#else
+ "/etc/localtime", "/etc/timezone", "/etc/TZ",
++#endif
+ };
+ for (size_t index = 0; index < base::size(kFilesToWatch); ++index) {
+ file_path_watchers_.push_back(std::make_unique<base::FilePathWatcher>());
diff --git a/devel/electron7/files/patch-services_device_usb_BUILD.gn b/devel/electron7/files/patch-services_device_usb_BUILD.gn
new file mode 100644
index 000000000000..a07e255326f3
--- /dev/null
+++ b/devel/electron7/files/patch-services_device_usb_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/usb/BUILD.gn.orig 2019-12-12 12:39:56 UTC
++++ services/device/usb/BUILD.gn
+@@ -110,7 +110,7 @@ static_library("usb") {
+ ]
+ }
+
+- if (is_android || is_chromeos || is_linux) {
++ if ((is_android || is_chromeos || is_linux) && !is_bsd) {
+ sources += [
+ "usb_device_handle_usbfs.cc",
+ "usb_device_handle_usbfs.h",
diff --git a/devel/electron7/files/patch-services_network_BUILD.gn b/devel/electron7/files/patch-services_network_BUILD.gn
new file mode 100644
index 000000000000..b1331b78036b
--- /dev/null
+++ b/devel/electron7/files/patch-services_network_BUILD.gn
@@ -0,0 +1,10 @@
+--- services/network/BUILD.gn.orig 2019-12-12 12:39:57 UTC
++++ services/network/BUILD.gn
+@@ -261,7 +261,6 @@ jumbo_component("network_service") {
+
+ if (is_linux) {
+ deps += [
+- "//sandbox/linux:sandbox_services",
+ "//services/service_manager/sandbox:sandbox",
+ ]
+ }
diff --git a/devel/electron7/files/patch-services_network_network__context.cc b/devel/electron7/files/patch-services_network_network__context.cc
new file mode 100644
index 000000000000..489bd879b484
--- /dev/null
+++ b/devel/electron7/files/patch-services_network_network__context.cc
@@ -0,0 +1,11 @@
+--- services/network/network_context.cc.orig 2019-12-16 13:32:59 UTC
++++ services/network/network_context.cc
+@@ -1875,7 +1875,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestC
+
+ net::CookieCryptoDelegate* crypto_delegate = nullptr;
+ if (params_->enable_encrypted_cookies) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
+ DCHECK(network_service_->os_crypt_config_set())
+ << "NetworkService::SetCryptConfig must be called before creating a "
+ "NetworkContext with encrypted cookies.";
diff --git a/devel/electron7/files/patch-services_network_network__sandbox__hook__linux.cc b/devel/electron7/files/patch-services_network_network__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..f0dae93d1efa
--- /dev/null
+++ b/devel/electron7/files/patch-services_network_network__sandbox__hook__linux.cc
@@ -0,0 +1,18 @@
+--- services/network/network_sandbox_hook_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/network/network_sandbox_hook_linux.cc
+@@ -14,6 +14,7 @@ using sandbox::syscall_broker::MakeBrokerCommandSet;
+ namespace network {
+
+ bool NetworkPreSandboxHook(service_manager::SandboxLinux::Options options) {
++#if !defined(OS_BSD)
+ auto* instance = service_manager::SandboxLinux::GetInstance();
+
+ // TODO(tsepez): remove universal permission under filesytem root.
+@@ -32,6 +33,7 @@ bool NetworkPreSandboxHook(service_manager::SandboxLin
+ service_manager::SandboxLinux::PreSandboxHook(), options);
+
+ instance->EngageNamespaceSandboxIfPossible();
++#endif // defined(OS_BSD)
+ return true;
+ }
+
diff --git a/devel/electron7/files/patch-services_network_network__service.cc b/devel/electron7/files/patch-services_network_network__service.cc
new file mode 100644
index 000000000000..ad988e10f967
--- /dev/null
+++ b/devel/electron7/files/patch-services_network_network__service.cc
@@ -0,0 +1,20 @@
+--- services/network/network_service.cc.orig 2019-12-12 12:39:57 UTC
++++ services/network/network_service.cc
+@@ -62,7 +62,7 @@
+ #include "third_party/boringssl/src/include/openssl/cpu.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(IS_CHROMECAST)) || defined(OS_BSD)
+ #include "components/os_crypt/key_storage_config_linux.h"
+ #endif
+
+@@ -596,7 +596,7 @@ void NetworkService::OnCertDBChanged() {
+ net::CertDatabase::GetInstance()->NotifyObserversCertDBChanged();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void NetworkService::SetCryptConfig(mojom::CryptConfigPtr crypt_config) {
+ #if !defined(IS_CHROMECAST)
+ DCHECK(!os_crypt_config_set_);
diff --git a/devel/electron7/files/patch-services_network_network__service.h b/devel/electron7/files/patch-services_network_network__service.h
new file mode 100644
index 000000000000..7da1308fc79b
--- /dev/null
+++ b/devel/electron7/files/patch-services_network_network__service.h
@@ -0,0 +1,11 @@
+--- services/network/network_service.h.orig 2019-12-12 12:39:57 UTC
++++ services/network/network_service.h
+@@ -152,7 +152,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
+ mojom::NetworkService::GetNetworkListCallback callback) override;
+ void UpdateCRLSet(base::span<const uint8_t> crl_set) override;
+ void OnCertDBChanged() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
+ #endif
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/devel/electron7/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc b/devel/electron7/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
new file mode 100644
index 000000000000..13407d526127
--- /dev/null
+++ b/devel/electron7/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
@@ -0,0 +1,20 @@
+--- services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc.orig 2019-12-12 12:39:57 UTC
++++ services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc
+@@ -43,7 +43,7 @@ namespace {
+ uint32_t CalculatePrivateFootprintKb(const mojom::RawOSMemDump& os_dump,
+ uint32_t shared_resident_kb) {
+ DCHECK(os_dump.platform_private_footprint);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ uint64_t rss_anon_bytes = os_dump.platform_private_footprint->rss_anon_bytes;
+ uint64_t vm_swap_bytes = os_dump.platform_private_footprint->vm_swap_bytes;
+ return (rss_anon_bytes + vm_swap_bytes) / 1024;
+@@ -82,7 +82,7 @@ memory_instrumentation::mojom::OSMemDumpPtr CreatePubl
+ os_dump->is_peak_rss_resettable = internal_os_dump.is_peak_rss_resettable;
+ os_dump->private_footprint_kb =
+ CalculatePrivateFootprintKb(internal_os_dump, shared_resident_kb);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ os_dump->private_footprint_swap_kb =
+ internal_os_dump.platform_private_footprint->vm_swap_bytes / 1024;
+ #endif
diff --git a/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h b/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
new file mode 100644
index 000000000000..8e6f6ca5984e
--- /dev/null
+++ b/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
@@ -0,0 +1,32 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h.orig 2019-12-12 12:39:57 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h
+@@ -28,9 +28,9 @@ class COMPONENT_EXPORT(
+ mojom::RawOSMemDump*);
+ static std::vector<mojom::VmRegionPtr> GetProcessMemoryMaps(base::ProcessId);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ static void SetProcSmapsForTesting(FILE*);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(OSMetricsTest, ParseProcSmaps);
+@@ -44,7 +44,7 @@ class COMPONENT_EXPORT(
+ static std::vector<mojom::VmRegionPtr> GetProcessModules(base::ProcessId);
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Provides information on the dump state of resident pages.
+ enum class MappedAndResidentPagesDumpState {
+ // Access to /proc/<pid>/pagemap can be denied for android devices running
+@@ -68,7 +68,7 @@ class COMPONENT_EXPORT(
+ // TODO(chiniforooshan): move to /base/process/process_metrics_linux.cc after
+ // making sure that peak RSS is useful.
+ static size_t GetPeakResidentSetSize(base::ProcessId pid);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ };
+
+ } // namespace memory_instrumentation
diff --git a/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc b/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
new file mode 100644
index 000000000000..89c86e73f3cf
--- /dev/null
+++ b/devel/electron7/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
@@ -0,0 +1,103 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc
+@@ -22,8 +22,10 @@
+ #include "build/build_config.h"
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
+
++#if !defined(OS_BSD)
+ // Symbol with virtual address of the start of ELF header of the current binary.
+ extern char __ehdr_start;
++#endif
+
+ namespace memory_instrumentation {
+
+@@ -86,6 +88,7 @@ struct ModuleData {
+
+ ModuleData GetMainModuleData() {
+ ModuleData module_data;
++#if !defined(OS_BSD)
+ Dl_info dl_info;
+ if (dladdr(&__ehdr_start, &dl_info)) {
+ base::debug::ElfBuildIdBuffer build_id;
+@@ -96,6 +99,7 @@ ModuleData GetMainModuleData() {
+ module_data.build_id = std::string(build_id, build_id_length);
+ }
+ }
++#endif
+ return module_data;
+ }
+
+@@ -143,14 +147,14 @@ bool ParseSmapsHeader(const char* header_line,
+ // Build ID is needed to symbolize heap profiles, and is generated only on
+ // official builds. Build ID is only added for the current library (chrome)
+ // since it is racy to read other libraries which can be unmapped any time.
+-#if defined(OFFICIAL_BUILD)
++#if defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+ if (!region->mapped_file.empty() &&
+ base::StartsWith(main_module_data.path, region->mapped_file,
+ base::CompareCase::SENSITIVE) &&
+ !main_module_data.build_id.empty()) {
+ region->module_debugid = main_module_data.build_id;
+ }
+-#endif // defined(OFFICIAL_BUILD)
++#endif // defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+
+ return res;
+ }
+@@ -239,6 +243,7 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ mojom::RawOSMemDump* dump) {
+ // TODO(chiniforooshan): There is no need to read both /statm and /status
+ // files. Refactor to get everything from /status using ProcessMetric.
++#if !defined(OS_BSD)
+ auto statm_file = GetProcPidDir(pid).Append("statm");
+ auto autoclose = base::ScopedFD(open(statm_file.value().c_str(), O_RDONLY));
+ int statm_fd = autoclose.get();
+@@ -253,6 +258,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ if (!success)
+ return false;
++#else
++ uint64_t resident_pages = 0;
++ uint64_t shared_pages = 0;
++#endif
+
+ auto process_metrics = CreateProcessMetrics(pid);
+
+@@ -293,6 +302,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ // static
+ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMaps(base::ProcessId pid) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return std::vector<VmRegionPtr>();
++#else
+ std::vector<VmRegionPtr> maps;
+ uint32_t res = 0;
+ if (g_proc_smaps_for_testing) {
+@@ -310,6 +323,7 @@ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMa
+ return std::vector<VmRegionPtr>();
+
+ return maps;
++#endif
+ }
+
+ // static
+@@ -317,6 +331,10 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ const size_t start_address,
+ const size_t end_address,
+ std::vector<uint8_t>* accessed_pages_bitmap) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return OSMetrics::MappedAndResidentPagesDumpState::kFailure;
++#else
+ const char* kPagemap = "/proc/self/pagemap";
+
+ base::ScopedFILE pagemap_file(fopen(kPagemap, "r"));
+@@ -358,6 +376,7 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ }
+ }
+ return OSMetrics::MappedAndResidentPagesDumpState::kSuccess;
++#endif
+ }
+
+ // static
diff --git a/devel/electron7/files/patch-services_service__manager_embedder_main.cc b/devel/electron7/files/patch-services_service__manager_embedder_main.cc
new file mode 100644
index 000000000000..59e18404b7d1
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_embedder_main.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/embedder/main.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/embedder/main.cc
+@@ -272,7 +272,7 @@ int Main(const MainParams& params) {
+ #endif
+ base::EnableTerminationOnOutOfMemory();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The various desktop environments set this environment variable that
+ // allows the dbus client library to connect directly to the bus. When this
+ // variable is not set (test environments like xvfb-run), the dbus client
diff --git a/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.cc b/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.cc
new file mode 100644
index 000000000000..8d8ce43519f4
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.cc
@@ -0,0 +1,19 @@
+--- services/service_manager/embedder/set_process_title_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/embedder/set_process_title_linux.cc
+@@ -49,6 +49,8 @@
+ extern char** environ;
+
+ static char** g_main_argv = NULL;
++
++#if !defined(OS_FREEBSD)
+ static char* g_orig_argv0 = NULL;
+
+ void setproctitle(const char* fmt, ...) {
+@@ -101,6 +103,7 @@ void setproctitle(const char* fmt, ...) {
+ va_end(ap);
+ g_main_argv[1] = NULL;
+ }
++#endif
+
+ // A version of this built into glibc would not need this function, since
+ // it could stash the argv pointer in __libc_start_main(). But we need it.
diff --git a/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.h b/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.h
new file mode 100644
index 000000000000..040784a7b91d
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_embedder_set__process__title__linux.h
@@ -0,0 +1,20 @@
+--- services/service_manager/embedder/set_process_title_linux.h.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/embedder/set_process_title_linux.h
+@@ -5,6 +5,9 @@
+ #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+ #define SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+
++#include "build/build_config.h"
++
++#if !defined(OS_FREEBSD)
+ // Set the process title that will show in "ps" and similar tools. Takes
+ // printf-style format string and arguments. After calling setproctitle()
+ // the original main() argv[] array should not be used. By default, the
+@@ -14,6 +17,7 @@
+ // This signature and naming is to be compatible with most other Unix
+ // implementations of setproctitle().
+ void setproctitle(const char* fmt, ...);
++#endif
+
+ // Initialize state needed for setproctitle() on Linux. Pass the argv pointer
+ // from main() to setproctitle_init() before calling setproctitle().
diff --git a/devel/electron7/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn b/devel/electron7/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
new file mode 100644
index 000000000000..e304e7e4ad57
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
@@ -0,0 +1,14 @@
+--- services/service_manager/public/cpp/service_executable/BUILD.gn.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/public/cpp/service_executable/BUILD.gn
+@@ -29,6 +29,11 @@ source_set("support") {
+ "//sandbox/linux:seccomp_bpf",
+ ]
+ }
++ if (is_bsd) {
++ deps -= [
++ "//sandbox/linux:seccomp_bpf"
++ ]
++ }
+ }
+
+ source_set("switches") {
diff --git a/devel/electron7/files/patch-services_service__manager_sandbox_BUILD.gn b/devel/electron7/files/patch-services_service__manager_sandbox_BUILD.gn
new file mode 100644
index 000000000000..9eef8e0e0bd9
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_sandbox_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/BUILD.gn.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/sandbox/BUILD.gn
+@@ -28,7 +28,7 @@ component("sandbox") {
+ "//base",
+ "//sandbox:common",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/bpf_audio_policy_linux.cc",
+ "linux/bpf_audio_policy_linux.h",
diff --git a/devel/electron7/files/patch-services_service__manager_sandbox_sandbox__type.cc b/devel/electron7/files/patch-services_service__manager_sandbox_sandbox__type.cc
new file mode 100644
index 000000000000..5eee16fcd3b5
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_sandbox_sandbox__type.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/sandbox_type.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/sandbox/sandbox_type.cc
+@@ -25,7 +25,7 @@ bool IsUnsandboxedSandboxType(SandboxType sandbox_type
+ service_manager::features::kXRSandbox);
+ #endif
+ case SANDBOX_TYPE_AUDIO:
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return !base::FeatureList::IsEnabled(
+ service_manager::features::kAudioServiceSandbox);
+ #else
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_common_zygote__features.gni b/devel/electron7/files/patch-services_service__manager_zygote_common_zygote__features.gni
new file mode 100644
index 000000000000..60a56d856088
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_common_zygote__features.gni
@@ -0,0 +1,8 @@
+--- services/service_manager/zygote/common/zygote_features.gni.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/common/zygote_features.gni
+@@ -2,4 +2,4 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-use_zygote_handle = is_posix && !is_android && !is_mac
++use_zygote_handle = is_posix && !is_android && !is_mac && !is_bsd
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc b/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
new file mode 100644
index 000000000000..5c8dc8903524
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
@@ -0,0 +1,40 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.cc
+@@ -72,6 +72,7 @@ ZygoteHostImpl* ZygoteHostImpl::GetInstance() {
+ }
+
+ void ZygoteHostImpl::Init(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
+ return;
+ }
+@@ -122,6 +123,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& com
+ "you can try using --"
+ << service_manager::switches::kNoSandbox << ".";
+ }
++#endif
+ }
+
+ void ZygoteHostImpl::AddZygotePid(pid_t pid) {
+@@ -146,6 +148,7 @@ pid_t ZygoteHostImpl::LaunchZygote(
+ base::CommandLine* cmd_line,
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds) {
++#if !defined(OS_BSD)
+ int fds[2];
+ CHECK_EQ(0, socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds));
+ CHECK(base::UnixDomainSocket::EnableReceiveProcessId(fds[0]));
+@@ -210,9 +213,12 @@ pid_t ZygoteHostImpl::LaunchZygote(
+
+ AddZygotePid(pid);
+ return pid;
++#else
++ return 0;
++#endif
+ }
+
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ void ZygoteHostImpl::AdjustRendererOOMScore(base::ProcessHandle pid,
+ int score) {
+ // 1) You can't change the oom_score_adj of a non-dumpable process
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h b/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
new file mode 100644
index 000000000000..9c1510332f46
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
@@ -0,0 +1,13 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.h.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.h
+@@ -44,8 +44,10 @@ class COMPONENT_EXPORT(SERVICE_MANAGER_ZYGOTE) ZygoteH
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds);
+
++#if !defined(OS_BSD)
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) override;
++#endif
+ bool HasZygote() { return !zygote_pids_.empty(); }
+
+ private:
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_zygote__host__linux.h b/devel/electron7/files/patch-services_service__manager_zygote_zygote__host__linux.h
new file mode 100644
index 000000000000..f20609940717
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_zygote__host__linux.h
@@ -0,0 +1,16 @@
+--- services/service_manager/zygote/zygote_host_linux.h.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/zygote_host_linux.h
+@@ -30,11 +30,13 @@ class ZygoteHost {
+ // after the first render has been forked.
+ virtual int GetRendererSandboxStatus() const = 0;
+
++#if !defined(OS_BSD)
+ // Adjust the OOM score of the given renderer's PID. The allowed
+ // range for the score is [0, 1000], where higher values are more
+ // likely to be killed by the OOM killer.
+ virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) = 0;
++#endif
+ };
+
+ } // namespace service_manager
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_zygote__linux.cc b/devel/electron7/files/patch-services_service__manager_zygote_zygote__linux.cc
new file mode 100644
index 000000000000..09fef74c4e22
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_zygote__linux.cc
@@ -0,0 +1,15 @@
+--- services/service_manager/zygote/zygote_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/zygote_linux.cc
+@@ -1,6 +1,7 @@
+ // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "services/service_manager/zygote/zygote_linux.h"
+
+@@ -657,3 +658,4 @@ bool Zygote::HandleGetSandboxStatus(int fd, base::Pick
+ }
+
+ } // namespace service_manager
++#endif
diff --git a/devel/electron7/files/patch-services_service__manager_zygote_zygote__main__linux.cc b/devel/electron7/files/patch-services_service__manager_zygote_zygote__main__linux.cc
new file mode 100644
index 000000000000..4b71263bc678
--- /dev/null
+++ b/devel/electron7/files/patch-services_service__manager_zygote_zygote__main__linux.cc
@@ -0,0 +1,48 @@
+--- services/service_manager/zygote/zygote_main_linux.cc.orig 2019-12-12 12:39:57 UTC
++++ services/service_manager/zygote/zygote_main_linux.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -101,6 +103,7 @@ static bool CreateInitProcessReaper(
+ // created through the setuid sandbox.
+ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox,
+ base::OnceClosure post_fork_parent_callback) {
++#if !defined(OS_BSD)
+ DCHECK(setuid_sandbox);
+ DCHECK(setuid_sandbox->IsSuidSandboxChild());
+
+@@ -133,6 +136,9 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxCli
+
+ CHECK(service_manager::SandboxDebugHandling::SetDumpableStatusAndHandlers());
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ static void DropAllCapabilities(int proc_fd) {
+@@ -178,6 +184,7 @@ static void EnterLayerOneSandbox(service_manager::Sand
+
+ bool ZygoteMain(
+ std::vector<std::unique_ptr<ZygoteForkDelegate>> fork_delegates) {
++#if !defined(OS_BSD)
+ sandbox::SetAmZygoteOrRenderer(true, GetSandboxFD());
+
+ auto* linux_sandbox = service_manager::SandboxLinux::GetInstance();
+@@ -240,6 +247,9 @@ bool ZygoteMain(
+
+ // This function call can return multiple times, once per fork().
+ return zygote.ProcessRequests();
++#else
++ return false;
++#endif
+ }
+
+ } // namespace service_manager
diff --git a/devel/electron7/files/patch-services_video__capture_broadcasting__receiver.cc b/devel/electron7/files/patch-services_video__capture_broadcasting__receiver.cc
new file mode 100644
index 000000000000..37ec8bd3fb3e
--- /dev/null
+++ b/devel/electron7/files/patch-services_video__capture_broadcasting__receiver.cc
@@ -0,0 +1,20 @@
+--- services/video_capture/broadcasting_receiver.cc.orig 2019-12-12 12:39:57 UTC
++++ services/video_capture/broadcasting_receiver.cc
+@@ -40,7 +40,7 @@ void CloneSharedBufferHandle(const mojo::ScopedSharedB
+ void CloneSharedBufferToRawFileDescriptorHandle(
+ const mojo::ScopedSharedBufferHandle& source,
+ media::mojom::VideoBufferHandlePtr* target) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // |source| is unwrapped to a |PlatformSharedMemoryRegion|, from whence a file
+ // descriptor can be extracted which is then mojo-wrapped.
+ base::subtle::PlatformSharedMemoryRegion platform_region =
+@@ -178,7 +178,7 @@ void BroadcastingReceiver::BufferContext::
+ ConvertRawFileDescriptorToSharedBuffer() {
+ DCHECK(buffer_handle_->is_shared_memory_via_raw_file_descriptor());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The conversion unwraps the descriptor from its mojo handle to the raw file
+ // descriptor (ie, an int). This is used to create a
+ // PlatformSharedMemoryRegion which is then wrapped as a
diff --git a/devel/electron7/files/patch-skia_ext_SkMemory__new__handler.cpp b/devel/electron7/files/patch-skia_ext_SkMemory__new__handler.cpp
new file mode 100644
index 000000000000..9ed3fa42f341
--- /dev/null
+++ b/devel/electron7/files/patch-skia_ext_SkMemory__new__handler.cpp
@@ -0,0 +1,20 @@
+--- skia/ext/SkMemory_new_handler.cpp.orig 2019-12-12 12:39:57 UTC
++++ skia/ext/SkMemory_new_handler.cpp
+@@ -77,7 +77,7 @@ static void* malloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = malloc(size);
+ #else
+ // It's the responsibility of the caller to check the return value.
+@@ -97,7 +97,7 @@ static void* calloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = calloc(1, size);
+ #else
+ // It's the responsibility of the caller to check the return value.
diff --git a/devel/electron7/files/patch-third__party_angle_BUILD.gn b/devel/electron7/files/patch-third__party_angle_BUILD.gn
new file mode 100644
index 000000000000..7d60240c5cf5
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_BUILD.gn
@@ -0,0 +1,21 @@
+--- third_party/angle/BUILD.gn.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/BUILD.gn
+@@ -357,6 +357,7 @@ angle_static_library("angle_gpu_info_util") {
+ "X11",
+ "Xi",
+ "Xext",
++ "GL",
+ ]
+ }
+ }
+@@ -1080,10 +1081,6 @@ foreach(is_shared_library,
+
+ if (is_linux) {
+ sources += util_linux_sources
+- libs += [
+- "rt",
+- "dl",
+- ]
+ }
+
+ if (is_mac) {
diff --git a/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
new file mode 100644
index 000000000000..fe3253369cce
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
@@ -0,0 +1,16 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_internal.h.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_internal.h
+@@ -14,8 +14,13 @@
+ namespace angle
+ {
+
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices);
++
+ // Defined in SystemInfo_libpci when GPU_INFO_USE_LIBPCI is defined.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices);
++#if defined(__FreeBSD__)
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices);
++#endif
+ // Defined in SystemInfo_x11 when GPU_INFO_USE_X11 is defined.
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version);
+
diff --git a/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
new file mode 100644
index 000000000000..39c6d842af2d
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
@@ -0,0 +1,90 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp
+@@ -12,6 +12,11 @@
+ #include <pci/pci.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#include <sys/pciio.h>
++#endif
++
+ #include "common/angleutils.h"
+ #include "common/debug.h"
+
+@@ -82,6 +87,75 @@ struct LibPCI : private angle::NonCopyable
+ };
+
+ } // anonymous namespace
++
++#if defined(__FreeBSD__)
++// Adds an entry per PCI GPU found and fills the device and vendor ID.
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices)
++{
++ int fd;
++ struct pci_conf_io conf;
++ struct pci_conf *matches;
++ uint32_t offset = 0;
++
++ fd = open("/dev/pci", O_RDONLY);
++ if (fd < 0)
++ return false;
++
++ matches = new struct pci_conf[32];
++ conf.generation = 0;
++ do {
++ conf.pat_buf_len = 0;
++ conf.num_patterns = 0;
++ conf.patterns = NULL;
++ conf.match_buf_len = 32 * sizeof(struct pci_conf);
++ conf.num_matches = 32;
++ conf.matches = matches;
++ conf.offset = offset;
++ conf.status = PCI_GETCONF_ERROR;
++ if (ioctl(fd, PCIOCGETCONF, &conf) < 0) {
++ if (errno == ENODEV)
++ break;
++ }
++ /* PCI_GETCONF_LIST_CHANGED would require us to start over. */
++ if (conf.status == PCI_GETCONF_ERROR || conf.status == PCI_GETCONF_LIST_CHANGED) {
++ break;
++ }
++
++ for (unsigned int i = 0; i < conf.num_matches; i++) {
++ uint16_t device_class = (matches[i].pc_class << 8) | matches[i].pc_subclass;
++
++ // Skip non-GPU devices
++ switch (device_class)
++ {
++ case PCI_CLASS_DISPLAY_VGA:
++ case PCI_CLASS_DISPLAY_XGA:
++ case PCI_CLASS_DISPLAY_3D:
++ break;
++ default:
++ continue;
++ }
++
++ // Skip unknown devices
++ if (matches[i].pc_vendor == 0 || matches[i].pc_device == 0) {
++ continue;
++ }
++
++ GPUDeviceInfo info;
++ info.vendorId = matches[i].pc_vendor;
++ info.deviceId = matches[i].pc_device;
++
++ devices->push_back(info);
++ }
++ offset += conf.num_matches;
++ } while (conf.status == PCI_GETCONF_MORE_DEVS);
++
++ delete[] matches;
++
++ close(fd);
++
++ return true;
++}
++#endif
+
+ // Adds an entry per PCI GPU found and fills the device and vendor ID.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices)
diff --git a/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
new file mode 100644
index 000000000000..a8185d95756b
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
@@ -0,0 +1,21 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp
+@@ -71,10 +71,18 @@ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo
+
+ bool GetSystemInfo(SystemInfo *info)
+ {
++#if defined(__FreeBSD__)
++ if (!CollectMesaCardInfo(&(info->gpus)))
++ {
++ if (!GetPCIDevicesFreeBSD(&(info->gpus)))
++ return false;
++ }
++#else
+ if (!GetPCIDevicesWithLibPCI(&(info->gpus)))
+ {
+ return false;
+ }
++#endif
+
+ if (info->gpus.size() == 0)
+ {
diff --git a/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
new file mode 100644
index 000000000000..475974198c59
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
@@ -0,0 +1,55 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp
+@@ -8,6 +8,8 @@
+
+ #include "gpu_info_util/SystemInfo_internal.h"
+
++#include <GL/glx.h>
++#include <GL/glxext.h>
+ #include <X11/Xlib.h>
+
+ #include "common/debug.h"
+@@ -18,8 +20,43 @@
+ # error SystemInfo_x11.cpp compiled without GPU_INFO_USE_X11
+ #endif
+
++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
++
+ namespace angle
+ {
++
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices)
++{
++
++ unsigned int vid[3], did[3];
++
++ Display *display = XOpenDisplay(NULL);
++ if (!display) {
++ return false;
++ }
++
++ PFNGLXQUERYRENDERERINTEGERMESAPROC queryInteger =
++ (PFNGLXQUERYRENDERERINTEGERMESAPROC) glXGetProcAddressARB((const GLubyte *)
++ "glXQueryRendererIntegerMESA");
++
++ if (!queryInteger)
++ return false;
++
++ bool vendor_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_VENDOR_ID_MESA, vid);
++ bool device_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_DEVICE_ID_MESA, did);
++
++ if (vendor_ret && device_ret) {
++ GPUDeviceInfo info;
++ info.vendorId = vid[0];
++ info.deviceId = did[0];
++ devices->push_back(info);
++ }
++
++ return true;
++}
+
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version)
+ {
diff --git a/devel/electron7/files/patch-third__party_angle_src_libANGLE_Display.cpp b/devel/electron7/files/patch-third__party_angle_src_libANGLE_Display.cpp
new file mode 100644
index 000000000000..8c5e890a7d5e
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_libANGLE_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/angle/src/libANGLE/Display.cpp.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/libANGLE/Display.cpp
+@@ -68,7 +68,7 @@
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ # include "libANGLE/renderer/vulkan/win32/DisplayVkWin32.h"
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ # include "libANGLE/renderer/vulkan/xcb/DisplayVkXcb.h"
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ # include "libANGLE/renderer/vulkan/android/DisplayVkAndroid.h"
+@@ -268,7 +268,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(const Attrib
+ #if defined(ANGLE_ENABLE_VULKAN)
+ # if defined(ANGLE_PLATFORM_WINDOWS)
+ impl = new rx::DisplayVkWin32(state);
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ impl = new rx::DisplayVkXcb(state);
+ # elif defined(ANGLE_PLATFORM_ANDROID)
+ impl = new rx::DisplayVkAndroid(state);
diff --git a/devel/electron7/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h b/devel/electron7/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
new file mode 100644
index 000000000000..677d71b7fcc7
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/renderer/driver_utils.h.orig 2019-12-12 12:42:33 UTC
++++ third_party/angle/src/libANGLE/renderer/driver_utils.h
+@@ -114,7 +114,7 @@ inline bool IsWindows()
+
+ inline bool IsLinux()
+ {
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
new file mode 100644
index 000000000000..d0ba7cf43afb
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/loader.c.orig 2019-12-12 12:46:28 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/loader.c
+@@ -229,7 +229,7 @@ void *loader_device_heap_realloc(const struct loader_d
+ }
+
+ // Environment variables
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+
+ static inline char *loader_getenv(const char *name, const struct loader_instance *inst) {
+ // No allocation of memory necessary for Linux, but we should at least touch
diff --git a/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
new file mode 100644
index 000000000000..1d5d2c881051
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h.orig 2019-12-12 12:46:28 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron7/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
new file mode 100644
index 000000000000..2341b367d900
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h.orig 2019-12-12 12:47:10 UTC
++++ third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_BUILD.gn b/devel/electron7/files/patch-third__party_blink_renderer_BUILD.gn
new file mode 100644
index 000000000000..37e293bf1328
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_BUILD.gn
@@ -0,0 +1,13 @@
+--- third_party/blink/renderer/BUILD.gn.orig 2019-12-12 12:40:04 UTC
++++ third_party/blink/renderer/BUILD.gn
+@@ -45,8 +45,8 @@ config("inside_blink") {
+ "-Wconversion",
+ "-Wno-float-conversion",
+ "-Wno-sign-conversion",
+- "-Wno-implicit-float-conversion",
+- "-Wno-implicit-int-conversion",
++# "-Wno-implicit-float-conversion",
++# "-Wno-implicit-int-conversion",
+ ]
+ }
+ }
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
new file mode 100644
index 000000000000..e2d996610bda
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/editing/editing_behavior.cc.orig 2019-12-12 12:40:05 UTC
++++ third_party/blink/renderer/core/editing/editing_behavior.cc
+@@ -270,7 +270,7 @@ bool EditingBehavior::ShouldInsertCharacter(const Keyb
+ // unexpected behaviour
+ if (ch < ' ')
+ return false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // According to XKB map no keyboard combinations with ctrl key are mapped to
+ // printable characters, however we need the filter as the DomKey/text could
+ // contain printable characters.
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
new file mode 100644
index 000000000000..df66f55aaa0f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc.orig 2019-12-12 12:40:06 UTC
++++ third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+@@ -40,7 +40,7 @@ constexpr base::TimeDelta kEncodeRowSlackBeforeDeadlin
+ base::TimeDelta::FromMicroseconds(100);
+
+ /* The value is based on user statistics on Nov 2017. */
+-#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN))
++#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)) || defined(OS_BSD)
+ const double kIdleTaskStartTimeoutDelayMs = 1000.0;
+ #else
+ const double kIdleTaskStartTimeoutDelayMs = 4000.0; // For ChromeOS, Mobile
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
new file mode 100644
index 000000000000..eab73f1c0dde
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/forms/internal_popup_menu.cc.orig 2019-12-12 12:40:06 UTC
++++ third_party/blink/renderer/core/html/forms/internal_popup_menu.cc
+@@ -121,7 +121,7 @@ class InternalPopupMenu::ItemIterationContext {
+ is_in_group_(false),
+ buffer_(buffer) {
+ DCHECK(buffer_);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On other platforms, the <option> background color is the same as the
+ // <select> background color. On Linux, that makes the <option>
+ // background color very dark, so by default, try to use a lighter
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
new file mode 100644
index 000000000000..086923ca839d
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/inspector/inspector_memory_agent.cc.orig 2019-12-12 12:40:07 UTC
++++ third_party/blink/renderer/core/inspector/inspector_memory_agent.cc
+@@ -184,7 +184,7 @@ InspectorMemoryAgent::GetSamplingProfileById(uint32_t
+
+ Vector<String> InspectorMemoryAgent::Symbolize(
+ const WebVector<void*>& addresses) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(alph): Move symbolization to the client.
+ Vector<void*> addresses_to_symbolize;
+ for (size_t i = 0; i < addresses.size(); i++) {
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_layout_layout__view.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
new file mode 100644
index 000000000000..2be6d91ed788
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/layout/layout_view.cc.orig 2019-12-12 12:40:07 UTC
++++ third_party/blink/renderer/core/layout/layout_view.cc
+@@ -58,7 +58,7 @@
+ #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
+ #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -323,7 +323,7 @@ void LayoutView::UpdateLayout() {
+ DCHECK(!layout_state_);
+ LayoutState root_layout_state(*this);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The font code in FontPlatformData does not have a direct connection to the
+ // document, the frame or anything from which we could retrieve the device
+ // scale factor. After using zoom for DSF, the GraphicsContext does only ever
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
new file mode 100644
index 000000000000..9ac000c5146f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/paint/paint_layer.cc.orig 2019-12-12 12:40:07 UTC
++++ third_party/blink/renderer/core/paint/paint_layer.cc
+@@ -104,7 +104,7 @@ namespace {
+ static CompositingQueryMode g_compositing_query_mode =
+ kCompositingQueriesAreOnlyAllowedInCertainDocumentLifecyclePhases;
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct SameSizeAsPaintLayer : DisplayItemClient {
+ // The bit fields may fit into the machine word of DisplayItemClient which
+ // has only 8-bit data.
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc b/devel/electron7/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
new file mode 100644
index 000000000000..f80c8ba1d950
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc.orig 2019-12-12 12:40:07 UTC
++++ third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
+@@ -338,7 +338,7 @@ ScrollbarPart ScrollbarThemeAura::InvalidateOnThumbPos
+
+ bool ScrollbarThemeAura::ShouldCenterOnThumb(const Scrollbar& scrollbar,
+ const WebMouseEvent& event) {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ if (event.button == WebPointerProperties::Button::kMiddle)
+ return true;
+ #endif
+@@ -353,7 +353,7 @@ bool ScrollbarThemeAura::ShouldSnapBackToDragOrigin(
+ // Disable snapback on desktop Linux to better integrate with the desktop
+ // behavior. Typically, Linux apps do not implement scrollbar snapback (this is
+ // true for at least GTK and QT apps).
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return false;
+ #endif
+
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc b/devel/electron7/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc
new file mode 100644
index 000000000000..0516a9781a08
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc.orig 2019-12-12 12:40:10 UTC
++++ third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
+@@ -84,7 +84,7 @@ void LogAudioProcesingProperties(
+ } // namespace
+
+ bool IsApmInAudioServiceEnabled() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return base::FeatureList::IsEnabled(features::kWebRtcApmInAudioService);
+ #else
+ return false;
+@@ -427,7 +427,7 @@ void ProcessedLocalAudioSource::CaptureUsingProcessor(
+ bool key_pressed) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ DCHECK_LE(volume, 1.0);
+-#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_OPENBSD)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // We have a special situation on Linux where the microphone volume can be
+ // "higher than maximum". The input volume slider in the sound preference
+ // allows the user to set a scaling that is higher than 100%. It means that
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_BUILD.gn b/devel/electron7/files/patch-third__party_blink_renderer_platform_BUILD.gn
new file mode 100644
index 000000000000..562003418988
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/blink/renderer/platform/BUILD.gn.orig 2019-12-16 13:32:58 UTC
++++ third_party/blink/renderer/platform/BUILD.gn
+@@ -103,6 +103,7 @@ executable("character_data_generator") {
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ libs = [ "cxxrt" ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
new file mode 100644
index 000000000000..8910470867b3
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.cc.orig 2019-12-12 12:40:10 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.cc
+@@ -76,7 +76,7 @@ static const char kColorEmojiLocale[] = "und-Zsye";
+
+ SkFontMgr* FontCache::static_font_manager_ = nullptr;
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float FontCache::device_scale_factor_ = 1.0;
+ #endif
+
+@@ -115,7 +115,7 @@ FontCache::FontCache()
+ FontPlatformData* FontCache::SystemFontPlatformData(
+ const FontDescription& font_description) {
+ const AtomicString& family = FontCache::SystemFontFamily();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (family.IsEmpty() || family == font_family_names::kSystemUi)
+ return nullptr;
+ #else
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
new file mode 100644
index 000000000000..d9bdec704f2e
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
@@ -0,0 +1,53 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.h.orig 2019-12-12 12:40:10 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.h
+@@ -158,7 +158,7 @@ class PLATFORM_EXPORT FontCache {
+ sk_sp<SkFontMgr> FontManager() { return font_manager_; }
+ static void SetFontManager(sk_sp<SkFontMgr>);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // These are needed for calling QueryRenderStyleForStrike, since
+ // gfx::GetFontRenderParams makes distinctions based on DSF.
+ static float DeviceScaleFactor() { return device_scale_factor_; }
+@@ -233,7 +233,7 @@ class PLATFORM_EXPORT FontCache {
+ const FontDescription&);
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct PlatformFallbackFont {
+ String name;
+ std::string filename;
+@@ -245,7 +245,7 @@ class PLATFORM_EXPORT FontCache {
+ static void GetFontForCharacter(UChar32,
+ const char* preferred_locale,
+ PlatformFallbackFont*);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FontDataFromFontPlatformData(
+ const FontPlatformData*,
+@@ -317,12 +317,12 @@ class PLATFORM_EXPORT FontCache {
+ const FontFaceCreationParams&,
+ std::string& name);
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ static AtomicString GetFamilyNameForCharacter(SkFontMgr*,
+ UChar32,
+ const FontDescription&,
+ FontFallbackPriority);
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FallbackOnStandardFontStyle(
+ const FontDescription&,
+@@ -355,7 +355,7 @@ class PLATFORM_EXPORT FontCache {
+ mojom::blink::DWriteFontProxyPtr service_;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ static float device_scale_factor_;
+ #endif
+
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
new file mode 100644
index 000000000000..18b2299dd559
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_description.cc.orig 2019-12-12 12:40:11 UTC
++++ third_party/blink/renderer/platform/fonts/font_description.cc
+@@ -38,7 +38,7 @@
+ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -223,7 +223,7 @@ FontCacheKey FontDescription::CacheKey(
+ static_cast<unsigned>(fields_.orientation_) << 1 | // bit 2-3
+ static_cast<unsigned>(fields_.subpixel_text_position_); // bit 1
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float device_scale_factor_for_key = FontCache::DeviceScaleFactor();
+ #else
+ float device_scale_factor_for_key = 1.0f;
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
new file mode 100644
index 000000000000..4aa49ef22065
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/fonts/font_metrics.cc.orig 2019-12-12 12:40:11 UTC
++++ third_party/blink/renderer/platform/fonts/font_metrics.cc
+@@ -38,7 +38,7 @@
+
+ namespace blink {
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // This is the largest VDMX table which we'll try to load and parse.
+ static const size_t kMaxVDMXTableSize = 1024 * 1024; // 1 MB
+ #endif
+@@ -60,7 +60,7 @@ void FontMetrics::AscentDescentWithHacks(
+ int vdmx_ascent = 0, vdmx_descent = 0;
+ bool is_vdmx_valid = false;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Manually digging up VDMX metrics is only applicable when bytecode hinting
+ // using FreeType. With DirectWrite or CoreText, no bytecode hinting is ever
+ // done. This code should be pushed into FreeType (hinted font metrics).
+@@ -106,7 +106,7 @@ void FontMetrics::AscentDescentWithHacks(
+ visual_overflow_inflation_for_ascent = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent = 1;
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
new file mode 100644
index 000000000000..e677fc7670c7
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc.orig 2019-12-12 12:40:11 UTC
++++ third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
+@@ -8,7 +8,7 @@
+ #if defined(OS_ANDROID)
+ #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h"
+ #include "third_party/blink/renderer/platform/fonts/android/font_unique_name_lookup_android.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/linux/font_unique_name_lookup_linux.h"
+ #elif defined(OS_WIN)
+ #include "third_party/blink/renderer/platform/fonts/win/font_unique_name_lookup_win.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<FontUniqueNameLookup>
+ FontUniqueNameLookup::GetPlatformUniqueNameLookup() {
+ #if defined(OS_ANDROID)
+ return std::make_unique<FontUniqueNameLookupAndroid>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<FontUniqueNameLookupLinux>();
+ #elif defined(OS_WIN)
+ return std::make_unique<FontUniqueNameLookupWin>();
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
new file mode 100644
index 000000000000..1394d43062cc
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
@@ -0,0 +1,38 @@
+--- third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc.orig 2019-12-12 12:40:11 UTC
++++ third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc
+@@ -59,7 +59,7 @@ AtomicString ToAtomicString(const SkString& str) {
+ return AtomicString::FromUTF8(str.c_str(), str.size());
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // This function is called on android or when we are emulating android fonts on
+ // linux and the embedder has overriden the default fontManager with
+ // WebFontRendering::setSkiaFontMgr.
+@@ -82,7 +82,7 @@ AtomicString FontCache::GetFamilyNameForCharacter(
+ typeface->getFamilyName(&skia_family_name);
+ return ToAtomicString(skia_family_name);
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void FontCache::PlatformInit() {}
+
+@@ -227,7 +227,7 @@ sk_sp<SkTypeface> FontCache::CreateTypeface(
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // On linux if the fontManager has been overridden then we should be calling
+ // the embedder provided font Manager rather than calling
+ // SkTypeface::CreateFromName which may redirect the call to the default font
+@@ -254,7 +254,7 @@ std::unique_ptr<FontPlatformData> FontCache::CreateFon
+ std::string name;
+
+ sk_sp<SkTypeface> typeface;
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ if (alternate_name == AlternateFontName::kLocalUniqueFace &&
+ RuntimeEnabledFeatures::FontSrcLocalMatchingEnabled()) {
+ typeface = CreateTypefaceFromUniqueName(creation_params);
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
new file mode 100644
index 000000000000..48d0cc24aef7
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
@@ -0,0 +1,27 @@
+--- third_party/blink/renderer/platform/wtf/container_annotations.h.orig 2019-12-12 12:40:12 UTC
++++ third_party/blink/renderer/platform/wtf/container_annotations.h
+@@ -10,7 +10,7 @@
+
+ // TODO(ochang): Remove the ARCH_CPU_X86_64 condition to enable this for X86
+ // once the crashes there have been fixed: http://crbug.com/461406
+-#if defined(ADDRESS_SANITIZER) && defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if defined(ADDRESS_SANITIZER) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #define ANNOTATE_CONTIGUOUS_CONTAINER
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize) \
+ if (buffer) { \
+@@ -35,13 +35,13 @@
+ ANNOTATE_NEW_BUFFER(buffer, newCapacity, bufferSize);
+ // Annotations require buffers to begin on an 8-byte boundary.
+
+-#else // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#else // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize)
+ #define ANNOTATE_DELETE_BUFFER(buffer, capacity, oldSize)
+ #define ANNOTATE_CHANGE_SIZE(buffer, capacity, oldSize, newSize)
+ #define ANNOTATE_CHANGE_CAPACITY(buffer, oldCapacity, bufferSize, newCapacity)
+
+-#endif // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#endif // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_CONTAINER_ANNOTATIONS_H_
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
new file mode 100644
index 000000000000..28cf17a4ddb6
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/wtf/stack_util.cc.orig 2019-12-12 12:40:12 UTC
++++ third_party/blink/renderer/platform/wtf/stack_util.cc
+@@ -17,6 +17,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ size_t GetUnderestimatedStackSize() {
diff --git a/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
new file mode 100644
index 000000000000..37dd5a0ed6b8
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
@@ -0,0 +1,22 @@
+--- third_party/blink/renderer/platform/wtf/threading_pthreads.cc.orig 2019-12-12 12:40:12 UTC
++++ third_party/blink/renderer/platform/wtf/threading_pthreads.cc
+@@ -51,12 +51,17 @@
+ #include <objc/objc-auto.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <unistd.h>
++#endif
++
++#if defined(OS_BSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
+ #endif
+
+ namespace WTF {
diff --git a/devel/electron7/files/patch-third__party_boringssl_BUILD.gn b/devel/electron7/files/patch-third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..a84374cdcc82
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_boringssl_BUILD.gn
@@ -0,0 +1,36 @@
+--- third_party/boringssl/BUILD.gn.orig 2019-12-16 13:32:58 UTC
++++ third_party/boringssl/BUILD.gn
+@@ -87,7 +87,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x64") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86_64
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86_64
+ } else {
+ public_configs = [ ":no_asm_config" ]
+@@ -95,13 +95,13 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x86") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_arm
+ } else if (is_ios) {
+ sources += crypto_sources_ios_arm
+@@ -109,7 +109,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_aarch64
+ } else if (is_ios) {
+ sources += crypto_sources_ios_aarch64
diff --git a/devel/electron7/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c b/devel/electron7/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
new file mode 100644
index 000000000000..485a6bd106e5
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
@@ -0,0 +1,63 @@
+--- third_party/boringssl/src/crypto/cpu-aarch64-linux.c.orig 2019-12-12 12:42:34 UTC
++++ third_party/boringssl/src/crypto/cpu-aarch64-linux.c
+@@ -14,49 +14,35 @@
+
+ #include <openssl/cpu.h>
+
+-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
+- !defined(OPENSSL_STATIC_ARMCAP)
++#if defined(OPENSSL_AARCH64)
+
+-#include <sys/auxv.h>
+-
+ #include <openssl/arm_arch.h>
+
+ #include "internal.h"
+
+-
+ extern uint32_t OPENSSL_armcap_P;
+
++#include <sys/types.h>
++#include <machine/armreg.h>
++
+ void OPENSSL_cpuid_setup(void) {
+- unsigned long hwcap = getauxval(AT_HWCAP);
++ uint64_t id_aa64isar0;
+
+- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
+- // these values.
+- static const unsigned long kNEON = 1 << 1;
+- static const unsigned long kAES = 1 << 3;
+- static const unsigned long kPMULL = 1 << 4;
+- static const unsigned long kSHA1 = 1 << 5;
+- static const unsigned long kSHA256 = 1 << 6;
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
+
+- if ((hwcap & kNEON) == 0) {
+- // Matching OpenSSL, if NEON is missing, don't report other features
+- // either.
+- return;
+- }
+-
+ OPENSSL_armcap_P |= ARMV7_NEON;
+
+- if (hwcap & kAES) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) >= ID_AA64ISAR0_AES_BASE) {
+ OPENSSL_armcap_P |= ARMV8_AES;
+ }
+- if (hwcap & kPMULL) {
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) {
+ OPENSSL_armcap_P |= ARMV8_PMULL;
+ }
+- if (hwcap & kSHA1) {
++ if (ID_AA64ISAR0_SHA1(id_aa64isar0) == ID_AA64ISAR0_SHA1_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+ }
+- if (hwcap & kSHA256) {
++ if(ID_AA64ISAR0_SHA2(id_aa64isar0) >= ID_AA64ISAR0_SHA2_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
+ }
+-
+-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
++#endif // OPENSSL_AARCH64
diff --git a/devel/electron7/files/patch-third__party_boringssl_src_crypto_ex__data.c b/devel/electron7/files/patch-third__party_boringssl_src_crypto_ex__data.c
new file mode 100644
index 000000000000..a3c2508fb4e8
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_boringssl_src_crypto_ex__data.c
@@ -0,0 +1,13 @@
+--- third_party/boringssl/src/crypto/ex_data.c.orig 2019-12-12 12:42:34 UTC
++++ third_party/boringssl/src/crypto/ex_data.c
+@@ -186,7 +186,9 @@ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int index,
+ }
+ }
+
+- sk_void_set(ad->sk, index, val);
++ // expression result unused; should this cast be to 'void'?
++ // seems it should, feel free to investigate those #def
++ (void) sk_void_set(ad->sk, index, val);
+ return 1;
+ }
+
diff --git a/devel/electron7/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h b/devel/electron7/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
new file mode 100644
index 000000000000..fcc0a6e1e883
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
@@ -0,0 +1,11 @@
+--- third_party/breakpad/breakpad/src/common/simple_string_dictionary.h.orig 2019-12-12 12:42:09 UTC
++++ third_party/breakpad/breakpad/src/common/simple_string_dictionary.h
+@@ -33,7 +33,7 @@
+ #include <assert.h>
+ #include <string.h>
+
+-#include "common/basictypes.h"
++#include "third_party/breakpad/breakpad/src/common/basictypes.h"
+
+ namespace google_breakpad {
+
diff --git a/devel/electron7/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h b/devel/electron7/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
new file mode 100644
index 000000000000..3b358696584a
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
@@ -0,0 +1,11 @@
+--- third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h.orig 2019-12-12 12:41:24 UTC
++++ third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
+@@ -334,6 +334,8 @@ class Status {
+ */
+ PERMANENT_FAILURE
+ };
++
++ Status() : code_(SUCCESS), message_() {}
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni b/devel/electron7/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
new file mode 100644
index 000000000000..1b797b14ae05
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/build/crashpad_buildconfig.gni.orig 2019-12-12 12:41:24 UTC
++++ third_party/crashpad/crashpad/build/crashpad_buildconfig.gni
+@@ -38,7 +38,7 @@ crashpad_is_standalone = crashpad_dependencies == "sta
+ if (crashpad_is_in_chromium) {
+ crashpad_is_mac = is_mac
+ crashpad_is_win = is_win
+- crashpad_is_linux = is_linux
++ crashpad_is_linux = is_linux && !is_bsd
+ crashpad_is_android = is_android
+ crashpad_is_fuchsia = is_fuchsia
+
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_client_BUILD.gn b/devel/electron7/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
new file mode 100644
index 000000000000..9bd18891ed0d
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
@@ -0,0 +1,15 @@
+--- third_party/crashpad/crashpad/client/BUILD.gn.orig 2019-12-12 12:41:24 UTC
++++ third_party/crashpad/crashpad/client/BUILD.gn
+@@ -71,6 +71,12 @@ static_library("client") {
+ sources += [ "crashpad_client_fuchsia.cc" ]
+ }
+
++ if (crashpad_is_posix) {
++ sources += [
++ "crashpad_client_posix.cc",
++ ]
++ }
++
+ if (crashpad_is_linux || crashpad_is_android || crashpad_is_fuchsia) {
+ sources += [ "crash_report_database_generic.cc" ]
+ }
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
new file mode 100644
index 000000000000..1f511dca2400
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
@@ -0,0 +1,41 @@
+--- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2019-12-16 13:33:59 UTC
++++ third_party/crashpad/crashpad/client/crashpad_client_posix.cc
+@@ -0,0 +1,38 @@
++// Copyright 2017 The Crashpad Authors. All rights reserved.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++#include "client/crashpad_client.h"
++
++#include "base/logging.h"
++
++namespace crashpad {
++
++CrashpadClient::CrashpadClient() {}
++
++CrashpadClient::~CrashpadClient() {}
++
++bool CrashpadClient::StartHandler(
++ const base::FilePath& handler,
++ const base::FilePath& database,
++ const base::FilePath& metrics_dir,
++ const std::string& url,
++ const std::map<std::string, std::string>& annotations,
++ const std::vector<std::string>& arguments,
++ bool restartable,
++ bool asynchronous_start) {
++ NOTREACHED(); // TODO(scottmg): https://crashpad.chromium.org/bug/196
++ return false;
++}
++
++} // namespace crashpad
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
new file mode 100644
index 000000000000..94f41872c065
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/address_types.h.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/misc/address_types.h
+@@ -25,7 +25,7 @@
+ #include <mach/mach_types.h>
+ #elif defined(OS_WIN)
+ #include "util/win/address_types.h"
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "util/linux/address_types.h"
+ #elif defined(OS_FUCHSIA)
+ #include <zircon/types.h>
+@@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t;
+ using VMAddress = WinVMAddress;
+ using VMSize = WinVMSize;
+
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ using VMAddress = LinuxVMAddress;
+ using VMSize = LinuxVMSize;
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
new file mode 100644
index 000000000000..17829de781ae
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/capture_context.h.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -21,7 +21,7 @@
+ #include <mach/mach.h>
+ #elif defined(OS_WIN)
+ #include <windows.h>
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <ucontext.h>
+ #elif defined(OS_FUCHSIA)
+ #include <signal.h>
+@@ -35,7 +35,7 @@ using NativeCPUContext = x86_thread_state;
+ #endif
+ #elif defined(OS_WIN)
+ using NativeCPUContext = CONTEXT;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ using NativeCPUContext = ucontext_t;
+ #endif // OS_MACOSX
+
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
new file mode 100644
index 000000000000..909a11dbb516
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/metrics.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/misc/metrics.cc
+@@ -25,7 +25,7 @@
+ #define METRICS_OS_NAME "Win"
+ #elif defined(OS_ANDROID)
+ #define METRICS_OS_NAME "Android"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define METRICS_OS_NAME "Linux"
+ #elif defined(OS_FUCHSIA)
+ #define METRICS_OS_NAME "Fuchsia"
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
new file mode 100644
index 000000000000..a985d0968c53
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/uuid.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/misc/uuid.cc
+@@ -95,7 +95,7 @@ bool UUID::InitializeWithNew() {
+ InitializeFromBytes(uuid);
+ return true;
+ #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Linux, Android, and Fuchsia do not provide a UUID generator in a
+ // widely-available system library. On Linux and Android, uuid_generate()
+ // from libuuid is not available everywhere.
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
new file mode 100644
index 000000000000..ecc7a7be524d
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
@@ -0,0 +1,29 @@
+--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -31,7 +31,7 @@
+ #include "util/file/directory_reader.h"
+ #include "util/misc/implicit_cast.h"
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ #include <sys/sysctl.h>
+ #endif
+
+@@ -72,7 +72,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) {
+ // This is an advantage over looping over all possible file descriptors, because
+ // no attempt needs to be made to close file descriptors that are not open.
+ bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ static constexpr char kFDDir[] = "/dev/fd";
+ #elif defined(OS_LINUX) || defined(OS_ANDROID)
+ static constexpr char kFDDir[] = "/proc/self/fd";
+@@ -146,7 +146,7 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd)
+ // while the system is running, but it’s still a better upper bound than the
+ // current RLIMIT_NOFILE value.
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // See 10.11.6 xnu-3248.60.10/bsd/kern/kern_resource.c maxfilesperproc,
+ // referenced by dosetrlimit().
+ int oid[] = {CTL_KERN, KERN_MAXFILESPERPROC};
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
new file mode 100644
index 000000000000..6bcb086785b0
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/drop_privileges.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+@@ -23,7 +23,7 @@ void DropPrivileges() {
+ gid_t gid = getgid();
+ uid_t uid = getuid();
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Based on the POSIX.1-2008 2013 edition documentation for setreuid() and
+ // setregid(), setreuid() and setregid() alone should be sufficient to drop
+ // privileges. The standard specifies that the saved ID should be set to the
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
new file mode 100644
index 000000000000..1027720f413a
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
@@ -0,0 +1,40 @@
+--- third_party/crashpad/crashpad/util/posix/signals.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/posix/signals.cc
+@@ -45,10 +45,10 @@ constexpr int kCrashSignals[] = {
+ #if defined(SIGEMT)
+ SIGEMT,
+ #endif // defined(SIGEMT)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGXCPU,
+ SIGXFSZ,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // These are the non-core-generating but terminating signals.
+@@ -85,9 +85,9 @@ constexpr int kTerminateSignals[] = {
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_MACOSX)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGIO,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ bool InstallHandlers(const std::vector<int>& signals,
+@@ -216,8 +216,12 @@ bool Signals::WillSignalReraiseAutonomously(const sigi
+ // remains. See 10.12.3 xnu-3789.41.3/bsd/kern/kern_sig.c
+ // psignal_internal().
+ (code > 0 &&
++#if defined(SI_ASYNCIO)
+ code != SI_ASYNCIO &&
++#endif
++#if defined(SI_MESGQ)
+ code != SI_MESGQ &&
++#endif
+ code != SI_QUEUE &&
+ code != SI_TIMER &&
+ code != SI_USER &&
diff --git a/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
new file mode 100644
index 000000000000..ffe93ab63dd6
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc.orig 2019-12-12 12:41:25 UTC
++++ third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc
+@@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = {
+ "INFO",
+ "USR1",
+ "USR2",
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #if defined(ARCH_CPU_MIPS_FAMILY)
+ "HUP",
+ "INT",
+@@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = {
+ #endif // defined(ARCH_CPU_MIPS_FAMILY)
+ #endif
+ };
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // NSIG is 64 to account for real-time signals.
+ static_assert(base::size(kSignalNames) == 32, "kSignalNames length");
+ #else
diff --git a/devel/electron7/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h b/devel/electron7/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
new file mode 100644
index 000000000000..6b85f039df52
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
@@ -0,0 +1,53 @@
+--- third_party/crc32c/src/src/crc32c_arm64_linux_check.h.orig 2019-12-12 12:42:05 UTC
++++ third_party/crc32c/src/src/crc32c_arm64_linux_check.h
+@@ -7,8 +7,6 @@
+ #ifndef CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+ #define CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+
+-// X86-specific code checking for the availability of SSE4.2 instructions.
+-
+ #include <cstddef>
+ #include <cstdint>
+
+@@ -16,30 +14,19 @@
+
+ #if HAVE_ARM64_CRC32C
+
+-#if HAVE_STRONG_GETAUXVAL
+-#include <sys/auxv.h>
+-#elif HAVE_WEAK_GETAUXVAL
+-// getauxval() is not available on Android until API level 20. Link it as a weak
+-// symbol.
+-extern "C" unsigned long getauxval(unsigned long type) __attribute__((weak));
+-
+-#define AT_HWCAP 16
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-
++#include <machine/armreg.h>
++#include <sys/types.h>
+ namespace crc32c {
+
+-inline bool CanUseArm64Linux() {
+-#if HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+- // From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
+- constexpr unsigned long kHWCAP_PMULL = 1 << 4;
+- constexpr unsigned long kHWCAP_CRC32 = 1 << 7;
+- unsigned long hwcap = (&getauxval != nullptr) ? getauxval(AT_HWCAP) : 0;
+- return (hwcap & (kHWCAP_PMULL | kHWCAP_CRC32)) ==
+- (kHWCAP_PMULL | kHWCAP_CRC32);
+-#else
+- return false;
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-}
++ inline bool CanUseArm64Linux() {
++ uint64_t id_aa64isar0;
++
++ id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if ((ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) && \
++ (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE))
++ return true;
++ return false;
++ }
+
+ } // namespace crc32c
+
diff --git a/devel/electron7/files/patch-third__party_electron__node_deps_uv_BUILD.gn b/devel/electron7/files/patch-third__party_electron__node_deps_uv_BUILD.gn
new file mode 100644
index 000000000000..0583582d7282
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_electron__node_deps_uv_BUILD.gn
@@ -0,0 +1,45 @@
+--- third_party/electron_node/deps/uv/BUILD.gn.orig 2019-12-16 13:32:59 UTC
++++ third_party/electron_node/deps/uv/BUILD.gn
+@@ -3,7 +3,7 @@ config("libuv_config") {
+
+ defines = []
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_POSIX_C_SOURCE=200112" ]
+ }
+ if (!is_win) {
+@@ -147,7 +147,7 @@ static_library("uv") {
+ libs += [ "m" ]
+ ldflags += [ "-pthread" ]
+ }
+- if (is_mac || is_linux) {
++ if (is_mac || (is_linux && !is_bsd)) {
+ sources += [ "src/unix/proctitle.c" ]
+ }
+ if (is_mac) {
+@@ -161,7 +161,7 @@ static_library("uv") {
+ "_DARWIN_UNLIMITED_SELECT=1",
+ ]
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ defines += [ "_GNU_SOURCE" ]
+ sources += [
+ "src/unix/linux-core.c",
+@@ -180,6 +180,15 @@ static_library("uv") {
+ sources += [
+ "src/unix/bsd-ifaddrs.c",
+ "src/unix/kqueue.c",
++ ]
++ }
++ if (is_bsd) {
++ sources += [
++ "src/unix/bsd-ifaddrs.c",
++ "src/unix/bsd-proctitle.c",
++ "src/unix/freebsd.c",
++ "src/unix/kqueue.c",
++ "src/unix/posix-hrtime.c",
+ ]
+ }
+ }
diff --git a/devel/electron7/files/patch-third__party_ffmpeg_libavutil_mem.c b/devel/electron7/files/patch-third__party_ffmpeg_libavutil_mem.c
new file mode 100644
index 000000000000..400d671d2418
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_ffmpeg_libavutil_mem.c
@@ -0,0 +1,12 @@
+--- third_party/ffmpeg/libavutil/mem.c.orig 2019-12-12 12:45:07 UTC
++++ third_party/ffmpeg/libavutil/mem.c
+@@ -32,9 +32,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#if HAVE_MALLOC_H
+-#include <malloc.h>
+-#endif
+
+ #include "avassert.h"
+ #include "avutil.h"
diff --git a/devel/electron7/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h b/devel/electron7/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h
new file mode 100644
index 000000000000..724235baa372
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_glslang_src_glslang_Include_PoolAlloc.h
@@ -0,0 +1,10 @@
+--- third_party/glslang/src/glslang/Include/PoolAlloc.h.orig 2020-03-15 10:41:44 UTC
++++ third_party/glslang/src/glslang/Include/PoolAlloc.h
+@@ -304,7 +304,6 @@ class pool_allocator { (public)
+ size_type max_size() const { return static_cast<size_type>(-1) / sizeof(T); }
+ size_type max_size(int size) const { return static_cast<size_type>(-1) / size; }
+
+- void setAllocator(TPoolAllocator* a) { allocator = *a; }
+ TPoolAllocator& getAllocator() const { return allocator; }
+
+ protected:
diff --git a/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc b/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
new file mode 100644
index 000000000000..379f1def0585
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
@@ -0,0 +1,43 @@
+--- third_party/googletest/src/googletest/src/gtest-port.cc.orig 2019-12-12 12:42:45 UTC
++++ third_party/googletest/src/googletest/src/gtest-port.cc
+@@ -63,6 +63,11 @@
+ # endif
+ #endif
+
++#if GTEST_OS_FREEBSD
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ #if GTEST_OS_QNX
+ # include <devctl.h>
+ # include <fcntl.h>
+@@ -137,6 +142,28 @@ size_t GetThreadCount() {
+ } else {
+ return 0;
+ }
++}
++
++#elif GTEST_OS_FREEBSD
++
++#define KP_NLWP(kp) (kp.ki_numthreads)
++
++// Return the number of threads running in the process, or 0 to indicate that
++// we cannot detect it.
++size_t GetThreadCount() {
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ struct kinfo_proc(info);
++ size_t size = sizeof(info);
++ if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
++ return 0;
++ }
++ return KP_NLWP(info);
+ }
+
+ #elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
diff --git a/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest.cc b/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest.cc
new file mode 100644
index 000000000000..f14d48901ac2
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_googletest_src_googletest_src_gtest.cc
@@ -0,0 +1,10 @@
+--- third_party/googletest/src/googletest/src/gtest.cc.orig 2019-12-12 12:42:45 UTC
++++ third_party/googletest/src/googletest/src/gtest.cc
+@@ -114,6 +114,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ # include <sys/socket.h> // NOLINT
+ # include <sys/types.h> // NOLINT
diff --git a/devel/electron7/files/patch-third__party_leveldatabase_env__chromium.cc b/devel/electron7/files/patch-third__party_leveldatabase_env__chromium.cc
new file mode 100644
index 000000000000..707e9d329387
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_leveldatabase_env__chromium.cc
@@ -0,0 +1,14 @@
+--- third_party/leveldatabase/env_chromium.cc.orig 2019-12-12 12:41:26 UTC
++++ third_party/leveldatabase/env_chromium.cc
+@@ -40,7 +40,11 @@
+ #include "third_party/leveldatabase/leveldb_chrome.h"
+ #include "third_party/leveldatabase/leveldb_features.h"
+ #include "third_party/leveldatabase/src/include/leveldb/options.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ #if defined(OS_WIN)
+ #undef DeleteFile
diff --git a/devel/electron7/files/patch-third__party_libXNVCtrl_NVCtrl.c b/devel/electron7/files/patch-third__party_libXNVCtrl_NVCtrl.c
new file mode 100644
index 000000000000..fb69699d2d29
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_libXNVCtrl_NVCtrl.c
@@ -0,0 +1,25 @@
+--- third_party/libXNVCtrl/NVCtrl.c.orig 2019-12-12 12:41:26 UTC
++++ third_party/libXNVCtrl/NVCtrl.c
+@@ -27,10 +27,6 @@
+ * libXNVCtrl library properly protects the Display connection.
+ */
+
+-#if !defined(XTHREADS)
+-#define XTHREADS
+-#endif /* XTHREADS */
+-
+ #define NEED_EVENTS
+ #define NEED_REPLIES
+ #include <stdint.h>
+@@ -39,6 +35,11 @@
+ #include <X11/Xutil.h>
+ #include <X11/extensions/Xext.h>
+ #include <X11/extensions/extutil.h>
++
++#if !defined(XTHREADS)
++#define XTHREADS
++#endif /* XTHREADS */
++
+ #include "NVCtrlLib.h"
+ #include "nv_control.h"
+
diff --git a/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
new file mode 100644
index 000000000000..6a68a2f7812f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h.orig 2019-12-12 12:44:12 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h
+@@ -56,7 +56,7 @@ template <class T> boost::once_flag Singleton<T>::flag
+ #include "phonenumbers/base/logging.h"
+ #include "phonenumbers/base/thread_checker.h"
+
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
new file mode 100644
index 000000000000..52f23551f4ca
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h.orig 2019-12-12 12:44:12 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h
+@@ -63,7 +63,7 @@ class Lock { (private)
+ // Dummy lock implementation on non-POSIX platforms. If you are running on a
+ // different platform and care about thread-safety, please compile with
+ // -DI18N_PHONENUMBERS_USE_BOOST.
+-#elif !defined(__linux__) && !defined(__APPLE__)
++#elif !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
new file mode 100644
index 000000000000..840ee8df9c19
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
@@ -0,0 +1,19 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h.orig 2019-12-12 12:44:12 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h
+@@ -23,6 +23,7 @@
+ // user of the library know that it can't be used in a thread-safe manner when
+ // it is not depending on Boost.
+ #if !defined(__linux__) && !defined(__APPLE__) && \
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
+ !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
+ #error Building without Boost, please provide \
+ -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
+@@ -31,7 +32,7 @@
+ #endif
+
+ #if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
+- (defined(__linux__) || defined(__apple__))
++ (defined(__linux__) || defined(__apple__)) || defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ #include <pthread.h>
+
diff --git a/devel/electron7/files/patch-third__party_libyuv_include_libyuv_row.h b/devel/electron7/files/patch-third__party_libyuv_include_libyuv_row.h
new file mode 100644
index 000000000000..2502ea5a3286
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_libyuv_include_libyuv_row.h
@@ -0,0 +1,37 @@
+--- third_party/libyuv/include/libyuv/row.h.orig 2019-12-12 12:44:25 UTC
++++ third_party/libyuv/include/libyuv/row.h
+@@ -157,10 +157,14 @@ extern "C" {
+ #define HAS_ARGBSHADEROW_SSE2
+ #define HAS_ARGBSUBTRACTROW_SSE2
+ #define HAS_ARGBUNATTENUATEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_SSSE3
++#endif
+ #define HAS_COMPUTECUMULATIVESUMROW_SSE2
+ #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_SSSE3
++#endif
+ #define HAS_RGBCOLORTABLEROW_X86
+ #define HAS_SOBELROW_SSE2
+ #define HAS_SOBELTOPLANEROW_SSE2
+@@ -206,7 +210,9 @@ extern "C" {
+ #define HAS_I422TORGB565ROW_AVX2
+ #define HAS_I422TORGBAROW_AVX2
+ #define HAS_I444TOARGBROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_AVX2
++#endif
+ #define HAS_J422TOARGBROW_AVX2
+ #define HAS_MERGEUVROW_AVX2
+ #define HAS_MIRRORROW_AVX2
+@@ -231,7 +237,9 @@ extern "C" {
+ #define HAS_ARGBMULTIPLYROW_AVX2
+ #define HAS_ARGBSUBTRACTROW_AVX2
+ #define HAS_ARGBUNATTENUATEROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_AVX2
++#endif
+
+ #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
+ defined(_MSC_VER)
diff --git a/devel/electron7/files/patch-third__party_nasm_config_config-linux.h b/devel/electron7/files/patch-third__party_nasm_config_config-linux.h
new file mode 100644
index 000000000000..b9e5a73aaeac
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_nasm_config_config-linux.h
@@ -0,0 +1,29 @@
+--- third_party/nasm/config/config-linux.h.orig 2019-12-12 12:44:42 UTC
++++ third_party/nasm/config/config-linux.h
+@@ -117,7 +117,7 @@
+ #define HAVE_ACCESS 1
+
+ /* Define to 1 if you have the `canonicalize_file_name' function. */
+-#define HAVE_CANONICALIZE_FILE_NAME 1
++/* #undef HAVE_CANONICALIZE_FILE_NAME */
+
+ /* Define to 1 if you have the `cpu_to_le16' intrinsic function. */
+ /* #undef HAVE_CPU_TO_LE16 */
+@@ -161,7 +161,7 @@
+ #define HAVE_DECL_STRSEP 1
+
+ /* Define to 1 if you have the <endian.h> header file. */
+-#define HAVE_ENDIAN_H 1
++/* #undef HAVE_ENDIAN_H */
+
+ /* Define to 1 if you have the `faccessat' function. */
+ #define HAVE_FACCESSAT 1
+@@ -322,7 +322,7 @@
+ #define HAVE_SYSCONF 1
+
+ /* Define to 1 if you have the <sys/endian.h> header file. */
+-/* #undef HAVE_SYS_ENDIAN_H */
++#define HAVE_SYS_ENDIAN_H 1
+
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #define HAVE_SYS_MMAN_H 1
diff --git a/devel/electron7/files/patch-third__party_node_node.py b/devel/electron7/files/patch-third__party_node_node.py
new file mode 100644
index 000000000000..b7fb2d36184f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_node_node.py
@@ -0,0 +1,10 @@
+--- third_party/node/node.py.orig 2019-12-12 12:41:28 UTC
++++ third_party/node/node.py
+@@ -12,6 +12,7 @@ import sys
+ def GetBinaryPath():
+ return os_path.join(os_path.dirname(__file__), *{
+ 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ 'FreeBSD': ('freebsd', 'node-freebsd-x64', 'bin', 'node'),
+ 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+ 'Windows': ('win', 'node.exe'),
+ }[platform.system()])
diff --git a/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp b/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
new file mode 100644
index 000000000000..f3357fca38f9
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/cfx_datetime.cpp.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/core/fxcrt/cfx_datetime.cpp
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+ #include "core/fxcrt/fx_system.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_ASMJS) || defined(__wasm__)
+ #include <sys/time.h>
+ #include <time.h>
diff --git a/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_fx__system.h b/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
new file mode 100644
index 000000000000..dc30a0a00982
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/fx_system.h.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/core/fxcrt/fx_system.h
+@@ -26,7 +26,7 @@
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+ #elif defined(_WIN64)
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_LINUX_
+ #elif defined(__APPLE__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_APPLE_
diff --git a/devel/electron7/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp b/devel/electron7/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
new file mode 100644
index 000000000000..7bb94cc7e9ea
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/core/fxge/fx_ge_linux.cpp.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/core/fxge/fx_ge_linux.cpp
+@@ -151,9 +151,8 @@ std::unique_ptr<SystemFontInfoIface> SystemFontInfoIfa
+ const char** pUserPaths) {
+ auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
+ if (!pInfo->ParseFontCfg(pUserPaths)) {
+- pInfo->AddPath("/usr/share/fonts");
+- pInfo->AddPath("/usr/share/X11/fonts/Type1");
+- pInfo->AddPath("/usr/share/X11/fonts/TTF");
++ pInfo->AddPath("/usr/local/share/fonts/Type1");
++ pInfo->AddPath("/usr/local/share/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return std::move(pInfo);
diff --git a/devel/electron7/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp b/devel/electron7/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
new file mode 100644
index 000000000000..75912d3d058b
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
@@ -0,0 +1,106 @@
+--- third_party/pdfium/fxjs/cjs_publicmethods.cpp.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/fxjs/cjs_publicmethods.cpp
+@@ -86,6 +86,103 @@ constexpr const wchar_t* kDateFormats[] = {L"m/d",
+ constexpr const wchar_t* kTimeFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
++#if defined(__FreeBSD__)
++/*
++ * cvt.c - IEEE floating point formatting routines for FreeBSD
++ * from GNU libc-4.6.27
++ */
++
++/*
++ * ap_ecvt converts to decimal
++ * the number of digits is specified by ndigit
++ * decpt is set to the position of the decimal point
++ * sign is set to 0 for positive, 1 for negative
++ */
++
++#define NDIG 80
++
++static char *
++ ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
++{
++ register int r2;
++ double fi, fj;
++ register char *p, *p1;
++ static char buf[NDIG];
++
++ if (ndigits >= NDIG - 1)
++ ndigits = NDIG - 2;
++ r2 = 0;
++ *sign = 0;
++ p = &buf[0];
++ if (arg < 0) {
++ *sign = 1;
++ arg = -arg;
++ }
++ arg = modf(arg, &fi);
++ p1 = &buf[NDIG];
++ /*
++ * Do integer part
++ */
++ if (fi != 0) {
++ p1 = &buf[NDIG];
++ while (fi != 0) {
++ fj = modf(fi / 10, &fi);
++ *--p1 = (int) ((fj + .03) * 10) + '0';
++ r2++;
++ }
++ while (p1 < &buf[NDIG])
++ *p++ = *p1++;
++ }
++ else if (arg > 0) {
++ while ((fj = arg * 10) < 1) {
++ arg = fj;
++ r2--;
++ }
++ }
++ p1 = &buf[ndigits];
++ if (eflag == 0)
++ p1 += r2;
++ *decpt = r2;
++ if (p1 < &buf[0]) {
++ buf[0] = '\0';
++ return (buf);
++ }
++ while (p <= p1 && p < &buf[NDIG]) {
++ arg *= 10;
++ arg = modf(arg, &fj);
++ *p++ = (int) fj + '0';
++ }
++ if (p1 >= &buf[NDIG]) {
++ buf[NDIG - 1] = '\0';
++ return (buf);
++ }
++ p = p1;
++ *p1 += 5;
++ while (*p1 > '9') {
++ *p1 = '0';
++ if (p1 > buf)
++ ++ * --p1;
++ else {
++ *p1 = '1';
++ (*decpt)++;
++ if (eflag == 0) {
++ if (p > buf)
++ *p = '0';
++ p++;
++ }
++ }
++ }
++ *p = '\0';
++ return (buf);
++}
++
++static char *
++ fcvt(double arg, int ndigits, int *decpt, int *sign)
++{
++ return (ap_cvt(arg, ndigits, decpt, sign, 0));
++}
++#endif // defined(__FreeBSD__)
++
+ template <typename T>
+ T StrTrim(const T& str) {
+ T result = str;
diff --git a/devel/electron7/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp b/devel/electron7/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
new file mode 100644
index 000000000000..54ae18d64e91
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
@@ -0,0 +1,22 @@
+--- third_party/pdfium/fxjs/fx_date_helpers.cpp.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/fxjs/fx_date_helpers.cpp
+@@ -35,6 +35,11 @@ double GetLocalTZA() {
+ return 0;
+ time_t t = 0;
+ FXSYS_time(&t);
++#ifdef __FreeBSD__
++ struct tm lt;
++ localtime_r(&t, &lt);
++ return (double)(-(lt.tm_gmtoff * 1000));
++#else
+ FXSYS_localtime(&t);
+ #if defined(OS_WIN)
+ // In gcc 'timezone' is a global variable declared in time.h. In VC++, that
+@@ -43,6 +48,7 @@ double GetLocalTZA() {
+ _get_timezone(&timezone);
+ #endif
+ return (double)(-(timezone * 1000));
++#endif // __FreeBSD__
+ }
+
+ int GetDaylightSavingTA(double d) {
diff --git a/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc b/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc
new file mode 100644
index 000000000000..9e491eab217f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator.cc
@@ -0,0 +1,11 @@
+--- third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.cc.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator.cc
+@@ -117,7 +117,7 @@ void* AllocPages(void* address,
+ uintptr_t align_base_mask = ~align_offset_mask;
+ DCHECK(!(reinterpret_cast<uintptr_t>(address) & align_offset_mask));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+ // On 64 bit Linux, we may need to adjust the address space limit for
+ // guarded allocations.
+ if (length >= kMinimumGuardedMemorySize) {
diff --git a/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h b/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..d371ff909c84
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_third__party_base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,38 @@
+--- third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -13,7 +13,7 @@
+ #if defined(OS_MACOSX)
+ #include <mach/mach.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+
+ #include <algorithm>
+@@ -48,7 +48,7 @@ int GetAccessFlags(PageAccessibilityConfiguration acce
+ }
+ }
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+
+ // Multiple guarded memory regions may exceed the process address space limit.
+ // This function will raise or lower the limit by |amount|.
+@@ -68,7 +68,7 @@ bool AdjustAddressSpaceLimit(int64_t amount) {
+ // schemes that reduce that to 4 GiB.
+ constexpr size_t kMinimumGuardedMemorySize = 1ULL << 32; // 4 GiB
+
+-#endif // defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#endif // (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+
+ void* SystemAllocPagesInternal(void* hint,
+ size_t length,
+@@ -134,7 +134,7 @@ void SetSystemPagesAccessInternal(
+ void FreePagesInternal(void* address, size_t length) {
+ CHECK(!munmap(address, length));
+
+-#if defined(OS_LINUX) && defined(ARCH_CPU_64_BITS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_64_BITS)
+ // Restore the address space limit.
+ if (length >= kMinimumGuardedMemorySize) {
+ CHECK(AdjustAddressSpaceLimit(-base::checked_cast<int64_t>(length)));
diff --git a/devel/electron7/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp b/devel/electron7/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
new file mode 100644
index 000000000000..5004fde0f523
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp.orig 2019-12-12 12:45:42 UTC
++++ third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp
+@@ -16,9 +16,8 @@ constexpr char kFolderSeparator = '/';
+
+ constexpr const char* kFontFolders[] = {
+ #if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
+- "/usr/share/fonts",
+- "/usr/share/X11/fonts/Type1",
+- "/usr/share/X11/fonts/TTF",
++ "/usr/local/share/fonts/Type1",
++ "/usr/local/share/fonts/TTF",
+ "/usr/local/share/fonts",
+ #elif defined(OS_MACOSX)
+ "~/Library/Fonts",
diff --git a/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_build__config.h b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
new file mode 100644
index 000000000000..15a9eaa6557c
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
@@ -0,0 +1,51 @@
+--- third_party/perfetto/include/perfetto/base/build_config.h.orig 2019-12-12 12:45:20 UTC
++++ third_party/perfetto/include/perfetto/base/build_config.h
+@@ -40,6 +40,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -47,13 +48,15 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -61,6 +64,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -68,6 +72,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -75,6 +80,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 1
diff --git a/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_time.h b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_time.h
new file mode 100644
index 000000000000..af36634fb8b4
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_base_time.h
@@ -0,0 +1,20 @@
+--- third_party/perfetto/include/perfetto/base/time.h.orig 2019-12-12 12:45:20 UTC
++++ third_party/perfetto/include/perfetto/base/time.h
+@@ -123,6 +123,9 @@ inline TimeNanos GetTimeInternalNs(clockid_t clk_id) {
+ // Return ns from boot. Conversely to GetWallTimeNs, this clock counts also time
+ // during suspend (when supported).
+ inline TimeNanos GetBootTimeNs() {
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ return GetTimeInternalNs(kWallTimeClockSource);
++#else
+ // Determine if CLOCK_BOOTTIME is available on the first call.
+ static const clockid_t kBootTimeClockSource = [] {
+ struct timespec ts = {};
+@@ -130,6 +133,7 @@ inline TimeNanos GetBootTimeNs() {
+ return res == 0 ? CLOCK_BOOTTIME : kWallTimeClockSource;
+ }();
+ return GetTimeInternalNs(kBootTimeClockSource);
++#endif
+ }
+
+ inline TimeNanos GetWallTimeNs() {
diff --git a/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h
new file mode 100644
index 000000000000..a906912e1840
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h
@@ -0,0 +1,13 @@
+--- third_party/perfetto/include/perfetto/ext/base/event_fd.h.orig 2019-12-12 12:45:20 UTC
++++ third_party/perfetto/include/perfetto/ext/base/event_fd.h
+@@ -20,8 +20,8 @@
+ #include "perfetto/base/build_config.h"
+ #include "perfetto/ext/base/scoped_file.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++#if !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD) && (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID))
+ #define PERFETTO_USE_EVENTFD() 1
+ #else
+ #define PERFETTO_USE_EVENTFD() 0
diff --git a/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_thread__utils.h b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_thread__utils.h
new file mode 100644
index 000000000000..dc0275e84a42
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_include_perfetto_ext_base_thread__utils.h
@@ -0,0 +1,24 @@
+--- third_party/perfetto/include/perfetto/ext/base/thread_utils.h.orig 2019-12-12 12:45:20 UTC
++++ third_party/perfetto/include/perfetto/ext/base/thread_utils.h
+@@ -33,6 +33,9 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+ #endif
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++#include <pthread_np.h>
++#endif
+
+ namespace perfetto {
+ namespace base {
+@@ -41,6 +44,11 @@ namespace base {
+ using PlatformThreadID = pid_t;
+ inline PlatformThreadID GetThreadId() {
+ return gettid();
++}
++#elif PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++using PlatformThreadID = int;
++inline PlatformThreadID GetThreadId() {
++ return pthread_getthreadid_np();
+ }
+ #elif PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX)
+ using PlatformThreadID = pid_t;
diff --git a/devel/electron7/files/patch-third__party_perfetto_src_base_unix__socket.cc b/devel/electron7/files/patch-third__party_perfetto_src_base_unix__socket.cc
new file mode 100644
index 000000000000..e26169ba9912
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_src_base_unix__socket.cc
@@ -0,0 +1,12 @@
+--- third_party/perfetto/src/base/unix_socket.cc.orig 2019-12-12 12:45:21 UTC
++++ third_party/perfetto/src/base/unix_socket.cc
+@@ -523,7 +523,8 @@ void UnixSocket::DoConnect(const std::string& socket_n
+
+ void UnixSocket::ReadPeerCredentials() {
+ #if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct ucred user_cred;
+ socklen_t len = sizeof(user_cred);
+ int fd = sock_raw_.fd();
diff --git a/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc b/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
new file mode 100644
index 000000000000..c3348c188572
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
@@ -0,0 +1,12 @@
+--- third_party/perfetto/src/tracing/core/tracing_service_impl.cc.orig 2019-12-12 12:45:21 UTC
++++ third_party/perfetto/src/tracing/core/tracing_service_impl.cc
+@@ -2180,7 +2180,8 @@ void TracingServiceImpl::SnapshotClocks(std::vector<Tr
+ protos::ClockSnapshot* clock_snapshot = packet.mutable_clock_snapshot();
+
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
+- !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN)
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ struct {
+ clockid_t id;
+ protos::ClockSnapshot::Clock::BuiltinClocks type;
diff --git a/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc b/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
new file mode 100644
index 000000000000..1285cc6324b9
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
@@ -0,0 +1,28 @@
+Backport of:
+
+From 46f0abc66c1d78c60a0415c5cb46852ef3bfa9bb Mon Sep 17 00:00:00 2001
+From: Nico Weber <thakis@chromium.org>
+Date: Sat, 8 Feb 2020 21:26:53 -0500
+Subject: [PATCH] Fix compile error emitted by trunk clang
+
+../../third_party/perfetto/src/tracing/core/virtual_destructors.cc:33:35:
+error: destructor cannot be declared using a type alias
+ 'perfetto::TracingService::ConsumerEndpoint' (aka
+ 'perfetto::ConsumerEndpoint') of the class name
+TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+
+Bug: chromium:1050372
+
+--- third_party/perfetto/src/tracing/core/virtual_destructors.cc.orig 2020-08-24 19:11:33 UTC
++++ third_party/perfetto/src/tracing/core/virtual_destructors.cc
+@@ -30,8 +30,8 @@ namespace perfetto {
+ Consumer::~Consumer() = default;
+ Producer::~Producer() = default;
+ TracingService::~TracingService() = default;
+-TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+-TracingService::ProducerEndpoint::~ProducerEndpoint() = default;
++ConsumerEndpoint::~ConsumerEndpoint() = default;
++ProducerEndpoint::~ProducerEndpoint() = default;
+ SharedMemory::~SharedMemory() = default;
+ SharedMemory::Factory::~Factory() = default;
+ SharedMemoryArbiter::~SharedMemoryArbiter() = default;
diff --git a/devel/electron7/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h b/devel/electron7/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
new file mode 100644
index 000000000000..713a26758b77
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
@@ -0,0 +1,11 @@
+--- third_party/protobuf/src/google/protobuf/stubs/platform_macros.h.orig 2019-12-12 12:41:29 UTC
++++ third_party/protobuf/src/google/protobuf/stubs/platform_macros.h
+@@ -118,7 +118,7 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+ #undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+-#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__)
++#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__FreeBSD__)
+ // Android ndk does not support the __thread keyword very well yet. Here
+ // we use pthread_key_create()/pthread_getspecific()/... methods for
+ // TLS support on android.
diff --git a/devel/electron7/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc b/devel/electron7/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
new file mode 100644
index 000000000000..76a4c02e74bf
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_sfntly_src_cpp_src_sfntly_table_core_cmap__table.cc
@@ -0,0 +1,47 @@
+--- third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc.orig 2019-12-12 12:45:26 UTC
++++ third_party/sfntly/src/cpp/src/sfntly/table/core/cmap_table.cc
+@@ -439,7 +439,7 @@ CMapTable::CMapFormat0::Builder::Builder(
+ }
+
+ CMapTable::CMapFormat0::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat0,
+ cmap_id) {
+ }
+@@ -563,7 +563,7 @@ CMapTable::CMapFormat2::Builder::Builder(WritableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<WritableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<WritableFontData*>(NULL),
++ : static_cast<WritableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -574,7 +574,7 @@ CMapTable::CMapFormat2::Builder::Builder(ReadableFontD
+ : CMapTable::CMap::Builder(data ? down_cast<ReadableFontData*>(
+ data->Slice(offset, data->ReadUShort(
+ offset + Offset::kFormat0Length)))
+- : reinterpret_cast<ReadableFontData*>(NULL),
++ : static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat2, cmap_id) {
+ // TODO(arthurhsu): FIXIT: heavy lifting and leak, need fix.
+ }
+@@ -958,7 +958,7 @@ CMapTable::CMapFormat4::Builder::Builder(WritableFontD
+ CMapTable::CMapFormat4::Builder::Builder(SegmentList* segments,
+ std::vector<int32_t>* glyph_id_array,
+ const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id),
+ segments_(segments->begin(), segments->end()),
+ glyph_id_array_(glyph_id_array->begin(), glyph_id_array->end()) {
+@@ -966,7 +966,7 @@ CMapTable::CMapFormat4::Builder::Builder(SegmentList*
+ }
+
+ CMapTable::CMapFormat4::Builder::Builder(const CMapId& cmap_id)
+- : CMap::Builder(reinterpret_cast<ReadableFontData*>(NULL),
++ : CMap::Builder(static_cast<ReadableFontData*>(NULL),
+ CMapFormat::kFormat4, cmap_id) {
+ }
+
diff --git a/devel/electron7/files/patch-third__party_skia_src_core_SkCpu.cpp b/devel/electron7/files/patch-third__party_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..7deff4b09aea
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_src_core_SkCpu.cpp
@@ -0,0 +1,19 @@
+--- third_party/skia/src/core/SkCpu.cpp.orig 2019-12-12 12:48:52 UTC
++++ third_party/skia/src/core/SkCpu.cpp
+@@ -76,6 +76,8 @@
+ #include <sys/auxv.h>
+
+ static uint32_t read_cpu_features() {
++return 0;
++#if 0
+ const uint32_t kHWCAP_CRC32 = (1<< 7),
+ kHWCAP_ASIMDHP = (1<<10);
+
+@@ -112,6 +114,7 @@
+ }
+ }
+ return features;
++#endif
+ }
+
+ #elif defined(SK_CPU_ARM32) && __has_include(<sys/auxv.h>) && \
diff --git a/devel/electron7/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h b/devel/electron7/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
new file mode 100644
index 000000000000..835970f35f75
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/gpu/GrAutoLocaleSetter.h.orig 2019-12-12 12:48:52 UTC
++++ third_party/skia/src/gpu/GrAutoLocaleSetter.h
+@@ -27,7 +27,7 @@
+ #define HAVE_XLOCALE 0
+ #endif
+
+-#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION)
++#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION) || defined(__FreeBSD__)
+ #define HAVE_LOCALE_T 0
+ #else
+ #define HAVE_LOCALE_T 1
diff --git a/devel/electron7/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp b/devel/electron7/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
new file mode 100644
index 000000000000..44f222c2152a
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
@@ -0,0 +1,41 @@
+--- third_party/skia/src/images/SkJpegEncoder.cpp.orig 2019-12-12 12:48:52 UTC
++++ third_party/skia/src/images/SkJpegEncoder.cpp
+@@ -76,9 +76,14 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ return (transform_scanline_proc) nullptr;
+ };
+
++#ifdef JCS_EXTENSIONS
+ J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
++#else
++ J_COLOR_SPACE jpegColorType = JCS_RGB;
++#endif
+ int numComponents = 0;
+ switch (srcInfo.colorType()) {
++#ifdef JCS_EXTENSIONS
+ case kRGBA_8888_SkColorType:
+ fProc = chooseProc8888();
+ jpegColorType = JCS_EXT_RGBA;
+@@ -89,6 +94,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_BGRA;
+ numComponents = 4;
+ break;
++#endif
+ case kRGB_565_SkColorType:
+ fProc = transform_scanline_565;
+ jpegColorType = JCS_RGB;
+@@ -108,6 +114,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_GRAYSCALE;
+ numComponents = 1;
+ break;
++#ifdef JCS_EXTENSIONS
+ case kRGBA_F16_SkColorType:
+ if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
+ options.fAlphaOption == SkJpegEncoder::AlphaOption::kBlendOnBlack) {
+@@ -118,6 +125,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_RGBA;
+ numComponents = 4;
+ break;
++#endif
+ default:
+ return false;
+ }
diff --git a/devel/electron7/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp b/devel/electron7/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
new file mode 100644
index 000000000000..12794c4f46f9
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
@@ -0,0 +1,11 @@
+--- third_party/skia/src/ports/SkOSFile_stdio.cpp.orig 2019-12-12 12:48:52 UTC
++++ third_party/skia/src/ports/SkOSFile_stdio.cpp
+@@ -129,7 +129,7 @@ void sk_fflush(FILE* f) {
+
+ void sk_fsync(FILE* f) {
+ #if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \
+- && !defined(_NEWLIB_VERSION)
++ && !defined(_NEWLIB_VERSION) && !defined(__FreeBSD__)
+ int fd = fileno(f);
+ fsync(fd);
+ #endif
diff --git a/devel/electron7/files/patch-third__party_skia_src_sksl_SkSLString.h b/devel/electron7/files/patch-third__party_skia_src_sksl_SkSLString.h
new file mode 100644
index 000000000000..5e4ceaa8026d
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_src_sksl_SkSLString.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/sksl/SkSLString.h.orig 2019-12-12 12:48:52 UTC
++++ third_party/skia/src/sksl/SkSLString.h
+@@ -13,6 +13,8 @@
+ #include <stdarg.h>
+ #include <string>
+
++#include <stdarg.h>
++
+ namespace SkSL {
+
+ // Represents a (not necessarily null-terminated) slice of a string.
diff --git a/devel/electron7/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h b/devel/electron7/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
new file mode 100644
index 000000000000..c9dfc1b13d77
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
@@ -0,0 +1,11 @@
+--- third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h.orig 2019-12-16 13:32:58 UTC
++++ third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+@@ -2232,7 +2232,7 @@ remove them if not needed.
+ #include <mutex> // for std::mutex
+ #include <atomic> // for std::atomic
+
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h> // for aligned_alloc()
+ #endif
+
diff --git a/devel/electron7/files/patch-third__party_snappy_src_snappy.h b/devel/electron7/files/patch-third__party_snappy_src_snappy.h
new file mode 100644
index 000000000000..d3617b9b3f0a
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_snappy_src_snappy.h
@@ -0,0 +1,20 @@
+--- third_party/snappy/src/snappy.h.orig 2019-12-12 12:45:20 UTC
++++ third_party/snappy/src/snappy.h
+@@ -73,7 +73,7 @@ namespace snappy {
+ // Original contents of *output are lost.
+ //
+ // REQUIRES: "input[]" is not an alias of "*output".
+- size_t Compress(const char* input, size_t input_length, string* output);
++ size_t Compress(const char* input, size_t input_length, std::string* output);
+
+ // Decompresses "compressed[0,compressed_length-1]" to "*uncompressed".
+ // Original contents of "*uncompressed" are lost.
+@@ -82,7 +82,7 @@ namespace snappy {
+ //
+ // returns false if the message is corrupted and could not be decompressed
+ bool Uncompress(const char* compressed, size_t compressed_length,
+- string* uncompressed);
++ std::string* uncompressed);
+
+ // Decompresses "compressed" to "*uncompressed".
+ //
diff --git a/devel/electron7/files/patch-third__party_sqlite_BUILD.gn b/devel/electron7/files/patch-third__party_sqlite_BUILD.gn
new file mode 100644
index 000000000000..7dbef3ccd4e7
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_sqlite_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/sqlite/BUILD.gn.orig 2019-12-12 12:41:29 UTC
++++ third_party/sqlite/BUILD.gn
+@@ -262,7 +262,7 @@ config("sqlite_warnings") {
+ ]
+ }
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ cflags += [
+ # SQLite doesn't believe in compiler warnings, preferring testing.
+ # http://www.sqlite.org/faq.html#q17
diff --git a/devel/electron7/files/patch-third__party_swiftshader_BUILD.gn b/devel/electron7/files/patch-third__party_swiftshader_BUILD.gn
new file mode 100644
index 000000000000..60af70848dfe
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_BUILD.gn
@@ -0,0 +1,24 @@
+--- third_party/swiftshader/BUILD.gn.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/BUILD.gn
+@@ -135,9 +135,6 @@ config("swiftshader_config") {
+ ldflags = [ "-Wl,--gc-sections" ]
+
+ if (target_cpu == "mipsel") {
+- ldflags += [
+- "-Wl,--hash-style=sysv",
+- ]
+ if (mips_arch_variant == "r1") {
+ ldflags += [
+ "-mips32",
+@@ -149,11 +146,8 @@ config("swiftshader_config") {
+ }
+ } else if (target_cpu == "mips64el") {
+ ldflags += [
+- "-Wl,--hash-style=sysv",
+ "-mips64r2",
+ ]
+- } else {
+- ldflags += [ "-Wl,--hash-style=both" ]
+ }
+
+ # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_Common_Configurator.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
new file mode 100644
index 000000000000..b1d5c20f2cf3
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
@@ -0,0 +1,12 @@
+--- third_party/swiftshader/src/Common/Configurator.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/Common/Configurator.cpp
+@@ -42,6 +42,9 @@ namespace sw
+
+ bool Configurator::readFile()
+ {
++#if defined(__FreeBSD__)
++ return false;
++#endif
+ #if defined(__unix__)
+ if(access(path.c_str(), R_OK) != 0)
+ {
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp b/devel/electron7/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
new file mode 100644
index 000000000000..ed4ad6e1d51b
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/MutexLock.hpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/Common/MutexLock.hpp
+@@ -17,7 +17,7 @@
+
+ #include "Thread.hpp"
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ // Use a pthread mutex on Linux. Since many processes may use SwiftShader
+ // at the same time it's best to just have the scheduler overhead.
+ #include <pthread.h>
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp b/devel/electron7/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
new file mode 100644
index 000000000000..48df18d82191
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/SharedLibrary.hpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/Common/SharedLibrary.hpp
+@@ -97,7 +97,7 @@ void *loadLibrary(const std::string &libraryDirectory,
+
+ inline void *getLibraryHandle(const char *path)
+ {
+- #ifdef __ANDROID__
++ #if defined( __ANDROID__) || defined(__FreeBSD__)
+ // bionic doesn't support RTLD_NOLOAD before L
+ return dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
new file mode 100644
index 000000000000..13de23727460
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
@@ -0,0 +1,14 @@
+--- third_party/swiftshader/src/Main/SwiftConfig.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/Main/SwiftConfig.cpp
+@@ -764,7 +764,11 @@ namespace sw
+ struct stat status;
+ int lastModified = ini.getInteger("LastModified", "Time", 0);
+
++#if !defined(__FreeBSD__)
+ bool noConfig = stat("SwiftShader.ini", &status) != 0;
++#else
++ bool noConfig = false;
++#endif
+ newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;
+
+ if(disableServerOverride)
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
new file mode 100644
index 000000000000..7e6d401f3967
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Display.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Display.cpp
+@@ -690,7 +690,7 @@ bool Display::isValidWindow(EGLNativeWindowType window
+ return status != 0;
+ }
+ return false;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ return false; // Non X11 linux is headless only
+ #elif defined(__APPLE__)
+ return sw::OSX::IsValidWindow(window);
+@@ -868,7 +868,7 @@ sw::Format Display::getDisplayFormat() const
+ {
+ return sw::FORMAT_X8R8G8B8;
+ }
+- #elif defined(__linux__) // Non X11 linux is headless only
++ #elif defined(__linux__) || defined(__FreeBSD__) // Non X11 linux is headless only
+ return sw::FORMAT_A8B8G8R8;
+ #elif defined(__APPLE__)
+ return sw::FORMAT_A8B8G8R8;
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
new file mode 100644
index 000000000000..9925224ebfea
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp
+@@ -362,7 +362,7 @@ bool WindowSurface::checkForResize()
+
+ int windowWidth = windowAttributes.width;
+ int windowHeight = windowAttributes.height;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ // Non X11 linux is headless only
+ int windowWidth = 100;
+ int windowHeight = 100;
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
new file mode 100644
index 000000000000..38b9267803ef
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp
+@@ -148,7 +148,7 @@ EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
+ // FIXME: Check if display_id is the default display
+ }
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD)) && !defined(__ANDROID__)
+ #if defined(USE_X11)
+ if(!libX11)
+ #endif // Non X11 linux is headless only
+@@ -207,7 +207,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name)
+ {
+ return success(
+ "EGL_KHR_client_get_all_proc_addresses "
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ "EGL_KHR_platform_gbm "
+ #endif
+ #if defined(USE_X11)
+@@ -1243,7 +1243,7 @@ EGLDisplay GetPlatformDisplay(EGLenum platform, void *
+ {
+ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ switch(platform)
+ {
+ #if defined(USE_X11)
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
new file mode 100644
index 000000000000..36cac2d25c6e
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp
+@@ -100,7 +100,7 @@ class LibEGL (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
+ #else
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
new file mode 100644
index 000000000000..27d4c8b722b5
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+@@ -261,7 +261,7 @@ class LibGLES_CM (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
+ #else
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
new file mode 100644
index 000000000000..bba11ce1d173
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp
+@@ -286,7 +286,7 @@ class LibGLESv2 (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+ #else
diff --git a/devel/electron7/files/patch-third__party_swiftshader_src_Yarn_Thread.cpp b/devel/electron7/files/patch-third__party_swiftshader_src_Yarn_Thread.cpp
new file mode 100644
index 000000000000..7d3a7c11ea59
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_src_Yarn_Thread.cpp
@@ -0,0 +1,22 @@
+--- third_party/swiftshader/src/Yarn/Thread.cpp.orig 2019-12-12 12:49:31 UTC
++++ third_party/swiftshader/src/Yarn/Thread.cpp
+@@ -27,6 +27,10 @@
+ # include <pthread.h>
+ # include <mach/thread_act.h>
+ # include <unistd.h>
++#elif defined(__FreeBSD__)
++# include <pthread.h>
++# include <pthread_np.h>
++# include <unistd.h>
+ #else
+ # include <pthread.h>
+ # include <unistd.h>
+@@ -88,6 +92,8 @@ void Thread::setName(const char* fmt, ...)
+
+ #if defined(__APPLE__)
+ pthread_setname_np(name);
++#elif defined(__FreeBSD__)
++ pthread_set_name_np(pthread_self(), name);
+ #elif !defined(__Fuchsia__)
+ pthread_setname_np(pthread_self(), name);
+ #endif
diff --git a/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..c5454f4862aa
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
@@ -0,0 +1,152 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h.orig 2019-12-12 12:49:33 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h
+@@ -8,15 +8,15 @@
+ #define BUG_REPORT_URL "https://bugs.llvm.org/"
+
+ /* Define to 1 to enable backtraces, and to 0 otherwise. */
+-/* #undef ENABLE_BACKTRACES */
++#define ENABLE_BACKTRACES 1
+
+ /* Define to 1 to enable crash overrides, and to 0 otherwise. */
+-/* #undef ENABLE_CRASH_OVERRIDES */
++#define ENABLE_CRASH_OVERRIDES 1
+
+ /* Define to 1 if you have the `backtrace' function. */
+-/* #undef HAVE_BACKTRACE */
++#define HAVE_BACKTRACE TRUE
+
+-/* #undef BACKTRACE_HEADER */
++#define BACKTRACE_HEADER <execinfo.h>
+
+ /* Define to 1 if you have the <CrashReporterClient.h> header file. */
+ /* #undef HAVE_CRASHREPORTERCLIENT_H */
+@@ -26,7 +26,7 @@
+
+ /* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+ don't. */
+-#define HAVE_DECL_ARC4RANDOM 0
++#define HAVE_DECL_ARC4RANDOM 1
+
+ /* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
+ don't. */
+@@ -50,7 +50,7 @@
+ #define HAVE_DLOPEN 1
+
+ /* Define if dladdr() is available on this platform. */
+-/* #undef HAVE_DLADDR */
++#define HAVE_DLADDR 1
+
+ /* Define to 1 if you have the <errno.h> header file. */
+ #define HAVE_ERRNO_H 1
+@@ -89,7 +89,7 @@
+ #define HAVE_ISATTY 1
+
+ /* Define to 1 if you have the `edit' library (-ledit). */
+-/* #undef HAVE_LIBEDIT */
++#define HAVE_LIBEDIT 1
+
+ /* Define to 1 if you have the `pfm' library (-lpfm). */
+ /* #undef HAVE_LIBPFM */
+@@ -107,25 +107,25 @@
+ /* #undef HAVE_PTHREAD_SETNAME_NP */
+
+ /* Define to 1 if you have the `z' library (-lz). */
+-/* #undef HAVE_LIBZ */
++#define HAVE_LIBZ 1
+
+ /* Define to 1 if you have the <link.h> header file. */
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+
+ /* Define to 1 if you have the `mallctl' function. */
+-/* #undef HAVE_MALLCTL */
++#define HAVE_MALLCTL 1
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+-#define HAVE_MALLOC_H 1
++/* #undef HAVE_MALLOC_H */
+
+ /* Define to 1 if you have the <malloc/malloc.h> header file. */
+ /* #undef HAVE_MALLOC_MALLOC_H */
+@@ -137,7 +137,7 @@
+ #define HAVE_POSIX_FALLOCATE 1
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+-/* #undef HAVE_POSIX_SPAWN */
++#define HAVE_POSIX_SPAWN 1
+
+ /* Define to 1 if you have the `pread' function. */
+ #define HAVE_PREAD 1
+@@ -158,16 +158,16 @@
+ #define HAVE_REALPATH 1
+
+ /* Define to 1 if you have the `sbrk' function. */
+-#define HAVE_SBRK 1
++/* #undef HAVE_SBRK */
+
+ /* Define to 1 if you have the `setenv' function. */
+ #define HAVE_SETENV 1
+
+ /* Define to 1 if you have the `sched_getaffinity' function. */
+-#define HAVE_SCHED_GETAFFINITY 1
++/* #undef HAVE_SCHED_GETAFFINITY */
+
+ /* Define to 1 if you have the `CPU_COUNT' macro. */
+-#define HAVE_CPU_COUNT 1
++/* #undef HAVE_CPU_COUNT */
+
+ /* Define to 1 if you have the `setrlimit' function. */
+ #define HAVE_SETRLIMIT 1
+@@ -209,13 +209,13 @@
+ #define HAVE_SYS_TYPES_H 1
+
+ /* Define if the setupterm() function is supported this platform. */
+-/* #undef HAVE_TERMINFO */
++#define HAVE_TERMINFO 1
+
+ /* Define if the xar_open() function is supported this platform. */
+ /* #undef HAVE_LIBXAR */
+
+ /* Define to 1 if you have the <termios.h> header file. */
+-/* #undef HAVE_TERMIOS_H */
++#define HAVE_TERMIOS_H 1
+
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #define HAVE_UNISTD_H 1
+@@ -224,7 +224,7 @@
+ /* #undef HAVE_VALGRIND_VALGRIND_H */
+
+ /* Define to 1 if you have the <zlib.h> header file. */
+-/* #undef HAVE_ZLIB_H */
++#define HAVE_ZLIB_H 1
+
+ /* Have host's _alloca */
+ /* #undef HAVE__ALLOCA */
+@@ -298,7 +298,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -310,7 +310,7 @@
+ #endif
+
+ /* Define if zlib compression is available */
+-#define LLVM_ENABLE_ZLIB 0
++#define LLVM_ENABLE_ZLIB 1
+
+ /* Define if overriding target triple is enabled */
+ /* #undef LLVM_TARGET_TRIPLE_ENV */
diff --git a/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
new file mode 100644
index 000000000000..7d2e6f4ad95c
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h.orig 2019-12-12 12:49:33 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h
+@@ -38,7 +38,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -63,7 +63,7 @@
+ #elif defined(__arm__)
+ #define LLVM_HOST_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_HOST_TRIPLE "aarch64-linux-gnu"
++#define LLVM_HOST_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_HOST_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
diff --git a/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..408032f9cc86
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h.orig 2019-12-12 12:49:40 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h
+@@ -121,7 +121,7 @@
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+@@ -130,7 +130,7 @@
+ /* #undef HAVE_MALLCTL */
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+ #define HAVE_MALLOC_H 1
+@@ -154,7 +154,7 @@
+ /* #undef HAVE_NDIR_H */
+
+ /* Define to 1 if you have the `posix_fallocate' function. */
+-#define HAVE_POSIX_FALLOCATE 1
++/* #undef HAVE_POSIX_FALLOCATE */
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+ #define HAVE_POSIX_SPAWN 1
diff --git a/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
new file mode 100644
index 000000000000..b56ee49a92e8
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc.orig 2019-12-12 12:49:40 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc
+@@ -35,7 +35,7 @@
+ // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for
+ // <stdlib.h> instead. Unix.h includes this for us already.
+ #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \
+- !defined(__OpenBSD__) && !defined(__Bitrig__)
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__Bitrig__)
+ #include <malloc.h>
+ #endif
+ #if defined(HAVE_MALLCTL)
diff --git a/devel/electron7/files/patch-third__party_usrsctp_BUILD.gn b/devel/electron7/files/patch-third__party_usrsctp_BUILD.gn
new file mode 100644
index 000000000000..cd3a9cc29411
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_usrsctp_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/usrsctp/BUILD.gn.orig 2019-12-12 12:41:30 UTC
++++ third_party/usrsctp/BUILD.gn
+@@ -116,11 +116,16 @@ static_library("usrsctp") {
+ "-UINET6",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android ) {
+ defines += [
+ "__Userspace_os_Linux",
+ "_GNU_SOURCE",
+ ]
++ } else if (is_bsd) {
++ defines += [
++ "__Userspace_os_FreeBSD",
++ ]
++ cflags += [ "-U__FreeBSD__" ]
+ } else if (is_mac || is_ios) {
+ defines += [
+ "HAVE_SA_LEN",
diff --git a/devel/electron7/files/patch-third__party_webrtc_BUILD.gn b/devel/electron7/files/patch-third__party_webrtc_BUILD.gn
new file mode 100644
index 000000000000..ddb639c49bd7
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_BUILD.gn
@@ -0,0 +1,12 @@
+--- third_party/webrtc/BUILD.gn.orig 2019-12-12 12:47:07 UTC
++++ third_party/webrtc/BUILD.gn
+@@ -160,6 +160,9 @@ config("common_inherited_config") {
+ if (is_linux) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
diff --git a/devel/electron7/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn b/devel/electron7/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
new file mode 100644
index 000000000000..55738efa8191
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/modules/audio_device/BUILD.gn.orig 2019-12-12 12:47:07 UTC
++++ third_party/webrtc/modules/audio_device/BUILD.gn
+@@ -265,7 +265,7 @@ rtc_source_set("audio_device_impl") {
+ if (rtc_use_dummy_audio_file_devices) {
+ defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
+ } else {
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/alsasymboltable_linux.cc",
+ "linux/alsasymboltable_linux.h",
diff --git a/devel/electron7/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/devel/electron7/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..792186d8771c
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -13,6 +13,7 @@
+ #include <string.h>
+
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "absl/algorithm/container.h"
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_byte__order.h b/devel/electron7/files/patch-third__party_webrtc_rtc__base_byte__order.h
new file mode 100644
index 000000000000..76cb6dfb66b1
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/byte_order.h.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/byte_order.h
+@@ -89,7 +89,7 @@
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #else
+ #error "Missing byte order functions for this arch."
+ #endif // defined(WEBRTC_MAC)
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..f7b6695e6a08
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/ifaddrs_converter.h.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.cc b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..1025f5b120c5
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- third_party/webrtc/rtc_base/ip_address.cc.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+ #ifdef OPENBSD
+ #include <netinet/in_systm.h>
+ #endif
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.h b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.h
new file mode 100644
index 000000000000..7fbecea60f0b
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/ip_address.h.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.cc b/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.cc
new file mode 100644
index 000000000000..c8c558d63e5f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.cc
@@ -0,0 +1,29 @@
+--- third_party/webrtc/rtc_base/network.cc.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/network.cc
+@@ -14,7 +14,7 @@
+ // linux/if.h can't be included at the same time as the posix sys/if.h, and
+ // it's transitively required by linux/route.h, so include that version on
+ // linux instead of the standard posix one.
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/if.h>
+ #include <linux/route.h>
+ #elif !defined(__native_client__)
+@@ -765,7 +765,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_
+ }
+ #endif // WEBRTC_WIN
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ bool IsDefaultRoute(const std::string& network_name) {
+ FILE* f = fopen("/proc/net/route", "r");
+ if (!f) {
+@@ -808,7 +808,7 @@ bool BasicNetworkManager::IsIgnoredNetwork(const Netwo
+ strncmp(network.name().c_str(), "vboxnet", 7) == 0) {
+ return true;
+ }
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // Make sure this is a default route, if we're ignoring non-defaults.
+ if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
+ return true;
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.h b/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.h
new file mode 100644
index 000000000000..38bf6fd0d229
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/network.h.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/network.h
+@@ -25,6 +25,10 @@
+ #include "rtc_base/network_monitor.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc b/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..3fcc613f8cab
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
@@ -0,0 +1,65 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.cc.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.cc
+@@ -51,7 +51,7 @@
+ #include "rtc_base/null_socket_server.h"
+ #include "rtc_base/time_utils.h"
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/sockios.h>
+ #endif
+
+@@ -70,7 +70,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -290,7 +290,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ socklen_t optlen = sizeof(*value);
+ int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+ if (ret != -1 && opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ }
+@@ -303,7 +303,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ }
+@@ -313,7 +313,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ int PhysicalSocket::Send(const void* pv, size_t cb) {
+ int sent = DoSend(
+ s_, reinterpret_cast<const char*>(pv), static_cast<int>(cb),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. Without this, attempting to send on a socket whose
+ // other end is closed will result in a SIGPIPE signal being raised to
+ // our process, which by default will terminate the process, which we
+@@ -342,7 +342,7 @@ int PhysicalSocket::SendTo(const void* buffer,
+ size_t len = addr.ToSockAddrStorage(&saddr);
+ int sent =
+ DoSendTo(s_, static_cast<const char*>(buffer), static_cast<int>(length),
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ // Suppress SIGPIPE. See above for explanation.
+ MSG_NOSIGNAL,
+ #else
+@@ -533,7 +533,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h b/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..e9d7a4be41e2
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.h.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/devel/electron7/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc b/devel/electron7/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..7c74302467a0
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
@@ -0,0 +1,39 @@
+--- third_party/webrtc/rtc_base/platform_thread_types.cc.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,11 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#else
++#include <pthread_np.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -27,6 +31,8 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
++#elif defined(__FreeBSD__)
++ return pthread_getthreadid_np();
+ #elif defined(WEBRTC_LINUX)
+ return syscall(__NR_gettid);
+ #elif defined(__EMSCRIPTEN__)
+@@ -57,6 +63,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ struct {
+ DWORD dwType;
+@@ -74,6 +81,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/devel/electron7/files/patch-third__party_webrtc_system__wrappers_BUILD.gn b/devel/electron7/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..ffe43faa90db
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/system_wrappers/BUILD.gn.orig 2019-12-12 12:47:08 UTC
++++ third_party/webrtc/system_wrappers/BUILD.gn
+@@ -58,8 +58,6 @@ rtc_static_library("system_wrappers") {
+ if (!build_with_chromium) {
+ deps += [ ":cpu_features_linux" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/devel/electron7/files/patch-third__party_zlib_arm__features.c b/devel/electron7/files/patch-third__party_zlib_arm__features.c
new file mode 100644
index 000000000000..8ad23b22059f
--- /dev/null
+++ b/devel/electron7/files/patch-third__party_zlib_arm__features.c
@@ -0,0 +1,46 @@
+--- third_party/zlib/arm_features.c.orig 2019-12-12 12:41:30 UTC
++++ third_party/zlib/arm_features.c
+@@ -16,6 +16,10 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #include <pthread.h>
+ #endif
+
++#if defined(__FreeBSD__)
++#include <machine/armreg.h>
++#include <sys/types.h>
++#else
+ #if defined(ARMV8_OS_ANDROID)
+ #include <cpu-features.h>
+ #elif defined(ARMV8_OS_LINUX)
+@@ -30,6 +34,7 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #else
+ #error arm_features.c ARM feature detection in not defined for your platform
+ #endif
++#endif
+
+ static void _arm_check_features(void);
+
+@@ -68,14 +73,24 @@ static void _arm_check_features(void)
+ arm_cpu_enable_crc32 = !!(features & ANDROID_CPU_ARM_FEATURE_CRC32);
+ arm_cpu_enable_pmull = !!(features & ANDROID_CPU_ARM_FEATURE_PMULL);
+ #elif defined(ARMV8_OS_LINUX) && defined(__aarch64__)
++#if defined(__FreeBSD__)
++ uint64_t id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL)
++ arm_cpu_enable_pmull = 1;
++ if (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE)
++ arm_cpu_enable_crc32 = 1;
++#else
+ unsigned long features = getauxval(AT_HWCAP);
+ arm_cpu_enable_crc32 = !!(features & HWCAP_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP_PMULL);
++#endif
+ #elif defined(ARMV8_OS_LINUX) && (defined(__ARM_NEON) || defined(__ARM_NEON__))
++#if !defined(__FreeBSD__)
+ /* Query HWCAP2 for ARMV8-A SoCs running in aarch32 mode */
+ unsigned long features = getauxval(AT_HWCAP2);
+ arm_cpu_enable_crc32 = !!(features & HWCAP2_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP2_PMULL);
++#endif
+ #elif defined(ARMV8_OS_FUCHSIA)
+ uint32_t features;
+ zx_status_t rc = zx_system_get_features(ZX_FEATURE_KIND_CPU, &features);
diff --git a/devel/electron7/files/patch-tools_gn_base_files_file__posix.cc b/devel/electron7/files/patch-tools_gn_base_files_file__posix.cc
new file mode 100644
index 000000000000..35ce975a61ae
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_base_files_file__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_posix.cc.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/base/files/file_posix.cc
+@@ -414,7 +414,7 @@ void File::DoInitialize(const FilePath& path, uint32_t
+ bool File::Flush() {
+ DCHECK(IsValid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !HANDLE_EINTR(fdatasync(file_.get()));
+ #else
+ return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/devel/electron7/files/patch-tools_gn_base_files_file__util.h b/devel/electron7/files/patch-tools_gn_base_files_file__util.h
new file mode 100644
index 000000000000..bab519a2739e
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_base_files_file__util.h
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util.h.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/base/files/file_util.h
+@@ -361,7 +361,7 @@ bool VerifyPathControlledByAdmin(const base::FilePath&
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/devel/electron7/files/patch-tools_gn_base_files_file__util__posix.cc b/devel/electron7/files/patch-tools_gn_base_files_file__util__posix.cc
new file mode 100644
index 000000000000..ec799cd0755b
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/file_util_posix.cc.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/base/files/file_util_posix.cc
+@@ -254,7 +254,7 @@ bool ReplaceFile(const FilePath& from_path,
+ #endif // !defined(OS_NACL_NONSFI)
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/devel/electron7/files/patch-tools_gn_base_files_scoped__file.cc b/devel/electron7/files/patch-tools_gn_base_files_scoped__file.cc
new file mode 100644
index 000000000000..739eb82e5b4f
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- tools/gn/base/files/scoped_file.cc.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/devel/electron7/files/patch-tools_gn_build_gen.py b/devel/electron7/files/patch-tools_gn_build_gen.py
new file mode 100644
index 000000000000..4df2695bcab4
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_build_gen.py
@@ -0,0 +1,24 @@
+--- tools/gn/build/gen.py.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/build/gen.py
+@@ -69,6 +69,9 @@ class Platform(object):
+ def is_aix(self):
+ return self._platform == 'aix'
+
++ def is_freebsd(self):
++ return self._platform == 'freebsd'
++
+ def is_posix(self):
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd']
+
+@@ -337,6 +340,11 @@ def WriteGNNinja(path, platform, host, options):
+ elif platform.is_aix():
+ cflags_cc.append('-maix64')
+ ldflags.append('-maix64')
++ elif platform.is_freebsd():
++ cflags.extend(['-Wno-deprecated-register', '-Wno-parentheses-equality'])
++ ldflags.extend(['-pthread'])
++ libs.extend(['-lexecinfo', '-lkvm', '-lutil'])
++ include_dirs += ['/usr/local/include']
+
+ if platform.is_posix():
+ ldflags.append('-pthread')
diff --git a/devel/electron7/files/patch-tools_gn_tools_gn_exec__process.cc b/devel/electron7/files/patch-tools_gn_tools_gn_exec__process.cc
new file mode 100644
index 000000000000..e2b3bd573597
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_tools_gn_exec__process.cc
@@ -0,0 +1,13 @@
+--- tools/gn/tools/gn/exec_process.cc.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/tools/gn/exec_process.cc
+@@ -29,6 +29,10 @@
+ #include "base/posix/file_descriptor_shuffle.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
++
+ namespace internal {
+
+ #if defined(OS_WIN)
diff --git a/devel/electron7/files/patch-tools_gn_util_sys__info.cc b/devel/electron7/files/patch-tools_gn_util_sys__info.cc
new file mode 100644
index 000000000000..d07ef0747819
--- /dev/null
+++ b/devel/electron7/files/patch-tools_gn_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- tools/gn/util/sys_info.cc.orig 2019-11-19 01:42:28 UTC
++++ tools/gn/util/sys_info.cc
+@@ -28,6 +28,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/devel/electron7/files/patch-tools_json__schema__compiler_feature__compiler.py b/devel/electron7/files/patch-tools_json__schema__compiler_feature__compiler.py
new file mode 100644
index 000000000000..b86523146be3
--- /dev/null
+++ b/devel/electron7/files/patch-tools_json__schema__compiler_feature__compiler.py
@@ -0,0 +1,10 @@
+--- tools/json_schema_compiler/feature_compiler.py.orig 2019-12-12 12:41:31 UTC
++++ tools/json_schema_compiler/feature_compiler.py
+@@ -215,6 +215,7 @@ FEATURE_GRAMMAR = (
+ 'enum_map': {
+ 'chromeos': 'Feature::CHROMEOS_PLATFORM',
+ 'linux': 'Feature::LINUX_PLATFORM',
++ 'bsd': 'Feature::LINUX_PLATFORM',
+ 'mac': 'Feature::MACOSX_PLATFORM',
+ 'win': 'Feature::WIN_PLATFORM',
+ }
diff --git a/devel/electron7/files/patch-tools_json__schema__compiler_model.py b/devel/electron7/files/patch-tools_json__schema__compiler_model.py
new file mode 100644
index 000000000000..094c070bac34
--- /dev/null
+++ b/devel/electron7/files/patch-tools_json__schema__compiler_model.py
@@ -0,0 +1,11 @@
+--- tools/json_schema_compiler/model.py.orig 2019-12-12 12:41:31 UTC
++++ tools/json_schema_compiler/model.py
+@@ -603,7 +603,7 @@ class Platforms(object):
+ """
+ CHROMEOS = _PlatformInfo("chromeos")
+ CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
+- LINUX = _PlatformInfo("linux")
++ LINUX = _PlatformInfo("bsd")
+ MAC = _PlatformInfo("mac")
+ WIN = _PlatformInfo("win")
+
diff --git a/devel/electron7/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn b/devel/electron7/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
new file mode 100644
index 000000000000..90b8c6e5c084
--- /dev/null
+++ b/devel/electron7/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
@@ -0,0 +1,11 @@
+--- tools/perf/chrome_telemetry_build/BUILD.gn.orig 2019-12-12 12:41:31 UTC
++++ tools/perf/chrome_telemetry_build/BUILD.gn
+@@ -43,7 +43,7 @@ group("telemetry_chrome_test") {
+ data_deps += [ "//chrome:reorder_imports" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
diff --git a/devel/electron7/files/patch-tools_variations_fieldtrial__to__struct.py b/devel/electron7/files/patch-tools_variations_fieldtrial__to__struct.py
new file mode 100644
index 000000000000..502ea1b7451e
--- /dev/null
+++ b/devel/electron7/files/patch-tools_variations_fieldtrial__to__struct.py
@@ -0,0 +1,10 @@
+--- tools/variations/fieldtrial_to_struct.py.orig 2019-12-12 12:41:32 UTC
++++ tools/variations/fieldtrial_to_struct.py
+@@ -33,6 +33,7 @@ finally:
+ _platforms = [
+ 'android',
+ 'android_webview',
++ 'freebsd',
+ 'chromeos',
+ 'fuchsia',
+ 'ios',
diff --git a/devel/electron7/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc b/devel/electron7/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
new file mode 100644
index 000000000000..aa7730768404
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
@@ -0,0 +1,20 @@
+--- ui/base/dragdrop/os_exchange_data_provider_factory.cc.orig 2019-12-12 12:41:32 UTC
++++ ui/base/dragdrop/os_exchange_data_provider_factory.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(USE_X11)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+ #elif defined(OS_MACOSX)
+ #include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<OSExchangeData::Provider>
+ OSExchangeDataProviderFactory::CreateProvider() {
+ #if defined(USE_X11)
+ return std::make_unique<OSExchangeDataProviderAuraX11>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<OSExchangeDataProviderAura>();
+ #elif defined(OS_MACOSX)
+ return ui::BuildOSExchangeDataProviderMac();
diff --git a/devel/electron7/files/patch-ui_base_ime_init_input__method__initializer.cc b/devel/electron7/files/patch-ui_base_ime_init_input__method__initializer.cc
new file mode 100644
index 000000000000..fb2893327cef
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_ime_init_input__method__initializer.cc
@@ -0,0 +1,38 @@
+--- ui/base/ime/init/input_method_initializer.cc.orig 2019-12-12 12:41:32 UTC
++++ ui/base/ime/init/input_method_initializer.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/base/ime/ime_bridge.h"
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/logging.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
+ #elif defined(OS_WIN)
+@@ -18,7 +18,7 @@
+
+ namespace {
+
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const ui::LinuxInputMethodContextFactory*
+ g_linux_input_method_context_factory_for_testing;
+ #endif
+@@ -46,7 +46,7 @@ void ShutdownInputMethod() {
+ void InitializeInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Initialize();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ if (!g_linux_input_method_context_factory_for_testing)
+ g_linux_input_method_context_factory_for_testing =
+ new FakeInputMethodContextFactory();
+@@ -67,7 +67,7 @@ void InitializeInputMethodForTesting() {
+ void ShutdownInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Shutdown();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxInputMethodContextFactory* factory =
+ LinuxInputMethodContextFactory::instance();
+ CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
diff --git a/devel/electron7/files/patch-ui_base_resource_resource__bundle.cc b/devel/electron7/files/patch-ui_base_resource_resource__bundle.cc
new file mode 100644
index 000000000000..2204c2412d1f
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_resource_resource__bundle.cc
@@ -0,0 +1,20 @@
+--- ui/base/resource/resource_bundle.cc.orig 2019-12-12 12:41:32 UTC
++++ ui/base/resource/resource_bundle.cc
+@@ -793,7 +793,7 @@ void ResourceBundle::ReloadFonts() {
+ }
+
+ ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ return max_scale_factor_;
+ #else
+ return GetSupportedScaleFactors().back();
+@@ -846,7 +846,7 @@ void ResourceBundle::InitSharedInstance(Delegate* dele
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ // For Windows we have a separate case in this function.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ #endif
+ #endif
diff --git a/devel/electron7/files/patch-ui_base_resource_resource__bundle__freebsd.cc b/devel/electron7/files/patch-ui_base_resource_resource__bundle__freebsd.cc
new file mode 100644
index 000000000000..fb72fd3ba490
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_resource_resource__bundle__freebsd.cc
@@ -0,0 +1,24 @@
+--- ui/base/resource/resource_bundle_freebsd.cc.orig 2019-12-16 13:34:00 UTC
++++ ui/base/resource/resource_bundle_freebsd.cc
+@@ -0,0 +1,21 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ui/base/resource/resource_bundle.h"
++
++#include "base/logging.h"
++#include "base/macros.h"
++#include "ui/gfx/image/image.h"
++
++namespace ui {
++
++void ResourceBundle::LoadCommonResources() {
++ LoadChromeResources();
++}
++
++gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id) {
++ return GetImageNamed(resource_id);
++}
++
++} // namespace ui
diff --git a/devel/electron7/files/patch-ui_base_ui__base__features.cc b/devel/electron7/files/patch-ui_base_ui__base__features.cc
new file mode 100644
index 000000000000..317ee577cc95
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_ui__base__features.cc
@@ -0,0 +1,20 @@
+--- ui/base/ui_base_features.cc.orig 2019-12-12 12:41:32 UTC
++++ ui/base/ui_base_features.cc
+@@ -112,7 +112,7 @@ const base::Feature kEnableAutomaticUiAdjustmentsForTo
+ "EnableAutomaticUiAdjustmentsForTouch", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables stylus appearing as touch when in contact with digitizer.
+ const base::Feature kDirectManipulationStylus = {
+ "DirectManipulationStylus",
+@@ -122,7 +122,7 @@ const base::Feature kDirectManipulationStylus = {
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #endif
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const base::Feature kFormControlsRefresh = {"FormControlsRefresh",
+ base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/devel/electron7/files/patch-ui_base_ui__base__features.h b/devel/electron7/files/patch-ui_base_ui__base__features.h
new file mode 100644
index 000000000000..66d15c546dc7
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_ui__base__features.h
@@ -0,0 +1,15 @@
+--- ui/base/ui_base_features.h.orig 2019-12-12 12:41:32 UTC
++++ ui/base/ui_base_features.h
+@@ -61,10 +61,10 @@ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kEnableAutomaticUiAdjustmentsForTouch;
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kDirectManipulationStylus;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Used to enable the new controls UI.
+ COMPONENT_EXPORT(UI_BASE_FEATURES)
diff --git a/devel/electron7/files/patch-ui_base_webui_web__ui__util.cc b/devel/electron7/files/patch-ui_base_webui_web__ui__util.cc
new file mode 100644
index 000000000000..e6a199110353
--- /dev/null
+++ b/devel/electron7/files/patch-ui_base_webui_web__ui__util.cc
@@ -0,0 +1,11 @@
+--- ui/base/webui/web_ui_util.cc.orig 2019-12-12 12:41:32 UTC
++++ ui/base/webui/web_ui_util.cc
+@@ -215,7 +215,7 @@ std::string GetFontFamily() {
+
+ // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced
+ // into Ozone: crbug.com/320050
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ font_family = ui::ResourceBundle::GetSharedInstance().GetFont(
+ ui::ResourceBundle::BaseFont).GetFontName() + ", " + font_family;
+ #endif
diff --git a/devel/electron7/files/patch-ui_events_devices_x11_device__data__manager__x11.cc b/devel/electron7/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
new file mode 100644
index 000000000000..8e124046da3e
--- /dev/null
+++ b/devel/electron7/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
@@ -0,0 +1,19 @@
+--- ui/events/devices/x11/device_data_manager_x11.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/events/devices/x11/device_data_manager_x11.cc
+@@ -826,6 +826,8 @@ void DeviceDataManagerX11::SetDisabledKeyboardAllowedK
+ }
+
+ void DeviceDataManagerX11::DisableDevice(int deviceid) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ blocked_devices_.set(deviceid, true);
+ // TODO(rsadam@): Support blocking touchscreen devices.
+ std::vector<InputDevice> keyboards = GetKeyboardDevices();
+@@ -836,6 +838,7 @@ void DeviceDataManagerX11::DisableDevice(int deviceid)
+ keyboards.erase(it);
+ DeviceDataManager::OnKeyboardDevicesUpdated(keyboards);
+ }
++#endif
+ }
+
+ void DeviceDataManagerX11::EnableDevice(int deviceid) {
diff --git a/devel/electron7/files/patch-ui_events_event__switches.cc b/devel/electron7/files/patch-ui_events_event__switches.cc
new file mode 100644
index 000000000000..43fd9584c009
--- /dev/null
+++ b/devel/electron7/files/patch-ui_events_event__switches.cc
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/events/event_switches.cc
+@@ -14,7 +14,7 @@ namespace switches {
+ const char kCompensateForUnstablePinchZoom[] =
+ "compensate-for-unstable-pinch-zoom";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ // Tells chrome to interpret events from these devices as touch events. Only
+ // available with XInput 2 (i.e. X server 1.8 or above). The id's of the
+ // devices can be retrieved from 'xinput list'.
diff --git a/devel/electron7/files/patch-ui_events_event__switches.h b/devel/electron7/files/patch-ui_events_event__switches.h
new file mode 100644
index 000000000000..13342e5ec96a
--- /dev/null
+++ b/devel/electron7/files/patch-ui_events_event__switches.h
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.h.orig 2019-12-12 12:41:33 UTC
++++ ui/events/event_switches.h
+@@ -13,7 +13,7 @@ namespace switches {
+
+ EVENTS_BASE_EXPORT extern const char kCompensateForUnstablePinchZoom[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ EVENTS_BASE_EXPORT extern const char kTouchDevices[];
+ EVENTS_BASE_EXPORT extern const char kPenDevices[];
+ #endif
diff --git a/devel/electron7/files/patch-ui_events_keycodes_dom_keycode__converter.cc b/devel/electron7/files/patch-ui_events_keycodes_dom_keycode__converter.cc
new file mode 100644
index 000000000000..93d655ec0397
--- /dev/null
+++ b/devel/electron7/files/patch-ui_events_keycodes_dom_keycode__converter.cc
@@ -0,0 +1,11 @@
+--- ui/events/keycodes/dom/keycode_converter.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/events/keycodes/dom/keycode_converter.cc
+@@ -19,7 +19,7 @@ namespace {
+ // and DOM Level 3 |code| strings.
+ #if defined(OS_WIN)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, win, code}
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, xkb, code}
+ #elif defined(OS_MACOSX)
+ #define USB_KEYMAP(usb, evdev, xkb, win, mac, code, id) {usb, mac, code}
diff --git a/devel/electron7/files/patch-ui_gfx_BUILD.gn b/devel/electron7/files/patch-ui_gfx_BUILD.gn
new file mode 100644
index 000000000000..4aa1e4192e86
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gfx/BUILD.gn.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/BUILD.gn
+@@ -573,7 +573,7 @@ jumbo_source_set("memory_buffer_sources") {
+ deps += [ "//build/config/linux/libdrm" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux || is_android) && !is_bsd) {
+ deps += [ "//third_party/libsync" ]
+ }
+
diff --git a/devel/electron7/files/patch-ui_gfx_canvas__skia.cc b/devel/electron7/files/patch-ui_gfx_canvas__skia.cc
new file mode 100644
index 000000000000..6a862a52d27c
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_canvas__skia.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/canvas_skia.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/canvas_skia.cc
+@@ -209,7 +209,7 @@ void Canvas::DrawStringRectWithFlags(const base::strin
+ Range range = StripAcceleratorChars(flags, &adjusted_text);
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, eliding really means fading the end of the string. But only
+ // for LTR text. RTL text is still elided (on the left) with "...".
+ if (elide_text) {
diff --git a/devel/electron7/files/patch-ui_gfx_codec_jpeg__codec.cc b/devel/electron7/files/patch-ui_gfx_codec_jpeg__codec.cc
new file mode 100644
index 000000000000..2e0009805120
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_codec_jpeg__codec.cc
@@ -0,0 +1,20 @@
+--- ui/gfx/codec/jpeg_codec.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/codec/jpeg_codec.cc
+@@ -207,6 +207,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // Choose an output colorspace and return if it is an unsupported one.
+ // Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+@@ -223,6 +224,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ NOTREACHED() << "Invalid pixel format";
+ return false;
+ }
++#else
++ cinfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
diff --git a/devel/electron7/files/patch-ui_gfx_font__fallback__linux.cc b/devel/electron7/files/patch-ui_gfx_font__fallback__linux.cc
new file mode 100644
index 000000000000..d3666711042f
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_font__fallback__linux.cc
@@ -0,0 +1,13 @@
+--- ui/gfx/font_fallback_linux.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/font_fallback_linux.cc
+@@ -18,6 +18,10 @@
+ #include "base/trace_event/trace_event.h"
+ #include "ui/gfx/font.h"
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ namespace gfx {
+
+ namespace {
diff --git a/devel/electron7/files/patch-ui_gfx_font__list.cc b/devel/electron7/files/patch-ui_gfx_font__list.cc
new file mode 100644
index 000000000000..731b3dff4cce
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_font__list.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/font_list.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/font_list.cc
+@@ -24,7 +24,7 @@ base::LazyInstance<scoped_refptr<gfx::FontListImpl>>::
+ bool g_default_impl_initialized = false;
+
+ bool IsFontFamilyAvailable(const std::string& family, SkFontMgr* fontManager) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !!fontManager->legacyMakeTypeface(family.c_str(), SkFontStyle());
+ #else
+ sk_sp<SkFontStyleSet> set(fontManager->matchFamily(family.c_str()));
diff --git a/devel/electron7/files/patch-ui_gfx_font__render__params.h b/devel/electron7/files/patch-ui_gfx_font__render__params.h
new file mode 100644
index 000000000000..1317f7c22576
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_font__render__params.h
@@ -0,0 +1,18 @@
+--- ui/gfx/font_render_params.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/font_render_params.h
+@@ -111,13 +111,13 @@ GFX_EXPORT FontRenderParams GetFontRenderParams(
+ const FontRenderParamsQuery& query,
+ std::string* family_out);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are
+ // changing Fontconfig's configuration.
+ GFX_EXPORT void ClearFontRenderParamsCacheForTest();
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ // Gets the device scale factor to query the FontRenderParams.
+ GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
diff --git a/devel/electron7/files/patch-ui_gfx_gpu__memory__buffer.h b/devel/electron7/files/patch-ui_gfx_gpu__memory__buffer.h
new file mode 100644
index 000000000000..862187caa75c
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_gpu__memory__buffer.h
@@ -0,0 +1,20 @@
+--- ui/gfx/gpu_memory_buffer.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/gpu_memory_buffer.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ #include "ui/gfx/mac/io_surface.h"
+@@ -65,7 +65,7 @@ struct GFX_EXPORT GpuMemoryBufferHandle {
+ base::UnsafeSharedMemoryRegion region;
+ uint32_t offset;
+ int32_t stride;
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ NativePixmapHandle native_pixmap_handle;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ ScopedRefCountedIOSurfaceMachPort mach_port;
diff --git a/devel/electron7/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h b/devel/electron7/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
new file mode 100644
index 000000000000..c82572504f52
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
@@ -0,0 +1,44 @@
+--- ui/gfx/ipc/gfx_param_traits_macros.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/ipc/gfx_param_traits_macros.h
+@@ -18,7 +18,7 @@
+ #include "ui/gfx/selection_bound.h"
+ #include "ui/gfx/swap_result.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #endif
+
+@@ -51,7 +51,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferHandle)
+ IPC_STRUCT_TRAITS_MEMBER(region)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(native_pixmap_handle)
+ #elif defined(OS_MACOSX)
+ IPC_STRUCT_TRAITS_MEMBER(mach_port)
+@@ -66,12 +66,12 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferId)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_END()
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapPlane)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(fd)
+ #elif defined(OS_FUCHSIA)
+ IPC_STRUCT_TRAITS_MEMBER(vmo)
+@@ -80,7 +80,7 @@ IPC_STRUCT_TRAITS_END()
+
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapHandle)
+ IPC_STRUCT_TRAITS_MEMBER(planes)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(modifier)
+ #endif
+ #if defined(OS_FUCHSIA)
diff --git a/devel/electron7/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc b/devel/electron7/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
new file mode 100644
index 000000000000..ed32953c4d40
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/linux/client_native_pixmap_dmabuf.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/linux/client_native_pixmap_dmabuf.cc
+@@ -5,7 +5,9 @@
+ #include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
+
+ #include <fcntl.h>
++#if !defined(__FreeBSD__)
+ #include <linux/version.h>
++#endif
+ #include <stddef.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+@@ -24,11 +26,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/switches.h"
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+-#include <linux/dma-buf.h>
+-#else
+-#include <linux/types.h>
+-
++#if defined(__FreeBSD__)
+ struct dma_buf_sync {
+ __u64 flags;
+ };
diff --git a/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc b/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc
new file mode 100644
index 000000000000..b1015d553180
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc
@@ -0,0 +1,75 @@
+--- ui/gfx/mojom/buffer_types_mojom_traits.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/mojom/buffer_types_mojom_traits.cc
+@@ -24,15 +24,15 @@ bool StructTraits<gfx::mojom::BufferUsageAndFormatData
+ return data.ReadUsage(&out->usage) && data.ReadFormat(&out->format);
+ }
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ mojo::ScopedHandle StructTraits<
+ gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane>::buffer_handle(gfx::NativePixmapPlane& plane) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return mojo::WrapPlatformFile(plane.fd.release());
+ #elif defined(OS_FUCHSIA)
+ return mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(plane.vmo)));
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool StructTraits<
+@@ -45,7 +45,7 @@ bool StructTraits<
+
+ mojo::PlatformHandle handle =
+ mojo::UnwrapPlatformHandle(data.TakeBufferHandle());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!handle.is_fd())
+ return false;
+ out->fd = handle.TakeFD();
+@@ -53,7 +53,7 @@ bool StructTraits<
+ if (!handle.is_handle())
+ return false;
+ out->vmo = zx::vmo(handle.TakeHandle());
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ return true;
+ }
+@@ -62,7 +62,7 @@ bool StructTraits<
+ gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle>::Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ out->modifier = data.modifier();
+ #endif
+
+@@ -75,7 +75,7 @@ bool StructTraits<
+
+ return data.ReadPlanes(&out->planes);
+ }
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+
+ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTraits<
+ gfx::mojom::GpuMemoryBufferHandleDataView,
+@@ -88,7 +88,7 @@ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTra
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewSharedMemoryHandle(
+ std::move(handle.region));
+ case gfx::NATIVE_PIXMAP:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewNativePixmapHandle(
+ std::move(handle.native_pixmap_handle));
+ #else
+@@ -164,7 +164,7 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDat
+ out->type = gfx::SHARED_MEMORY_BUFFER;
+ out->region = std::move(platform_handle->get_shared_memory_handle());
+ return true;
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ case gfx::mojom::GpuMemoryBufferPlatformHandleDataView::Tag::
+ NATIVE_PIXMAP_HANDLE:
+ out->type = gfx::NATIVE_PIXMAP;
diff --git a/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h b/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h
new file mode 100644
index 000000000000..34977aa1ae74
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h
@@ -0,0 +1,29 @@
+--- ui/gfx/mojom/buffer_types_mojom_traits.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/mojom/buffer_types_mojom_traits.h
+@@ -191,7 +191,7 @@ struct StructTraits<gfx::mojom::GpuMemoryBufferIdDataV
+ }
+ };
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ template <>
+ struct StructTraits<gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane> {
+@@ -217,7 +217,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ return pixmap_handle.planes;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static uint64_t modifier(const gfx::NativePixmapHandle& pixmap_handle) {
+ return pixmap_handle.modifier;
+ }
+@@ -241,7 +241,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ static bool Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out);
+ };
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+
+ template <>
+ struct StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
diff --git a/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.cc b/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.cc
new file mode 100644
index 000000000000..f3252359196f
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.cc
@@ -0,0 +1,56 @@
+--- ui/gfx/native_pixmap_handle.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/native_pixmap_handle.cc
+@@ -8,7 +8,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <drm_fourcc.h>
+ #include "base/posix/eintr_wrapper.h"
+ #endif
+@@ -20,7 +20,7 @@
+
+ namespace gfx {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static_assert(NativePixmapHandle::kNoModifier == DRM_FORMAT_MOD_INVALID,
+ "gfx::NativePixmapHandle::kNoModifier should be an alias for"
+ "DRM_FORMAT_MOD_INVALID");
+@@ -31,7 +31,7 @@ NativePixmapPlane::NativePixmapPlane() : stride(0), of
+ NativePixmapPlane::NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -42,7 +42,7 @@ NativePixmapPlane::NativePixmapPlane(int stride,
+ : stride(stride),
+ offset(offset),
+ size(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ fd(std::move(fd))
+ #elif defined(OS_FUCHSIA)
+@@ -70,7 +70,7 @@ NativePixmapHandle& NativePixmapHandle::operator=(Nati
+ NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
+ NativePixmapHandle clone;
+ for (auto& plane : handle.planes) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(plane.fd.is_valid());
+ base::ScopedFD fd_dup(HANDLE_EINTR(dup(plane.fd.get())));
+ if (!fd_dup.is_valid()) {
+@@ -96,7 +96,7 @@ NativePixmapHandle CloneHandleForIPC(const NativePixma
+ #endif
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ clone.modifier = handle.modifier;
+ #endif
+
diff --git a/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.h b/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.h
new file mode 100644
index 000000000000..aabb1b730db1
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_native__pixmap__handle.h
@@ -0,0 +1,38 @@
+--- ui/gfx/native_pixmap_handle.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/native_pixmap_handle.h
+@@ -15,7 +15,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/scoped_file.h"
+ #endif
+
+@@ -32,7 +32,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -53,7 +53,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ // This is necessary to map the buffers.
+ uint64_t size;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // File descriptor for the underlying memory object (usually dmabuf).
+ base::ScopedFD fd;
+ #elif defined(OS_FUCHSIA)
+@@ -82,7 +82,7 @@ struct GFX_EXPORT NativePixmapHandle {
+
+ std::vector<NativePixmapPlane> planes;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The modifier is retrieved from GBM library and passed to EGL driver.
+ // Generally it's platform specific, and we don't need to modify it in
+ // Chromium code. Also one per plane per entry.
diff --git a/devel/electron7/files/patch-ui_gfx_render__text.cc b/devel/electron7/files/patch-ui_gfx_render__text.cc
new file mode 100644
index 000000000000..4e7cf78ce704
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gfx_render__text.cc
@@ -0,0 +1,46 @@
+--- ui/gfx/render_text.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gfx/render_text.cc
+@@ -983,32 +983,33 @@ void RenderText::SetDisplayOffset(int horizontal_offse
+ const int extra_content = GetContentWidth() - display_rect_.width();
+ const int cursor_width = cursor_enabled_ ? 1 : 0;
+
+- int min_offset = 0;
+- int max_offset = 0;
++ // avoid collisions with vm_map.h on FreeBSD --cmt
++ int _min_offset = 0;
++ int _max_offset = 0;
+ if (extra_content > 0) {
+ switch (GetCurrentHorizontalAlignment()) {
+ case ALIGN_LEFT:
+- min_offset = -extra_content;
++ _min_offset = -extra_content;
+ break;
+ case ALIGN_RIGHT:
+- max_offset = extra_content;
++ _max_offset = extra_content;
+ break;
+ case ALIGN_CENTER:
+ // The extra space reserved for cursor at the end of the text is ignored
+ // when centering text. So, to calculate the valid range for offset, we
+ // exclude that extra space, calculate the range, and add it back to the
+ // range (if cursor is enabled).
+- min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
+- max_offset = (extra_content - cursor_width) / 2;
++ _min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
++ _max_offset = (extra_content - cursor_width) / 2;
+ break;
+ default:
+ break;
+ }
+ }
+- if (horizontal_offset < min_offset)
+- horizontal_offset = min_offset;
+- else if (horizontal_offset > max_offset)
+- horizontal_offset = max_offset;
++ if (horizontal_offset < _min_offset)
++ horizontal_offset = _min_offset;
++ else if (horizontal_offset > _max_offset)
++ horizontal_offset = _max_offset;
+
+ cached_bounds_and_offset_valid_ = true;
+ display_offset_.set_x(horizontal_offset);
diff --git a/devel/electron7/files/patch-ui_gl_BUILD.gn b/devel/electron7/files/patch-ui_gl_BUILD.gn
new file mode 100644
index 000000000000..c1d1f8184361
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gl/BUILD.gn.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/BUILD.gn
+@@ -219,7 +219,7 @@ jumbo_component("gl") {
+ ]
+ }
+
+- if (is_posix && !is_fuchsia && !is_mac) {
++ if (is_posix && !is_fuchsia && !is_mac && !is_bsd) {
+ # Windows has USE_EGL but doesn't support base::FileDescriptor.
+ # libsync isn't supported or needed on MacOSX.
+ # Fuchsia is excluded due to a libsync dependency and because it's
diff --git a/devel/electron7/files/patch-ui_gl_generate__bindings.py b/devel/electron7/files/patch-ui_gl_generate__bindings.py
new file mode 100644
index 000000000000..3bb0eadf2985
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_generate__bindings.py
@@ -0,0 +1,12 @@
+--- ui/gl/generate_bindings.py.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/generate_bindings.py
+@@ -2721,6 +2721,9 @@ GLX_FUNCTIONS = [
+ 'arguments':
+ 'Display* dpy, GLXDrawable drawable, int32_t* numerator, '
+ 'int32_t* denominator' },
++{ 'return_type': '__GLXextFuncPtr',
++ 'names': ['glXGetProcAddressARB'],
++ 'arguments': 'const GLubyte* procName', },
+ { 'return_type': 'void',
+ 'names': ['glXGetSelectedEvent'],
+ 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
diff --git a/devel/electron7/files/patch-ui_gl_gl__bindings__api__autogen__glx.h b/devel/electron7/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
new file mode 100644
index 000000000000..ef4381970a40
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
@@ -0,0 +1,10 @@
+--- ui/gl/gl_bindings_api_autogen_glx.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/gl_bindings_api_autogen_glx.h
+@@ -88,6 +88,7 @@ bool glXGetMscRateOMLFn(Display* dpy,
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) override;
++__GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) override;
+ void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) override;
diff --git a/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.cc b/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.cc
new file mode 100644
index 000000000000..f968993103ec
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.cc
@@ -0,0 +1,61 @@
+--- ui/gl/gl_bindings_autogen_glx.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/gl_bindings_autogen_glx.cc
+@@ -115,6 +115,8 @@ void DriverGLX::InitializeExtensionBindings() {
+
+ ext.b_GLX_ARB_create_context =
+ gfx::HasExtension(extensions, "GLX_ARB_create_context");
++ ext.b_GLX_ARB_get_proc_address =
++ gfx::HasExtension(extensions, "GLX_ARB_get_proc_address");
+ ext.b_GLX_EXT_swap_control =
+ gfx::HasExtension(extensions, "GLX_EXT_swap_control");
+ ext.b_GLX_EXT_texture_from_pixmap =
+@@ -145,6 +147,11 @@ void DriverGLX::InitializeExtensionBindings() {
+ GetGLProcAddress("glXCreateContextAttribsARB"));
+ }
+
++ if (ext.b_GLX_ARB_get_proc_address) {
++ fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
++ GetGLProcAddress("glXGetProcAddressARB"));
++ }
++
+ if (ext.b_GLX_SGIX_fbconfig) {
+ fn.glXGetFBConfigFromVisualSGIXFn =
+ reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+@@ -346,6 +353,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
+ return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
++ return driver_->fn.glXGetProcAddressARBFn(procName);
++}
++
+ void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -646,6 +657,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
++ return glx_api_->glXGetProcAddressARBFn(procName);
++}
++
+ void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -1068,6 +1084,14 @@ bool DebugGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ << static_cast<const void*>(denominator) << ")");
+ bool result =
+ glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
++ GL_SERVICE_LOG("GL_RESULT: " << result);
++ return result;
++}
++
++__GLXextFuncPtr DebugGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ GL_SERVICE_LOG("glXGetProcAddressARB"
++ << "(" << static_cast<const void*>(procName) << ")");
++ __GLXextFuncPtr result = glx_api_->glXGetProcAddressARBFn(procName);
+ GL_SERVICE_LOG("GL_RESULT: " << result);
+ return result;
+ }
diff --git a/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.h b/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.h
new file mode 100644
index 000000000000..65f88f7a2673
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_gl__bindings__autogen__glx.h
@@ -0,0 +1,43 @@
+--- ui/gl/gl_bindings_autogen_glx.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/gl_bindings_autogen_glx.h
+@@ -104,6 +104,8 @@ typedef bool(GL_BINDING_CALL* glXGetMscRateOMLProc)(Di
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator);
++typedef __GLXextFuncPtr(GL_BINDING_CALL* glXGetProcAddressARBProc)(
++ const GLubyte* procName);
+ typedef void(GL_BINDING_CALL* glXGetSelectedEventProc)(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask);
+@@ -166,6 +168,7 @@ typedef void(GL_BINDING_CALL* glXWaitXProc)(void);
+
+ struct ExtensionsGLX {
+ bool b_GLX_ARB_create_context;
++ bool b_GLX_ARB_get_proc_address;
+ bool b_GLX_EXT_swap_control;
+ bool b_GLX_EXT_texture_from_pixmap;
+ bool b_GLX_MESA_copy_sub_buffer;
+@@ -203,6 +206,7 @@ struct ProcsGLX {
+ glXGetFBConfigFromVisualSGIXProc glXGetFBConfigFromVisualSGIXFn;
+ glXGetFBConfigsProc glXGetFBConfigsFn;
+ glXGetMscRateOMLProc glXGetMscRateOMLFn;
++ glXGetProcAddressARBProc glXGetProcAddressARBFn;
+ glXGetSelectedEventProc glXGetSelectedEventFn;
+ glXGetSyncValuesOMLProc glXGetSyncValuesOMLFn;
+ glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigFn;
+@@ -310,6 +314,7 @@ class GL_EXPORT GLXApi {
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) = 0;
++ virtual __GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) = 0;
+ virtual void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) = 0;
+@@ -394,6 +399,7 @@ class GL_EXPORT GLXApi {
+ ::gl::g_current_glx_context->glXGetFBConfigFromVisualSGIXFn
+ #define glXGetFBConfigs ::gl::g_current_glx_context->glXGetFBConfigsFn
+ #define glXGetMscRateOML ::gl::g_current_glx_context->glXGetMscRateOMLFn
++#define glXGetProcAddressARB ::gl::g_current_glx_context->glXGetProcAddressARBFn
+ #define glXGetSelectedEvent ::gl::g_current_glx_context->glXGetSelectedEventFn
+ #define glXGetSyncValuesOML ::gl::g_current_glx_context->glXGetSyncValuesOMLFn
+ #define glXGetVisualFromFBConfig \
diff --git a/devel/electron7/files/patch-ui_gl_gl__fence.cc b/devel/electron7/files/patch-ui_gl_gl__fence.cc
new file mode 100644
index 000000000000..940defa10e60
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_gl__fence.cc
@@ -0,0 +1,11 @@
+--- ui/gl/gl_fence.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/gl_fence.cc
+@@ -18,7 +18,7 @@
+ #include "ui/gl/gl_fence_apple.h"
+ #endif
+
+-#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ #define USE_GL_FENCE_ANDROID_NATIVE_FENCE_SYNC
+ #include "ui/gl/gl_fence_android_native_fence_sync.h"
+ #include "ui/gl/gl_surface_egl.h"
diff --git a/devel/electron7/files/patch-ui_gl_gl__surface__glx.cc b/devel/electron7/files/patch-ui_gl_gl__surface__glx.cc
new file mode 100644
index 000000000000..2c7d2cc20714
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_gl__surface__glx.cc
@@ -0,0 +1,14 @@
+--- ui/gl/gl_surface_glx.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/gl_surface_glx.cc
+@@ -461,7 +461,10 @@ bool GLSurfaceGLX::InitializeOneOff() {
+ return false;
+ }
+
+- const auto& visual_info = gl::GLVisualPickerGLX::GetInstance()->rgba_visual();
++ const auto& visual_info =
++ ui::IsCompositingManagerPresent()
++ ? gl::GLVisualPickerGLX::GetInstance()->rgba_visual()
++ : gl::GLVisualPickerGLX::GetInstance()->system_visual();
+ g_visual = visual_info.visual;
+ g_depth = visual_info.depth;
+ g_colormap =
diff --git a/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.cc b/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.cc
new file mode 100644
index 000000000000..c22f087d93dc
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.cc
@@ -0,0 +1,43 @@
+--- ui/gl/sync_control_vsync_provider.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/sync_control_vsync_provider.cc
+@@ -11,7 +11,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // These constants define a reasonable range for a calculated refresh interval.
+ // Calculating refreshes out of this range will be considered a fatal error.
+ const int64_t kMinVsyncIntervalUs = base::Time::kMicrosecondsPerSecond / 400;
+@@ -26,7 +26,7 @@ const double kRelativeIntervalDifferenceThreshold = 0.
+ namespace gl {
+
+ SyncControlVSyncProvider::SyncControlVSyncProvider() : gfx::VSyncProvider() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On platforms where we can't get an accurate reading on the refresh
+ // rate we fall back to the assumption that we're displaying 60 frames
+ // per second.
+@@ -48,7 +48,7 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ base::TimeTicks* timebase_out,
+ base::TimeDelta* interval_out) {
+ TRACE_EVENT0("gpu", "SyncControlVSyncProvider::GetVSyncParameters");
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The actual clock used for the system time returned by glXGetSyncValuesOML
+ // is unspecified. In practice, the clock used is likely to be either
+ // CLOCK_REALTIME or CLOCK_MONOTONIC, so we compare the returned time to the
+@@ -156,11 +156,11 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool SyncControlVSyncProvider::SupportGetVSyncParametersIfAvailable() const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.h b/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.h
new file mode 100644
index 000000000000..d30d8348da19
--- /dev/null
+++ b/devel/electron7/files/patch-ui_gl_sync__control__vsync__provider.h
@@ -0,0 +1,34 @@
+--- ui/gl/sync_control_vsync_provider.h.orig 2019-12-12 12:41:33 UTC
++++ ui/gl/sync_control_vsync_provider.h
+@@ -26,11 +26,11 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ bool SupportGetVSyncParametersIfAvailable() const override;
+
+ static constexpr bool IsSupported() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ protected:
+@@ -41,7 +41,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0;
+
+ private:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeTicks last_timebase_;
+ uint64_t last_media_stream_counter_ = 0;
+ base::TimeDelta last_good_interval_;
+@@ -52,7 +52,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ // from configuration change (monitor reconfiguration, moving windows
+ // between monitors, suspend and resume, etc.).
+ base::queue<base::TimeDelta> last_computed_intervals_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
+ };
diff --git a/devel/electron7/files/patch-ui_message__center_public_cpp_message__center__constants.h b/devel/electron7/files/patch-ui_message__center_public_cpp_message__center__constants.h
new file mode 100644
index 000000000000..3d41512f5e73
--- /dev/null
+++ b/devel/electron7/files/patch-ui_message__center_public_cpp_message__center__constants.h
@@ -0,0 +1,11 @@
+--- ui/message_center/public/cpp/message_center_constants.h.orig 2019-12-12 12:41:33 UTC
++++ ui/message_center/public/cpp/message_center_constants.h
+@@ -105,7 +105,7 @@ const int kButtonHorizontalPadding = 16; // In DIPs.
+ const int kButtonIconTopPadding = 11; // In DIPs.
+ const int kButtonIconToTitlePadding = 16; // In DIPs.
+
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ constexpr SkColor kButtonSeparatorColor = SkColorSetRGB(234, 234, 234);
+ constexpr SkColor kHoveredButtonBackgroundColor = SkColorSetRGB(243, 243, 243);
+ #endif
diff --git a/devel/electron7/files/patch-ui_message__center_views_message__popup__view.cc b/devel/electron7/files/patch-ui_message__center_views_message__popup__view.cc
new file mode 100644
index 000000000000..3acd3c58c215
--- /dev/null
+++ b/devel/electron7/files/patch-ui_message__center_views_message__popup__view.cc
@@ -0,0 +1,11 @@
+--- ui/message_center/views/message_popup_view.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/message_center/views/message_popup_view.cc
+@@ -106,7 +106,7 @@ void MessagePopupView::AutoCollapse() {
+ void MessagePopupView::Show() {
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ params.z_order = ui::ZOrderLevel::kFloatingWindow;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make the widget explicitly activatable as TYPE_POPUP is not activatable by
+ // default but we need focus for the inline reply textarea.
+ params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
diff --git a/devel/electron7/files/patch-ui_native__theme_native__theme.h b/devel/electron7/files/patch-ui_native__theme_native__theme.h
new file mode 100644
index 000000000000..ffbdbdf79e6a
--- /dev/null
+++ b/devel/electron7/files/patch-ui_native__theme_native__theme.h
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme.h.orig 2019-12-16 13:32:59 UTC
++++ ui/native_theme/native_theme.h
+@@ -49,7 +49,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
+ // The part to be painted / sized.
+ enum Part {
+ kCheckbox,
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ kFrameTopArea,
+ #endif
+ kInnerSpinButton,
diff --git a/devel/electron7/files/patch-ui_native__theme_native__theme__base.cc b/devel/electron7/files/patch-ui_native__theme_native__theme__base.cc
new file mode 100644
index 000000000000..f6863af54c40
--- /dev/null
+++ b/devel/electron7/files/patch-ui_native__theme_native__theme__base.cc
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme_base.cc.orig 2019-12-12 12:41:33 UTC
++++ ui/native_theme/native_theme_base.cc
+@@ -177,7 +177,7 @@ void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
+ case kCheckbox:
+ PaintCheckbox(canvas, state, rect, extra.button, color_scheme);
+ break;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case kFrameTopArea:
+ PaintFrameTopArea(canvas, state, rect, extra.frame_top_area,
+ color_scheme);
diff --git a/devel/electron7/files/patch-ui_platform__window_platform__window__delegate.h b/devel/electron7/files/patch-ui_platform__window_platform__window__delegate.h
new file mode 100644
index 000000000000..eed22a4cd59e
--- /dev/null
+++ b/devel/electron7/files/patch-ui_platform__window_platform__window__delegate.h
@@ -0,0 +1,20 @@
+--- ui/platform_window/platform_window_delegate.h.orig 2019-12-12 12:41:33 UTC
++++ ui/platform_window/platform_window_delegate.h
+@@ -9,7 +9,7 @@
+
+ // By default, PlatformWindowDelegateBase is used. However, different platforms
+ // should specify what delegate they would like to use if needed.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/platform_window/platform_window_delegate_linux.h"
+ #else
+ #include "ui/platform_window/platform_window_delegate_base.h"
+@@ -17,7 +17,7 @@
+
+ namespace ui {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ using PlatformWindowDelegate = PlatformWindowDelegateLinux;
+ #else
+ using PlatformWindowDelegate = PlatformWindowDelegateBase;
diff --git a/devel/electron7/files/patch-ui_platform__window_platform__window__init__properties.h b/devel/electron7/files/patch-ui_platform__window_platform__window__init__properties.h
new file mode 100644
index 000000000000..ef081500be7d
--- /dev/null
+++ b/devel/electron7/files/patch-ui_platform__window_platform__window__init__properties.h
@@ -0,0 +1,11 @@
+--- ui/platform_window/platform_window_init_properties.h.orig 2019-12-12 12:41:33 UTC
++++ ui/platform_window/platform_window_init_properties.h
+@@ -73,7 +73,7 @@ struct PlatformWindowInitProperties {
+ bool remove_standard_frame = false;
+ std::string workspace;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool prefer_dark_theme = false;
+ gfx::ImageSkia* icon = nullptr;
+ base::Optional<int> background_color;
diff --git a/devel/electron7/files/patch-ui_strings_app__locale__settings.grd b/devel/electron7/files/patch-ui_strings_app__locale__settings.grd
new file mode 100644
index 000000000000..5dbd62a2b76b
--- /dev/null
+++ b/devel/electron7/files/patch-ui_strings_app__locale__settings.grd
@@ -0,0 +1,11 @@
+--- ui/strings/app_locale_settings.grd.orig 2019-12-12 12:41:33 UTC
++++ ui/strings/app_locale_settings.grd
+@@ -187,7 +187,7 @@
+ 75%
+ </message>
+ </if>
+- <if expr="(is_linux or is_android or is_bsd) and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <!-- The font used in Web UI (e.g. History). Note that these are only
+ backups. We try to use the system font if possible. -->
+ <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true">
diff --git a/devel/electron7/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc b/devel/electron7/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
new file mode 100644
index 000000000000..74b5870d34f3
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/bubble/bubble_dialog_delegate_view.cc.orig 2019-12-12 12:41:34 UTC
++++ ui/views/bubble/bubble_dialog_delegate_view.cc
+@@ -135,7 +135,7 @@ Widget* BubbleDialogDelegateView::CreateBubble(
+ bubble_delegate->SetAnchorView(bubble_delegate->GetAnchorView());
+ Widget* bubble_widget = CreateBubbleWidget(bubble_delegate);
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Linux clips bubble windows that extend outside their parent window bounds.
+ // Mac never adjusts.
+ bubble_delegate->set_adjust_if_offscreen(false);
diff --git a/devel/electron7/files/patch-ui_views_controls_label.cc b/devel/electron7/files/patch-ui_views_controls_label.cc
new file mode 100644
index 000000000000..3c605b50a36f
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_controls_label.cc
@@ -0,0 +1,20 @@
+--- ui/views/controls/label.cc.orig 2019-12-12 12:41:34 UTC
++++ ui/views/controls/label.cc
+@@ -691,7 +691,7 @@ bool Label::OnMousePressed(const ui::MouseEvent& event
+ GetFocusManager()->SetFocusedView(this);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (event.IsOnlyMiddleMouseButton() && GetFocusManager() && !had_focus)
+ GetFocusManager()->SetFocusedView(this);
+ #endif
+@@ -876,7 +876,7 @@ bool Label::PasteSelectionClipboard() {
+ }
+
+ void Label::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (!GetObscured()) {
+ ui::ScopedClipboardWriter(ui::ClipboardBuffer::kSelection)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron7/files/patch-ui_views_controls_textfield_textfield.cc b/devel/electron7/files/patch-ui_views_controls_textfield_textfield.cc
new file mode 100644
index 000000000000..b60805ed368c
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_controls_textfield_textfield.cc
@@ -0,0 +1,73 @@
+--- ui/views/controls/textfield/textfield.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/controls/textfield/textfield.cc
+@@ -60,7 +60,7 @@
+ #include "base/win/win_util.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "base/strings/utf_string_conversions.h"
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+@@ -178,14 +178,14 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::Ke
+ case ui::VKEY_BACK:
+ if (!control)
+ return ui::TextEditCommand::DELETE_BACKWARD;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift)
+ return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
+ #endif
+ return ui::TextEditCommand::DELETE_WORD_BACKWARD;
+ case ui::VKEY_DELETE:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift && control)
+ return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
+@@ -253,7 +253,7 @@ bool IsControlKeyModifier(int flags) {
+ // Control-modified key combination, but we cannot extend it to other platforms
+ // as Control has different meanings and behaviors.
+ // https://crrev.com/2580483002/#msg46
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return flags & ui::EF_CONTROL_DOWN;
+ #else
+ return false;
+@@ -725,7 +725,7 @@ bool Textfield::OnMousePressed(const ui::MouseEvent& e
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!handled && !had_focus && event.IsOnlyMiddleMouseButton())
+ RequestFocusWithPointer(ui::EventPointerType::POINTER_TYPE_MOUSE);
+ #endif
+@@ -771,7 +771,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event
+ if (!textfield)
+ return handled;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
+@@ -918,7 +918,7 @@ void Textfield::AboutToRequestFocusFromTabTraversal(bo
+ }
+
+ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Skip any accelerator handling that conflicts with custom keybindings.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+@@ -2170,7 +2170,7 @@ bool Textfield::PasteSelectionClipboard() {
+ }
+
+ void Textfield::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) {
+ ui::ScopedClipboardWriter(ui::ClipboardBuffer::kSelection)
+ .WriteText(GetSelectedText());
diff --git a/devel/electron7/files/patch-ui_views_corewm_tooltip__aura.cc b/devel/electron7/files/patch-ui_views_corewm_tooltip__aura.cc
new file mode 100644
index 000000000000..1dbfc5e92be4
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_corewm_tooltip__aura.cc
@@ -0,0 +1,11 @@
+--- ui/views/corewm/tooltip_aura.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/corewm/tooltip_aura.cc
+@@ -42,7 +42,7 @@ constexpr int kVerticalPaddingBottom = 5;
+
+ // TODO(varkha): Update if native widget can be transparent on Linux.
+ bool CanUseTranslucentTooltipWidget() {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_WIN)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_WIN) || defined(OS_BSD)
+ return false;
+ #else
+ return true;
diff --git a/devel/electron7/files/patch-ui_views_examples_widget__example.cc b/devel/electron7/files/patch-ui_views_examples_widget__example.cc
new file mode 100644
index 000000000000..7ab749b1fd3c
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_examples_widget__example.cc
@@ -0,0 +1,11 @@
+--- ui/views/examples/widget_example.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/examples/widget_example.cc
+@@ -79,7 +79,7 @@ void WidgetExample::CreateExampleView(View* container)
+ BuildButton(container, "Popup widget", POPUP);
+ BuildButton(container, "Dialog widget", DIALOG);
+ BuildButton(container, "Modal Dialog", MODAL_DIALOG);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Windows does not support TYPE_CONTROL top-level widgets.
+ BuildButton(container, "Child widget", CHILD);
+ #endif
diff --git a/devel/electron7/files/patch-ui_views_selection__controller.cc b/devel/electron7/files/patch-ui_views_selection__controller.cc
new file mode 100644
index 000000000000..ca5b047efbad
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_selection__controller.cc
@@ -0,0 +1,11 @@
+--- ui/views/selection_controller.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/selection_controller.cc
+@@ -21,7 +21,7 @@ SelectionController::SelectionController(SelectionCont
+ delegate_(delegate),
+ handles_selection_clipboard_(false) {
+ // On Linux, update the selection clipboard on a text selection.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_handles_selection_clipboard(true);
+ #endif
+
diff --git a/devel/electron7/files/patch-ui_views_style_platform__style.cc b/devel/electron7/files/patch-ui_views_style_platform__style.cc
new file mode 100644
index 000000000000..6bb6078457e0
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_style_platform__style.cc
@@ -0,0 +1,11 @@
+--- ui/views/style/platform_style.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/style/platform_style.cc
+@@ -17,7 +17,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define DESKTOP_LINUX
+ #endif
+
diff --git a/devel/electron7/files/patch-ui_views_views__delegate.cc b/devel/electron7/files/patch-ui_views_views__delegate.cc
new file mode 100644
index 000000000000..40b97fe478dd
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_views__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/views_delegate.cc
+@@ -85,7 +85,7 @@ HICON ViewsDelegate::GetSmallWindowIcon() const {
+ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return nullptr;
+ }
diff --git a/devel/electron7/files/patch-ui_views_views__delegate.h b/devel/electron7/files/patch-ui_views_views__delegate.h
new file mode 100644
index 000000000000..b5e396ae5290
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.h.orig 2019-12-12 12:41:35 UTC
++++ ui/views/views_delegate.h
+@@ -130,7 +130,7 @@ class VIEWS_EXPORT ViewsDelegate {
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_FREEBSD)
+ virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
+ #endif
+
diff --git a/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc b/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
new file mode 100644
index 000000000000..0ae9b122b2c8
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
@@ -0,0 +1,20 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc.orig 2019-12-16 13:32:59 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+@@ -143,7 +143,7 @@ void DesktopWindowTreeHostPlatform::OnNativeWidgetCrea
+ Widget::InitParams::TYPE_WINDOW &&
+ !params.remove_standard_frame);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Setup a non_client_window_event_filter, which handles resize/move, double
+ // click and other events.
+ DCHECK(!non_client_window_event_filter_);
+@@ -699,7 +699,7 @@ void DesktopWindowTreeHostPlatform::Relayout() {
+ }
+
+ void DesktopWindowTreeHostPlatform::RemoveNonClientEventFilter() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!non_client_window_event_filter_)
+ return;
+
diff --git a/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h b/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
new file mode 100644
index 000000000000..2500bbd0a8a7
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.h
@@ -0,0 +1,11 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h.orig 2019-12-16 13:32:59 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.h
+@@ -146,7 +146,7 @@ class VIEWS_EXPORT DesktopWindowTreeHostPlatform
+ DesktopWindowTreeHostPlatform* window_parent_ = nullptr;
+ std::set<DesktopWindowTreeHostPlatform*> window_children_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A handler for events intended for non client area.
+ std::unique_ptr<WindowEventFilter> non_client_window_event_filter_;
+ #endif
diff --git a/devel/electron7/files/patch-ui_views_window_custom__frame__view.cc b/devel/electron7/files/patch-ui_views_window_custom__frame__view.cc
new file mode 100644
index 000000000000..9f0e140a6f6a
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_window_custom__frame__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/custom_frame_view.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/window/custom_frame_view.cc
+@@ -287,7 +287,7 @@ int CustomFrameView::NonClientTopBorderHeight() const
+ int CustomFrameView::CaptionButtonY() const {
+ // Maximized buttons start at window top so that even if their images aren't
+ // drawn flush with the screen edge, they still obey Fitts' Law.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD)
+ return FrameBorderThickness();
+ #else
+ return frame_->IsMaximized() ? FrameBorderThickness() : kFrameShadowThickness;
diff --git a/devel/electron7/files/patch-ui_views_window_dialog__delegate.cc b/devel/electron7/files/patch-ui_views_window_dialog__delegate.cc
new file mode 100644
index 000000000000..d63c8e0bdb2d
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_window_dialog__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/dialog_delegate.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/window/dialog_delegate.cc
+@@ -53,7 +53,7 @@ Widget* DialogDelegate::CreateDialogWidget(WidgetDeleg
+
+ // static
+ bool DialogDelegate::CanSupportCustomFrame(gfx::NativeView parent) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The new style doesn't support unparented dialogs on Linux desktop.
+ return parent != nullptr;
+ #elif defined(OS_WIN)
diff --git a/devel/electron7/files/patch-ui_views_window_frame__background.cc b/devel/electron7/files/patch-ui_views_window_frame__background.cc
new file mode 100644
index 000000000000..d3b6a0c007f7
--- /dev/null
+++ b/devel/electron7/files/patch-ui_views_window_frame__background.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/frame_background.cc.orig 2019-12-12 12:41:35 UTC
++++ ui/views/window/frame_background.cc
+@@ -106,7 +106,7 @@ void FrameBackground::PaintMaximized(gfx::Canvas* canv
+ const View* view) const {
+ // Fill the top with the frame color first so we have a constant background
+ // for areas not covered by the theme image.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ auto* native_theme = view->GetNativeTheme();
+ ui::NativeTheme::ExtraParams params;
+ params.frame_top_area.use_custom_frame = use_custom_frame_;
diff --git a/devel/electron7/files/patch-ui_webui_resources_js_cr.js b/devel/electron7/files/patch-ui_webui_resources_js_cr.js
new file mode 100644
index 000000000000..457a55e00eb9
--- /dev/null
+++ b/devel/electron7/files/patch-ui_webui_resources_js_cr.js
@@ -0,0 +1,14 @@
+--- ui/webui/resources/js/cr.js.orig 2019-12-12 12:41:35 UTC
++++ ui/webui/resources/js/cr.js
+@@ -436,6 +436,11 @@ var cr = cr || function(global) {
+ get doc() {
+ return document;
+ },
++
++ /** Whether this is on *BSD. */
++ get isBSD() {
++ return /BSD/.test(navigator.userAgent);
++ },
+
+ /** Whether we are using a Mac or not. */
+ get isMac() {
diff --git a/devel/electron7/files/patch-ui_webui_resources_js_icon.js b/devel/electron7/files/patch-ui_webui_resources_js_icon.js
new file mode 100644
index 000000000000..2cedab81d0b9
--- /dev/null
+++ b/devel/electron7/files/patch-ui_webui_resources_js_icon.js
@@ -0,0 +1,11 @@
+--- ui/webui/resources/js/icon.js.orig 2019-12-12 12:41:35 UTC
++++ ui/webui/resources/js/icon.js
+@@ -16,7 +16,7 @@ cr.define('cr.icon', function() {
+ // supports SCALE_FACTOR_100P on all non-iOS platforms.
+ supportedScaleFactors.push(1);
+ }
+- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
++ if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux || cr.isBSD) {
+ // All desktop platforms support zooming which also updates the renderer's
+ // device scale factors (a.k.a devicePixelRatio), and these platforms have
+ // high DPI assets for 2x. Let the renderer pick the closest image for
diff --git a/devel/electron7/files/patch-v8_BUILD.gn b/devel/electron7/files/patch-v8_BUILD.gn
new file mode 100644
index 000000000000..c476c1943f95
--- /dev/null
+++ b/devel/electron7/files/patch-v8_BUILD.gn
@@ -0,0 +1,32 @@
+--- v8/BUILD.gn.orig 2019-12-16 13:32:59 UTC
++++ v8/BUILD.gn
+@@ -3592,7 +3592,7 @@ v8_component("v8_libbase") {
+ }
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/base/debug/stack_trace_posix.cc",
+ "src/base/platform/platform-linux.cc",
+@@ -3612,6 +3612,12 @@ v8_component("v8_libbase") {
+ "dl",
+ "rt",
+ ]
++ } else if (is_bsd) {
++ sources += [
++ "src/base/debug/stack_trace_posix.cc",
++ "src/base/platform/platform-freebsd.cc",
++ ]
++ libs = [ "rt", "execinfo" ]
+ } else if (is_android) {
+ if (current_toolchain == host_toolchain) {
+ libs = [
+@@ -3862,6 +3868,7 @@ if (v8_use_snapshot && current_toolchain == v8_snapsho
+ "src/snapshot/embedded/platform-embedded-file-writer-win.h",
+ "src/snapshot/mksnapshot.cc",
+ ]
++ libs = ["execinfo"]
+
+ configs = [ ":internal_config" ]
+
diff --git a/devel/electron7/files/patch-v8_src_api_api.cc b/devel/electron7/files/patch-v8_src_api_api.cc
new file mode 100644
index 000000000000..2b6e04d44cc5
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_api_api.cc
@@ -0,0 +1,20 @@
+--- v8/src/api/api.cc.orig 2019-12-16 13:32:59 UTC
++++ v8/src/api/api.cc
+@@ -111,7 +111,7 @@
+ #include "src/wasm/wasm-result.h"
+ #include "src/wasm/wasm-serialization.h"
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ #include <signal.h>
+ #include "include/v8-wasm-trap-handler-posix.h"
+ #include "src/trap-handler/handler-inside-posix.h"
+@@ -5645,7 +5645,7 @@ bool v8::V8::Initialize() {
+ return true;
+ }
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
+ void* context) {
+ #if V8_TARGET_ARCH_X64 && !V8_OS_ANDROID
diff --git a/devel/electron7/files/patch-v8_src_base_cpu.cc b/devel/electron7/files/patch-v8_src_base_cpu.cc
new file mode 100644
index 000000000000..47b503fc50c9
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- v8/src/base/cpu.cc.orig 2019-12-12 12:51:12 UTC
++++ v8/src/base/cpu.cc
+@@ -424,6 +424,7 @@ CPU::CPU()
+
+ #if V8_OS_LINUX
+
++#if V8_OS_LINUX
+ CPUInfo cpu_info;
+
+ // Extract implementor from the "CPU implementer" field.
+@@ -457,6 +458,7 @@ CPU::CPU()
+ }
+ delete[] part;
+ }
++#endif
+
+ // Extract architecture from the "CPU Architecture" field.
+ // The list is well-known, unlike the the output of
diff --git a/devel/electron7/files/patch-v8_src_base_platform_platform-posix.cc b/devel/electron7/files/patch-v8_src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..55e51d5bfcff
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_base_platform_platform-posix.cc
@@ -0,0 +1,24 @@
+--- v8/src/base/platform/platform-posix.cc.orig 2019-12-12 12:51:12 UTC
++++ v8/src/base/platform/platform-posix.cc
+@@ -382,7 +382,7 @@ bool OS::DiscardSystemPages(void* address, size_t size
+
+ // static
+ bool OS::HasLazyCommits() {
+-#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX || V8_OS_FREEBSD
+ return true;
+ #else
+ // TODO(bbudge) Return true for all POSIX platforms.
+@@ -513,6 +513,12 @@ int OS::GetCurrentThreadId() {
+ return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+ return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++ return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++ return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++ return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+ return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.cc b/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.cc
new file mode 100644
index 000000000000..115fcb98328a
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.cc
@@ -0,0 +1,20 @@
+--- v8/src/trap-handler/handler-inside-posix.cc.orig 2019-12-12 12:51:13 UTC
++++ v8/src/trap-handler/handler-inside-posix.cc
+@@ -27,7 +27,7 @@
+
+ #include <signal.h>
+
+-#ifdef V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ #include <ucontext.h>
+ #elif V8_OS_MACOSX
+ #include <sys/ucontext.h>
+@@ -112,6 +112,8 @@ bool TryHandleSignal(int signum, siginfo_t* info, void
+ auto* context_rip = &uc->uc_mcontext.gregs[REG_RIP];
+ #elif V8_OS_MACOSX
+ auto* context_rip = &uc->uc_mcontext->__ss.__rip;
++#elif V8_OS_FREEBSD
++ auto* context_rip = &uc->uc_mcontext.mc_rip;
+ #else
+ #error Unsupported platform
+ #endif
diff --git a/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.h b/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.h
new file mode 100644
index 000000000000..98de30648e8b
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_trap-handler_handler-inside-posix.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/handler-inside-posix.h.orig 2019-12-12 12:51:13 UTC
++++ v8/src/trap-handler/handler-inside-posix.h
+@@ -12,7 +12,7 @@ namespace v8 {
+ namespace internal {
+ namespace trap_handler {
+
+-#if V8_OS_LINUX
++#if defined(V8_OS_LINUX) || defined(V8_OS_FREEBSD)
+ constexpr int kOobSignal = SIGSEGV;
+ #elif V8_OS_MACOSX
+ constexpr int kOobSignal = SIGBUS;
diff --git a/devel/electron7/files/patch-v8_src_trap-handler_trap-handler.h b/devel/electron7/files/patch-v8_src_trap-handler_trap-handler.h
new file mode 100644
index 000000000000..1a7e61db8c14
--- /dev/null
+++ b/devel/electron7/files/patch-v8_src_trap-handler_trap-handler.h
@@ -0,0 +1,11 @@
+--- v8/src/trap-handler/trap-handler.h.orig 2019-12-12 12:51:13 UTC
++++ v8/src/trap-handler/trap-handler.h
+@@ -23,6 +23,8 @@ namespace trap_handler {
+ #define V8_TRAP_HANDLER_SUPPORTED true
+ #elif V8_TARGET_ARCH_X64 && V8_OS_MACOSX
+ #define V8_TRAP_HANDLER_SUPPORTED true
++#elif V8_TARGET_ARCH_X64 && V8_OS_FREEBSD
++#define V8_TRAP_HANDLER_SUPPORTED true
+ #else
+ #define V8_TRAP_HANDLER_SUPPORTED false
+ #endif
diff --git a/devel/electron7/files/patch-weblayer_browser_browser__main__parts__impl.cc b/devel/electron7/files/patch-weblayer_browser_browser__main__parts__impl.cc
new file mode 100644
index 000000000000..f2da67a7eadc
--- /dev/null
+++ b/devel/electron7/files/patch-weblayer_browser_browser__main__parts__impl.cc
@@ -0,0 +1,20 @@
+--- weblayer/browser/browser_main_parts_impl.cc.orig 2019-12-12 12:41:35 UTC
++++ weblayer/browser/browser_main_parts_impl.cc
+@@ -34,7 +34,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
+@@ -70,7 +70,7 @@ int BrowserMainPartsImpl::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if defined(USE_AURA) && defined(OS_LINUX)
++#if defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/devel/electron7/files/patch-weblayer_shell_app_shell__main.cc b/devel/electron7/files/patch-weblayer_shell_app_shell__main.cc
new file mode 100644
index 000000000000..424c888bdd4c
--- /dev/null
+++ b/devel/electron7/files/patch-weblayer_shell_app_shell__main.cc
@@ -0,0 +1,20 @@
+--- weblayer/shell/app/shell_main.cc.orig 2019-12-12 12:41:35 UTC
++++ weblayer/shell/app/shell_main.cc
+@@ -18,7 +18,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #endif
+
+@@ -65,7 +65,7 @@ class MainDelegateImpl : public weblayer::MainDelegate
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path));
+ path = path.AppendASCII("web_shell");
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir));
diff --git a/devel/electron7/files/yarn.lock b/devel/electron7/files/yarn.lock
new file mode 100644
index 000000000000..7f42dbf3f1e5
--- /dev/null
+++ b/devel/electron7/files/yarn.lock
@@ -0,0 +1,7925 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/code-frame@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
+ integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
+ dependencies:
+ "@babel/highlight" "^7.0.0"
+
+"@babel/highlight@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
+ integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
+ dependencies:
+ chalk "^2.0.0"
+ esutils "^2.0.2"
+ js-tokens "^4.0.0"
+
+"@babel/runtime@^7.0.0":
+ version "7.5.2"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.2.tgz#98f584f4d03be5d8142c77107ffaedee4d5956f1"
+ integrity sha512-9M29wrrP7//JBGX70+IrDuD1w4iOYhUGpJNMQJVNAXue+cFeFlMTqBECouIziXPUphlgrfjcfiEpGX4t0WGK4g==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
+"@electron/docs-parser@^0.4.1", "@electron/docs-parser@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@electron/docs-parser/-/docs-parser-0.4.2.tgz#1d5feb0376363435b2f6833b60271ee90c26f952"
+ integrity sha512-BdEW2So0Qg7lxIET9q84DceavC1v/EyYF9PXU8vRRiwFebGPyEaJS4uqxhStAxmZslQAT4JjQc9jTd12IbG6BQ==
+ dependencies:
+ "@types/markdown-it" "^0.0.7"
+ chai "^4.2.0"
+ chalk "^2.4.2"
+ fs-extra "^7.0.1"
+ lodash.camelcase "^4.3.0"
+ markdown-it "^8.4.2"
+ minimist "^1.2.0"
+ ora "^3.4.0"
+ pretty-ms "^5.0.0"
+
+"@electron/typescript-definitions@^8.6.4":
+ version "8.6.4"
+ resolved "https://registry.yarnpkg.com/@electron/typescript-definitions/-/typescript-definitions-8.6.4.tgz#d4727c825afcebf6ff00a7d18416878288cac632"
+ integrity sha512-Fb4o56fikSE3id61U0MbPVBPcweVw8YwzO+JtT9aOorJR4baJZGmpsGxuaHeLSGv+D0Zd5XiWk13cEM/nv9fFw==
+ dependencies:
+ "@electron/docs-parser" "^0.4.1"
+ "@types/node" "^11.13.7"
+ chalk "^2.4.2"
+ colors "^1.1.2"
+ debug "^4.1.1"
+ electron-docs "^3.0.2"
+ fs-extra "^7.0.1"
+ lodash "^4.17.11"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ ora "^3.4.0"
+ pretty-ms "^5.0.0"
+ typescript "^3.4.5"
+
+"@mrmlnc/readdir-enhanced@^2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
+ integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==
+ dependencies:
+ call-me-maybe "^1.0.1"
+ glob-to-regexp "^0.3.0"
+
+"@nodelib/fs.stat@^1.1.2":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
+ integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
+
+"@octokit/endpoint@^5.1.0":
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.2.1.tgz#e5ef98bc4a41fad62b17e71af1a1710f6076b8df"
+ integrity sha512-GoUsRSRhtbCQugRY8eDWg5BnsczUZNq00qArrP7tKPHFmvz2KzJ8DoEq6IAQhLGwAOBHbZQ/Zml3DiaEKAWwkA==
+ dependencies:
+ deepmerge "4.0.0"
+ is-plain-object "^3.0.0"
+ universal-user-agent "^2.1.0"
+ url-template "^2.0.8"
+
+"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be"
+ integrity sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig==
+ dependencies:
+ deprecation "^2.0.0"
+ once "^1.4.0"
+
+"@octokit/request@^4.0.1":
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-4.1.1.tgz#614262214f48417b4d3b14e047d09a9c8e2f7a09"
+ integrity sha512-LOyL0i3oxRo418EXRSJNk/3Q4I0/NKawTn6H/CQp+wnrG1UFLGu080gSsgnWobhPo5BpUNgSQ5BRk5FOOJhD1Q==
+ dependencies:
+ "@octokit/endpoint" "^5.1.0"
+ "@octokit/request-error" "^1.0.1"
+ deprecation "^2.0.0"
+ is-plain-object "^3.0.0"
+ node-fetch "^2.3.0"
+ once "^1.4.0"
+ universal-user-agent "^2.1.0"
+
+"@octokit/rest@^16.3.2":
+ version "16.28.2"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.28.2.tgz#3fc3b8700046ab29ab1e2a4bdf49f89e94f7ba27"
+ integrity sha512-csuYiHvJ1P/GFDadVn0QhwO83R1+YREjcwCY7ZIezB6aJTRIEidJZj+R7gAkUhT687cqYb4cXTZsDVu9F+Fmug==
+ dependencies:
+ "@octokit/request" "^4.0.1"
+ "@octokit/request-error" "^1.0.2"
+ atob-lite "^2.0.0"
+ before-after-hook "^1.4.0"
+ btoa-lite "^1.0.0"
+ deprecation "^2.0.0"
+ lodash.get "^4.4.2"
+ lodash.set "^4.3.2"
+ lodash.uniq "^4.5.0"
+ octokit-pagination-methods "^1.1.0"
+ once "^1.4.0"
+ universal-user-agent "^2.0.0"
+ url-template "^2.0.8"
+
+"@primer/octicons@^9.1.1":
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/@primer/octicons/-/octicons-9.1.1.tgz#a72a59e8ec77521cc2eefb36c345f780a61c79fb"
+ integrity sha512-7EGM0+Kx39bIgaYr9bTCzFvBCxm+fqh/YJIoSns8zfCwss32ZJ2GDP3024UH709VQtM5cKFU4JcIYPHyGdSfIg==
+ dependencies:
+ object-assign "^4.1.1"
+
+"@samverschueren/stream-to-observable@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f"
+ integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==
+ dependencies:
+ any-observable "^0.3.0"
+
+"@types/anymatch@*":
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
+ integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==
+
+"@types/body-parser@*":
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
+ integrity sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/chai-as-promised@^7.1.0":
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9"
+ integrity sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^4.1.7":
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a"
+ integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==
+
+"@types/connect@*":
+ version "3.4.32"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
+ integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/eslint-visitor-keys@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
+ integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
+
+"@types/express-serve-static-core@*":
+ version "4.16.7"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz#50ba6f8a691c08a3dd9fa7fba25ef3133d298049"
+ integrity sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==
+ dependencies:
+ "@types/node" "*"
+ "@types/range-parser" "*"
+
+"@types/express@^4.16.1":
+ version "4.17.0"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287"
+ integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "*"
+ "@types/serve-static" "*"
+
+"@types/fs-extra@^5.0.5":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1"
+ integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/linkify-it@*":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-2.1.0.tgz#ea3dd64c4805597311790b61e872cbd1ed2cd806"
+ integrity sha512-Q7DYAOi9O/+cLLhdaSvKdaumWyHbm7HAk/bFwwyTuU0arR5yyCeW5GOoqt4tJTpDRxhpx9Q8kQL6vMpuw9hDSw==
+
+"@types/markdown-it@^0.0.7":
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-0.0.7.tgz#75070485a3d8ad11e7deb8287f4430be15bf4d39"
+ integrity sha512-WyL6pa76ollQFQNEaLVa41ZUUvDvPY+qAUmlsphnrpL6I9p1m868b26FyeoOmo7X3/Ta/S9WKXcEYXUSHnxoVQ==
+ dependencies:
+ "@types/linkify-it" "*"
+
+"@types/mime@*":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
+ integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
+
+"@types/mocha@^5.2.6":
+ version "5.2.7"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea"
+ integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
+
+"@types/node@*", "@types/node@^12.0.10":
+ version "12.6.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.1.tgz#d5544f6de0aae03eefbb63d5120f6c8be0691946"
+ integrity sha512-rp7La3m845mSESCgsJePNL/JQyhkOJA6G4vcwvVgkDAwHhGdq5GCumxmPjEk1MZf+8p5ZQAUE7tqgQRQTXN7uQ==
+
+"@types/node@^11.13.7":
+ version "11.13.18"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.18.tgz#758ec2bf26339d3cc83da22676b64777d0c2befe"
+ integrity sha512-sMHdXLccscaxI+Hlzz58yLQue3lQyXP+6aQniDRi5oju3n0123kcjhicVGF20WF7cHiwJ2vxMbXc4skOclosoA==
+
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/range-parser@*":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
+ integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
+
+"@types/semver@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.1.tgz#a984b405c702fa5a7ec6abc56b37f2ba35ef5af6"
+ integrity sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==
+
+"@types/serve-static@*":
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48"
+ integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/mime" "*"
+
+"@types/split@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@types/split/-/split-1.0.0.tgz#24f7c35707450b002f203383228f5a2bc1e6c228"
+ integrity sha512-pm9S1mkr+av0j7D6pFyqhBxXDbnbO9gqj4nb8DtGtCewvj0XhIv089SSwXrjrIizT1UquO8/h83hCut0pa3u8A==
+ dependencies:
+ "@types/node" "*"
+ "@types/through" "*"
+
+"@types/tapable@*":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
+ integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
+
+"@types/through@*":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93"
+ integrity sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==
+ dependencies:
+ "@types/node" "*"
+
+"@types/uglify-js@*":
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
+ integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
+ dependencies:
+ source-map "^0.6.1"
+
+"@types/unist@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
+"@types/webpack-env@^1.13.9":
+ version "1.13.9"
+ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.9.tgz#a67287861c928ebf4159a908d1fb1a2a34d4097a"
+ integrity sha512-p8zp5xqkly3g4cCmo2mKOHI9+Z/kObmDj0BmjbDDJQlgDTiEGTbm17MEwTAusV6XceCy+bNw9q/ZHXHyKo3zkg==
+
+"@types/webpack@^4.4.32":
+ version "4.4.34"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.34.tgz#e5f88b9a795da11683b4ec4a07d1c2b023b19810"
+ integrity sha512-GnEBgjHsfO1M7DIQ0dAupSofcmDItE3Zsu3reK8SQpl/6N0rtUQxUmQzVFAS5ou/FGjsYKjXAWfItLZ0kNFTfQ==
+ dependencies:
+ "@types/anymatch" "*"
+ "@types/node" "*"
+ "@types/tapable" "*"
+ "@types/uglify-js" "*"
+ source-map "^0.6.0"
+
+"@typescript-eslint/eslint-plugin@^1.4.2":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.11.0.tgz#870f752c520db04db6d3668af7479026a6f2fb9a"
+ integrity sha512-mXv9ccCou89C8/4avKHuPB2WkSZyY/XcTQUXd5LFZAcLw1I3mWYVjUu6eS9Ja0QkP/ClolbcW9tb3Ov/pMdcqw==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "1.11.0"
+ eslint-utils "^1.3.1"
+ functional-red-black-tree "^1.0.1"
+ regexpp "^2.0.1"
+ tsutils "^3.7.0"
+
+"@typescript-eslint/experimental-utils@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.11.0.tgz#594abe47091cbeabac1d6f9cfed06d0ad99eb7e3"
+ integrity sha512-7LbfaqF6B8oa8cp/315zxKk8FFzosRzzhF8Kn/ZRsRsnpm7Qcu25cR/9RnAQo5utZ2KIWVgaALr+ZmcbG47ruw==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "1.11.0"
+ eslint-scope "^4.0.0"
+
+"@typescript-eslint/parser@^1.4.2":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.11.0.tgz#2f6d4f7e64eeb1e7c25b422f8df14d0c9e508e36"
+ integrity sha512-5xBExyXaxVyczrZvbRKEXvaTUFFq7gIM9BynXukXZE0zF3IQP/FxF4mPmmh3gJ9egafZFqByCpPTFm3dk4SY7Q==
+ dependencies:
+ "@types/eslint-visitor-keys" "^1.0.0"
+ "@typescript-eslint/experimental-utils" "1.11.0"
+ "@typescript-eslint/typescript-estree" "1.11.0"
+ eslint-visitor-keys "^1.0.0"
+
+"@typescript-eslint/typescript-estree@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.11.0.tgz#b7b5782aab22e4b3b6d84633652c9f41e62d37d5"
+ integrity sha512-fquUHF5tAx1sM2OeRCC7wVxFd1iMELWMGCzOSmJ3pLzArj9+kRixdlC4d5MncuzXpjEqc6045p3KwM0o/3FuUA==
+ dependencies:
+ lodash.unescape "4.0.1"
+ semver "5.5.0"
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
+accepts@~1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
+ integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
+ dependencies:
+ mime-types "~2.1.24"
+ negotiator "0.6.2"
+
+acorn-jsx@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
+ integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+
+acorn@^6.0.2, acorn@^6.0.7, acorn@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3"
+ integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==
+
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.0.0, ajv-keywords@^3.1.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.0, ajv@^6.5.5, ajv@^6.9.1:
+ version "6.10.1"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.1.tgz#ebf8d3af22552df9dd049bfbe50cc2390e823593"
+ integrity sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-escapes@^3.0.0, ansi-escapes@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
+ integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
+
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+ansi-regex@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+ integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+any-observable@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
+ integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
+
+anymatch@^1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+ integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
+ dependencies:
+ micromatch "^2.1.5"
+ normalize-path "^2.0.0"
+
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09"
+ integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+aproba@^1.0.3, aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
+are-we-there-yet@~1.1.2:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
+
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
+
+arrify@^1.0.0, arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+
+asar@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/asar/-/asar-1.0.0.tgz#5624ffa1369aa929871dfc036de02c20871bdc2e"
+ integrity sha512-MBiDU5cDr9UWuY2F0zq2fZlnyRq1aOPmJGMas22Qa14K1odpRXL3xkMHPN3uw2hAK5mD89Q+/KidOUtpi4V0Cg==
+ dependencies:
+ chromium-pickle-js "^0.2.0"
+ commander "^2.19.0"
+ cuint "^0.2.2"
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ pify "^4.0.1"
+ tmp-promise "^1.0.5"
+
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assertion-error@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+ integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.0, async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob-lite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696"
+ integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
+
+aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
+
+babel-code-frame@^6.26.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
+bail@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b"
+ integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==
+
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+base64-js@^1.0.2:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+ integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
+ dependencies:
+ tweetnacl "^0.14.3"
+
+before-after-hook@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d"
+ integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==
+
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
+bl@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
+ integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
+ dependencies:
+ readable-stream "^2.3.5"
+ safe-buffer "^5.1.1"
+
+bluebird@^3.5.0, bluebird@^3.5.5:
+ version "3.5.5"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f"
+ integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
+body-parser@1.19.0:
+ version "1.19.0"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
+ integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
+ dependencies:
+ bytes "3.1.0"
+ content-type "~1.0.4"
+ debug "2.6.9"
+ depd "~1.1.2"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ on-finished "~2.3.0"
+ qs "6.7.0"
+ raw-body "2.4.0"
+ type-is "~1.6.17"
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
+braces@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
+ dependencies:
+ pako "~0.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+btoa-lite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
+ integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
+
+buffer-alloc-unsafe@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
+ integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
+
+buffer-alloc@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
+ integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
+ dependencies:
+ buffer-alloc-unsafe "^1.1.0"
+ buffer-fill "^1.0.0"
+
+buffer-fill@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
+ integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
+
+buffer-from@^1.0.0, buffer-from@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
+bytes@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
+ integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+
+cacache@^11.3.2:
+ version "11.3.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc"
+ integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
+call-me-maybe@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+ integrity sha1-JtII6onje1y95gJQoV8DHBak1ms=
+
+caller-callsite@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134"
+ integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=
+ dependencies:
+ callsites "^2.0.0"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+ dependencies:
+ callsites "^0.2.0"
+
+caller-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4"
+ integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=
+ dependencies:
+ caller-callsite "^2.0.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
+
+camelcase@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
+
+camelcase@^5.0.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
+capture-stack-trace@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+
+ccount@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386"
+ integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w==
+
+chai@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5"
+ integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==
+ dependencies:
+ assertion-error "^1.1.0"
+ check-error "^1.0.2"
+ deep-eql "^3.0.1"
+ get-func-name "^2.0.0"
+ pathval "^1.1.0"
+ type-detect "^4.0.5"
+
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+character-entities-html4@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef"
+ integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg==
+
+character-entities-legacy@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4"
+ integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==
+
+character-entities@^1.0.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6"
+ integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==
+
+character-reference-invalid@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85"
+ integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
+check-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
+ integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
+
+check-for-leaks@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/check-for-leaks/-/check-for-leaks-1.2.1.tgz#4ac108ee3f8e6b99f5ad36f6b98cba1d7f4816d0"
+ integrity sha512-9OdOSRZY6N0w5JCdJpqsC5MkD6EPGYpHmhtf4l5nl3DRETDZshP6C1EGN/vVhHDTY6AsOK3NhdFfrMe3NWZl7g==
+ dependencies:
+ anymatch "^3.0.2"
+ minimist "^1.2.0"
+ parse-gitignore "^0.4.0"
+ walk-sync "^0.3.2"
+
+checksum@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/checksum/-/checksum-0.1.1.tgz#dc6527d4c90be8560dbd1ed4cecf3297d528e9e9"
+ integrity sha1-3GUn1MkL6FYNvR7Uzs8yl9Uo6ek=
+ dependencies:
+ optimist "~0.3.5"
+
+chokidar@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+chokidar@^2.0.2:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5"
+ integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.0.1, chownr@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6"
+ integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==
+
+chrome-trace-event@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+chromium-pickle-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+ integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+circular-json@^0.3.1:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+ integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+cli-cursor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-cursor@^2.0.0, cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-spinners@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
+ integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=
+
+cli-spinners@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77"
+ integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==
+
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+co@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
+ integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collapse-white-space@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a"
+ integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+colors@^1.1.2:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
+ integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
+
+combined-stream@^1.0.6, combined-stream@~1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0:
+ version "2.20.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
+ integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@^1.5.0, concat-stream@^1.5.1:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
+content-disposition@0.5.3:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
+ integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
+ dependencies:
+ safe-buffer "5.1.2"
+
+content-type@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
+
+cookie@0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
+ integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
+
+core-util-is@1.0.2, core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cosmiconfig@^5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
+ integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
+ dependencies:
+ import-fresh "^2.0.0"
+ is-directory "^0.3.1"
+ js-yaml "^3.13.1"
+ parse-json "^4.0.0"
+
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-error-class@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+cuint@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
+ integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
+ dependencies:
+ array-find-index "^1.0.1"
+
+cyclist@~0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
+ integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-fns@^1.27.2:
+ version "1.30.1"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
+ integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
+
+debug-log@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+ integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=
+
+debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0, debug@^3.2.6:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.0.1, debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^1.1.2, decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
+
+dedent@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
+ integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=
+
+deep-eql@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
+ integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
+ dependencies:
+ type-detect "^4.0.0"
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
+deepmerge@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09"
+ integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==
+
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+ dependencies:
+ clone "^1.0.2"
+
+define-properties@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
+deglob@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.1.tgz#d268e168727799862e8eac07042e165957c1f3be"
+ integrity sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==
+ dependencies:
+ find-root "^1.0.0"
+ glob "^7.0.5"
+ ignore "^3.0.9"
+ pkg-config "^1.1.0"
+ run-parallel "^1.1.2"
+ uniq "^1.0.1"
+
+del@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
+ dependencies:
+ globby "^6.1.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ p-map "^1.1.1"
+ pify "^3.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
+
+depd@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+
+deprecation@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
+ integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
+
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
+
+detect-libc@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
+
+diff@^3.1.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+dir-glob@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
+dotenv-safe@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/dotenv-safe/-/dotenv-safe-4.0.4.tgz#8b0e7ced8e70b1d3c5d874ef9420e406f39425b3"
+ integrity sha1-iw587Y5wsdPF2HTvlCDkBvOUJbM=
+ dependencies:
+ dotenv "^4.0.0"
+
+dotenv@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
+ integrity sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=
+
+dugite@^1.45.0:
+ version "1.87.0"
+ resolved "https://registry.yarnpkg.com/dugite/-/dugite-1.87.0.tgz#ba42c25401420a92c6c8f0c71823ac54124b4b65"
+ integrity sha512-+aW2Ql3yw1AEO8Z8nVbjOAEzsinMJMmAg4uf5lzTewFUAHd0danuMPXMP9uMuGuUYN/LQtt4kR2XLuWoD8wRSQ==
+ dependencies:
+ checksum "^0.1.1"
+ mkdirp "^0.5.1"
+ progress "^2.0.3"
+ request "^2.88.0"
+ rimraf "^2.5.4"
+ tar "^4.4.7"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+
+duplexer@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
+
+duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+
+electron-docs@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/electron-docs/-/electron-docs-3.0.2.tgz#340d57e6c0dbf86a97249fd451dff6221021754a"
+ integrity sha1-NA1X5sDb+GqXJJ/UUd/2IhAhdUo=
+ dependencies:
+ got "^6.3.0"
+ gunzip-maybe "^1.3.1"
+ node-dir "^0.1.12"
+ ora "^0.2.3"
+ path-exists "^3.0.0"
+ pify "^2.3.0"
+ semver "^5.1.0"
+ tar-fs "^1.13.0"
+
+elegant-spinner@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+ integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=
+
+elliptic@^6.0.0:
+ version "6.5.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca"
+ integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@4.1.0, enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+ensure-posix-path@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.1.1.tgz#3c62bdb19fa4681544289edb2b382adc029179ce"
+ integrity sha512-VWU0/zXzVbeJNXvME/5EmLuEj2TauvoaTz6aFYK1Z92JCBlDlZ3Gu0tuGR42kpW1754ywTs+QB0g5TP0oj9Zaw==
+
+entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
+error-ex@^1.2.0, error-ex@^1.3.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
+ dependencies:
+ is-arrayish "^0.2.1"
+
+es-abstract@^1.7.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ dependencies:
+ es-to-primitive "^1.2.0"
+ function-bind "^1.1.1"
+ has "^1.0.3"
+ is-callable "^1.1.4"
+ is-regex "^1.0.4"
+ object-keys "^1.0.12"
+
+es-to-primitive@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+es6-object-assign@^1.0.3:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c"
+ integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+eslint-config-standard-jsx@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz#90c9aa16ac2c4f8970c13fc7efc608bacd02da70"
+ integrity sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==
+
+eslint-config-standard@12.0.0, eslint-config-standard@^12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+ integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.1, eslint-import-resolver-node@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.5.0"
+
+eslint-module-utils@^2.2.0, eslint-module-utils@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a"
+ integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^2.0.0"
+
+eslint-plugin-es@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6"
+ integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==
+ dependencies:
+ eslint-utils "^1.3.0"
+ regexpp "^2.0.1"
+
+eslint-plugin-import@^2.17.2:
+ version "2.18.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz#7a5ba8d32622fb35eb9c8db195c2090bd18a3678"
+ integrity sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig==
+ dependencies:
+ array-includes "^3.0.3"
+ contains-path "^0.1.0"
+ debug "^2.6.9"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.2"
+ eslint-module-utils "^2.4.0"
+ has "^1.0.3"
+ lodash "^4.17.11"
+ minimatch "^3.0.4"
+ read-pkg-up "^2.0.0"
+ resolve "^1.11.0"
+
+eslint-plugin-import@~2.14.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8"
+ integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==
+ dependencies:
+ contains-path "^0.1.0"
+ debug "^2.6.8"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.1"
+ eslint-module-utils "^2.2.0"
+ has "^1.0.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+ resolve "^1.6.0"
+
+eslint-plugin-mocha@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz#cf3eb18ae0e44e433aef7159637095a7cb19b15b"
+ integrity sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A==
+ dependencies:
+ ramda "^0.26.1"
+
+eslint-plugin-node@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964"
+ integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==
+ dependencies:
+ eslint-plugin-es "^1.3.1"
+ eslint-utils "^1.3.1"
+ ignore "^5.0.2"
+ minimatch "^3.0.4"
+ resolve "^1.8.1"
+ semver "^5.5.0"
+
+eslint-plugin-node@~7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz#a6e054e50199b2edd85518b89b4e7b323c9f36db"
+ integrity sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==
+ dependencies:
+ eslint-plugin-es "^1.3.1"
+ eslint-utils "^1.3.1"
+ ignore "^4.0.2"
+ minimatch "^3.0.4"
+ resolve "^1.8.1"
+ semver "^5.5.0"
+
+eslint-plugin-promise@~4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2"
+ integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==
+
+eslint-plugin-react@~7.11.1:
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c"
+ integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==
+ dependencies:
+ array-includes "^3.0.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.0.1"
+ prop-types "^15.6.2"
+
+eslint-plugin-standard@^4.0.0, eslint-plugin-standard@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c"
+ integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==
+
+eslint-plugin-typescript@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-typescript/-/eslint-plugin-typescript-0.14.0.tgz#068549c3f4c7f3f85d88d398c29fa96bf500884c"
+ integrity sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==
+ dependencies:
+ requireindex "~1.1.0"
+
+eslint-scope@^4.0.0, eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-utils@^1.3.0, eslint-utils@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
+ integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
+
+eslint-visitor-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
+ integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+
+eslint@^5.13.0:
+ version "5.16.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
+ integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.9.1"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^4.0.3"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^5.0.1"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.7.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^6.2.2"
+ js-yaml "^3.13.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.11"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^5.5.1"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+
+eslint@~5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.4.0.tgz#d068ec03006bb9e06b429dc85f7e46c1b69fac62"
+ integrity sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==
+ dependencies:
+ ajv "^6.5.0"
+ babel-code-frame "^6.26.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^3.1.0"
+ doctrine "^2.1.0"
+ eslint-scope "^4.0.0"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^4.0.0"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ functional-red-black-tree "^1.0.1"
+ glob "^7.1.2"
+ globals "^11.7.0"
+ ignore "^4.0.2"
+ imurmurhash "^0.1.4"
+ inquirer "^5.2.0"
+ is-resolvable "^1.1.0"
+ js-yaml "^3.11.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.5"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.2"
+ pluralize "^7.0.0"
+ progress "^2.0.0"
+ regexpp "^2.0.0"
+ require-uncached "^1.0.3"
+ semver "^5.5.0"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^4.0.3"
+ text-table "^0.2.0"
+
+espree@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
+ integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
+ dependencies:
+ acorn "^6.0.2"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+espree@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
+ integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
+ dependencies:
+ acorn "^6.0.7"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
+ dependencies:
+ estraverse "^4.1.0"
+
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+
+events-to-array@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6"
+ integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=
+
+events@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
+ integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+ integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
+ dependencies:
+ fill-range "^2.1.0"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+express@^4.16.4:
+ version "4.17.1"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
+ integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
+ dependencies:
+ accepts "~1.3.7"
+ array-flatten "1.1.1"
+ body-parser "1.19.0"
+ content-disposition "0.5.3"
+ content-type "~1.0.4"
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "~1.1.2"
+ fresh "0.5.2"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.5"
+ qs "6.7.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.1.2"
+ send "0.17.1"
+ serve-static "1.14.1"
+ setprototypeof "1.1.1"
+ statuses "~1.5.0"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@^3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
+ dependencies:
+ is-extglob "^1.0.0"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
+
+fast-glob@^2.0.2:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d"
+ integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==
+ dependencies:
+ "@mrmlnc/readdir-enhanced" "^2.2.1"
+ "@nodelib/fs.stat" "^1.1.2"
+ glob-parent "^3.1.0"
+ is-glob "^4.0.0"
+ merge2 "^1.2.3"
+ micromatch "^3.1.10"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fault@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e"
+ integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA==
+ dependencies:
+ format "^0.2.2"
+
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
+
+fill-range@^2.1.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^3.0.0"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+finalhandler@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
+ integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
+ dependencies:
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.3"
+ statuses "~1.5.0"
+ unpipe "~1.0.0"
+
+find-cache-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
+find-root@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+ dependencies:
+ locate-path "^2.0.0"
+
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+find-up@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^1.2.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+ dependencies:
+ circular-json "^0.3.1"
+ graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
+ write "^0.2.1"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
+flatted@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
+ integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
+
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
+fn-name@^2.0.1, fn-name@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+ integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
+
+folder-hash@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/folder-hash/-/folder-hash-2.1.2.tgz#7109f9cd0cbca271936d1b5544b156d6571e6cfd"
+ integrity sha512-PmMwEZyNN96EMshf7sek4OIB7ADNsHOJ7VIw7pO0PBI0BNfEsi7U8U56TBjjqqwQ0WuBv8se0HEfmbw5b/Rk+w==
+ dependencies:
+ debug "^3.1.0"
+ graceful-fs "~4.1.11"
+ minimatch "~3.0.4"
+
+for-in@^1.0.1, for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+format@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
+ integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
+
+forwarded@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
+fs-constants@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs-minipass@^1.2.5:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07"
+ integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==
+ dependencies:
+ minipass "^2.2.1"
+
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+fsevents@^1.0.0, fsevents@^1.2.7:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f"
+ integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==
+ dependencies:
+ nan "^2.12.1"
+ node-pre-gyp "^0.12.0"
+
+function-bind@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+g-status@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/g-status/-/g-status-2.0.2.tgz#270fd32119e8fc9496f066fe5fe88e0a6bc78b97"
+ integrity sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==
+ dependencies:
+ arrify "^1.0.1"
+ matcher "^1.0.0"
+ simple-git "^1.85.0"
+
+gauge@~2.7.3:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-func-name@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
+ integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
+
+get-own-enumerable-property-symbols@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
+ integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stdin@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6"
+ integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
+ dependencies:
+ is-glob "^2.0.0"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-to-regexp@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
+ integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+ version "7.1.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
+ integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
+globals@^11.7.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d"
+ integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "2.0.0"
+ fast-glob "^2.0.2"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+got@^6.3.0:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b"
+ integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==
+
+graceful-fs@~4.1.11:
+ version "4.1.15"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+ integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
+
+gunzip-maybe@^1.3.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.1.tgz#39c72ed89d1b49ba708e18776500488902a52027"
+ integrity sha512-qtutIKMthNJJgeHQS7kZ9FqDq59/Wn0G2HYCRNjpup7yKfVI6/eqwpmroyZGFoCYaG+sW6psNVb4zoLADHpp2g==
+ dependencies:
+ browserify-zlib "^0.1.4"
+ is-deflate "^1.0.0"
+ is-gzip "^1.0.0"
+ peek-stream "^1.1.0"
+ pumpify "^1.3.3"
+ through2 "^2.0.3"
+
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
+
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
+ dependencies:
+ ajv "^6.5.5"
+ har-schema "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
+
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1, has@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
+
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+ integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
+
+http-errors@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
+ integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.3"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-errors@~1.7.2:
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
+ integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
+ dependencies:
+ depd "~1.1.2"
+ inherits "2.0.4"
+ setprototypeof "1.1.1"
+ statuses ">= 1.5.0 < 2"
+ toidentifier "1.0.0"
+
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+husky@^2.2.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-2.7.0.tgz#c0a9a6a3b51146224e11bba0b46bba546e461d05"
+ integrity sha512-LIi8zzT6PyFpcYKdvWRCn/8X+6SuG2TgYYMrM6ckEYhlp44UcEduVymZGIZNLiwOUjrEud+78w/AsAiqJA/kRg==
+ dependencies:
+ cosmiconfig "^5.2.0"
+ execa "^1.0.0"
+ find-up "^3.0.0"
+ get-stdin "^7.0.0"
+ is-ci "^2.0.0"
+ pkg-dir "^4.1.0"
+ please-upgrade-node "^3.1.1"
+ read-pkg "^5.1.1"
+ run-node "^1.0.0"
+ slash "^3.0.0"
+
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
+
+ignore@^3.0.9, ignore@^3.2.0, ignore@^3.3.5:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+ignore@^4.0.2, ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.0.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558"
+ integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ==
+
+import-fresh@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
+ integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY=
+ dependencies:
+ caller-path "^2.0.0"
+ resolve-from "^3.0.0"
+
+import-fresh@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
+ integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+ integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
+
+inherits@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@^1.3.4, ini@^1.3.5, ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+inquirer@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726"
+ integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.1.0"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^5.5.2"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
+inquirer@^6.2.2:
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b"
+ integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw==
+ dependencies:
+ ansi-escapes "^3.2.0"
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^3.0.3"
+ figures "^2.0.0"
+ lodash "^4.17.11"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^6.4.0"
+ string-width "^2.1.0"
+ strip-ansi "^5.1.0"
+ through "^2.3.6"
+
+interpret@1.2.0, interpret@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
+ipaddr.js@1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
+ integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
+
+irregular-plurals@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872"
+ integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-alphabetical@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8"
+ integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==
+
+is-alphanumeric@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4"
+ integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=
+
+is-alphanumerical@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c"
+ integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==
+ dependencies:
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.1.4, is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
+
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-decimal@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7"
+ integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==
+
+is-deflate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14"
+ integrity sha1-yGKQHDwWH7CdrHzcfnhPgOmPLxQ=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
+is-directory@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
+
+is-empty@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b"
+ integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s=
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-glob@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
+ integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-gzip@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+ integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=
+
+is-hexadecimal@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee"
+ integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==
+
+is-hidden@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-hidden/-/is-hidden-1.1.2.tgz#6497d48ec5affc7da0f11a3c0dadceb6752e8edd"
+ integrity sha512-kytBeNVW2QTIqZdJBDKIjP+EkUTzDT07rsc111w/gxqR6wK3ODkOswcpxgED6HU6t7fEhOxqojVZ2a2kU9rj+A==
+
+is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
+
+is-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470"
+ integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA=
+
+is-observable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e"
+ integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==
+ dependencies:
+ symbol-observable "^1.1.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
+
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
+is-plain-object@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928"
+ integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==
+ dependencies:
+ isobject "^4.0.0"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
+
+is-regex@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
+ dependencies:
+ has "^1.0.1"
+
+is-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
+ integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk=
+
+is-resolvable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+ integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
+
+is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
+
+is-whitespace-character@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac"
+ integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==
+
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-word-character@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa"
+ integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
+
+isobject@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
+ integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.7, js-yaml@^3.6.1:
+ version "3.13.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
+ integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
+jsx-ast-utils@^2.0.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb"
+ integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==
+ dependencies:
+ array-includes "^3.0.3"
+ object.assign "^4.1.0"
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
+klaw@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146"
+ integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==
+ dependencies:
+ graceful-fs "^4.1.9"
+
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+linkify-it@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
+ integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
+ dependencies:
+ uc.micro "^1.0.1"
+
+lint-staged@^8.1.0:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.2.1.tgz#752fcf222d9d28f323a3b80f1e668f3654ff221f"
+ integrity sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==
+ dependencies:
+ chalk "^2.3.1"
+ commander "^2.14.1"
+ cosmiconfig "^5.2.0"
+ debug "^3.1.0"
+ dedent "^0.7.0"
+ del "^3.0.0"
+ execa "^1.0.0"
+ g-status "^2.0.2"
+ is-glob "^4.0.0"
+ is-windows "^1.0.2"
+ listr "^0.14.2"
+ listr-update-renderer "^0.5.0"
+ lodash "^4.17.11"
+ log-symbols "^2.2.0"
+ micromatch "^3.1.8"
+ npm-which "^3.0.1"
+ p-map "^1.1.1"
+ path-is-inside "^1.0.2"
+ pify "^3.0.0"
+ please-upgrade-node "^3.0.2"
+ staged-git-files "1.1.2"
+ string-argv "^0.0.2"
+ stringify-object "^3.2.2"
+ yup "^0.27.0"
+
+lint@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/lint/-/lint-1.1.2.tgz#35ed064f322547c331358d899868664968ba371f"
+ integrity sha1-Ne0GTzIlR8MxNY2JmGhmSWi6Nx8=
+
+listr-silent-renderer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+ integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=
+
+listr-update-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2"
+ integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==
+ dependencies:
+ chalk "^1.1.3"
+ cli-truncate "^0.2.1"
+ elegant-spinner "^1.0.1"
+ figures "^1.7.0"
+ indent-string "^3.0.0"
+ log-symbols "^1.0.2"
+ log-update "^2.3.0"
+ strip-ansi "^3.0.1"
+
+listr-verbose-renderer@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db"
+ integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==
+ dependencies:
+ chalk "^2.4.1"
+ cli-cursor "^2.1.0"
+ date-fns "^1.27.2"
+ figures "^2.0.0"
+
+listr@^0.14.2:
+ version "0.14.3"
+ resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586"
+ integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==
+ dependencies:
+ "@samverschueren/stream-to-observable" "^0.3.0"
+ is-observable "^1.1.0"
+ is-promise "^2.1.0"
+ is-stream "^1.1.0"
+ listr-silent-renderer "^1.1.1"
+ listr-update-renderer "^0.5.0"
+ listr-verbose-renderer "^0.5.0"
+ p-map "^2.0.0"
+ rxjs "^6.3.3"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+load-plugin@^2.0.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-2.3.1.tgz#8024739afb4aa04de1e602e15e5b1a678c443d00"
+ integrity sha512-dYB1lbwqHgPTrruy9glukCu8Ya9vzj6TMfouCtj2H/GuJ+8syioisgKTBPxnCi6m8K8jINKfTOxOHngFkUYqHw==
+ dependencies:
+ npm-prefix "^1.2.0"
+ resolve-from "^5.0.0"
+
+loader-runner@^2.3.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
+lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.get@^4.4.2:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+ integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
+
+lodash.range@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d"
+ integrity sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=
+
+lodash.set@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+ integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=
+
+lodash.unescape@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
+ integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
+
+lodash.uniq@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
+
+lodash@^4.0.0, lodash@^4.17.11:
+ version "4.17.15"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
+ integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+
+lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
+ version "4.17.14"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
+ integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==
+
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=
+ dependencies:
+ chalk "^1.0.0"
+
+log-symbols@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
+ integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==
+ dependencies:
+ chalk "^2.0.1"
+
+log-update@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
+ integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg=
+ dependencies:
+ ansi-escapes "^3.0.0"
+ cli-cursor "^2.0.0"
+ wrap-ansi "^3.0.1"
+
+longest-streak@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105"
+ integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw==
+
+loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+macos-release@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
+ integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
+
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+make-error@^1.1.1:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
+ integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
+
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
+
+markdown-escapes@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5"
+ integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==
+
+markdown-extensions@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3"
+ integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==
+
+markdown-it@^8.4.2:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
+ integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
+ dependencies:
+ argparse "^1.0.7"
+ entities "~1.1.1"
+ linkify-it "^2.0.0"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
+markdown-table@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60"
+ integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==
+
+matcher-collection@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.1.2.tgz#1076f506f10ca85897b53d14ef54f90a5c426838"
+ integrity sha512-YQ/teqaOIIfUHedRam08PB3NK7Mjct6BvzRnJmpGDm8uFXpNr1sbY4yuflI5JcEs6COpYA0FpRQhSDBf1tT95g==
+ dependencies:
+ minimatch "^3.0.2"
+
+matcher@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2"
+ integrity sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==
+ dependencies:
+ escape-string-regexp "^1.0.4"
+
+math-random@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
+ integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+mdast-comment-marker@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.1.tgz#9c9c18e1ed57feafc1965d92b028f37c3c8da70d"
+ integrity sha512-TWZDaUtPLwKX1pzDIY48MkSUQRDwX/HqbTB4m3iYdL/zosi/Z6Xqfdv0C0hNVKvzrPjZENrpWDt4p4odeVO0Iw==
+
+mdast-util-compact@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d"
+ integrity sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+mdast-util-heading-style@^1.0.2:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-1.0.5.tgz#81b2e60d76754198687db0e8f044e42376db0426"
+ integrity sha512-8zQkb3IUwiwOdUw6jIhnwM6DPyib+mgzQuHAe7j2Hy1rIarU4VUxe472bp9oktqULW3xqZE+Kz6OD4Gi7IA3vw==
+
+mdast-util-to-string@^1.0.2:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz#7d85421021343b33de1552fc71cb8e5b4ae7536d"
+ integrity sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg==
+
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.1.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+
+merge2@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
+ integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
+micromatch@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@1.40.0:
+ version "1.40.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
+ integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
+
+mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
+ version "2.1.24"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
+ integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
+ dependencies:
+ mime-db "1.40.0"
+
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+mimic-fn@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+
+mimic-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
+minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+minipass@^2.2.1, minipass@^2.3.5:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
+ integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
+ dependencies:
+ minipass "^2.2.1"
+
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+ dependencies:
+ minimist "0.0.8"
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+ms@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+nan@^2.12.1:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
+ integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+needle@^2.2.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
+ integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
+ dependencies:
+ debug "^3.2.6"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
+
+negotiator@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
+ integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
+
+neo-async@^2.5.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
+ integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
+node-dir@^0.1.12:
+ version "0.1.17"
+ resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
+ integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=
+ dependencies:
+ minimatch "^3.0.2"
+
+node-fetch@^2.3.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
+ integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
+
+node-libs-browser@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-pre-gyp@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
+ integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+nopt@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
+ dependencies:
+ abbrev "1"
+ osenv "^0.1.4"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+normalize-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+npm-bundled@^1.0.1:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd"
+ integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==
+
+npm-packlist@^1.1.6:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44"
+ integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
+npm-path@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
+ integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==
+ dependencies:
+ which "^1.2.10"
+
+npm-prefix@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/npm-prefix/-/npm-prefix-1.2.0.tgz#e619455f7074ba54cc66d6d0d37dd9f1be6bcbc0"
+ integrity sha1-5hlFX3B0ulTMZtbQ033Z8b5ry8A=
+ dependencies:
+ rc "^1.1.0"
+ shellsubstitute "^1.1.0"
+ untildify "^2.1.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
+npm-which@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
+ integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=
+ dependencies:
+ commander "^2.9.0"
+ npm-path "^2.0.2"
+ which "^1.2.10"
+
+npmlog@^4.0.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.3"
+ set-blocking "~2.0.0"
+
+nugget@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
+ integrity sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=
+ dependencies:
+ debug "^2.1.3"
+ minimist "^1.1.0"
+ pretty-bytes "^1.0.2"
+ progress-stream "^1.1.0"
+ request "^2.45.0"
+ single-line-log "^1.1.2"
+ throttleit "0.0.2"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
+object-keys@^1.0.11, object-keys@^1.0.12:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object-keys@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
+
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
+
+object.assign@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
+ integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.1"
+ has-symbols "^1.0.0"
+ object-keys "^1.0.11"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
+octokit-pagination-methods@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4"
+ integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==
+
+on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
+ dependencies:
+ ee-first "1.1.1"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+ integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
+
+onetime@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
+ dependencies:
+ mimic-fn "^1.0.0"
+
+optimist@~0.3.5:
+ version "0.3.7"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9"
+ integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=
+ dependencies:
+ wordwrap "~0.0.2"
+
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+ora@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
+ integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=
+ dependencies:
+ chalk "^1.1.1"
+ cli-cursor "^1.0.2"
+ cli-spinners "^0.1.2"
+ object-assign "^4.0.1"
+
+ora@^3.0.0, ora@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318"
+ integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==
+ dependencies:
+ chalk "^2.4.2"
+ cli-cursor "^2.1.0"
+ cli-spinners "^2.0.0"
+ log-symbols "^2.2.0"
+ strip-ansi "^5.2.0"
+ wcwidth "^1.0.1"
+
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-locale@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
+os-name@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
+ integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==
+ dependencies:
+ macos-release "^2.2.0"
+ windows-release "^3.1.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^2.0.0, p-limit@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
+ integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
+
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+ integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
+
+pako@~1.0.5:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
+ integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-asn1@^5.0.0:
+ version "5.1.4"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
+ integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-entities@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+parse-gitignore@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/parse-gitignore/-/parse-gitignore-0.4.0.tgz#abf702e4b900524fff7902b683862857b63f93fe"
+ integrity sha1-q/cC5LkAUk//eQK2g4YoV7Y/k/4=
+ dependencies:
+ array-unique "^0.3.2"
+ is-glob "^3.1.0"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
+parse-ms@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
+ integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+
+path-parse@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
+pathval@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
+ integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
+
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+peek-stream@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67"
+ integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==
+ dependencies:
+ buffer-from "^1.0.0"
+ duplexify "^3.5.0"
+ through2 "^2.0.3"
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+picomatch@^2.0.4, picomatch@^2.0.5:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
+ integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
+
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+
+pkg-conf@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
+ integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^4.0.0"
+
+pkg-config@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
+ integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=
+ dependencies:
+ debug-log "^1.0.0"
+ find-root "^1.0.0"
+ xtend "^4.0.1"
+
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
+ dependencies:
+ find-up "^2.1.0"
+
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
+pkg-dir@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac"
+ integrity sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==
+ dependencies:
+ semver-compare "^1.0.0"
+
+plur@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b"
+ integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==
+ dependencies:
+ irregular-plurals "^2.0.0"
+
+pluralize@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+ integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
+pre-flight@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pre-flight/-/pre-flight-1.1.1.tgz#482fb1649fb400616a86b2706b11591f5cc8402d"
+ integrity sha512-glqyc2Hh3K+sYeSsVs+HhjyUVf8j6xwuFej0yjYjRYfSnOK8P3Na9GznkoPn48fR+9kTOfkocYIWrtWktp4AqA==
+ dependencies:
+ colors "^1.1.2"
+ commander "^2.9.0"
+ semver "^5.1.0"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
+prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
+
+pretty-bytes@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84"
+ integrity sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=
+ dependencies:
+ get-stdin "^4.0.1"
+ meow "^3.1.0"
+
+pretty-ms@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-5.0.0.tgz#6133a8f55804b208e4728f6aa7bf01085e951e24"
+ integrity sha512-94VRYjL9k33RzfKiGokPBPpsmloBYSf5Ri+Pq19zlsEcUKFob+admeXr5eFDRuPjFmEOcjJvPGdillYOJyvZ7Q==
+ dependencies:
+ parse-ms "^2.1.0"
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+process@^0.11.10, process@~0.11.0:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
+progress-stream@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77"
+ integrity sha1-LNPP6jO6OonJwSHsM0er6asSX3c=
+ dependencies:
+ speedometer "~0.1.2"
+ through2 "~0.2.3"
+
+progress@^2.0.0, progress@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
+prop-types@^15.6.2:
+ version "15.7.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
+ integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.8.1"
+
+property-expr@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f"
+ integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==
+
+proxy-addr@~2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
+ integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
+ dependencies:
+ forwarded "~0.1.2"
+ ipaddr.js "1.9.0"
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
+psl@^1.1.24:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6"
+ integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==
+
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
+ integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+qs@6.7.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
+ integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+
+qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+ramda@^0.26.1:
+ version "0.26.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
+ integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
+
+randomatic@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+ integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
+
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
+ integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
+ dependencies:
+ bytes "3.1.0"
+ http-errors "1.7.2"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+rc@^1.1.0, rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+react-is@^16.8.1:
+ version "16.8.6"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16"
+ integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+read-pkg@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.1.1.tgz#5cf234dde7a405c90c88a519ab73c467e9cb83f5"
+ integrity sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^4.0.0"
+ type-fest "^0.4.1"
+
+"readable-stream@1 || 2", readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@^2.0.0, readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+ dependencies:
+ resolve "^1.1.6"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerator-runtime@^0.13.2:
+ version "0.13.2"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447"
+ integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==
+
+regex-cache@^0.4.2:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
+ dependencies:
+ is-equal-shallow "^0.1.3"
+
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
+regexpp@^2.0.0, regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
+remark-cli@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-4.0.0.tgz#bb84c14ffeb6f5b658eff4dfbb77cdd7775bab73"
+ integrity sha512-q5GMjGypUS4rTZb3WfMQcGpClSC38A9Ogg1h/HB2GLsqypDetmAfy0X+tuJ6JeyCPVOXXCDgsDCQq4QPqKmxBA==
+ dependencies:
+ markdown-extensions "^1.1.0"
+ remark "^8.0.0"
+ unified-args "^4.0.0"
+
+remark-lint-blockquote-indentation@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.3.tgz#9c35235dd0e904ad6c085e9f66d94b3f13968d1f"
+ integrity sha512-qK4C1l2VmeOVWEAkDYP0CaDtSFoaEBEo5l4oyz1kTkY7YB0Jh7llW2KjuhJz5IzMLmloKJzIyGwlu/odcwaHpg==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-code-block-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.3.tgz#236d8a5558041decf2b275e9d9eb5868950375ec"
+ integrity sha512-DL+rudnd9ILP5YXm74tLpMzfWZLqziX7NwIwUhqRefaOyWwxgPPy7hbT59FJqcFc6E/zvDz+Oq4nR1BSV5kEdw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-definition-case@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-1.0.4.tgz#54d2a112794f1a070a5e8aa7c8090e8ae9aa3e11"
+ integrity sha512-ebl8vYOab9iy1Mr29Wo/9CmqcYGRjCfBievIZts08efrxIElWz+jB8/n7C17fh8k0djiiS/Of6W+bfRD+kMXLA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-definition-spacing@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.4.tgz#c322ff110c168449d8217773a23352c4174ffeba"
+ integrity sha512-UderghITmru72OXB5ErCFhVsY7up2wK/m1bUD3E2dm/TFn73/7WpykENt5UirCDT/aeyoHYl8QXUVL20rAc3XQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-emphasis-marker@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.3.tgz#6dc4e7df13e5092c1222110f826f68b4b3920550"
+ integrity sha512-ea2tEVyhZvYxwj6AHsW2qzgEDLljcnzq5taZ3FJFL0KMZYZHfWaIU90H43jrW4seGEtmaP1bmoqJaTavJ2x5Jw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-fenced-code-flag@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.3.tgz#349caf7c6dd153d0b6ffb57cbcc67c8277569d2a"
+ integrity sha512-X8Oi6dhfqV9NI3cVg29myvT/NATDHVgRGCpnNz76w7VXwzhBvQtJr1MxZzuPxfWLox+ARCXF2rY9n9hbYFHYTg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-fenced-code-marker@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.3.tgz#9df1d16d535856f41b3c17a7d309385475cbec04"
+ integrity sha512-JKnojSQ8JkwpIpbNm6wtKEfx8iiv8QIwNHFM06iTCHExMhXa4pJ3wb5M5f0wsWNHtoND3lrw6AcVPoZxEPnflg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-file-extension@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-1.0.3.tgz#a7fc78fbf041e513c618b2cca0f2160ee37daa13"
+ integrity sha512-P5gzsxKmuAVPN7Kq1W0f8Ss0cFKfu+OlezYJWXf+5qOa+9Y5GqHEUOobPnsmNFZrVMiM7JoqJN2C9ZjrUx3N6Q==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-final-definition@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-1.0.3.tgz#4fd7bbf5a028f6e32645460965099689485508ae"
+ integrity sha512-QhbBYy99enfQDeUTElioCHrhgg+SgjMNRlru7/JlOguOufP6wn7AXgn2EVTrLZRoByY0VsNS2jCayXxUTzQ8KA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-hard-break-spaces@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.4.tgz#200e1dae849a6bc2f8fdb3b843faf23c70942530"
+ integrity sha512-YM82UpgliZCZhGNmFxEe7ArfhqR5CplFf2bc0k0+8w3rKWKx7EJcGMar2NK410tIi40gGeWtH/pIEypPJFCCiA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-heading-increment@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.3.tgz#44ca296b50e182c2c4a59604b8026911be3977de"
+ integrity sha512-/KL4/7D2pNxP07KKgktjcIUS+ga8pYI2k9Q/V91pMfyfSC+RYuCGOLFVJSKV0Affr/4Eqnfhw+gJ9X2HAanNuw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-heading-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-1.0.3.tgz#de7377996cb9c7e501ec1ba7b7767709a68b824b"
+ integrity sha512-ZUhMav0HHUxo5gzLqxQsOf2ZpP/I3m6EEK8q25/kqpCYnwm1uRJ5CQ40PDQx46pmKtVibIMzDmraYovxNG3ovw==
+ dependencies:
+ mdast-util-heading-style "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-link-title-style@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.4.tgz#eaca24b6eb1ee62b66a237ea54e532ed2aaaafec"
+ integrity sha512-61/uH3zDTiozLJqgxp6rHGnVKTChC3UjL3Q0KQDBpprEOL4qLYjTn4fFKscVz776d0uUX6jczrW+GT4AFVOUgg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+ vfile-location "^2.0.1"
+
+remark-lint-list-item-content-indent@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.3.tgz#e62012ef361fedaca42a764b8389023df4212eca"
+ integrity sha512-ZSIGJG2/6jd1xj/xEoDlkcJBf2Ksw8U6vIGJO0IFIA3BLCbJm2EMWJxto2cfzRvXoACmAaxTJMqW8qatPExa4w==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-list-item-indent@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.4.tgz#7a1ef6283f9a928f4940e02ec37099935f2783e6"
+ integrity sha512-Sv0gVH6qP1/nFpbJuyyguB9sAD2o42StD2WbEZeUcEexXwRO4u/YaX0Pm5pMtCiEHyN+qyL6ShKBQMtgol9BeA==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-list-item-spacing@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.3.tgz#5989bd2450fb4bbd5e8f8007887dc5ca56ad2e5f"
+ integrity sha512-QzDY0Qfk6m+Az0kmxP57OfswIH1WRdd6SIpQLaUEgsTlsbrJOiO0sJYkkOlFPsyJIfp7SV/FCbr+aYCbHF+kRQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-maximum-heading-length@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.3.tgz#e235190e9991567254f9ce1104e15dad8e332b13"
+ integrity sha512-ybcDpR5VHBjtjzdry7AdSjLFwslPo6rdhIJK2+WfHgfeEjIYnlz1uMvp1Z98QMmjpB5JSN83Kzg5fH8/B7poUw==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-maximum-line-length@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.1.tgz#1030991d9af3c935731168a0a12ecb1db2d2b2b6"
+ integrity sha512-CSxX1qc+rAqixk8eBrI+yBsUmD8YGfOezFeJWjJRuUaoOvs67oqCIU+I2HbwcUYY8/KnDxF1MCp+uCM0RkjKKw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-no-auto-link-without-protocol@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.3.tgz#f97aed92af24e6c07023a7a7dc2c147f7eb7927f"
+ integrity sha512-k+hg2mXnO4Q9WV+UShPLen5oThvFxcRVWkx2hviVd/nu3eiszBKH3o38csBwjeJoMG3l2ZhdUW8dlOBhq8670Q==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-blockquote-without-marker@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.3.tgz#7eb431fcb742412e3bc66faa7f58531245ad952f"
+ integrity sha512-faDzKrA6aKidsRXG6gcIlCO8TexLxIxe+n9B3mdnl8mhZGgE0FfWTkIWVMj0IYps/xVsVMf45KxhXgc1wU9kwg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+ vfile-location "^2.0.1"
+
+remark-lint-no-consecutive-blank-lines@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.3.tgz#4fa3b2cf2939c978a3fe7978f726f6142e7dd567"
+ integrity sha512-2Ef7fPxrfLditA7sTo2Qfqd+xwh/luWl8GzILE5vcWIxLDqKk3dTLJkB5nP+7Cr4kqWJAwXnRkEDd77ehrRV3A==
+ dependencies:
+ plur "^3.0.0"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-duplicate-headings@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.4.tgz#52ac1479b6de83d5607b8d07e8ef3401d5078424"
+ integrity sha512-QuPw+VG502Ctpd/jBjnBYuRXTg0ToP3D+dd3TYds4TRcdgaEFYTZfQ5zjK6XrxLMg0Hn9/WpXr4UqTlV4YZupA==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-stringify-position "^2.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-emphasis-as-heading@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.3.tgz#9d837d4c5635a784ef0e983cfb402da15672050d"
+ integrity sha512-HEmyeyKciUz95+CgpAH98RPR73jq5u5CZb2FOMSqgNl9B6FZXqVpq9F3txPqUw3nAqFYOAEnfiaoRgcqtioh0Q==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-file-name-articles@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.3.tgz#c712d06a24e24b0c4c3666cf3084a0052a2c2c17"
+ integrity sha512-YZDJDKUWZEmhrO6tHB0u0K0K2qJKxyg/kryr14OaRMvWLS62RgMn97sXPZ38XOSN7mOcCnl0k7/bClghJXx0sg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-consecutive-dashes@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.3.tgz#6a96ddf60e18dcdb004533733f3ccbfd8ab076ae"
+ integrity sha512-7f4vyXn/ca5lAguWWC3eu5hi8oZ7etX7aQlnTSgQZeslnJCbVJm6V6prFJKAzrqbBzMicUXr5pZLBDoXyTvHHw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-irregular-characters@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.3.tgz#6dcd8b51e00e10094585918cb8e7fc999df776c3"
+ integrity sha512-b4xIy1Yi8qZpM2vnMN+6gEujagPGxUBAs1judv6xJQngkl5d5zT8VQZsYsTGHku4NWHjjh3b7vK5mr0/yp4JSg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-mixed-case@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.3.tgz#0ebe5eedd0191507d27ad6ac5eed1778cb33c2de"
+ integrity sha512-d7rJ4c8CzDbEbGafw2lllOY8k7pvnsO77t8cV4PHFylwQ3hmCdTHLuDvK87G3DaWCeKclp0PMyamfOgJWKMkPA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-file-name-outer-dashes@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.4.tgz#c6e22a5cc64df4e12fc31712a927e8039854a666"
+ integrity sha512-+bZvvme2Bm3Vp5L2iKuvGHYVmHKrTkkRt8JqJPGepuhvBvT4Q7+CgfKyMtC/hIjyl+IcuJQ2H0qPRzdicjy1wQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+
+remark-lint-no-heading-punctuation@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.3.tgz#7357b0b6e668bb6b32338fe280cde9fe4388b547"
+ integrity sha512-JQD05RjLS99ePBQ4Bed1uWsQTlIMBTcGgIgF6jFXSCEqhwnrIUDwk6S3MG1RZsKd3TLw2xuT/i+POpfBc2+1kQ==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-inline-padding@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.4.tgz#eedb4ca2691d30f3f05b4e5e33967bd64a34daa4"
+ integrity sha512-u5rgbDkcfVv645YxxOwoGBBJbsHEwWm/XqnO8EhfKTxkfKOF4ZItG7Ajhj89EDaeXMkvCcB/avBl4bj50eJH3g==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-no-literal-urls@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.3.tgz#1b5374e416d1b595ee1902587dc37f34c0d6244a"
+ integrity sha512-H5quyMzl2kaewK+jYD1FI0G1SIinIsIp4DEyOUwIR+vYUoKwo0B4vvW0cmPpD1dgqqxHYx0B2B0JQQKFVWzGiw==
+ dependencies:
+ mdast-util-to-string "^1.0.2"
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-multiple-toplevel-headings@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.4.tgz#0cfd8575e5576d7678802eac56fda894afee3817"
+ integrity sha512-0wDddx6htN5sL9/rofesiQF0oEgwN5224UmueiDx0ZUlYrn6VS0/SS0X3WWxtXmyeqlExfWF3D/g89tNs7dcjw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-stringify-position "^2.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shell-dollars@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.3.tgz#07e99fc3843c665440f9a1d894ee518b2ad23958"
+ integrity sha512-fT3lQMTjEkPryL+63qDP1NfrohP3tG5i3SkNWSSR4VLU6OSsSSXlHGQGjo0ag//+EPKHB5/9frB/YQ0gDEPRGQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shortcut-reference-image@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.3.tgz#ab4fa15fd8aff251cb8db1f3aed4853e293aff41"
+ integrity sha512-CGm27X54kXp/5ehXejDTsZjqzK4uIhLGcrFzN3k/KjdwunQouEY92AARGrLSEuJ1hQx0bJsmnvr/hvQyWAfNJg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-shortcut-reference-link@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.4.tgz#92af34b939c0341eacdb2fc2ede855f742dc1779"
+ integrity sha512-FXdMJYqspZBhPlxYqfVgVluVXjxStg0RHJzqrk8G9wS8fCS62AE3reoaoiCahwoH1tfKcA+poktbKqDAmZo7Jg==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-no-table-indentation@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.4.tgz#6681a26198ee86c4fbbba382a42254125bc5807b"
+ integrity sha512-H4VGHcg1k8sTIbwazFYLNbDqpPR+M0aHHKDf+93b/xyd27Dp0ODQrMnQbls1Cls5qOAQnwAQbx+75wcpFxP3OQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-ordered-list-marker-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.3.tgz#3fc6b9e254a641036e275269254365c42b7c62a1"
+ integrity sha512-24TmW1eUa/2JlwprZg9jJ8LKLxNGKnlKiI5YOhN4taUp2yv8daqlV9vR54yfn/ZZQh6EQvbIX0jeVY9NYgQUtw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-ordered-list-marker-value@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.3.tgz#417afe3849b9926e06f8a6f62445541c63f0e97f"
+ integrity sha512-WQ9yLD8cI9DSk/CE+APKUT6ZeXp0/RzOnsYqzMxEa8n1QHSqRSF7hVEiisqNTG9+gV64OEE66e+m4c7RVSUADw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-rule-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-1.0.3.tgz#859aef4d2e2180ecf9db56360497372b90a04aab"
+ integrity sha512-SJe7IFORYRdo8JUhMSdcTktVAUVNVp36YYl1ZD9CfHqQHWlFD+3vWYzJXOZfog/i+CyWf7Yi0WVYmQes+167dA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-strong-marker@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.3.tgz#028e05b046ef260e8d40b342900061f1d09c8131"
+ integrity sha512-PFkH282dCwfRsVEw9IxbYbaZBY4UcTuT2SN+lA3R0cBeocWnOySVw8YEm4sv9JfV8BLcQA5gc4tj66/U3KCScw==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-table-cell-padding@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.4.tgz#be2b020a3985c414abb59cc5d88fda1993f8f2e8"
+ integrity sha512-AQWWtV1yca1PN27QaFRJbBK6Ro/bopv1XnVKxj/iMebhOU2D2FBJ8rXmMZXVMC3G9OB2WSzGgqH3nP6QY12LoA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.4.0"
+
+remark-lint-table-pipe-alignment@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.3.tgz#8c6d0c93e417706a4083dc7fa279c537d4ed886c"
+ integrity sha512-5fhEMcKqNjK6S/y7cVG0+iVqhmhXFW+awIuN7vOBhmDbZ3HF9rCCy20XiHoaG6FzrPJ+zfkjK/QZAbq2Vf58HA==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-table-pipes@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.3.tgz#e34f91de4371f98c5e16701bd2302928468cbd8a"
+ integrity sha512-K9NnGZp6i0m/CaOH7ZT4Ymt2seyiRPcBIlNMMGXBm6gpy34KJDDxYqsNUrh+j7dR+Zg4rYAQLnr3BiSHvj+rbQ==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint-unordered-list-marker-style@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.3.tgz#72f9ec8cd54950753593b3b727fd28e48fa197d5"
+ integrity sha512-0nn/Yscy5ImO4fqByrk/Ua02UwGx8LRu+0kdCbkVz4IxPO5qxTEfyccUQZR71zTdMJp1d2OeqyD9XtMaO4X7Ww==
+ dependencies:
+ unified-lint-rule "^1.0.0"
+ unist-util-generated "^1.1.0"
+ unist-util-position "^3.0.0"
+ unist-util-visit "^1.1.1"
+
+remark-lint@^6.0.0:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-6.0.5.tgz#fbb864d56bf83d2e5d23ea7e346ca5e36710fda3"
+ integrity sha512-o1I3ddm+KNsTxk60wWGI+p2yU1jB1gcm8jo2Sy6VhJ4ab2TrQIp1oQbp5xeLoFXYSh/NAqCpKjHkCM/BYpkFdQ==
+ dependencies:
+ remark-message-control "^4.0.0"
+
+remark-message-control@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-4.2.0.tgz#184c4a69ce6c4c707a5633fa35b0ce3dbf81f22c"
+ integrity sha512-WXH2t5ljTyhsXlK1zPBLF3iPHbXl58R94phPMreS1xcHWBZJt6Oiu8RtNjy1poZFb3PqKnbYLJeR/CWcZ1bTFw==
+ dependencies:
+ mdast-comment-marker "^1.0.0"
+ unified-message-control "^1.0.0"
+ xtend "^4.0.1"
+
+remark-parse@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b"
+ integrity sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.0.2"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
+remark-preset-lint-markdown-style-guide@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.3.tgz#2d2e6a162cc18976a2be93f4ebd45835f2ff6c14"
+ integrity sha512-H/jSoLvTY8abUcB+7/062I2oHevlHcHdrfRMP2RMh19QA1wmARgNEn3tZfdBXFq1TpzhevGgb6VwSdOjdU8NOQ==
+ dependencies:
+ remark-lint "^6.0.0"
+ remark-lint-blockquote-indentation "^1.0.0"
+ remark-lint-code-block-style "^1.0.0"
+ remark-lint-definition-case "^1.0.0"
+ remark-lint-definition-spacing "^1.0.0"
+ remark-lint-emphasis-marker "^1.0.0"
+ remark-lint-fenced-code-flag "^1.0.0"
+ remark-lint-fenced-code-marker "^1.0.0"
+ remark-lint-file-extension "^1.0.0"
+ remark-lint-final-definition "^1.0.0"
+ remark-lint-hard-break-spaces "^1.0.0"
+ remark-lint-heading-increment "^1.0.0"
+ remark-lint-heading-style "^1.0.0"
+ remark-lint-link-title-style "^1.0.0"
+ remark-lint-list-item-content-indent "^1.0.0"
+ remark-lint-list-item-indent "^1.0.0"
+ remark-lint-list-item-spacing "^1.0.0"
+ remark-lint-maximum-heading-length "^1.0.0"
+ remark-lint-maximum-line-length "^1.0.0"
+ remark-lint-no-auto-link-without-protocol "^1.0.0"
+ remark-lint-no-blockquote-without-marker "^2.0.0"
+ remark-lint-no-consecutive-blank-lines "^1.0.0"
+ remark-lint-no-duplicate-headings "^1.0.0"
+ remark-lint-no-emphasis-as-heading "^1.0.0"
+ remark-lint-no-file-name-articles "^1.0.0"
+ remark-lint-no-file-name-consecutive-dashes "^1.0.0"
+ remark-lint-no-file-name-irregular-characters "^1.0.0"
+ remark-lint-no-file-name-mixed-case "^1.0.0"
+ remark-lint-no-file-name-outer-dashes "^1.0.0"
+ remark-lint-no-heading-punctuation "^1.0.0"
+ remark-lint-no-inline-padding "^1.0.0"
+ remark-lint-no-literal-urls "^1.0.0"
+ remark-lint-no-multiple-toplevel-headings "^1.0.0"
+ remark-lint-no-shell-dollars "^1.0.0"
+ remark-lint-no-shortcut-reference-image "^1.0.0"
+ remark-lint-no-shortcut-reference-link "^1.0.0"
+ remark-lint-no-table-indentation "^1.0.0"
+ remark-lint-ordered-list-marker-style "^1.0.0"
+ remark-lint-ordered-list-marker-value "^1.0.0"
+ remark-lint-rule-style "^1.0.0"
+ remark-lint-strong-marker "^1.0.0"
+ remark-lint-table-cell-padding "^1.0.0"
+ remark-lint-table-pipe-alignment "^1.0.0"
+ remark-lint-table-pipes "^1.0.0"
+ remark-lint-unordered-list-marker-style "^1.0.0"
+
+remark-stringify@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87"
+ integrity sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==
+ dependencies:
+ ccount "^1.0.0"
+ is-alphanumeric "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ longest-streak "^2.0.1"
+ markdown-escapes "^1.0.0"
+ markdown-table "^1.1.0"
+ mdast-util-compact "^1.0.0"
+ parse-entities "^1.0.2"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ stringify-entities "^1.0.1"
+ unherit "^1.0.4"
+ xtend "^4.0.1"
+
+remark@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/remark/-/remark-8.0.0.tgz#287b6df2fe1190e263c1d15e486d3fa835594d6d"
+ integrity sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==
+ dependencies:
+ remark-parse "^4.0.0"
+ remark-stringify "^4.0.0"
+ unified "^6.0.0"
+
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
+
+repeat-element@^1.1.2:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
+
+repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
+ dependencies:
+ is-finite "^1.0.0"
+
+replace-ext@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+ integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
+
+request@^2.45.0, request@^2.88.0:
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
+
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
+require-uncached@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+requireindex@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162"
+ integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI=
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+ integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+
+resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1:
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e"
+ integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==
+ dependencies:
+ path-parse "^1.0.6"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@~2.2.6:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+ integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+run-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e"
+ integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==
+
+run-parallel@^1.1.2:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^5.5.2:
+ version "5.5.12"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+ integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+ dependencies:
+ symbol-observable "1.0.1"
+
+rxjs@^6.3.3, rxjs@^6.4.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
+ integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
+ dependencies:
+ tslib "^1.9.0"
+
+safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+semver-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+ integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
+
+"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
+ integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==
+
+semver@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+ integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
+
+semver@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db"
+ integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==
+
+send@0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
+ integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
+ dependencies:
+ debug "2.6.9"
+ depd "~1.1.2"
+ destroy "~1.0.4"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "~1.7.2"
+ mime "1.6.0"
+ ms "2.1.1"
+ on-finished "~2.3.0"
+ range-parser "~1.2.1"
+ statuses "~1.5.0"
+
+serialize-javascript@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65"
+ integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==
+
+serve-static@1.14.1:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
+ integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.17.1"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
+
+setprototypeof@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
+ integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+
+shelljs@^0.8.1:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
+ integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+shellsubstitute@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shellsubstitute/-/shellsubstitute-1.2.0.tgz#e4f702a50c518b0f6fe98451890d705af29b6b70"
+ integrity sha1-5PcCpQxRiw9v6YRRiQ1wWvKba3A=
+
+shx@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.2.tgz#40501ce14eb5e0cbcac7ddbd4b325563aad8c123"
+ integrity sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==
+ dependencies:
+ es6-object-assign "^1.0.3"
+ minimist "^1.2.0"
+ shelljs "^0.8.1"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
+
+simple-git@^1.85.0:
+ version "1.118.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.118.0.tgz#6e31d50672c58abdbdb0410fadfdb1db29bd71bd"
+ integrity sha512-0CaCfxdR7ula3EuOkrVFKBiqt7LcvMPfXgIdUhSwjC4A+OaO8yEPGjdO/kWY7ew9uYP9KEoH+dvslOOm7eVzkA==
+ dependencies:
+ debug "^4.0.1"
+
+single-line-log@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+ integrity sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=
+ dependencies:
+ string-width "^1.0.1"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+ integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=
+
+slice-ansi@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+sliced@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+ integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
+source-map-support@^0.5.6, source-map-support@~0.5.12:
+ version "0.5.12"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599"
+ integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.6:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
+
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+spdx-correct@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
+ integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1"
+ integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==
+
+speedometer@~0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d"
+ integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=
+
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
+sshpk@^1.7.0:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
+ integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
+staged-git-files@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b"
+ integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==
+
+standard-engine@~9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-9.0.0.tgz#d3a3d74c4c1b91f51a1e66362465261ca7610316"
+ integrity sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==
+ dependencies:
+ deglob "^2.1.0"
+ get-stdin "^6.0.0"
+ minimist "^1.1.0"
+ pkg-conf "^2.0.0"
+
+standard-markdown@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/standard-markdown/-/standard-markdown-5.0.1.tgz#39598c611bfe03b2d4313df792f365544959a592"
+ integrity sha512-rvbuTqF4zJX3yxgHhRB6o0uGq+V87Dbzk8QeBy9dyb9RdBWL4OG3nCpxfEnM0KHjycMCSMK36r60k/MGThERdA==
+ dependencies:
+ commander "^2.18.0"
+ globby "^8.0.1"
+ lodash.flatten "^4.4.0"
+ lodash.range "^3.2.0"
+ ora "^3.0.0"
+ standard "^12.0.1"
+
+standard@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-12.0.1.tgz#0fc5a8aa6c34c546c5562aae644242b24dae2e61"
+ integrity sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==
+ dependencies:
+ eslint "~5.4.0"
+ eslint-config-standard "12.0.0"
+ eslint-config-standard-jsx "6.0.2"
+ eslint-plugin-import "~2.14.0"
+ eslint-plugin-node "~7.0.1"
+ eslint-plugin-promise "~4.0.0"
+ eslint-plugin-react "~7.11.1"
+ eslint-plugin-standard "~4.0.0"
+ standard-engine "~9.0.0"
+
+state-toggle@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc"
+ integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+ integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
+
+string-argv@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736"
+ integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY=
+
+string-width@^1.0.0, string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^4.0.0"
+
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
+string_decoder@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
+ integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+stringify-entities@^1.0.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7"
+ integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==
+ dependencies:
+ character-entities-html4 "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
+stringify-object@^3.2.2:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629"
+ integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==
+ dependencies:
+ get-own-enumerable-property-symbols "^3.0.0"
+ is-obj "^1.0.1"
+ is-regexp "^1.0.0"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
+ dependencies:
+ ansi-regex "^3.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+sumchecker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e"
+ integrity sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=
+ dependencies:
+ debug "^2.2.0"
+
+supports-color@6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
+
+supports-color@^4.1.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+ integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
+ dependencies:
+ has-flag "^2.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+symbol-observable@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+ integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
+symbol-observable@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+synchronous-promise@^2.0.6:
+ version "2.0.9"
+ resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.9.tgz#b83db98e9e7ae826bf9c8261fd8ac859126c780a"
+ integrity sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==
+
+table@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
+ integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==
+ dependencies:
+ ajv "^6.0.1"
+ ajv-keywords "^3.0.0"
+ chalk "^2.1.0"
+ lodash "^4.17.4"
+ slice-ansi "1.0.0"
+ string-width "^2.1.1"
+
+table@^5.2.3:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8"
+ integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==
+ dependencies:
+ ajv "^6.9.1"
+ lodash "^4.17.11"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
+tap-parser@~1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-1.2.2.tgz#5e2f6970611f079c7cf857de1dc7aa1b480de7a5"
+ integrity sha1-Xi9pcGEfB5x8+FfeHceqG0gN56U=
+ dependencies:
+ events-to-array "^1.0.1"
+ inherits "~2.0.1"
+ js-yaml "^3.2.7"
+ optionalDependencies:
+ readable-stream "^2"
+
+tap-xunit@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/tap-xunit/-/tap-xunit-2.4.1.tgz#9823797b676ae5017f4e380bd70abb893b8e120e"
+ integrity sha512-qcZStDtjjYjMKAo7QNiCtOW256g3tuSyCSe5kNJniG1Q2oeOExJq4vm8CwboHZURpkXAHvtqMl4TVL7mcbMVVA==
+ dependencies:
+ duplexer "~0.1.1"
+ minimist "~1.2.0"
+ tap-parser "~1.2.2"
+ through2 "~2.0.0"
+ xmlbuilder "~4.2.0"
+ xtend "~4.0.0"
+
+tapable@^1.0.0, tapable@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
+tar-fs@^1.13.0:
+ version "1.16.3"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
+ integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
+ dependencies:
+ chownr "^1.0.1"
+ mkdirp "^0.5.1"
+ pump "^1.0.0"
+ tar-stream "^1.1.2"
+
+tar-stream@^1.1.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
+ integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
+ dependencies:
+ bl "^1.0.0"
+ buffer-alloc "^1.2.0"
+ end-of-stream "^1.0.0"
+ fs-constants "^1.0.0"
+ readable-stream "^2.3.0"
+ to-buffer "^1.1.1"
+ xtend "^4.0.0"
+
+tar@^4, tar@^4.4.7:
+ version "4.4.10"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1"
+ integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.5"
+ minizlib "^1.2.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.3"
+
+temp@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=
+ dependencies:
+ os-tmpdir "^1.0.0"
+ rimraf "~2.2.6"
+
+terser-webpack-plugin@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4"
+ integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==
+ dependencies:
+ cacache "^11.3.2"
+ find-cache-dir "^2.0.0"
+ is-wsl "^1.1.0"
+ loader-utils "^1.2.3"
+ schema-utils "^1.0.0"
+ serialize-javascript "^1.7.0"
+ source-map "^0.6.1"
+ terser "^4.0.0"
+ webpack-sources "^1.3.0"
+ worker-farm "^1.7.0"
+
+terser@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391"
+ integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+throttleit@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
+ integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8=
+
+through2@^2.0.0, through2@^2.0.3, through2@~2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through2@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f"
+ integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=
+ dependencies:
+ readable-stream "~1.1.9"
+ xtend "~2.1.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+timers-browserify@1.4.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
+ integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=
+ dependencies:
+ process "~0.11.0"
+
+timers-browserify@^2.0.4:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
+ integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tmp-promise@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c"
+ integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==
+ dependencies:
+ bluebird "^3.5.0"
+ tmp "0.1.0"
+
+tmp@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877"
+ integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==
+ dependencies:
+ rimraf "^2.6.3"
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
+to-buffer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
+ integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
+to-vfile@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/to-vfile/-/to-vfile-2.2.0.tgz#342d1705e6df526d569b1fc8bfa29f1f36d6c416"
+ integrity sha512-saGC8/lWdGrEoBMLUtgzhRHWAkQMP8gdldA3MOAUhBwTGEb1RSMVcflHGSx4ZJsdEZ9o1qDBCPp47LCPrbZWow==
+ dependencies:
+ is-buffer "^1.1.4"
+ vfile "^2.0.0"
+ x-is-function "^1.0.4"
+
+toidentifier@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
+ integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+
+toposort@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
+ integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=
+
+tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
+
+trim-trailing-lines@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a"
+ integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==
+
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+ integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0=
+
+trough@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e"
+ integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==
+
+ts-loader@^6.0.2:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.0.4.tgz#bc331ad91a887a60632d94c9f79448666f2c4b63"
+ integrity sha512-p2zJYe7OtwR+49kv4gs7v4dMrfYD1IPpOtqiSPCbe8oR+4zEBtdHwzM7A7M91F+suReqgzZrlClk4LRSSp882g==
+ dependencies:
+ chalk "^2.3.0"
+ enhanced-resolve "^4.0.0"
+ loader-utils "^1.0.2"
+ micromatch "^4.0.0"
+ semver "^6.0.0"
+
+ts-node@^6.0.3:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-6.2.0.tgz#65a0ae2acce319ea4fd7ac8d7c9f1f90c5da6baf"
+ integrity sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==
+ dependencies:
+ arrify "^1.0.0"
+ buffer-from "^1.1.0"
+ diff "^3.1.0"
+ make-error "^1.1.1"
+ minimist "^1.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.5.6"
+ yn "^2.0.0"
+
+tslib@^1.8.1, tslib@^1.9.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
+ integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
+
+tsutils@^3.7.0:
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.14.0.tgz#bf8d5a7bae5369331fa0f2b0a5a10bd7f7396c77"
+ integrity sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==
+ dependencies:
+ tslib "^1.8.1"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@^4.0.0, type-detect@^4.0.5:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8"
+ integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==
+
+type-is@~1.6.17, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+typescript@^3.4.5, typescript@^3.5.2:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
+ integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+ integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
+unherit@^1.0.4:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449"
+ integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==
+ dependencies:
+ inherits "^2.0.1"
+ xtend "^4.0.1"
+
+unified-args@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-4.0.0.tgz#8d9b9b8ad347beb37f430562a62c4d361b42220f"
+ integrity sha1-jZubitNHvrN/QwVipixNNhtCIg8=
+ dependencies:
+ camelcase "^4.0.0"
+ chalk "^2.0.0"
+ chokidar "^1.5.1"
+ minimist "^1.2.0"
+ text-table "^0.2.0"
+ unified-engine "^4.0.0"
+
+unified-engine@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-4.0.1.tgz#9692aa97fd5c4ec36889779e12514bef8e863fc3"
+ integrity sha1-lpKql/1cTsNoiXeeElFL746GP8M=
+ dependencies:
+ concat-stream "^1.5.1"
+ debug "^2.2.0"
+ fault "^1.0.0"
+ fn-name "^2.0.1"
+ glob "^7.0.3"
+ ignore "^3.2.0"
+ is-empty "^1.0.0"
+ is-hidden "^1.0.1"
+ is-object "^1.0.1"
+ js-yaml "^3.6.1"
+ load-plugin "^2.0.0"
+ parse-json "^2.2.0"
+ to-vfile "^2.0.0"
+ trough "^1.0.0"
+ vfile-reporter "^4.0.0"
+ vfile-statistics "^1.1.0"
+ x-is-function "^1.0.4"
+ x-is-string "^0.1.0"
+ xtend "^4.0.1"
+
+unified-lint-rule@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.4.tgz#be432d316db7ad801166041727b023ba18963e24"
+ integrity sha512-q9wY6S+d38xRAuWQVOMjBQYi7zGyKkY23ciNafB8JFVmDroyKjtytXHCg94JnhBCXrNqpfojo3+8D+gmF4zxJQ==
+ dependencies:
+ wrapped "^1.0.1"
+
+unified-message-control@^1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-1.0.4.tgz#a5e02c07112f78c6687b83a10392c2fba86dc09b"
+ integrity sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g==
+ dependencies:
+ trim "0.0.1"
+ unist-util-visit "^1.0.0"
+ vfile-location "^2.0.0"
+
+unified@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
+ integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^1.1.0"
+ trough "^1.0.0"
+ vfile "^2.0.0"
+ x-is-string "^0.1.0"
+
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
+unist-util-generated@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.4.tgz#2261c033d9fc23fae41872cdb7663746e972c1a7"
+ integrity sha512-SA7Sys3h3X4AlVnxHdvN/qYdr4R38HzihoEVY2Q2BZu8NHWDnw5OGcC/tXWjQfd4iG+M6qRFNIRGqJmp2ez4Ww==
+
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
+unist-util-position@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.3.tgz#fff942b879538b242096c148153826664b1ca373"
+ integrity sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw==
+
+unist-util-remove-position@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972"
+ integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+ integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
+unist-util-stringify-position@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz#de2a2bc8d3febfa606652673a91455b6a36fb9f3"
+ integrity sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
+unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.4.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
+universal-user-agent@^2.0.0, universal-user-agent@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.1.0.tgz#5abfbcc036a1ba490cb941f8fd68c46d3669e8e4"
+ integrity sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==
+ dependencies:
+ os-name "^3.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
+
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+untildify@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0"
+ integrity sha1-F+soB5h/dpUunASF/DEdBqgmouA=
+ dependencies:
+ os-homedir "^1.0.0"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+upath@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
+ integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
+ dependencies:
+ prepend-http "^1.0.1"
+
+url-template@^2.0.8:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
+ integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE=
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
+
+uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+v8-compile-cache@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
+vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
+
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vfile-location@^2.0.0, vfile-location@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2"
+ integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==
+
+vfile-message@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+ integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+ dependencies:
+ unist-util-stringify-position "^1.1.1"
+
+vfile-reporter@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-4.0.0.tgz#ea6f0ae1342f4841573985e05f941736f27de9da"
+ integrity sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=
+ dependencies:
+ repeat-string "^1.5.0"
+ string-width "^1.0.0"
+ supports-color "^4.1.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-statistics "^1.1.0"
+
+vfile-statistics@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.3.tgz#e9c87071997fbcb4243764d2c3805e0bb0820c60"
+ integrity sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA==
+
+vfile@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
+ integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
+ dependencies:
+ is-buffer "^1.1.4"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-message "^1.0.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019"
+ integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==
+
+walk-sync@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.4.tgz#cf78486cc567d3a96b5b2237c6108017a5ffb9a4"
+ integrity sha512-ttGcuHA/OBnN2pcM6johpYlEms7XpO5/fyKIr48541xXedan4roO8cS1Q2S/zbbjGH/BarYDAMeS2Mi9HE5Tig==
+ dependencies:
+ ensure-posix-path "^1.0.0"
+ matcher-collection "^1.0.0"
+
+watchpack@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
+wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+ dependencies:
+ defaults "^1.0.3"
+
+webpack-cli@^3.3.2:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.5.tgz#f4d1238a66a2843d9cebf189835ea22142e72767"
+ integrity sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-sources@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+ integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.32.2:
+ version "4.35.3"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.35.3.tgz#66bc35ef215a7b75e8790f84d560013ffecf0ca3"
+ integrity sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.0"
+ ajv "^6.1.0"
+ ajv-keywords "^3.1.0"
+ chrome-trace-event "^1.0.0"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.0"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.3.0"
+ loader-utils "^1.1.0"
+ memory-fs "~0.4.1"
+ micromatch "^3.1.8"
+ mkdirp "~0.5.0"
+ neo-async "^2.5.0"
+ node-libs-browser "^2.0.0"
+ schema-utils "^1.0.0"
+ tapable "^1.1.0"
+ terser-webpack-plugin "^1.1.0"
+ watchpack "^1.5.0"
+ webpack-sources "^1.3.0"
+
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
+wide-align@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
+ dependencies:
+ string-width "^1.0.2 || 2"
+
+windows-release@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f"
+ integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==
+ dependencies:
+ execa "^1.0.0"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba"
+ integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=
+ dependencies:
+ string-width "^2.1.1"
+ strip-ansi "^4.0.0"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrapped@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242"
+ integrity sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=
+ dependencies:
+ co "3.1.0"
+ sliced "^1.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+ dependencies:
+ mkdirp "^0.5.1"
+
+x-is-function@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e"
+ integrity sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=
+
+x-is-string@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+ integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
+
+xmlbuilder@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
+ integrity sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=
+ dependencies:
+ lodash "^4.0.0"
+
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+xtend@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
+ dependencies:
+ object-keys "~0.4.0"
+
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
+yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
+ integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
+
+yargs-parser@^13.1.0:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
+
+yn@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
+ integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=
+
+yup@^0.27.0:
+ version "0.27.0"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7"
+ integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==
+ dependencies:
+ "@babel/runtime" "^7.0.0"
+ fn-name "~2.0.1"
+ lodash "^4.17.11"
+ property-expr "^1.5.0"
+ synchronous-promise "^2.0.6"
+ toposort "^2.0.2"
diff --git a/devel/electron7/pkg-descr b/devel/electron7/pkg-descr
new file mode 100644
index 000000000000..bb5485e9e735
--- /dev/null
+++ b/devel/electron7/pkg-descr
@@ -0,0 +1,10 @@
+Build cross platform desktop apps with JavaScript, HTML, and CSS.
+
+It's easier than you think.
+
+If you can build a website, you can build a desktop app. Electron is a
+framework for creating native applications with web technologies like
+JavaScript, HTML, and CSS. It takes care of the hard parts so you can
+focus on the core of your application.
+
+WWW: https://electronjs.org/
diff --git a/devel/electron7/pkg-plist b/devel/electron7/pkg-plist
new file mode 100644
index 000000000000..21acc5a9a433
--- /dev/null
+++ b/devel/electron7/pkg-plist
@@ -0,0 +1,124 @@
+bin/electron%%ELECTRON_VER_MAJOR%%
+%%DATADIR%%/LICENSE
+%%DATADIR%%/LICENSES.chromium.html
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DRIVER%%%%DATADIR%%/chromedriver
+%%DATADIR%%/electron
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/mksnapshot
+%%DATADIR%%/natives_blob.bin
+%%DATADIR%%/node_headers/include/node/common.gypi
+%%DATADIR%%/node_headers/include/node/config.gypi
+%%DATADIR%%/node_headers/include/node/js_native_api.h
+%%DATADIR%%/node_headers/include/node/js_native_api_types.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform-export.h
+%%DATADIR%%/node_headers/include/node/libplatform/libplatform.h
+%%DATADIR%%/node_headers/include/node/libplatform/v8-tracing.h
+%%DATADIR%%/node_headers/include/node/node.h
+%%DATADIR%%/node_headers/include/node/node_api.h
+%%DATADIR%%/node_headers/include/node/node_api_types.h
+%%DATADIR%%/node_headers/include/node/node_buffer.h
+%%DATADIR%%/node_headers/include/node/node_object_wrap.h
+%%DATADIR%%/node_headers/include/node/node_version.h
+%%DATADIR%%/node_headers/include/node/uv.h
+%%DATADIR%%/node_headers/include/node/uv/aix.h
+%%DATADIR%%/node_headers/include/node/uv/android-ifaddrs.h
+%%DATADIR%%/node_headers/include/node/uv/bsd.h
+%%DATADIR%%/node_headers/include/node/uv/darwin.h
+%%DATADIR%%/node_headers/include/node/uv/errno.h
+%%DATADIR%%/node_headers/include/node/uv/linux.h
+%%DATADIR%%/node_headers/include/node/uv/os390.h
+%%DATADIR%%/node_headers/include/node/uv/posix.h
+%%DATADIR%%/node_headers/include/node/uv/stdint-msvc2008.h
+%%DATADIR%%/node_headers/include/node/uv/sunos.h
+%%DATADIR%%/node_headers/include/node/uv/threadpool.h
+%%DATADIR%%/node_headers/include/node/uv/tree.h
+%%DATADIR%%/node_headers/include/node/uv/unix.h
+%%DATADIR%%/node_headers/include/node/uv/version.h
+%%DATADIR%%/node_headers/include/node/uv/win.h
+%%DATADIR%%/node_headers/include/node/v8-internal.h
+%%DATADIR%%/node_headers/include/node/v8-platform.h
+%%DATADIR%%/node_headers/include/node/v8-profiler.h
+%%DATADIR%%/node_headers/include/node/v8-testing.h
+%%DATADIR%%/node_headers/include/node/v8-util.h
+%%DATADIR%%/node_headers/include/node/v8-value-serializer-version.h
+%%DATADIR%%/node_headers/include/node/v8-version-string.h
+%%DATADIR%%/node_headers/include/node/v8-version.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-posix.h
+%%DATADIR%%/node_headers/include/node/v8-wasm-trap-handler-win.h
+%%DATADIR%%/node_headers/include/node/v8.h
+%%DATADIR%%/node_headers/include/node/v8config.h
+%%DATADIR%%/node_headers/include/node/zconf.h
+%%DATADIR%%/node_headers/include/node/zlib.h
+%%DIST%%%%DATADIR%%/releases/SHASUMS256.txt
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/chromedriver-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/electron-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DIST%%%%AMD64%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-x64.zip
+%%DIST%%%%I386%%%%DATADIR%%/releases/mksnapshot-v%%ELECTRON_VER%%-freebsd-ia32.zip
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/default_app.asar
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/swiftshader/libvk_swiftshader.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DATADIR%%/v8_context_snapshot_generator
+%%DATADIR%%/version
diff --git a/devel/gnatpython/Makefile b/devel/gnatpython/Makefile
new file mode 100644
index 000000000000..d9750131937e
--- /dev/null
+++ b/devel/gnatpython/Makefile
@@ -0,0 +1,19 @@
+# Created by: John Marino <marino@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= gnatpython
+PORTVERSION= ${SNAPSHOT}
+CATEGORIES= devel
+MASTER_SITES= http://downloads.dragonlace.net/src/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Python package used in Ada testsuites
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING3
+
+SNAPSHOT= 20140224
+USES= python:2.7 tar:bzip2
+USE_PYTHON= distutils autoplist
+
+.include <bsd.port.mk>
diff --git a/devel/gnatpython/distinfo b/devel/gnatpython/distinfo
new file mode 100644
index 000000000000..9c2ef792d025
--- /dev/null
+++ b/devel/gnatpython/distinfo
@@ -0,0 +1,2 @@
+SHA256 (gnatpython-20140224.tar.bz2) = a622c790dfcdb8c7b6fb77cdef8ce3b0fe96649bf5dd422216d21bacf34e12a8
+SIZE (gnatpython-20140224.tar.bz2) = 102940
diff --git a/devel/gnatpython/files/patch-setup__helpers.py b/devel/gnatpython/files/patch-setup__helpers.py
new file mode 100644
index 000000000000..f2f2d841b2fa
--- /dev/null
+++ b/devel/gnatpython/files/patch-setup__helpers.py
@@ -0,0 +1,11 @@
+--- setup_helpers.py.orig 2015-06-21 09:00:45 UTC
++++ setup_helpers.py
+@@ -28,7 +28,7 @@ def build_scripts_gnatpython(root_dir=''
+ os.system('gcc -o %sscripts/rlimit %ssrc/rlimit/rlimit-NT.c' %
+ (root_dir, root_dir))
+ else:
+- os.system('gcc -o %sscripts/rlimit %ssrc/rlimit/rlimit.c' %
++ os.system('cc -o %sscripts/rlimit %ssrc/rlimit/rlimit.c' %
+ (root_dir, root_dir))
+
+ # Update the scripts list
diff --git a/devel/gnatpython/pkg-descr b/devel/gnatpython/pkg-descr
new file mode 100644
index 000000000000..6be9b6b2d190
--- /dev/null
+++ b/devel/gnatpython/pkg-descr
@@ -0,0 +1,5 @@
+GNATPython is a python package to ease development of testsuites and/or
+build scripts in a portable way. It is an extension to Ada which exports
+GNAT.Expect.TTY and requires the GNAT AUX compiler.
+
+WWW: https://forge.open-do.org/projects/gnatpython
diff --git a/devel/godot2-tools/Makefile b/devel/godot2-tools/Makefile
new file mode 100644
index 000000000000..6d88a455068f
--- /dev/null
+++ b/devel/godot2-tools/Makefile
@@ -0,0 +1,13 @@
+# Created by: Shane Ambler <FreeBSD@Shaneware.biz>
+# $FreeBSD$
+
+PKGNAMESUFFIX= 2-tools
+
+COMMENT= Game integrated development environment
+
+OPTIONS_EXCLUDE= #
+OPTIONS_SLAVE= TOOLS
+
+MASTERDIR= ${.CURDIR}/../godot2
+
+.include "${MASTERDIR}/Makefile"
diff --git a/devel/godot2-tools/pkg-message b/devel/godot2-tools/pkg-message
new file mode 100644
index 000000000000..7c267f80109a
--- /dev/null
+++ b/devel/godot2-tools/pkg-message
@@ -0,0 +1,11 @@
+[
+{ type: install
+ message: <<EOM
+This is the old v2 of godot and is only for compatability
+to be able to work on older projects.
+
+If you are planning any development in godot
+please install the newer v3 version in devel/godot-tools
+EOM
+}
+]
diff --git a/devel/godot2/Makefile b/devel/godot2/Makefile
new file mode 100644
index 000000000000..0bb4fc89bcae
--- /dev/null
+++ b/devel/godot2/Makefile
@@ -0,0 +1,111 @@
+# Created by: Shane Ambler <FreeBSD@Shaneware.biz>
+# $FreeBSD$
+
+PORTNAME= godot
+DISTVERSION= 2.1.6
+DISTVERSIONSUFFIX= -stable
+CATEGORIES= devel games
+PKGNAMESUFFIX?= 2
+
+MAINTAINER= FreeBSD@Shaneware.biz
+COMMENT?= Game runtime engine
+
+LICENSE= MIT CC-BY-3.0
+LICENSE_COMB= multi
+LICENSE_FILE_CC-BY-3.0= ${WRKSRC}/LOGO_LICENSE.md
+LICENSE_FILE_MIT= ${WRKSRC}/LICENSE.txt
+
+LIB_DEPENDS= libfreetype.so:print/freetype2 \
+ libpng.so:graphics/png \
+ libmpcdec.so:audio/musepack \
+ libspeex.so:audio/speex
+RUN_DEPENDS= xdg-user-dir:devel/xdg-user-dirs \
+ xdg-open:devel/xdg-utils \
+ xmessage:x11/xmessage
+
+USES= compiler:c++11-lib gl pkgconfig scons:python2 ssl xorg
+USE_XORG= x11 xcursor xi xinerama xrandr
+USE_GL= gl glu
+
+USE_GITHUB= yes
+GH_ACCOUNT= godotengine
+
+MAKE_ARGS+= platform=x11 builtin_speex=no builtin_libmpcdec=no verbose=yes
+MAKE_ARGS+= ${MAKE_ARGS_${CHOSEN_COMPILER_TYPE}}
+MAKE_ARGS_clang= use_llvm=yes
+CXXFLAGS+= -DGLEW_NO_GLU -DRTAUDIO_ENABLED -DCRIOGET_NOT_NEEDED
+CXXFLAGS_i386= ${CXXFLAGS_i386_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_i386_gcc= -march=i586
+CXXFLAGS_aarch64= -DNO_THREADS
+CXXFLAGS_sparc64= -DNO_THREADS
+CXXFLAGS_mips= -DNO_THREADS
+CXXFLAGS_mips64= -DNO_THREADS
+LDFLAGS+= -lspeex -lmpcdec
+
+OPTIONS_DEFINE= EXAMPLES TOOLS
+OPTIONS_DEFAULT= OSS
+# Moved to devel/godot-tools
+OPTIONS_EXCLUDE?= EXAMPLES TOOLS
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA OSS PULSEAUDIO
+
+AUDIO_DESC= Audio support
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_MAKE_ARGS= alsa=yes
+EXAMPLES_GH_PROJECT= godot-demo-projects:DEMOS
+EXAMPLES_GH_TAGNAME= 2.1.4-stable:DEMOS
+EXAMPLES_PORTEXAMPLES= *
+OSS_MAKE_ARGS= oss=yes
+PULSEAUDIO_LIB_DEPENDS= libpulse-simple.so:audio/pulseaudio
+PULSEAUDIO_MAKE_ARGS= pulseaudio=yes
+TOOLS_DESC= Include development tools (IDE)
+TOOLS_MAKE_ARGS= target=release_debug tools=yes
+TOOLS_MAKE_ARGS_OFF= target=release tools=no
+TOOLS_LDFLAGS= -lexecinfo
+TOOLS_DESKTOP_ENTRIES= "Godot-v2" "${COMMENT}" "${GODOTFILE}" \
+ "${GODOTFILE}" "Development;IDE;" ""
+TOOLS_PLIST_FILES= share/pixmaps/${GODOTFILE}.png \
+ share/pixmaps/${GODOTFILE}.svg
+
+GODOTFILE= ${PORTNAME}${PKGNAMESUFFIX}
+PLIST_FILES= bin/${GODOTFILE}
+# rename to prevent conflict with godot v3
+EXAMPLESDIR= ${PREFIX}/share/examples/godot2
+
+.ifmake makesum
+# Always include optional distfiles
+.MAKEFLAGS: WITH="${OPTIONS_DEFINE}" OPTIONS_EXCLUDE=
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} != aarch64 && ${ARCH} != amd64 && ${ARCH} != i386 && ${ARCH} != armv6 && ${ARCH} != armv7
+# use system libvpx on archs that break with built-in
+LIB_DEPENDS+= libvpx.so:multimedia/libvpx
+MAKE_ARGS+= builtin_libvpx=False
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|custom_build|${OPSYS}_Ports_build|' \
+ ${WRKSRC}/methods.py
+ @${REINPLACE_CMD} -e 's|/usr/bin|${PREFIX}/bin|' \
+ ${WRKSRC}/platform/x11/os_x11.cpp
+
+# The official godot binary name reflects options used to compile
+# We just want a simple name matching the portname
+# This gives us bin/godot for runtime and bin/godot-tools for the IDE
+do-install:
+ cd ${WRKSRC}/bin && ${INSTALL_PROGRAM} godot.x11* \
+ ${STAGEDIR}/${PREFIX}/bin/${GODOTFILE}
+
+do-install-EXAMPLES-on:
+ (cd ${WRKSRC_DEMOS} && ${COPYTREE_SHARE} "${PORTEXAMPLES}" \
+ ${STAGEDIR}${EXAMPLESDIR})
+
+do-install-TOOLS-on:
+ ${INSTALL_DATA} ${WRKSRC}/icon.png \
+ ${STAGEDIR}${PREFIX}/share/pixmaps/${GODOTFILE}.png
+ ${INSTALL_DATA} ${WRKSRC}/icon.svg \
+ ${STAGEDIR}${PREFIX}/share/pixmaps/${GODOTFILE}.svg
+
+.include <bsd.port.post.mk>
diff --git a/devel/godot2/distinfo b/devel/godot2/distinfo
new file mode 100644
index 000000000000..7310fd0fa8fc
--- /dev/null
+++ b/devel/godot2/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1579663149
+SHA256 (godotengine-godot-2.1.6-stable_GH0.tar.gz) = 5bfc57f2ee24dccfdcefe491a3be1a07b39299f2fcfa03202b8b4c6c2dd5122b
+SIZE (godotengine-godot-2.1.6-stable_GH0.tar.gz) = 15043275
+SHA256 (godotengine-godot-demo-projects-2.1.4-stable_GH0.tar.gz) = f474381ba834d37cfce45c0130dad16d907a4ce28cde94f35c7d96a72f164d75
+SIZE (godotengine-godot-demo-projects-2.1.4-stable_GH0.tar.gz) = 20534045
diff --git a/devel/godot2/files/patch-SConstruct b/devel/godot2/files/patch-SConstruct
new file mode 100644
index 000000000000..b73a2b71f708
--- /dev/null
+++ b/devel/godot2/files/patch-SConstruct
@@ -0,0 +1,36 @@
+--- SConstruct.orig 2016-11-15 18:44:21 UTC
++++ SConstruct
+@@ -65,7 +65,7 @@ elif (os.name == "nt"):
+ if (os.getenv("VSINSTALLDIR") == None or platform_arg == "android"):
+ custom_tools = ['mingw']
+
+-env_base = Environment(tools=custom_tools)
++env_base = Environment(tools=custom_tools, ENV = os.environ)
+ if 'TERM' in os.environ:
+ env_base['ENV']['TERM'] = os.environ['TERM']
+ env_base.AppendENVPath('PATH', os.getenv('PATH'))
+@@ -272,15 +272,16 @@ if selected_platform in platform_list:
+ if env["extra_suffix"] != '':
+ env.extra_suffix += '.' + env["extra_suffix"]
+
+- CCFLAGS = env.get('CCFLAGS', '')
+- env['CCFLAGS'] = ''
+-
+- env.Append(CCFLAGS=str(CCFLAGS).split())
+-
+- CFLAGS = env.get('CFLAGS', '')
+- env['CFLAGS'] = ''
+-
++ env['CC'] = os.environ['CC']
++ env['CXX'] = os.environ['CXX']
++
++ CFLAGS = os.environ['CFLAGS']
++ env['CFLAGS'] = []
+ env.Append(CFLAGS=str(CFLAGS).split())
++
++ CCFLAGS = os.environ['CXXFLAGS']
++ env['CCFLAGS'] = []
++ env.Append(CCFLAGS=str(CCFLAGS).split())
+
+ LINKFLAGS = env.get('LINKFLAGS', '')
+ env['LINKFLAGS'] = ''
diff --git a/devel/godot2/files/patch-drivers_SCsub b/devel/godot2/files/patch-drivers_SCsub
new file mode 100644
index 000000000000..ada05634533e
--- /dev/null
+++ b/devel/godot2/files/patch-drivers_SCsub
@@ -0,0 +1,11 @@
+--- drivers/SCsub.orig 2016-11-30 21:41:21 UTC
++++ drivers/SCsub
+@@ -14,7 +14,7 @@ SConscript('windows/SCsub')
+ # Sounds drivers
+ SConscript('alsa/SCsub')
+ SConscript('pulseaudio/SCsub')
+-if (env["platform"] == "windows"):
++if (env["platform"] == "windows") or (env["platform"] == "x11"):
+ SConscript("rtaudio/SCsub")
+
+ # Graphics drivers
diff --git a/devel/godot2/files/patch-drivers_rtaudio_audio__driver__rtaudio.cpp b/devel/godot2/files/patch-drivers_rtaudio_audio__driver__rtaudio.cpp
new file mode 100644
index 000000000000..39fbefd0727f
--- /dev/null
+++ b/devel/godot2/files/patch-drivers_rtaudio_audio__driver__rtaudio.cpp
@@ -0,0 +1,18 @@
+--- drivers/rtaudio/audio_driver_rtaudio.cpp.orig 2016-08-09 07:52:15 UTC
++++ drivers/rtaudio/audio_driver_rtaudio.cpp
+@@ -35,8 +35,14 @@ const char* AudioDriverRtAudio::get_name
+
+ #ifdef OSX_ENABLED
+ return "RtAudio-OSX";
+-#elif defined(UNIX_ENABLED)
++#elif defined(UNIX_ENABLED) && (defined(ALSA_ENABLED) || defined(PULSEAUDIO_ENABLED) || defined(OSS_ENABLED))
++#if defined(OSS_ENABLED)
++ return "RtAudio-OSS";
++#elif defined(ALSA_ENABLED)
+ return "RtAudio-ALSA";
++#elif defined(PULSEAUDIO_ENABLED)
++ return "RtAudio-PulseAudio";
++#endif
+ #elif defined(WINDOWS_ENABLED)
+ return "RtAudio-DirectSound";
+ #else
diff --git a/devel/godot2/files/patch-drivers_unix_os__unix.cpp b/devel/godot2/files/patch-drivers_unix_os__unix.cpp
new file mode 100644
index 000000000000..1180857446fd
--- /dev/null
+++ b/devel/godot2/files/patch-drivers_unix_os__unix.cpp
@@ -0,0 +1,54 @@
+--- drivers/unix/os_unix.cpp.orig 2017-08-28 01:55:12 UTC
++++ drivers/unix/os_unix.cpp
+@@ -51,6 +51,7 @@
+
+ #if defined(__FreeBSD__) || defined(__OpenBSD__)
+ #include <sys/param.h>
++#include <sys/sysctl.h>
+ #endif
+ #include "globals.h"
+ #include <assert.h>
+@@ -375,17 +376,7 @@ Error OS_Unix::execute(const String &p_p
+ args.push_back((char *)cs[i].get_data()); // shitty C cast
+ args.push_back(0);
+
+-#ifdef __FreeBSD__
+- if (p_path.find("/")) {
+- // exec name contains path so use it
+- execv(p_path.utf8().get_data(), &args[0]);
+- } else {
+- // use program name and search through PATH to find it
+- execvp(getprogname(), &args[0]);
+- }
+-#else
+ execv(p_path.utf8().get_data(), &args[0]);
+-#endif
+ // still alive? something failed..
+ fprintf(stderr, "**ERROR** OS_Unix::execute - Could not create child process while executing: %s\n", p_path.utf8().get_data());
+ abort();
+@@ -499,12 +490,24 @@ String OS_Unix::get_executable_path() co
+ return OS::get_executable_path();
+ }
+ return b;
+-#elif defined(__FreeBSD__) || defined(__OpenBSD__)
++#elif defined(__OpenBSD__)
+ char resolved_path[MAXPATHLEN];
+
+ realpath(OS::get_executable_path().utf8().get_data(), resolved_path);
+
+ return String(resolved_path);
++
++#elif defined(__FreeBSD__)
++ int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
++ char buf[MAXPATHLEN];
++ size_t len = sizeof(buf);
++ if (sysctl(mib, 4, buf, &len, NULL, 0) != 0) {
++ WARN_PRINT("Couldn't get executable path from sysctl");
++ return OS::get_executable_path();
++ }
++ String b;
++ b.parse_utf8(buf);
++ return b;
+ #elif defined(__APPLE__)
+ char temp_path[1];
+ uint32_t buff_size = 1;
diff --git a/devel/godot2/files/patch-modules_speex_audio__stream__speex.cpp b/devel/godot2/files/patch-modules_speex_audio__stream__speex.cpp
new file mode 100644
index 000000000000..9cb0eac898e6
--- /dev/null
+++ b/devel/godot2/files/patch-modules_speex_audio__stream__speex.cpp
@@ -0,0 +1,11 @@
+--- modules/speex/audio_stream_speex.cpp.orig 2017-12-28 01:20:49 UTC
++++ modules/speex/audio_stream_speex.cpp
+@@ -29,7 +29,7 @@
+ #include "audio_stream_speex.h"
+
+ #include "os/os.h"
+-#include "os_support.h"
++#include "thirdparty/speex/os_support.h"
+ #define READ_CHUNK 1024
+
+ static _FORCE_INLINE_ uint16_t le_short(uint16_t s) {
diff --git a/devel/godot2/files/patch-modules_squish_SCsub b/devel/godot2/files/patch-modules_squish_SCsub
new file mode 100644
index 000000000000..307d0a3ccb25
--- /dev/null
+++ b/devel/godot2/files/patch-modules_squish_SCsub
@@ -0,0 +1,11 @@
+--- modules/squish/SCsub.orig 2018-06-13 13:01:57 UTC
++++ modules/squish/SCsub
+@@ -23,7 +23,7 @@ if (env['builtin_squish'] != 'no'):
+ thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
+
+ env_squish.add_source_files(env.modules_sources, thirdparty_sources)
+- env_squish.Append(CPPPATH=[thirdparty_dir])
++ env_squish.Prepend(CPPPATH=[thirdparty_dir])
+
+ # Godot source files
+ env_squish.add_source_files(env.modules_sources, "*.cpp")
diff --git a/devel/godot2/files/patch-platform_x11_detect.py b/devel/godot2/files/patch-platform_x11_detect.py
new file mode 100644
index 000000000000..efa93447d436
--- /dev/null
+++ b/devel/godot2/files/patch-platform_x11_detect.py
@@ -0,0 +1,94 @@
+--- platform/x11/detect.py.orig 2018-07-29 00:47:52 UTC
++++ platform/x11/detect.py
+@@ -56,7 +56,9 @@ def get_opts():
+ ('use_sanitizer', 'Use llvm compiler sanitize address', 'no'),
+ ('use_leak_sanitizer', 'Use llvm compiler sanitize memory leaks', 'no'),
+ ('use_lto', 'Use link time optimization', 'no'),
+- ('pulseaudio', 'Detect & Use pulseaudio', 'yes'),
++ ('alsa','Detect & Use alsa audio','no'),
++ ('oss','Detect & Use OSS audio','no'),
++ ('pulseaudio', 'Detect & Use pulseaudio', 'no'),
+ ('udev', 'Use udev for gamepad connection callbacks', 'no'),
+ ('debug_release', 'Add debug symbols to release version', 'no'),
+ ('touch', 'Enable touch events', 'yes'),
+@@ -85,10 +87,6 @@ def configure(env):
+
+ env.Append(CPPPATH=['#platform/x11'])
+ if (env["use_llvm"] == "yes"):
+- if 'clang++' not in env['CXX']:
+- env["CC"] = "clang"
+- env["CXX"] = "clang++"
+- env["LD"] = "clang++"
+ env.Append(CPPFLAGS=['-DTYPED_METHOD_BIND'])
+ env.extra_suffix = ".llvm"
+ elif (os.system("gcc --version > /dev/null 2>&1") == 0): # GCC
+@@ -126,19 +124,14 @@ def configure(env):
+ env.Append(LINKFLAGS=['-pipe'])
+
+ if (env["target"] == "release"):
+- env.Prepend(CCFLAGS=['-Ofast'])
+- if (env["debug_release"] == "yes"):
+- env.Prepend(CCFLAGS=['-g2'])
++ pass
+
+ elif (env["target"] == "release_debug"):
+-
+- env.Prepend(CCFLAGS=['-O2', '-ffast-math', '-DDEBUG_ENABLED'])
+- if (env["debug_release"] == "yes"):
+- env.Prepend(CCFLAGS=['-g2'])
+-
++ env.Prepend(CCFLAGS=['-DDEBUG_ENABLED'])
++
+ elif (env["target"] == "debug"):
+
+- env.Prepend(CCFLAGS=['-g2', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED'])
++ env.Prepend(CCFLAGS=['-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED'])
+ env.Append(LINKFLAGS=['-rdynamic'])
+
+ env.ParseConfig('pkg-config x11 --cflags --libs')
+@@ -155,7 +148,12 @@ def configure(env):
+ env.Append(CPPFLAGS=['-DTOUCH_ENABLED'])
+
+ if (env['builtin_openssl'] == 'no'):
+- env.ParseConfig('pkg-config openssl --cflags --libs')
++ try:
++ # try to find a port installed openssl
++ env.ParseConfig('pkg-config openssl --cflags --libs')
++ except:
++ # if none found use base system openssl
++ env.ParseConfig('echo -lssl -lcrypto')
+
+ if (env['builtin_libwebp'] == 'no'):
+ env.ParseConfig('pkg-config libwebp --cflags --libs')
+@@ -200,12 +198,13 @@ def configure(env):
+ if (env['builtin_glew'] == 'no'):
+ env.ParseConfig('pkg-config glew --cflags --libs')
+
+- if os.system("pkg-config --exists alsa") == 0:
+- print("Enabling ALSA")
+- env.Append(CPPFLAGS=["-DALSA_ENABLED"])
+- env.ParseConfig('pkg-config alsa --cflags --libs')
+- else:
+- print("ALSA libraries not found, disabling driver")
++ if (env["alsa"]=="yes"):
++ if os.system("pkg-config --exists alsa")==0:
++ print("Enabling ALSA")
++ env.Append(CPPFLAGS=["-DALSA_ENABLED"])
++ env.Append(LIBS=['asound'])
++ else:
++ print("ALSA libraries not found, disabling driver")
+
+ if (platform.system() == "Linux"):
+ env.Append(CPPFLAGS=["-DJOYDEV_ENABLED"])
+@@ -220,6 +219,11 @@ def configure(env):
+ else:
+ print("libudev development libraries not found, disabling udev support")
+
++ if (env["oss"]=="yes"):
++ print("Enabling OSS Audio")
++ env.Append(CPPFLAGS=["-DOSS_ENABLED"])
++ env.Append(CCFLAGS=['-Ithirdparty/rtaudio'])
++
+ if (env["pulseaudio"] == "yes"):
+ if not os.system("pkg-config --exists libpulse-simple"):
+ print("Enabling PulseAudio")
diff --git a/devel/godot2/files/patch-thirdparty_glew_glew.c b/devel/godot2/files/patch-thirdparty_glew_glew.c
new file mode 100644
index 000000000000..3c7c2653c2c5
--- /dev/null
+++ b/devel/godot2/files/patch-thirdparty_glew_glew.c
@@ -0,0 +1,11 @@
+--- thirdparty/glew/glew.c.orig 2017-12-28 02:06:18 UTC
++++ thirdparty/glew/glew.c
+@@ -30,7 +30,7 @@
+ ** THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+-#include <GL/glew.h>
++#include "thirdparty/glew/GL/glew.h"
+
+ #if defined(_WIN32)
+ # include <GL/wglew.h>
diff --git a/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.cpp b/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.cpp
new file mode 100644
index 000000000000..02dd71439c98
--- /dev/null
+++ b/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.cpp
@@ -0,0 +1,89 @@
+--- thirdparty/rtaudio/RtAudio.cpp.orig 2016-08-09 07:52:15 UTC
++++ thirdparty/rtaudio/RtAudio.cpp
+@@ -8589,6 +8589,12 @@ bool RtApiPulse::probeDeviceOpen( unsign
+ #include <errno.h>
+ #include <math.h>
+
++#if defined(__FreeBSD__)
++#define SND_DEVICE "/dev/dsp"
++#else
++#define SND_DEVICE "/dev/mixer"
++#endif
++
+ static void *ossCallbackHandler(void * ptr);
+
+ // A structure to hold various information related to the OSS API
+@@ -8615,9 +8621,11 @@ RtApiOss :: ~RtApiOss()
+
+ unsigned int RtApiOss :: getDeviceCount( void )
+ {
+- int mixerfd = open( "/dev/mixer", O_RDWR, 0 );
++ int mixerfd = open( SND_DEVICE, O_RDWR, 0 );
+ if ( mixerfd == -1 ) {
+- errorText_ = "RtApiOss::getDeviceCount: error opening '/dev/mixer'.";
++ errorText_ = "RtApiOss::getDeviceCount: error opening '";
++ errorText_ += SND_DEVICE;
++ errorText_ += "'.";
+ error( RtAudioError::WARNING );
+ return 0;
+ }
+@@ -8639,9 +8647,11 @@ RtAudio::DeviceInfo RtApiOss :: getDevic
+ RtAudio::DeviceInfo info;
+ info.probed = false;
+
+- int mixerfd = open( "/dev/mixer", O_RDWR, 0 );
++ int mixerfd = open( SND_DEVICE, O_RDWR, 0 );
+ if ( mixerfd == -1 ) {
+- errorText_ = "RtApiOss::getDeviceInfo: error opening '/dev/mixer'.";
++ errorText_ = "RtApiOss::getDeviceInfo: error opening '";
++ errorText_ += SND_DEVICE;
++ errorText_ += "'.";
+ error( RtAudioError::WARNING );
+ return info;
+ }
+@@ -8697,8 +8707,10 @@ RtAudio::DeviceInfo RtApiOss :: getDevic
+ info.nativeFormats |= RTAUDIO_SINT8;
+ if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE )
+ info.nativeFormats |= RTAUDIO_SINT32;
++#if defined(AFMT_FLOAT)
+ if ( mask & AFMT_FLOAT )
+ info.nativeFormats |= RTAUDIO_FLOAT32;
++#endif
+ if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE )
+ info.nativeFormats |= RTAUDIO_SINT24;
+
+@@ -8757,9 +8769,11 @@ bool RtApiOss :: probeDeviceOpen( unsign
+ RtAudioFormat format, unsigned int *bufferSize,
+ RtAudio::StreamOptions *options )
+ {
+- int mixerfd = open( "/dev/mixer", O_RDWR, 0 );
++ int mixerfd = open( SND_DEVICE, O_RDWR, 0 );
+ if ( mixerfd == -1 ) {
+- errorText_ = "RtApiOss::probeDeviceOpen: error opening '/dev/mixer'.";
++ errorText_ = "RtApiOss::probeDeviceOpen: error opening '";
++ errorText_ += SND_DEVICE;
++ errorText_ += "'.";
+ return FAILURE;
+ }
+
+@@ -8787,7 +8801,11 @@ bool RtApiOss :: probeDeviceOpen( unsign
+ }
+
+ oss_audioinfo ainfo;
++#if defined(__FreeBSD__)
++ ainfo.dev = -1; // specify -1 to get default device
++#else
+ ainfo.dev = device;
++#endif
+ result = ioctl( mixerfd, SNDCTL_AUDIOINFO, &ainfo );
+ close( mixerfd );
+ if ( result == -1 ) {
+@@ -9025,7 +9043,7 @@ bool RtApiOss :: probeDeviceOpen( unsign
+ }
+
+ // Verify the sample rate setup worked.
+- if ( abs( srate - sampleRate ) > 100 ) {
++ if ( abs( srate - (int)sampleRate ) > 100 ) {
+ close( fd );
+ errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") does not support sample rate (" << sampleRate << ").";
+ errorText_ = errorStream_.str();
diff --git a/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.h b/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.h
new file mode 100644
index 000000000000..010a8222e1a8
--- /dev/null
+++ b/devel/godot2/files/patch-thirdparty_rtaudio_RtAudio.h
@@ -0,0 +1,16 @@
+--- thirdparty/rtaudio/RtAudio.h.orig 2016-08-09 07:52:15 UTC
++++ thirdparty/rtaudio/RtAudio.h
+@@ -5,7 +5,13 @@
+ #if defined(OSX_ENABLED)
+ #define __MACOSX_CORE__
+ #elif defined(UNIX_ENABLED)
++#if defined(OSS_ENABLED)
++ #define __LINUX_OSS__
++#elif defined(ALSA_ENABLED)
+ #define __LINUX_ALSA__
++#elif defined(PULSEAUDIO_ENABLED)
++ #define __LINUX_PULSE__
++#endif
+ #elif defined(WINDOWS_ENABLED)
+ #if defined(WINRT_ENABLED)
+ #define __RTAUDIO_DUMMY__
diff --git a/devel/godot2/pkg-descr b/devel/godot2/pkg-descr
new file mode 100644
index 000000000000..0359653751fd
--- /dev/null
+++ b/devel/godot2/pkg-descr
@@ -0,0 +1,9 @@
+Godot is a multi-platform 2D and 3D game engine. It also provides a
+feature rich development environment.
+
+Easily deploy your game on IOS, android, OSX, Linux, Steam, Windows or PS3.
+
+This port installs the older v2 to support projects that
+haven't been updated for v3.0
+
+WWW: http://www.godotengine.org/
diff --git a/devel/libhid/Makefile b/devel/libhid/Makefile
new file mode 100644
index 000000000000..f75e2e3b911a
--- /dev/null
+++ b/devel/libhid/Makefile
@@ -0,0 +1,31 @@
+# Created by: ntarmos@ceid.upatras.gr
+# $FreeBSD$
+
+PORTNAME= libhid
+PORTVERSION= 0.2.16
+PORTREVISION= 4
+CATEGORIES= devel
+MASTER_SITES= https://alioth-archive.debian.org/releases/libhid/libhid/${PORTVERSION}/
+
+MAINTAINER= ntarmos@cs.uoi.gr
+COMMENT= User-space HID access library written in C
+
+LICENSE= GPLv2
+
+BUILD_DEPENDS= ${LOCALBASE}/bin/xsltproc:textproc/libxslt \
+ docbook-xsl>0:textproc/docbook-xsl \
+ ${LOCALBASE}/bin/swig:devel/swig
+
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS= --without-doxygen --disable-werror
+INSTALL_TARGET= install-strip
+USES= gmake libtool pathfix python:2.7
+USE_LDCONFIG= yes
+
+EXTRA_PATCHES= ${FILESDIR}/extra-patch-usb
+
+post-patch:
+ @${REINPLACE_CMD} -e "s/required=1\.3/required=3.0/g" \
+ ${WRKSRC}/configure
+
+.include <bsd.port.mk>
diff --git a/devel/libhid/distinfo b/devel/libhid/distinfo
new file mode 100644
index 000000000000..d12a9190ef02
--- /dev/null
+++ b/devel/libhid/distinfo
@@ -0,0 +1,2 @@
+SHA256 (libhid-0.2.16.tar.gz) = f6809ab3b9c907cbb05ceba9ee6ca23a705f85fd71588518e14b3a7d9f2550e5
+SIZE (libhid-0.2.16.tar.gz) = 435245
diff --git a/devel/libhid/files/extra-patch-usb b/devel/libhid/files/extra-patch-usb
new file mode 100644
index 000000000000..af78de7e0e45
--- /dev/null
+++ b/devel/libhid/files/extra-patch-usb
@@ -0,0 +1,12 @@
+--- configure.orig 2007-04-26 04:25:25.000000000 +0400
++++ configure 2009-03-07 20:26:02.000000000 +0300
+@@ -4846,8 +4846,8 @@
+ done
+
+
+- LIBUSB_CFLAGS="`libusb-config --cflags`"
+- LIBUSB_LIBS="`libusb-config --libs`"
++ LIBUSB_CFLAGS=""
++ LIBUSB_LIBS="-lusb"
+
+
diff --git a/devel/libhid/files/patch-Makefile.in b/devel/libhid/files/patch-Makefile.in
new file mode 100644
index 000000000000..05066af6360a
--- /dev/null
+++ b/devel/libhid/files/patch-Makefile.in
@@ -0,0 +1,11 @@
+--- Makefile.in.orig 2007-07-16 13:40:13.000000000 +0300
++++ Makefile.in 2007-07-16 13:41:37.000000000 +0300
+@@ -293,7 +293,7 @@
+ README.licence
+
+ DEBIAN_VERSION = ${shell head -1 debian/changelog 2>/dev/null | sed -e '1s,.*(\([^)]*\)).*,\1,'}
+-DEBIAN_ARCH = $(shell test -x `which dpkg-architecture 2>/dev/null` && dpkg-architecture -qDEB_BUILD_ARCH 2>/dev/null || echo i386)
++DEBIAN_ARCH = i386
+ TARBALL = $(distdir).tar.gz
+ DEBDIR = .debian
+ STAMP = $(DEBDIR)/stamp
diff --git a/devel/libhid/files/patch-configure b/devel/libhid/files/patch-configure
new file mode 100644
index 000000000000..894729023634
--- /dev/null
+++ b/devel/libhid/files/patch-configure
@@ -0,0 +1,31 @@
+--- configure.orig 2007-04-26 00:25:25 UTC
++++ configure
+@@ -22433,19 +22433,6 @@ echo "${ECHO_T}$swig_version" >&6; }
+ if test -z "$available_patch" ; then
+ available_patch=0
+ fi
+- if test $available_major -ne $required_major \
+- -o $available_minor -ne $required_minor \
+- -o $available_patch -lt $required_patch ; then
+- { echo "$as_me:$LINENO: WARNING: SWIG version >= 1.3 is required. You have $swig_version. You should look at http://www.swig.org" >&5
+-echo "$as_me: WARNING: SWIG version >= 1.3 is required. You have $swig_version. You should look at http://www.swig.org" >&2;}
+- SWIG='echo "Error: SWIG version >= 1.3 is required. You have '"$swig_version"'. You should look at http://www.swig.org" ; false'
+- else
+- { echo "$as_me:$LINENO: SWIG executable is '$SWIG'" >&5
+-echo "$as_me: SWIG executable is '$SWIG'" >&6;}
+- SWIG_LIB=`$SWIG -swiglib`
+- { echo "$as_me:$LINENO: SWIG library directory is '$SWIG_LIB'" >&5
+-echo "$as_me: SWIG library directory is '$SWIG_LIB'" >&6;}
+- fi
+ else
+ { echo "$as_me:$LINENO: WARNING: cannot determine SWIG version" >&5
+ echo "$as_me: WARNING: cannot determine SWIG version" >&2;}
+@@ -22785,7 +22772,7 @@ echo $ECHO_N "checking for Python library path... $ECH
+
+ PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
+ import os; \
+- print apply(os.path.join, get_config_vars('LIBPL', 'LDLIBRARY'))"`
++ print apply(os.path.join, get_config_vars('LIBDIR', 'LDLIBRARY'))"`
+ fi
+ { echo "$as_me:$LINENO: result: $PYTHON_LDFLAGS" >&5
+ echo "${ECHO_T}$PYTHON_LDFLAGS" >&6; }
diff --git a/devel/libhid/files/patch-hidparser-hidtypes.h b/devel/libhid/files/patch-hidparser-hidtypes.h
new file mode 100644
index 000000000000..43086c0b8506
--- /dev/null
+++ b/devel/libhid/files/patch-hidparser-hidtypes.h
@@ -0,0 +1,11 @@
+--- hidparser/hidtypes.h.orig 2007-07-16 12:21:55.000000000 +0300
++++ hidparser/hidtypes.h 2007-07-16 12:22:04.000000000 +0300
+@@ -21,7 +21,7 @@
+ typedef unsigned char uchar;
+ #endif
+
+-#if HPUX || __APPLE__
++#if HPUX || __APPLE__ || __FreeBSD__
+ typedef unsigned long ulong;
+ #endif
+
diff --git a/devel/libhid/files/patch-src_hid_initialisation.c b/devel/libhid/files/patch-src_hid_initialisation.c
new file mode 100644
index 000000000000..014adf4987dd
--- /dev/null
+++ b/devel/libhid/files/patch-src_hid_initialisation.c
@@ -0,0 +1,10 @@
+--- src/hid_initialisation.c.orig 2009-03-07 20:27:43.000000000 +0300
++++ src/hid_initialisation.c 2009-03-07 20:29:25.000000000 +0300
+@@ -4,6 +4,7 @@
+ #define HID_INTERNAL
+
+ #include "config.h"
++#include <stdlib.h>
+ #include <hid.h>
+ #include <hid_helpers.h>
+
diff --git a/devel/libhid/files/patch-src_hid_opening.c b/devel/libhid/files/patch-src_hid_opening.c
new file mode 100644
index 000000000000..19b080d901ee
--- /dev/null
+++ b/devel/libhid/files/patch-src_hid_opening.c
@@ -0,0 +1,9 @@
+--- src/hid_opening.c.orig 2009-03-07 20:28:09.000000000 +0300
++++ src/hid_opening.c 2009-03-07 20:29:17.000000000 +0300
+@@ -1,5 +1,6 @@
+ #define HID_INTERNAL
+
++#include <stdlib.h>
+ #include <hid.h>
+ #include <hid_helpers.h>
+ #include <os.h>
diff --git a/devel/libhid/files/patch-src_hid_parsing.c b/devel/libhid/files/patch-src_hid_parsing.c
new file mode 100644
index 000000000000..3eccd4b712e1
--- /dev/null
+++ b/devel/libhid/files/patch-src_hid_parsing.c
@@ -0,0 +1,9 @@
+--- src/hid_parsing.c.orig 2009-03-07 20:29:35.000000000 +0300
++++ src/hid_parsing.c 2009-03-07 20:29:43.000000000 +0300
+@@ -1,5 +1,6 @@
+ #define HID_INTERNAL
+
++#include <stdlib.h>
+ #include <hid.h>
+ #include <hid_helpers.h>
+
diff --git a/devel/libhid/files/patch-test_lshid.c b/devel/libhid/files/patch-test_lshid.c
new file mode 100644
index 000000000000..2b107ca7b9a1
--- /dev/null
+++ b/devel/libhid/files/patch-test_lshid.c
@@ -0,0 +1,10 @@
+--- test/lshid.c.orig 2009-03-07 20:30:14.000000000 +0300
++++ test/lshid.c 2009-03-07 20:30:20.000000000 +0300
+@@ -23,6 +23,7 @@
+
+ #include <hid.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+
+ char *hid_id[32]; /* FIXME: 32 devices MAX */
diff --git a/devel/libhid/files/patch-test_test_libhid.c b/devel/libhid/files/patch-test_test_libhid.c
new file mode 100644
index 000000000000..dbb18830a719
--- /dev/null
+++ b/devel/libhid/files/patch-test_test_libhid.c
@@ -0,0 +1,9 @@
+--- test/test_libhid.c.orig 2009-03-07 20:29:59.000000000 +0300
++++ test/test_libhid.c 2009-03-07 20:30:05.000000000 +0300
+@@ -1,5 +1,6 @@
+ #include <hid.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+
+ bool match_serial_number(struct usb_dev_handle* usbdev, void* custom, unsigned int len)
diff --git a/devel/libhid/pkg-descr b/devel/libhid/pkg-descr
new file mode 100644
index 000000000000..4ff19da6b2a4
--- /dev/null
+++ b/devel/libhid/pkg-descr
@@ -0,0 +1,9 @@
+LibHID is a user-space HID access library written in C. It provides a
+generic and flexible way to access and interact with USB HID devices,
+much like libusb does for plain USB devices. It is based on libusb, thus
+it requires no HID support in the kernel. Furthermore, it aims to
+support all operating system supported by libusb: Linux, BSD, OS X, and
+Windows.
+
+
+WWW: http://libhid.alioth.debian.org/
diff --git a/devel/libhid/pkg-plist b/devel/libhid/pkg-plist
new file mode 100644
index 000000000000..6712d2597a88
--- /dev/null
+++ b/devel/libhid/pkg-plist
@@ -0,0 +1,23 @@
+bin/libhid-detach-device
+include/hid.h
+include/hidparser.h
+include/hidtypes.h
+lib/libhid.a
+lib/libhid.so
+lib/libhid.so.0
+lib/libhid.so.0.0.0
+libdata/pkgconfig/libhid.pc
+man/man1/libhid-detach-device.1.gz
+%%PYTHON_SITELIBDIR%%/libhid/_hid.a
+%%PYTHON_SITELIBDIR%%/libhid/_hid.so
+%%PYTHON_SITELIBDIR%%/libhid/_hid.so.0
+%%PYTHON_SITELIBDIR%%/libhid/_hid.so.0.0.0
+%%PYTHON_SITELIBDIR%%/libhid/__init__.py
+%%PYTHON_SITELIBDIR%%/libhid/__init__.pyc
+%%PYTHON_SITELIBDIR%%/libhid/__init__.pyo
+%%PYTHON_SITELIBDIR%%/libhid/hid.py
+%%PYTHON_SITELIBDIR%%/libhid/hid.pyc
+%%PYTHON_SITELIBDIR%%/libhid/hid.pyo
+%%PYTHON_SITELIBDIR%%/libhid/hidwrap.py
+%%PYTHON_SITELIBDIR%%/libhid/hidwrap.pyc
+%%PYTHON_SITELIBDIR%%/libhid/hidwrap.pyo
diff --git a/devel/libosmocore/Makefile b/devel/libosmocore/Makefile
new file mode 100644
index 000000000000..c22213d16549
--- /dev/null
+++ b/devel/libosmocore/Makefile
@@ -0,0 +1,50 @@
+# $FreeBSD$
+
+PORTNAME= libosmocore
+PORTVERSION= 1.2.0
+CATEGORIES= devel
+MASTER_SITES= http://git.osmocom.org/libosmocore/snapshot/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Common library for all Osmocom projects
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libgnutls.so:security/gnutls \
+ libpcsclite.so:devel/pcsc-lite \
+ libtalloc.so:devel/talloc
+
+USES= alias autoreconf gmake libtool pathfix pkgconfig python:2.7 \
+ shebangfix
+
+GNU_CONFIGURE= yes
+LDFLAGS+= -lexecinfo
+USE_LDCONFIG= yes
+INSTALL_TARGET= install-strip
+PORTDOCS= *
+SHEBANG_FILES= utils/conv_codes_gsm.py utils/conv_gen.py
+python_OLD_CMD= /usr/bin/python2
+
+CFLAGS+= -fcommon
+
+OPTIONS_DEFINE= DOCS DOXYGEN
+
+DOXYGEN_IMPLIES= DOCS
+DOXYGEN_BUILD_DEPENDS= dot:graphics/graphviz \
+ doxygen:devel/doxygen
+DOXYGEN_CONFIGURE_ENV_OFF= ac_cv_path_DOXYGEN=false
+
+post-patch:
+ ${ECHO_CMD} ${PORTVERSION} > ${WRKSRC}/.tarball-version
+ @${REINPLACE_CMD} -e '/#pragma GCC diagnostic/d' \
+ ${WRKSRC}/src/application.c \
+ ${WRKSRC}/src/gb/gprs_bssgp.c \
+ ${WRKSRC}/src/gb/gprs_bssgp_bss.c
+ @${REINPLACE_CMD} -e 's/python2/${PYTHON_VERSION}/' \
+ -e 's,(AM_V_GEN)python ,(AM_V_GEN)${PYTHON_VERSION} ,' \
+ ${WRKSRC}/include/Makefile.am \
+ ${WRKSRC}/src/gsm/Makefile.am \
+ ${WRKSRC}/tests/Makefile.am
+
+.include <bsd.port.mk>
diff --git a/devel/libosmocore/distinfo b/devel/libosmocore/distinfo
new file mode 100644
index 000000000000..efc51dd437c6
--- /dev/null
+++ b/devel/libosmocore/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1568838407
+SHA256 (libosmocore-1.2.0.tar.gz) = 74b8e0edb2a97eb3665f4004ed7b5c6a42c2e3f5fe29dcd5d474e7c4d1d11888
+SIZE (libosmocore-1.2.0.tar.gz) = 1234979
diff --git a/devel/libosmocore/files/patch-src_gb_gprs__ns__sns.c b/devel/libosmocore/files/patch-src_gb_gprs__ns__sns.c
new file mode 100644
index 000000000000..491952688a7e
--- /dev/null
+++ b/devel/libosmocore/files/patch-src_gb_gprs__ns__sns.c
@@ -0,0 +1,11 @@
+--- src/gb/gprs_ns_sns.c.orig 2019-05-22 09:31:16 UTC
++++ src/gb/gprs_ns_sns.c
+@@ -11,6 +11,8 @@
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+
++#include <sys/socket.h>
++
+ #include <osmocom/core/fsm.h>
+ #include <osmocom/core/msgb.h>
+ #include <osmocom/core/signal.h>
diff --git a/devel/libosmocore/files/patch-src_sockaddr__str.c b/devel/libosmocore/files/patch-src_sockaddr__str.c
new file mode 100644
index 000000000000..62010f401a11
--- /dev/null
+++ b/devel/libosmocore/files/patch-src_sockaddr__str.c
@@ -0,0 +1,11 @@
+--- src/sockaddr_str.c.orig 2019-05-22 09:18:33 UTC
++++ src/sockaddr_str.c
+@@ -38,6 +38,8 @@
+ #include <osmocom/core/utils.h>
+ #include <osmocom/core/byteswap.h>
+
++#include <sys/socket.h>
++
+ /*! \addtogroup sockaddr_str
+ *
+ * Common operations to store IP address as a char string along with a uint16_t port number.
diff --git a/devel/libosmocore/files/patch-src_timer__clockgettime.c b/devel/libosmocore/files/patch-src_timer__clockgettime.c
new file mode 100644
index 000000000000..1e24cd2ea431
--- /dev/null
+++ b/devel/libosmocore/files/patch-src_timer__clockgettime.c
@@ -0,0 +1,27 @@
+--- src/timer_clockgettime.c.orig 2019-05-07 16:36:51 UTC
++++ src/timer_clockgettime.c
+@@ -75,16 +75,16 @@ static struct fakeclock* clkid_to_fakeclock(clockid_t
+ switch(clk_id) {
+ case CLOCK_REALTIME:
+ return &realtime;
+- case CLOCK_REALTIME_COARSE:
+- return &realtime_coarse;
++// case CLOCK_REALTIME_COARSE:
++// return &realtime_coarse;
+ case CLOCK_MONOTONIC:
+ return &mono;
+- case CLOCK_MONOTONIC_COARSE:
+- return &mono_coarse;
+- case CLOCK_MONOTONIC_RAW:
+- return &mono_raw;
+- case CLOCK_BOOTTIME:
+- return &boottime;
++// case CLOCK_MONOTONIC_COARSE:
++// return &mono_coarse;
++// case CLOCK_MONOTONIC_RAW:
++// return &mono_raw;
++// case CLOCK_BOOTTIME:
++// return &boottime;
+ case CLOCK_PROCESS_CPUTIME_ID:
+ return &proc_cputime_id;
+ case CLOCK_THREAD_CPUTIME_ID:
diff --git a/devel/libosmocore/pkg-descr b/devel/libosmocore/pkg-descr
new file mode 100644
index 000000000000..7c3933fcfbc2
--- /dev/null
+++ b/devel/libosmocore/pkg-descr
@@ -0,0 +1,7 @@
+libosmocore is a library with various utility functions that were
+originally developed as part of the OpenBSC project, but which are
+of a more generic nature and thus useful to (at least) other programs
+that we develop in the sphere of Free Software / Open Source mobile
+communications.
+
+WWW: http://bb.osmocom.org/trac/wiki/libosmocore
diff --git a/devel/libosmocore/pkg-plist b/devel/libosmocore/pkg-plist
new file mode 100644
index 000000000000..b0152855ae4d
--- /dev/null
+++ b/devel/libosmocore/pkg-plist
@@ -0,0 +1,185 @@
+bin/osmo-arfcn
+bin/osmo-auc-gen
+bin/osmo-config-merge
+bin/osmo-release.sh
+include/osmo-release.mk
+include/osmocom/codec/codec.h
+include/osmocom/codec/ecu.h
+include/osmocom/codec/gsm610_bits.h
+include/osmocom/coding/gsm0503_coding.h
+include/osmocom/coding/gsm0503_interleaving.h
+include/osmocom/coding/gsm0503_mapping.h
+include/osmocom/coding/gsm0503_parity.h
+include/osmocom/coding/gsm0503_tables.h
+include/osmocom/core/application.h
+include/osmocom/core/backtrace.h
+include/osmocom/core/bit16gen.h
+include/osmocom/core/bit32gen.h
+include/osmocom/core/bit64gen.h
+include/osmocom/core/bitcomp.h
+include/osmocom/core/bits.h
+include/osmocom/core/bitvec.h
+include/osmocom/core/byteswap.h
+include/osmocom/core/conv.h
+include/osmocom/core/counter.h
+include/osmocom/core/crc16.h
+include/osmocom/core/crc16gen.h
+include/osmocom/core/crc32gen.h
+include/osmocom/core/crc64gen.h
+include/osmocom/core/crc8gen.h
+include/osmocom/core/crcgen.h
+include/osmocom/core/defs.h
+include/osmocom/core/endian.h
+include/osmocom/core/fsm.h
+include/osmocom/core/gsmtap.h
+include/osmocom/core/gsmtap_util.h
+include/osmocom/core/isdnhdlc.h
+include/osmocom/core/linuxlist.h
+include/osmocom/core/linuxrbtree.h
+include/osmocom/core/logging.h
+include/osmocom/core/loggingrb.h
+include/osmocom/core/macaddr.h
+include/osmocom/core/msgb.h
+include/osmocom/core/msgfile.h
+include/osmocom/core/panic.h
+include/osmocom/core/plugin.h
+include/osmocom/core/prbs.h
+include/osmocom/core/prim.h
+include/osmocom/core/process.h
+include/osmocom/core/rate_ctr.h
+include/osmocom/core/select.h
+include/osmocom/core/sercomm.h
+include/osmocom/core/serial.h
+include/osmocom/core/signal.h
+include/osmocom/core/sockaddr_str.h
+include/osmocom/core/socket.h
+include/osmocom/core/stat_item.h
+include/osmocom/core/statistics.h
+include/osmocom/core/stats.h
+include/osmocom/core/strrb.h
+include/osmocom/core/talloc.h
+include/osmocom/core/tdef.h
+include/osmocom/core/timer.h
+include/osmocom/core/timer_compat.h
+include/osmocom/core/use_count.h
+include/osmocom/core/utils.h
+include/osmocom/core/write_queue.h
+include/osmocom/crypt/auth.h
+include/osmocom/crypt/gprs_cipher.h
+include/osmocom/ctrl/control_cmd.h
+include/osmocom/ctrl/control_if.h
+include/osmocom/ctrl/control_vty.h
+include/osmocom/ctrl/ports.h
+include/osmocom/gprs/gprs_bssgp.h
+include/osmocom/gprs/gprs_bssgp_bss.h
+include/osmocom/gprs/gprs_msgb.h
+include/osmocom/gprs/gprs_ns.h
+include/osmocom/gprs/gprs_ns_frgre.h
+include/osmocom/gprs/gprs_rlc.h
+include/osmocom/gprs/protocol/gsm_04_60.h
+include/osmocom/gprs/protocol/gsm_08_16.h
+include/osmocom/gprs/protocol/gsm_08_18.h
+include/osmocom/gsm/a5.h
+include/osmocom/gsm/abis_nm.h
+include/osmocom/gsm/apn.h
+include/osmocom/gsm/bitvec_gsm.h
+include/osmocom/gsm/bts_features.h
+include/osmocom/gsm/cbsp.h
+include/osmocom/gsm/comp128.h
+include/osmocom/gsm/comp128v23.h
+include/osmocom/gsm/gan.h
+include/osmocom/gsm/gsm0341.h
+include/osmocom/gsm/gsm0411_smc.h
+include/osmocom/gsm/gsm0411_smr.h
+include/osmocom/gsm/gsm0411_utils.h
+include/osmocom/gsm/gsm0480.h
+include/osmocom/gsm/gsm0502.h
+include/osmocom/gsm/gsm0503.h
+include/osmocom/gsm/gsm0808.h
+include/osmocom/gsm/gsm0808_utils.h
+include/osmocom/gsm/gsm23003.h
+include/osmocom/gsm/gsm29118.h
+include/osmocom/gsm/gsm29205.h
+include/osmocom/gsm/gsm48.h
+include/osmocom/gsm/gsm48_arfcn_range_encode.h
+include/osmocom/gsm/gsm48_ie.h
+include/osmocom/gsm/gsm48_rest_octets.h
+include/osmocom/gsm/gsm_utils.h
+include/osmocom/gsm/gsup.h
+include/osmocom/gsm/gsup_sms.h
+include/osmocom/gsm/ipa.h
+include/osmocom/gsm/l1sap.h
+include/osmocom/gsm/lapd_core.h
+include/osmocom/gsm/lapdm.h
+include/osmocom/gsm/meas_rep.h
+include/osmocom/gsm/mncc.h
+include/osmocom/gsm/oap.h
+include/osmocom/gsm/oap_client.h
+include/osmocom/gsm/prim.h
+include/osmocom/gsm/protocol/gsm_03_40.h
+include/osmocom/gsm/protocol/gsm_03_41.h
+include/osmocom/gsm/protocol/gsm_04_08.h
+include/osmocom/gsm/protocol/gsm_04_08_gprs.h
+include/osmocom/gsm/protocol/gsm_04_11.h
+include/osmocom/gsm/protocol/gsm_04_12.h
+include/osmocom/gsm/protocol/gsm_04_14.h
+include/osmocom/gsm/protocol/gsm_04_80.h
+include/osmocom/gsm/protocol/gsm_08_08.h
+include/osmocom/gsm/protocol/gsm_08_58.h
+include/osmocom/gsm/protocol/gsm_09_02.h
+include/osmocom/gsm/protocol/gsm_12_21.h
+include/osmocom/gsm/protocol/gsm_23_003.h
+include/osmocom/gsm/protocol/gsm_23_041.h
+include/osmocom/gsm/protocol/gsm_29_118.h
+include/osmocom/gsm/protocol/gsm_44_318.h
+include/osmocom/gsm/protocol/gsm_48_049.h
+include/osmocom/gsm/protocol/ipaccess.h
+include/osmocom/gsm/protocol/smpp34_osmocom.h
+include/osmocom/gsm/rsl.h
+include/osmocom/gsm/rxlev_stat.h
+include/osmocom/gsm/sysinfo.h
+include/osmocom/gsm/tlv.h
+include/osmocom/sim/class_tables.h
+include/osmocom/sim/sim.h
+include/osmocom/vty/buffer.h
+include/osmocom/vty/command.h
+include/osmocom/vty/logging.h
+include/osmocom/vty/misc.h
+include/osmocom/vty/ports.h
+include/osmocom/vty/stats.h
+include/osmocom/vty/tdef_vty.h
+include/osmocom/vty/telnet_interface.h
+include/osmocom/vty/vector.h
+include/osmocom/vty/vty.h
+lib/libosmocodec.so
+lib/libosmocodec.so.0
+lib/libosmocodec.so.0.1.1
+lib/libosmocoding.so
+lib/libosmocoding.so.0
+lib/libosmocoding.so.0.1.1
+lib/libosmocore.so
+lib/libosmocore.so.12
+lib/libosmocore.so.12.2.0
+lib/libosmoctrl.so
+lib/libosmoctrl.so.0
+lib/libosmoctrl.so.0.4.0
+lib/libosmogb.so
+lib/libosmogb.so.9
+lib/libosmogb.so.9.0.1
+lib/libosmogsm.so
+lib/libosmogsm.so.13
+lib/libosmogsm.so.13.0.0
+lib/libosmosim.so
+lib/libosmosim.so.0
+lib/libosmosim.so.0.1.1
+lib/libosmovty.so
+lib/libosmovty.so.4
+lib/libosmovty.so.4.4.0
+libdata/pkgconfig/libosmocodec.pc
+libdata/pkgconfig/libosmocoding.pc
+libdata/pkgconfig/libosmocore.pc
+libdata/pkgconfig/libosmoctrl.pc
+libdata/pkgconfig/libosmogb.pc
+libdata/pkgconfig/libosmogsm.pc
+libdata/pkgconfig/libosmosim.pc
+libdata/pkgconfig/libosmovty.pc
diff --git a/devel/llvm60/Makefile b/devel/llvm60/Makefile
new file mode 100644
index 000000000000..257be275a350
--- /dev/null
+++ b/devel/llvm60/Makefile
@@ -0,0 +1,459 @@
+# $FreeBSD$
+
+PORTNAME= llvm
+DISTVERSION= 6.0.1
+PORTREVISION= 7
+CATEGORIES= devel lang
+MASTER_SITES= http://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR}
+PKGNAMESUFFIX= ${LLVM_SUFFIX}
+DISTNAME= ${PORTNAME}-${DISTVERSION}.src
+DISTFILES= ${PORTNAME}-${DISTVERSION}.src${EXTRACT_SUFX}
+
+MAINTAINER= brooks@FreeBSD.org
+COMMENT= LLVM and Clang
+
+.include "${.CURDIR}/../llvm-devel/Makefile.LICENSE"
+
+LLVM_RELEASE= ${DISTVERSION:C/rc.*//}
+LLVM_MAJOR= ${LLVM_RELEASE:C/\.[0-9]$//}
+LLVM_LIB_VER= ${LLVM_MAJOR:C/\.//}
+RCDIR= ${DISTVERSION:S/${LLVM_RELEASE}//:C|(rc.*)|\1/|}
+PRE_= ${DISTVERSION:C/.*rc.*/pre/:N*[0-9]*}
+LLVM_SUFFIX= ${LLVM_LIB_VER}
+
+LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX}
+DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
+DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
+
+USES= cmake compiler:c++11-lib libedit perl5 tar:xz shebangfix
+_USES_PYTHON?= python:2.7,build
+USES+= ${_USES_PYTHON}
+USE_LDCONFIG= ${LLVM_PREFIX}/lib
+SHEBANG_FILES= utils/lit/lit.py utils/llvm-lit/llvm-lit.in
+
+SUB_FILES= llvm-wrapper.sh
+SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
+
+CMAKE_INSTALL_PREFIX= ${LLVM_PREFIX}
+CMAKE_ARGS= -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON
+CMAKE_ARGS+= -DLLVM_ENABLE_RTTI=ON
+CMAKE_ARGS+= -DLLVM_DEFAULT_TARGET_TRIPLE=${CONFIGURE_TARGET}
+CMAKE_ARGS+= -DLLVM_HOST_TRIPLE=${CONFIGURE_TARGET}
+# Following commit https://github.com/kitware/cmake/commit/956054
+# we need to either change the whole man-shuffle below, or simply
+# redefine CMAKE_INSTALL_MANDIR
+CMAKE_ARGS+= -DCMAKE_INSTALL_MANDIR:PATH="share/man"
+CMAKE_ARGS+= -DLLVM_PARALLEL_LINK_JOBS=1
+
+# Disable assertions. They should be disabled by cmake, but USES=cmake
+# overrides -DCMAKE_*_FLAGS_RELEASE.
+CFLAGS+= -DNDEBUG
+CXXFLAGS+= -DNDEBUG
+
+OPTIONS_DEFINE= CLANG DOCS EXTRAS LIT LLD LLDB
+OPTIONS_DEFINE_amd64= COMPILER_RT GOLD OPENMP
+OPTIONS_DEFINE_i386= COMPILER_RT OPENMP
+OPTIONS_DEFAULT= CLANG EXTRAS LIT LLD LLDB
+OPTIONS_DEFAULT_amd64= COMPILER_RT GOLD OPENMP
+OPTIONS_DEFAULT_i386= COMPILER_RT OPENMP
+OPTIONS_SUB= yes
+
+CLANG_DESC= Build clang
+CLANG_EXTRA_PATCHES= ${PATCHDIR}/clang
+CLANG_DISTFILES= cfe-${DISTVERSION}.src${EXTRACT_SUFX}
+CLANG_CMAKE_ON= -DCLANG_DEFAULT_OPENMP_RUNTIME=libomp
+CLANG_PORTDOCS= clang
+CLANG_USE= GNOME=libxml2
+COMPILER_RT_DESC= Sanitizer libraries
+COMPILER_RT_DISTFILES= compiler-rt-${DISTVERSION}.src${EXTRACT_SUFX}
+COMPILER_RT_PLIST_FILES=${_COMPILER_RT_LIBS:S|^|${_CRTLIBDIR}/|}
+DOCS_BUILD_DEPENDS= sphinx-build:textproc/py-sphinx
+DOCS_PORTDOCS= llvm
+DOCS_CMAKE_ON= -DLLVM_ENABLE_SPHINX=ON \
+ -DSPHINX_WARNINGS_AS_ERRORS=OFF \
+ -DLLVM_BUILD_DOCS=ON
+DOCS_PLIST_FILES= ${MAN1SRCS:S|^|man/man1/|:S|.1$|${LLVM_SUFFIX}.1.gz|}
+EXTRAS_DESC= Extra clang tools
+EXTRAS_IMPLIES= CLANG
+EXTRAS_DISTFILES= clang-tools-extra-${DISTVERSION}.src${EXTRACT_SUFX}
+GOLD_DESC= Build the LLVM Gold plugin for LTO
+GOLD_CMAKE_ON= -DLLVM_BINUTILS_INCDIR=${LOCALBASE}/include
+GOLD_BUILD_DEPENDS= ${LOCALBASE}/bin/ld.gold:devel/binutils
+LIT_DESC= Install lit and FileCheck test tools
+LIT_VARS= _USES_PYTHON=python:2.7
+LLD_DESC= Install lld, the LLVM linker
+LLD_DISTFILES= lld-${DISTVERSION}.src${EXTRACT_SUFX}
+LLD_EXTRA_PATCHES= ${PATCHDIR}/lld
+LLDB_BUILD_DEPENDS= swig:devel/swig \
+ ${PY_ENUM34}
+LLDB_DESC= Install lldb, the LLVM debugger
+LLDB_DISTFILES= lldb-${DISTVERSION}.src${EXTRACT_SUFX}
+LLDB_EXTRA_PATCHES= ${PATCHDIR}/lldb
+LLDB_IMPLIES= CLANG
+LLDB_VARS= _USES_PYTHON=python:2.7
+OPENMP_DESC= Install libomp, the LLVM OpenMP runtime library
+OPENMP_DISTFILES= openmp-${DISTVERSION}.src${EXTRACT_SUFX}
+OPENMP_EXTRA_PATCHES= ${PATCHDIR}/openmp
+
+.if defined(WITH_DEBUG)
+CMAKE_BUILD_TYPE= RelWithDebInfo
+STRIP=
+.endif
+
+_CRTLIBDIR= ${LLVM_PREFIX:S|${PREFIX}/||}/lib/clang/${LLVM_RELEASE}/lib/freebsd
+
+# Emulate USE_GITHUB's ${WRKSRC_tag} to reduce diffs to ../llvm-devel
+.for option in CLANG COMPILER_RT EXTRAS LLD LLDB OPENMP
+WRKSRC_${option:tl}= ${WRKDIR}/${${option}_DISTFILES:S/${EXTRACT_SUFX}//}
+.endfor
+
+PLIST_SUB+= LLVM_LIB_VER=${LLVM_LIB_VER} \
+ LLVM_MAJOR=${LLVM_MAJOR} \
+ LLVM_RELEASE=${LLVM_RELEASE} \
+ LLVM_SUFFIX=${LLVM_SUFFIX}
+
+COMMANDS= ${LLVM_COMMANDS}
+FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
+
+STRIP_LIBS= BugpointPasses.so \
+ LLVMHello.so \
+ ${LIBNAME}.0 \
+ libLTO.so
+
+EXTRAS_LIBS= libclangApplyReplacements \
+ libclangChangeNamespace \
+ libclangDaemon \
+ libclangIncludeFixer \
+ libclangMove \
+ libclangQuery \
+ libclangRename \
+ libclangReorderFields \
+ libclangTidy \
+ libclangTidyGoogleModule \
+ libclangTidyLLVMModule \
+ libclangTidyMiscModule \
+ libclangTidyReadabilityModule \
+ libclangTidyUtils \
+ libfindAllSymbols \
+ libmodernizeCore
+EXTRAS_PATTERN= ${EXTRAS_COMMANDS:tW:C/ */|/g}|${EXTRAS_LIBS:tW:C/ */|/g}
+
+.include <bsd.port.options.mk>
+
+# keep in sync with /usr/src/lib/clang/clang.build.mk
+# ----------- start of sync block ------------------
+# Armv6 and armv7 uses hard float abi, unless the CPUTYPE has soft in it.
+# arm (for armv4 and armv5 CPUs) always uses the soft float ABI.
+# For all other targets, we stick with 'unknown'.
+.if ${ARCH:Marmv[67]*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "")
+TARGET_ABI= -gnueabihf
+.elif ${ARCH:Marm*}
+TARGET_ABI= -gnueabi
+.else
+TARGET_ABI=
+.endif
+
+CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-portbld-${OPSYS:tl}${OSREL}${TARGET_ABI}
+# ----------- end of sync block --------------------
+
+.if ${PORT_OPTIONS:MCLANG}
+COMMANDS+= ${CLANG_COMMANDS}
+MAN1SRCS+= clang.1 \
+ scan-build.1
+CLANG_PATTERN= (c-index-test|clang|scan-|Reporter.py|ScanView.py|scanview.css|sorttable.js|startfile.py|-analyzer)
+SHEBANG_FILES+= tools/clang/tools/scan-view/bin/scan-view \
+ tools/clang/tools/clang-format/git-clang-format \
+ tools/clang/tools/clang-format/clang-format-diff.py
+USES+= gnome
+.endif
+
+.if ${PORT_OPTIONS:MCOMPILER_RT}
+COMPILER_RT_PATTERN= (_blacklist.txt|sanitizer|include.xray)
+.endif
+
+.if ${PORT_OPTIONS:MEXTRAS}
+COMMANDS+= ${EXTRAS_COMMANDS}
+MAN1SRCS+= extraclangtools.1
+PORTDOCS+= clang-tools
+SHEBANG_FILES+= tools/clang/tools/extra/clang-tidy/tool/clang-tidy-diff.py \
+ tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py \
+ tools/clang/tools/extra/include-fixer/find-all-symbols/tool/run-find-all-symbols.py
+.endif
+
+.if ${PORT_OPTIONS:MLIT}
+MAN1SRCS+= lit.1 FileCheck.1
+.endif
+
+.if ${PORT_OPTIONS:MLLD}
+COMMANDS+= ${LLD_COMMANDS}
+PORTDOCS+= lld
+.endif
+
+.if ${PORT_OPTIONS:MLLDB}
+COMMANDS+= ${LLDB_COMMANDS}
+.endif
+
+MAN1SRCS+= bugpoint.1 dsymutil.1 llc.1 lli.1 llvm-ar.1 llvm-as.1 \
+ llvm-bcanalyzer.1 llvm-build.1 llvm-config.1 llvm-cov.1 \
+ llvm-diff.1 llvm-dis.1 llvm-dwarfdump.1 \
+ llvm-extract.1 llvm-lib.1 llvm-link.1 llvm-nm.1 \
+ llvm-pdbutil.1 \
+ llvm-profdata.1 llvm-readobj.1 llvm-stress.1 llvm-symbolizer.1 \
+ opt.1 tblgen.1
+
+.include <bsd.port.pre.mk>
+.include "${.CURDIR}/Makefile.COMMANDS"
+
+.if ${ARCH} == "amd64"
+_COMPILER_RT_LIBS= \
+ libclang_rt.asan-preinit-x86_64.a \
+ libclang_rt.asan-x86_64.a \
+ libclang_rt.asan-x86_64.a.syms \
+ libclang_rt.asan-x86_64.so \
+ libclang_rt.asan_cxx-x86_64.a \
+ libclang_rt.asan_cxx-x86_64.a.syms \
+ libclang_rt.builtins-x86_64.a \
+ libclang_rt.dd-x86_64.a \
+ libclang_rt.dyndd-x86_64.so \
+ libclang_rt.lsan-x86_64.a \
+ libclang_rt.profile-x86_64.a \
+ libclang_rt.safestack-x86_64.a \
+ libclang_rt.stats-x86_64.a \
+ libclang_rt.stats_client-x86_64.a \
+ libclang_rt.tsan-x86_64.a \
+ libclang_rt.tsan-x86_64.a.syms \
+ libclang_rt.tsan_cxx-x86_64.a \
+ libclang_rt.tsan_cxx-x86_64.a.syms \
+ libclang_rt.ubsan_minimal-x86_64.a \
+ libclang_rt.ubsan_minimal-x86_64.a.syms \
+ libclang_rt.ubsan_minimal-x86_64.so \
+ libclang_rt.ubsan_standalone-x86_64.a \
+ libclang_rt.ubsan_standalone-x86_64.a.syms \
+ libclang_rt.ubsan_standalone-x86_64.so \
+ libclang_rt.ubsan_standalone_cxx-x86_64.a \
+ libclang_rt.ubsan_standalone_cxx-x86_64.a.syms
+.endif
+.if ${ARCH} == "i386"
+_COMPILER_RT_LIBS+= \
+ libclang_rt.asan-i386.a \
+ libclang_rt.asan-i386.so \
+ libclang_rt.asan-preinit-i386.a \
+ libclang_rt.asan_cxx-i386.a \
+ libclang_rt.builtins-i386.a \
+ libclang_rt.lsan-i386.a \
+ libclang_rt.profile-i386.a \
+ libclang_rt.safestack-i386.a \
+ libclang_rt.stats-i386.a \
+ libclang_rt.stats_client-i386.a \
+ libclang_rt.ubsan_minimal-i386.a \
+ libclang_rt.ubsan_minimal-i386.so \
+ libclang_rt.ubsan_standalone-i386.a \
+ libclang_rt.ubsan_standalone-i386.so \
+ libclang_rt.ubsan_standalone_cxx-i386.a
+.endif
+
+# Use lld for armv6 on clang 7 and up to avoid binutils ld issues
+# PR: 235282
+.if ${COMPILER_TYPE} == clang && ${COMPILER_VERSION} >= 70
+LDFLAGS_armv6=-fuse-ld=lld
+.endif
+
+.if ${ARCH} == "armv6"
+BUILD_DEPENDS+= ${LOCALBASE}/bin/ld:devel/binutils
+CONFIGURE_ENV+= COMPILER_PATH=${LOCALBASE}/bin
+MAKE_ENV+= COMPILER_PATH=${LOCALBASE}/bin
+.endif
+
+.if ! ${OPTIONS_DEFINE:MCOMPILER_RT}
+# Hack to disable COMPILER_RT in plist of unsupported architectures
+PLIST_SUB+= COMPILER_RT="@comment "
+.else
+.endif
+
+.if ! ${OPTIONS_DEFINE:MGOLD}
+# Hack to disable GOLD in plist of unsupported architectures
+PLIST_SUB+= GOLD="@comment "
+.else
+.endif
+
+.if ! ${OPTIONS_DEFINE:MOPENMP}
+# Hack to disable OPENMP in plist of unsupported architectures
+PLIST_SUB+= OPENMP="@comment "
+.else
+.endif
+
+post-extract-CLANG-on:
+ ${MV} ${WRKSRC_clang} ${PATCH_WRKSRC}/tools/clang
+
+post-extract-EXTRAS-on:
+ ${MV} ${WRKSRC_extras} ${PATCH_WRKSRC}/tools/clang/tools/extra
+
+post-extract-LLD-on:
+ ${MV} ${WRKSRC_lld} ${PATCH_WRKSRC}/tools/lld
+
+post-extract-LLDB-on:
+ ${MV} ${WRKSRC_lldb} ${PATCH_WRKSRC}/tools/lldb
+
+post-extract-OPENMP-on:
+ ${MV} ${WRKSRC_openmp} ${PATCH_WRKSRC}/projects/openmp
+
+post-patch:
+ ${REINPLACE_CMD} -e 's|import lit|import lit${LLVM_SUFFIX}|' \
+ -e 's|from lit|from lit${LLVM_SUFFIX}|' \
+ -e 's|lit\.|lit${LLVM_SUFFIX}.|' \
+ ${WRKSRC}/utils/lit/lit.py ${WRKSRC}/utils/lit/lit/*.py \
+ ${WRKSRC}/utils/lit/lit/formats/*.py
+ ${REINPLACE_CMD} -e 's,/usr/local/,${LOCALBASE}/,' \
+ ${WRKSRC}/CMakeLists.txt
+
+post-patch-CLANG-on:
+ ${REINPLACE_CMD} -e 's|%%LLVM_PREFIX%%|${LLVM_PREFIX}|' \
+ ${PATCH_WRKSRC}/tools/clang/lib/Driver/ToolChains/CommonArgs.cpp
+ ${REINPLACE_CMD} -e 's|%%LLVM_SUFFIX%%|${LLVM_SUFFIX}|' \
+ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format.py \
+ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format-sublime.py \
+ ${PATCH_WRKSRC}/tools/clang/tools/clang-format/git-clang-format
+
+post-patch-LLD-on:
+ ${REINPLACE_CMD} -e "s|'indexsidebar.html'|['indexsidebar.html']|" \
+ ${PATCH_WRKSRC}/tools/lld/docs/conf.py
+
+post-build-COMPILER_RT-on:
+ ${MKDIR} ${WRKDIR}/compiler-rt-build
+ cd ${WRKDIR}/compiler-rt-build && \
+ ${SETENV} ${CONFIGURE_ENV} ${CMAKE_BIN} ${CMAKE_ARGS} \
+ -DLLVM_CONFIG_PATH=${CONFIGURE_WRKSRC}/bin/llvm-config \
+ ${WRKSRC_compiler_rt} && \
+ ${MAKE_ENV} ${MAKE_CMD}
+
+post-install:
+ ${RM} -r ${STAGEDIR}${LLVM_PREFIX}/include/llvm/MC/MCAnalysis
+ ${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \
+ ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX}
+.for command in ${COMMANDS:C/^/XXXX/1:NXXXX*}
+ ${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \
+ ${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX}
+.endfor
+
+post-install-DOCS-on:
+ ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/doc ${STAGEDIR}${DOCSDIR}
+.for _man in ${MAN1SRCS}
+ ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/${_man} \
+ ${STAGEDIR}${MANPREFIX}/man/man1/${_man:R}${LLVM_SUFFIX}.1
+.endfor
+.if ! ${PORT_OPTIONS:MLIT}
+ ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/lit.1
+ ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/FileCheck.1
+.endif
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/
+
+.if ${PORT_OPTIONS:MCLANG}
+post-install-DOCS-off:
+ ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/scan-build.1
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/
+.endif
+
+post-install-LLD-on:
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/include/llvm/BinaryFormat/WasmRelocs
+
+post-install-LLDB-on:
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/include/lldb/Host/windows/getopt
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/include/lldb/Host/mingw
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/include/lldb/Host/msvc
+
+post-install-CLANG-on:
+ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/clang \
+ ${STAGEDIR}${LLVM_PREFIX}/bin/clang-cpp
+ ${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/clang-tblgen \
+ ${STAGEDIR}${LLVM_PREFIX}/bin/
+
+post-install-COMPILER_RT-on:
+ cd ${WRKDIR}/compiler-rt-build && \
+ ${MAKE_ENV} ${MAKE_CMD} ${INSTALL_TARGET}
+.if ${ARCH} == "amd64"
+ ${RM} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/libclang_rt*i386*
+.endif
+ ${MKDIR} ${STAGEDIR}${PREFIX}/${_CRTLIBDIR}
+ ${MV} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/* \
+ ${STAGEDIR}${PREFIX}/${_CRTLIBDIR}
+ ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd
+
+post-install-LIT-on:
+ ${INSTALL_SCRIPT} ${PATCH_WRKSRC}/utils/lit/lit.py \
+ ${STAGEDIR}${LLVM_PREFIX}/bin/lit
+ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
+ ${STAGEDIR}${LLVM_PREFIX}/bin/llvm-lit
+ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
+ ${STAGEDIR}${PREFIX}/bin/lit${LLVM_SUFFIX}
+ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
+ ${STAGEDIR}${PREFIX}/bin/llvm-lit${LLVM_SUFFIX}
+ ${MKDIR} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}
+ ${MKDIR} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}/formats
+ ${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/*.py \
+ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}
+ ${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/formats/*.py \
+ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}/formats
+ ${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/FileCheck \
+ ${STAGEDIR}${LLVM_PREFIX}/bin/
+ ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/FileCheck \
+ ${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX}
+
+TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${MAKE_CMD} check-local-lit)'
+do-test:
+ if [ `${ID} -u` = 0 ]; then \
+ ${CHOWN} -R nobody ${WRKSRC}/test; \
+ su -m nobody -c ${TEST_CMD}; \
+ else \
+ ${SH} -c ${TEST_CMD}; \
+ fi
+
+build-plist:
+ ${RM} ${PLIST} ${PLIST}.tmp
+ ${ECHO_CMD} "@comment >>>>> GENERATED FILE, DO NOT EDIT <<<<<" >> ${PLIST}.tmp
+ ${ECHO_CMD} "@comment Alter build-plist target and regenerate as required" >> ${PLIST}.tmp
+.for command in ${COMMANDS}
+ ${ECHO_CMD} bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}.tmp
+.endfor
+.for command in ${LIT_COMMANDS}
+ ${ECHO_CMD} %%LIT%%bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}.tmp
+ ${ECHO_CMD} %%LIT%%${LLVM_PREFIX:S|${PREFIX}/||:C|${LLVM_SUFFIX}|%%LLVM_SUFFIX%%|}/bin/${command} >> ${PLIST}.tmp
+.endfor
+
+ ${FIND} ${STAGEDIR}${LLVM_PREFIX} -type f -o -type l | \
+ ${GREP} -v '[/-]lit$$' | ${GREP} -v 'FileCheck$$' | \
+ ${GREP} -v man/man1 | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \
+ -e 's|${PYTHON_SITELIBDIR:C|${PREFIX}/||}|%%PYTHON_SITELIBDIR%%|' \
+ -e 's|${LLVM_RELEASE}|%%LLVM_RELEASE%%|' \
+ -e 's|release.cmake|%%CMAKE_BUILD_TYPE%%.cmake|' \
+ -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \
+ -e 's|${LLVM_MAJOR:C/\./\\./}|%%LLVM_MAJOR%%|' \
+ -e 's|${LLVM_MAJOR:C/\.//}|%%LLVM_LIB_VER%%|' \
+ | ${SORT} >> ${PLIST}.tmp
+ ${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX} -type f | \
+ ${SED} -e 's|${STAGEDIR}${PYTHON_SITELIBDIR}|%%LIT%%%%PYTHON_SITELIBDIR%%|' \
+ -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \
+ -e 's|${LLVM_MAJOR:C/\./\\./}|%%LLVM_MAJOR%%|' \
+ -e 's|lit${LLVM_SUFFIX}|lit%%LLVM_SUFFIX%%|' | \
+ ${SORT} >> ${PLIST}.tmp
+ ${AWK} '{ \
+ if ($$0 ~ /${CLANG_PATTERN}/ && $$0 !~ /(omp.h|ompt.h|${EXTRAS_PATTERN}|libclang_rt)/) {printf "%%%%CLANG%%%%"} \
+ if ($$0 ~ /${COMPILER_RT_PATTERN}/) \
+ {printf "%%%%COMPILER_RT%%%%"} \
+ if ($$0 ~ /(${EXTRAS_PATTERN})/) {printf "%%%%EXTRAS%%%%"} \
+ if ($$0 ~ /lld|wasm-ld/ && $$0 !~ /lldb/) {printf "%%%%LLD%%%%"} \
+ if ($$0 ~ /(argdumper|lldb|six.py)/) {printf "%%%%LLDB%%%%"} \
+ if ($$0 ~ /lib.*omp|omp.h|ompt.h/) {printf "%%%%OPENMP%%%%"} \
+ if ($$0 ~ /LLVMgold/) {printf "%%%%GOLD%%%%"} \
+ if ($$0 !~ /libclang_rt/) {print}}' ${PLIST}.tmp >> ${PLIST}
+ ${ECHO_CMD} '@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST}
+ ${ECHO_CMD} '@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST}
+ ${RM} ${PLIST}.tmp
+
+check-commands:
+.for command in ${COMMANDS}
+ test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command}
+.endfor
+
+.include <bsd.port.post.mk>
diff --git a/devel/llvm60/Makefile.COMMANDS b/devel/llvm60/Makefile.COMMANDS
new file mode 100644
index 000000000000..8ffdaacb1c29
--- /dev/null
+++ b/devel/llvm60/Makefile.COMMANDS
@@ -0,0 +1,90 @@
+# $FreeBSD$
+
+LLVM_COMMANDS= \
+ bugpoint \
+ llc \
+ lli \
+ llvm-ar \
+ llvm-as \
+ llvm-bcanalyzer \
+ llvm-cat \
+ llvm-cfi-verify \
+ llvm-config \
+ llvm-cov \
+ llvm-cvtres \
+ llvm-diff \
+ llvm-dis \
+ llvm-dlltool \
+ llvm-dwarfdump \
+ llvm-dwp \
+ llvm-extract \
+ llvm-link \
+ llvm-mc \
+ llvm-mcmarkup \
+ llvm-modextract \
+ llvm-mt \
+ llvm-nm \
+ llvm-objcopy \
+ llvm-objdump \
+ llvm-opt-report \
+ llvm-pdbutil \
+ llvm-profdata \
+ llvm-ranlib \
+ llvm-rc \
+ llvm-readelf \
+ llvm-readobj \
+ llvm-rtdyld \
+ llvm-size \
+ llvm-split \
+ llvm-stress \
+ llvm-strings \
+ llvm-symbolizer \
+ llvm-tblgen \
+ macho-dump \
+ opt \
+ sancov
+
+CLANG_COMMANDS= \
+ c-index-test \
+ clang \
+ clang++ \
+ clang-check \
+ clang-cpp \
+ clang-format \
+ clang-func-mapping \
+ clang-import-test \
+ clang-offload-bundler \
+ scan-build \
+ scan-view
+
+EXTRAS_COMMANDS= \
+ clang-apply-replacements \
+ clang-change-namespace \
+ clang-include-fixer \
+ clang-modernize \
+ clang-query \
+ clang-rename \
+ clang-reorder-fields \
+ clang-tidy \
+ clangd \
+ find-all-symbols \
+ modularize
+
+LIT_COMMANDS= \
+ FileCheck \
+ lit \
+ llvm-lit
+
+LLD_COMMANDS= \
+ ld.lld \
+ ld64.lld \
+ lld \
+ lld-link \
+ wasm-ld
+
+LLDB_COMMANDS= \
+ lldb \
+ lldb-argdumper \
+ lldb-mi \
+ lldb-server \
+ lldb-test
diff --git a/devel/llvm60/distinfo b/devel/llvm60/distinfo
new file mode 100644
index 000000000000..cf083ca19108
--- /dev/null
+++ b/devel/llvm60/distinfo
@@ -0,0 +1,15 @@
+TIMESTAMP = 1530117803
+SHA256 (llvm-6.0.1.src.tar.xz) = b6d6c324f9c71494c0ccaf3dac1f16236d970002b42bb24a6c9e1634f7d0f4e2
+SIZE (llvm-6.0.1.src.tar.xz) = 25306628
+SHA256 (cfe-6.0.1.src.tar.xz) = 7c243f1485bddfdfedada3cd402ff4792ea82362ff91fbdac2dae67c6026b667
+SIZE (cfe-6.0.1.src.tar.xz) = 11905772
+SHA256 (compiler-rt-6.0.1.src.tar.xz) = f4cd1e15e7d5cb708f9931d4844524e4904867240c306b06a4287b22ac1c99b9
+SIZE (compiler-rt-6.0.1.src.tar.xz) = 1686820
+SHA256 (clang-tools-extra-6.0.1.src.tar.xz) = 0d2e3727786437574835b75135f9e36f861932a958d8547ced7e13ebdda115f1
+SIZE (clang-tools-extra-6.0.1.src.tar.xz) = 757256
+SHA256 (lld-6.0.1.src.tar.xz) = e706745806921cea5c45700e13ebe16d834b5e3c0b7ad83bf6da1f28b0634e11
+SIZE (lld-6.0.1.src.tar.xz) = 787804
+SHA256 (lldb-6.0.1.src.tar.xz) = 6b8573841f2f7b60ffab9715c55dceff4f2a44e5a6d590ac189d20e8e7472714
+SIZE (lldb-6.0.1.src.tar.xz) = 19292420
+SHA256 (openmp-6.0.1.src.tar.xz) = 66afca2b308351b180136cf899a3b22865af1a775efaf74dc8a10c96d4721c5a
+SIZE (openmp-6.0.1.src.tar.xz) = 2048320
diff --git a/devel/llvm60/files/clang/patch-fformat_extensions.diff b/devel/llvm60/files/clang/patch-fformat_extensions.diff
new file mode 100644
index 000000000000..69093d923b6f
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-fformat_extensions.diff
@@ -0,0 +1,44 @@
+diff -ruN tools/clang/include/clang/Basic/LangOptions.def tools/clang/include/clang/Basic/LangOptions.def
+--- tools/clang/include/clang/Basic/LangOptions.def 2015-07-30 22:47:41 UTC
++++ tools/clang/include/clang/Basic/LangOptions.def
+@@ -114,6 +114,7 @@
+ LANGOPT(RTTIData , 1, 1, "emit run-time type information data")
+ LANGOPT(MSBitfields , 1, 0, "Microsoft-compatible structure layout")
+ LANGOPT(Freestanding, 1, 0, "freestanding implementation")
++LANGOPT(FormatExtensions , 1, 0, "FreeBSD format extensions")
+ LANGOPT(NoBuiltin , 1, 0, "disable builtin functions")
+ LANGOPT(NoMathBuiltin , 1, 0, "disable math builtin functions")
+ LANGOPT(GNUAsm , 1, 1, "GNU-style inline assembly")
+diff -ruN tools/clang/include/clang/Driver/Options.td tools/clang/include/clang/Driver/Options.td
+--- tools/clang/include/clang/Driver/Options.td 2015-07-30 22:47:41 UTC
++++ tools/clang/include/clang/Driver/Options.td
+@@ -644,6 +644,8 @@
+
+ def ffreestanding : Flag<["-"], "ffreestanding">, Group<f_Group>, Flags<[CC1Option]>,
+ HelpText<"Assert that the compilation takes place in a freestanding environment">;
++def fformat_extensions: Flag<["-"], "fformat-extensions">, Group<f_Group>, Flags<[CC1Option]>,
++ HelpText<"Enable FreeBSD kernel specific format string extensions">;
+ def fgnu_keywords : Flag<["-"], "fgnu-keywords">, Group<f_Group>, Flags<[CC1Option]>,
+ HelpText<"Allow GNU-extension keywords regardless of language standard">;
+ def fgnu89_inline : Flag<["-"], "fgnu89-inline">, Group<f_Group>, Flags<[CC1Option]>,
+--- tools/clang/lib/Driver/ToolChains/Clang.cpp.orig 2017-09-14 19:36:28.212240000 +0100
++++ tools/clang/lib/Driver/ToolChains/Clang.cpp 2017-09-14 19:35:59.296165000 +0100
+@@ -3202,6 +3202,7 @@
+
+ // Forward -f (flag) options which we can pass directly.
+ Args.AddLastArg(CmdArgs, options::OPT_femit_all_decls);
++ Args.AddLastArg(CmdArgs, options::OPT_fformat_extensions);
+ Args.AddLastArg(CmdArgs, options::OPT_fheinous_gnu_extensions);
+ Args.AddLastArg(CmdArgs, options::OPT_fno_operator_names);
+ // Emulated TLS is enabled by default on Android and OpenBSD, and can be enabled
+diff -ruN tools/clang/lib/Frontend/CompilerInvocation.cpp tools/clang/lib/Frontend/CompilerInvocation.cpp
+--- tools/clang/lib/Frontend/CompilerInvocation.cpp 2015-07-30 22:47:41 UTC
++++ tools/clang/lib/Frontend/CompilerInvocation.cpp
+@@ -1543,6 +1543,7 @@
+ Opts.ShortWChar = Args.hasFlag(OPT_fshort_wchar, OPT_fno_short_wchar, false);
+ Opts.ShortEnums = Args.hasArg(OPT_fshort_enums);
+ Opts.Freestanding = Args.hasArg(OPT_ffreestanding);
++ Opts.FormatExtensions = Args.hasArg(OPT_fformat_extensions);
+ Opts.NoBuiltin = Args.hasArg(OPT_fno_builtin) || Opts.Freestanding;
+ Opts.NoMathBuiltin = Args.hasArg(OPT_fno_math_builtin);
+ Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new);
diff --git a/devel/llvm60/files/clang/patch-fopenmp.diff b/devel/llvm60/files/clang/patch-fopenmp.diff
new file mode 100644
index 000000000000..18932bd0d19c
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-fopenmp.diff
@@ -0,0 +1,14 @@
+--- tools/clang/lib/Driver/ToolChains/CommonArgs.cpp.orig 2017-05-10 17:18:56.000000000 +0000
++++ tools/clang/lib/Driver/ToolChains/CommonArgs.cpp 2017-05-10 23:01:17.087686000 +0000
+@@ -441,7 +441,10 @@
+
+ switch (TC.getDriver().getOpenMPRuntime(Args)) {
+ case Driver::OMPRT_OMP:
+- CmdArgs.push_back("-lomp");
++ if (TC.getTriple().getOS() != llvm::Triple::FreeBSD || TC.isCrossCompiling() || !llvm::sys::fs::exists("%%LLVM_PREFIX%%/lib/libomp.so"))
++ CmdArgs.push_back("-lomp");
++ else
++ CmdArgs.push_back("%%LLVM_PREFIX%%/lib/libomp.so");
+ break;
+ case Driver::OMPRT_GOMP:
+ CmdArgs.push_back("-lgomp");
diff --git a/devel/llvm60/files/clang/patch-head-r331066.diff b/devel/llvm60/files/clang/patch-head-r331066.diff
new file mode 100644
index 000000000000..7296a087bfb0
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-head-r331066.diff
@@ -0,0 +1,40 @@
+r331066 | dim | 2018-03-16 19:04:13 +0100 (Fri, 16 Mar 2018) | 19 lines
+
+Pull in r321999 from upstream clang trunk (by Ivan A. Kosarev):
+
+ [CodeGen] Fix TBAA info for accesses to members of base classes
+
+ Resolves:
+ Bug 35724 - regression (r315984): fatal error: error in backend:
+ Broken function found (Did not see access type in access path!)
+ https://bugs.llvm.org/show_bug.cgi?id=35724
+
+ Differential Revision: https://reviews.llvm.org/D41547
+
+This fixes "Did not see access type in access path" fatal errors when
+building the devel/gdb port (version 8.1).
+
+Reported by: jbeich
+PR: 226658
+MFC after: 3 months
+X-MFC-With: r327952
+
+Index: tools/clang/lib/CodeGen/CGExpr.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/CGExpr.cpp (revision 331065)
++++ tools/clang/lib/CodeGen/CGExpr.cpp (revision 331066)
+@@ -1034,8 +1034,12 @@ Address CodeGenFunction::EmitPointerWithAlignment(
+ // Derived-to-base conversions.
+ case CK_UncheckedDerivedToBase:
+ case CK_DerivedToBase: {
+- Address Addr = EmitPointerWithAlignment(CE->getSubExpr(), BaseInfo,
+- TBAAInfo);
++ // TODO: Support accesses to members of base classes in TBAA. For now, we
++ // conservatively pretend that the complete object is of the base class
++ // type.
++ if (TBAAInfo)
++ *TBAAInfo = CGM.getTBAAAccessInfo(E->getType());
++ Address Addr = EmitPointerWithAlignment(CE->getSubExpr(), BaseInfo);
+ auto Derived = CE->getSubExpr()->getType()->getPointeeCXXRecordDecl();
+ return GetAddressOfBaseClass(Addr, Derived,
+ CE->path_begin(), CE->path_end(),
diff --git a/devel/llvm60/files/clang/patch-head-r336227.diff b/devel/llvm60/files/clang/patch-head-r336227.diff
new file mode 100644
index 000000000000..fd543dc38489
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-head-r336227.diff
@@ -0,0 +1,42 @@
+r336227 | dim | 2018-07-12 21:02:59 +0200 (Thu, 12 Jul 2018) | 27 lines
+
+Pull in r336008 from upstream clang trunk:
+
+ Request init/fini array on FreeBSD 12 and later
+
+ Summary:
+
+ It seems a bad idea to change the default in the middle of a release
+ branch due to possible changes in global ctor / dtor ordering between
+ .ctors and .init_array. With FreeBSD 11.0's release imminent lets
+ change the default now for FreeBSD 12 (the current development
+ stream) and later.
+
+ FreeBSD rtld has supported .init_array / .fini_array for many years.
+ As of Jan 1 2017 all supported FreeBSD releases and branches will
+ have support.
+
+ Reviewers: dim, brooks, arichardson
+
+ Reviewed By: dim, brooks, arichardson
+
+ Subscribers: bsdjhb, krytarowski, emaste, cfe-commits
+
+ Differential Revision: https://reviews.llvm.org/D24867
+
+Requested by: jhb
+MFC after: 3 days
+
+Index: tools/clang/lib/Driver/ToolChains/Gnu.cpp
+===================================================================
+--- tools/clang/lib/Driver/ToolChains/Gnu.cpp (revision 336226)
++++ tools/clang/lib/Driver/ToolChains/Gnu.cpp (revision 336227)
+@@ -2375,6 +2375,8 @@ void Generic_ELF::addClangTargetOptions(const ArgL
+ bool UseInitArrayDefault =
+ getTriple().getArch() == llvm::Triple::aarch64 ||
+ getTriple().getArch() == llvm::Triple::aarch64_be ||
++ (getTriple().getOS() == llvm::Triple::FreeBSD &&
++ getTriple().getOSMajorVersion() >= 12) ||
+ (getTriple().getOS() == llvm::Triple::Linux &&
+ ((!GCCInstallation.isValid() || !V.isOlderThan(4, 7, 0)) ||
+ getTriple().isAndroid())) ||
diff --git a/devel/llvm60/files/clang/patch-head-r338697.diff b/devel/llvm60/files/clang/patch-head-r338697.diff
new file mode 100644
index 000000000000..eb7f11e83fcf
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-head-r338697.diff
@@ -0,0 +1,104 @@
+r338697 | dim | 2018-09-15 23:22:50 +0200 (Sat, 15 Sep 2018) | 21 lines
+
+Pull in r325478 from upstream clang trunk (by Ivan A. Kosarev):
+
+ [CodeGen] Initialize large arrays by copying from a global
+
+ Currently, clang compiles explicit initializers for array elements
+ into series of store instructions. For large arrays of built-in types
+ this results in bloated output code and significant amount of time
+ spent on the instruction selection phase. This patch fixes the issue
+ by initializing such arrays with global constants that store the
+ binary image of the initializer.
+
+ Differential Revision: https://reviews.llvm.org/D43181
+
+This should fix a compiler hang (and excessive memory usage) while
+building the science/rmg port.
+
+Approved by: re (kib)
+Reported by: yuri@tsoft.com
+See also: https://bugs.llvm.org/show_bug.cgi?id=38798
+MFC after: 3 days
+
+Index: tools/clang/lib/CodeGen/CGExprAgg.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/CGExprAgg.cpp (revision 338696)
++++ tools/clang/lib/CodeGen/CGExprAgg.cpp (revision 338697)
+@@ -14,6 +14,7 @@
+ #include "CodeGenFunction.h"
+ #include "CGObjCRuntime.h"
+ #include "CodeGenModule.h"
++#include "ConstantEmitter.h"
+ #include "clang/AST/ASTContext.h"
+ #include "clang/AST/DeclCXX.h"
+ #include "clang/AST/DeclTemplate.h"
+@@ -85,7 +86,7 @@ class AggExprEmitter : public StmtVisitor<AggExprE
+ void EmitMoveFromReturnSlot(const Expr *E, RValue Src);
+
+ void EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
+- QualType elementType, InitListExpr *E);
++ QualType ArrayQTy, InitListExpr *E);
+
+ AggValueSlot::NeedsGCBarriers_t needsGC(QualType T) {
+ if (CGF.getLangOpts().getGC() && TypeRequiresGCollection(T))
+@@ -392,12 +393,15 @@ static bool isTrivialFiller(Expr *E) {
+
+ /// \brief Emit initialization of an array from an initializer list.
+ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
+- QualType elementType, InitListExpr *E) {
++ QualType ArrayQTy, InitListExpr *E) {
+ uint64_t NumInitElements = E->getNumInits();
+
+ uint64_t NumArrayElements = AType->getNumElements();
+ assert(NumInitElements <= NumArrayElements);
+
++ QualType elementType =
++ CGF.getContext().getAsArrayType(ArrayQTy)->getElementType();
++
+ // DestPtr is an array*. Construct an elementType* by drilling
+ // down a level.
+ llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
+@@ -409,6 +413,29 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr
+ CharUnits elementAlign =
+ DestPtr.getAlignment().alignmentOfArrayElement(elementSize);
+
++ // Consider initializing the array by copying from a global. For this to be
++ // more efficient than per-element initialization, the size of the elements
++ // with explicit initializers should be large enough.
++ if (NumInitElements * elementSize.getQuantity() > 16 &&
++ elementType.isTriviallyCopyableType(CGF.getContext())) {
++ CodeGen::CodeGenModule &CGM = CGF.CGM;
++ ConstantEmitter Emitter(CGM);
++ LangAS AS = ArrayQTy.getAddressSpace();
++ if (llvm::Constant *C = Emitter.tryEmitForInitializer(E, AS, ArrayQTy)) {
++ auto GV = new llvm::GlobalVariable(
++ CGM.getModule(), C->getType(),
++ CGM.isTypeConstant(ArrayQTy, /* ExcludeCtorDtor= */ true),
++ llvm::GlobalValue::PrivateLinkage, C, "constinit",
++ /* InsertBefore= */ nullptr, llvm::GlobalVariable::NotThreadLocal,
++ CGM.getContext().getTargetAddressSpace(AS));
++ Emitter.finalize(GV);
++ CharUnits Align = CGM.getContext().getTypeAlignInChars(ArrayQTy);
++ GV->setAlignment(Align.getQuantity());
++ EmitFinalDestCopy(ArrayQTy, CGF.MakeAddrLValue(GV, ArrayQTy, Align));
++ return;
++ }
++ }
++
+ // Exception safety requires us to destroy all the
+ // already-constructed members if an initializer throws.
+ // For that, we'll need an EH cleanup.
+@@ -1156,11 +1183,8 @@ void AggExprEmitter::VisitInitListExpr(InitListExp
+
+ // Handle initialization of an array.
+ if (E->getType()->isArrayType()) {
+- QualType elementType =
+- CGF.getContext().getAsArrayType(E->getType())->getElementType();
+-
+ auto AType = cast<llvm::ArrayType>(Dest.getAddress().getElementType());
+- EmitArrayInit(Dest.getAddress(), AType, elementType, E);
++ EmitArrayInit(Dest.getAddress(), AType, E->getType(), E);
+ return;
+ }
+
diff --git a/devel/llvm60/files/clang/patch-head-r339019.diff b/devel/llvm60/files/clang/patch-head-r339019.diff
new file mode 100644
index 000000000000..240772d184c2
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-head-r339019.diff
@@ -0,0 +1,30 @@
+r339019 | emaste | 2018-09-29 22:01:23 +0200 (Sat, 29 Sep 2018) | 15 lines
+
+clang: allow ifunc resolvers to accept arguments
+
+Previously Clang required ifunc resolution functions to take no
+arguments, presumably because GCC documented ifunc resolvers as taking
+no arguments. However, GCC accepts resolvers accepting arguments, and
+our rtld passes CPU ID information (cpuid, hwcap, etc.) to ifunc
+resolvers. Just remove the check from the in-tree compiler for our in-
+tree compiler; a different (per-OS) approach may be required upstream.
+
+Reported by: mjg
+Approved by: re (rgrimes)
+MFC after: 1 week
+Relnotes: Yes
+Sponsored by: The FreeBSD Foundation
+
+Index: tools/clang/lib/CodeGen/CodeGenModule.cpp
+===================================================================
+--- tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339018)
++++ tools/clang/lib/CodeGen/CodeGenModule.cpp (revision 339019)
+@@ -321,8 +321,6 @@ void CodeGenModule::checkAliases() {
+ assert(FTy);
+ if (!FTy->getReturnType()->isPointerTy())
+ Diags.Report(Location, diag::err_ifunc_resolver_return);
+- if (FTy->getNumParams())
+- Diags.Report(Location, diag::err_ifunc_resolver_params);
+ }
+
+ llvm::Constant *Aliasee = Alias->getIndirectSymbol();
diff --git a/devel/llvm60/files/clang/patch-stable12-r342281.diff b/devel/llvm60/files/clang/patch-stable12-r342281.diff
new file mode 100644
index 000000000000..4a6e9f615889
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-stable12-r342281.diff
@@ -0,0 +1,834 @@
+r342281 | dim | 2018-12-20 19:28:53 +0100 (Thu, 20 Dec 2018) | 24 lines
+
+Pull in r329671 from upstream clang trunk (by Akira Hatanaka):
+
+ [ExprConstant] Use an AST node and a version number as a key to
+ create an APValue and retrieve it from map Temporaries.
+
+ The version number is needed when a single AST node is visited
+ multiple times and is used to create APValues that are required to be
+ distinct from each other (for example, MaterializeTemporaryExprs in
+ default arguments and VarDecls in loops).
+
+ rdar://problem/36505742
+
+ Differential Revision: https://reviews.llvm.org/D42776
+
+This should fix 'Assertion failed: (Result.isUninit() && "temporary
+created multiple times"), function createTemporary' errors (if
+assertions are enabled, otherwise the compiler internal state might go
+bad), when building the graphics/rawtherapee port.
+
+Direct commit to stable/11 and stable/12, since head already has clang
+7.0.1, which includes this change.
+
+PR: 234144
+
+Index: tools/clang/include/clang/AST/APValue.h
+===================================================================
+--- tools/clang/include/clang/AST/APValue.h (revision 342280)
++++ tools/clang/include/clang/AST/APValue.h (revision 342281)
+@@ -53,7 +53,58 @@ class APValue {
+ MemberPointer,
+ AddrLabelDiff
+ };
+- typedef llvm::PointerUnion<const ValueDecl *, const Expr *> LValueBase;
++
++ class LValueBase {
++ public:
++ typedef llvm::PointerUnion<const ValueDecl *, const Expr *> PtrTy;
++
++ LValueBase() : CallIndex(0), Version(0) {}
++
++ template <class T>
++ LValueBase(T P, unsigned I = 0, unsigned V = 0)
++ : Ptr(P), CallIndex(I), Version(V) {}
++
++ template <class T>
++ bool is() const { return Ptr.is<T>(); }
++
++ template <class T>
++ T get() const { return Ptr.get<T>(); }
++
++ template <class T>
++ T dyn_cast() const { return Ptr.dyn_cast<T>(); }
++
++ void *getOpaqueValue() const;
++
++ bool isNull() const;
++
++ explicit operator bool () const;
++
++ PtrTy getPointer() const {
++ return Ptr;
++ }
++
++ unsigned getCallIndex() const {
++ return CallIndex;
++ }
++
++ void setCallIndex(unsigned Index) {
++ CallIndex = Index;
++ }
++
++ unsigned getVersion() const {
++ return Version;
++ }
++
++ bool operator==(const LValueBase &Other) const {
++ return Ptr == Other.Ptr && CallIndex == Other.CallIndex &&
++ Version == Other.Version;
++ }
++
++ private:
++ PtrTy Ptr;
++ unsigned CallIndex, Version;
++ };
++
+ typedef llvm::PointerIntPair<const Decl *, 1, bool> BaseOrMemberType;
+ union LValuePathEntry {
+ /// BaseOrMember - The FieldDecl or CXXRecordDecl indicating the next item
+@@ -135,15 +186,15 @@ class APValue {
+ }
+ APValue(const APValue &RHS);
+ APValue(APValue &&RHS) : Kind(Uninitialized) { swap(RHS); }
+- APValue(LValueBase B, const CharUnits &O, NoLValuePath N, unsigned CallIndex,
++ APValue(LValueBase B, const CharUnits &O, NoLValuePath N,
+ bool IsNullPtr = false)
+ : Kind(Uninitialized) {
+- MakeLValue(); setLValue(B, O, N, CallIndex, IsNullPtr);
++ MakeLValue(); setLValue(B, O, N, IsNullPtr);
+ }
+ APValue(LValueBase B, const CharUnits &O, ArrayRef<LValuePathEntry> Path,
+- bool OnePastTheEnd, unsigned CallIndex, bool IsNullPtr = false)
++ bool OnePastTheEnd, bool IsNullPtr = false)
+ : Kind(Uninitialized) {
+- MakeLValue(); setLValue(B, O, Path, OnePastTheEnd, CallIndex, IsNullPtr);
++ MakeLValue(); setLValue(B, O, Path, OnePastTheEnd, IsNullPtr);
+ }
+ APValue(UninitArray, unsigned InitElts, unsigned Size) : Kind(Uninitialized) {
+ MakeArray(InitElts, Size);
+@@ -255,6 +306,7 @@ class APValue {
+ bool hasLValuePath() const;
+ ArrayRef<LValuePathEntry> getLValuePath() const;
+ unsigned getLValueCallIndex() const;
++ unsigned getLValueVersion() const;
+ bool isNullPointer() const;
+
+ APValue &getVectorElt(unsigned I) {
+@@ -376,10 +428,10 @@ class APValue {
+ ((ComplexAPFloat *)(char *)Data.buffer)->Imag = std::move(I);
+ }
+ void setLValue(LValueBase B, const CharUnits &O, NoLValuePath,
+- unsigned CallIndex, bool IsNullPtr);
++ bool IsNullPtr);
+ void setLValue(LValueBase B, const CharUnits &O,
+ ArrayRef<LValuePathEntry> Path, bool OnePastTheEnd,
+- unsigned CallIndex, bool IsNullPtr);
++ bool IsNullPtr);
+ void setUnion(const FieldDecl *Field, const APValue &Value) {
+ assert(isUnion() && "Invalid accessor");
+ ((UnionData*)(char*)Data.buffer)->Field = Field;
+@@ -451,4 +503,14 @@ class APValue {
+
+ } // end namespace clang.
+
++namespace llvm {
++template<> struct DenseMapInfo<clang::APValue::LValueBase> {
++ static clang::APValue::LValueBase getEmptyKey();
++ static clang::APValue::LValueBase getTombstoneKey();
++ static unsigned getHashValue(const clang::APValue::LValueBase &Base);
++ static bool isEqual(const clang::APValue::LValueBase &LHS,
++ const clang::APValue::LValueBase &RHS);
++};
++}
++
+ #endif
+Index: tools/clang/lib/AST/APValue.cpp
+===================================================================
+--- tools/clang/lib/AST/APValue.cpp (revision 342280)
++++ tools/clang/lib/AST/APValue.cpp (revision 342281)
+@@ -23,14 +23,57 @@ using namespace clang;
+
+ namespace {
+ struct LVBase {
+- llvm::PointerIntPair<APValue::LValueBase, 1, bool> BaseAndIsOnePastTheEnd;
++ APValue::LValueBase Base;
+ CharUnits Offset;
+ unsigned PathLength;
+- unsigned CallIndex;
+- bool IsNullPtr;
++ bool IsNullPtr : 1;
++ bool IsOnePastTheEnd : 1;
+ };
+ }
+
++void *APValue::LValueBase::getOpaqueValue() const {
++ return Ptr.getOpaqueValue();
++}
++
++bool APValue::LValueBase::isNull() const {
++ return Ptr.isNull();
++}
++
++APValue::LValueBase::operator bool () const {
++ return static_cast<bool>(Ptr);
++}
++
++clang::APValue::LValueBase
++llvm::DenseMapInfo<clang::APValue::LValueBase>::getEmptyKey() {
++ return clang::APValue::LValueBase(
++ DenseMapInfo<clang::APValue::LValueBase::PtrTy>::getEmptyKey(),
++ DenseMapInfo<unsigned>::getEmptyKey(),
++ DenseMapInfo<unsigned>::getEmptyKey());
++}
++
++clang::APValue::LValueBase
++llvm::DenseMapInfo<clang::APValue::LValueBase>::getTombstoneKey() {
++ return clang::APValue::LValueBase(
++ DenseMapInfo<clang::APValue::LValueBase::PtrTy>::getTombstoneKey(),
++ DenseMapInfo<unsigned>::getTombstoneKey(),
++ DenseMapInfo<unsigned>::getTombstoneKey());
++}
++
++unsigned llvm::DenseMapInfo<clang::APValue::LValueBase>::getHashValue(
++ const clang::APValue::LValueBase &Base) {
++ llvm::FoldingSetNodeID ID;
++ ID.AddPointer(Base.getOpaqueValue());
++ ID.AddInteger(Base.getCallIndex());
++ ID.AddInteger(Base.getVersion());
++ return ID.ComputeHash();
++}
++
++bool llvm::DenseMapInfo<clang::APValue::LValueBase>::isEqual(
++ const clang::APValue::LValueBase &LHS,
++ const clang::APValue::LValueBase &RHS) {
++ return LHS == RHS;
++}
++
+ struct APValue::LV : LVBase {
+ static const unsigned InlinePathSpace =
+ (DataSize - sizeof(LVBase)) / sizeof(LValuePathEntry);
+@@ -150,11 +193,10 @@ APValue::APValue(const APValue &RHS) : Kind(Uninit
+ MakeLValue();
+ if (RHS.hasLValuePath())
+ setLValue(RHS.getLValueBase(), RHS.getLValueOffset(), RHS.getLValuePath(),
+- RHS.isLValueOnePastTheEnd(), RHS.getLValueCallIndex(),
+- RHS.isNullPointer());
++ RHS.isLValueOnePastTheEnd(), RHS.isNullPointer());
+ else
+ setLValue(RHS.getLValueBase(), RHS.getLValueOffset(), NoLValuePath(),
+- RHS.getLValueCallIndex(), RHS.isNullPointer());
++ RHS.isNullPointer());
+ break;
+ case Array:
+ MakeArray(RHS.getArrayInitializedElts(), RHS.getArraySize());
+@@ -552,12 +594,12 @@ std::string APValue::getAsString(ASTContext &Ctx,
+
+ const APValue::LValueBase APValue::getLValueBase() const {
+ assert(isLValue() && "Invalid accessor");
+- return ((const LV*)(const void*)Data.buffer)->BaseAndIsOnePastTheEnd.getPointer();
++ return ((const LV*)(const void*)Data.buffer)->Base;
+ }
+
+ bool APValue::isLValueOnePastTheEnd() const {
+ assert(isLValue() && "Invalid accessor");
+- return ((const LV*)(const void*)Data.buffer)->BaseAndIsOnePastTheEnd.getInt();
++ return ((const LV*)(const void*)Data.buffer)->IsOnePastTheEnd;
+ }
+
+ CharUnits &APValue::getLValueOffset() {
+@@ -578,9 +620,14 @@ ArrayRef<APValue::LValuePathEntry> APValue::getLVa
+
+ unsigned APValue::getLValueCallIndex() const {
+ assert(isLValue() && "Invalid accessor");
+- return ((const LV*)(const char*)Data.buffer)->CallIndex;
++ return ((const LV*)(const char*)Data.buffer)->Base.getCallIndex();
+ }
+
++unsigned APValue::getLValueVersion() const {
++ assert(isLValue() && "Invalid accessor");
++ return ((const LV*)(const char*)Data.buffer)->Base.getVersion();
++}
++
+ bool APValue::isNullPointer() const {
+ assert(isLValue() && "Invalid usage");
+ return ((const LV*)(const char*)Data.buffer)->IsNullPtr;
+@@ -587,13 +634,12 @@ bool APValue::isNullPointer() const {
+ }
+
+ void APValue::setLValue(LValueBase B, const CharUnits &O, NoLValuePath,
+- unsigned CallIndex, bool IsNullPtr) {
++ bool IsNullPtr) {
+ assert(isLValue() && "Invalid accessor");
+ LV &LVal = *((LV*)(char*)Data.buffer);
+- LVal.BaseAndIsOnePastTheEnd.setPointer(B);
+- LVal.BaseAndIsOnePastTheEnd.setInt(false);
++ LVal.Base = B;
++ LVal.IsOnePastTheEnd = false;
+ LVal.Offset = O;
+- LVal.CallIndex = CallIndex;
+ LVal.resizePath((unsigned)-1);
+ LVal.IsNullPtr = IsNullPtr;
+ }
+@@ -600,13 +646,12 @@ void APValue::setLValue(LValueBase B, const CharUn
+
+ void APValue::setLValue(LValueBase B, const CharUnits &O,
+ ArrayRef<LValuePathEntry> Path, bool IsOnePastTheEnd,
+- unsigned CallIndex, bool IsNullPtr) {
++ bool IsNullPtr) {
+ assert(isLValue() && "Invalid accessor");
+ LV &LVal = *((LV*)(char*)Data.buffer);
+- LVal.BaseAndIsOnePastTheEnd.setPointer(B);
+- LVal.BaseAndIsOnePastTheEnd.setInt(IsOnePastTheEnd);
++ LVal.Base = B;
++ LVal.IsOnePastTheEnd = IsOnePastTheEnd;
+ LVal.Offset = O;
+- LVal.CallIndex = CallIndex;
+ LVal.resizePath(Path.size());
+ memcpy(LVal.getPath(), Path.data(), Path.size() * sizeof(LValuePathEntry));
+ LVal.IsNullPtr = IsNullPtr;
+Index: tools/clang/lib/AST/ExprConstant.cpp
+===================================================================
+--- tools/clang/lib/AST/ExprConstant.cpp (revision 342280)
++++ tools/clang/lib/AST/ExprConstant.cpp (revision 342281)
+@@ -446,8 +446,8 @@ namespace {
+
+ // Note that we intentionally use std::map here so that references to
+ // values are stable.
+- typedef std::map<const void*, APValue> MapTy;
+- typedef MapTy::const_iterator temp_iterator;
++ typedef std::pair<const void *, unsigned> MapKeyTy;
++ typedef std::map<MapKeyTy, APValue> MapTy;
+ /// Temporaries - Temporary lvalues materialized within this stack frame.
+ MapTy Temporaries;
+
+@@ -457,6 +457,20 @@ namespace {
+ /// Index - The call index of this call.
+ unsigned Index;
+
++ /// The stack of integers for tracking version numbers for temporaries.
++ SmallVector<unsigned, 2> TempVersionStack = {1};
++ unsigned CurTempVersion = TempVersionStack.back();
++
++ unsigned getTempVersion() const { return TempVersionStack.back(); }
++
++ void pushTempVersion() {
++ TempVersionStack.push_back(++CurTempVersion);
++ }
++
++ void popTempVersion() {
++ TempVersionStack.pop_back();
++ }
++
+ // FIXME: Adding this to every 'CallStackFrame' may have a nontrivial impact
+ // on the overall stack usage of deeply-recursing constexpr evaluataions.
+ // (We should cache this map rather than recomputing it repeatedly.)
+@@ -473,10 +487,36 @@ namespace {
+ APValue *Arguments);
+ ~CallStackFrame();
+
+- APValue *getTemporary(const void *Key) {
+- MapTy::iterator I = Temporaries.find(Key);
+- return I == Temporaries.end() ? nullptr : &I->second;
++ // Return the temporary for Key whose version number is Version.
++ APValue *getTemporary(const void *Key, unsigned Version) {
++ MapKeyTy KV(Key, Version);
++ auto LB = Temporaries.lower_bound(KV);
++ if (LB != Temporaries.end() && LB->first == KV)
++ return &LB->second;
++ // Pair (Key,Version) wasn't found in the map. Check that no elements
++ // in the map have 'Key' as their key.
++ assert((LB == Temporaries.end() || LB->first.first != Key) &&
++ (LB == Temporaries.begin() || std::prev(LB)->first.first != Key) &&
++ "Element with key 'Key' found in map");
++ return nullptr;
+ }
++
++ // Return the current temporary for Key in the map.
++ APValue *getCurrentTemporary(const void *Key) {
++ auto UB = Temporaries.upper_bound(MapKeyTy(Key, UINT_MAX));
++ if (UB != Temporaries.begin() && std::prev(UB)->first.first == Key)
++ return &std::prev(UB)->second;
++ return nullptr;
++ }
++
++ // Return the version number of the current temporary for Key.
++ unsigned getCurrentTemporaryVersion(const void *Key) const {
++ auto UB = Temporaries.upper_bound(MapKeyTy(Key, UINT_MAX));
++ if (UB != Temporaries.begin() && std::prev(UB)->first.first == Key)
++ return std::prev(UB)->first.second;
++ return 0;
++ }
++
+ APValue &createTemporary(const void *Key, bool IsLifetimeExtended);
+ };
+
+@@ -606,7 +646,8 @@ namespace {
+
+ /// EvaluatingObject - Pair of the AST node that an lvalue represents and
+ /// the call index that that lvalue was allocated in.
+- typedef std::pair<APValue::LValueBase, unsigned> EvaluatingObject;
++ typedef std::pair<APValue::LValueBase, std::pair<unsigned, unsigned>>
++ EvaluatingObject;
+
+ /// EvaluatingConstructors - Set of objects that are currently being
+ /// constructed.
+@@ -625,8 +666,10 @@ namespace {
+ }
+ };
+
+- bool isEvaluatingConstructor(APValue::LValueBase Decl, unsigned CallIndex) {
+- return EvaluatingConstructors.count(EvaluatingObject(Decl, CallIndex));
++ bool isEvaluatingConstructor(APValue::LValueBase Decl, unsigned CallIndex,
++ unsigned Version) {
++ return EvaluatingConstructors.count(
++ EvaluatingObject(Decl, {CallIndex, Version}));
+ }
+
+ /// The current array initialization index, if we're performing array
+@@ -722,7 +765,7 @@ namespace {
+ void setEvaluatingDecl(APValue::LValueBase Base, APValue &Value) {
+ EvaluatingDecl = Base;
+ EvaluatingDeclValue = &Value;
+- EvaluatingConstructors.insert({Base, 0});
++ EvaluatingConstructors.insert({Base, {0, 0}});
+ }
+
+ const LangOptions &getLangOpts() const { return Ctx.getLangOpts(); }
+@@ -1086,11 +1129,16 @@ namespace {
+ unsigned OldStackSize;
+ public:
+ ScopeRAII(EvalInfo &Info)
+- : Info(Info), OldStackSize(Info.CleanupStack.size()) {}
++ : Info(Info), OldStackSize(Info.CleanupStack.size()) {
++ // Push a new temporary version. This is needed to distinguish between
++ // temporaries created in different iterations of a loop.
++ Info.CurrentCall->pushTempVersion();
++ }
+ ~ScopeRAII() {
+ // Body moved to a static method to encourage the compiler to inline away
+ // instances of this class.
+ cleanup(Info, OldStackSize);
++ Info.CurrentCall->popTempVersion();
+ }
+ private:
+ static void cleanup(EvalInfo &Info, unsigned OldStackSize) {
+@@ -1170,7 +1218,8 @@ CallStackFrame::~CallStackFrame() {
+
+ APValue &CallStackFrame::createTemporary(const void *Key,
+ bool IsLifetimeExtended) {
+- APValue &Result = Temporaries[Key];
++ unsigned Version = Info.CurrentCall->getTempVersion();
++ APValue &Result = Temporaries[MapKeyTy(Key, Version)];
+ assert(Result.isUninit() && "temporary created multiple times");
+ Info.CleanupStack.push_back(Cleanup(&Result, IsLifetimeExtended));
+ return Result;
+@@ -1262,27 +1311,27 @@ namespace {
+ struct LValue {
+ APValue::LValueBase Base;
+ CharUnits Offset;
+- unsigned InvalidBase : 1;
+- unsigned CallIndex : 31;
+ SubobjectDesignator Designator;
+- bool IsNullPtr;
++ bool IsNullPtr : 1;
++ bool InvalidBase : 1;
+
+ const APValue::LValueBase getLValueBase() const { return Base; }
+ CharUnits &getLValueOffset() { return Offset; }
+ const CharUnits &getLValueOffset() const { return Offset; }
+- unsigned getLValueCallIndex() const { return CallIndex; }
+ SubobjectDesignator &getLValueDesignator() { return Designator; }
+ const SubobjectDesignator &getLValueDesignator() const { return Designator;}
+ bool isNullPointer() const { return IsNullPtr;}
+
++ unsigned getLValueCallIndex() const { return Base.getCallIndex(); }
++ unsigned getLValueVersion() const { return Base.getVersion(); }
++
+ void moveInto(APValue &V) const {
+ if (Designator.Invalid)
+- V = APValue(Base, Offset, APValue::NoLValuePath(), CallIndex,
+- IsNullPtr);
++ V = APValue(Base, Offset, APValue::NoLValuePath(), IsNullPtr);
+ else {
+ assert(!InvalidBase && "APValues can't handle invalid LValue bases");
+ V = APValue(Base, Offset, Designator.Entries,
+- Designator.IsOnePastTheEnd, CallIndex, IsNullPtr);
++ Designator.IsOnePastTheEnd, IsNullPtr);
+ }
+ }
+ void setFrom(ASTContext &Ctx, const APValue &V) {
+@@ -1290,12 +1339,11 @@ namespace {
+ Base = V.getLValueBase();
+ Offset = V.getLValueOffset();
+ InvalidBase = false;
+- CallIndex = V.getLValueCallIndex();
+ Designator = SubobjectDesignator(Ctx, V);
+ IsNullPtr = V.isNullPointer();
+ }
+
+- void set(APValue::LValueBase B, unsigned I = 0, bool BInvalid = false) {
++ void set(APValue::LValueBase B, bool BInvalid = false) {
+ #ifndef NDEBUG
+ // We only allow a few types of invalid bases. Enforce that here.
+ if (BInvalid) {
+@@ -1308,7 +1356,6 @@ namespace {
+ Base = B;
+ Offset = CharUnits::fromQuantity(0);
+ InvalidBase = BInvalid;
+- CallIndex = I;
+ Designator = SubobjectDesignator(getType(B));
+ IsNullPtr = false;
+ }
+@@ -1317,13 +1364,12 @@ namespace {
+ Base = (Expr *)nullptr;
+ Offset = CharUnits::fromQuantity(TargetVal);
+ InvalidBase = false;
+- CallIndex = 0;
+ Designator = SubobjectDesignator(PointerTy->getPointeeType());
+ IsNullPtr = true;
+ }
+
+ void setInvalid(APValue::LValueBase B, unsigned I = 0) {
+- set(B, I, true);
++ set(B, true);
+ }
+
+ // Check that this LValue is not based on a null pointer. If it is, produce
+@@ -1525,6 +1571,15 @@ static bool EvaluateAsRValue(EvalInfo &Info, const
+ // Misc utilities
+ //===----------------------------------------------------------------------===//
+
++/// A helper function to create a temporary and set an LValue.
++template <class KeyTy>
++static APValue &createTemporary(const KeyTy *Key, bool IsLifetimeExtended,
++ LValue &LV, CallStackFrame &Frame) {
++ LV.set({Key, Frame.Info.CurrentCall->Index,
++ Frame.Info.CurrentCall->getTempVersion()});
++ return Frame.createTemporary(Key, IsLifetimeExtended);
++}
++
+ /// Negate an APSInt in place, converting it to a signed form if necessary, and
+ /// preserving its value (by extending by up to one bit as needed).
+ static void negateAsSigned(APSInt &Int) {
+@@ -1854,7 +1909,7 @@ static const ValueDecl *GetLValueBaseDecl(const LV
+ }
+
+ static bool IsLiteralLValue(const LValue &Value) {
+- if (Value.CallIndex)
++ if (Value.getLValueCallIndex())
+ return false;
+ const Expr *E = Value.Base.dyn_cast<const Expr*>();
+ return E && !isa<MaterializeTemporaryExpr>(E);
+@@ -2404,7 +2459,7 @@ static bool handleLValueToRValueConversion(EvalInf
+ /// \param Result Filled in with a pointer to the value of the variable.
+ static bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E,
+ const VarDecl *VD, CallStackFrame *Frame,
+- APValue *&Result) {
++ APValue *&Result, const LValue *LVal) {
+
+ // If this is a parameter to an active constexpr function call, perform
+ // argument substitution.
+@@ -2423,7 +2478,8 @@ static bool evaluateVarDeclInit(EvalInfo &Info, co
+
+ // If this is a local variable, dig out its value.
+ if (Frame) {
+- Result = Frame->getTemporary(VD);
++ Result = LVal ? Frame->getTemporary(VD, LVal->getLValueVersion())
++ : Frame->getCurrentTemporary(VD);
+ if (!Result) {
+ // Assume variables referenced within a lambda's call operator that were
+ // not declared within the call operator are captures and during checking
+@@ -3000,8 +3056,8 @@ static CompleteObject findCompleteObject(EvalInfo
+ }
+
+ CallStackFrame *Frame = nullptr;
+- if (LVal.CallIndex) {
+- Frame = Info.getCallFrame(LVal.CallIndex);
++ if (LVal.getLValueCallIndex()) {
++ Frame = Info.getCallFrame(LVal.getLValueCallIndex());
+ if (!Frame) {
+ Info.FFDiag(E, diag::note_constexpr_lifetime_ended, 1)
+ << AK << LVal.Base.is<const ValueDecl*>();
+@@ -3113,7 +3169,7 @@ static CompleteObject findCompleteObject(EvalInfo
+ }
+ }
+
+- if (!evaluateVarDeclInit(Info, E, VD, Frame, BaseVal))
++ if (!evaluateVarDeclInit(Info, E, VD, Frame, BaseVal, &LVal))
+ return CompleteObject();
+ } else {
+ const Expr *Base = LVal.Base.dyn_cast<const Expr*>();
+@@ -3155,7 +3211,7 @@ static CompleteObject findCompleteObject(EvalInfo
+ return CompleteObject();
+ }
+ } else {
+- BaseVal = Frame->getTemporary(Base);
++ BaseVal = Frame->getTemporary(Base, LVal.Base.getVersion());
+ assert(BaseVal && "missing value for temporary");
+ }
+
+@@ -3175,7 +3231,9 @@ static CompleteObject findCompleteObject(EvalInfo
+ // During the construction of an object, it is not yet 'const'.
+ // FIXME: This doesn't do quite the right thing for const subobjects of the
+ // object under construction.
+- if (Info.isEvaluatingConstructor(LVal.getLValueBase(), LVal.CallIndex)) {
++ if (Info.isEvaluatingConstructor(LVal.getLValueBase(),
++ LVal.getLValueCallIndex(),
++ LVal.getLValueVersion())) {
+ BaseType = Info.Ctx.getCanonicalType(BaseType);
+ BaseType.removeLocalConst();
+ }
+@@ -3212,7 +3270,7 @@ static bool handleLValueToRValueConversion(EvalInf
+
+ // Check for special cases where there is no existing APValue to look at.
+ const Expr *Base = LVal.Base.dyn_cast<const Expr*>();
+- if (Base && !LVal.CallIndex && !Type.isVolatileQualified()) {
++ if (Base && !LVal.getLValueCallIndex() && !Type.isVolatileQualified()) {
+ if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(Base)) {
+ // In C99, a CompoundLiteralExpr is an lvalue, and we defer evaluating the
+ // initializer until now for such expressions. Such an expression can't be
+@@ -3715,8 +3773,7 @@ static bool EvaluateVarDecl(EvalInfo &Info, const
+ return true;
+
+ LValue Result;
+- Result.set(VD, Info.CurrentCall->Index);
+- APValue &Val = Info.CurrentCall->createTemporary(VD, true);
++ APValue &Val = createTemporary(VD, true, Result, *Info.CurrentCall);
+
+ const Expr *InitE = VD->getInit();
+ if (!InitE) {
+@@ -3772,6 +3829,19 @@ struct StmtResult {
+ /// The location containing the result, if any (used to support RVO).
+ const LValue *Slot;
+ };
++
++struct TempVersionRAII {
++ CallStackFrame &Frame;
++
++ TempVersionRAII(CallStackFrame &Frame) : Frame(Frame) {
++ Frame.pushTempVersion();
++ }
++
++ ~TempVersionRAII() {
++ Frame.popTempVersion();
++ }
++};
++
+ }
+
+ static EvalStmtResult EvaluateStmt(StmtResult &Result, EvalInfo &Info,
+@@ -4329,7 +4399,8 @@ static bool HandleConstructorCall(const Expr *E, c
+ }
+
+ EvalInfo::EvaluatingConstructorRAII EvalObj(
+- Info, {This.getLValueBase(), This.CallIndex});
++ Info, {This.getLValueBase(),
++ {This.getLValueCallIndex(), This.getLValueVersion()}});
+ CallStackFrame Frame(Info, CallLoc, Definition, &This, ArgValues);
+
+ // FIXME: Creating an APValue just to hold a nonexistent return value is
+@@ -4578,9 +4649,12 @@ class ExprEvaluatorBase
+ { return StmtVisitorTy::Visit(E->getResultExpr()); }
+ bool VisitSubstNonTypeTemplateParmExpr(const SubstNonTypeTemplateParmExpr *E)
+ { return StmtVisitorTy::Visit(E->getReplacement()); }
+- bool VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *E)
+- { return StmtVisitorTy::Visit(E->getExpr()); }
++ bool VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *E) {
++ TempVersionRAII RAII(*Info.CurrentCall);
++ return StmtVisitorTy::Visit(E->getExpr());
++ }
+ bool VisitCXXDefaultInitExpr(const CXXDefaultInitExpr *E) {
++ TempVersionRAII RAII(*Info.CurrentCall);
+ // The initializer may not have been parsed yet, or might be erroneous.
+ if (!E->getExpr())
+ return Error(E);
+@@ -4658,7 +4732,7 @@ class ExprEvaluatorBase
+ }
+
+ bool VisitOpaqueValueExpr(const OpaqueValueExpr *E) {
+- if (APValue *Value = Info.CurrentCall->getTemporary(E))
++ if (APValue *Value = Info.CurrentCall->getCurrentTemporary(E))
+ return DerivedSuccess(*Value, E);
+
+ const Expr *Source = E->getSourceExpr();
+@@ -5216,7 +5290,8 @@ bool LValueExprEvaluator::VisitVarDecl(const Expr
+
+ if (!VD->getType()->isReferenceType()) {
+ if (Frame) {
+- Result.set(VD, Frame->Index);
++ Result.set({VD, Frame->Index,
++ Info.CurrentCall->getCurrentTemporaryVersion(VD)});
+ return true;
+ }
+ return Success(VD);
+@@ -5223,7 +5298,7 @@ bool LValueExprEvaluator::VisitVarDecl(const Expr
+ }
+
+ APValue *V;
+- if (!evaluateVarDeclInit(Info, E, VD, Frame, V))
++ if (!evaluateVarDeclInit(Info, E, VD, Frame, V, nullptr))
+ return false;
+ if (V->isUninit()) {
+ if (!Info.checkingPotentialConstantExpression())
+@@ -5255,9 +5330,8 @@ bool LValueExprEvaluator::VisitMaterializeTemporar
+ *Value = APValue();
+ Result.set(E);
+ } else {
+- Value = &Info.CurrentCall->
+- createTemporary(E, E->getStorageDuration() == SD_Automatic);
+- Result.set(E, Info.CurrentCall->Index);
++ Value = &createTemporary(E, E->getStorageDuration() == SD_Automatic, Result,
++ *Info.CurrentCall);
+ }
+
+ QualType Type = Inner->getType();
+@@ -5736,7 +5810,6 @@ bool PointerExprEvaluator::VisitCastExpr(const Cas
+ Result.Base = (Expr*)nullptr;
+ Result.InvalidBase = false;
+ Result.Offset = CharUnits::fromQuantity(N);
+- Result.CallIndex = 0;
+ Result.Designator.setInvalid();
+ Result.IsNullPtr = false;
+ return true;
+@@ -5752,9 +5825,9 @@ bool PointerExprEvaluator::VisitCastExpr(const Cas
+ if (!evaluateLValue(SubExpr, Result))
+ return false;
+ } else {
+- Result.set(SubExpr, Info.CurrentCall->Index);
+- if (!EvaluateInPlace(Info.CurrentCall->createTemporary(SubExpr, false),
+- Info, Result, SubExpr))
++ APValue &Value = createTemporary(SubExpr, false, Result,
++ *Info.CurrentCall);
++ if (!EvaluateInPlace(Value, Info, Result, SubExpr))
+ return false;
+ }
+ // The result is a pointer to the first element of the array.
+@@ -6520,9 +6593,8 @@ class TemporaryExprEvaluator
+
+ /// Visit an expression which constructs the value of this temporary.
+ bool VisitConstructExpr(const Expr *E) {
+- Result.set(E, Info.CurrentCall->Index);
+- return EvaluateInPlace(Info.CurrentCall->createTemporary(E, false),
+- Info, Result, E);
++ APValue &Value = createTemporary(E, false, Result, *Info.CurrentCall);
++ return EvaluateInPlace(Value, Info, Result, E);
+ }
+
+ bool VisitCastExpr(const CastExpr *E) {
+@@ -8007,7 +8079,8 @@ static bool HasSameBase(const LValue &A, const LVa
+ }
+
+ return IsGlobalLValue(A.getLValueBase()) ||
+- A.getLValueCallIndex() == B.getLValueCallIndex();
++ (A.getLValueCallIndex() == B.getLValueCallIndex() &&
++ A.getLValueVersion() == B.getLValueVersion());
+ }
+
+ /// \brief Determine whether this is a pointer past the end of the complete
+@@ -9941,15 +10014,13 @@ static bool Evaluate(APValue &Result, EvalInfo &In
+ return true;
+ } else if (T->isArrayType()) {
+ LValue LV;
+- LV.set(E, Info.CurrentCall->Index);
+- APValue &Value = Info.CurrentCall->createTemporary(E, false);
++ APValue &Value = createTemporary(E, false, LV, *Info.CurrentCall);
+ if (!EvaluateArray(E, LV, Value, Info))
+ return false;
+ Result = Value;
+ } else if (T->isRecordType()) {
+ LValue LV;
+- LV.set(E, Info.CurrentCall->Index);
+- APValue &Value = Info.CurrentCall->createTemporary(E, false);
++ APValue &Value = createTemporary(E, false, LV, *Info.CurrentCall);
+ if (!EvaluateRecord(E, LV, Value, Info))
+ return false;
+ Result = Value;
+@@ -9963,8 +10034,7 @@ static bool Evaluate(APValue &Result, EvalInfo &In
+ QualType Unqual = T.getAtomicUnqualifiedType();
+ if (Unqual->isArrayType() || Unqual->isRecordType()) {
+ LValue LV;
+- LV.set(E, Info.CurrentCall->Index);
+- APValue &Value = Info.CurrentCall->createTemporary(E, false);
++ APValue &Value = createTemporary(E, false, LV, *Info.CurrentCall);
+ if (!EvaluateAtomic(E, &LV, Value, Info))
+ return false;
+ } else {
+@@ -10786,7 +10856,7 @@ bool Expr::isPotentialConstantExpr(const FunctionD
+ // is a temporary being used as the 'this' pointer.
+ LValue This;
+ ImplicitValueInitExpr VIE(RD ? Info.Ctx.getRecordType(RD) : Info.Ctx.IntTy);
+- This.set(&VIE, Info.CurrentCall->Index);
++ This.set({&VIE, Info.CurrentCall->Index});
+
+ ArrayRef<const Expr*> Args;
+
+Index: tools/clang/test/SemaCXX/constant-expression-cxx1y.cpp
+===================================================================
+--- tools/clang/test/SemaCXX/constant-expression-cxx1y.cpp (revision 342280)
++++ tools/clang/test/SemaCXX/constant-expression-cxx1y.cpp (revision 342281)
+@@ -852,7 +852,6 @@ namespace Lifetime {
+ static_assert(h(2) == 0, ""); // expected-error {{constant expression}} expected-note {{in call}}
+ static_assert(h(3) == 0, ""); // expected-error {{constant expression}} expected-note {{in call}}
+
+- // FIXME: This function should be treated as non-constant.
+ constexpr void lifetime_versus_loops() {
+ int *p = 0;
+ for (int i = 0; i != 2; ++i) {
+@@ -862,10 +861,10 @@ namespace Lifetime {
+ if (i)
+ // This modifies the 'n' from the previous iteration of the loop outside
+ // its lifetime.
+- ++*q;
++ ++*q; // expected-note {{increment of object outside its lifetime}}
+ }
+ }
+- static_assert((lifetime_versus_loops(), true), "");
++ static_assert((lifetime_versus_loops(), true), ""); // expected-error {{constant expression}} expected-note {{in call}}
+ }
+
+ namespace Bitfields {
+Index: tools/clang/test/SemaCXX/constexpr-default-arg.cpp
+===================================================================
+--- tools/clang/test/SemaCXX/constexpr-default-arg.cpp (nonexistent)
++++ tools/clang/test/SemaCXX/constexpr-default-arg.cpp (revision 342281)
+@@ -0,0 +1,38 @@
++// RUN: %clang_cc1 -std=c++1y -S -o - -emit-llvm -verify %s
++
++namespace default_arg_temporary {
++
++constexpr bool equals(const float& arg = 1.0f) {
++ return arg == 1.0f;
++}
++
++constexpr const int &x(const int &p = 0) {
++ return p;
++}
++
++struct S {
++ constexpr S(const int &a = 0) {}
++};
++
++void test_default_arg2() {
++ // This piece of code used to cause an assertion failure in
++ // CallStackFrame::createTemporary because the same MTE is used to initilize
++ // both elements of the array (see PR33140).
++ constexpr S s[2] = {};
++
++ // This piece of code used to cause an assertion failure in
++ // CallStackFrame::createTemporary because multiple CXXDefaultArgExpr share
++ // the same MTE (see PR33140).
++ static_assert(equals() && equals(), "");
++
++ // Test that constant expression evaluation produces distinct lvalues for
++ // each call.
++ static_assert(&x() != &x(), "");
++}
++
++// Check that multiple CXXDefaultInitExprs don't cause an assertion failure.
++struct A { int &&r = 0; }; // expected-warning {{binding reference member}} // expected-note {{reference member declared here}}
++struct B { A x, y; };
++B b = {};
++
++}
diff --git a/devel/llvm60/files/clang/patch-tools_clang_lib_Headers_CMakeLists.txt b/devel/llvm60/files/clang/patch-tools_clang_lib_Headers_CMakeLists.txt
new file mode 100644
index 000000000000..17043c6072cf
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-tools_clang_lib_Headers_CMakeLists.txt
@@ -0,0 +1,32 @@
+--- tools/clang/lib/Headers/CMakeLists.txt.orig
++++ tools/clang/lib/Headers/CMakeLists.txt
+@@ -56,7 +56,6 @@
+ intrin.h
+ inttypes.h
+ iso646.h
+- limits.h
+ lwpintrin.h
+ lzcntintrin.h
+ mm3dnow.h
+@@ -76,21 +75,13 @@
+ s390intrin.h
+ shaintrin.h
+ smmintrin.h
+- stdalign.h
+- stdarg.h
+- stdatomic.h
+- stdbool.h
+- stddef.h
+ __stddef_max_align_t.h
+- stdint.h
+- stdnoreturn.h
+ tbmintrin.h
+ tgmath.h
+ tmmintrin.h
+ unwind.h
+ vadefs.h
+ vaesintrin.h
+- varargs.h
+ vecintrin.h
+ vpclmulqdqintrin.h
+ wmmintrin.h
diff --git a/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format-sublime.py b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format-sublime.py
new file mode 100644
index 000000000000..2c8909f1e1d1
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format-sublime.py
@@ -0,0 +1,14 @@
+
+$FreeBSD$
+
+--- tools/clang/tools/clang-format/clang-format-sublime.py.orig
++++ tools/clang/tools/clang-format/clang-format-sublime.py
+@@ -18,7 +18,7 @@
+ import subprocess
+
+ # Change this to the full path if clang-format is not on the path.
+-binary = 'clang-format'
++binary = 'clang-format%%LLVM_SUFFIX%%'
+
+ # Change this to format according to other formatting styles. See the output of
+ # 'clang-format --help' for a list of supported styles. The default looks for
diff --git a/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format.py b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format.py
new file mode 100644
index 000000000000..2962d3f4cbcb
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_clang-format.py
@@ -0,0 +1,11 @@
+--- tools/clang/tools/clang-format/clang-format.py.orig 2015-09-08 20:44:00 UTC
++++ tools/clang/tools/clang-format/clang-format.py
+@@ -34,7 +34,7 @@ import vim
+
+ # set g:clang_format_path to the path to clang-format if it is not on the path
+ # Change this to the full path if clang-format is not on the path.
+-binary = 'clang-format'
++binary = 'clang-format%%LLVM_SUFFIX%%'
+ if vim.eval('exists("g:clang_format_path")') == "1":
+ binary = vim.eval('g:clang_format_path')
+
diff --git a/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_git-clang-format b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_git-clang-format
new file mode 100644
index 000000000000..5c5ae3581228
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-tools_clang_tools_clang-format_git-clang-format
@@ -0,0 +1,32 @@
+
+$FreeBSD$
+
+--- tools/clang/tools/clang-format/git-clang-format.orig
++++ tools/clang/tools/clang-format/git-clang-format
+@@ -90,7 +90,7 @@
+ usage=usage, formatter_class=argparse.RawDescriptionHelpFormatter,
+ description=desc)
+ p.add_argument('--binary',
+- default=config.get('clangformat.binary', 'clang-format'),
++ default=config.get('clangformat.binary', 'clang-format%%LLVM_SUFFIX%%'),
+ help='path to clang-format'),
+ p.add_argument('--commit',
+ default=config.get('clangformat.commit', 'HEAD'),
+@@ -344,7 +344,7 @@
+
+
+ def run_clang_format_and_save_to_tree(changed_lines, revision=None,
+- binary='clang-format', style=None):
++ binary='clang-format%%LLVM_SUFFIX%%', style=None):
+ """Run clang-format on each file and save the result to a git tree.
+
+ Returns the object ID (SHA-1) of the created tree."""
+@@ -397,7 +397,7 @@
+
+
+ def clang_format_to_blob(filename, line_ranges, revision=None,
+- binary='clang-format', style=None):
++ binary='clang-format%%LLVM_SUFFIX%%', style=None):
+ """Run clang-format on the given file and save the result to a git blob.
+
+ Runs on the file in `revision` if not None, or on the file in the working
diff --git a/devel/llvm60/files/clang/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer b/devel/llvm60/files/clang/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer
new file mode 100644
index 000000000000..e1c65480ce2f
--- /dev/null
+++ b/devel/llvm60/files/clang/patch-tools_clang_tools_scan-build_libexec_ccc-analyzer
@@ -0,0 +1,12 @@
+--- tools/clang/tools/scan-build/libexec/ccc-analyzer.orig
++++ tools/clang/tools/scan-build/libexec/ccc-analyzer
+@@ -81,6 +81,9 @@
+ if (-x "/usr/bin/xcrun") {
+ $UseXCRUN = 1;
+ }
++} elsif (`uname -s` eq "FreeBSD\n") {
++ $DefaultCCompiler = 'cc';
++ $DefaultCXXCompiler = 'c++';
+ } else {
+ $DefaultCCompiler = 'gcc';
+ $DefaultCXXCompiler = 'g++';
diff --git a/devel/llvm60/files/lld/patch-head-r331731.diff b/devel/llvm60/files/lld/patch-head-r331731.diff
new file mode 100644
index 000000000000..6b162d89f6be
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r331731.diff
@@ -0,0 +1,67 @@
+r331731 | dim | 2018-03-29 15:55:23 +0200 (Thu, 29 Mar 2018) | 22 lines
+
+Pull in r328738 from upstream lld trunk (by Rafael Espindola):
+
+ Strip @VER suffices from the LTO output.
+
+ This fixes pr36623.
+
+ The problem is that we have to parse versions out of names before LTO
+ so that LTO can use that information.
+
+ When we get the LTO produced .o files, we replace the previous symbols
+ with the LTO produced ones, but they still have @ in their names.
+
+ We could just trim the name directly, but calling parseSymbolVersion
+ to do it is simpler.
+
+This is a follow-up to r331366, since we discovered that lld could
+append version strings to symbols twice, when using Link Time
+Optimization.
+
+MFC after: 3 months
+X-MFC-With: r327952
+
+Index: tools/lld/ELF/InputFiles.cpp
+===================================================================
+--- tools/lld/ELF/InputFiles.cpp (revision 331730)
++++ tools/lld/ELF/InputFiles.cpp (revision 331731)
+@@ -281,6 +281,10 @@ template <class ELFT> ArrayRef<Symbol *> ObjFile<E
+ return makeArrayRef(this->Symbols).slice(1, this->FirstNonLocal - 1);
+ }
+
++template <class ELFT> ArrayRef<Symbol *> ObjFile<ELFT>::getGlobalSymbols() {
++ return makeArrayRef(this->Symbols).slice(this->FirstNonLocal);
++}
++
+ template <class ELFT>
+ void ObjFile<ELFT>::parse(DenseSet<CachedHashStringRef> &ComdatGroups) {
+ // Read section and symbol tables.
+Index: tools/lld/ELF/InputFiles.h
+===================================================================
+--- tools/lld/ELF/InputFiles.h (revision 331730)
++++ tools/lld/ELF/InputFiles.h (revision 331731)
+@@ -167,6 +167,7 @@ template <class ELFT> class ObjFile : public ELFFi
+ static bool classof(const InputFile *F) { return F->kind() == Base::ObjKind; }
+
+ ArrayRef<Symbol *> getLocalSymbols();
++ ArrayRef<Symbol *> getGlobalSymbols();
+
+ ObjFile(MemoryBufferRef M, StringRef ArchiveName);
+ void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups);
+Index: tools/lld/ELF/SymbolTable.cpp
+===================================================================
+--- tools/lld/ELF/SymbolTable.cpp (revision 331730)
++++ tools/lld/ELF/SymbolTable.cpp (revision 331731)
+@@ -130,7 +130,10 @@ template <class ELFT> void SymbolTable::addCombine
+
+ for (InputFile *File : LTO->compile()) {
+ DenseSet<CachedHashStringRef> DummyGroups;
+- cast<ObjFile<ELFT>>(File)->parse(DummyGroups);
++ auto *Obj = cast<ObjFile<ELFT>>(File);
++ Obj->parse(DummyGroups);
++ for (Symbol *Sym : Obj->getGlobalSymbols())
++ Sym->parseSymbolVersion();
+ ObjectFiles.push_back(File);
+ }
+ }
diff --git a/devel/llvm60/files/lld/patch-head-r333401.diff b/devel/llvm60/files/lld/patch-head-r333401.diff
new file mode 100644
index 000000000000..131f6a0ea274
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r333401.diff
@@ -0,0 +1,34 @@
+r333401 | emaste | 2018-05-09 13:17:01 +0200 (Wed, 09 May 2018) | 19 lines
+
+lld: Omit PT_NOTE for SHT_NOTE without SHF_ALLOC
+
+A non-alloc note section should not have a PT_NOTE program header.
+
+Found while linking ghc (Haskell compiler) with lld on FreeBSD. Haskell
+emits a .debug-ghc-link-info note section (as the name suggests, it
+contains link info) as a SHT_NOTE section without SHF_ALLOC set.
+
+For this case ld.bfd does not emit a PT_NOTE segment for
+.debug-ghc-link-info. lld previously emitted a PT_NOTE with p_vaddr = 0
+and FreeBSD's rtld segfaulted when trying to parse a note at address 0.
+
+LLVM PR: https://llvm.org/pr37361
+LLVM review: https://reviews.llvm.org/D46623
+
+PR: 226872
+Reviewed by: dim
+Sponsored by: The FreeBSD Foundation
+
+Index: tools/lld/ELF/Writer.cpp
+===================================================================
+--- tools/lld/ELF/Writer.cpp (revision 333400)
++++ tools/lld/ELF/Writer.cpp (revision 333401)
+@@ -1708,7 +1708,7 @@ template <class ELFT> std::vector<PhdrEntry *> Wri
+ // Create one PT_NOTE per a group of contiguous .note sections.
+ PhdrEntry *Note = nullptr;
+ for (OutputSection *Sec : OutputSections) {
+- if (Sec->Type == SHT_NOTE) {
++ if (Sec->Type == SHT_NOTE && (Sec->Flags & SHF_ALLOC)) {
+ if (!Note || Sec->LMAExpr)
+ Note = AddHdr(PT_NOTE, PF_R);
+ Note->add(Sec);
diff --git a/devel/llvm60/files/lld/patch-head-r336664.diff b/devel/llvm60/files/lld/patch-head-r336664.diff
new file mode 100644
index 000000000000..e26fd06d4c5e
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r336664.diff
@@ -0,0 +1,52 @@
+r336664 | emaste | 2018-07-24 13:35:22 +0200 (Tue, 24 Jul 2018) | 11 lines
+
+lld: fix addends with partial linking
+
+[ELF] Update addends in non-allocatable sections for REL targets when
+creating a relocatable output.
+
+LLVM PR: 37735
+LLVM Differential Revision: https://reviews.llvm.org/D48929
+
+PR: 225128
+Obtained from: LLVM r336799 by Igor Kudrin
+
+Index: tools/lld/ELF/InputSection.cpp
+===================================================================
+--- tools/lld/ELF/InputSection.cpp (revision 336663)
++++ tools/lld/ELF/InputSection.cpp (revision 336664)
+@@ -686,6 +686,23 @@ void InputSection::relocateNonAlloc(uint8_t *Buf,
+ }
+ }
+
++// This is used when '-r' is given.
++// For REL targets, InputSection::copyRelocations() may store artificial
++// relocations aimed to update addends. They are handled in relocateAlloc()
++// for allocatable sections, and this function does the same for
++// non-allocatable sections, such as sections with debug information.
++static void relocateNonAllocForRelocatable(InputSection *Sec, uint8_t *Buf) {
++ const unsigned Bits = Config->Is64 ? 64 : 32;
++
++ for (const Relocation &Rel : Sec->Relocations) {
++ // InputSection::copyRelocations() adds only R_ABS relocations.
++ assert(Rel.Expr == R_ABS);
++ uint8_t *BufLoc = Buf + Rel.Offset + Sec->OutSecOff;
++ uint64_t TargetVA = SignExtend64(Rel.Sym->getVA(Rel.Addend), Bits);
++ Target->relocateOne(BufLoc, Rel.Type, TargetVA);
++ }
++}
++
+ template <class ELFT>
+ void InputSectionBase::relocate(uint8_t *Buf, uint8_t *BufEnd) {
+ if (Flags & SHF_ALLOC) {
+@@ -694,7 +711,9 @@ void InputSectionBase::relocate(uint8_t *Buf, uint
+ }
+
+ auto *Sec = cast<InputSection>(this);
+- if (Sec->AreRelocsRela)
++ if (Config->Relocatable)
++ relocateNonAllocForRelocatable(Sec, Buf);
++ else if (Sec->AreRelocsRela)
+ Sec->relocateNonAlloc<ELFT>(Buf, Sec->template relas<ELFT>());
+ else
+ Sec->relocateNonAlloc<ELFT>(Buf, Sec->template rels<ELFT>());
diff --git a/devel/llvm60/files/lld/patch-head-r336972.diff b/devel/llvm60/files/lld/patch-head-r336972.diff
new file mode 100644
index 000000000000..d7497ce5390a
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r336972.diff
@@ -0,0 +1,146 @@
+r336972 | emaste | 2018-07-31 17:25:03 +0200 (Tue, 31 Jul 2018) | 37 lines
+
+lld: [ELF][ARM] Implement support for Tag_ABI_VFP_args
+
+The Tag_ABI_VFP_args build attribute controls the procedure call
+standard used for floating point parameters on ARM. The values are:
+
+0 - Base AAPCS (FP Parameters passed in Core (Integer) registers
+1 - VFP AAPCS (FP Parameters passed in FP registers)
+2 - Toolchain specific (Neither Base or VFP)
+3 - Compatible with all (No use of floating point parameters)
+
+If the Tag_ABI_VFP_args build attribute is missing it has an implicit
+value of 0.
+
+We use the attribute in two ways:
+
+* Detect a clash in calling convention between Base, VFP and Toolchain.
+
+we follow ld.bfd's lead and do not error if there is a clash between an
+implicit Base AAPCS caused by a missing attribute. Many projects
+including the hard-float (VFP AAPCS) version of glibc contain assembler
+files that do not use floating point but do not have Tag_ABI_VFP_args.
+
+* Set the EF_ARM_ABI_FLOAT_SOFT or EF_ARM_ABI_FLOAT_HARD ELF header flag
+
+for Base or VFP AAPCS respectively. This flag is used by some ELF
+loaders.
+
+References:
+* Addenda to, and Errata in, the ABI for the ARM Architecture for
+ Tag_ABI_VFP_args
+* Elf for the ARM Architecture for ELF header flags
+
+Fixes LLVM PR36009
+
+PR: 229050
+Obtained from: llvm r338377 by Peter Smith
+
+Index: tools/lld/ELF/Arch/ARM.cpp
+===================================================================
+--- tools/lld/ELF/Arch/ARM.cpp (revision 336971)
++++ tools/lld/ELF/Arch/ARM.cpp (revision 336972)
+@@ -97,10 +97,19 @@ ARM::ARM() {
+ }
+
+ uint32_t ARM::calcEFlags() const {
++ // The ABIFloatType is used by loaders to detect the floating point calling
++ // convention.
++ uint32_t ABIFloatType = 0;
++ if (Config->ARMVFPArgs == ARMVFPArgKind::Base ||
++ Config->ARMVFPArgs == ARMVFPArgKind::Default)
++ ABIFloatType = EF_ARM_ABI_FLOAT_SOFT;
++ else if (Config->ARMVFPArgs == ARMVFPArgKind::VFP)
++ ABIFloatType = EF_ARM_ABI_FLOAT_HARD;
++
+ // We don't currently use any features incompatible with EF_ARM_EABI_VER5,
+ // but we don't have any firm guarantees of conformance. Linux AArch64
+ // kernels (as of 2016) require an EABI version to be set.
+- return EF_ARM_EABI_VER5;
++ return EF_ARM_EABI_VER5 | ABIFloatType;
+ }
+
+ RelExpr ARM::getRelExpr(RelType Type, const Symbol &S,
+Index: tools/lld/ELF/Config.h
+===================================================================
+--- tools/lld/ELF/Config.h (revision 336971)
++++ tools/lld/ELF/Config.h (revision 336972)
+@@ -54,6 +54,9 @@ enum class SortSectionPolicy { Default, None, Alig
+ // For --target2
+ enum class Target2Policy { Abs, Rel, GotRel };
+
++// For tracking ARM Float Argument PCS
++enum class ARMVFPArgKind { Default, Base, VFP, ToolChain };
++
+ struct SymbolVersion {
+ llvm::StringRef Name;
+ bool IsExternCpp;
+@@ -169,6 +172,7 @@ struct Configuration {
+ StripPolicy Strip;
+ UnresolvedPolicy UnresolvedSymbols;
+ Target2Policy Target2;
++ ARMVFPArgKind ARMVFPArgs = ARMVFPArgKind::Default;
+ BuildIdKind BuildId = BuildIdKind::None;
+ ELFKind EKind = ELFNoneKind;
+ uint16_t DefaultSymbolVersion = llvm::ELF::VER_NDX_GLOBAL;
+Index: tools/lld/ELF/InputFiles.cpp
+===================================================================
+--- tools/lld/ELF/InputFiles.cpp (revision 336971)
++++ tools/lld/ELF/InputFiles.cpp (revision 336972)
+@@ -441,6 +441,46 @@ void ObjFile<ELFT>::initializeSections(
+ }
+ }
+
++// For ARM only, to set the EF_ARM_ABI_FLOAT_SOFT or EF_ARM_ABI_FLOAT_HARD
++// flag in the ELF Header we need to look at Tag_ABI_VFP_args to find out how
++// the input objects have been compiled.
++static void updateARMVFPArgs(const ARMAttributeParser &Attributes,
++ const InputFile *F) {
++ if (!Attributes.hasAttribute(ARMBuildAttrs::ABI_VFP_args))
++ // If an ABI tag isn't present then it is implicitly given the value of 0
++ // which maps to ARMBuildAttrs::BaseAAPCS. However many assembler files,
++ // including some in glibc that don't use FP args (and should have value 3)
++ // don't have the attribute so we do not consider an implicit value of 0
++ // as a clash.
++ return;
++
++ unsigned VFPArgs = Attributes.getAttributeValue(ARMBuildAttrs::ABI_VFP_args);
++ ARMVFPArgKind Arg;
++ switch (VFPArgs) {
++ case ARMBuildAttrs::BaseAAPCS:
++ Arg = ARMVFPArgKind::Base;
++ break;
++ case ARMBuildAttrs::HardFPAAPCS:
++ Arg = ARMVFPArgKind::VFP;
++ break;
++ case ARMBuildAttrs::ToolChainFPPCS:
++ // Tool chain specific convention that conforms to neither AAPCS variant.
++ Arg = ARMVFPArgKind::ToolChain;
++ break;
++ case ARMBuildAttrs::CompatibleFPAAPCS:
++ // Object compatible with all conventions.
++ return;
++ default:
++ error(toString(F) + ": unknown Tag_ABI_VFP_args value: " + Twine(VFPArgs));
++ return;
++ }
++ // Follow ld.bfd and error if there is a mix of calling conventions.
++ if (Config->ARMVFPArgs != Arg && Config->ARMVFPArgs != ARMVFPArgKind::Default)
++ error(toString(F) + ": incompatible Tag_ABI_VFP_args");
++ else
++ Config->ARMVFPArgs = Arg;
++}
++
+ // The ARM support in lld makes some use of instructions that are not available
+ // on all ARM architectures. Namely:
+ // - Use of BLX instruction for interworking between ARM and Thumb state.
+@@ -520,6 +560,8 @@ InputSectionBase *ObjFile<ELFT>::createInputSectio
+ ArrayRef<uint8_t> Contents = check(this->getObj().getSectionContents(&Sec));
+ Attributes.Parse(Contents, /*isLittle*/ Config->EKind == ELF32LEKind);
+ updateSupportedARMFeatures(Attributes);
++ updateARMVFPArgs(Attributes, this);
++
+ // FIXME: Retain the first attribute section we see. The eglibc ARM
+ // dynamic loaders require the presence of an attribute section for dlopen
+ // to work. In a full implementation we would merge all attribute sections.
diff --git a/devel/llvm60/files/lld/patch-head-r337282.diff b/devel/llvm60/files/lld/patch-head-r337282.diff
new file mode 100644
index 000000000000..1e046d6e2b17
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r337282.diff
@@ -0,0 +1,39 @@
+r337282 | alc | 2018-08-04 04:30:51 +0200 (Sat, 04 Aug 2018) | 7 lines
+
+Set the default image base on arm64 and i386 to a superpage-aligned
+address.
+
+Reviewed by: emaste, markj
+Discussed with: dim
+Differential Revision: https://reviews.freebsd.org/D16385
+
+Index: tools/lld/ELF/Arch/AArch64.cpp
+===================================================================
+--- tools/lld/ELF/Arch/AArch64.cpp (revision 337281)
++++ tools/lld/ELF/Arch/AArch64.cpp (revision 337282)
+@@ -66,6 +66,10 @@ AArch64::AArch64() {
+ PltHeaderSize = 32;
+ DefaultMaxPageSize = 65536;
+
++ // Align to the 2 MiB page size (known as a superpage or huge page).
++ // FreeBSD automatically promotes 2 MiB-aligned allocations.
++ DefaultImageBase = 0x200000;
++
+ // It doesn't seem to be documented anywhere, but tls on aarch64 uses variant
+ // 1 of the tls structures and the tcb size is 16.
+ TcbSize = 16;
+Index: tools/lld/ELF/Arch/X86.cpp
+===================================================================
+--- tools/lld/ELF/Arch/X86.cpp (revision 337281)
++++ tools/lld/ELF/Arch/X86.cpp (revision 337282)
+@@ -61,6 +61,10 @@ X86::X86() {
+ PltHeaderSize = 16;
+ TlsGdRelaxSkip = 2;
+ TrapInstr = 0xcccccccc; // 0xcc = INT3
++
++ // Align to the non-PAE large page size (known as a superpage or huge page).
++ // FreeBSD automatically promotes large, superpage-aligned allocations.
++ DefaultImageBase = 0x400000;
+ }
+
+ static bool hasBaseReg(uint8_t ModRM) { return (ModRM & 0xc7) != 0x5; }
diff --git a/devel/llvm60/files/lld/patch-head-r338251.diff b/devel/llvm60/files/lld/patch-head-r338251.diff
new file mode 100644
index 000000000000..1c3df02100cd
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r338251.diff
@@ -0,0 +1,123 @@
+r338251 | markj | 2018-08-23 16:58:19 +0200 (Thu, 23 Aug 2018) | 29 lines
+
+Add an lld option to emit PC-relative relocations for ifunc calls.
+
+The current kernel ifunc implementation creates a PLT entry for each
+ifunc definition. ifunc calls therefore consist of a call to the
+PLT entry followed by an indirect jump. The jump target is written
+during boot when the kernel linker resolves R_[*]_IRELATIVE relocations.
+This implementation is defined by requirements for userland code, where
+text relocations are avoided. This requirement is not present for the
+kernel, so the implementation has avoidable overhead (namely, an extra
+indirect jump per call).
+
+Address this for now by adding a special option to the static linker
+to inhibit PLT creation for ifuncs. Instead, relocations to ifunc call
+sites are passed through to the output file, so the kernel linker can
+enumerate such call sites and apply PC-relative relocations directly
+to the text section. Thus the overhead of an ifunc call becomes exactly
+the same as that of an ordinary function call. This option is only for
+use by the kernel and will not work for regular programs.
+
+The final form of this optimization is up for debate; for now, this
+change is simple and static enough to be acceptable as an interim
+solution.
+
+Reviewed by: emaste
+Discussed with: arichardson, dim
+MFC after: 1 month
+Sponsored by: The FreeBSD Foundation
+Differential Revision: https://reviews.freebsd.org/D16748
+
+Index: tools/lld/ELF/Config.h
+===================================================================
+--- tools/lld/ELF/Config.h (revision 338250)
++++ tools/lld/ELF/Config.h (revision 338251)
+@@ -155,6 +155,7 @@ struct Configuration {
+ bool ZCombreloc;
+ bool ZExecstack;
+ bool ZHazardplt;
++ bool ZIfuncnoplt;
+ bool ZNocopyreloc;
+ bool ZNodelete;
+ bool ZNodlopen;
+Index: tools/lld/ELF/Driver.cpp
+===================================================================
+--- tools/lld/ELF/Driver.cpp (revision 338250)
++++ tools/lld/ELF/Driver.cpp (revision 338251)
+@@ -669,6 +669,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &
+ Config->ZCombreloc = !hasZOption(Args, "nocombreloc");
+ Config->ZExecstack = hasZOption(Args, "execstack");
+ Config->ZHazardplt = hasZOption(Args, "hazardplt");
++ Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
+ Config->ZNocopyreloc = hasZOption(Args, "nocopyreloc");
+ Config->ZNodelete = hasZOption(Args, "nodelete");
+ Config->ZNodlopen = hasZOption(Args, "nodlopen");
+Index: tools/lld/ELF/Relocations.cpp
+===================================================================
+--- tools/lld/ELF/Relocations.cpp (revision 338250)
++++ tools/lld/ELF/Relocations.cpp (revision 338251)
+@@ -374,6 +374,9 @@ static bool isStaticLinkTimeConstant(RelExpr E, Re
+ R_PPC_PLT_OPD, R_TLSDESC_CALL, R_TLSDESC_PAGE, R_HINT>(E))
+ return true;
+
++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt)
++ return false;
++
+ // These never do, except if the entire file is position dependent or if
+ // only the low bits are used.
+ if (E == R_GOT || E == R_PLT || E == R_TLSDESC)
+@@ -921,7 +924,9 @@ static void scanRelocs(InputSectionBase &Sec, Arra
+ // Strenghten or relax a PLT access.
+ //
+ // GNU ifunc symbols must be accessed via PLT because their addresses
+- // are determined by runtime.
++ // are determined by runtime. If the -z ifunc-noplt option is specified,
++ // we permit the optimization of ifunc calls by omitting the PLT entry
++ // and preserving relocations at ifunc call sites.
+ //
+ // On the other hand, if we know that a PLT entry will be resolved within
+ // the same ELF module, we can skip PLT access and directly jump to the
+@@ -929,7 +934,7 @@ static void scanRelocs(InputSectionBase &Sec, Arra
+ // all dynamic symbols that can be resolved within the executable will
+ // actually be resolved that way at runtime, because the main exectuable
+ // is always at the beginning of a search list. We can leverage that fact.
+- if (Sym.isGnuIFunc())
++ if (Sym.isGnuIFunc() && !Config->ZIfuncnoplt)
+ Expr = toPlt(Expr);
+ else if (!Preemptible && Expr == R_GOT_PC && !isAbsoluteValue(Sym))
+ Expr =
+@@ -1034,6 +1039,16 @@ static void scanRelocs(InputSectionBase &Sec, Arra
+ continue;
+ }
+
++ // Preserve relocations against ifuncs if we were asked to do so.
++ if (Sym.isGnuIFunc() && Config->ZIfuncnoplt) {
++ if (Config->IsRela)
++ InX::RelaDyn->addReloc({Type, &Sec, Offset, false, &Sym, Addend});
++ else
++ // Preserve the existing addend.
++ InX::RelaDyn->addReloc({Type, &Sec, Offset, false, &Sym, 0});
++ continue;
++ }
++
+ // If the output being produced is position independent, the final value
+ // is still not known. In that case we still need some help from the
+ // dynamic linker. We can however do better than just copying the incoming
+Index: tools/lld/ELF/Writer.cpp
+===================================================================
+--- tools/lld/ELF/Writer.cpp (revision 338250)
++++ tools/lld/ELF/Writer.cpp (revision 338251)
+@@ -1400,8 +1400,11 @@ template <class ELFT> void Writer<ELFT>::finalizeS
+ applySynthetic({InX::EhFrame},
+ [](SyntheticSection *SS) { SS->finalizeContents(); });
+
+- for (Symbol *S : Symtab->getSymbols())
++ for (Symbol *S : Symtab->getSymbols()) {
+ S->IsPreemptible |= computeIsPreemptible(*S);
++ if (S->isGnuIFunc() && Config->ZIfuncnoplt)
++ S->ExportDynamic = true;
++ }
+
+ // Scan relocations. This must be done after every symbol is declared so that
+ // we can correctly decide if a dynamic relocation is needed.
diff --git a/devel/llvm60/files/lld/patch-head-r338682.diff b/devel/llvm60/files/lld/patch-head-r338682.diff
new file mode 100644
index 000000000000..1783fe227489
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r338682.diff
@@ -0,0 +1,55 @@
+r338682 | emaste | 2018-09-14 17:15:16 +0200 (Fri, 14 Sep 2018) | 16 lines
+
+lld: add -z interpose support
+
+-z interpose sets the DF_1_INTERPOSE flag, marking the object as an
+interposer.
+
+Committed upstream as LLVM r342239.
+
+PR: 230604
+Reported by: jbeich
+Reviewed by: markj
+Approved by: re (kib)
+MFC after: 1 week
+Relnotes: Yes
+Sponsored by: The FreeBSD Foundation
+Differential Revision: https://reviews.freebsd.org/D17172
+
+Index: tools/lld/ELF/Config.h
+===================================================================
+--- tools/lld/ELF/Config.h (revision 338681)
++++ tools/lld/ELF/Config.h (revision 338682)
+@@ -156,6 +156,7 @@ struct Configuration {
+ bool ZExecstack;
+ bool ZHazardplt;
+ bool ZIfuncnoplt;
++ bool ZInterpose;
+ bool ZNocopyreloc;
+ bool ZNodelete;
+ bool ZNodlopen;
+Index: tools/lld/ELF/Driver.cpp
+===================================================================
+--- tools/lld/ELF/Driver.cpp (revision 338681)
++++ tools/lld/ELF/Driver.cpp (revision 338682)
+@@ -670,6 +670,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &
+ Config->ZExecstack = hasZOption(Args, "execstack");
+ Config->ZHazardplt = hasZOption(Args, "hazardplt");
+ Config->ZIfuncnoplt = hasZOption(Args, "ifunc-noplt");
++ Config->ZInterpose = hasZOption(Args, "interpose");
+ Config->ZNocopyreloc = hasZOption(Args, "nocopyreloc");
+ Config->ZNodelete = hasZOption(Args, "nodelete");
+ Config->ZNodlopen = hasZOption(Args, "nodlopen");
+Index: tools/lld/ELF/SyntheticSections.cpp
+===================================================================
+--- tools/lld/ELF/SyntheticSections.cpp (revision 338681)
++++ tools/lld/ELF/SyntheticSections.cpp (revision 338682)
+@@ -1034,6 +1034,8 @@ template <class ELFT> void DynamicSection<ELFT>::f
+ uint32_t DtFlags1 = 0;
+ if (Config->Bsymbolic)
+ DtFlags |= DF_SYMBOLIC;
++ if (Config->ZInterpose)
++ DtFlags1 |= DF_1_INTERPOSE;
+ if (Config->ZNodelete)
+ DtFlags1 |= DF_1_NODELETE;
+ if (Config->ZNodlopen)
diff --git a/devel/llvm60/files/lld/patch-head-r339013.diff b/devel/llvm60/files/lld/patch-head-r339013.diff
new file mode 100644
index 000000000000..ba614706a88d
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r339013.diff
@@ -0,0 +1,39 @@
+r339013 | dim | 2018-09-29 16:12:03 +0200 (Sat, 29 Sep 2018) | 24 lines
+
+Pull in r329557 from upstream lld trunk (by George Rimar):
+
+ [ELF] - Allow LLD to produce file symbols.
+
+ This is for PR36716 and
+ this enables emitting STT_FILE symbols.
+
+ Output size affect is minor:
+ lld binary size changes from 52,883,408 to 52,949,400
+ clang binary size changes from 83,136,456 to 83,219,600
+
+ Differential revision: https://reviews.llvm.org/D45261
+
+This fixes a regression in lld that made it stop emitting STT_FILE
+symbols, which ctfmerge relies upon to uniquify function table entries
+that reference STB_LOCAL symbols. Consequently, ctfmerge stopped
+emitting entries for static functions into the function table, and
+dtrace no longer gets type info for them.
+
+Approved by: re (kib)
+Reported by: markj
+PR: 230444
+MFC after: 3 days
+
+Index: tools/lld/ELF/Writer.cpp
+===================================================================
+--- tools/lld/ELF/Writer.cpp (revision 339012)
++++ tools/lld/ELF/Writer.cpp (revision 339013)
+@@ -487,7 +487,7 @@ template <class ELFT> void Writer<ELFT>::run() {
+
+ static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName,
+ const Symbol &B) {
+- if (B.isFile() || B.isSection())
++ if (B.isSection())
+ return false;
+
+ // If sym references a section in a discarded group, don't keep it.
diff --git a/devel/llvm60/files/lld/patch-head-r339304.diff b/devel/llvm60/files/lld/patch-head-r339304.diff
new file mode 100644
index 000000000000..59ff933dfff6
--- /dev/null
+++ b/devel/llvm60/files/lld/patch-head-r339304.diff
@@ -0,0 +1,37 @@
+r339304 | emaste | 2018-10-11 15:19:17 +0200 (Thu, 11 Oct 2018) | 13 lines
+
+lld: set sh_link and sh_info for .rela.plt sections
+
+ELF spec says that for SHT_REL and SHT_RELA sh_link should reference the
+associated string table and sh_info should reference the "section to
+which the relocation applies." ELF Tool Chain's elfcopy / strip use
+this (in part) to control whether or not the relocation entry is copied
+to the output.
+
+LLVM PR 37538 https://bugs.llvm.org/show_bug.cgi?id=37538
+
+Approved by: re (kib)
+Obtained from: llvm r344226 (backported for 6.0)
+
+Index: tools/lld/ELF/SyntheticSections.cpp
+===================================================================
+--- tools/lld/ELF/SyntheticSections.cpp (revision 339303)
++++ tools/lld/ELF/SyntheticSections.cpp (revision 339304)
+@@ -1213,11 +1213,13 @@ void RelocationBaseSection::addReloc(const Dynamic
+ void RelocationBaseSection::finalizeContents() {
+ // If all relocations are R_*_RELATIVE they don't refer to any
+ // dynamic symbol and we don't need a dynamic symbol table. If that
+- // is the case, just use 0 as the link.
+- Link = InX::DynSymTab ? InX::DynSymTab->getParent()->SectionIndex : 0;
++ // is the case, just use the index of the regular symbol table section.
++ getParent()->Link = InX::DynSymTab ?
++ InX::DynSymTab->getParent()->SectionIndex :
++ InX::SymTab->getParent()->SectionIndex;
+
+- // Set required output section properties.
+- getParent()->Link = Link;
++ if (InX::RelaIplt == this || InX::RelaPlt == this)
++ getParent()->Info = InX::GotPlt->getParent()->SectionIndex;
+ }
+
+ template <class ELFT>
diff --git a/devel/llvm60/files/lldb/patch-head-r332849.diff b/devel/llvm60/files/lldb/patch-head-r332849.diff
new file mode 100644
index 000000000000..ced3a7a80319
--- /dev/null
+++ b/devel/llvm60/files/lldb/patch-head-r332849.diff
@@ -0,0 +1,38 @@
+r332849 | emaste | 2018-04-21 02:34:46 +0200 (Sat, 21 Apr 2018) | 20 lines
+
+lldb: propagate error to user if memory read fails
+
+Previously, an attempt to read an unreadable access reported zeros:
+
+(lldb) memory read -format hex -size 8 0
+0x00000000: 0x0000000000000000 0x0000000000000000
+0x00000010: 0x0000000000000000 0x0000000000000000
+...
+
+Now, if DoReadMemory encounters error then return 0 (bytes read) so we
+report the error to the user:
+
+(lldb) memory read -format hex -size 8 0
+error: Bad address
+
+LLVM PR: 37190
+
+MFC after: 1 week
+Sponsored by: The FreeBSD Foundation
+
+Index: tools/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp
+===================================================================
+--- tools/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp (revision 332848)
++++ tools/lldb/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp (revision 332849)
+@@ -163,8 +163,10 @@ static size_t DoReadMemory(lldb::pid_t pid, lldb::
+ pi_desc.piod_addr = buf;
+ pi_desc.piod_len = size;
+
+- if (PTRACE(PT_IO, pid, (caddr_t)&pi_desc, 0) < 0)
++ if (PTRACE(PT_IO, pid, (caddr_t)&pi_desc, 0) < 0) {
+ error.SetErrorToErrno();
++ return 0;
++ }
+ return pi_desc.piod_len;
+ }
+
diff --git a/devel/llvm60/files/lldb/patch-head-r332965.diff b/devel/llvm60/files/lldb/patch-head-r332965.diff
new file mode 100644
index 000000000000..67e33f30e33a
--- /dev/null
+++ b/devel/llvm60/files/lldb/patch-head-r332965.diff
@@ -0,0 +1,22 @@
+r332965 | emaste | 2018-04-24 21:26:58 +0200 (Tue, 24 Apr 2018) | 8 lines
+
+lldb: remove assertion that target_arch is FreeBSD
+
+The target is not necessarily a FreeBSD binary - for example, it may be
+a Linux binary running under the linuxulator. Basic ptrace (live)
+debugging already worked in this case, except for the assertion.
+
+Sponsored by: Turing Robotic Industries Inc.
+
+Index: tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp
+===================================================================
+--- tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332964)
++++ tools/lldb/source/Plugins/Process/FreeBSD/FreeBSDThread.cpp (revision 332965)
+@@ -169,7 +169,6 @@ lldb::RegisterContextSP FreeBSDThread::GetRegister
+ RegisterInfoInterface *reg_interface = NULL;
+ const ArchSpec &target_arch = GetProcess()->GetTarget().GetArchitecture();
+
+- assert(target_arch.GetTriple().getOS() == llvm::Triple::FreeBSD);
+ switch (target_arch.GetMachine()) {
+ case llvm::Triple::aarch64:
+ reg_interface = new RegisterInfoPOSIX_arm64(target_arch);
diff --git a/devel/llvm60/files/llvm-wrapper.sh.in b/devel/llvm60/files/llvm-wrapper.sh.in
new file mode 100644
index 000000000000..dfece2c0ced9
--- /dev/null
+++ b/devel/llvm60/files/llvm-wrapper.sh.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+# $FreeBSD$
+
+LLVM_PREFIX="%%LLVM_PREFIX%%"
+LLVM_SUFFIX="%%LLVM_SUFFIX%%"
+
+tool=$0
+[ -L "$tool" ] && tool=$(/bin/realpath $tool)
+tool=${tool##*/}
+tool="${LLVM_PREFIX}/bin/${tool%${LLVM_SUFFIX}}"
+LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}${LLVM_PREFIX}/lib" \
+ exec "${tool}" "${@}"
diff --git a/devel/llvm60/files/openmp/patch-bug32279 b/devel/llvm60/files/openmp/patch-bug32279
new file mode 100644
index 000000000000..420402ab15a6
--- /dev/null
+++ b/devel/llvm60/files/openmp/patch-bug32279
@@ -0,0 +1,29 @@
+--- projects/openmp/runtime/cmake/LibompHandleFlags.cmake.orig 2017-03-16 15:50:48 UTC
++++ projects/openmp/runtime/cmake/LibompHandleFlags.cmake
+@@ -156,6 +156,11 @@ function(libomp_get_libflags libflags)
+ if(${IA32})
+ libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
+ endif()
++ IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
++ libomp_append(libflags_local "-Wl,--no-as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ libomp_append(libflags_local "-lm")
++ libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
++ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
+ IF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ libomp_append(libflags_local -lm)
+ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
+ runtime/cmake/LibompHandleFlags.cmake | 5 +++++
+ runtime/cmake/LibompMicroTests.cmake | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+--- projects/openmp/runtime/cmake/LibompMicroTests.cmake.orig 2017-03-16 15:50:48 UTC
++++ projects/openmp/runtime/cmake/LibompMicroTests.cmake
+@@ -171,7 +171,7 @@ add_custom_command(
+ add_custom_target(libomp-test-deps DEPENDS test-deps/.success)
+ set(libomp_expected_library_deps)
+ if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+- set(libomp_expected_library_deps libc.so.7 libthr.so.3)
++ set(libomp_expected_library_deps libc.so.7 libthr.so.3 libm.so.5)
+ libomp_append(libomp_expected_library_deps libhwloc.so.5 LIBOMP_USE_HWLOC)
+ elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+ set(libomp_expected_library_deps libc.so.12 libpthread.so.1 libm.so.0)
diff --git a/devel/llvm60/files/openmp/patch-i386 b/devel/llvm60/files/openmp/patch-i386
new file mode 100644
index 000000000000..9300640f6845
--- /dev/null
+++ b/devel/llvm60/files/openmp/patch-i386
@@ -0,0 +1,11 @@
+--- projects/openmp/runtime/src/kmp_runtime.cpp.orig 2017-07-17 09:03:14 UTC
++++ projects/openmp/runtime/src/kmp_runtime.cpp
+@@ -7535,7 +7535,7 @@ __kmp_determine_reduction_method(
+
+ #elif KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_AARCH || KMP_ARCH_MIPS
+
+-#if KMP_OS_LINUX || KMP_OS_WINDOWS
++#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_WINDOWS
+
+ // basic tuning
+
diff --git a/devel/llvm60/files/patch-cmake_modules_AddSphinxTarget.cmake b/devel/llvm60/files/patch-cmake_modules_AddSphinxTarget.cmake
new file mode 100644
index 000000000000..f4fc8f25e306
--- /dev/null
+++ b/devel/llvm60/files/patch-cmake_modules_AddSphinxTarget.cmake
@@ -0,0 +1,11 @@
+--- cmake/modules/AddSphinxTarget.cmake.orig
++++ cmake/modules/AddSphinxTarget.cmake
+@@ -29,6 +29,8 @@
+ endif()
+
+ add_custom_target(${SPHINX_TARGET_NAME}
++ COMMAND ${CMAKE_COMMAND}
++ -E make_directory ${SPHINX_BUILD_DIR}
+ COMMAND ${SPHINX_EXECUTABLE}
+ -b ${builder}
+ -d "${SPHINX_DOC_TREE_DIR}"
diff --git a/devel/llvm60/files/patch-head-r308867.diff b/devel/llvm60/files/patch-head-r308867.diff
new file mode 100644
index 000000000000..07efefa7c899
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r308867.diff
@@ -0,0 +1,33 @@
+r308867 | dim | 2016-11-19 22:05:17 +0100 (Sat, 19 Nov 2016) | 15 lines
+
+Work around LLVM PR30879, which is about a bad interaction between X86
+Call Frame Optimization on i386 and libunwind, by disallowing the
+optimization for i386-freebsd12.
+
+This should fix some instances of broken exception handling when frame
+pointers are omitted, in particular some unittests run during the build
+of editors/libreoffice.
+
+This hack will be removed as soon as upstream has implemented a more
+permanent fix for this problem.
+
+Upstream PR: https://llvm.org/bugs/show_bug.cgi?id=30879
+Reviewed by: emaste
+PR: 212343
+
+Index: lib/Target/X86/X86CallFrameOptimization.cpp
+===================================================================
+--- lib/Target/X86/X86CallFrameOptimization.cpp (revision 308866)
++++ lib/Target/X86/X86CallFrameOptimization.cpp (revision 308867)
+@@ -125,6 +125,11 @@ bool X86CallFrameOptimization::isLegal(MachineFunc
+ if (NoX86CFOpt.getValue())
+ return false;
+
++ // Work around LLVM PR30879 (bad interaction between CFO and libunwind)
++ if (STI->isTargetFreeBSD() && STI->is32Bit() &&
++ STI->getTargetTriple().getOSMajorVersion() >= 12)
++ return false;
++
+ // We can't encode multiple DW_CFA_GNU_args_size or DW_CFA_def_cfa_offset
+ // in the compact unwind encoding that Darwin uses. So, bail if there
+ // is a danger of that being generated.
diff --git a/devel/llvm60/files/patch-head-r330686.diff b/devel/llvm60/files/patch-head-r330686.diff
new file mode 100644
index 000000000000..5a5f04e3b0ef
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r330686.diff
@@ -0,0 +1,80 @@
+r330686 | dim | 2018-03-09 10:21:22 +0100 (Fri, 09 Mar 2018) | 20 lines
+
+Pull in r326882 from upstream llvm trunk (by Sjoerd Meijer):
+
+ [ARM] Fix for PR36577
+
+ Don't PerformSHLSimplify if the given node is used by a node that
+ also uses a constant because we may get stuck in an infinite combine
+ loop.
+
+ bugzilla: https://bugs.llvm.org/show_bug.cgi?id=36577
+
+ Patch by Sam Parker.
+
+ Differential Revision: https://reviews.llvm.org/D44097
+
+This fixes a hang when compiling one particular file in java/openjdk8
+for armv6 and armv7.
+
+Reported by: swills
+PR: 226388
+
+Index: lib/Target/ARM/ARMISelLowering.cpp
+===================================================================
+--- lib/Target/ARM/ARMISelLowering.cpp (revision 330685)
++++ lib/Target/ARM/ARMISelLowering.cpp (revision 330686)
+@@ -10201,7 +10201,14 @@ static SDValue PerformSHLSimplify(SDNode *N,
+ case ISD::XOR:
+ case ISD::SETCC:
+ case ARMISD::CMP:
+- // Check that its not already using a shl.
++ // Check that the user isn't already using a constant because there
++ // aren't any instructions that support an immediate operand and a
++ // shifted operand.
++ if (isa<ConstantSDNode>(U->getOperand(0)) ||
++ isa<ConstantSDNode>(U->getOperand(1)))
++ return SDValue();
++
++ // Check that it's not already using a shift.
+ if (U->getOperand(0).getOpcode() == ISD::SHL ||
+ U->getOperand(1).getOpcode() == ISD::SHL)
+ return SDValue();
+@@ -10223,8 +10230,6 @@ static SDValue PerformSHLSimplify(SDNode *N,
+ if (!C1ShlC2 || !C2)
+ return SDValue();
+
+- DEBUG(dbgs() << "Trying to simplify shl: "; N->dump());
+-
+ APInt C2Int = C2->getAPIntValue();
+ APInt C1Int = C1ShlC2->getAPIntValue();
+
+@@ -10238,12 +10243,12 @@ static SDValue PerformSHLSimplify(SDNode *N,
+ C1Int.lshrInPlace(C2Int);
+
+ // The immediates are encoded as an 8-bit value that can be rotated.
+- unsigned Zeros = C1Int.countLeadingZeros() + C1Int.countTrailingZeros();
+- if (C1Int.getBitWidth() - Zeros > 8)
+- return SDValue();
++ auto LargeImm = [](const APInt &Imm) {
++ unsigned Zeros = Imm.countLeadingZeros() + Imm.countTrailingZeros();
++ return Imm.getBitWidth() - Zeros > 8;
++ };
+
+- Zeros = C2Int.countLeadingZeros() + C2Int.countTrailingZeros();
+- if (C2Int.getBitWidth() - Zeros > 8)
++ if (LargeImm(C1Int) || LargeImm(C2Int))
+ return SDValue();
+
+ SelectionDAG &DAG = DCI.DAG;
+@@ -10254,6 +10259,10 @@ static SDValue PerformSHLSimplify(SDNode *N,
+ // Shift left to compensate for the lshr of C1Int.
+ SDValue Res = DAG.getNode(ISD::SHL, dl, MVT::i32, BinOp, SHL.getOperand(1));
+
++ DEBUG(dbgs() << "Simplify shl use:\n"; SHL.getOperand(0).dump(); SHL.dump();
++ N->dump());
++ DEBUG(dbgs() << "Into:\n"; X.dump(); BinOp.dump(); Res.dump());
++
+ DAG.ReplaceAllUsesWith(SDValue(N, 0), Res);
+ return SDValue(N, 0);
+ }
diff --git a/devel/llvm60/files/patch-head-r331065.diff b/devel/llvm60/files/patch-head-r331065.diff
new file mode 100644
index 000000000000..6976ee83460f
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r331065.diff
@@ -0,0 +1,88 @@
+r331065 | dim | 2018-03-16 18:50:44 +0100 (Fri, 16 Mar 2018) | 17 lines
+
+Pull in r327638 from upstream llvm trunk (by Matthew Simpson):
+
+ [ConstantFolding, InstSimplify] Handle more vector GEPs
+
+ This patch addresses some additional cases where the compiler crashes
+ upon encountering vector GEPs. This should fix PR36116.
+
+ Differential Revision: https://reviews.llvm.org/D44219
+ Reference: https://bugs.llvm.org/show_bug.cgi?id=36116
+
+This fixes an assertion when building the emulators/snes9x port.
+
+Reported by: jbeich
+PR: 225471
+MFC after: 3 months
+X-MFC-With: r327952
+
+Index: lib/Analysis/InstructionSimplify.cpp
+===================================================================
+--- lib/Analysis/InstructionSimplify.cpp (revision 331064)
++++ lib/Analysis/InstructionSimplify.cpp (revision 331065)
+@@ -3697,7 +3697,7 @@ static Value *SimplifyGEPInst(Type *SrcTy, ArrayRe
+
+ if (Ops.size() == 2) {
+ // getelementptr P, 0 -> P.
+- if (match(Ops[1], m_Zero()))
++ if (match(Ops[1], m_Zero()) && Ops[0]->getType() == GEPTy)
+ return Ops[0];
+
+ Type *Ty = SrcTy;
+@@ -3706,7 +3706,7 @@ static Value *SimplifyGEPInst(Type *SrcTy, ArrayRe
+ uint64_t C;
+ uint64_t TyAllocSize = Q.DL.getTypeAllocSize(Ty);
+ // getelementptr P, N -> P if P points to a type of zero size.
+- if (TyAllocSize == 0)
++ if (TyAllocSize == 0 && Ops[0]->getType() == GEPTy)
+ return Ops[0];
+
+ // The following transforms are only safe if the ptrtoint cast
+Index: lib/IR/ConstantFold.cpp
+===================================================================
+--- lib/IR/ConstantFold.cpp (revision 331064)
++++ lib/IR/ConstantFold.cpp (revision 331065)
+@@ -2018,8 +2018,16 @@ static bool isInBoundsIndices(ArrayRef<IndexTy> Id
+
+ // If the first index is one and all the rest are zero, it's in bounds,
+ // by the one-past-the-end rule.
+- if (!cast<ConstantInt>(Idxs[0])->isOne())
+- return false;
++ if (auto *CI = dyn_cast<ConstantInt>(Idxs[0])) {
++ if (!CI->isOne())
++ return false;
++ } else {
++ auto *CV = cast<ConstantDataVector>(Idxs[0]);
++ CI = dyn_cast_or_null<ConstantInt>(CV->getSplatValue());
++ if (!CI || !CI->isOne())
++ return false;
++ }
++
+ for (unsigned i = 1, e = Idxs.size(); i != e; ++i)
+ if (!cast<Constant>(Idxs[i])->isNullValue())
+ return false;
+@@ -2049,15 +2057,18 @@ Constant *llvm::ConstantFoldGetElementPtr(Type *Po
+ ArrayRef<Value *> Idxs) {
+ if (Idxs.empty()) return C;
+
+- if (isa<UndefValue>(C)) {
+- Type *GEPTy = GetElementPtrInst::getGEPReturnType(
+- C, makeArrayRef((Value * const *)Idxs.data(), Idxs.size()));
++ Type *GEPTy = GetElementPtrInst::getGEPReturnType(
++ C, makeArrayRef((Value *const *)Idxs.data(), Idxs.size()));
++
++ if (isa<UndefValue>(C))
+ return UndefValue::get(GEPTy);
+- }
+
+ Constant *Idx0 = cast<Constant>(Idxs[0]);
+ if (Idxs.size() == 1 && (Idx0->isNullValue() || isa<UndefValue>(Idx0)))
+- return C;
++ return GEPTy->isVectorTy() && !C->getType()->isVectorTy()
++ ? ConstantVector::getSplat(
++ cast<VectorType>(GEPTy)->getNumElements(), C)
++ : C;
+
+ if (C->isNullValue()) {
+ bool isNull = true;
diff --git a/devel/llvm60/files/patch-head-r331366.diff b/devel/llvm60/files/patch-head-r331366.diff
new file mode 100644
index 000000000000..dccde7fb6bd6
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r331366.diff
@@ -0,0 +1,609 @@
+r331366 | dim | 2018-03-22 19:58:34 +0100 (Thu, 22 Mar 2018) | 61 lines
+
+Pull in r327101 from upstream llvm trunk (by Rafael Espindola):
+
+ Don't treat .symver as a regular alias definition.
+
+ This patch starts simplifying the handling of .symver.
+
+ For now it just moves the responsibility for creating an alias down to
+ the streamer. With that the asm streamer can pass a .symver unchanged,
+ which is nice since gas cannot parse "foo@bar = zed".
+
+ In a followup I hope to move the handling down to the writer so that
+ we don't need special hacks for avoiding breaking names with @@@ on
+ windows.
+
+Pull in r327160 from upstream llvm trunk (by Rafael Espindola):
+
+ Delay creating an alias for @@@.
+
+ With this we only create an alias for @@@ once we know if it should
+ use @ or @@. This avoids last minutes renames and hacks to handle MS
+ names.
+
+ This only handles the ELF writer. LTO still has issues with @@@
+ aliases.
+
+Pull in r327928 from upstream llvm trunk (by Vitaly Buka):
+
+ Object: Move attribute calculation into RecordStreamer. NFC
+
+ Summary: Preparation for D44274
+
+ Reviewers: pcc, espindola
+
+ Subscribers: hiraditya
+
+ Differential Revision: https://reviews.llvm.org/D44276
+
+Pull in r327930 from upstream llvm trunk (by Vitaly Buka):
+
+ Object: Fix handling of @@@ in .symver directive
+
+ Summary:
+ name@@@nodename is going to be replaced with name@@nodename if symbols is
+ defined in the assembled file, or name@nodename if undefined.
+ https://sourceware.org/binutils/docs/as/Symver.html
+
+ Fixes PR36623
+
+ Reviewers: pcc, espindola
+
+ Subscribers: mehdi_amini, hiraditya
+
+ Differential Revision: https://reviews.llvm.org/D44274
+
+Together, these changes fix handling of @@@ in .symver directives when
+doing Link Time Optimization.
+
+Reported by: Shawn Webb <shawn.webb@hardenedbsd.org>
+MFC after: 3 months
+X-MFC-With: r327952
+
+Index: include/llvm/MC/MCAssembler.h
+===================================================================
+--- include/llvm/MC/MCAssembler.h (revision 331365)
++++ include/llvm/MC/MCAssembler.h (revision 331366)
+@@ -206,6 +206,8 @@ class MCAssembler {
+ handleFixup(const MCAsmLayout &Layout, MCFragment &F, const MCFixup &Fixup);
+
+ public:
++ std::vector<std::pair<StringRef, const MCSymbol *>> Symvers;
++
+ /// Construct a new assembler instance.
+ //
+ // FIXME: How are we going to parameterize this? Two obvious options are stay
+Index: include/llvm/MC/MCELFStreamer.h
+===================================================================
+--- include/llvm/MC/MCELFStreamer.h (revision 331365)
++++ include/llvm/MC/MCELFStreamer.h (revision 331366)
+@@ -51,6 +51,8 @@ class MCELFStreamer : public MCObjectStreamer {
+ unsigned ByteAlignment) override;
+
+ void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override;
++ void emitELFSymverDirective(StringRef AliasName,
++ const MCSymbol *Aliasee) override;
+
+ void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
+ unsigned ByteAlignment) override;
+Index: include/llvm/MC/MCStreamer.h
+===================================================================
+--- include/llvm/MC/MCStreamer.h (revision 331365)
++++ include/llvm/MC/MCStreamer.h (revision 331366)
+@@ -519,9 +519,10 @@ class MCStreamer {
+ ///
+ /// This corresponds to an assembler statement such as:
+ /// .symver _start, foo@@SOME_VERSION
+- /// \param Alias - The versioned alias (i.e. "foo@@SOME_VERSION")
++ /// \param AliasName - The versioned alias (i.e. "foo@@SOME_VERSION")
+ /// \param Aliasee - The aliased symbol (i.e. "_start")
+- virtual void emitELFSymverDirective(MCSymbol *Alias, const MCSymbol *Aliasee);
++ virtual void emitELFSymverDirective(StringRef AliasName,
++ const MCSymbol *Aliasee);
+
+ /// \brief Emit a Linker Optimization Hint (LOH) directive.
+ /// \param Args - Arguments of the LOH.
+Index: lib/MC/ELFObjectWriter.cpp
+===================================================================
+--- lib/MC/ELFObjectWriter.cpp (revision 331365)
++++ lib/MC/ELFObjectWriter.cpp (revision 331366)
+@@ -128,8 +128,6 @@ class ELFObjectWriter : public MCObjectWriter {
+ /// @name Symbol Table Data
+ /// @{
+
+- BumpPtrAllocator Alloc;
+- StringSaver VersionSymSaver{Alloc};
+ StringTableBuilder StrTabBuilder{StringTableBuilder::ELF};
+
+ /// @}
+@@ -391,27 +389,29 @@ void ELFObjectWriter::executePostLayoutBinding(MCA
+ const MCAsmLayout &Layout) {
+ // The presence of symbol versions causes undefined symbols and
+ // versions declared with @@@ to be renamed.
+- for (const MCSymbol &A : Asm.symbols()) {
+- const auto &Alias = cast<MCSymbolELF>(A);
+- // Not an alias.
+- if (!Alias.isVariable())
+- continue;
+- auto *Ref = dyn_cast<MCSymbolRefExpr>(Alias.getVariableValue());
+- if (!Ref)
+- continue;
+- const auto &Symbol = cast<MCSymbolELF>(Ref->getSymbol());
+-
+- StringRef AliasName = Alias.getName();
++ for (const std::pair<StringRef, const MCSymbol *> &P : Asm.Symvers) {
++ StringRef AliasName = P.first;
++ const auto &Symbol = cast<MCSymbolELF>(*P.second);
+ size_t Pos = AliasName.find('@');
+- if (Pos == StringRef::npos)
+- continue;
++ assert(Pos != StringRef::npos);
+
++ StringRef Prefix = AliasName.substr(0, Pos);
++ StringRef Rest = AliasName.substr(Pos);
++ StringRef Tail = Rest;
++ if (Rest.startswith("@@@"))
++ Tail = Rest.substr(Symbol.isUndefined() ? 2 : 1);
++
++ auto *Alias =
++ cast<MCSymbolELF>(Asm.getContext().getOrCreateSymbol(Prefix + Tail));
++ Asm.registerSymbol(*Alias);
++ const MCExpr *Value = MCSymbolRefExpr::create(&Symbol, Asm.getContext());
++ Alias->setVariableValue(Value);
++
+ // Aliases defined with .symvar copy the binding from the symbol they alias.
+ // This is the first place we are able to copy this information.
+- Alias.setExternal(Symbol.isExternal());
+- Alias.setBinding(Symbol.getBinding());
++ Alias->setExternal(Symbol.isExternal());
++ Alias->setBinding(Symbol.getBinding());
+
+- StringRef Rest = AliasName.substr(Pos);
+ if (!Symbol.isUndefined() && !Rest.startswith("@@@"))
+ continue;
+
+@@ -420,7 +420,7 @@ void ELFObjectWriter::executePostLayoutBinding(MCA
+ !Rest.startswith("@@@"))
+ report_fatal_error("A @@ version cannot be undefined");
+
+- Renames.insert(std::make_pair(&Symbol, &Alias));
++ Renames.insert(std::make_pair(&Symbol, Alias));
+ }
+ }
+
+@@ -836,44 +836,7 @@ void ELFObjectWriter::computeSymbolTable(
+ HasLargeSectionIndex = true;
+ }
+
+- // The @@@ in symbol version is replaced with @ in undefined symbols and @@
+- // in defined ones.
+- //
+- // FIXME: All name handling should be done before we get to the writer,
+- // including dealing with GNU-style version suffixes. Fixing this isn't
+- // trivial.
+- //
+- // We thus have to be careful to not perform the symbol version replacement
+- // blindly:
+- //
+- // The ELF format is used on Windows by the MCJIT engine. Thus, on
+- // Windows, the ELFObjectWriter can encounter symbols mangled using the MS
+- // Visual Studio C++ name mangling scheme. Symbols mangled using the MSVC
+- // C++ name mangling can legally have "@@@" as a sub-string. In that case,
+- // the EFLObjectWriter should not interpret the "@@@" sub-string as
+- // specifying GNU-style symbol versioning. The ELFObjectWriter therefore
+- // checks for the MSVC C++ name mangling prefix which is either "?", "@?",
+- // "__imp_?" or "__imp_@?".
+- //
+- // It would have been interesting to perform the MS mangling prefix check
+- // only when the target triple is of the form *-pc-windows-elf. But, it
+- // seems that this information is not easily accessible from the
+- // ELFObjectWriter.
+ StringRef Name = Symbol.getName();
+- SmallString<32> Buf;
+- if (!Name.startswith("?") && !Name.startswith("@?") &&
+- !Name.startswith("__imp_?") && !Name.startswith("__imp_@?")) {
+- // This symbol isn't following the MSVC C++ name mangling convention. We
+- // can thus safely interpret the @@@ in symbol names as specifying symbol
+- // versioning.
+- size_t Pos = Name.find("@@@");
+- if (Pos != StringRef::npos) {
+- Buf += Name.substr(0, Pos);
+- unsigned Skip = MSD.SectionIndex == ELF::SHN_UNDEF ? 2 : 1;
+- Buf += Name.substr(Pos + Skip);
+- Name = VersionSymSaver.save(Buf.c_str());
+- }
+- }
+
+ // Sections have their own string table
+ if (Symbol.getType() != ELF::STT_SECTION) {
+Index: lib/MC/MCAsmStreamer.cpp
+===================================================================
+--- lib/MC/MCAsmStreamer.cpp (revision 331365)
++++ lib/MC/MCAsmStreamer.cpp (revision 331366)
+@@ -129,6 +129,9 @@ class MCAsmStreamer final : public MCStreamer {
+
+ void ChangeSection(MCSection *Section, const MCExpr *Subsection) override;
+
++ void emitELFSymverDirective(StringRef AliasName,
++ const MCSymbol *Aliasee) override;
++
+ void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) override;
+ void EmitLabel(MCSymbol *Symbol, SMLoc Loc = SMLoc()) override;
+
+@@ -411,6 +414,14 @@ void MCAsmStreamer::ChangeSection(MCSection *Secti
+ }
+ }
+
++void MCAsmStreamer::emitELFSymverDirective(StringRef AliasName,
++ const MCSymbol *Aliasee) {
++ OS << ".symver ";
++ Aliasee->print(OS, MAI);
++ OS << ", " << AliasName;
++ EmitEOL();
++}
++
+ void MCAsmStreamer::EmitLabel(MCSymbol *Symbol, SMLoc Loc) {
+ MCStreamer::EmitLabel(Symbol, Loc);
+
+Index: lib/MC/MCELFStreamer.cpp
+===================================================================
+--- lib/MC/MCELFStreamer.cpp (revision 331365)
++++ lib/MC/MCELFStreamer.cpp (revision 331366)
+@@ -337,6 +337,11 @@ void MCELFStreamer::emitELFSize(MCSymbol *Symbol,
+ cast<MCSymbolELF>(Symbol)->setSize(Value);
+ }
+
++void MCELFStreamer::emitELFSymverDirective(StringRef AliasName,
++ const MCSymbol *Aliasee) {
++ getAssembler().Symvers.push_back({AliasName, Aliasee});
++}
++
+ void MCELFStreamer::EmitLocalCommonSymbol(MCSymbol *S, uint64_t Size,
+ unsigned ByteAlignment) {
+ auto *Symbol = cast<MCSymbolELF>(S);
+Index: lib/MC/MCParser/ELFAsmParser.cpp
+===================================================================
+--- lib/MC/MCParser/ELFAsmParser.cpp (revision 331365)
++++ lib/MC/MCParser/ELFAsmParser.cpp (revision 331366)
+@@ -767,12 +767,8 @@ bool ELFAsmParser::ParseDirectiveSymver(StringRef,
+ if (AliasName.find('@') == StringRef::npos)
+ return TokError("expected a '@' in the name");
+
+- MCSymbol *Alias = getContext().getOrCreateSymbol(AliasName);
+ MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
+- const MCExpr *Value = MCSymbolRefExpr::create(Sym, getContext());
+-
+- getStreamer().EmitAssignment(Alias, Value);
+- getStreamer().emitELFSymverDirective(Alias, Sym);
++ getStreamer().emitELFSymverDirective(AliasName, Sym);
+ return false;
+ }
+
+Index: lib/MC/MCStreamer.cpp
+===================================================================
+--- lib/MC/MCStreamer.cpp (revision 331365)
++++ lib/MC/MCStreamer.cpp (revision 331366)
+@@ -925,7 +925,7 @@ void MCStreamer::EmitCOFFSymbolType(int Type) {
+ llvm_unreachable("this directive only supported on COFF targets");
+ }
+ void MCStreamer::emitELFSize(MCSymbol *Symbol, const MCExpr *Value) {}
+-void MCStreamer::emitELFSymverDirective(MCSymbol *Alias,
++void MCStreamer::emitELFSymverDirective(StringRef AliasName,
+ const MCSymbol *Aliasee) {}
+ void MCStreamer::EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
+ unsigned ByteAlignment) {}
+Index: lib/Object/ModuleSymbolTable.cpp
+===================================================================
+--- lib/Object/ModuleSymbolTable.cpp (revision 331365)
++++ lib/Object/ModuleSymbolTable.cpp (revision 331366)
+@@ -24,7 +24,6 @@
+ #include "llvm/IR/GlobalAlias.h"
+ #include "llvm/IR/GlobalValue.h"
+ #include "llvm/IR/GlobalVariable.h"
+-#include "llvm/IR/Mangler.h"
+ #include "llvm/IR/Module.h"
+ #include "llvm/MC/MCAsmInfo.h"
+ #include "llvm/MC/MCContext.h"
+@@ -69,81 +68,6 @@ void ModuleSymbolTable::addModule(Module *M) {
+ });
+ }
+
+-// Ensure ELF .symver aliases get the same binding as the defined symbol
+-// they alias with.
+-static void handleSymverAliases(const Module &M, RecordStreamer &Streamer) {
+- if (Streamer.symverAliases().empty())
+- return;
+-
+- // The name in the assembler will be mangled, but the name in the IR
+- // might not, so we first compute a mapping from mangled name to GV.
+- Mangler Mang;
+- SmallString<64> MangledName;
+- StringMap<const GlobalValue *> MangledNameMap;
+- auto GetMangledName = [&](const GlobalValue &GV) {
+- if (!GV.hasName())
+- return;
+-
+- MangledName.clear();
+- MangledName.reserve(GV.getName().size() + 1);
+- Mang.getNameWithPrefix(MangledName, &GV, /*CannotUsePrivateLabel=*/false);
+- MangledNameMap[MangledName] = &GV;
+- };
+- for (const Function &F : M)
+- GetMangledName(F);
+- for (const GlobalVariable &GV : M.globals())
+- GetMangledName(GV);
+- for (const GlobalAlias &GA : M.aliases())
+- GetMangledName(GA);
+-
+- // Walk all the recorded .symver aliases, and set up the binding
+- // for each alias.
+- for (auto &Symver : Streamer.symverAliases()) {
+- const MCSymbol *Aliasee = Symver.first;
+- MCSymbolAttr Attr = MCSA_Invalid;
+-
+- // First check if the aliasee binding was recorded in the asm.
+- RecordStreamer::State state = Streamer.getSymbolState(Aliasee);
+- switch (state) {
+- case RecordStreamer::Global:
+- case RecordStreamer::DefinedGlobal:
+- Attr = MCSA_Global;
+- break;
+- case RecordStreamer::UndefinedWeak:
+- case RecordStreamer::DefinedWeak:
+- Attr = MCSA_Weak;
+- break;
+- default:
+- break;
+- }
+-
+- // If we don't have a symbol attribute from assembly, then check if
+- // the aliasee was defined in the IR.
+- if (Attr == MCSA_Invalid) {
+- const auto *GV = M.getNamedValue(Aliasee->getName());
+- if (!GV) {
+- auto MI = MangledNameMap.find(Aliasee->getName());
+- if (MI != MangledNameMap.end())
+- GV = MI->second;
+- else
+- continue;
+- }
+- if (GV->hasExternalLinkage())
+- Attr = MCSA_Global;
+- else if (GV->hasLocalLinkage())
+- Attr = MCSA_Local;
+- else if (GV->isWeakForLinker())
+- Attr = MCSA_Weak;
+- }
+- if (Attr == MCSA_Invalid)
+- continue;
+-
+- // Set the detected binding on each alias with this aliasee.
+- for (auto &Alias : Symver.second)
+- Streamer.EmitSymbolAttribute(Alias, Attr);
+- }
+-}
+-
+ void ModuleSymbolTable::CollectAsmSymbols(
+ const Module &M,
+ function_ref<void(StringRef, BasicSymbolRef::Flags)> AsmSymbol) {
+@@ -176,7 +100,7 @@ void ModuleSymbolTable::CollectAsmSymbols(
+ MCObjectFileInfo MOFI;
+ MCContext MCCtx(MAI.get(), MRI.get(), &MOFI);
+ MOFI.InitMCObjectFileInfo(TT, /*PIC*/ false, MCCtx);
+- RecordStreamer Streamer(MCCtx);
++ RecordStreamer Streamer(MCCtx, M);
+ T->createNullTargetStreamer(Streamer);
+
+ std::unique_ptr<MemoryBuffer> Buffer(MemoryBuffer::getMemBuffer(InlineAsm));
+@@ -195,7 +119,7 @@ void ModuleSymbolTable::CollectAsmSymbols(
+ if (Parser->Run(false))
+ return;
+
+- handleSymverAliases(M, Streamer);
++ Streamer.flushSymverDirectives();
+
+ for (auto &KV : Streamer) {
+ StringRef Key = KV.first();
+Index: lib/Object/RecordStreamer.cpp
+===================================================================
+--- lib/Object/RecordStreamer.cpp (revision 331365)
++++ lib/Object/RecordStreamer.cpp (revision 331366)
+@@ -8,6 +8,9 @@
+ //===----------------------------------------------------------------------===//
+
+ #include "RecordStreamer.h"
++#include "llvm/IR/Mangler.h"
++#include "llvm/IR/Module.h"
++#include "llvm/MC/MCContext.h"
+ #include "llvm/MC/MCSymbol.h"
+
+ using namespace llvm;
+@@ -70,7 +73,8 @@ void RecordStreamer::markUsed(const MCSymbol &Symb
+
+ void RecordStreamer::visitUsedSymbol(const MCSymbol &Sym) { markUsed(Sym); }
+
+-RecordStreamer::RecordStreamer(MCContext &Context) : MCStreamer(Context) {}
++RecordStreamer::RecordStreamer(MCContext &Context, const Module &M)
++ : MCStreamer(Context), M(M) {}
+
+ RecordStreamer::const_iterator RecordStreamer::begin() {
+ return Symbols.begin();
+@@ -112,7 +116,109 @@ void RecordStreamer::EmitCommonSymbol(MCSymbol *Sy
+ markDefined(*Symbol);
+ }
+
+-void RecordStreamer::emitELFSymverDirective(MCSymbol *Alias,
++RecordStreamer::State RecordStreamer::getSymbolState(const MCSymbol *Sym) {
++ auto SI = Symbols.find(Sym->getName());
++ if (SI == Symbols.end())
++ return NeverSeen;
++ return SI->second;
++}
++
++void RecordStreamer::emitELFSymverDirective(StringRef AliasName,
+ const MCSymbol *Aliasee) {
+- SymverAliasMap[Aliasee].push_back(Alias);
++ SymverAliasMap[Aliasee].push_back(AliasName);
+ }
++
++void RecordStreamer::flushSymverDirectives() {
++ // Mapping from mangled name to GV.
++ StringMap<const GlobalValue *> MangledNameMap;
++ // The name in the assembler will be mangled, but the name in the IR
++ // might not, so we first compute a mapping from mangled name to GV.
++ Mangler Mang;
++ SmallString<64> MangledName;
++ for (const GlobalValue &GV : M.global_values()) {
++ if (!GV.hasName())
++ continue;
++ MangledName.clear();
++ MangledName.reserve(GV.getName().size() + 1);
++ Mang.getNameWithPrefix(MangledName, &GV, /*CannotUsePrivateLabel=*/false);
++ MangledNameMap[MangledName] = &GV;
++ }
++
++ // Walk all the recorded .symver aliases, and set up the binding
++ // for each alias.
++ for (auto &Symver : SymverAliasMap) {
++ const MCSymbol *Aliasee = Symver.first;
++ MCSymbolAttr Attr = MCSA_Invalid;
++ bool IsDefined = false;
++
++ // First check if the aliasee binding was recorded in the asm.
++ RecordStreamer::State state = getSymbolState(Aliasee);
++ switch (state) {
++ case RecordStreamer::Global:
++ case RecordStreamer::DefinedGlobal:
++ Attr = MCSA_Global;
++ break;
++ case RecordStreamer::UndefinedWeak:
++ case RecordStreamer::DefinedWeak:
++ Attr = MCSA_Weak;
++ break;
++ default:
++ break;
++ }
++
++ switch (state) {
++ case RecordStreamer::Defined:
++ case RecordStreamer::DefinedGlobal:
++ case RecordStreamer::DefinedWeak:
++ IsDefined = true;
++ break;
++ case RecordStreamer::NeverSeen:
++ case RecordStreamer::Global:
++ case RecordStreamer::Used:
++ case RecordStreamer::UndefinedWeak:
++ break;
++ }
++
++ if (Attr == MCSA_Invalid || !IsDefined) {
++ const GlobalValue *GV = M.getNamedValue(Aliasee->getName());
++ if (!GV) {
++ auto MI = MangledNameMap.find(Aliasee->getName());
++ if (MI != MangledNameMap.end())
++ GV = MI->second;
++ }
++ if (GV) {
++ // If we don't have a symbol attribute from assembly, then check if
++ // the aliasee was defined in the IR.
++ if (Attr == MCSA_Invalid) {
++ if (GV->hasExternalLinkage())
++ Attr = MCSA_Global;
++ else if (GV->hasLocalLinkage())
++ Attr = MCSA_Local;
++ else if (GV->isWeakForLinker())
++ Attr = MCSA_Weak;
++ }
++ IsDefined = IsDefined || !GV->isDeclarationForLinker();
++ }
++ }
++
++ // Set the detected binding on each alias with this aliasee.
++ for (auto AliasName : Symver.second) {
++ std::pair<StringRef, StringRef> Split = AliasName.split("@@@");
++ SmallString<128> NewName;
++ if (!Split.second.empty() && !Split.second.startswith("@")) {
++ // Special processing for "@@@" according
++ // https://sourceware.org/binutils/docs/as/Symver.html
++ const char *Separator = IsDefined ? "@@" : "@";
++ AliasName =
++ (Split.first + Separator + Split.second).toStringRef(NewName);
++ }
++ MCSymbol *Alias = getContext().getOrCreateSymbol(AliasName);
++ // TODO: Handle "@@@". Depending on SymbolAttribute value it needs to be
++ // converted into @ or @@.
++ const MCExpr *Value = MCSymbolRefExpr::create(Aliasee, getContext());
++ EmitAssignment(Alias, Value);
++ if (Attr != MCSA_Invalid)
++ EmitSymbolAttribute(Alias, Attr);
++ }
++ }
++}
+Index: lib/Object/RecordStreamer.h
+===================================================================
+--- lib/Object/RecordStreamer.h (revision 331365)
++++ lib/Object/RecordStreamer.h (revision 331366)
+@@ -20,6 +20,9 @@
+
+ namespace llvm {
+
++class GlobalValue;
++class Module;
++
+ class RecordStreamer : public MCStreamer {
+ public:
+ enum State { NeverSeen, Global, Defined, DefinedGlobal, DefinedWeak, Used,
+@@ -26,12 +29,16 @@ class RecordStreamer : public MCStreamer {
+ UndefinedWeak};
+
+ private:
++ const Module &M;
+ StringMap<State> Symbols;
+ // Map of aliases created by .symver directives, saved so we can update
+ // their symbol binding after parsing complete. This maps from each
+ // aliasee to its list of aliases.
+- DenseMap<const MCSymbol *, std::vector<MCSymbol *>> SymverAliasMap;
++ DenseMap<const MCSymbol *, std::vector<StringRef>> SymverAliasMap;
+
++ /// Get the state recorded for the given symbol.
++ State getSymbolState(const MCSymbol *Sym);
++
+ void markDefined(const MCSymbol &Symbol);
+ void markGlobal(const MCSymbol &Symbol, MCSymbolAttr Attribute);
+ void markUsed(const MCSymbol &Symbol);
+@@ -38,7 +45,7 @@ class RecordStreamer : public MCStreamer {
+ void visitUsedSymbol(const MCSymbol &Sym) override;
+
+ public:
+- RecordStreamer(MCContext &Context);
++ RecordStreamer(MCContext &Context, const Module &M);
+
+ using const_iterator = StringMap<State>::const_iterator;
+
+@@ -54,20 +61,11 @@ class RecordStreamer : public MCStreamer {
+ void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
+ unsigned ByteAlignment) override;
+ /// Record .symver aliases for later processing.
+- void emitELFSymverDirective(MCSymbol *Alias,
++ void emitELFSymverDirective(StringRef AliasName,
+ const MCSymbol *Aliasee) override;
+- /// Return the map of .symver aliasee to associated aliases.
+- DenseMap<const MCSymbol *, std::vector<MCSymbol *>> &symverAliases() {
+- return SymverAliasMap;
+- }
+-
+- /// Get the state recorded for the given symbol.
+- State getSymbolState(const MCSymbol *Sym) {
+- auto SI = Symbols.find(Sym->getName());
+- if (SI == Symbols.end())
+- return NeverSeen;
+- return SI->second;
+- }
++ // Emit ELF .symver aliases and ensure they have the same binding as the
++ // defined symbol they alias with.
++ void flushSymverDirectives();
+ };
+
+ } // end namespace llvm
diff --git a/devel/llvm60/files/patch-head-r336969.diff b/devel/llvm60/files/patch-head-r336969.diff
new file mode 100644
index 000000000000..640b0d146c6c
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r336969.diff
@@ -0,0 +1,32 @@
+r336969 | emaste | 2018-07-31 16:12:09 +0200 (Tue, 31 Jul 2018) | 13 lines
+
+llvm: [ELF][ARM] Add Arm ABI names for float ABI ELF Header flags
+
+The ELF for the Arm architecture document defines, for EF_ARM_EABI_VER5
+and above, the flags EF_ARM_ABI_FLOAT_HARD and EF_ARM_ABI_FLOAT_SOFT.
+These have been defined to be compatible with the existing
+EF_ARM_VFP_FLOAT and EF_ARM_SOFT_FLOAT used by gcc for
+EF_ARM_EABI_UNKNOWN.
+
+This patch adds the flags in addition to the existing ones so that any
+code depending on the old names will still work.
+
+Obtained from: llvm r338370 by Peter Smith
+
+Index: include/llvm/BinaryFormat/ELF.h
+===================================================================
+--- include/llvm/BinaryFormat/ELF.h (revision 336968)
++++ include/llvm/BinaryFormat/ELF.h (revision 336969)
+@@ -418,8 +418,10 @@ enum {
+
+ // ARM Specific e_flags
+ enum : unsigned {
+- EF_ARM_SOFT_FLOAT = 0x00000200U,
+- EF_ARM_VFP_FLOAT = 0x00000400U,
++ EF_ARM_SOFT_FLOAT = 0x00000200U, // Legacy pre EABI_VER5
++ EF_ARM_ABI_FLOAT_SOFT = 0x00000200U, // EABI_VER5
++ EF_ARM_VFP_FLOAT = 0x00000400U, // Legacy pre EABI_VER5
++ EF_ARM_ABI_FLOAT_HARD = 0x00000400U, // EABI_VER5
+ EF_ARM_EABI_UNKNOWN = 0x00000000U,
+ EF_ARM_EABI_VER1 = 0x01000000U,
+ EF_ARM_EABI_VER2 = 0x02000000U,
diff --git a/devel/llvm60/files/patch-head-r336970.diff b/devel/llvm60/files/patch-head-r336970.diff
new file mode 100644
index 000000000000..d788914eb445
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r336970.diff
@@ -0,0 +1,24 @@
+r336970 | emaste | 2018-07-31 16:14:41 +0200 (Tue, 31 Jul 2018) | 9 lines
+
+llvm: [ARM] Complete enumeration values for Tag_ABI_VFP_args
+
+The LLD implementation of Tag_ABI_VFP_args needs to check the rarely
+seen values of 3 (toolchain specific) and 4 compatible with both Base
+and VFP. Add the missing enumeration values so that LLD can refer to
+them without having to use the raw numbers.
+
+Obtained from: llvm r338373 by Peter Smith
+
+Index: include/llvm/Support/ARMBuildAttributes.h
+===================================================================
+--- include/llvm/Support/ARMBuildAttributes.h (revision 336969)
++++ include/llvm/Support/ARMBuildAttributes.h (revision 336970)
+@@ -213,6 +213,8 @@ enum {
+ // Tag_ABI_VFP_args, (=28), uleb128
+ BaseAAPCS = 0,
+ HardFPAAPCS = 1,
++ ToolChainFPPCS = 2,
++ CompatibleFPAAPCS = 3,
+
+ // Tag_FP_HP_extension, (=36), uleb128
+ AllowHPFP = 1, // Allow use of Half Precision FP
diff --git a/devel/llvm60/files/patch-head-r337615.diff b/devel/llvm60/files/patch-head-r337615.diff
new file mode 100644
index 000000000000..645240b71cf3
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r337615.diff
@@ -0,0 +1,64 @@
+r337615 | dim | 2018-08-11 12:42:12 +0200 (Sat, 11 Aug 2018) | 43 lines
+
+Pull in r338481 from upstream llvm trunk (by Chandler Carruth):
+
+ [x86] Fix a really subtle miscompile due to a somewhat glaring bug in
+ EFLAGS copy lowering.
+
+ If you have a branch of LLVM, you may want to cherrypick this. It is
+ extremely unlikely to hit this case empirically, but it will likely
+ manifest as an "impossible" branch being taken somewhere, and will be
+ ... very hard to debug.
+
+ Hitting this requires complex conditions living across complex
+ control flow combined with some interesting memory (non-stack)
+ initialized with the results of a comparison. Also, because you have
+ to arrange for an EFLAGS copy to be in *just* the right place, almost
+ anything you do to the code will hide the bug. I was unable to reduce
+ anything remotely resembling a "good" test case from the place where
+ I hit it, and so instead I have constructed synthetic MIR testing
+ that directly exercises the bug in question (as well as the good
+ behavior for completeness).
+
+ The issue is that we would mistakenly assume any SETcc with a valid
+ condition and an initial operand that was a register and a virtual
+ register at that to be a register *defining* SETcc...
+
+ It isn't though....
+
+ This would in turn cause us to test some other bizarre register,
+ typically the base pointer of some memory. Now, testing this register
+ and using that to branch on doesn't make any sense. It even fails the
+ machine verifier (if you are running it) due to the wrong register
+ class. But it will make it through LLVM, assemble, and it *looks*
+ fine... But wow do you get a very unsual and surprising branch taken
+ in your actual code.
+
+ The fix is to actually check what kind of SETcc instruction we're
+ dealing with. Because there are a bunch of them, I just test the
+ may-store bit in the instruction. I've also added an assert for
+ sanity that ensure we are, in fact, *defining* the register operand.
+ =D
+
+Noticed by: kib
+MFC after: 1 week
+
+Index: lib/Target/X86/X86FlagsCopyLowering.cpp
+===================================================================
+--- lib/Target/X86/X86FlagsCopyLowering.cpp (revision 337614)
++++ lib/Target/X86/X86FlagsCopyLowering.cpp (revision 337615)
+@@ -608,9 +608,12 @@ X86FlagsCopyLoweringPass::collectCondsInRegs(Machi
+ for (MachineInstr &MI : llvm::reverse(
+ llvm::make_range(MBB.instr_begin(), CopyDefI.getIterator()))) {
+ X86::CondCode Cond = X86::getCondFromSETOpc(MI.getOpcode());
+- if (Cond != X86::COND_INVALID && MI.getOperand(0).isReg() &&
+- TRI->isVirtualRegister(MI.getOperand(0).getReg()))
++ if (Cond != X86::COND_INVALID && !MI.mayStore() && MI.getOperand(0).isReg() &&
++ TRI->isVirtualRegister(MI.getOperand(0).getReg())) {
++ assert(MI.getOperand(0).isDef() &&
++ "A non-storing SETcc should always define a register!");
+ CondRegs[Cond] = MI.getOperand(0).getReg();
++ }
+
+ // Stop scanning when we see the first definition of the EFLAGS as prior to
+ // this we would potentially capture the wrong flag state.
diff --git a/devel/llvm60/files/patch-head-r338689.diff b/devel/llvm60/files/patch-head-r338689.diff
new file mode 100644
index 000000000000..c0a785e779ee
--- /dev/null
+++ b/devel/llvm60/files/patch-head-r338689.diff
@@ -0,0 +1,32 @@
+r338689 | dim | 2018-09-14 21:25:23 +0200 (Fri, 14 Sep 2018) | 12 lines
+
+Pull in r335365 from upstream llvm trunk (by Krzysztof Parzyszek):
+
+ Initialize LiveRegs once in BranchFolder::mergeCommonTails
+
+This should fix '(TRI && "LivePhysRegs is not initialized."' assertions
+when building the lang/qt5-qml port in certain configurations.
+
+Approved by: re (kib)
+Reported by: Piotr Kubaj <pkubaj@anongoth.pl>
+PR: 231355
+MFC after: 3 days
+
+Index: lib/CodeGen/BranchFolding.cpp
+===================================================================
+--- lib/CodeGen/BranchFolding.cpp (revision 338688)
++++ lib/CodeGen/BranchFolding.cpp (revision 338689)
+@@ -884,11 +884,12 @@ void BranchFolder::mergeCommonTails(unsigned commo
+ if (UpdateLiveIns) {
+ LivePhysRegs NewLiveIns(*TRI);
+ computeLiveIns(NewLiveIns, *MBB);
++ LiveRegs.init(*TRI);
+
+ // The flag merging may lead to some register uses no longer using the
+ // <undef> flag, add IMPLICIT_DEFs in the predecessors as necessary.
+ for (MachineBasicBlock *Pred : MBB->predecessors()) {
+- LiveRegs.init(*TRI);
++ LiveRegs.clear();
+ LiveRegs.addLiveOuts(*Pred);
+ MachineBasicBlock::iterator InsertBefore = Pred->getFirstTerminator();
+ for (unsigned Reg : NewLiveIns) {
diff --git a/devel/llvm60/files/patch-svn-r322325 b/devel/llvm60/files/patch-svn-r322325
new file mode 100644
index 000000000000..3b0501e37022
--- /dev/null
+++ b/devel/llvm60/files/patch-svn-r322325
@@ -0,0 +1,1589 @@
+r322325:
+
+PeepholeOpt cleanup/refactor; NFC
+
+- Less unnecessary use of `auto`
+- Add early `using RegSubRegPair(AndIdx) =` to avoid countless
+ `TargetInstrInfo::` qualifications.
+- Use references instead of pointers where possible.
+- Remove unused parameters.
+- Rewrite the CopyRewriter class hierarchy:
+ - Pull out uncoalescable copy rewriting functionality into
+ PeepholeOptimizer class.
+ - Use an abstract base class to make it clear that rewriters are
+ independent.
+- Remove unnecessary \brief in doxygen comments.
+- Remove unused constructor and method from ValueTracker.
+- Replace UseAdvancedTracking of ValueTracker with DisableAdvCopyOpt use.
+
+--- lib/CodeGen/PeepholeOptimizer.cpp.orig
++++ lib/CodeGen/PeepholeOptimizer.cpp
+@@ -98,6 +98,8 @@
+ #include <utility>
+
+ using namespace llvm;
++using RegSubRegPair = TargetInstrInfo::RegSubRegPair;
++using RegSubRegPairAndIdx = TargetInstrInfo::RegSubRegPairAndIdx;
+
+ #define DEBUG_TYPE "peephole-opt"
+
+@@ -110,6 +112,9 @@
+ DisablePeephole("disable-peephole", cl::Hidden, cl::init(false),
+ cl::desc("Disable the peephole optimizer"));
+
++/// Specifiy whether or not the value tracking looks through
++/// complex instructions. When this is true, the value tracker
++/// bails on everything that is not a copy or a bitcast.
+ static cl::opt<bool>
+ DisableAdvCopyOpt("disable-adv-copy-opt", cl::Hidden, cl::init(false),
+ cl::desc("Disable advanced copy optimization"));
+@@ -132,11 +137,11 @@
+ "of commuting operands"));
+
+
+-STATISTIC(NumReuse, "Number of extension results reused");
+-STATISTIC(NumCmps, "Number of compares eliminated");
+-STATISTIC(NumImmFold, "Number of move immediate folded");
+-STATISTIC(NumLoadFold, "Number of loads folded");
+-STATISTIC(NumSelects, "Number of selects optimized");
++STATISTIC(NumReuse, "Number of extension results reused");
++STATISTIC(NumCmps, "Number of compares eliminated");
++STATISTIC(NumImmFold, "Number of move immediate folded");
++STATISTIC(NumLoadFold, "Number of loads folded");
++STATISTIC(NumSelects, "Number of selects optimized");
+ STATISTIC(NumUncoalescableCopies, "Number of uncoalescable copies optimized");
+ STATISTIC(NumRewrittenCopies, "Number of copies rewritten");
+ STATISTIC(NumNAPhysCopies, "Number of non-allocatable physical copies removed");
+@@ -149,9 +154,9 @@
+ class PeepholeOptimizer : public MachineFunctionPass {
+ const TargetInstrInfo *TII;
+ const TargetRegisterInfo *TRI;
+- MachineRegisterInfo *MRI;
+- MachineDominatorTree *DT; // Machine dominator tree
+- MachineLoopInfo *MLI;
++ MachineRegisterInfo *MRI;
++ MachineDominatorTree *DT; // Machine dominator tree
++ MachineLoopInfo *MLI;
+
+ public:
+ static char ID; // Pass identification
+@@ -173,31 +178,28 @@
+ }
+ }
+
+- /// \brief Track Def -> Use info used for rewriting copies.
+- using RewriteMapTy =
+- SmallDenseMap<TargetInstrInfo::RegSubRegPair, ValueTrackerResult>;
++ /// Track Def -> Use info used for rewriting copies.
++ using RewriteMapTy = SmallDenseMap<RegSubRegPair, ValueTrackerResult>;
+
+- /// \brief Sequence of instructions that formulate recurrence cycle.
++ /// Sequence of instructions that formulate recurrence cycle.
+ using RecurrenceCycle = SmallVector<RecurrenceInstr, 4>;
+
+ private:
+- bool optimizeCmpInstr(MachineInstr *MI, MachineBasicBlock *MBB);
+- bool optimizeExtInstr(MachineInstr *MI, MachineBasicBlock *MBB,
++ bool optimizeCmpInstr(MachineInstr &MI);
++ bool optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB,
+ SmallPtrSetImpl<MachineInstr*> &LocalMIs);
+- bool optimizeSelect(MachineInstr *MI,
++ bool optimizeSelect(MachineInstr &MI,
+ SmallPtrSetImpl<MachineInstr *> &LocalMIs);
+- bool optimizeCondBranch(MachineInstr *MI);
+- bool optimizeCoalescableCopy(MachineInstr *MI);
+- bool optimizeUncoalescableCopy(MachineInstr *MI,
++ bool optimizeCondBranch(MachineInstr &MI);
++ bool optimizeCoalescableCopy(MachineInstr &MI);
++ bool optimizeUncoalescableCopy(MachineInstr &MI,
+ SmallPtrSetImpl<MachineInstr *> &LocalMIs);
+ bool optimizeRecurrence(MachineInstr &PHI);
+- bool findNextSource(unsigned Reg, unsigned SubReg,
+- RewriteMapTy &RewriteMap);
+- bool isMoveImmediate(MachineInstr *MI,
++ bool findNextSource(RegSubRegPair RegSubReg, RewriteMapTy &RewriteMap);
++ bool isMoveImmediate(MachineInstr &MI,
+ SmallSet<unsigned, 4> &ImmDefRegs,
+ DenseMap<unsigned, MachineInstr*> &ImmDefMIs);
+- bool foldImmediate(MachineInstr *MI, MachineBasicBlock *MBB,
+- SmallSet<unsigned, 4> &ImmDefRegs,
++ bool foldImmediate(MachineInstr &MI, SmallSet<unsigned, 4> &ImmDefRegs,
+ DenseMap<unsigned, MachineInstr*> &ImmDefMIs);
+
+ /// \brief Finds recurrence cycles, but only ones that formulated around
+@@ -212,11 +214,11 @@
+ /// the set \p CopySrcRegs and \p CopyMIs. If this virtual register was
+ /// previously seen as a copy, replace the uses of this copy with the
+ /// previously seen copy's destination register.
+- bool foldRedundantCopy(MachineInstr *MI,
++ bool foldRedundantCopy(MachineInstr &MI,
+ SmallSet<unsigned, 4> &CopySrcRegs,
+ DenseMap<unsigned, MachineInstr *> &CopyMIs);
+
+- /// \brief Is the register \p Reg a non-allocatable physical register?
++ /// Is the register \p Reg a non-allocatable physical register?
+ bool isNAPhysCopy(unsigned Reg);
+
+ /// \brief If copy instruction \p MI is a non-allocatable virtual<->physical
+@@ -224,11 +226,10 @@
+ /// non-allocatable physical register was previously copied to a virtual
+ /// registered and hasn't been clobbered, the virt->phys copy can be
+ /// deleted.
+- bool foldRedundantNAPhysCopy(
+- MachineInstr *MI,
++ bool foldRedundantNAPhysCopy(MachineInstr &MI,
+ DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs);
+
+- bool isLoadFoldable(MachineInstr *MI,
++ bool isLoadFoldable(MachineInstr &MI,
+ SmallSet<unsigned, 16> &FoldAsLoadDefCandidates);
+
+ /// \brief Check whether \p MI is understood by the register coalescer
+@@ -249,10 +250,13 @@
+ (MI.isRegSequenceLike() || MI.isInsertSubregLike() ||
+ MI.isExtractSubregLike()));
+ }
++
++ MachineInstr &rewriteSource(MachineInstr &CopyLike,
++ RegSubRegPair Def, RewriteMapTy &RewriteMap);
+ };
+
+- /// \brief Helper class to hold instructions that are inside recurrence
+- /// cycles. The recurrence cycle is formulated around 1) a def operand and its
++ /// Helper class to hold instructions that are inside recurrence cycles.
++ /// The recurrence cycle is formulated around 1) a def operand and its
+ /// tied use operand, or 2) a def operand and a use operand that is commutable
+ /// with another use operand which is tied to the def operand. In the latter
+ /// case, index of the tied use operand and the commutable use operand are
+@@ -273,13 +277,13 @@
+ Optional<IndexPair> CommutePair;
+ };
+
+- /// \brief Helper class to hold a reply for ValueTracker queries. Contains the
+- /// returned sources for a given search and the instructions where the sources
+- /// were tracked from.
++ /// Helper class to hold a reply for ValueTracker queries.
++ /// Contains the returned sources for a given search and the instructions
++ /// where the sources were tracked from.
+ class ValueTrackerResult {
+ private:
+ /// Track all sources found by one ValueTracker query.
+- SmallVector<TargetInstrInfo::RegSubRegPair, 2> RegSrcs;
++ SmallVector<RegSubRegPair, 2> RegSrcs;
+
+ /// Instruction using the sources in 'RegSrcs'.
+ const MachineInstr *Inst = nullptr;
+@@ -302,16 +306,20 @@
+ }
+
+ void addSource(unsigned SrcReg, unsigned SrcSubReg) {
+- RegSrcs.push_back(TargetInstrInfo::RegSubRegPair(SrcReg, SrcSubReg));
++ RegSrcs.push_back(RegSubRegPair(SrcReg, SrcSubReg));
+ }
+
+ void setSource(int Idx, unsigned SrcReg, unsigned SrcSubReg) {
+ assert(Idx < getNumSources() && "Reg pair source out of index");
+- RegSrcs[Idx] = TargetInstrInfo::RegSubRegPair(SrcReg, SrcSubReg);
++ RegSrcs[Idx] = RegSubRegPair(SrcReg, SrcSubReg);
+ }
+
+ int getNumSources() const { return RegSrcs.size(); }
+
++ RegSubRegPair getSrc(int Idx) const {
++ return RegSrcs[Idx];
++ }
++
+ unsigned getSrcReg(int Idx) const {
+ assert(Idx < getNumSources() && "Reg source out of index");
+ return RegSrcs[Idx].Reg;
+@@ -367,59 +375,41 @@
+ /// The register where the value can be found.
+ unsigned Reg;
+
+- /// Specifiy whether or not the value tracking looks through
+- /// complex instructions. When this is false, the value tracker
+- /// bails on everything that is not a copy or a bitcast.
+- ///
+- /// Note: This could have been implemented as a specialized version of
+- /// the ValueTracker class but that would have complicated the code of
+- /// the users of this class.
+- bool UseAdvancedTracking;
+-
+ /// MachineRegisterInfo used to perform tracking.
+ const MachineRegisterInfo &MRI;
+
+- /// Optional TargetInstrInfo used to perform some complex
+- /// tracking.
++ /// Optional TargetInstrInfo used to perform some complex tracking.
+ const TargetInstrInfo *TII;
+
+- /// \brief Dispatcher to the right underlying implementation of
+- /// getNextSource.
++ /// Dispatcher to the right underlying implementation of getNextSource.
+ ValueTrackerResult getNextSourceImpl();
+
+- /// \brief Specialized version of getNextSource for Copy instructions.
++ /// Specialized version of getNextSource for Copy instructions.
+ ValueTrackerResult getNextSourceFromCopy();
+
+- /// \brief Specialized version of getNextSource for Bitcast instructions.
++ /// Specialized version of getNextSource for Bitcast instructions.
+ ValueTrackerResult getNextSourceFromBitcast();
+
+- /// \brief Specialized version of getNextSource for RegSequence
+- /// instructions.
++ /// Specialized version of getNextSource for RegSequence instructions.
+ ValueTrackerResult getNextSourceFromRegSequence();
+
+- /// \brief Specialized version of getNextSource for InsertSubreg
+- /// instructions.
++ /// Specialized version of getNextSource for InsertSubreg instructions.
+ ValueTrackerResult getNextSourceFromInsertSubreg();
+
+- /// \brief Specialized version of getNextSource for ExtractSubreg
+- /// instructions.
++ /// Specialized version of getNextSource for ExtractSubreg instructions.
+ ValueTrackerResult getNextSourceFromExtractSubreg();
+
+- /// \brief Specialized version of getNextSource for SubregToReg
+- /// instructions.
++ /// Specialized version of getNextSource for SubregToReg instructions.
+ ValueTrackerResult getNextSourceFromSubregToReg();
+
+- /// \brief Specialized version of getNextSource for PHI instructions.
++ /// Specialized version of getNextSource for PHI instructions.
+ ValueTrackerResult getNextSourceFromPHI();
+
+ public:
+- /// \brief Create a ValueTracker instance for the value defined by \p Reg.
++ /// Create a ValueTracker instance for the value defined by \p Reg.
+ /// \p DefSubReg represents the sub register index the value tracker will
+ /// track. It does not need to match the sub register index used in the
+ /// definition of \p Reg.
+- /// \p UseAdvancedTracking specifies whether or not the value tracker looks
+- /// through complex instructions. By default (false), it handles only copy
+- /// and bitcast instructions.
+ /// If \p Reg is a physical register, a value tracker constructed with
+ /// this constructor will not find any alternative source.
+ /// Indeed, when \p Reg is a physical register that constructor does not
+@@ -427,46 +417,20 @@
+ /// Use the next constructor to track a physical register.
+ ValueTracker(unsigned Reg, unsigned DefSubReg,
+ const MachineRegisterInfo &MRI,
+- bool UseAdvancedTracking = false,
+ const TargetInstrInfo *TII = nullptr)
+- : DefSubReg(DefSubReg), Reg(Reg),
+- UseAdvancedTracking(UseAdvancedTracking), MRI(MRI), TII(TII) {
++ : DefSubReg(DefSubReg), Reg(Reg), MRI(MRI), TII(TII) {
+ if (!TargetRegisterInfo::isPhysicalRegister(Reg)) {
+ Def = MRI.getVRegDef(Reg);
+ DefIdx = MRI.def_begin(Reg).getOperandNo();
+ }
+ }
+
+- /// \brief Create a ValueTracker instance for the value defined by
+- /// the pair \p MI, \p DefIdx.
+- /// Unlike the other constructor, the value tracker produced by this one
+- /// may be able to find a new source when the definition is a physical
+- /// register.
+- /// This could be useful to rewrite target specific instructions into
+- /// generic copy instructions.
+- ValueTracker(const MachineInstr &MI, unsigned DefIdx, unsigned DefSubReg,
+- const MachineRegisterInfo &MRI,
+- bool UseAdvancedTracking = false,
+- const TargetInstrInfo *TII = nullptr)
+- : Def(&MI), DefIdx(DefIdx), DefSubReg(DefSubReg),
+- UseAdvancedTracking(UseAdvancedTracking), MRI(MRI), TII(TII) {
+- assert(DefIdx < Def->getDesc().getNumDefs() &&
+- Def->getOperand(DefIdx).isReg() && "Invalid definition");
+- Reg = Def->getOperand(DefIdx).getReg();
+- }
+-
+ /// \brief Following the use-def chain, get the next available source
+ /// for the tracked value.
+ /// \return A ValueTrackerResult containing a set of registers
+ /// and sub registers with tracked values. A ValueTrackerResult with
+ /// an empty set of registers means no source was found.
+ ValueTrackerResult getNextSource();
+-
+- /// \brief Get the last register where the initial value can be found.
+- /// Initially this is the register of the definition.
+- /// Then, after each successful call to getNextSource, this is the
+- /// register of the last source.
+- unsigned getReg() const { return Reg; }
+ };
+
+ } // end anonymous namespace
+@@ -476,11 +440,11 @@
+ char &llvm::PeepholeOptimizerID = PeepholeOptimizer::ID;
+
+ INITIALIZE_PASS_BEGIN(PeepholeOptimizer, DEBUG_TYPE,
+- "Peephole Optimizations", false, false)
++ "Peephole Optimizations", false, false)
+ INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
+ INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
+ INITIALIZE_PASS_END(PeepholeOptimizer, DEBUG_TYPE,
+- "Peephole Optimizations", false, false)
++ "Peephole Optimizations", false, false)
+
+ /// If instruction is a copy-like instruction, i.e. it reads a single register
+ /// and writes a single register and it does not modify the source, and if the
+@@ -491,10 +455,10 @@
+ /// the code. Since this code does not currently share EXTRACTs, just ignore all
+ /// debug uses.
+ bool PeepholeOptimizer::
+-optimizeExtInstr(MachineInstr *MI, MachineBasicBlock *MBB,
++optimizeExtInstr(MachineInstr &MI, MachineBasicBlock &MBB,
+ SmallPtrSetImpl<MachineInstr*> &LocalMIs) {
+ unsigned SrcReg, DstReg, SubIdx;
+- if (!TII->isCoalescableExtInstr(*MI, SrcReg, DstReg, SubIdx))
++ if (!TII->isCoalescableExtInstr(MI, SrcReg, DstReg, SubIdx))
+ return false;
+
+ if (TargetRegisterInfo::isPhysicalRegister(DstReg) ||
+@@ -535,7 +499,7 @@
+ bool ExtendLife = true;
+ for (MachineOperand &UseMO : MRI->use_nodbg_operands(SrcReg)) {
+ MachineInstr *UseMI = UseMO.getParent();
+- if (UseMI == MI)
++ if (UseMI == &MI)
+ continue;
+
+ if (UseMI->isPHI()) {
+@@ -568,7 +532,7 @@
+ continue;
+
+ MachineBasicBlock *UseMBB = UseMI->getParent();
+- if (UseMBB == MBB) {
++ if (UseMBB == &MBB) {
+ // Local uses that come after the extension.
+ if (!LocalMIs.count(UseMI))
+ Uses.push_back(&UseMO);
+@@ -576,7 +540,7 @@
+ // Non-local uses where the result of the extension is used. Always
+ // replace these unless it's a PHI.
+ Uses.push_back(&UseMO);
+- } else if (Aggressive && DT->dominates(MBB, UseMBB)) {
++ } else if (Aggressive && DT->dominates(&MBB, UseMBB)) {
+ // We may want to extend the live range of the extension result in order
+ // to replace these uses.
+ ExtendedUses.push_back(&UseMO);
+@@ -640,19 +604,18 @@
+ /// against already sets (or could be modified to set) the same flag as the
+ /// compare, then we can remove the comparison and use the flag from the
+ /// previous instruction.
+-bool PeepholeOptimizer::optimizeCmpInstr(MachineInstr *MI,
+- MachineBasicBlock *MBB) {
++bool PeepholeOptimizer::optimizeCmpInstr(MachineInstr &MI) {
+ // If this instruction is a comparison against zero and isn't comparing a
+ // physical register, we can try to optimize it.
+ unsigned SrcReg, SrcReg2;
+ int CmpMask, CmpValue;
+- if (!TII->analyzeCompare(*MI, SrcReg, SrcReg2, CmpMask, CmpValue) ||
++ if (!TII->analyzeCompare(MI, SrcReg, SrcReg2, CmpMask, CmpValue) ||
+ TargetRegisterInfo::isPhysicalRegister(SrcReg) ||
+ (SrcReg2 != 0 && TargetRegisterInfo::isPhysicalRegister(SrcReg2)))
+ return false;
+
+ // Attempt to optimize the comparison instruction.
+- if (TII->optimizeCompareInstr(*MI, SrcReg, SrcReg2, CmpMask, CmpValue, MRI)) {
++ if (TII->optimizeCompareInstr(MI, SrcReg, SrcReg2, CmpMask, CmpValue, MRI)) {
+ ++NumCmps;
+ return true;
+ }
+@@ -661,27 +624,26 @@
+ }
+
+ /// Optimize a select instruction.
+-bool PeepholeOptimizer::optimizeSelect(MachineInstr *MI,
++bool PeepholeOptimizer::optimizeSelect(MachineInstr &MI,
+ SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
+ unsigned TrueOp = 0;
+ unsigned FalseOp = 0;
+ bool Optimizable = false;
+ SmallVector<MachineOperand, 4> Cond;
+- if (TII->analyzeSelect(*MI, Cond, TrueOp, FalseOp, Optimizable))
++ if (TII->analyzeSelect(MI, Cond, TrueOp, FalseOp, Optimizable))
+ return false;
+ if (!Optimizable)
+ return false;
+- if (!TII->optimizeSelect(*MI, LocalMIs))
++ if (!TII->optimizeSelect(MI, LocalMIs))
+ return false;
+- MI->eraseFromParent();
++ MI.eraseFromParent();
+ ++NumSelects;
+ return true;
+ }
+
+-/// \brief Check if a simpler conditional branch can be
+-/// generated
+-bool PeepholeOptimizer::optimizeCondBranch(MachineInstr *MI) {
+- return TII->optimizeCondBranch(*MI);
++/// Check if a simpler conditional branch can be generated.
++bool PeepholeOptimizer::optimizeCondBranch(MachineInstr &MI) {
++ return TII->optimizeCondBranch(MI);
+ }
+
+ /// \brief Try to find the next source that share the same register file
+@@ -695,30 +657,29 @@
+ /// share the same register file as \p Reg and \p SubReg. The client should
+ /// then be capable to rewrite all intermediate PHIs to get the next source.
+ /// \return False if no alternative sources are available. True otherwise.
+-bool PeepholeOptimizer::findNextSource(unsigned Reg, unsigned SubReg,
++bool PeepholeOptimizer::findNextSource(RegSubRegPair RegSubReg,
+ RewriteMapTy &RewriteMap) {
+ // Do not try to find a new source for a physical register.
+ // So far we do not have any motivating example for doing that.
+ // Thus, instead of maintaining untested code, we will revisit that if
+ // that changes at some point.
++ unsigned Reg = RegSubReg.Reg;
+ if (TargetRegisterInfo::isPhysicalRegister(Reg))
+ return false;
+ const TargetRegisterClass *DefRC = MRI->getRegClass(Reg);
+
+- SmallVector<TargetInstrInfo::RegSubRegPair, 4> SrcToLook;
+- TargetInstrInfo::RegSubRegPair CurSrcPair(Reg, SubReg);
++ SmallVector<RegSubRegPair, 4> SrcToLook;
++ RegSubRegPair CurSrcPair = RegSubReg;
+ SrcToLook.push_back(CurSrcPair);
+
+ unsigned PHICount = 0;
+- while (!SrcToLook.empty() && PHICount < RewritePHILimit) {
+- TargetInstrInfo::RegSubRegPair Pair = SrcToLook.pop_back_val();
++ do {
++ CurSrcPair = SrcToLook.pop_back_val();
+ // As explained above, do not handle physical registers
+- if (TargetRegisterInfo::isPhysicalRegister(Pair.Reg))
++ if (TargetRegisterInfo::isPhysicalRegister(CurSrcPair.Reg))
+ return false;
+
+- CurSrcPair = Pair;
+- ValueTracker ValTracker(CurSrcPair.Reg, CurSrcPair.SubReg, *MRI,
+- !DisableAdvCopyOpt, TII);
++ ValueTracker ValTracker(CurSrcPair.Reg, CurSrcPair.SubReg, *MRI, TII);
+
+ // Follow the chain of copies until we find a more suitable source, a phi
+ // or have to abort.
+@@ -747,14 +708,17 @@
+ unsigned NumSrcs = Res.getNumSources();
+ if (NumSrcs > 1) {
+ PHICount++;
++ if (PHICount >= RewritePHILimit) {
++ DEBUG(dbgs() << "findNextSource: PHI limit reached\n");
++ return false;
++ }
++
+ for (unsigned i = 0; i < NumSrcs; ++i)
+- SrcToLook.push_back(TargetInstrInfo::RegSubRegPair(
+- Res.getSrcReg(i), Res.getSrcSubReg(i)));
++ SrcToLook.push_back(Res.getSrc(i));
+ break;
+ }
+
+- CurSrcPair.Reg = Res.getSrcReg(0);
+- CurSrcPair.SubReg = Res.getSrcSubReg(0);
++ CurSrcPair = Res.getSrc(0);
+ // Do not extend the live-ranges of physical registers as they add
+ // constraints to the register allocator. Moreover, if we want to extend
+ // the live-range of a physical register, unlike SSA virtual register,
+@@ -764,7 +728,8 @@
+
+ // Keep following the chain if the value isn't any better yet.
+ const TargetRegisterClass *SrcRC = MRI->getRegClass(CurSrcPair.Reg);
+- if (!TRI->shouldRewriteCopySrc(DefRC, SubReg, SrcRC, CurSrcPair.SubReg))
++ if (!TRI->shouldRewriteCopySrc(DefRC, RegSubReg.SubReg, SrcRC,
++ CurSrcPair.SubReg))
+ continue;
+
+ // We currently cannot deal with subreg operands on PHI instructions
+@@ -775,7 +740,7 @@
+ // We found a suitable source, and are done with this chain.
+ break;
+ }
+- }
++ } while (!SrcToLook.empty());
+
+ // If we did not find a more suitable source, there is nothing to optimize.
+ return CurSrcPair.Reg != Reg;
+@@ -786,54 +751,50 @@
+ /// successfully traverse a PHI instruction and find suitable sources coming
+ /// from its edges. By inserting a new PHI, we provide a rewritten PHI def
+ /// suitable to be used in a new COPY instruction.
+-static MachineInstr *
+-insertPHI(MachineRegisterInfo *MRI, const TargetInstrInfo *TII,
+- const SmallVectorImpl<TargetInstrInfo::RegSubRegPair> &SrcRegs,
+- MachineInstr *OrigPHI) {
++static MachineInstr &
++insertPHI(MachineRegisterInfo &MRI, const TargetInstrInfo &TII,
++ const SmallVectorImpl<RegSubRegPair> &SrcRegs,
++ MachineInstr &OrigPHI) {
+ assert(!SrcRegs.empty() && "No sources to create a PHI instruction?");
+
+- const TargetRegisterClass *NewRC = MRI->getRegClass(SrcRegs[0].Reg);
++ const TargetRegisterClass *NewRC = MRI.getRegClass(SrcRegs[0].Reg);
+ // NewRC is only correct if no subregisters are involved. findNextSource()
+ // should have rejected those cases already.
+ assert(SrcRegs[0].SubReg == 0 && "should not have subreg operand");
+- unsigned NewVR = MRI->createVirtualRegister(NewRC);
+- MachineBasicBlock *MBB = OrigPHI->getParent();
+- MachineInstrBuilder MIB = BuildMI(*MBB, OrigPHI, OrigPHI->getDebugLoc(),
+- TII->get(TargetOpcode::PHI), NewVR);
++ unsigned NewVR = MRI.createVirtualRegister(NewRC);
++ MachineBasicBlock *MBB = OrigPHI.getParent();
++ MachineInstrBuilder MIB = BuildMI(*MBB, &OrigPHI, OrigPHI.getDebugLoc(),
++ TII.get(TargetOpcode::PHI), NewVR);
+
+ unsigned MBBOpIdx = 2;
+- for (auto RegPair : SrcRegs) {
++ for (const RegSubRegPair &RegPair : SrcRegs) {
+ MIB.addReg(RegPair.Reg, 0, RegPair.SubReg);
+- MIB.addMBB(OrigPHI->getOperand(MBBOpIdx).getMBB());
++ MIB.addMBB(OrigPHI.getOperand(MBBOpIdx).getMBB());
+ // Since we're extended the lifetime of RegPair.Reg, clear the
+ // kill flags to account for that and make RegPair.Reg reaches
+ // the new PHI.
+- MRI->clearKillFlags(RegPair.Reg);
++ MRI.clearKillFlags(RegPair.Reg);
+ MBBOpIdx += 2;
+ }
+
+- return MIB;
++ return *MIB;
+ }
+
+ namespace {
+
+-/// \brief Helper class to rewrite the arguments of a copy-like instruction.
+-class CopyRewriter {
++/// Interface to query instructions amenable to copy rewriting.
++class Rewriter {
+ protected:
+- /// The copy-like instruction.
+ MachineInstr &CopyLike;
+-
+- /// The index of the source being rewritten.
+- unsigned CurrentSrcIdx = 0;
+-
++ unsigned CurrentSrcIdx = 0; ///< The index of the source being rewritten.
+ public:
+- CopyRewriter(MachineInstr &MI) : CopyLike(MI) {}
+- virtual ~CopyRewriter() = default;
++ Rewriter(MachineInstr &CopyLike) : CopyLike(CopyLike) {}
++ virtual ~Rewriter() {}
+
+ /// \brief Get the next rewritable source (SrcReg, SrcSubReg) and
+- /// the related value that it affects (TrackReg, TrackSubReg).
++ /// the related value that it affects (DstReg, DstSubReg).
+ /// A source is considered rewritable if its register class and the
+- /// register class of the related TrackReg may not be register
++ /// register class of the related DstReg may not be register
+ /// coalescer friendly. In other words, given a copy-like instruction
+ /// not all the arguments may be returned at rewritable source, since
+ /// some arguments are none to be register coalescer friendly.
+@@ -848,137 +809,72 @@
+ /// the only source this instruction has:
+ /// (SrcReg, SrcSubReg) = (src, srcSubIdx).
+ /// This source defines the whole definition, i.e.,
+- /// (TrackReg, TrackSubReg) = (dst, dstSubIdx).
++ /// (DstReg, DstSubReg) = (dst, dstSubIdx).
+ ///
+ /// The second and subsequent calls will return false, as there is only one
+ /// rewritable source.
+ ///
+ /// \return True if a rewritable source has been found, false otherwise.
+ /// The output arguments are valid if and only if true is returned.
+- virtual bool getNextRewritableSource(unsigned &SrcReg, unsigned &SrcSubReg,
+- unsigned &TrackReg,
+- unsigned &TrackSubReg) {
+- // If CurrentSrcIdx == 1, this means this function has already been called
+- // once. CopyLike has one definition and one argument, thus, there is
+- // nothing else to rewrite.
+- if (!CopyLike.isCopy() || CurrentSrcIdx == 1)
++ virtual bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) = 0;
++
++ /// Rewrite the current source with \p NewReg and \p NewSubReg if possible.
++ /// \return True if the rewriting was possible, false otherwise.
++ virtual bool RewriteCurrentSource(unsigned NewReg, unsigned NewSubReg) = 0;
++};
++
++/// Rewriter for COPY instructions.
++class CopyRewriter : public Rewriter {
++public:
++ CopyRewriter(MachineInstr &MI) : Rewriter(MI) {
++ assert(MI.isCopy() && "Expected copy instruction");
++ }
++ virtual ~CopyRewriter() = default;
++
++ bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) override {
++ // CurrentSrcIdx > 0 means this function has already been called.
++ if (CurrentSrcIdx > 0)
+ return false;
+ // This is the first call to getNextRewritableSource.
+ // Move the CurrentSrcIdx to remember that we made that call.
+ CurrentSrcIdx = 1;
+ // The rewritable source is the argument.
+ const MachineOperand &MOSrc = CopyLike.getOperand(1);
+- SrcReg = MOSrc.getReg();
+- SrcSubReg = MOSrc.getSubReg();
++ Src = RegSubRegPair(MOSrc.getReg(), MOSrc.getSubReg());
+ // What we track are the alternative sources of the definition.
+ const MachineOperand &MODef = CopyLike.getOperand(0);
+- TrackReg = MODef.getReg();
+- TrackSubReg = MODef.getSubReg();
++ Dst = RegSubRegPair(MODef.getReg(), MODef.getSubReg());
+ return true;
+ }
+
+- /// \brief Rewrite the current source with \p NewReg and \p NewSubReg
+- /// if possible.
+- /// \return True if the rewriting was possible, false otherwise.
+- virtual bool RewriteCurrentSource(unsigned NewReg, unsigned NewSubReg) {
+- if (!CopyLike.isCopy() || CurrentSrcIdx != 1)
++ bool RewriteCurrentSource(unsigned NewReg, unsigned NewSubReg) override {
++ if (CurrentSrcIdx != 1)
+ return false;
+ MachineOperand &MOSrc = CopyLike.getOperand(CurrentSrcIdx);
+ MOSrc.setReg(NewReg);
+ MOSrc.setSubReg(NewSubReg);
+ return true;
+ }
+-
+- /// \brief Given a \p Def.Reg and Def.SubReg pair, use \p RewriteMap to find
+- /// the new source to use for rewrite. If \p HandleMultipleSources is true and
+- /// multiple sources for a given \p Def are found along the way, we found a
+- /// PHI instructions that needs to be rewritten.
+- /// TODO: HandleMultipleSources should be removed once we test PHI handling
+- /// with coalescable copies.
+- TargetInstrInfo::RegSubRegPair
+- getNewSource(MachineRegisterInfo *MRI, const TargetInstrInfo *TII,
+- TargetInstrInfo::RegSubRegPair Def,
+- PeepholeOptimizer::RewriteMapTy &RewriteMap,
+- bool HandleMultipleSources = true) {
+- TargetInstrInfo::RegSubRegPair LookupSrc(Def.Reg, Def.SubReg);
+- do {
+- ValueTrackerResult Res = RewriteMap.lookup(LookupSrc);
+- // If there are no entries on the map, LookupSrc is the new source.
+- if (!Res.isValid())
+- return LookupSrc;
+-
+- // There's only one source for this definition, keep searching...
+- unsigned NumSrcs = Res.getNumSources();
+- if (NumSrcs == 1) {
+- LookupSrc.Reg = Res.getSrcReg(0);
+- LookupSrc.SubReg = Res.getSrcSubReg(0);
+- continue;
+- }
+-
+- // TODO: Remove once multiple srcs w/ coalescable copies are supported.
+- if (!HandleMultipleSources)
+- break;
+-
+- // Multiple sources, recurse into each source to find a new source
+- // for it. Then, rewrite the PHI accordingly to its new edges.
+- SmallVector<TargetInstrInfo::RegSubRegPair, 4> NewPHISrcs;
+- for (unsigned i = 0; i < NumSrcs; ++i) {
+- TargetInstrInfo::RegSubRegPair PHISrc(Res.getSrcReg(i),
+- Res.getSrcSubReg(i));
+- NewPHISrcs.push_back(
+- getNewSource(MRI, TII, PHISrc, RewriteMap, HandleMultipleSources));
+- }
+-
+- // Build the new PHI node and return its def register as the new source.
+- MachineInstr *OrigPHI = const_cast<MachineInstr *>(Res.getInst());
+- MachineInstr *NewPHI = insertPHI(MRI, TII, NewPHISrcs, OrigPHI);
+- DEBUG(dbgs() << "-- getNewSource\n");
+- DEBUG(dbgs() << " Replacing: " << *OrigPHI);
+- DEBUG(dbgs() << " With: " << *NewPHI);
+- const MachineOperand &MODef = NewPHI->getOperand(0);
+- return TargetInstrInfo::RegSubRegPair(MODef.getReg(), MODef.getSubReg());
+-
+- } while (true);
+-
+- return TargetInstrInfo::RegSubRegPair(0, 0);
+- }
+-
+- /// \brief Rewrite the source found through \p Def, by using the \p RewriteMap
+- /// and create a new COPY instruction. More info about RewriteMap in
+- /// PeepholeOptimizer::findNextSource. Right now this is only used to handle
+- /// Uncoalescable copies, since they are copy like instructions that aren't
+- /// recognized by the register allocator.
+- virtual MachineInstr *
+- RewriteSource(TargetInstrInfo::RegSubRegPair Def,
+- PeepholeOptimizer::RewriteMapTy &RewriteMap) {
+- return nullptr;
+- }
+ };
+
+ /// \brief Helper class to rewrite uncoalescable copy like instructions
+ /// into new COPY (coalescable friendly) instructions.
+-class UncoalescableRewriter : public CopyRewriter {
+-protected:
+- const TargetInstrInfo &TII;
+- MachineRegisterInfo &MRI;
+-
+- /// The number of defs in the bitcast
+- unsigned NumDefs;
++class UncoalescableRewriter : public Rewriter {
++ unsigned NumDefs; ///< Number of defs in the bitcast.
+
+ public:
+- UncoalescableRewriter(MachineInstr &MI, const TargetInstrInfo &TII,
+- MachineRegisterInfo &MRI)
+- : CopyRewriter(MI), TII(TII), MRI(MRI) {
++ UncoalescableRewriter(MachineInstr &MI) : Rewriter(MI) {
+ NumDefs = MI.getDesc().getNumDefs();
+ }
+
+- /// \brief Get the next rewritable def source (TrackReg, TrackSubReg)
++ /// \see See Rewriter::getNextRewritableSource()
+ /// All such sources need to be considered rewritable in order to
+ /// rewrite a uncoalescable copy-like instruction. This method return
+ /// each definition that must be checked if rewritable.
+- bool getNextRewritableSource(unsigned &SrcReg, unsigned &SrcSubReg,
+- unsigned &TrackReg,
+- unsigned &TrackSubReg) override {
++ bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) override {
+ // Find the next non-dead definition and continue from there.
+ if (CurrentSrcIdx == NumDefs)
+ return false;
+@@ -990,64 +886,27 @@
+ }
+
+ // What we track are the alternative sources of the definition.
++ Src = RegSubRegPair(0, 0);
+ const MachineOperand &MODef = CopyLike.getOperand(CurrentSrcIdx);
+- TrackReg = MODef.getReg();
+- TrackSubReg = MODef.getSubReg();
++ Dst = RegSubRegPair(MODef.getReg(), MODef.getSubReg());
+
+ CurrentSrcIdx++;
+ return true;
+ }
+
+- /// \brief Rewrite the source found through \p Def, by using the \p RewriteMap
+- /// and create a new COPY instruction. More info about RewriteMap in
+- /// PeepholeOptimizer::findNextSource. Right now this is only used to handle
+- /// Uncoalescable copies, since they are copy like instructions that aren't
+- /// recognized by the register allocator.
+- MachineInstr *
+- RewriteSource(TargetInstrInfo::RegSubRegPair Def,
+- PeepholeOptimizer::RewriteMapTy &RewriteMap) override {
+- assert(!TargetRegisterInfo::isPhysicalRegister(Def.Reg) &&
+- "We do not rewrite physical registers");
+-
+- // Find the new source to use in the COPY rewrite.
+- TargetInstrInfo::RegSubRegPair NewSrc =
+- getNewSource(&MRI, &TII, Def, RewriteMap);
+-
+- // Insert the COPY.
+- const TargetRegisterClass *DefRC = MRI.getRegClass(Def.Reg);
+- unsigned NewVR = MRI.createVirtualRegister(DefRC);
+-
+- MachineInstr *NewCopy =
+- BuildMI(*CopyLike.getParent(), &CopyLike, CopyLike.getDebugLoc(),
+- TII.get(TargetOpcode::COPY), NewVR)
+- .addReg(NewSrc.Reg, 0, NewSrc.SubReg);
+-
+- NewCopy->getOperand(0).setSubReg(Def.SubReg);
+- if (Def.SubReg)
+- NewCopy->getOperand(0).setIsUndef();
+-
+- DEBUG(dbgs() << "-- RewriteSource\n");
+- DEBUG(dbgs() << " Replacing: " << CopyLike);
+- DEBUG(dbgs() << " With: " << *NewCopy);
+- MRI.replaceRegWith(Def.Reg, NewVR);
+- MRI.clearKillFlags(NewVR);
+-
+- // We extended the lifetime of NewSrc.Reg, clear the kill flags to
+- // account for that.
+- MRI.clearKillFlags(NewSrc.Reg);
+-
+- return NewCopy;
++ bool RewriteCurrentSource(unsigned NewReg, unsigned NewSubReg) override {
++ return false;
+ }
+ };
+
+-/// \brief Specialized rewriter for INSERT_SUBREG instruction.
+-class InsertSubregRewriter : public CopyRewriter {
++/// Specialized rewriter for INSERT_SUBREG instruction.
++class InsertSubregRewriter : public Rewriter {
+ public:
+- InsertSubregRewriter(MachineInstr &MI) : CopyRewriter(MI) {
++ InsertSubregRewriter(MachineInstr &MI) : Rewriter(MI) {
+ assert(MI.isInsertSubreg() && "Invalid instruction");
+ }
+
+- /// \brief See CopyRewriter::getNextRewritableSource.
++ /// \see See Rewriter::getNextRewritableSource()
+ /// Here CopyLike has the following form:
+ /// dst = INSERT_SUBREG Src1, Src2.src2SubIdx, subIdx.
+ /// Src1 has the same register class has dst, hence, there is
+@@ -1055,29 +914,27 @@
+ /// Src2.src2SubIdx, may not be register coalescer friendly.
+ /// Therefore, the first call to this method returns:
+ /// (SrcReg, SrcSubReg) = (Src2, src2SubIdx).
+- /// (TrackReg, TrackSubReg) = (dst, subIdx).
++ /// (DstReg, DstSubReg) = (dst, subIdx).
+ ///
+ /// Subsequence calls will return false.
+- bool getNextRewritableSource(unsigned &SrcReg, unsigned &SrcSubReg,
+- unsigned &TrackReg,
+- unsigned &TrackSubReg) override {
++ bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) override {
+ // If we already get the only source we can rewrite, return false.
+ if (CurrentSrcIdx == 2)
+ return false;
+ // We are looking at v2 = INSERT_SUBREG v0, v1, sub0.
+ CurrentSrcIdx = 2;
+ const MachineOperand &MOInsertedReg = CopyLike.getOperand(2);
+- SrcReg = MOInsertedReg.getReg();
+- SrcSubReg = MOInsertedReg.getSubReg();
++ Src = RegSubRegPair(MOInsertedReg.getReg(), MOInsertedReg.getSubReg());
+ const MachineOperand &MODef = CopyLike.getOperand(0);
+
+ // We want to track something that is compatible with the
+ // partial definition.
+- TrackReg = MODef.getReg();
+ if (MODef.getSubReg())
+ // Bail if we have to compose sub-register indices.
+ return false;
+- TrackSubReg = (unsigned)CopyLike.getOperand(3).getImm();
++ Dst = RegSubRegPair(MODef.getReg(),
++ (unsigned)CopyLike.getOperand(3).getImm());
+ return true;
+ }
+
+@@ -1092,41 +949,39 @@
+ }
+ };
+
+-/// \brief Specialized rewriter for EXTRACT_SUBREG instruction.
+-class ExtractSubregRewriter : public CopyRewriter {
++/// Specialized rewriter for EXTRACT_SUBREG instruction.
++class ExtractSubregRewriter : public Rewriter {
+ const TargetInstrInfo &TII;
+
+ public:
+ ExtractSubregRewriter(MachineInstr &MI, const TargetInstrInfo &TII)
+- : CopyRewriter(MI), TII(TII) {
++ : Rewriter(MI), TII(TII) {
+ assert(MI.isExtractSubreg() && "Invalid instruction");
+ }
+
+- /// \brief See CopyRewriter::getNextRewritableSource.
++ /// \see Rewriter::getNextRewritableSource()
+ /// Here CopyLike has the following form:
+ /// dst.dstSubIdx = EXTRACT_SUBREG Src, subIdx.
+ /// There is only one rewritable source: Src.subIdx,
+ /// which defines dst.dstSubIdx.
+- bool getNextRewritableSource(unsigned &SrcReg, unsigned &SrcSubReg,
+- unsigned &TrackReg,
+- unsigned &TrackSubReg) override {
++ bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) override {
+ // If we already get the only source we can rewrite, return false.
+ if (CurrentSrcIdx == 1)
+ return false;
+ // We are looking at v1 = EXTRACT_SUBREG v0, sub0.
+ CurrentSrcIdx = 1;
+ const MachineOperand &MOExtractedReg = CopyLike.getOperand(1);
+- SrcReg = MOExtractedReg.getReg();
+ // If we have to compose sub-register indices, bail out.
+ if (MOExtractedReg.getSubReg())
+ return false;
+
+- SrcSubReg = CopyLike.getOperand(2).getImm();
++ Src = RegSubRegPair(MOExtractedReg.getReg(),
++ CopyLike.getOperand(2).getImm());
+
+ // We want to track something that is compatible with the definition.
+ const MachineOperand &MODef = CopyLike.getOperand(0);
+- TrackReg = MODef.getReg();
+- TrackSubReg = MODef.getSubReg();
++ Dst = RegSubRegPair(MODef.getReg(), MODef.getSubReg());
+ return true;
+ }
+
+@@ -1156,14 +1011,14 @@
+ }
+ };
+
+-/// \brief Specialized rewriter for REG_SEQUENCE instruction.
+-class RegSequenceRewriter : public CopyRewriter {
++/// Specialized rewriter for REG_SEQUENCE instruction.
++class RegSequenceRewriter : public Rewriter {
+ public:
+- RegSequenceRewriter(MachineInstr &MI) : CopyRewriter(MI) {
++ RegSequenceRewriter(MachineInstr &MI) : Rewriter(MI) {
+ assert(MI.isRegSequence() && "Invalid instruction");
+ }
+
+- /// \brief See CopyRewriter::getNextRewritableSource.
++ /// \see Rewriter::getNextRewritableSource()
+ /// Here CopyLike has the following form:
+ /// dst = REG_SEQUENCE Src1.src1SubIdx, subIdx1, Src2.src2SubIdx, subIdx2.
+ /// Each call will return a different source, walking all the available
+@@ -1171,17 +1026,16 @@
+ ///
+ /// The first call returns:
+ /// (SrcReg, SrcSubReg) = (Src1, src1SubIdx).
+- /// (TrackReg, TrackSubReg) = (dst, subIdx1).
++ /// (DstReg, DstSubReg) = (dst, subIdx1).
+ ///
+ /// The second call returns:
+ /// (SrcReg, SrcSubReg) = (Src2, src2SubIdx).
+- /// (TrackReg, TrackSubReg) = (dst, subIdx2).
++ /// (DstReg, DstSubReg) = (dst, subIdx2).
+ ///
+ /// And so on, until all the sources have been traversed, then
+ /// it returns false.
+- bool getNextRewritableSource(unsigned &SrcReg, unsigned &SrcSubReg,
+- unsigned &TrackReg,
+- unsigned &TrackSubReg) override {
++ bool getNextRewritableSource(RegSubRegPair &Src,
++ RegSubRegPair &Dst) override {
+ // We are looking at v0 = REG_SEQUENCE v1, sub1, v2, sub2, etc.
+
+ // If this is the first call, move to the first argument.
+@@ -1194,17 +1048,17 @@
+ return false;
+ }
+ const MachineOperand &MOInsertedReg = CopyLike.getOperand(CurrentSrcIdx);
+- SrcReg = MOInsertedReg.getReg();
++ Src.Reg = MOInsertedReg.getReg();
+ // If we have to compose sub-register indices, bail out.
+- if ((SrcSubReg = MOInsertedReg.getSubReg()))
++ if ((Src.SubReg = MOInsertedReg.getSubReg()))
+ return false;
+
+ // We want to track something that is compatible with the related
+ // partial definition.
+- TrackSubReg = CopyLike.getOperand(CurrentSrcIdx + 1).getImm();
++ Dst.SubReg = CopyLike.getOperand(CurrentSrcIdx + 1).getImm();
+
+ const MachineOperand &MODef = CopyLike.getOperand(0);
+- TrackReg = MODef.getReg();
++ Dst.Reg = MODef.getReg();
+ // If we have to compose sub-registers, bail.
+ return MODef.getSubReg() == 0;
+ }
+@@ -1224,16 +1078,14 @@
+
+ } // end anonymous namespace
+
+-/// \brief Get the appropriated CopyRewriter for \p MI.
+-/// \return A pointer to a dynamically allocated CopyRewriter or nullptr
+-/// if no rewriter works for \p MI.
+-static CopyRewriter *getCopyRewriter(MachineInstr &MI,
+- const TargetInstrInfo &TII,
+- MachineRegisterInfo &MRI) {
++/// Get the appropriated Rewriter for \p MI.
++/// \return A pointer to a dynamically allocated Rewriter or nullptr if no
++/// rewriter works for \p MI.
++static Rewriter *getCopyRewriter(MachineInstr &MI, const TargetInstrInfo &TII) {
+ // Handle uncoalescable copy-like instructions.
+- if (MI.isBitcast() || (MI.isRegSequenceLike() || MI.isInsertSubregLike() ||
+- MI.isExtractSubregLike()))
+- return new UncoalescableRewriter(MI, TII, MRI);
++ if (MI.isBitcast() || MI.isRegSequenceLike() || MI.isInsertSubregLike() ||
++ MI.isExtractSubregLike())
++ return new UncoalescableRewriter(MI);
+
+ switch (MI.getOpcode()) {
+ default:
+@@ -1247,53 +1099,102 @@
+ case TargetOpcode::REG_SEQUENCE:
+ return new RegSequenceRewriter(MI);
+ }
+- llvm_unreachable(nullptr);
+ }
+
+-/// \brief Optimize generic copy instructions to avoid cross
+-/// register bank copy. The optimization looks through a chain of
+-/// copies and tries to find a source that has a compatible register
+-/// class.
+-/// Two register classes are considered to be compatible if they share
+-/// the same register bank.
++/// \brief Given a \p Def.Reg and Def.SubReg pair, use \p RewriteMap to find
++/// the new source to use for rewrite. If \p HandleMultipleSources is true and
++/// multiple sources for a given \p Def are found along the way, we found a
++/// PHI instructions that needs to be rewritten.
++/// TODO: HandleMultipleSources should be removed once we test PHI handling
++/// with coalescable copies.
++static RegSubRegPair
++getNewSource(MachineRegisterInfo *MRI, const TargetInstrInfo *TII,
++ RegSubRegPair Def,
++ const PeepholeOptimizer::RewriteMapTy &RewriteMap,
++ bool HandleMultipleSources = true) {
++ RegSubRegPair LookupSrc(Def.Reg, Def.SubReg);
++ while (true) {
++ ValueTrackerResult Res = RewriteMap.lookup(LookupSrc);
++ // If there are no entries on the map, LookupSrc is the new source.
++ if (!Res.isValid())
++ return LookupSrc;
++
++ // There's only one source for this definition, keep searching...
++ unsigned NumSrcs = Res.getNumSources();
++ if (NumSrcs == 1) {
++ LookupSrc.Reg = Res.getSrcReg(0);
++ LookupSrc.SubReg = Res.getSrcSubReg(0);
++ continue;
++ }
++
++ // TODO: Remove once multiple srcs w/ coalescable copies are supported.
++ if (!HandleMultipleSources)
++ break;
++
++ // Multiple sources, recurse into each source to find a new source
++ // for it. Then, rewrite the PHI accordingly to its new edges.
++ SmallVector<RegSubRegPair, 4> NewPHISrcs;
++ for (unsigned i = 0; i < NumSrcs; ++i) {
++ RegSubRegPair PHISrc(Res.getSrcReg(i), Res.getSrcSubReg(i));
++ NewPHISrcs.push_back(
++ getNewSource(MRI, TII, PHISrc, RewriteMap, HandleMultipleSources));
++ }
++
++ // Build the new PHI node and return its def register as the new source.
++ MachineInstr &OrigPHI = const_cast<MachineInstr &>(*Res.getInst());
++ MachineInstr &NewPHI = insertPHI(*MRI, *TII, NewPHISrcs, OrigPHI);
++ DEBUG(dbgs() << "-- getNewSource\n");
++ DEBUG(dbgs() << " Replacing: " << OrigPHI);
++ DEBUG(dbgs() << " With: " << NewPHI);
++ const MachineOperand &MODef = NewPHI.getOperand(0);
++ return RegSubRegPair(MODef.getReg(), MODef.getSubReg());
++ }
++
++ return RegSubRegPair(0, 0);
++}
++
++/// Optimize generic copy instructions to avoid cross register bank copy.
++/// The optimization looks through a chain of copies and tries to find a source
++/// that has a compatible register class.
++/// Two register classes are considered to be compatible if they share the same
++/// register bank.
+ /// New copies issued by this optimization are register allocator
+ /// friendly. This optimization does not remove any copy as it may
+ /// overconstrain the register allocator, but replaces some operands
+ /// when possible.
+ /// \pre isCoalescableCopy(*MI) is true.
+ /// \return True, when \p MI has been rewritten. False otherwise.
+-bool PeepholeOptimizer::optimizeCoalescableCopy(MachineInstr *MI) {
+- assert(MI && isCoalescableCopy(*MI) && "Invalid argument");
+- assert(MI->getDesc().getNumDefs() == 1 &&
++bool PeepholeOptimizer::optimizeCoalescableCopy(MachineInstr &MI) {
++ assert(isCoalescableCopy(MI) && "Invalid argument");
++ assert(MI.getDesc().getNumDefs() == 1 &&
+ "Coalescer can understand multiple defs?!");
+- const MachineOperand &MODef = MI->getOperand(0);
++ const MachineOperand &MODef = MI.getOperand(0);
+ // Do not rewrite physical definitions.
+ if (TargetRegisterInfo::isPhysicalRegister(MODef.getReg()))
+ return false;
+
+ bool Changed = false;
+ // Get the right rewriter for the current copy.
+- std::unique_ptr<CopyRewriter> CpyRewriter(getCopyRewriter(*MI, *TII, *MRI));
++ std::unique_ptr<Rewriter> CpyRewriter(getCopyRewriter(MI, *TII));
+ // If none exists, bail out.
+ if (!CpyRewriter)
+ return false;
+ // Rewrite each rewritable source.
+- unsigned SrcReg, SrcSubReg, TrackReg, TrackSubReg;
+- while (CpyRewriter->getNextRewritableSource(SrcReg, SrcSubReg, TrackReg,
+- TrackSubReg)) {
++ RegSubRegPair Src;
++ RegSubRegPair TrackPair;
++ while (CpyRewriter->getNextRewritableSource(Src, TrackPair)) {
+ // Keep track of PHI nodes and its incoming edges when looking for sources.
+ RewriteMapTy RewriteMap;
+ // Try to find a more suitable source. If we failed to do so, or get the
+ // actual source, move to the next source.
+- if (!findNextSource(TrackReg, TrackSubReg, RewriteMap))
++ if (!findNextSource(TrackPair, RewriteMap))
+ continue;
+
+ // Get the new source to rewrite. TODO: Only enable handling of multiple
+ // sources (PHIs) once we have a motivating example and testcases for it.
+- TargetInstrInfo::RegSubRegPair TrackPair(TrackReg, TrackSubReg);
+- TargetInstrInfo::RegSubRegPair NewSrc = CpyRewriter->getNewSource(
+- MRI, TII, TrackPair, RewriteMap, false /* multiple sources */);
+- if (SrcReg == NewSrc.Reg || NewSrc.Reg == 0)
++ RegSubRegPair NewSrc = getNewSource(MRI, TII, TrackPair, RewriteMap,
++ /*HandleMultipleSources=*/false);
++ if (Src.Reg == NewSrc.Reg || NewSrc.Reg == 0)
+ continue;
+
+ // Rewrite source.
+@@ -1312,6 +1213,47 @@
+ return Changed;
+ }
+
++/// \brief Rewrite the source found through \p Def, by using the \p RewriteMap
++/// and create a new COPY instruction. More info about RewriteMap in
++/// PeepholeOptimizer::findNextSource. Right now this is only used to handle
++/// Uncoalescable copies, since they are copy like instructions that aren't
++/// recognized by the register allocator.
++MachineInstr &
++PeepholeOptimizer::rewriteSource(MachineInstr &CopyLike,
++ RegSubRegPair Def, RewriteMapTy &RewriteMap) {
++ assert(!TargetRegisterInfo::isPhysicalRegister(Def.Reg) &&
++ "We do not rewrite physical registers");
++
++ // Find the new source to use in the COPY rewrite.
++ RegSubRegPair NewSrc = getNewSource(MRI, TII, Def, RewriteMap);
++
++ // Insert the COPY.
++ const TargetRegisterClass *DefRC = MRI->getRegClass(Def.Reg);
++ unsigned NewVReg = MRI->createVirtualRegister(DefRC);
++
++ MachineInstr *NewCopy =
++ BuildMI(*CopyLike.getParent(), &CopyLike, CopyLike.getDebugLoc(),
++ TII->get(TargetOpcode::COPY), NewVReg)
++ .addReg(NewSrc.Reg, 0, NewSrc.SubReg);
++
++ if (Def.SubReg) {
++ NewCopy->getOperand(0).setSubReg(Def.SubReg);
++ NewCopy->getOperand(0).setIsUndef();
++ }
++
++ DEBUG(dbgs() << "-- RewriteSource\n");
++ DEBUG(dbgs() << " Replacing: " << CopyLike);
++ DEBUG(dbgs() << " With: " << *NewCopy);
++ MRI->replaceRegWith(Def.Reg, NewVReg);
++ MRI->clearKillFlags(NewVReg);
++
++ // We extended the lifetime of NewSrc.Reg, clear the kill flags to
++ // account for that.
++ MRI->clearKillFlags(NewSrc.Reg);
++
++ return *NewCopy;
++}
++
+ /// \brief Optimize copy-like instructions to create
+ /// register coalescer friendly instruction.
+ /// The optimization tries to kill-off the \p MI by looking
+@@ -1324,48 +1266,40 @@
+ /// been removed from its parent.
+ /// All COPY instructions created, are inserted in \p LocalMIs.
+ bool PeepholeOptimizer::optimizeUncoalescableCopy(
+- MachineInstr *MI, SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
+- assert(MI && isUncoalescableCopy(*MI) && "Invalid argument");
+-
+- // Check if we can rewrite all the values defined by this instruction.
+- SmallVector<TargetInstrInfo::RegSubRegPair, 4> RewritePairs;
+- // Get the right rewriter for the current copy.
+- std::unique_ptr<CopyRewriter> CpyRewriter(getCopyRewriter(*MI, *TII, *MRI));
+- // If none exists, bail out.
+- if (!CpyRewriter)
+- return false;
++ MachineInstr &MI, SmallPtrSetImpl<MachineInstr *> &LocalMIs) {
++ assert(isUncoalescableCopy(MI) && "Invalid argument");
++ UncoalescableRewriter CpyRewriter(MI);
+
+ // Rewrite each rewritable source by generating new COPYs. This works
+ // differently from optimizeCoalescableCopy since it first makes sure that all
+ // definitions can be rewritten.
+ RewriteMapTy RewriteMap;
+- unsigned Reg, SubReg, CopyDefReg, CopyDefSubReg;
+- while (CpyRewriter->getNextRewritableSource(Reg, SubReg, CopyDefReg,
+- CopyDefSubReg)) {
++ RegSubRegPair Src;
++ RegSubRegPair Def;
++ SmallVector<RegSubRegPair, 4> RewritePairs;
++ while (CpyRewriter.getNextRewritableSource(Src, Def)) {
+ // If a physical register is here, this is probably for a good reason.
+ // Do not rewrite that.
+- if (TargetRegisterInfo::isPhysicalRegister(CopyDefReg))
++ if (TargetRegisterInfo::isPhysicalRegister(Def.Reg))
+ return false;
+
+ // If we do not know how to rewrite this definition, there is no point
+ // in trying to kill this instruction.
+- TargetInstrInfo::RegSubRegPair Def(CopyDefReg, CopyDefSubReg);
+- if (!findNextSource(Def.Reg, Def.SubReg, RewriteMap))
++ if (!findNextSource(Def, RewriteMap))
+ return false;
+
+ RewritePairs.push_back(Def);
+ }
+
+ // The change is possible for all defs, do it.
+- for (const auto &Def : RewritePairs) {
++ for (const RegSubRegPair &Def : RewritePairs) {
+ // Rewrite the "copy" in a way the register coalescer understands.
+- MachineInstr *NewCopy = CpyRewriter->RewriteSource(Def, RewriteMap);
+- assert(NewCopy && "Should be able to always generate a new copy");
+- LocalMIs.insert(NewCopy);
++ MachineInstr &NewCopy = rewriteSource(MI, Def, RewriteMap);
++ LocalMIs.insert(&NewCopy);
+ }
+
+ // MI is now dead.
+- MI->eraseFromParent();
++ MI.eraseFromParent();
+ ++NumUncoalescableCopies;
+ return true;
+ }
+@@ -1374,18 +1308,18 @@
+ /// We only fold loads to virtual registers and the virtual register defined
+ /// has a single use.
+ bool PeepholeOptimizer::isLoadFoldable(
+- MachineInstr *MI, SmallSet<unsigned, 16> &FoldAsLoadDefCandidates) {
+- if (!MI->canFoldAsLoad() || !MI->mayLoad())
++ MachineInstr &MI, SmallSet<unsigned, 16> &FoldAsLoadDefCandidates) {
++ if (!MI.canFoldAsLoad() || !MI.mayLoad())
+ return false;
+- const MCInstrDesc &MCID = MI->getDesc();
++ const MCInstrDesc &MCID = MI.getDesc();
+ if (MCID.getNumDefs() != 1)
+ return false;
+
+- unsigned Reg = MI->getOperand(0).getReg();
++ unsigned Reg = MI.getOperand(0).getReg();
+ // To reduce compilation time, we check MRI->hasOneNonDBGUse when inserting
+ // loads. It should be checked when processing uses of the load, since
+ // uses can be removed during peephole.
+- if (!MI->getOperand(0).getSubReg() &&
++ if (!MI.getOperand(0).getSubReg() &&
+ TargetRegisterInfo::isVirtualRegister(Reg) &&
+ MRI->hasOneNonDBGUse(Reg)) {
+ FoldAsLoadDefCandidates.insert(Reg);
+@@ -1395,16 +1329,16 @@
+ }
+
+ bool PeepholeOptimizer::isMoveImmediate(
+- MachineInstr *MI, SmallSet<unsigned, 4> &ImmDefRegs,
++ MachineInstr &MI, SmallSet<unsigned, 4> &ImmDefRegs,
+ DenseMap<unsigned, MachineInstr *> &ImmDefMIs) {
+- const MCInstrDesc &MCID = MI->getDesc();
+- if (!MI->isMoveImmediate())
++ const MCInstrDesc &MCID = MI.getDesc();
++ if (!MI.isMoveImmediate())
+ return false;
+ if (MCID.getNumDefs() != 1)
+ return false;
+- unsigned Reg = MI->getOperand(0).getReg();
++ unsigned Reg = MI.getOperand(0).getReg();
+ if (TargetRegisterInfo::isVirtualRegister(Reg)) {
+- ImmDefMIs.insert(std::make_pair(Reg, MI));
++ ImmDefMIs.insert(std::make_pair(Reg, &MI));
+ ImmDefRegs.insert(Reg);
+ return true;
+ }
+@@ -1415,11 +1349,11 @@
+ /// Try folding register operands that are defined by move immediate
+ /// instructions, i.e. a trivial constant folding optimization, if
+ /// and only if the def and use are in the same BB.
+-bool PeepholeOptimizer::foldImmediate(
+- MachineInstr *MI, MachineBasicBlock *MBB, SmallSet<unsigned, 4> &ImmDefRegs,
++bool PeepholeOptimizer::foldImmediate(MachineInstr &MI,
++ SmallSet<unsigned, 4> &ImmDefRegs,
+ DenseMap<unsigned, MachineInstr *> &ImmDefMIs) {
+- for (unsigned i = 0, e = MI->getDesc().getNumOperands(); i != e; ++i) {
+- MachineOperand &MO = MI->getOperand(i);
++ for (unsigned i = 0, e = MI.getDesc().getNumOperands(); i != e; ++i) {
++ MachineOperand &MO = MI.getOperand(i);
+ if (!MO.isReg() || MO.isDef())
+ continue;
+ // Ignore dead implicit defs.
+@@ -1432,7 +1366,7 @@
+ continue;
+ DenseMap<unsigned, MachineInstr*>::iterator II = ImmDefMIs.find(Reg);
+ assert(II != ImmDefMIs.end() && "couldn't find immediate definition");
+- if (TII->FoldImmediate(*MI, *II->second, Reg, MRI)) {
++ if (TII->FoldImmediate(MI, *II->second, Reg, MRI)) {
+ ++NumImmFold;
+ return true;
+ }
+@@ -1454,28 +1388,28 @@
+ // %2 = COPY %0:sub1
+ //
+ // Should replace %2 uses with %1:sub1
+-bool PeepholeOptimizer::foldRedundantCopy(
+- MachineInstr *MI, SmallSet<unsigned, 4> &CopySrcRegs,
++bool PeepholeOptimizer::foldRedundantCopy(MachineInstr &MI,
++ SmallSet<unsigned, 4> &CopySrcRegs,
+ DenseMap<unsigned, MachineInstr *> &CopyMIs) {
+- assert(MI->isCopy() && "expected a COPY machine instruction");
++ assert(MI.isCopy() && "expected a COPY machine instruction");
+
+- unsigned SrcReg = MI->getOperand(1).getReg();
++ unsigned SrcReg = MI.getOperand(1).getReg();
+ if (!TargetRegisterInfo::isVirtualRegister(SrcReg))
+ return false;
+
+- unsigned DstReg = MI->getOperand(0).getReg();
++ unsigned DstReg = MI.getOperand(0).getReg();
+ if (!TargetRegisterInfo::isVirtualRegister(DstReg))
+ return false;
+
+ if (CopySrcRegs.insert(SrcReg).second) {
+ // First copy of this reg seen.
+- CopyMIs.insert(std::make_pair(SrcReg, MI));
++ CopyMIs.insert(std::make_pair(SrcReg, &MI));
+ return false;
+ }
+
+ MachineInstr *PrevCopy = CopyMIs.find(SrcReg)->second;
+
+- unsigned SrcSubReg = MI->getOperand(1).getSubReg();
++ unsigned SrcSubReg = MI.getOperand(1).getSubReg();
+ unsigned PrevSrcSubReg = PrevCopy->getOperand(1).getSubReg();
+
+ // Can't replace different subregister extracts.
+@@ -1504,19 +1438,19 @@
+ }
+
+ bool PeepholeOptimizer::foldRedundantNAPhysCopy(
+- MachineInstr *MI, DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs) {
+- assert(MI->isCopy() && "expected a COPY machine instruction");
++ MachineInstr &MI, DenseMap<unsigned, MachineInstr *> &NAPhysToVirtMIs) {
++ assert(MI.isCopy() && "expected a COPY machine instruction");
+
+ if (DisableNAPhysCopyOpt)
+ return false;
+
+- unsigned DstReg = MI->getOperand(0).getReg();
+- unsigned SrcReg = MI->getOperand(1).getReg();
++ unsigned DstReg = MI.getOperand(0).getReg();
++ unsigned SrcReg = MI.getOperand(1).getReg();
+ if (isNAPhysCopy(SrcReg) && TargetRegisterInfo::isVirtualRegister(DstReg)) {
+ // %vreg = COPY %physreg
+ // Avoid using a datastructure which can track multiple live non-allocatable
+ // phys->virt copies since LLVM doesn't seem to do this.
+- NAPhysToVirtMIs.insert({SrcReg, MI});
++ NAPhysToVirtMIs.insert({SrcReg, &MI});
+ return false;
+ }
+
+@@ -1528,8 +1462,7 @@
+ if (PrevCopy == NAPhysToVirtMIs.end()) {
+ // We can't remove the copy: there was an intervening clobber of the
+ // non-allocatable physical register after the copy to virtual.
+- DEBUG(dbgs() << "NAPhysCopy: intervening clobber forbids erasing " << *MI
+- << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: intervening clobber forbids erasing " << MI);
+ return false;
+ }
+
+@@ -1537,7 +1470,7 @@
+ if (PrevDstReg == SrcReg) {
+ // Remove the virt->phys copy: we saw the virtual register definition, and
+ // the non-allocatable physical register's state hasn't changed since then.
+- DEBUG(dbgs() << "NAPhysCopy: erasing " << *MI << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: erasing " << MI);
+ ++NumNAPhysCopies;
+ return true;
+ }
+@@ -1546,7 +1479,7 @@
+ // register get a copy of the non-allocatable physical register, and we only
+ // track one such copy. Avoid getting confused by this new non-allocatable
+ // physical register definition, and remove it from the tracked copies.
+- DEBUG(dbgs() << "NAPhysCopy: missed opportunity " << *MI << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: missed opportunity " << MI);
+ NAPhysToVirtMIs.erase(PrevCopy);
+ return false;
+ }
+@@ -1611,11 +1544,11 @@
+ return false;
+ }
+
+-/// \brief Phi instructions will eventually be lowered to copy instructions. If
+-/// phi is in a loop header, a recurrence may formulated around the source and
+-/// destination of the phi. For such case commuting operands of the instructions
+-/// in the recurrence may enable coalescing of the copy instruction generated
+-/// from the phi. For example, if there is a recurrence of
++/// Phi instructions will eventually be lowered to copy instructions.
++/// If phi is in a loop header, a recurrence may formulated around the source
++/// and destination of the phi. For such case commuting operands of the
++/// instructions in the recurrence may enable coalescing of the copy instruction
++/// generated from the phi. For example, if there is a recurrence of
+ ///
+ /// LoopHeader:
+ /// %1 = phi(%0, %100)
+@@ -1725,27 +1658,25 @@
+ }
+
+ if (!MI->isCopy()) {
+- for (const auto &Op : MI->operands()) {
++ for (const MachineOperand &MO : MI->operands()) {
+ // Visit all operands: definitions can be implicit or explicit.
+- if (Op.isReg()) {
+- unsigned Reg = Op.getReg();
+- if (Op.isDef() && isNAPhysCopy(Reg)) {
++ if (MO.isReg()) {
++ unsigned Reg = MO.getReg();
++ if (MO.isDef() && isNAPhysCopy(Reg)) {
+ const auto &Def = NAPhysToVirtMIs.find(Reg);
+ if (Def != NAPhysToVirtMIs.end()) {
+ // A new definition of the non-allocatable physical register
+ // invalidates previous copies.
+- DEBUG(dbgs() << "NAPhysCopy: invalidating because of " << *MI
+- << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: invalidating because of " << *MI);
+ NAPhysToVirtMIs.erase(Def);
+ }
+ }
+- } else if (Op.isRegMask()) {
+- const uint32_t *RegMask = Op.getRegMask();
++ } else if (MO.isRegMask()) {
++ const uint32_t *RegMask = MO.getRegMask();
+ for (auto &RegMI : NAPhysToVirtMIs) {
+ unsigned Def = RegMI.first;
+ if (MachineOperand::clobbersPhysReg(RegMask, Def)) {
+- DEBUG(dbgs() << "NAPhysCopy: invalidating because of " << *MI
+- << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: invalidating because of " << *MI);
+ NAPhysToVirtMIs.erase(Def);
+ }
+ }
+@@ -1761,58 +1692,57 @@
+ // don't know what's correct anymore.
+ //
+ // FIXME: handle explicit asm clobbers.
+- DEBUG(dbgs() << "NAPhysCopy: blowing away all info due to " << *MI
+- << '\n');
++ DEBUG(dbgs() << "NAPhysCopy: blowing away all info due to " << *MI);
+ NAPhysToVirtMIs.clear();
+ }
+
+ if ((isUncoalescableCopy(*MI) &&
+- optimizeUncoalescableCopy(MI, LocalMIs)) ||
+- (MI->isCompare() && optimizeCmpInstr(MI, &MBB)) ||
+- (MI->isSelect() && optimizeSelect(MI, LocalMIs))) {
++ optimizeUncoalescableCopy(*MI, LocalMIs)) ||
++ (MI->isCompare() && optimizeCmpInstr(*MI)) ||
++ (MI->isSelect() && optimizeSelect(*MI, LocalMIs))) {
+ // MI is deleted.
+ LocalMIs.erase(MI);
+ Changed = true;
+ continue;
+ }
+
+- if (MI->isConditionalBranch() && optimizeCondBranch(MI)) {
++ if (MI->isConditionalBranch() && optimizeCondBranch(*MI)) {
+ Changed = true;
+ continue;
+ }
+
+- if (isCoalescableCopy(*MI) && optimizeCoalescableCopy(MI)) {
++ if (isCoalescableCopy(*MI) && optimizeCoalescableCopy(*MI)) {
+ // MI is just rewritten.
+ Changed = true;
+ continue;
+ }
+
+ if (MI->isCopy() &&
+- (foldRedundantCopy(MI, CopySrcRegs, CopySrcMIs) ||
+- foldRedundantNAPhysCopy(MI, NAPhysToVirtMIs))) {
++ (foldRedundantCopy(*MI, CopySrcRegs, CopySrcMIs) ||
++ foldRedundantNAPhysCopy(*MI, NAPhysToVirtMIs))) {
+ LocalMIs.erase(MI);
+ MI->eraseFromParent();
+ Changed = true;
+ continue;
+ }
+
+- if (isMoveImmediate(MI, ImmDefRegs, ImmDefMIs)) {
++ if (isMoveImmediate(*MI, ImmDefRegs, ImmDefMIs)) {
+ SeenMoveImm = true;
+ } else {
+- Changed |= optimizeExtInstr(MI, &MBB, LocalMIs);
++ Changed |= optimizeExtInstr(*MI, MBB, LocalMIs);
+ // optimizeExtInstr might have created new instructions after MI
+ // and before the already incremented MII. Adjust MII so that the
+ // next iteration sees the new instructions.
+ MII = MI;
+ ++MII;
+ if (SeenMoveImm)
+- Changed |= foldImmediate(MI, &MBB, ImmDefRegs, ImmDefMIs);
++ Changed |= foldImmediate(*MI, ImmDefRegs, ImmDefMIs);
+ }
+
+ // Check whether MI is a load candidate for folding into a later
+ // instruction. If MI is not a candidate, check whether we can fold an
+ // earlier load into MI.
+- if (!isLoadFoldable(MI, FoldAsLoadDefCandidates) &&
++ if (!isLoadFoldable(*MI, FoldAsLoadDefCandidates) &&
+ !FoldAsLoadDefCandidates.empty()) {
+
+ // We visit each operand even after successfully folding a previous
+@@ -1861,7 +1791,7 @@
+ // the load candidates. Note: We might be able to fold *into* this
+ // instruction, so this needs to be after the folding logic.
+ if (MI->isLoadFoldBarrier()) {
+- DEBUG(dbgs() << "Encountered load fold barrier on " << *MI << "\n");
++ DEBUG(dbgs() << "Encountered load fold barrier on " << *MI);
+ FoldAsLoadDefCandidates.clear();
+ }
+ }
+@@ -1958,14 +1888,14 @@
+ // duplicate the code from the generic TII.
+ return ValueTrackerResult();
+
+- SmallVector<TargetInstrInfo::RegSubRegPairAndIdx, 8> RegSeqInputRegs;
++ SmallVector<RegSubRegPairAndIdx, 8> RegSeqInputRegs;
+ if (!TII->getRegSequenceInputs(*Def, DefIdx, RegSeqInputRegs))
+ return ValueTrackerResult();
+
+ // We are looking at:
+ // Def = REG_SEQUENCE v0, sub0, v1, sub1, ...
+ // Check if one of the operand defines the subreg we are interested in.
+- for (auto &RegSeqInput : RegSeqInputRegs) {
++ for (const RegSubRegPairAndIdx &RegSeqInput : RegSeqInputRegs) {
+ if (RegSeqInput.SubIdx == DefSubReg) {
+ if (RegSeqInput.SubReg)
+ // Bail if we have to compose sub registers.
+@@ -1996,8 +1926,8 @@
+ // duplicate the code from the generic TII.
+ return ValueTrackerResult();
+
+- TargetInstrInfo::RegSubRegPair BaseReg;
+- TargetInstrInfo::RegSubRegPairAndIdx InsertedReg;
++ RegSubRegPair BaseReg;
++ RegSubRegPairAndIdx InsertedReg;
+ if (!TII->getInsertSubregInputs(*Def, DefIdx, BaseReg, InsertedReg))
+ return ValueTrackerResult();
+
+@@ -2050,7 +1980,7 @@
+ // duplicate the code from the generic TII.
+ return ValueTrackerResult();
+
+- TargetInstrInfo::RegSubRegPairAndIdx ExtractSubregInputReg;
++ RegSubRegPairAndIdx ExtractSubregInputReg;
+ if (!TII->getExtractSubregInputs(*Def, DefIdx, ExtractSubregInputReg))
+ return ValueTrackerResult();
+
+@@ -2083,7 +2013,7 @@
+ Def->getOperand(3).getImm());
+ }
+
+-/// \brief Explore each PHI incoming operand and return its sources
++/// Explore each PHI incoming operand and return its sources.
+ ValueTrackerResult ValueTracker::getNextSourceFromPHI() {
+ assert(Def->isPHI() && "Invalid definition");
+ ValueTrackerResult Res;
+@@ -2095,7 +2025,7 @@
+
+ // Return all register sources for PHI instructions.
+ for (unsigned i = 1, e = Def->getNumOperands(); i < e; i += 2) {
+- auto &MO = Def->getOperand(i);
++ const MachineOperand &MO = Def->getOperand(i);
+ assert(MO.isReg() && "Invalid PHI instruction");
+ // We have no code to deal with undef operands. They shouldn't happen in
+ // normal programs anyway.
+@@ -2121,7 +2051,7 @@
+ return getNextSourceFromBitcast();
+ // All the remaining cases involve "complex" instructions.
+ // Bail if we did not ask for the advanced tracking.
+- if (!UseAdvancedTracking)
++ if (DisableAdvCopyOpt)
+ return ValueTrackerResult();
+ if (Def->isRegSequence() || Def->isRegSequenceLike())
+ return getNextSourceFromRegSequence();
diff --git a/devel/llvm60/pkg-descr b/devel/llvm60/pkg-descr
new file mode 100644
index 000000000000..d252f07c6790
--- /dev/null
+++ b/devel/llvm60/pkg-descr
@@ -0,0 +1,8 @@
+The LLVM Project is a collection of modular and reusable compiler and
+toolchain technologies.
+
+This port includes Clang (a C/C++/Objective-C compiler), LLD (a linker),
+LLDB (a debugger), an OpenMP runtime library, and the LLVM infrastructure
+these are built on.
+
+WWW: http://llvm.org/
diff --git a/devel/llvm60/pkg-plist b/devel/llvm60/pkg-plist
new file mode 100644
index 000000000000..02cb1d865866
--- /dev/null
+++ b/devel/llvm60/pkg-plist
@@ -0,0 +1,2899 @@
+@comment >>>>> GENERATED FILE, DO NOT EDIT <<<<<
+@comment Alter build-plist target and regenerate as required
+bin/bugpoint%%LLVM_SUFFIX%%
+bin/llc%%LLVM_SUFFIX%%
+bin/lli%%LLVM_SUFFIX%%
+bin/llvm-ar%%LLVM_SUFFIX%%
+bin/llvm-as%%LLVM_SUFFIX%%
+bin/llvm-bcanalyzer%%LLVM_SUFFIX%%
+bin/llvm-cat%%LLVM_SUFFIX%%
+bin/llvm-cfi-verify%%LLVM_SUFFIX%%
+bin/llvm-config%%LLVM_SUFFIX%%
+bin/llvm-cov%%LLVM_SUFFIX%%
+bin/llvm-cvtres%%LLVM_SUFFIX%%
+bin/llvm-diff%%LLVM_SUFFIX%%
+bin/llvm-dis%%LLVM_SUFFIX%%
+bin/llvm-dlltool%%LLVM_SUFFIX%%
+bin/llvm-dwarfdump%%LLVM_SUFFIX%%
+bin/llvm-dwp%%LLVM_SUFFIX%%
+bin/llvm-extract%%LLVM_SUFFIX%%
+bin/llvm-link%%LLVM_SUFFIX%%
+bin/llvm-mc%%LLVM_SUFFIX%%
+bin/llvm-mcmarkup%%LLVM_SUFFIX%%
+bin/llvm-modextract%%LLVM_SUFFIX%%
+bin/llvm-mt%%LLVM_SUFFIX%%
+bin/llvm-nm%%LLVM_SUFFIX%%
+bin/llvm-objcopy%%LLVM_SUFFIX%%
+bin/llvm-objdump%%LLVM_SUFFIX%%
+bin/llvm-opt-report%%LLVM_SUFFIX%%
+bin/llvm-pdbutil%%LLVM_SUFFIX%%
+bin/llvm-profdata%%LLVM_SUFFIX%%
+bin/llvm-ranlib%%LLVM_SUFFIX%%
+bin/llvm-rc%%LLVM_SUFFIX%%
+bin/llvm-readelf%%LLVM_SUFFIX%%
+bin/llvm-readobj%%LLVM_SUFFIX%%
+bin/llvm-rtdyld%%LLVM_SUFFIX%%
+bin/llvm-size%%LLVM_SUFFIX%%
+bin/llvm-split%%LLVM_SUFFIX%%
+bin/llvm-stress%%LLVM_SUFFIX%%
+bin/llvm-strings%%LLVM_SUFFIX%%
+bin/llvm-symbolizer%%LLVM_SUFFIX%%
+bin/llvm-tblgen%%LLVM_SUFFIX%%
+bin/macho-dump%%LLVM_SUFFIX%%
+bin/opt%%LLVM_SUFFIX%%
+bin/sancov%%LLVM_SUFFIX%%
+%%CLANG%%bin/c-index-test%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang++%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-check%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-cpp%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-format%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-func-mapping%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-import-test%%LLVM_SUFFIX%%
+%%CLANG%%bin/clang-offload-bundler%%LLVM_SUFFIX%%
+%%CLANG%%bin/scan-build%%LLVM_SUFFIX%%
+%%CLANG%%bin/scan-view%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-apply-replacements%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-change-namespace%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-include-fixer%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-modernize%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-query%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-rename%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-reorder-fields%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clang-tidy%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/clangd%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/find-all-symbols%%LLVM_SUFFIX%%
+%%EXTRAS%%bin/modularize%%LLVM_SUFFIX%%
+%%LLD%%bin/ld.lld%%LLVM_SUFFIX%%
+%%LLD%%bin/ld64.lld%%LLVM_SUFFIX%%
+%%LLD%%bin/lld%%LLVM_SUFFIX%%
+%%LLD%%bin/lld-link%%LLVM_SUFFIX%%
+%%LLD%%bin/wasm-ld%%LLVM_SUFFIX%%
+%%LLDB%%bin/lldb%%LLVM_SUFFIX%%
+%%LLDB%%bin/lldb-argdumper%%LLVM_SUFFIX%%
+%%LLDB%%bin/lldb-mi%%LLVM_SUFFIX%%
+%%LLDB%%bin/lldb-server%%LLVM_SUFFIX%%
+%%LLDB%%bin/lldb-test%%LLVM_SUFFIX%%
+%%LIT%%bin/FileCheck%%LLVM_SUFFIX%%
+%%LIT%%llvm%%LLVM_SUFFIX%%/bin/FileCheck
+%%LIT%%bin/lit%%LLVM_SUFFIX%%
+%%LIT%%llvm%%LLVM_SUFFIX%%/bin/lit
+%%LIT%%bin/llvm-lit%%LLVM_SUFFIX%%
+%%LIT%%llvm%%LLVM_SUFFIX%%/bin/llvm-lit
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/__init__.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/_lldb.so
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/embedded_interpreter.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/Logger.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/__init__.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/attrib_fromdict.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/cache.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/cpp/__init__.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/cpp/gnu_libstdcpp.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/cpp/libcxx.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/metrics.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/formatters/synth.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/lldb-argdumper
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/runtime/__init__.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/utils/__init__.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/lldb/utils/symbolication.py
+%%LLDB%%llvm%%LLVM_LIB_VER%%/%%PYTHON_SITELIBDIR%%/six.py
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/asan_blacklist.txt
+llvm%%LLVM_LIB_VER%%/bin/bugpoint
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/c-index-test
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang++
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-%%LLVM_MAJOR%%
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-apply-replacements
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-change-namespace
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-check
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-cl
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-cpp
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-format
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-func-mapping
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-import-test
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-include-fixer
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-offload-bundler
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-query
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-refactor
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-rename
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-reorder-fields
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/clang-tblgen
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clang-tidy
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/clangd
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/find-all-symbols
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/git-clang-format
+%%LLD%%llvm%%LLVM_LIB_VER%%/bin/ld.lld
+%%LLD%%llvm%%LLVM_LIB_VER%%/bin/ld64.lld
+llvm%%LLVM_LIB_VER%%/bin/llc
+%%LLD%%llvm%%LLVM_LIB_VER%%/bin/lld
+%%LLD%%llvm%%LLVM_LIB_VER%%/bin/lld-link
+%%LLDB%%llvm%%LLVM_LIB_VER%%/bin/lldb
+%%LLDB%%llvm%%LLVM_LIB_VER%%/bin/lldb-argdumper
+%%LLDB%%llvm%%LLVM_LIB_VER%%/bin/lldb-mi
+%%LLDB%%llvm%%LLVM_LIB_VER%%/bin/lldb-server
+%%LLDB%%llvm%%LLVM_LIB_VER%%/bin/lldb-test
+llvm%%LLVM_LIB_VER%%/bin/lli
+llvm%%LLVM_LIB_VER%%/bin/llvm-ar
+llvm%%LLVM_LIB_VER%%/bin/llvm-as
+llvm%%LLVM_LIB_VER%%/bin/llvm-bcanalyzer
+llvm%%LLVM_LIB_VER%%/bin/llvm-c-test
+llvm%%LLVM_LIB_VER%%/bin/llvm-cat
+llvm%%LLVM_LIB_VER%%/bin/llvm-cfi-verify
+llvm%%LLVM_LIB_VER%%/bin/llvm-config
+llvm%%LLVM_LIB_VER%%/bin/llvm-cov
+llvm%%LLVM_LIB_VER%%/bin/llvm-cvtres
+llvm%%LLVM_LIB_VER%%/bin/llvm-cxxdump
+llvm%%LLVM_LIB_VER%%/bin/llvm-cxxfilt
+llvm%%LLVM_LIB_VER%%/bin/llvm-diff
+llvm%%LLVM_LIB_VER%%/bin/llvm-dis
+llvm%%LLVM_LIB_VER%%/bin/llvm-dlltool
+llvm%%LLVM_LIB_VER%%/bin/llvm-dsymutil
+llvm%%LLVM_LIB_VER%%/bin/llvm-dwarfdump
+llvm%%LLVM_LIB_VER%%/bin/llvm-dwp
+llvm%%LLVM_LIB_VER%%/bin/llvm-extract
+llvm%%LLVM_LIB_VER%%/bin/llvm-lib
+llvm%%LLVM_LIB_VER%%/bin/llvm-link
+llvm%%LLVM_LIB_VER%%/bin/llvm-lto
+llvm%%LLVM_LIB_VER%%/bin/llvm-lto2
+llvm%%LLVM_LIB_VER%%/bin/llvm-mc
+llvm%%LLVM_LIB_VER%%/bin/llvm-mcmarkup
+llvm%%LLVM_LIB_VER%%/bin/llvm-modextract
+llvm%%LLVM_LIB_VER%%/bin/llvm-mt
+llvm%%LLVM_LIB_VER%%/bin/llvm-nm
+llvm%%LLVM_LIB_VER%%/bin/llvm-objcopy
+llvm%%LLVM_LIB_VER%%/bin/llvm-objdump
+llvm%%LLVM_LIB_VER%%/bin/llvm-opt-report
+llvm%%LLVM_LIB_VER%%/bin/llvm-pdbutil
+llvm%%LLVM_LIB_VER%%/bin/llvm-profdata
+llvm%%LLVM_LIB_VER%%/bin/llvm-ranlib
+llvm%%LLVM_LIB_VER%%/bin/llvm-rc
+llvm%%LLVM_LIB_VER%%/bin/llvm-readelf
+llvm%%LLVM_LIB_VER%%/bin/llvm-readobj
+llvm%%LLVM_LIB_VER%%/bin/llvm-rtdyld
+llvm%%LLVM_LIB_VER%%/bin/llvm-size
+llvm%%LLVM_LIB_VER%%/bin/llvm-split
+llvm%%LLVM_LIB_VER%%/bin/llvm-stress
+llvm%%LLVM_LIB_VER%%/bin/llvm-strings
+llvm%%LLVM_LIB_VER%%/bin/llvm-symbolizer
+llvm%%LLVM_LIB_VER%%/bin/llvm-tblgen
+llvm%%LLVM_LIB_VER%%/bin/llvm-xray
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/bin/modularize
+llvm%%LLVM_LIB_VER%%/bin/obj2yaml
+llvm%%LLVM_LIB_VER%%/bin/opt
+llvm%%LLVM_LIB_VER%%/bin/sancov
+llvm%%LLVM_LIB_VER%%/bin/sanstats
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/scan-build
+%%CLANG%%llvm%%LLVM_LIB_VER%%/bin/scan-view
+llvm%%LLVM_LIB_VER%%/bin/verify-uselistorder
+%%LLD%%llvm%%LLVM_LIB_VER%%/bin/wasm-ld
+llvm%%LLVM_LIB_VER%%/bin/yaml2obj
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/cfi_blacklist.txt
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/BuildSystem.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/CXCompilationDatabase.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/CXErrorCode.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/CXString.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/Documentation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/Index.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang-c/Platform.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ARCMigrate/ARCMT.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ARCMigrate/ARCMTActions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ARCMigrate/FileRemapper.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/APValue.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/AST.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTContext.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTFwd.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTImporter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTLambda.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTMutationListener.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTStructuralEquivalence.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTTypeTraits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTUnresolvedSet.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ASTVector.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Attr.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/AttrDump.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/AttrImpl.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/AttrIterator.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/AttrVisitor.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Attrs.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Availability.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/BaseSubobject.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/BuiltinTypes.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CXXInheritance.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CanonicalType.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CharUnits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Comment.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentBriefParser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentCommandInfo.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentCommandList.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentCommandTraits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentHTMLNamedCharacterReferences.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentHTMLTags.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentHTMLTagsProperties.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentLexer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentNodes.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentParser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentSema.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/CommentVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DataCollection.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Decl.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclAccessPair.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclBase.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclCXX.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclContextInternals.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclFriend.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclGroup.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclLookups.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclNodes.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclObjC.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclOpenMP.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclTemplate.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DeclarationName.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/DependentDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/EvaluatedExprVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Expr.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ExprCXX.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ExprObjC.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ExprOpenMP.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ExternalASTMerger.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ExternalASTSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/GlobalDecl.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/LambdaCapture.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/LocInfoType.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Mangle.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/MangleNumberingContext.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/NSAPI.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/NestedNameSpecifier.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ODRHash.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/OpenMPClause.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/OperationKinds.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/OperationKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/ParentMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/PrettyPrinter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/QualTypeNames.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/RawCommentList.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/RecordLayout.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/RecursiveASTVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Redeclarable.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/SelectorLocationsKind.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Stmt.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtCXX.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtDataCollectors.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtGraphTraits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtIterator.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtNodes.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtObjC.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtOpenMP.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/StmtVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TemplateBase.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TemplateName.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/Type.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeLoc.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeLocNodes.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeLocVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeNodes.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeOrdering.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/TypeVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/UnresolvedSet.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/VTTBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/AST/VTableBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/ASTMatchFinder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/ASTMatchers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/ASTMatchersInternal.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/ASTMatchersMacros.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/Dynamic/Diagnostics.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/Dynamic/Parser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/Dynamic/Registry.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/ASTMatchers/Dynamic/VariantValue.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/CFGReachabilityAnalysis.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/Consumed.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/Dominators.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/FormatString.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/LiveVariables.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/OSLog.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/PostOrderCFGView.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/PseudoConstantAnalysis.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ReachableCode.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafety.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyCommon.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyLogical.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyOps.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/ThreadSafetyUtil.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Analyses/UninitializedValues.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/AnalysisDeclContext.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/AnalysisDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/BodyFarm.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/CFG.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/CFGStmtMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/CallGraph.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/CloneDetection.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/CodeInjector.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/DomainSpecific/CocoaConventions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/DomainSpecific/ObjCNoReturn.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/FlowSensitive/DataflowValues.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/ProgramPoint.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Analysis/Support/BumpVector.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/ABI.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AddressSpaces.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AlignedAllocation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AllDiagnostics.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AttrHasAttributeImpl.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AttrKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AttrList.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AttrSubMatchRulesList.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/AttrSubjectMatchRules.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Attributes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Builtins.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Builtins.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsAArch64.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsAMDGPU.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsARM.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsHexagon.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsLe64.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsMips.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsNEON.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsNVPTX.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsNios2.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsPPC.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsSystemZ.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsWebAssembly.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsX86.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsX86_64.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/BuiltinsXCore.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/CapturedStmt.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/CharInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/CommentOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Cuda.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DebugInfoOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Diagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticASTKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticAnalysisKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticCategories.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticCommentKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticCommonKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticCrossTUKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticDriverKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticError.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticFrontendKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticGroups.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticIDs.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticIndexName.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticLexKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticOptions.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticParseKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticRefactoringKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticSemaKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/DiagnosticSerializationKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/ExceptionSpecificationType.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/ExpressionTraits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/FileManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/FileSystemOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/FileSystemStatCache.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/IdentifierTable.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/LLVM.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Lambda.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/LangOptions.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/LangOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Linkage.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/MacroBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/MemoryBufferCache.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Module.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/ObjCRuntime.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OpenCLExtensions.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OpenCLImageTypes.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OpenCLOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OpenMPKinds.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OpenMPKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OperatorKinds.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OperatorKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/OperatorPrecedence.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/PartialDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/PlistSupport.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/PragmaKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/PrettyStackTrace.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SanitizerBlacklist.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SanitizerSpecialCaseList.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Sanitizers.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Sanitizers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SourceLocation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SourceManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SourceManagerInternals.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Specifiers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/SyncScope.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TargetBuiltins.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TargetCXXABI.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TargetInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TargetOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TemplateKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TokenKinds.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TokenKinds.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/TypeTraits.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Version.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Version.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/VersionTuple.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/VirtualFileSystem.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/Visibility.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/X86Target.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/XRayLists.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Basic/arm_neon.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/BackendUtil.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/CGFunctionInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/CodeGenABITypes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/CodeGenAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/ConstantInitBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/ConstantInitFuture.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/ModuleBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CodeGen/SwiftCallingConv.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Config/config.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CrossTU/CrossTUDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/CrossTU/CrossTranslationUnit.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Action.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Compilation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Distro.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Driver.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/DriverDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Job.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Multilib.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Options.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Options.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Phases.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/SanitizerArgs.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Tool.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/ToolChain.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Types.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Types.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/Util.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Driver/XRayArgs.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Edit/Commit.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Edit/EditedSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Edit/EditsReceiver.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Edit/FileOffset.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Edit/Rewriters.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Format/Format.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/ASTConsumers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/ASTUnit.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/ChainedDiagnosticConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/CodeGenOptions.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/CodeGenOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/CommandLineSourceLoc.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/CompilerInstance.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/CompilerInvocation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/DependencyOutputOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/DiagnosticRenderer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/FrontendAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/FrontendActions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/FrontendDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/FrontendOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/FrontendPluginRegistry.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/LangStandard.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/LangStandards.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/LayoutOverrideSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/LogDiagnosticPrinter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/MigratorOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/MultiplexConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/PCHContainerOperations.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/PrecompiledPreamble.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/PreprocessorOutputOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/SerializedDiagnosticPrinter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/SerializedDiagnosticReader.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/SerializedDiagnostics.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/TextDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/TextDiagnosticBuffer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/TextDiagnosticPrinter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/Utils.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Frontend/VerifyDiagnosticConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/FrontendTool/Utils.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/CodegenNameGenerator.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/CommentToXML.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/IndexDataConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/IndexSymbol.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/IndexingAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Index/USRGeneration.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/CodeCompletionHandler.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/DirectoryLookup.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/ExternalPreprocessorSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/HeaderMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/HeaderMapTypes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/HeaderSearch.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/HeaderSearchOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/LexDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/Lexer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/LiteralSupport.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/MacroArgs.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/MacroInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/ModuleLoader.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/ModuleMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/MultipleIncludeOpt.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PPCallbacks.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PPConditionalDirectiveRecord.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PTHLexer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PTHManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/Pragma.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PreprocessingRecord.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/Preprocessor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PreprocessorLexer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/PreprocessorOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/ScratchBuffer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/Token.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/TokenConcatenation.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/TokenLexer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Lex/VariadicMacroSupport.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/AttrParserStringSwitches.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/AttrSubMatchRulesParserStringSwitches.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/ParseAST.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/ParseDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/Parser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Parse/RAIIObjectsForParser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/DeltaTree.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/HTMLRewrite.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/RewriteBuffer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/RewriteRope.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/Rewriter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Core/TokenRewriter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Frontend/ASTConsumers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Frontend/FixItRewriter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Frontend/FrontendActions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Rewrite/Frontend/Rewriters.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AnalysisBasedWarnings.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttrParsedAttrImpl.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttrParsedAttrKinds.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttrParsedAttrList.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttrSpellingListIndex.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttrTemplateInstantiate.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/AttributeList.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/CXXFieldCollector.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/CleanupInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/CodeCompleteConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/CodeCompleteOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/DeclSpec.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/DelayedDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Designator.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/ExternalSemaSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/IdentifierResolver.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Initialization.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Lookup.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/LoopHint.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/MultiplexExternalSemaSource.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/ObjCMethodList.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Overload.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Ownership.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/ParsedTemplate.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/PrettyDeclStackTrace.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Scope.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/ScopeInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Sema.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/SemaConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/SemaDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/SemaFixItUtils.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/SemaInternal.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/SemaLambda.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Template.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/TemplateDeduction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/TypoCorrection.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Sema/Weak.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ASTBitCodes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ASTDeserializationListener.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ASTReader.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ASTWriter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/AttrPCHRead.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/AttrPCHWrite.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ContinuousRangeMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/GlobalModuleIndex.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/Module.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ModuleFileExtension.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/ModuleManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Serialization/SerializationDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/Checkers.inc
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/ClangCheckers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/LocalCheckers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Checkers/SValExplainer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/Analyses.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/BugReporter/CommonBugCategories.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/Checker.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/CheckerManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/IssueHash.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/FunctionSummary.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/LoopUnrolling.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/Regions.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SValVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SummaryManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/Symbols.def
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Core/PathSensitive/WorkList.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/StaticAnalyzer/Frontend/ModelConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/ASTDiff/ASTDiff.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/ASTDiff/ASTDiffInternal.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/ArgumentsAdjusters.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/CommonOptionsParser.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/CompilationDatabase.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/CompilationDatabasePluginRegistry.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Core/Diagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Core/Lookup.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Core/Replacement.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/DiagnosticsYaml.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Execution.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/FileMatchTrie.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/FixIt.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/JSONCompilationDatabase.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/ASTSelection.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/AtomicChange.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Extract/Extract.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringActionRule.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringActionRuleRequirements.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringActionRules.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringDiagnostic.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringOption.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringOptionVisitor.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringOptions.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/RefactoringRuleContext.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/SymbolName.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/SymbolOccurrences.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/USRFinder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/USRFindingAction.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Refactoring/Rename/USRLocFinder.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/RefactoringCallbacks.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/ReplacementsYaml.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/StandaloneExecution.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/ToolExecutorPluginRegistry.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/include/clang/Tooling/Tooling.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Args.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Driver.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/ErrorHandler.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/LLVM.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Memory.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Reproduce.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Strings.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/TargetOptionsCommandFlags.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Threads.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Common/Version.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/AbsoluteAtom.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/ArchiveLibraryFile.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Atom.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/DefinedAtom.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Error.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/File.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Instrumentation.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/LinkingContext.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Node.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Pass.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/PassManager.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Reader.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Reference.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Resolver.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/SharedLibraryAtom.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/SharedLibraryFile.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Simple.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/SymbolTable.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/UndefinedAtom.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/Core/Writer.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/ReaderWriter/MachOLinkingContext.h
+%%LLD%%llvm%%LLVM_LIB_VER%%/include/lld/ReaderWriter/YamlContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/LLDB.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBAddress.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBAttachInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBBlock.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBBreakpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBBreakpointLocation.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBBreakpointName.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBBroadcaster.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBCommandInterpreter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBCommandReturnObject.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBCommunication.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBCompileUnit.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBData.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBDebugger.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBDeclaration.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBDefines.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBError.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBEvent.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBExecutionContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBExpressionOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBFileSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBFileSpecList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBFrame.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBFunction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBHostOS.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBInstruction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBInstructionList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBLanguageRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBLaunchInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBLineEntry.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBListener.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBMemoryRegionInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBMemoryRegionInfoList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBModule.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBModuleSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBPlatform.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBProcess.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBProcessInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBQueue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBQueueItem.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBSection.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBSourceManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBStream.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBStringList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBStructuredData.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBSymbol.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBSymbolContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBSymbolContextList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTarget.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBThread.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBThreadCollection.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBThreadPlan.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTrace.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTraceOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBType.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeCategory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeEnumMember.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeFilter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeFormat.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeNameSpecifier.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeSummary.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBTypeSynthetic.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBUnixSignals.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBValue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBValueList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBVariablesOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SBWatchpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/API/SystemInitializerFull.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/Breakpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointIDList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointLocation.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointLocationCollection.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointLocationList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointName.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointResolver.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointResolverAddress.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointResolverFileLine.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointResolverFileRegex.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointResolverName.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointSite.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/BreakpointSiteList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/Stoppoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/StoppointCallbackContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/StoppointLocation.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/Watchpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/WatchpointList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Breakpoint/WatchpointOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Address.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/AddressRange.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/AddressResolver.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/AddressResolverFileLine.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/AddressResolverName.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Architecture.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Broadcaster.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ClangForward.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Communication.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Debugger.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Disassembler.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/DumpDataExtractor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/EmulateInstruction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Event.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/FileLineResolver.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/FileSpecList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/FormatEntity.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/IOHandler.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/IOStreamMacros.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Listener.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/LoadedModuleInfoList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Mangled.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/MappedHash.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Module.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ModuleChild.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ModuleList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ModuleSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Opcode.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/PluginInterface.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/PluginManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/RangeMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/RegisterValue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/STLUtils.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Scalar.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/SearchFilter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Section.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/SourceManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/State.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/StreamAsynchronousIO.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/StreamBuffer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/StreamFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/StructuredDataImpl.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ThreadSafeDenseMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ThreadSafeDenseSet.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ThreadSafeSTLMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ThreadSafeSTLVector.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ThreadSafeValue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/UniqueCStringMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/UserSettingsController.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/Value.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObject.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectCast.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectChild.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectConstResult.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectConstResultCast.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectConstResultChild.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectConstResultImpl.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectDynamicValue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectMemory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectRegister.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectSyntheticFilter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/ValueObjectVariable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Core/dwarf.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/CXXFunctionPointer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/DataVisualization.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/DumpValueObjectOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/FormatCache.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/FormatClasses.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/FormatManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/FormattersContainer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/FormattersHelpers.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/LanguageCategory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/StringPrinter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeCategory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeCategoryMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeFormat.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeSummary.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeSynthetic.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/TypeValidator.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/ValueObjectPrinter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/VectorIterator.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/DataFormatters/VectorType.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/DWARFExpression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/DiagnosticManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/Expression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/ExpressionParser.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/ExpressionSourceCode.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/ExpressionTypeSystemHelper.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/ExpressionVariable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/FunctionCaller.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/IRDynamicChecks.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/IRExecutionUnit.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/IRInterpreter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/IRMemoryMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/LLVMUserExpression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/Materializer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/REPL.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/UserExpression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Expression/UtilityFunction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Config.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/ConnectionFileDescriptor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Debug.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Editline.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/File.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/FileCache.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/FileSystem.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Host.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostGetOpt.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostInfoBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostNativeProcess.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostNativeProcessBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostNativeThread.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostNativeThreadBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostNativeThreadForward.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostProcess.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/HostThread.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/LockFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/LockFileBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/MainLoop.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/MainLoopBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/MonitoringProcessLauncher.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/OptionParser.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Pipe.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/PipeBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/PosixApi.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Predicate.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/ProcessLauncher.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/ProcessRunLock.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/PseudoTerminal.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Socket.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/SocketAddress.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/StringConvert.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Symbols.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/TaskPool.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Terminal.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/ThreadLauncher.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/Time.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/XML.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/android/HostInfoAndroid.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/GetOptInc.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeBreakpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeBreakpointList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeProcessProtocol.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeRegisterContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeThreadProtocol.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/NativeWatchpointList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/SoftwareBreakpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/TCPSocket.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/common/UDPSocket.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/freebsd/HostInfoFreeBSD.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/linux/AbstractSocket.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/linux/HostInfoLinux.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/linux/Ptrace.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/linux/Support.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/linux/Uio.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/macosx/HostInfoMacOSX.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/macosx/HostThreadMacOSX.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/netbsd/HostInfoNetBSD.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/openbsd/HostInfoOpenBSD.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/ConnectionFileDescriptorPosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/DomainSocket.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/Fcntl.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/HostInfoPosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/HostProcessPosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/HostThreadPosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/LockFilePosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/PipePosix.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/posix/ProcessLauncherPosixFork.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/AutoHandle.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/ConnectionGenericFileWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/HostInfoWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/HostProcessWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/HostThreadWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/LockFileWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/PipeWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/PosixApi.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/ProcessLauncherWindows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/editlinewin.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Host/windows/windows.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Initialization/SystemInitializer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Initialization/SystemInitializerCommon.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Initialization/SystemLifetimeManager.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/Args.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandAlias.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandCompletions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandHistory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandInterpreter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandObject.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandObjectMultiword.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandObjectRegexCommand.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandOptionValidators.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/CommandReturnObject.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupArchitecture.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupBoolean.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupFormat.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupOutputFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupPlatform.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupString.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupUInt64.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupUUID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupValueObjectDisplay.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupVariable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionGroupWatchpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueArch.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueArgs.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueArray.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueBoolean.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueChar.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueDictionary.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueEnumeration.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueFileSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueFileSpecList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueFormat.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueFormatEntity.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueLanguage.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValuePathMappings.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueProperties.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueRegex.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueSInt64.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueString.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueUInt64.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValueUUID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/OptionValues.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/Options.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/Property.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Interpreter/ScriptInterpreter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ArmUnwindInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Block.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ClangASTContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ClangASTImporter.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ClangExternalASTSourceCallbacks.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ClangExternalASTSourceCommon.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ClangUtil.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/CompactUnwindInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/CompileUnit.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/CompilerDecl.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/CompilerDeclContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/CompilerType.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/DWARFCallFrameInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/DebugMacros.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/DeclVendor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Declaration.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/FuncUnwinders.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Function.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/GoASTContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/JavaASTContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/LineEntry.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/LineTable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/OCamlASTContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ObjectContainer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/ObjectFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Symbol.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/SymbolContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/SymbolContextScope.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/SymbolFile.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/SymbolVendor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Symtab.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/TaggedASTType.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Type.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/TypeList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/TypeMap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/TypeSystem.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/UnwindPlan.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/UnwindTable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/Variable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/VariableList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Symbol/VerifyDecl.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ABI.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/CPPLanguageRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/DynamicLoader.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ExecutionContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ExecutionContextScope.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/FileAction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/InstrumentationRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/InstrumentationRuntimeStopInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/JITLoader.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/JITLoaderList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Language.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/LanguageRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Memory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/MemoryHistory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/MemoryRegionInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ModuleCache.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ObjCLanguageRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/OperatingSystem.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/PathMappingList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Platform.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Process.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ProcessInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ProcessLaunchInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ProcessStructReader.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Queue.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/QueueItem.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/QueueList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/RegisterCheckpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/RegisterContext.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/RegisterNumber.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/SectionLoadHistory.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/SectionLoadList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/StackFrame.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/StackFrameList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/StackID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/StopInfo.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/StructuredDataPlugin.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/SystemRuntime.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Target.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/TargetList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Thread.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadCollection.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlan.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanBase.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanCallFunction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanCallFunctionUsingABI.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanCallOnFunctionExit.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanCallUserExpression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanPython.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanRunToAddress.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanShouldStopHere.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepInRange.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepInstruction.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepOut.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepOverBreakpoint.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepOverRange.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepRange.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepThrough.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanStepUntil.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadPlanTracer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/ThreadSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/UnixSignals.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/Unwind.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Target/UnwindAssembly.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/AnsiTerminal.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/ArchSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Baton.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/CleanUp.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Connection.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/ConstString.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/DataBuffer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/DataBufferHeap.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/DataBufferLLVM.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/DataEncoder.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/DataExtractor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Either.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Endian.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/FastDemangle.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/FileSpec.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Flags.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/History.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/IOObject.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Iterable.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/JSON.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/LLDBAssert.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Log.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Logging.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/NameMatches.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Range.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/RegularExpression.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/SafeMachO.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/SelectHelper.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/SharedCluster.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/SharingPtr.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Status.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Stream.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StreamCallback.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StreamGDBRemote.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StreamString.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StreamTee.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StringExtractor.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StringLexer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StringList.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/StructuredData.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/TildeExpressionResolver.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Timeout.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/Timer.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/TraceOptions.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/UUID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/UriParser.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/UserID.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/VASPrintf.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/Utility/VMRange.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-defines.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-enumerations.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-forward.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private-defines.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private-enumerations.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private-forward.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private-interfaces.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private-types.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-private.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-public.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-types.h
+%%LLDB%%llvm%%LLVM_LIB_VER%%/include/lldb/lldb-versioning.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Analysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/BitReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/BitWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Core.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/DebugInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Disassembler.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/ErrorHandling.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/ExecutionEngine.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/IRReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Initialization.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/LinkTimeOptimizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Linker.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Object.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/OrcBindings.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Support.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Target.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/TargetMachine.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Transforms/IPO.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Transforms/PassManagerBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Transforms/Scalar.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Transforms/Vectorize.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/Types.h
+llvm%%LLVM_LIB_VER%%/include/llvm-c/lto.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/APFloat.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/APInt.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/APSInt.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/AllocatorList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ArrayRef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/BitVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/BitmaskEnum.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/BreadthFirstIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/CachedHashString.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DAGDeltaAlgorithm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DeltaAlgorithm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DenseMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DenseMapInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DenseSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/DepthFirstIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/EpochTracker.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/EquivalenceClasses.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/FoldingSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/GraphTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Hashing.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ImmutableList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ImmutableMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ImmutableSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/IndexedMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/IntEqClasses.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/IntervalMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/IntrusiveRefCntPtr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/MapVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/None.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Optional.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PackedVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PointerEmbeddedInt.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PointerIntPair.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PointerSumType.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PointerUnion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PostOrderIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PriorityQueue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/PriorityWorklist.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SCCIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/STLExtras.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ScopeExit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ScopedHashTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Sequence.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SetOperations.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SetVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SmallBitVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SmallPtrSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SmallSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SmallString.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SmallVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SparseBitVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SparseMultiSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/SparseSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Statistic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/StringExtras.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/StringMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/StringRef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/StringSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/StringSwitch.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/TinyPtrVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Triple.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/Twine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/UniqueVector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/VariadicFunction.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/edit_distance.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist_base.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist_iterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist_node.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist_node_base.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/ilist_node_options.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/iterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/iterator_range.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ADT/simple_ilist.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/AliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/AliasAnalysisEvaluator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/AliasSetTracker.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/AssumptionCache.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/BasicAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/BlockFrequencyInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/BlockFrequencyInfoImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/BranchProbabilityInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CFG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CFGPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CFLAliasAnalysisUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CFLAndersAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CFLSteensAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CGSCCPassManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CallGraph.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CallGraphSCCPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CallPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CaptureTracking.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CmpInstAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/CodeMetrics.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ConstantFolding.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DOTGraphTraitsPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DemandedBits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DependenceAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DivergenceAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DomPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DominanceFrontier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/DominanceFrontierImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/EHPersonalities.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/GlobalsModRef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IVUsers.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IndirectCallPromotionAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IndirectCallSiteVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/InlineCost.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/InstructionSimplify.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/Interval.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IntervalIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IntervalPartition.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/IteratedDominanceFrontier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LazyBlockFrequencyInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LazyBranchProbabilityInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LazyCallGraph.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LazyValueInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/Lint.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/Loads.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopAccessAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopAnalysisManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopInfoImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/LoopUnrollAnalyzer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/MemoryBuiltins.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/MemoryDependenceAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/MemoryLocation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/MemorySSA.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/MemorySSAUpdater.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ModuleSummaryAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ObjCARCAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ObjCARCAnalysisUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ObjCARCInstKind.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ObjectUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/OptimizationRemarkEmitter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/OrderedBasicBlock.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/PHITransAddr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/Passes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/PostDominators.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ProfileSummaryInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/PtrUseVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/RegionInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/RegionInfoImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/RegionIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/RegionPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/RegionPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScalarEvolution.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScalarEvolutionExpander.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScalarEvolutionExpressions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScalarEvolutionNormalization.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ScopedNoAliasAA.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/SparsePropagation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TargetFolder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TargetLibraryInfo.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TargetLibraryInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TargetTransformInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TargetTransformInfoImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/Trace.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TypeBasedAliasAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/TypeMetadataUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ValueLattice.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ValueLatticeUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/ValueTracking.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Analysis/VectorUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/AsmParser/Parser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/AsmParser/SlotMapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/COFF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/Dwarf.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/Dwarf.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/AArch64.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/AMDGPU.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/ARC.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/ARM.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/AVR.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/BPF.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/Hexagon.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/Lanai.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/Mips.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/PowerPC.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/PowerPC64.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/RISCV.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/Sparc.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/SystemZ.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/WebAssembly.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/i386.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/ELFRelocs/x86_64.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/MachO.def
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/MachO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/Magic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/Wasm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/BinaryFormat/WasmRelocs.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitCodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitcodeReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitcodeWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitcodeWriterPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitstreamReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/BitstreamWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Bitcode/LLVMBitCodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/Analysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/AsmPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/AtomicExpandUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/BasicTTIImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/CalcSpillWeights.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/CallingConvLower.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/CommandFlags.def
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/CostTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/DAGCombine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/DFAPacketizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/DIE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/DIEValue.def
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/DwarfStringPoolEntry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/EdgeBundles.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ExecutionDepsFix.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ExpandReductions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/FastISel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/FaultMaps.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/FunctionLoweringInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GCMetadata.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GCMetadataPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GCStrategy.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GCs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/CallLowering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/GISelWorkList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/IRTranslator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/InstructionSelect.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/InstructionSelector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/Legalizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/Localizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/RegBankSelect.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/RegisterBank.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/RegisterBankInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/Types.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/GlobalISel/Utils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ISDOpcodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/IntrinsicLowering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LatencyPriorityQueue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LexicalScopes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LinkAllAsmWriterComponents.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LinkAllCodegenComponents.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveInterval.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveIntervalUnion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveIntervals.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LivePhysRegs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveRangeEdit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveRegMatrix.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveRegUnits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveStacks.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LiveVariables.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/LowLevelType.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MIRParser/MIRParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MIRPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MIRYamlMapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachORelocation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineBasicBlock.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineBlockFrequencyInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineBranchProbabilityInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineCombinerPattern.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineConstantPool.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineDominanceFrontier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineDominators.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineFrameInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineFunction.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineFunctionPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineInstr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineInstrBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineInstrBundle.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineInstrBundleIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineJumpTableInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineLoopInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineMemOperand.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineModuleInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineModuleInfoImpls.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineOperand.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachinePassRegistry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachinePostDominators.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineRegionInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineRegisterInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineSSAUpdater.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineScheduler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineTraceMetrics.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MachineValueType.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/MacroFusion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQP/CostAllocator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQP/Graph.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQP/Math.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQP/ReductionRules.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQP/Solution.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PBQPRAConstraint.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ParallelCG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/Passes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PreISelIntrinsicLowering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/PseudoSourceValue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegAllocPBQP.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegAllocRegistry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegisterClassInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegisterPressure.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegisterScavenging.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RegisterUsageInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ResourcePriorityQueue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RuntimeLibcalls.def
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/RuntimeLibcalls.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SDNodeProperties.td
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScheduleDAG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScheduleDAGInstrs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScheduleDAGMutation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScheduleDFS.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScheduleHazardRecognizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SchedulerRegistry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ScoreboardHazardRecognizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SelectionDAG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SelectionDAGAddressAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SelectionDAGISel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SelectionDAGNodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SelectionDAGTargetInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/SlotIndexes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/StackMaps.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/StackProtector.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TailDuplicator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetCallingConv.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetFrameLowering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetInstrInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetLowering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetLoweringObjectFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetOpcodes.def
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetOpcodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetPassConfig.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetRegisterInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetSchedule.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/TargetSubtargetInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/UnreachableBlockElim.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ValueTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/ValueTypes.td
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/VirtRegMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/CodeGen/WinEHFuncInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/AsmParsers.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/AsmPrinters.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/Disassemblers.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/Targets.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/abi-breaking.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Config/llvm-config.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/AppendingTypeTableBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CVDebugRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CVRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CVSymbolVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CVTypeVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeView.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeViewError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/CodeViewTypes.def
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugCrossExSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugLinesSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugStringTableSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugSubsectionRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugSymbolRVASubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/DebugUnknownSubsection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/EnumTables.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/Formatters.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/FunctionId.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/GUID.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/Line.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/MergingTypeTableBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/RecordName.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/RecordSerialization.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SimpleTypeSerializer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/StringsAndChecksums.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolDeserializer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolDumpDelegate.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolDumper.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolRecordMapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolSerializer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolVisitorCallbackPipeline.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/SymbolVisitorDelegate.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeCollection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeDeserializer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeDumpVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeHashing.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeIndex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeIndexDiscovery.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeRecordMapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeSymbolEmitter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeTableCollection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DIContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFAttribute.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugAranges.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugFrame.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugMacro.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFDie.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFExpression.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFFormValue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFGdbIndex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFObject.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFRelocMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFSection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFUnit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFUnitIndex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/MSF/IMSFFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/MSF/MSFBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/MSF/MSFCommon.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/MSF/MSFError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/MSF/MappedBlockStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/ConcreteSymbolEnumerator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIADataStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAEnumLineNumbers.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAEnumSourceFiles.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAEnumTables.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIAError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIALineNumber.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIASession.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIASourceFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIASupport.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/DIA/DIATable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/GenericError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBDataStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBEnumChildren.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBLineNumber.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBSession.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/IPDBTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/DbiModuleList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/DbiStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/EnumTables.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/Formatters.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/GSIStreamBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/GlobalsStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/Hash.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/HashTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/ISectionContribVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/InfoStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/InfoStreamBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NamedStreamMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeBuiltinSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeCompilandSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeEnumModules.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeEnumSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeEnumTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeExeSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeRawSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/NativeSession.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/PDBFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/PDBStringTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/PDBStringTableBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/PublicsStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/RawConstants.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/RawError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/RawTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/SymbolStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/TpiHashing.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/TpiStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/Native/TpiStreamBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDB.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBExtras.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymDumper.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolData.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/PDBTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/PDB/UDTLayout.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/Symbolize/DIPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/Symbolize/SymbolizableModule.h
+llvm%%LLVM_LIB_VER%%/include/llvm/DebugInfo/Symbolize/Symbolize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Demangle/Demangle.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/ExecutionEngine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/GenericValue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Interpreter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/JITEventListener.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/JITSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/MCJIT.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/OProfileWrapper.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/ObjectCache.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/ObjectMemoryBuffer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/CompileUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/LambdaResolver.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/NullResolver.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/OrcABISupport.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/OrcError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/RPCUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/RawByteChannel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/OrcMCJITReplacement.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/RTDyldMemoryManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/RuntimeDyld.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ExecutionEngine/SectionMemoryManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/FuzzerCLI.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/IRMutator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/OpDescriptor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/Operations.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/Random.h
+llvm%%LLVM_LIB_VER%%/include/llvm/FuzzMutate/RandomIRBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Argument.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/AssemblyAnnotationWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Attributes.gen
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Attributes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Attributes.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/AutoUpgrade.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/BasicBlock.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/CFG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/CallSite.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/CallingConv.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Comdat.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Constant.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ConstantFolder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ConstantRange.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Constants.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DIBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DataLayout.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DebugInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DebugInfoFlags.def
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DebugInfoMetadata.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DebugLoc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DerivedTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DerivedUser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DiagnosticHandler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DiagnosticInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/DiagnosticPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Dominators.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Function.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GVMaterializer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GetElementPtrTypeIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalAlias.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalIFunc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalIndirectSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalObject.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalValue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/GlobalVariable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IRBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IRPrintingPasses.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/InlineAsm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/InstIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/InstVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/InstrTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Instruction.def
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Instruction.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Instructions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicInst.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Intrinsics.gen
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Intrinsics.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Intrinsics.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsAArch64.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsAMDGPU.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsARM.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsBPF.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsHexagon.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsMips.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsNVVM.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsPowerPC.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsSystemZ.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsWebAssembly.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsX86.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/IntrinsicsXCore.td
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/LLVMContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/LegacyPassManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/LegacyPassManagers.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/LegacyPassNameParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/MDBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Mangler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Metadata.def
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Metadata.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Module.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ModuleSlotTracker.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ModuleSummaryIndex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ModuleSummaryIndexYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/NoFolder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/OperandTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Operator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/OptBisect.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/PassManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/PassManagerInternal.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/PatternMatch.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/PredIteratorCache.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ProfileSummary.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/SafepointIRVerifier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Statepoint.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/SymbolTableListTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/TrackingMDRef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Type.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/TypeBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/TypeFinder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Use.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/UseListOrder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/User.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Value.def
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Value.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ValueHandle.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ValueMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/ValueSymbolTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IR/Verifier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/IRReader/IRReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/InitializePasses.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/Caching.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/Config.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/LTO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/LTOBackend.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/legacy/LTOCodeGenerator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/legacy/LTOModule.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LTO/legacy/UpdateCompilerUsed.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LineEditor/LineEditor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LinkAllIR.h
+llvm%%LLVM_LIB_VER%%/include/llvm/LinkAllPasses.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Linker/IRMover.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Linker/Linker.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/ConstantPools.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/LaneBitmask.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmBackend.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmInfoCOFF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmInfoDarwin.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmInfoELF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmInfoWasm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmLayout.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAsmMacro.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCAssembler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCCodeEmitter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCCodePadder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCCodeView.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDirectives.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDisassembler/MCDisassembler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDisassembler/MCRelocationInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDisassembler/MCSymbolizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCDwarf.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCELFObjectWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCELFStreamer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCExpr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCFixedLenDisassembler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCFixup.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCFixupKindInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCFragment.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInst.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstrAnalysis.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstrDesc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstrInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCInstrItineraries.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCLabel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCLinkerOptimizationHint.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCMachObjectWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCObjectFileInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCObjectStreamer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCObjectWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/AsmCond.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/AsmLexer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCAsmLexer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCAsmParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCAsmParserExtension.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCAsmParserUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCParsedAsmOperand.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCParser/MCTargetAsmParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCRegisterInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSchedule.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSection.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSectionCOFF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSectionELF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSectionMachO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSectionWasm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCStreamer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSubtargetInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSymbol.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSymbolCOFF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSymbolELF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSymbolMachO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCSymbolWasm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCTargetOptions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCTargetOptionsCommandFlags.def
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCValue.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWasmObjectWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWasmStreamer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWin64EH.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWinCOFFObjectWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWinCOFFStreamer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MCWinEH.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/MachineLocation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/SectionKind.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/StringTableBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/MC/SubtargetFeature.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/Archive.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ArchiveWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/Binary.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/COFF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/COFFImportFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/COFFModuleDefinition.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/Decompressor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ELF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ELFObjectFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ELFTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/Error.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/IRObjectFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/IRSymtab.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/MachO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/MachOUniversal.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ModuleSymbolTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/ObjectFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/RelocVisitor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/StackMapParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/SymbolSize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/SymbolicFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/Wasm.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Object/WindowsResource.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/COFFYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/CodeViewYAMLDebugSections.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/CodeViewYAMLSymbols.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/CodeViewYAMLTypeHashing.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/CodeViewYAMLTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/DWARFEmitter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/DWARFYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/ELFYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/MachOYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/ObjectYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/WasmYAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ObjectYAML/YAML.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/Arg.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/ArgList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/OptParser.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/OptSpecifier.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/OptTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Option/Option.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Pass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/PassAnalysisSupport.h
+llvm%%LLVM_LIB_VER%%/include/llvm/PassInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/PassRegistry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/PassSupport.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Passes/PassBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/Coverage/CoverageMapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/GCOV.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/InstrProf.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/InstrProfData.inc
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/InstrProfReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/InstrProfWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/ProfileCommon.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/SampleProf.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/SampleProfReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ProfileData/SampleProfWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/AArch64TargetParser.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/AMDGPUKernelDescriptor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/AMDGPUMetadata.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ARMAttributeParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ARMBuildAttributes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ARMEHABI.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ARMTargetParser.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ARMWinEH.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/AlignOf.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Allocator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ArrayRecycler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Atomic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/AtomicOrdering.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryByteStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryItemStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStreamArray.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStreamError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStreamReader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStreamRef.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BinaryStreamWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BlockFrequency.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/BranchProbability.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CBindingWrapping.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/COM.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CachePruning.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Capacity.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Casting.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Chrono.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CodeGen.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CodeGenCWrappers.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CodeGenCoverage.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CommandLine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Compiler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Compression.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ConvertUTF.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/CrashRecoveryContext.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/DOTGraphTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/DataExtractor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/DataTypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Debug.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/DebugCounter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/DynamicLibrary.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Endian.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/EndianStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Errc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Errno.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Error.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ErrorHandling.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ErrorOr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FileOutputBuffer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FileSystem.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FileUtilities.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Format.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormatAdapters.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormatCommon.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormatProviders.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormatVariadic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormatVariadicDetails.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/FormattedStream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/GenericDomTree.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/GenericDomTreeConstruction.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/GlobPattern.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/GraphWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Host.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/JamCRC.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/KnownBits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/LEB128.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/LICENSE.TXT
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/LineIterator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Locale.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/LockFileManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/LowLevelTypeImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/MD5.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ManagedStatic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/MathExtras.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Memory.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/MemoryBuffer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/MipsABIFlags.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Mutex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/MutexGuard.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/NativeFormatting.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/OnDiskHashTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Options.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Parallel.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Path.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/PluginLoader.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/PointerLikeTypeTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/PrettyStackTrace.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Printable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Process.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Program.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/RWMutex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/RandomNumberGenerator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Recycler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/RecyclingAllocator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Regex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Registry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ReverseIteration.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SHA1.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SMLoc.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SaveAndRestore.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ScaledNumber.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ScopedPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Signals.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Solaris/sys/regset.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SourceMgr.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SpecialCaseList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/StringPool.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/StringSaver.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SwapByteOrder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/SystemUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TarWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TargetParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TargetRegistry.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TargetSelect.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ThreadLocal.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ThreadPool.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Threading.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Timer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/ToolOutputFile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TrailingObjects.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TrigramIndex.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/TypeName.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Unicode.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/UnicodeCharRanges.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/UniqueLock.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/VCSRevision.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Valgrind.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Watchdog.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/Win64EH.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/WindowsError.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/X86TargetParser.def
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/YAMLParser.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/YAMLTraits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/circular_raw_ostream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/raw_os_ostream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/raw_ostream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/raw_sha1_ostream.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/thread.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/type_traits.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Support/xxhash.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/Error.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/Main.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/Record.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/SearchableTable.td
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/SetTheory.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/StringMatcher.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/StringToOffsetTable.h
+llvm%%LLVM_LIB_VER%%/include/llvm/TableGen/TableGenBackend.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/GenericOpcodes.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/GlobalISel/RegisterBank.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/GlobalISel/Target.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/Target.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetCallingConv.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetIntrinsicInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetItinerary.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetMachine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetOptions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetSchedule.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Target/TargetSelectionDAG.td
+llvm%%LLVM_LIB_VER%%/include/llvm/Testing/Support/Error.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Testing/Support/SupportHelpers.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ToolDrivers/llvm-dlltool/DlltoolDriver.h
+llvm%%LLVM_LIB_VER%%/include/llvm/ToolDrivers/llvm-lib/LibDriver.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Coroutines.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/GCOVProfiler.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/AlwaysInliner.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/ArgumentPromotion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/CalledValuePropagation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/ConstantMerge.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/CrossDSOCFI.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/DeadArgumentElimination.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/ElimAvailExtern.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/ForceFunctionAttrs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/FunctionAttrs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/FunctionImport.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/GlobalDCE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/GlobalOpt.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/GlobalSplit.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/InferFunctionAttrs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/Inliner.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/Internalize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/LowerTypeTests.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/PartialInlining.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/PassManagerBuilder.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/SCCP.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/StripDeadPrototypes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/ThinLTOBitcodeWriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/IPO/WholeProgramDevirt.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/InstCombine/InstCombine.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/InstCombine/InstCombineWorklist.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/InstrProfiling.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Instrumentation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Instrumentation/BoundsChecking.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/ObjCARC.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/PGOInstrumentation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/SampleProfile.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/ADCE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/AlignmentFromAssumptions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/BDCE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/CallSiteSplitting.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/ConstantHoisting.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/CorrelatedValuePropagation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/DCE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/DeadStoreElimination.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/DivRemPairs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/EarlyCSE.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/Float2Int.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/GVN.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/GVNExpression.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/GuardWidening.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/IVUsersPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/IndVarSimplify.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/JumpThreading.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LICM.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopDataPrefetch.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopDeletion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopDistribute.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopIdiomRecognize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopInstSimplify.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopLoadElimination.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopPassManager.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopPredication.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopRotation.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopSimplifyCFG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopSink.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopStrengthReduce.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LoopUnrollPass.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LowerAtomic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/LowerGuardIntrinsic.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/MemCpyOptimizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/NaryReassociate.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/NewGVN.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/PartiallyInlineLibCalls.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/Reassociate.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/RewriteStatepointsForGC.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SCCP.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SROA.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SimplifyCFG.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/Sink.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/SpeculativeExecution.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Scalar/TailRecursionElimination.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/ASanStackFrameLayout.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/AddDiscriminators.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/BasicBlockUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/BreakCriticalEdges.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/BuildLibCalls.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/BypassSlowDivision.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/CallPromotionUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/Cloning.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/CodeExtractor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/CtorUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/EntryExitInstrumenter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/EscapeEnumerator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/Evaluator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/FunctionComparator.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/FunctionImportUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/GlobalStatus.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/IntegerDivision.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LCSSA.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LibCallsShrinkWrap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/Local.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LoopSimplify.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LoopUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LoopVersioning.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LowerInvoke.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/LowerMemIntrinsics.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/Mem2Reg.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/ModuleUtils.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/NameAnonGlobals.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/OrderedInstructions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/PredicateInfo.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/PromoteMemToReg.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SSAUpdater.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SanitizerStats.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SimplifyIndVar.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SimplifyInstructions.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SimplifyLibCalls.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SplitModule.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/SymbolRewriter.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/UnifyFunctionExitNodes.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/UnrollLoop.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/VNCoercion.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Utils/ValueMapper.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Vectorize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Vectorize/LoopVectorize.h
+llvm%%LLVM_LIB_VER%%/include/llvm/Transforms/Vectorize/SLPVectorizer.h
+llvm%%LLVM_LIB_VER%%/include/llvm/WindowsManifest/WindowsManifestMerger.h
+llvm%%LLVM_LIB_VER%%/include/llvm/WindowsResource/ResourceProcessor.h
+llvm%%LLVM_LIB_VER%%/include/llvm/WindowsResource/ResourceScriptToken.h
+llvm%%LLVM_LIB_VER%%/include/llvm/WindowsResource/ResourceScriptTokenList.h
+llvm%%LLVM_LIB_VER%%/include/llvm/XRay/Graph.h
+llvm%%LLVM_LIB_VER%%/include/llvm/XRay/InstrumentationMap.h
+llvm%%LLVM_LIB_VER%%/include/llvm/XRay/Trace.h
+llvm%%LLVM_LIB_VER%%/include/llvm/XRay/XRayRecord.h
+llvm%%LLVM_LIB_VER%%/include/llvm/XRay/YAMLXRayRecord.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/allocator_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/asan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/common_interface_defs.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/coverage_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/dfsan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/esan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/hwasan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/linux_syscall_hooks.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/lsan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/msan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/scudo_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/tsan_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/sanitizer/tsan_interface_atomic.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/xray/xray_interface.h
+%%COMPILER_RT%%llvm%%LLVM_LIB_VER%%/include/xray/xray_log_interface.h
+llvm%%LLVM_LIB_VER%%/lib/BugpointPasses.so
+llvm%%LLVM_LIB_VER%%/lib/LLVMHello.so
+%%GOLD%%llvm%%LLVM_LIB_VER%%/lib/LLVMgold.so
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_builtin_vars.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_cmath.h
+%%CLANG%%%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_complex_builtins.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_intrinsics.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_math_forward_declares.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_runtime_wrapper.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__stddef_max_align_t.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__wmmintrin_aes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/__wmmintrin_pclmul.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/adxintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/altivec.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/ammintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/arm64intr.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/arm_acle.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/arm_neon.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/armintr.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx2intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512bitalgintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512bwintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512cdintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512dqintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512erintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512fintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512ifmaintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512ifmavlintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512pfintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vbmi2intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vbmiintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vbmivlintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlbitalgintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlbwintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlcdintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vldqintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlvbmi2intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vlvnniintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vnniintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vpopcntdqintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avx512vpopcntdqvlintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/avxintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/bmi2intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/bmiintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/cetintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/clflushoptintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/clwbintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/clzerointrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/cpuid.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/cuda_wrappers/algorithm
+%%CLANG%%%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/cuda_wrappers/complex
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/cuda_wrappers/new
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/emmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/f16cintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/float.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/fma4intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/fmaintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/fxsrintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/gfniintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/htmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/htmxlintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/ia32intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/immintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/inttypes.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/iso646.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/lwpintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/lzcntintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/mm3dnow.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/mm_malloc.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/mmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/module.modulemap
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/msa.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/mwaitxintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/nmmintrin.h
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/omp.h
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/ompt.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/opencl-c.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/pkuintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/pmmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/popcntintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/prfchwintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/rdseedintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/rtmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/s390intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/shaintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/smmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/tbmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/tgmath.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/tmmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/unwind.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/vadefs.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/vaesintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/vecintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/vpclmulqdqintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/wmmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/x86intrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xmmintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xopintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xsavecintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xsaveintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xsaveoptintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xsavesintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/clang/%%LLVM_RELEASE%%/include/xtestintrin.h
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/cmake/clang/ClangConfig.cmake
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/cmake/clang/ClangTargets-%%CMAKE_BUILD_TYPE%%.cmake
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/cmake/clang/ClangTargets.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/AddLLVM.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/AddLLVMDefinitions.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/AddOCaml.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/AddSphinxTarget.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/CheckAtomic.cmake
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/CheckCompilerVersion.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/CheckLinkerFlag.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/ChooseMSVCCRT.cmake
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/CrossCompile.cmake
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/DetermineGCCCompatible.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/FindOCaml.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/FindSphinx.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/GenerateVersionFromCVS.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/GetSVN.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/HandleLLVMOptions.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/HandleLLVMStdlib.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVM-Config.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMConfig.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMConfigVersion.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMExports-%%CMAKE_BUILD_TYPE%%.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMExports.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMExternalProjectUtils.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMInstallSymlink.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/LLVMProcessSources.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/TableGen.cmake
+llvm%%LLVM_LIB_VER%%/lib/cmake/llvm/VersionFromVCS.cmake
+llvm%%LLVM_LIB_VER%%/lib/libLLVM-%%LLVM_MAJOR%%.so
+llvm%%LLVM_LIB_VER%%/lib/libLLVM-%%LLVM_RELEASE%%.so
+llvm%%LLVM_LIB_VER%%/lib/libLLVM.so
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64AsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64AsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64CodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64Desc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64Disassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64Info.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAArch64Utils.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAMDGPUUtils.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMARMUtils.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAnalysis.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBPFInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBinaryFormat.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBitReader.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMBitWriter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMCore.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMCoroutines.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMCoverage.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDebugInfoCodeView.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDebugInfoDWARF.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDebugInfoMSF.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDebugInfoPDB.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDemangle.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMDlltoolDriver.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMExecutionEngine.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMFuzzMutate.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMGlobalISel.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMHexagonAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMHexagonCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMHexagonDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMHexagonDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMHexagonInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMIRReader.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMInstCombine.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMInstrumentation.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMInterpreter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLTO.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLanaiInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLibDriver.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLineEditor.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMLinker.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMC.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMCDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMCJIT.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMCParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMIRParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMSP430AsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMSP430CodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMSP430Desc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMSP430Info.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMMipsInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMNVPTXAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMNVPTXCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMNVPTXDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMNVPTXInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMObjCARCOpts.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMObject.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMObjectYAML.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMOption.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMOrcJIT.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPasses.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMPowerPCInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMProfileData.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMRuntimeDyld.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMScalarOpts.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSelectionDAG.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSparcInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSupport.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSymbolize.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZAsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMSystemZInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMTableGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMTarget.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMTransformUtils.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMVectorize.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMWindowsManifest.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86AsmParser.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86AsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86CodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86Desc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86Disassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86Info.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMX86Utils.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXCoreAsmPrinter.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXCoreCodeGen.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXCoreDesc.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXCoreDisassembler.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXCoreInfo.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMXRay.a
+llvm%%LLVM_LIB_VER%%/lib/libLLVMipo.a
+llvm%%LLVM_LIB_VER%%/lib/libLTO.so
+llvm%%LLVM_LIB_VER%%/lib/libLTO.so.%%LLVM_RELEASE%%
+llvm%%LLVM_LIB_VER%%/lib/libLTO.so.6
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclang.so
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclang.so.%%LLVM_MAJOR%%
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclang.so.6
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangARCMigrate.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangAST.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangASTMatchers.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangAnalysis.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangApplyReplacements.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangBasic.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangChangeNamespace.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangCodeGen.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangCrossTU.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangDaemon.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangDriver.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangDynamicASTMatchers.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangEdit.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangFormat.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangFrontend.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangFrontendTool.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangHandleCXX.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangIncludeFixer.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangIncludeFixerPlugin.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangIndex.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangLex.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangMove.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangParse.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangQuery.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangReorderFields.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangRewrite.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangRewriteFrontend.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangSema.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangSerialization.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangStaticAnalyzerCheckers.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangStaticAnalyzerCore.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangStaticAnalyzerFrontend.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidy.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyAndroidModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyBoostModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyBugproneModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyCERTModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyCppCoreGuidelinesModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyFuchsiaModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyGoogleModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyHICPPModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyLLVMModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyMPIModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyMiscModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyModernizeModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyObjCModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyPerformanceModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyPlugin.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyReadabilityModule.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libclangTidyUtils.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangTooling.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangToolingASTDiff.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangToolingCore.a
+%%CLANG%%llvm%%LLVM_LIB_VER%%/lib/libclangToolingRefactor.a
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/lib/libfindAllSymbols.a
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/libgomp.so
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/libiomp5.so
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldCOFF.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldCommon.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldCore.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldDriver.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldELF.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldMachO.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldMinGW.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldReaderWriter.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldWasm.a
+%%LLD%%llvm%%LLVM_LIB_VER%%/lib/liblldYAML.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldb.so
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldb.so.%%LLVM_RELEASE%%
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldb.so.6
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbBase.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbBreakpoint.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbCommands.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbCore.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbDataFormatters.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbExpression.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbHost.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbInitialization.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbInterpreter.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABIMacOSX_arm.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABIMacOSX_arm64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABIMacOSX_i386.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_arm.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_arm64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_hexagon.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_i386.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_mips.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_mips64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_ppc.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_ppc64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_s390x.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginABISysV_x86_64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginAppleObjCRuntime.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginArchitectureArm.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginCPlusPlusLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginCXXItaniumABI.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDisassemblerLLVM.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDynamicLoaderHexagonDYLD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDynamicLoaderMacOSXDYLD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDynamicLoaderPosixDYLD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDynamicLoaderStatic.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginDynamicLoaderWindowsDYLD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginExpressionParserClang.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginExpressionParserGo.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginGoLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstructionARM.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstructionARM64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstructionMIPS.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstructionMIPS64.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstrumentationRuntimeASan.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstrumentationRuntimeMainThreadChecker.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstrumentationRuntimeTSan.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginInstrumentationRuntimeUBSan.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginJITLoaderGDB.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginJavaLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginLanguageRuntimeGo.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginLanguageRuntimeJava.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginMemoryHistoryASan.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginOCamlLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginOSGo.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginOSPython.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjCLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjCPlusPlusLanguage.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectContainerBSDArchive.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectContainerMachOArchive.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectFileELF.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectFileJIT.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectFileMachO.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginObjectFilePECOFF.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformAndroid.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformFreeBSD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformGDB.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformKalimba.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformLinux.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformMacOSX.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformNetBSD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformOpenBSD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformPOSIX.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginPlatformWindows.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessElfCore.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessFreeBSD.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessGDBRemote.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessMinidump.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessPOSIX.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginProcessUtility.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginRenderScriptRuntime.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginScriptInterpreterNone.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginScriptInterpreterPython.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginStructuredDataDarwinLog.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginSymbolFileDWARF.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginSymbolFilePDB.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginSymbolFileSymtab.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginSymbolVendorELF.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginSystemRuntimeMacOSX.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginUnwindAssemblyInstEmulation.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbPluginUnwindAssemblyX86.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbSymbol.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbTarget.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbUtility.a
+%%LLDB%%llvm%%LLVM_LIB_VER%%/lib/liblldbUtilityHelpers.a
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/libomp.so
+%%OPENMP%%llvm%%LLVM_LIB_VER%%/lib/libomptarget.so
+%%CLANG%%llvm%%LLVM_LIB_VER%%/libexec/c++-analyzer
+%%CLANG%%llvm%%LLVM_LIB_VER%%/libexec/ccc-analyzer
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/bash-autocomplete.sh
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/clang-format-bbedit.applescript
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/clang-format-diff.py
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/clang-format-sublime.py
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/clang-format.el
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/clang/clang-format.py
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/clang-include-fixer.el
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/clang-include-fixer.py
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/clang-rename.el
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/clang-rename.py
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/clang-tidy-diff.py
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/run-clang-tidy.py
+%%EXTRAS%%llvm%%LLVM_LIB_VER%%/share/clang/run-find-all-symbols.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/opt-diff.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/opt-stats.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/opt-viewer.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/optpmap.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/optrecord.py
+llvm%%LLVM_LIB_VER%%/share/opt-viewer/style.css
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-build/scanview.css
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-build/sorttable.js
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/FileRadar.scpt
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/GetRadarVersion.scpt
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/Reporter.py
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/ScanView.py
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/bugcatcher.ico
+%%CLANG%%llvm%%LLVM_LIB_VER%%/share/scan-view/startfile.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/BooleanExpression.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/LitConfig.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/LitTestCase.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/ProgressBar.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/ShCommands.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/ShUtil.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/Test.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/TestRunner.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/TestingConfig.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/__init__.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/discovery.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/formats/__init__.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/formats/base.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/formats/googletest.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/formats/shtest.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/main.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/run.py
+%%LIT%%%%PYTHON_SITELIBDIR%%/lit%%LLVM_SUFFIX%%/util.py
+@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
+@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi
diff --git a/devel/mongo-cxx-driver/Makefile b/devel/mongo-cxx-driver/Makefile
new file mode 100644
index 000000000000..5755e9ef6062
--- /dev/null
+++ b/devel/mongo-cxx-driver/Makefile
@@ -0,0 +1,47 @@
+# Created by: Simun Mikecin <numisemis@yahoo.com>
+# $FreeBSD$
+
+PORTNAME= mongo-cxx-driver
+PORTVERSION= 1.1.2
+DISTVERSIONPREFIX=legacy-
+PORTREVISION= 14
+CATEGORIES= devel
+
+MAINTAINER= numisemis@yahoo.com
+COMMENT= MongoDB Legacy C++ Driver
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/APACHE-2.0.txt
+
+BROKEN_SSL= openssl
+BROKEN_SSL_REASON_openssl= use of undeclared identifier 'BIO_s_file_internal'
+
+LIB_DEPENDS= libboost_system.so:devel/boost-libs
+
+MAKE_JOBS_UNSAFE= yes
+
+OPTIONS_DEFINE= SCRAM-SHA-1
+OPTIONS_DEFAULT= SCRAM-SHA-1
+
+SCRAM-SHA-1_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
+SCRAM-SHA-1_MAKE_ARGS= --use-sasl-client --ssl
+SCRAM-SHA-1_DESC= SCRAM-SHA-1 authentication mechanism support.
+
+USE_GITHUB= yes
+GH_ACCOUNT= mongodb
+GH_PROJECT= mongo-cxx-driver
+
+USES= compiler:c++11-lang scons:python2 ssl
+MAKE_ARGS= --prefix=${STAGEDIR}${PREFIX} \
+ --cc=${CC} \
+ --cxx=${CXX}
+USE_LDCONFIG= yes
+
+.include <bsd.port.pre.mk>
+
+.if ${SSL_DEFAULT} == base
+BROKEN_FreeBSD_12= use of undeclared identifier 'BIO_s_file_internal'
+BROKEN_FreeBSD_13= use of undeclared identifier 'BIO_s_file_internal'
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/devel/mongo-cxx-driver/distinfo b/devel/mongo-cxx-driver/distinfo
new file mode 100644
index 000000000000..5317d88f11c5
--- /dev/null
+++ b/devel/mongo-cxx-driver/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1466666234
+SHA256 (mongodb-mongo-cxx-driver-legacy-1.1.2_GH0.tar.gz) = 8c52cae798086c3e9d0e6fe488c3378601db858cc71944b6b83440d8b00298f4
+SIZE (mongodb-mongo-cxx-driver-legacy-1.1.2_GH0.tar.gz) = 1577527
diff --git a/devel/mongo-cxx-driver/files/patch-SConstruct b/devel/mongo-cxx-driver/files/patch-SConstruct
new file mode 100644
index 000000000000..6b694d2724e5
--- /dev/null
+++ b/devel/mongo-cxx-driver/files/patch-SConstruct
@@ -0,0 +1,33 @@
+--- SConstruct.orig 2015-08-18 15:46:59 UTC
++++ SConstruct
+@@ -354,6 +354,30 @@ env_vars.Add('SHLINKFLAGS',
+ help='Sets flags for the linker when building shared libraries',
+ converter=variable_shlex_converter)
+
++env_vars.Add('CXX',
++ help='Sets path to the C++ compiler',
++ converter=variable_shlex_converter)
++
++env_vars.Add('CC',
++ help='Sets path to the C compiler',
++ converter=variable_shlex_converter)
++
++env_vars.Add('PREFIX',
++ help='Sets PREFIX path',
++ converter=variable_shlex_converter)
++
++env_vars.Add('PKGCONFIGDIR',
++ help='Sets PKGCONFIGDIR path',
++ converter=variable_shlex_converter)
++
++env_vars.Add('destdir',
++ help='Sets destdir path',
++ converter=variable_shlex_converter)
++
++env_vars.Add('DESTDIR',
++ help='Sets DESTDIR path',
++ converter=variable_shlex_converter)
++
+ # don't run configure if user calls --help
+ if GetOption('help'):
+ Return()
diff --git a/devel/mongo-cxx-driver/files/patch-boost-1.67 b/devel/mongo-cxx-driver/files/patch-boost-1.67
new file mode 100644
index 000000000000..bdfbf452653f
--- /dev/null
+++ b/devel/mongo-cxx-driver/files/patch-boost-1.67
@@ -0,0 +1,26 @@
+src/mongo/client/command_writer.cpp:68:78: error: no member named 'next' in namespace 'boost'
+ const std::vector<WriteOperation*>::const_iterator next = boost::next(batch_iter);
+ ~~~~~~~^
+src/mongo/util/net/message_port.h:34:38: error: expected class name
+class AbstractMessagingPort : boost::noncopyable {
+ ^
+
+--- src/mongo/util/net/message_port.h.orig 2016-06-21 19:15:24 UTC
++++ src/mongo/util/net/message_port.h
+@@ -20,8 +20,15 @@
+ #include "mongo/config.h"
+
+ #include <boost/shared_ptr.hpp>
+-#include <boost/utility.hpp>
+ #include <vector>
++
++#include <boost/version.hpp>
++#if BOOST_VERSION < 106700
++#include <boost/utility.hpp>
++#else
++#include <boost/next_prior.hpp>
++#include <boost/noncopyable.hpp>
++#endif
+
+ #include "mongo/util/net/message.h"
+ #include "mongo/util/net/sock.h"
diff --git a/devel/mongo-cxx-driver/pkg-descr b/devel/mongo-cxx-driver/pkg-descr
new file mode 100644
index 000000000000..6cdd2952e7d7
--- /dev/null
+++ b/devel/mongo-cxx-driver/pkg-descr
@@ -0,0 +1,7 @@
+Official Mongo C++ Driver
+
+Mongo (from "humongous") is a high-performance, open source,
+schema-free, document-oriented database. A common name in the
+"NOSQL" community.
+
+WWW: https://github.com/mongodb/mongo-cxx-driver
diff --git a/devel/mongo-cxx-driver/pkg-plist b/devel/mongo-cxx-driver/pkg-plist
new file mode 100644
index 000000000000..7e2f87c89c8e
--- /dev/null
+++ b/devel/mongo-cxx-driver/pkg-plist
@@ -0,0 +1,112 @@
+include/mongo/base/data_cursor.h
+include/mongo/base/data_view.h
+include/mongo/base/disallow_copying.h
+include/mongo/base/encoded_value_storage.h
+include/mongo/base/error_codes.h
+include/mongo/base/parse_number.h
+include/mongo/base/status-inl.h
+include/mongo/base/status.h
+include/mongo/base/status_with.h
+include/mongo/base/string_data-inl.h
+include/mongo/base/string_data.h
+include/mongo/bson/bson-inl.h
+include/mongo/bson/bson.h
+include/mongo/bson/bson_db.h
+include/mongo/bson/bson_field.h
+include/mongo/bson/bson_validate.h
+include/mongo/bson/bsonelement.h
+include/mongo/bson/bsonmisc.h
+include/mongo/bson/bsonobj.h
+include/mongo/bson/bsonobjbuilder.h
+include/mongo/bson/bsonobjiterator.h
+include/mongo/bson/bsontypes.h
+include/mongo/bson/inline_decls.h
+include/mongo/bson/oid.h
+include/mongo/bson/ordering.h
+include/mongo/bson/timestamp.h
+include/mongo/bson/util/builder.h
+include/mongo/client/autolib.h
+include/mongo/client/bulk_operation_builder.h
+include/mongo/client/bulk_update_builder.h
+include/mongo/client/bulk_upsert_builder.h
+include/mongo/client/dbclient.h
+include/mongo/client/dbclient_rs.h
+include/mongo/client/dbclientcursor.h
+include/mongo/client/dbclientinterface.h
+include/mongo/client/exceptions.h
+include/mongo/client/export_macros.h
+include/mongo/client/gridfs.h
+include/mongo/client/index_spec.h
+include/mongo/client/init.h
+include/mongo/client/options.h
+include/mongo/client/redef_macros.h
+include/mongo/client/sasl_client_authenticate.h
+include/mongo/client/undef_macros.h
+include/mongo/client/write_concern.h
+include/mongo/client/write_options.h
+include/mongo/client/write_result.h
+include/mongo/config.h
+include/mongo/db/jsobj.h
+include/mongo/db/json.h
+include/mongo/geo/boundingbox.h
+include/mongo/geo/constants.h
+include/mongo/geo/coordinates.h
+include/mongo/geo/coordinates2d.h
+include/mongo/geo/coordinates2dgeographic.h
+include/mongo/geo/geometry.h
+include/mongo/geo/geometrycollection.h
+include/mongo/geo/geoobj.h
+include/mongo/geo/interface.h
+include/mongo/geo/linestring.h
+include/mongo/geo/multilinestring.h
+include/mongo/geo/multipoint.h
+include/mongo/geo/multipolygon.h
+include/mongo/geo/namespaces.h
+include/mongo/geo/parser-impl.h
+include/mongo/geo/parser.h
+include/mongo/geo/point.h
+include/mongo/geo/polygon.h
+include/mongo/geo/queryutils.h
+include/mongo/logger/appender.h
+include/mongo/logger/component_message_log_domain.h
+include/mongo/logger/labeled_level.h
+include/mongo/logger/log_component.h
+include/mongo/logger/log_component_settings.h
+include/mongo/logger/log_domain.h
+include/mongo/logger/log_manager.h
+include/mongo/logger/log_severity-inl.h
+include/mongo/logger/log_severity.h
+include/mongo/logger/logger.h
+include/mongo/logger/logstream_builder.h
+include/mongo/logger/message_event.h
+include/mongo/logger/message_log_domain.h
+include/mongo/platform/atomic_intrinsics.h
+include/mongo/platform/atomic_intrinsics_gcc_atomic.h
+include/mongo/platform/atomic_intrinsics_gcc_intel.h
+include/mongo/platform/atomic_intrinsics_gcc_sync.h
+include/mongo/platform/atomic_intrinsics_win32.h
+include/mongo/platform/atomic_word.h
+include/mongo/platform/atomic_word_cxx11.h
+include/mongo/platform/atomic_word_intrinsics.h
+include/mongo/platform/compiler.h
+include/mongo/platform/compiler_gcc.h
+include/mongo/platform/compiler_msvc.h
+include/mongo/platform/cstdint.h
+include/mongo/platform/endian.h
+include/mongo/platform/float_utils.h
+include/mongo/platform/hash_namespace.h
+include/mongo/platform/strnlen.h
+include/mongo/platform/unordered_map.h
+include/mongo/platform/windows_basic.h
+include/mongo/stdx/functional.h
+include/mongo/util/assert_util.h
+include/mongo/util/mongoutils/str.h
+include/mongo/util/net/hostandport.h
+include/mongo/util/net/message.h
+include/mongo/util/net/message_port.h
+include/mongo/util/net/operation.h
+include/mongo/util/net/sock.h
+include/mongo/util/shared_buffer.h
+include/mongo/util/time_support.h
+include/mongo/version.h
+lib/libmongoclient.a
diff --git a/devel/p5-Log-Any-Adapter-Callback/Makefile b/devel/p5-Log-Any-Adapter-Callback/Makefile
new file mode 100644
index 000000000000..b74c9eb13fee
--- /dev/null
+++ b/devel/p5-Log-Any-Adapter-Callback/Makefile
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+PORTNAME= Log-Any-Adapter-Callback
+PORTVERSION= 0.101
+CATEGORIES= devel perl5
+MASTER_SITES= CPAN
+PKGNAMEPREFIX= p5-
+
+MAINTAINER= perl@FreeBSD.org
+COMMENT= Perl extension adapter for Log::Any with callbacks
+
+LICENSE= ART10 GPLv1+
+LICENSE_COMB= dual
+
+DEPRECATED= Use devel/p5-Log-Any (Log::Any::Adapter::Capture) instead
+EXPIRATION_DATE=2020-06-30
+
+BUILD_DEPENDS= ${RUN_DEPENDS}
+RUN_DEPENDS= p5-Log-Any>0:devel/p5-Log-Any
+
+USES= perl5
+USE_PERL5= configure
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/p5-Log-Any-Adapter-Callback/distinfo b/devel/p5-Log-Any-Adapter-Callback/distinfo
new file mode 100644
index 000000000000..f1564e131b8c
--- /dev/null
+++ b/devel/p5-Log-Any-Adapter-Callback/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1586191140
+SHA256 (Log-Any-Adapter-Callback-0.101.tar.gz) = d008075a2ceb57bb7e96d5e63b8ce8ec5b987fc9f224b460cba7eff73b954a16
+SIZE (Log-Any-Adapter-Callback-0.101.tar.gz) = 15512
diff --git a/devel/p5-Log-Any-Adapter-Callback/pkg-descr b/devel/p5-Log-Any-Adapter-Callback/pkg-descr
new file mode 100644
index 000000000000..a2b58e042f12
--- /dev/null
+++ b/devel/p5-Log-Any-Adapter-Callback/pkg-descr
@@ -0,0 +1,3 @@
+Adapter to use callbacks with Log::Any.
+
+WWW: https://metacpan.org/release/Log-Any-Adapter-Callback
diff --git a/devel/p5-Log-Any-Adapter-Callback/pkg-plist b/devel/p5-Log-Any-Adapter-Callback/pkg-plist
new file mode 100644
index 000000000000..9f82ed9d508c
--- /dev/null
+++ b/devel/p5-Log-Any-Adapter-Callback/pkg-plist
@@ -0,0 +1,2 @@
+%%SITE_PERL%%/Log/Any/Adapter/Callback.pm
+%%PERL5_MAN3%%/Log::Any::Adapter::Callback.3.gz
diff --git a/devel/py-backports.functools_lru_cache/Makefile b/devel/py-backports.functools_lru_cache/Makefile
new file mode 100644
index 000000000000..9a87b971023a
--- /dev/null
+++ b/devel/py-backports.functools_lru_cache/Makefile
@@ -0,0 +1,29 @@
+# $FreeBSD$
+
+PORTNAME= backports.functools_lru_cache
+PORTVERSION= 1.5
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= Backport of functools.lru_cache from Python 3.3
+
+LICENSE= MIT
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools_scm>=1.15.0:devel/py-setuptools_scm@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}backports>=0:devel/py-backports@${PY_FLAVOR}
+
+NO_ARCH= yes
+USE_PYTHON= autoplist distutils
+USES= python:2.7
+
+POST_PLIST= trim-backports-namespace
+
+post-install:
+ @${RM} ${STAGEDIR}${PYTHON_SITELIBDIR}/backports/__init__.py*
+
+trim-backports-namespace:
+ @${REINPLACE_CMD} '/backports\/__init__.py*/d' ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/devel/py-backports.functools_lru_cache/distinfo b/devel/py-backports.functools_lru_cache/distinfo
new file mode 100644
index 000000000000..e6cd82841686
--- /dev/null
+++ b/devel/py-backports.functools_lru_cache/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1517844657
+SHA256 (backports.functools_lru_cache-1.5.tar.gz) = 9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a
+SIZE (backports.functools_lru_cache-1.5.tar.gz) = 7891
diff --git a/devel/py-backports.functools_lru_cache/pkg-descr b/devel/py-backports.functools_lru_cache/pkg-descr
new file mode 100644
index 000000000000..f086a226dff6
--- /dev/null
+++ b/devel/py-backports.functools_lru_cache/pkg-descr
@@ -0,0 +1,5 @@
+backports.functools_lru_cache is a backport of functools.lru_cache from Python
+3.3 as published at ActiveState.
+
+WWW: https://pypi.org/project/backports.functools_lru_cache/
+WWW: https://github.com/jaraco/backports.functools_lru_cache
diff --git a/devel/py-backports.os/Makefile b/devel/py-backports.os/Makefile
new file mode 100644
index 000000000000..a6b1497f86af
--- /dev/null
+++ b/devel/py-backports.os/Makefile
@@ -0,0 +1,35 @@
+# $FreeBSD$
+
+PORTNAME= backports.os
+DISTVERSION= 0.1.1
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= kai@FreeBSD.org
+COMMENT= Backport of new features in Python's os module
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 is EOL upstream
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}setuptools_scm>=0:devel/py-setuptools_scm@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}backports>=0:devel/py-backports@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}future>=0:devel/py-future@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+NO_ARCH= yes
+
+POST_PLIST= trim-backports-namespace
+
+post-install:
+ @${RM} ${STAGEDIR}${PYTHON_SITELIBDIR}/backports/__init__.py*
+
+trim-backports-namespace:
+ @${REINPLACE_CMD} '/backports\/__init__.py*/d' ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/devel/py-backports.os/distinfo b/devel/py-backports.os/distinfo
new file mode 100644
index 000000000000..c32dba518ba0
--- /dev/null
+++ b/devel/py-backports.os/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1530191181
+SHA256 (backports.os-0.1.1.tar.gz) = b472c4933094306ca08ec90b2a8cbb50c34f1fb2767775169a1c1650b7b74630
+SIZE (backports.os-0.1.1.tar.gz) = 12495
diff --git a/devel/py-backports.os/pkg-descr b/devel/py-backports.os/pkg-descr
new file mode 100644
index 000000000000..9e09d734dceb
--- /dev/null
+++ b/devel/py-backports.os/pkg-descr
@@ -0,0 +1,9 @@
+This package provides backports of new features in Python's os module under the
+backports namespace.
+
+Backported functionality:
+
+- os.fsencode (new in Python 3.2)
+- os.fsdecode (new in Python 3.2)
+
+WWW: https://github.com/pjdelport/backports.os
diff --git a/devel/py-backports.shutil_get_terminal_size/Makefile b/devel/py-backports.shutil_get_terminal_size/Makefile
new file mode 100644
index 000000000000..08e403aaf114
--- /dev/null
+++ b/devel/py-backports.shutil_get_terminal_size/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+PORTNAME= backports.shutil_get_terminal_size
+PORTVERSION= 1.0.0
+PORTREVISION= 1
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= jpaetzel@FreeBSD.org
+COMMENT= Backport of the get_terminal_size function from Python 3.3's shutil
+
+LICENSE= PSFL
+
+DEPRECATED= Python 2 is EOL upstream
+EXPIRATION_DATE= 2020-12-31
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}backports>0:devel/py-backports@${PY_FLAVOR}
+
+NO_ARCH= yes
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+POST_PLIST= trim-backports-namespace
+
+post-install:
+ @${RM} ${STAGEDIR}${PYTHON_SITELIBDIR}/backports/__init__.py*
+
+trim-backports-namespace:
+ @${REINPLACE_CMD} '/backports\/__init__.py*/d' ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/devel/py-backports.shutil_get_terminal_size/distinfo b/devel/py-backports.shutil_get_terminal_size/distinfo
new file mode 100644
index 000000000000..ac3b00647e3f
--- /dev/null
+++ b/devel/py-backports.shutil_get_terminal_size/distinfo
@@ -0,0 +1,2 @@
+SHA256 (backports.shutil_get_terminal_size-1.0.0.tar.gz) = 713e7a8228ae80341c70586d1cc0a8caa5207346927e23d09dcbcaf18eadec80
+SIZE (backports.shutil_get_terminal_size-1.0.0.tar.gz) = 4279
diff --git a/devel/py-backports.shutil_get_terminal_size/pkg-descr b/devel/py-backports.shutil_get_terminal_size/pkg-descr
new file mode 100644
index 000000000000..2e164cd1af9c
--- /dev/null
+++ b/devel/py-backports.shutil_get_terminal_size/pkg-descr
@@ -0,0 +1,3 @@
+A backport of the get_terminal_size function from Python 3.3's shutil.
+
+WWW: https://github.com/chrippa/backports.shutil_get_terminal_size
diff --git a/devel/py-backports_abc/Makefile b/devel/py-backports_abc/Makefile
new file mode 100644
index 000000000000..c72a9c997c95
--- /dev/null
+++ b/devel/py-backports_abc/Makefile
@@ -0,0 +1,20 @@
+# Created by: Grzegorz Blach <gblach@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= backports_abc
+PORTVERSION= 0.5
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= Backport of recent additions to the 'collections.abc' module
+
+LICENSE= PSFL
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-backports_abc/distinfo b/devel/py-backports_abc/distinfo
new file mode 100644
index 000000000000..fc86c4466250
--- /dev/null
+++ b/devel/py-backports_abc/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1479034599
+SHA256 (backports_abc-0.5.tar.gz) = 033be54514a03e255df75c5aee8f9e672f663f93abb723444caec8fe43437bde
+SIZE (backports_abc-0.5.tar.gz) = 9807
diff --git a/devel/py-backports_abc/pkg-descr b/devel/py-backports_abc/pkg-descr
new file mode 100644
index 000000000000..e3554ced923e
--- /dev/null
+++ b/devel/py-backports_abc/pkg-descr
@@ -0,0 +1,3 @@
+A backport of recent additions to the 'collections.abc' module.
+
+WWW: https://github.com/cython/backports_abc
diff --git a/devel/py-cheetah/Makefile b/devel/py-cheetah/Makefile
new file mode 100644
index 000000000000..8dcc59eef48e
--- /dev/null
+++ b/devel/py-cheetah/Makefile
@@ -0,0 +1,23 @@
+# Created by: Hye-Shik Chang <perky@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= cheetah
+PORTVERSION= 2.4.4
+PORTREVISION= 1
+CATEGORIES= devel textproc www python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DISTNAME= Cheetah-${DISTVERSION}
+
+MAINTAINER= nivit@FreeBSD.org
+COMMENT= HTML template engine for Python
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}markdown>=2.0.3:textproc/py-markdown@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+.include <bsd.port.mk>
diff --git a/devel/py-cheetah/distinfo b/devel/py-cheetah/distinfo
new file mode 100644
index 000000000000..4b64ba824270
--- /dev/null
+++ b/devel/py-cheetah/distinfo
@@ -0,0 +1,2 @@
+SHA256 (Cheetah-2.4.4.tar.gz) = be308229f0c1e5e5af4f27d7ee06d90bb19e6af3059794e5fd536a6f29a9b550
+SIZE (Cheetah-2.4.4.tar.gz) = 190989
diff --git a/devel/py-cheetah/pkg-descr b/devel/py-cheetah/pkg-descr
new file mode 100644
index 000000000000..a0cd4eeb4b3f
--- /dev/null
+++ b/devel/py-cheetah/pkg-descr
@@ -0,0 +1,7 @@
+Cheetah is a Python-powered template engine and code generator. It
+can be used as a standalone utility or it can be combined with other
+tools. Cheetah has many potential uses, but web developers looking
+for a viable alternative to ASP, JSP, PHP and PSP are expected to
+be its principle user group.
+
+WWW: https://cheetahtemplate.org/
diff --git a/devel/py-dis3/Makefile b/devel/py-dis3/Makefile
new file mode 100644
index 000000000000..22f946796520
--- /dev/null
+++ b/devel/py-dis3/Makefile
@@ -0,0 +1,25 @@
+# Created by: Po-Chuan Hsieh <sunpoet@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= dis3
+PORTVERSION= 0.1.3
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= Python 2.7 backport of the "dis" module from Python 3.5+
+
+LICENSE= MIT PSFL
+LICENSE_COMB= dual
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 only, backport of Python 3
+EXPIRATION_DATE= 2020-12-31
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-dis3/distinfo b/devel/py-dis3/distinfo
new file mode 100644
index 000000000000..c65dcee569f7
--- /dev/null
+++ b/devel/py-dis3/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1547581055
+SHA256 (dis3-0.1.3.tar.gz) = 9259b881fc1df02ed12ac25f82d4a85b44241854330b1a651e40e0c675cb2d1e
+SIZE (dis3-0.1.3.tar.gz) = 19134
diff --git a/devel/py-dis3/pkg-descr b/devel/py-dis3/pkg-descr
new file mode 100644
index 000000000000..b9e2c8c5e5e6
--- /dev/null
+++ b/devel/py-dis3/pkg-descr
@@ -0,0 +1,4 @@
+dis3 is a Python 2.7 backport of the dis module from Python 3.5.
+
+WWW: https://pypi.org/project/dis3/
+WWW: https://github.com/KeyWeeUsr/python-dis3
diff --git a/devel/py-enum34/Makefile b/devel/py-enum34/Makefile
new file mode 100644
index 000000000000..72fc02a6ab5a
--- /dev/null
+++ b/devel/py-enum34/Makefile
@@ -0,0 +1,32 @@
+# Created by: Muhammad Moinur Rahman <5u623l20@gmail.com>
+# $FreeBSD$
+
+PORTNAME= enum34
+PORTVERSION= 1.1.10
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= bofh@FreeBSD.org
+COMMENT= Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7
+
+LICENSE= BSD3CLAUSE
+
+# Should be removed along with python2.7 and relevant vairables PY_ENUM34
+# EXPIRATION_DATE or python27 whichever happens later should be followed
+DEPRECATED= Will be removed along with python27
+EXPIRATION_DATE=2020-12-31
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+OPTIONS_DEFINE= DOCS
+
+PORTDOCS= *
+DOCSDIR= ${PREFIX}/share/doc/py-${PORTNAME}
+NO_ARCH= yes
+
+post-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC}/enum/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.mk>
diff --git a/devel/py-enum34/distinfo b/devel/py-enum34/distinfo
new file mode 100644
index 000000000000..dea910a9e236
--- /dev/null
+++ b/devel/py-enum34/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1601024411
+SHA256 (enum34-1.1.10.tar.gz) = cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248
+SIZE (enum34-1.1.10.tar.gz) = 28187
diff --git a/devel/py-enum34/pkg-descr b/devel/py-enum34/pkg-descr
new file mode 100644
index 000000000000..bd49c029b892
--- /dev/null
+++ b/devel/py-enum34/pkg-descr
@@ -0,0 +1,5 @@
+An enumeration is a set of symbolic names (members) bound to unique, constant
+values. Within an enumeration, the members can be compared by identity, and
+the enumeration itself can be iterated over.
+
+WWW: https://pypi.org/project/enum34/
diff --git a/devel/py-functools32/Makefile b/devel/py-functools32/Makefile
new file mode 100644
index 000000000000..aa2fe0a7fccf
--- /dev/null
+++ b/devel/py-functools32/Makefile
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+PORTNAME= functools32
+PORTVERSION= 3.2.3
+PORTREVISION= 1
+CATEGORIES= devel python
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= wg@FreeBSD.org
+COMMENT= Backport of the functools module from Python 3.2.3 for use on 2.7
+
+LICENSE= PSFL
+
+DEPRECATED= Python 2 only, backport of Python 3
+EXPIRATION_DATE= 2020-12-31
+
+USE_GITHUB= yes
+GH_ACCOUNT= MiCHiLU
+GH_PROJECT= python-functools32
+GH_TAGNAME= ad90fa8
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+.include <bsd.port.mk>
diff --git a/devel/py-functools32/distinfo b/devel/py-functools32/distinfo
new file mode 100644
index 000000000000..33262b39fd26
--- /dev/null
+++ b/devel/py-functools32/distinfo
@@ -0,0 +1,2 @@
+SHA256 (MiCHiLU-python-functools32-3.2.3-ad90fa8_GH0.tar.gz) = 93cb95e0bf53b84b36857d7d65192f1fab8e632500035203f116301352e12b95
+SIZE (MiCHiLU-python-functools32-3.2.3-ad90fa8_GH0.tar.gz) = 31582
diff --git a/devel/py-functools32/pkg-descr b/devel/py-functools32/pkg-descr
new file mode 100644
index 000000000000..daf3b78550ad
--- /dev/null
+++ b/devel/py-functools32/pkg-descr
@@ -0,0 +1,5 @@
+This is a backport of the Python 3.2 functools module for use on Python
+versions 2.7 and PyPy. It includes new features lru_cache (Least-recently-used
+cache decorator).
+
+WWW: https://github.com/MiCHiLU/python-functools32
diff --git a/devel/py-futures/Makefile b/devel/py-futures/Makefile
new file mode 100644
index 000000000000..b612642b2098
--- /dev/null
+++ b/devel/py-futures/Makefile
@@ -0,0 +1,27 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= futures
+PORTVERSION= 3.3.0
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= koobs@FreeBSD.org
+COMMENT= Backport of the concurrent.futures package from Python 3
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+# Some tests require 256 semaphores. Set the following sysctl(8)
+# before running tests: sysctl p1003_1b.sem_nsems_max=512
+
+do-test:
+ @cd ${WRKSRC} && ${PYTHON_CMD} test_futures.py
+
+.include <bsd.port.mk>
diff --git a/devel/py-futures/distinfo b/devel/py-futures/distinfo
new file mode 100644
index 000000000000..0678dcdc3ac7
--- /dev/null
+++ b/devel/py-futures/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1583297763
+SHA256 (futures-3.3.0.tar.gz) = 7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794
+SIZE (futures-3.3.0.tar.gz) = 28729
diff --git a/devel/py-futures/pkg-descr b/devel/py-futures/pkg-descr
new file mode 100644
index 000000000000..04a54b4b0443
--- /dev/null
+++ b/devel/py-futures/pkg-descr
@@ -0,0 +1,8 @@
+Backport of the concurrent.futures package from Python 3.2
+
+The concurrent.futures module provides a high-level interface for
+asynchronously executing callables.
+
+This is described in PEP-3148 and is included in Python 3.2+
+
+WWW: https://github.com/agronholm/pythonfutures
diff --git a/devel/py-more-itertools5/Makefile b/devel/py-more-itertools5/Makefile
new file mode 100644
index 000000000000..a55ac165c2a9
--- /dev/null
+++ b/devel/py-more-itertools5/Makefile
@@ -0,0 +1,30 @@
+# Created by: William Grzybowski <wg@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= more-itertools
+PORTVERSION= 5.0.0
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+PKGNAMESUFFIX= 5
+
+MAINTAINER= sunpoet@FreeBSD.org
+COMMENT= More routines for operating on iterables, beyond itertools
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>=1.0.0:devel/py-six@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+# more-itertools 6.0.0+ requires Python 3.4+
+PORTSCOUT= limit:^5\.
+
+do-test:
+ @cd ${WRKSRC} && ${PYTHON_CMD} ${PYDISTUTILS_SETUP} test
+
+.include <bsd.port.mk>
diff --git a/devel/py-more-itertools5/distinfo b/devel/py-more-itertools5/distinfo
new file mode 100644
index 000000000000..3c1fd74f4a42
--- /dev/null
+++ b/devel/py-more-itertools5/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1548508633
+SHA256 (more-itertools-5.0.0.tar.gz) = 38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4
+SIZE (more-itertools-5.0.0.tar.gz) = 67359
diff --git a/devel/py-more-itertools5/pkg-descr b/devel/py-more-itertools5/pkg-descr
new file mode 100644
index 000000000000..56c5583d5b9d
--- /dev/null
+++ b/devel/py-more-itertools5/pkg-descr
@@ -0,0 +1,7 @@
+Python's itertools library is a gem - you can compose elegant solutions for a
+variety of problems with the functions it provides.
+
+In more-itertools one collect additional building blocks, recipes, and routines
+for working with Python iterables.
+
+WWW: https://github.com/erikrose/more-itertools
diff --git a/devel/py-pathlib/Makefile b/devel/py-pathlib/Makefile
new file mode 100644
index 000000000000..9e9f1e548e2d
--- /dev/null
+++ b/devel/py-pathlib/Makefile
@@ -0,0 +1,33 @@
+# $FreeBSD$
+
+PORTNAME= pathlib
+PORTVERSION= 1.0.1
+PORTREVISION= 1
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= stiginge@pvv.org
+COMMENT= Python 3.4 pathlib backported to 3.3, 3.2, 3.1, 2.7, 2.6
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE.txt
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+NO_ARCH= yes
+
+OPTIONS_DEFINE= DOCS
+
+DOCS_BUILD_DEPENDS= ${PY_SPHINX}
+DOCSDIR= ${PREFIX}/share/doc/${PKGNAMEPREFIX}${PORTNAME}
+PORTDOCS= *
+DOCS_VARS= PYDISTUTILS_BUILD_TARGET+=build_sphinx
+
+post-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC}/build/sphinx/html && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} "! -name .buildinfo -and ! -name objects.inv")
+
+.include <bsd.port.mk>
diff --git a/devel/py-pathlib/distinfo b/devel/py-pathlib/distinfo
new file mode 100644
index 000000000000..4f5640eb4155
--- /dev/null
+++ b/devel/py-pathlib/distinfo
@@ -0,0 +1,2 @@
+SHA256 (pathlib-1.0.1.tar.gz) = 6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f
+SIZE (pathlib-1.0.1.tar.gz) = 49298
diff --git a/devel/py-pathlib/pkg-descr b/devel/py-pathlib/pkg-descr
new file mode 100644
index 000000000000..3222800906f6
--- /dev/null
+++ b/devel/py-pathlib/pkg-descr
@@ -0,0 +1,4 @@
+Backport of pathlib from Python 3.4. Offers a set of classes featuring all the
+common operations on paths in an easy, object-oriented way.
+
+WWW: https://pypi.org/project/pathlib/
diff --git a/devel/py-selectors2/Makefile b/devel/py-selectors2/Makefile
new file mode 100644
index 000000000000..65e3c66d6a11
--- /dev/null
+++ b/devel/py-selectors2/Makefile
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+PORTNAME= selectors2
+DISTVERSION= 2.0.2
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= john@saltant.com
+COMMENT= Backported, durable, and portable I/O selectors for Python
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 is EOL upstream
+EXPIRATION_DATE= 2020-12-31
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-selectors2/distinfo b/devel/py-selectors2/distinfo
new file mode 100644
index 000000000000..01c2d11d03a4
--- /dev/null
+++ b/devel/py-selectors2/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1595861126
+SHA256 (selectors2-2.0.2.tar.gz) = 1f1bbaac203a23fbc851dc1b5a6e92c50698cc8cefa5873eb5b89eef53d1d82b
+SIZE (selectors2-2.0.2.tar.gz) = 18558
diff --git a/devel/py-selectors2/pkg-descr b/devel/py-selectors2/pkg-descr
new file mode 100644
index 000000000000..caebce17d99a
--- /dev/null
+++ b/devel/py-selectors2/pkg-descr
@@ -0,0 +1,4 @@
+Backported, durable, and portable selectors designed to replace the
+standard library selectors module.
+
+WWW: https://www.github.com/SethMichaelLarson/selectors2
diff --git a/devel/py-should_dsl/Makefile b/devel/py-should_dsl/Makefile
new file mode 100644
index 000000000000..62ab879e3f61
--- /dev/null
+++ b/devel/py-should_dsl/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+PORTNAME= should_dsl
+PORTVERSION= 2.1.2
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= truckman@FreeBSD.org
+COMMENT= Should assertions in Python as clear and readable as possible
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+NO_ARCH= yes
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+.include <bsd.port.mk>
diff --git a/devel/py-should_dsl/distinfo b/devel/py-should_dsl/distinfo
new file mode 100644
index 000000000000..3713d02696f0
--- /dev/null
+++ b/devel/py-should_dsl/distinfo
@@ -0,0 +1,2 @@
+SHA256 (should_dsl-2.1.2.tar.gz) = 36f753d90fbdf84ef2b7a9e07813e3efac725376feb7a793549f3fff7a03232a
+SIZE (should_dsl-2.1.2.tar.gz) = 13650
diff --git a/devel/py-should_dsl/pkg-descr b/devel/py-should_dsl/pkg-descr
new file mode 100644
index 000000000000..47d04a77cf8c
--- /dev/null
+++ b/devel/py-should_dsl/pkg-descr
@@ -0,0 +1,3 @@
+Should assertions in Python as clear and readable as possible
+
+WWW: https://pypi.org/project/should_dsl/
diff --git a/devel/py-singledispatch/Makefile b/devel/py-singledispatch/Makefile
new file mode 100644
index 000000000000..5e159f65f06a
--- /dev/null
+++ b/devel/py-singledispatch/Makefile
@@ -0,0 +1,23 @@
+# Created by: Juergen Lock <nox@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= singledispatch
+PORTVERSION= 3.4.0.3
+PORTREVISION= 1
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= python@FreeBSD.org
+COMMENT= Backport of functools.singledispatch from Python 3.4
+
+LICENSE= MIT
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>0:devel/py-six@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= distutils concurrent autoplist
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-singledispatch/distinfo b/devel/py-singledispatch/distinfo
new file mode 100644
index 000000000000..a11a008dad49
--- /dev/null
+++ b/devel/py-singledispatch/distinfo
@@ -0,0 +1,2 @@
+SHA256 (singledispatch-3.4.0.3.tar.gz) = 5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c
+SIZE (singledispatch-3.4.0.3.tar.gz) = 9529
diff --git a/devel/py-singledispatch/pkg-descr b/devel/py-singledispatch/pkg-descr
new file mode 100644
index 000000000000..949aaea97e88
--- /dev/null
+++ b/devel/py-singledispatch/pkg-descr
@@ -0,0 +1,10 @@
+This library brings functools.singledispatch from Python 3.4 to
+Python 2.6-3.3.
+
+PEP 443 proposed to expose a mechanism in the functools standard
+library module in Python 3.4 that provides a simple form of generic
+programming known as single-dispatch generic functions.
+
+This library is a backport of this functionality to Python 2.6 - 3.3.
+
+WWW: https://pypi.org/project/singledispatch/
diff --git a/devel/py-subprocess32/Makefile b/devel/py-subprocess32/Makefile
new file mode 100644
index 000000000000..2658ebb5c71b
--- /dev/null
+++ b/devel/py-subprocess32/Makefile
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+PORTNAME= subprocess32
+DISTVERSION= 3.5.4
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= dbaio@FreeBSD.org
+COMMENT= Backport of the subprocess module from Python 3
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 only, following EOL of lang/python27
+EXPIRATION_DATE= 2020-12-31
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/_posixsubprocess32.so
+
+.include <bsd.port.mk>
diff --git a/devel/py-subprocess32/distinfo b/devel/py-subprocess32/distinfo
new file mode 100644
index 000000000000..042762426e1a
--- /dev/null
+++ b/devel/py-subprocess32/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1601241537
+SHA256 (subprocess32-3.5.4.tar.gz) = eb2937c80497978d181efa1b839ec2d9622cf9600a039a79d0e108d1f9aec79d
+SIZE (subprocess32-3.5.4.tar.gz) = 97373
diff --git a/devel/py-subprocess32/pkg-descr b/devel/py-subprocess32/pkg-descr
new file mode 100644
index 000000000000..d6a89d6fb8c2
--- /dev/null
+++ b/devel/py-subprocess32/pkg-descr
@@ -0,0 +1,9 @@
+This is a backport of the Python 3 subprocess module for use on Python 2. This
+code has not been tested on Windows or other non-POSIX platforms.
+
+subprocess32 includes many important reliability bug fixes relevant on POSIX
+platforms. The most important of which is a C extension module used internally
+to handle the code path between fork() and exec(). This module is reliable when
+an application is using threads.
+
+WWW: https://github.com/google/python-subprocess32
diff --git a/devel/py-total-ordering/Makefile b/devel/py-total-ordering/Makefile
new file mode 100644
index 000000000000..510945750148
--- /dev/null
+++ b/devel/py-total-ordering/Makefile
@@ -0,0 +1,16 @@
+# $FreeBSD$
+
+PORTNAME= total-ordering
+PORTVERSION= 0.1.0
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= truckman@FreeBSD.org
+COMMENT= Backport functools.total_ordering to Python 2.x
+
+NO_ARCH= yes
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+.include <bsd.port.mk>
diff --git a/devel/py-total-ordering/distinfo b/devel/py-total-ordering/distinfo
new file mode 100644
index 000000000000..c5140e98da4e
--- /dev/null
+++ b/devel/py-total-ordering/distinfo
@@ -0,0 +1,2 @@
+SHA256 (total-ordering-0.1.0.tar.gz) = a14a2a138a52befaa02b3fd53eb3366f66da69020be299af3cf0b54c9441aacc
+SIZE (total-ordering-0.1.0.tar.gz) = 1839
diff --git a/devel/py-total-ordering/pkg-descr b/devel/py-total-ordering/pkg-descr
new file mode 100644
index 000000000000..b382e7a54b6a
--- /dev/null
+++ b/devel/py-total-ordering/pkg-descr
@@ -0,0 +1,3 @@
+functools.total_ordering backport for Python 2.x
+
+WWW: https://github.com/kvesteri/total-ordering
diff --git a/devel/py-typing/Makefile b/devel/py-typing/Makefile
new file mode 100644
index 000000000000..8038990a705d
--- /dev/null
+++ b/devel/py-typing/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+PORTNAME= typing
+PORTVERSION= 3.7.4.1
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= rm@FreeBSD.org
+COMMENT= Type Hints for Python
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 only, backport of Python 3
+EXPIRATION_DATE= 2020-12-31
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/devel/py-typing/distinfo b/devel/py-typing/distinfo
new file mode 100644
index 000000000000..3c152f961ff8
--- /dev/null
+++ b/devel/py-typing/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1582223012
+SHA256 (typing-3.7.4.1.tar.gz) = 91dfe6f3f706ee8cc32d38edbbf304e9b7583fb37108fef38229617f8b3eba23
+SIZE (typing-3.7.4.1.tar.gz) = 77982
diff --git a/devel/py-typing/pkg-descr b/devel/py-typing/pkg-descr
new file mode 100644
index 000000000000..bd205715df0f
--- /dev/null
+++ b/devel/py-typing/pkg-descr
@@ -0,0 +1,8 @@
+This is a backport of the standard library typing module to Python
+versions older than 3.5.
+Typing defines a standard notation for Python function and variable type
+annotations. The notation can be used for documenting code in a concise,
+standard format, and it has been designed to also be used by static and
+runtime type checkers, static analyzers, IDEs and other tools.
+
+WWW: https://pypi.org/project/typing/
diff --git a/devel/py-weakrefmethod/Makefile b/devel/py-weakrefmethod/Makefile
new file mode 100644
index 000000000000..ea50f02bdbac
--- /dev/null
+++ b/devel/py-weakrefmethod/Makefile
@@ -0,0 +1,23 @@
+# Created by: antoine@FreeBSD.org
+# $FreeBSD$
+
+PORTNAME= weakrefmethod
+PORTVERSION= 1.0.3
+CATEGORIES= devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= antoine@FreeBSD.org
+COMMENT= WeakMethod class for storing bound methods using weak references
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Python 2 only, backport of Python 3
+EXPIRATION_DATE= 2020-12-31
+
+NO_ARCH= yes
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+.include <bsd.port.mk>
diff --git a/devel/py-weakrefmethod/distinfo b/devel/py-weakrefmethod/distinfo
new file mode 100644
index 000000000000..9fe5230460fc
--- /dev/null
+++ b/devel/py-weakrefmethod/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1477213167
+SHA256 (weakrefmethod-1.0.3.tar.gz) = 37bc1fbb5575acf82172d4eb7b6fc4412d77d5a1d70dff2c1f8a4574301cda66
+SIZE (weakrefmethod-1.0.3.tar.gz) = 7472
diff --git a/devel/py-weakrefmethod/pkg-descr b/devel/py-weakrefmethod/pkg-descr
new file mode 100644
index 000000000000..3f8b9df6ea0e
--- /dev/null
+++ b/devel/py-weakrefmethod/pkg-descr
@@ -0,0 +1,3 @@
+A WeakMethod class for storing bound methods using weak references.
+
+WWW: https://github.com/twang817/weakrefmethod
diff --git a/devel/rbtools/Makefile b/devel/rbtools/Makefile
new file mode 100644
index 000000000000..705a70d87d1a
--- /dev/null
+++ b/devel/rbtools/Makefile
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+PORTNAME= ${ORIGNAME:tl}
+DISTVERSION= 0.7.11
+CATEGORIES= devel
+MASTER_SITES= http://downloads.reviewboard.org/releases/${ORIGNAME}/${DISTVERSION:R}/
+DISTNAME= ${ORIGNAME}-${DISTVERSION}
+
+MAINTAINER= rakuco@FreeBSD.org
+COMMENT= Set of client tools to use with Review Board
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}six>=1.8.0:devel/py-six@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}tqdm>0:misc/py-tqdm@${PY_FLAVOR}
+
+ORIGNAME= RBTools
+
+NO_ARCH= yes
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+.include <bsd.port.mk>
diff --git a/devel/rbtools/distinfo b/devel/rbtools/distinfo
new file mode 100644
index 000000000000..914c0a0e4435
--- /dev/null
+++ b/devel/rbtools/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1516459636
+SHA256 (RBTools-0.7.11.tar.gz) = 26de153a76d6a3c5bea3442151473857a74338c18ff628acfcfa6c258998f258
+SIZE (RBTools-0.7.11.tar.gz) = 171777
diff --git a/devel/rbtools/pkg-descr b/devel/rbtools/pkg-descr
new file mode 100644
index 000000000000..713b842bce2c
--- /dev/null
+++ b/devel/rbtools/pkg-descr
@@ -0,0 +1,4 @@
+rbtools is a collection of console utility scripts for use with
+Review Board.
+
+WWW: http://www.reviewboard.org/
diff --git a/devel/subversion-lts/Makefile b/devel/subversion-lts/Makefile
new file mode 100644
index 000000000000..50b697d45df1
--- /dev/null
+++ b/devel/subversion-lts/Makefile
@@ -0,0 +1,227 @@
+# Created by: rooneg@electricjellyfish.net
+# $FreeBSD$
+
+PORTREVISION= 0
+PKGNAMESUFFIX= -lts
+
+MAINTAINER= lev@FreeBSD.org
+COMMENT= Version control system, long-time-support version
+
+CONFLICTS_INSTALL= subversion-1.[0-9].[0-9]* \
+ subversion-1.1[0-9].[0-9]* \
+ subversion1[0-9]-1.[0-9].[0-9]*
+
+USE_RC_SUBR= svnserve
+
+PORTDOCS= BUGS CHANGES COMMITTERS INSTALL README
+
+OPTIONS_DEFINE= \
+ BDB \
+ DOCS \
+ FREEBSD_TEMPLATE\
+ GPG_AGENT \
+ NLS \
+ SASL \
+ SERF \
+ STATIC \
+ SVNSERVE_WRAPPER\
+ TEST \
+ TOOLS
+
+OPTIONS_DEFAULT=FREEBSD_TEMPLATE SERF TOOLS
+
+FREEBSD_TEMPLATE_DESC= FreeBSD Project log template
+GPG_AGENT_DESC= Enable GPG agent password store
+SERF_DESC= WebDAV/Delta-V (HTTP/HTTPS) repo access module
+STATIC_DESC= Build static version (no shared libs)
+SVNSERVE_WRAPPER_DESC= Enable svnserve wrapper (umask setter)
+TEST_DESC= Run subversion test suite
+TOOLS_DESC= Install several tools
+
+# Patches required for use with the FreeBSD Project repository only
+FREEBSD_TEMPLATE_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-fbsd-template
+SVNSERVE_WRAPPER_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-svnserve-wrapper
+
+USES+= shebangfix python:2.7,env
+python_OLD_CMD+= "/bin/env python"
+SHEBANG_REGEX= ./tools/.*
+
+.include "Makefile.common"
+
+SVNREPOS?= /home/svn/repos
+SVNFSTYPE?= fsfs
+SVNGROUP?= svn
+SVNUSER?= svn
+
+CONFIGURE_ARGS+= --without-gnome-keyring \
+ --without-kwallet \
+ --with-apxs=no
+
+.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
+SUB_LIST+= SVNSERVE_BIN_EXT=".bin"
+PLIST_SUB+= NO_SVNSERVE_WRAPPER="@comment "
+.else
+SUB_LIST+= SVNSERVE_BIN_EXT=""
+PLIST_SUB+= NO_SVNSERVE_WRAPPER=""
+.endif
+
+.if ${PORT_OPTIONS:MTEST}
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR}
+.endif
+
+.if ${PORT_OPTIONS:MSTATIC}
+. if ${PORT_OPTIONS:MNLS}
+USES+= gettext-tools
+. endif
+. if ${PORT_OPTIONS:MBDB}
+BDB_BUILD_DEPENDS= yes
+. endif
+OLD_LIB_DEPENDS:= ${LIB_DEPENDS:S!^!${LOCALBASE}/lib/!:C!(\.so|\.[0-9]+)?:!.a:!}
+BUILD_DEPENDS+= ${OLD_LIB_DEPENDS}
+LIB_DEPENDS=
+.endif
+
+.if make(repository)
+WITH_REPOSITORY_CREATION= yes
+.endif
+
+.if defined(WITH_REPOSITORY_CREATION)
+MKREPOS_TARGET= _mkrepos
+.endif
+
+pre-everything::
+ @${ECHO_MSG} ""
+.if defined(WITH_REPOSITORY_CREATION)
+ @${ECHO_MSG} "I will create (or use, if it exists) '${SVNUSER}' user and '${SVNGROUP}' group."
+ @${ECHO_MSG} "Make sure that all committers are its members."
+ @${ECHO_MSG} ""
+ @${ECHO_MSG} "Repository will be created at '${SVNREPOS}' with user '${SVNUSER}' and group '${SVNGROUP}'."
+ @${ECHO_MSG} "Type of repository will be '${SVNFSTYPE}'."
+ @${ECHO_MSG} "You could change these settings by defining SVNREPOS, SVNGROUP and SVNFSTYPE."
+.else
+ @${ECHO_MSG} "You can have the repository created for you by defining"
+ @${ECHO_MSG} "WITH_REPOSITORY_CREATION."
+ @${ECHO_MSG} ""
+ @${ECHO_MSG} "Make sure that:"
+ @${ECHO_MSG} "* all your svn users are members of a common group"
+ @${ECHO_MSG} "* this group is the group id of the db/ and locks/"
+ @${ECHO_MSG} " subdirectories of your repository"
+ @${ECHO_MSG} "* the above subdirectories are writable by this group"
+.endif
+
+ @${ECHO_MSG} ""
+.if ${PORT_OPTIONS:MSTATIC}
+ @${ECHO_MSG} "Static binaries will be built."
+.endif # STATIC
+ @${ECHO_MSG} "Many useful scripts will be installed into ${DATADIR}"
+
+pre-configure:
+.if ${PORT_OPTIONS:MBDB}
+ @BDB_VERSION=`${APR_APU_DIR}/${APU_CONFIG} --db-version`; \
+ if [ "$${BDB_VERSION}" != "4" -a "$${BDB_VERSION}" != "5" -a "$${BDB_VERSION}" != "6" ] ; then \
+ ${ECHO_MSG} "" ; \
+ ${ECHO_MSG} 'You should build `'"devel/apr1' with Berkeley DB (4, 5 or 6) support to use subversion with it." ; \
+ ${ECHO_MSG} 'Please rebuild `'"devel/apr1' with option "'`'"BDB' and try again." ; \
+ ${ECHO_MSG} "" ; \
+ ${ECHO_MSG} "Or you can disable Berkeley DB support. Only 'fs' repository backend will be available." ; \
+ ${ECHO_MSG} "" ; \
+ ${FALSE} ; \
+ fi
+.endif
+.if ${PORT_OPTIONS:MSTATIC}
+LIBS_SQLITE3!= pkgconf --libs --static sqlite3
+LIBS+= ${LIBS_SQLITE3}
+# for work with ICU
+LIBS+= -lc++ -lm
+.endif
+
+post-configure:
+# Enable GNOME Keyring / KWallet support in main code, as it is harmless
+ @${REINPLACE_CMD} -E 's%.*#undef SVN_HAVE_(GNOME_KEYRING|KWALLET).*%#define SVN_HAVE_\1 1%' ${WRKSRC}/subversion/svn_private_config.h
+# ugly hack: save tools directory so we don't have to cleanup before installing
+ @${CP} -R ${WRKSRC}/tools ${WRKSRC}/tools.examples
+ @${CHMOD} -R a-st,o+rX ${WRKSRC}/tools.examples
+
+# takes a long time, and will fail but gives maintainer a good oversight
+.if ${PORT_OPTIONS:MTEST}
+test: build
+ -@make check -C ${WRKSRC}
+.endif
+
+post-build-TOOLS-on:
+ @${MAKE} -C ${WRKSRC} tools ${MAKE_ARGS}
+
+post-install: ${MKREPOS_TARGET}
+ -@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+ @${MKDIR} ${STAGEDIR}${DATADIR}
+ (cd ${WRKSRC}/tools.examples && ${TAR} --exclude '*.in' -cf - * | ${TAR} -C ${STAGEDIR}${DATADIR} -xof - )
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+post-install-STATIC-off:
+ -@${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/*.so
+
+post-install-SVNSERVE_WRAPPER-on:
+ @${INSTALL_SCRIPT} ${FILESDIR}/svnserve.wrapper ${STAGEDIR}${PREFIX}/bin/svnserve.sample
+
+post-install-TOOLS-on:
+ @${MAKE} -C ${WRKSRC} install-tools ${MAKE_ARGS}
+ -@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+
+# ===============================================================================
+repository: _mkrepos
+
+_SVNGRPFILES= db locks locks/db.lock locks/db-logs.lock
+SVNGRPFILES= ${_SVNGRPFILES:S,^,${SVNREPOS}/,}
+
+_mkrepos: .USE
+.if !exists(${SVNREPOS})
+.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
+ @if /usr/sbin/pw groupshow "${SVNGROUP}" >/dev/null 2>&1; then \
+ ${ECHO_MSG} "You already have a group \"${SVNGROUP}\", so I will use it."; \
+ else \
+ if /usr/sbin/pw groupadd ${SVNGROUP} -h -; \
+ then \
+ ${ECHO_MSG} "Added group \"${SVNGROUP}\"."; \
+ else \
+ ${ECHO_MSG} "Adding group \"${SVNGROUP}\" failed..."; \
+ ${ECHO_MSG} "Please create it, and try again."; \
+ ${FALSE}; \
+ fi; \
+ fi
+ @if /usr/sbin/pw usershow "${SVNUSER}" >/dev/null 2>&1; then \
+ ${ECHO_MSG} "You already have a user \"${SVNUSER}\", so I will use it."; \
+ else \
+ if /usr/sbin/pw useradd ${SVNUSER} -h -; \
+ then \
+ ${ECHO_MSG} "Added user \"${SVNUSER}\"."; \
+ else \
+ ${ECHO_MSG} "Adding user \"${SVNUSER}\" failed..."; \
+ ${ECHO_MSG} "Please create it, and try again."; \
+ ${FALSE}; \
+ fi; \
+ fi
+.endif
+ @${MKDIR} ${SVNREPOS}
+ @${PREFIX}/bin/svnadmin create --fs-type ${SVNFSTYPE} ${SVNREPOS}
+.if ${PORT_OPTIONS:MSVNSERVE_WRAPPER}
+ @${CHOWN} ${SVNUSER}:${SVNGROUP} ${SVNGRPFILES}
+ @${CHMOD} g+w ${SVNGRPFILES}
+ @for i in ${SVNREPOS}/db/* ; do \
+ i=$${i##*/}; \
+ case $$i in \
+ DB_CONFIG|fs-type|uuid) ;; \
+ *) ${CHOWN} -R ${SVNUSER}:${SVNGROUP} ${SVNREPOS}/db/$$i; \
+ ${CHMOD} -R g+w ${SVNREPOS}/db/$$i; \
+ ;; \
+ esac; \
+ done
+.endif
+.endif
+
+svn-build-outputs-hack:
+ (cd ${WRKSRC} && ${PATCH} ${PATCH_DIST_ARGS} -p0 < ${PATCHDIR}/extra-patch-build.conf)
+ (cd ${WRKSRC} && python2.7 gen-make.py --release --installed-libs libsvn_client,libsvn_delta,libsvn_diff,libsvn_fs,libsvn_fs_x,libsvn_ra,libsvn_repos,libsvn_subr,libsvn_wc)
+ ${MV} ${WRKSRC}/build-outputs.mk ${FILESDIR}/build-outputs.mk.addons
+
+.include <bsd.port.post.mk>
diff --git a/devel/subversion-lts/Makefile.common b/devel/subversion-lts/Makefile.common
new file mode 100644
index 000000000000..057584c8ef5f
--- /dev/null
+++ b/devel/subversion-lts/Makefile.common
@@ -0,0 +1,115 @@
+# Created by: rooneg@electricjellyfish.net
+# $FreeBSD$
+
+PORTNAME?= subversion
+PORTVERSION= 1.10.6
+PORTREVISION?= 0
+CATEGORIES+= devel
+MASTER_SITES= APACHE/subversion
+
+GNU_CONFIGURE= yes
+USES+= cpe libtool pathfix pkgconfig shebangfix tar:bzip2
+SHEBANG_FILES= tools/server-side/svnpubsub/rc.d/svnpubsub.solaris \
+ tools/server-side/svnpubsub/rc.d/svnwcsub.solaris
+
+LICENSE= APACHE20
+
+CPE_VENDOR= apache
+
+CONFLICTS_INSTALL+= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-1.[0-9].[0-9]* \
+ ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-1.1[0-9].[0-9]*
+
+LIB_DEPENDS+= libapr-1.so:devel/apr1 \
+ libsqlite3.so:databases/sqlite3 \
+ libexpat.so:textproc/expat2 \
+ libutf8proc.so:textproc/utf8proc \
+ liblz4.so:archivers/liblz4
+
+CONFIGURE_ARGS+= --without-swig \
+ --with-sqlite=${LOCALBASE} \
+ --with-expat=${LOCALBASE}/include:${LOCALBASE}/lib:expat
+
+# ===============================================================
+OPTIONS_SUB= yes
+
+BDB_CONFIGURE_ON= --enable-bdb6
+BDB_CONFIGURE_OFF= --without-berkeley-db
+BDB_USES= bdb
+
+NLS_CONFIGURE_OFF= --disable-nls
+NLS_USES= gettext
+
+SASL_CONFIGURE_OFF= --without-sasl
+SASL_CONFIGURE_ON= --with-sasl=${LOCALBASE}
+SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
+
+SERF_CONFIGURE_OFF= --without-serf
+SERF_CONFIGURE_ON= --with-serf
+SERF_LIB_DEPENDS= libserf-1.so:www/serf
+
+GPG_AGENT_CONFIGURE_OFF= --without-gpg-agent
+GPG_AGENT_CONFIGURE_ON= --with-gpg-agent
+GPG_AGENT_BUILD_DEPENDS= gpg-agent:security/gnupg
+GPG_AGENT_RUN_DEPENDS= gpg-agent:security/gnupg
+
+STATIC_CONFIGURE_ON= --enable-all-static PKG_CONFIG="${LOCALBASE}/bin/pkg-config --static"
+
+# ===============================================================
+.include <bsd.port.options.mk>
+
+.if defined(WITH_DEBUG)
+CONFIGURE_ARGS+= --enable-maintainer-mode --enable-debug
+.endif
+
+APR_CONFIG= ${LOCALBASE}/bin/apr-1-config
+APU_CONFIG= ${LOCALBASE}/bin/apu-1-config
+
+CONFIGURE_ARGS+=--with-apr=${APR_CONFIG} --with-apr-util=${APU_CONFIG}
+
+.if ${ARCH} == "amd64" || ${ARCH} == "ia64"
+CFLAGS+= -fpic -DPIC
+.endif
+
+OPTIONS_FILE_UNSET?=""
+OPTIONS_FILE_SET?=""
+
+.if ( ${PORT_OPTIONS:MFREEBSD_TEMPLATE} || !${OPTIONS_FILE_UNSET:MFREEBSD_TEMPLATE} ) && defined(ORGANIZATION)
+CFLAGS+= -DHAS_ORGANIZATION_NAME
+.endif
+
+.include <bsd.port.pre.mk>
+
+pre-everything::
+.if defined(SVN_BUILD_ADDONS)
+.if ${PORT_OPTIONS:MSTATIC} || ${OPTIONS_FILE_SET:MSTATIC}
+ @${ECHO_MSG} "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ @${ECHO_MSG} "!!! addons (bindings, mod_dav_svn, etc). and static build are not compatible !!!"
+ @${ECHO_MSG} "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+ @${FALSE}
+.endif
+.endif
+
+pre-patch:
+.if defined(SVN_BUILD_ADDONS)
+ @${CP} ${FILESDIR}/build-outputs.mk.addons ${WRKSRC}/build-outputs.mk
+.endif
+
+post-patch:
+.if ${PREFIX} != "/usr"
+ @${REINPLACE_CMD} "s#/etc/subversion#${ETCDIR}#g" ${WRKSRC}/subversion/libsvn_subr/config_file.c
+ @${REINPLACE_CMD} "s#/etc/subversion#${ETCDIR}#g" ${WRKSRC}/subversion/libsvn_subr/config_impl.h
+.endif
+ @${REINPLACE_CMD} "s#^swig_pydir =.*#swig_pydir = ${PYTHON_SITELIBDIR}/libsvn#" ${WRKSRC}/Makefile.in
+ @${REINPLACE_CMD} "s#^swig_pydir_extra =.*#swig_pydir_extra = ${PYTHON_SITELIBDIR}/svn#" ${WRKSRC}/Makefile.in
+.if ( ${PORT_OPTIONS:MFREEBSD_TEMPLATE} || !${OPTIONS_FILE_UNSET:MFREEBSD_TEMPLATE} ) && defined(ORGANIZATION)
+ @${ECHO_CMD} "#define ORGANIZATION_NAME \"${ORGANIZATION}\"" > ${WRKSRC}/subversion/freebsd-organization.h
+.endif
+# shebangfix
+ @${FIND} ${WRKSRC}/tools/ -type f -exec ${GREP} -l -e '#!/bin/b' -e '#!/bin/env' \
+ -e '#!/usr/bin/p' {} + | ${XARGS} ${REINPLACE_CMD} -e \
+ '1s|#\!/bin/b|#\!/usr/local/bin/b|' \
+ -e '1s|#\!/bin/env|#\!/usr/bin/env|' \
+ -e '1s|#\!/usr/bin/p|#\!/usr/local/bin/p|'
+# remove all .bak files to clean the stage
+ @${FIND} ${WRKSRC} -name '*.bak' -delete
+
diff --git a/devel/subversion-lts/distinfo b/devel/subversion-lts/distinfo
new file mode 100644
index 000000000000..9a2e6a2cf50a
--- /dev/null
+++ b/devel/subversion-lts/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1563993998
+SHA256 (subversion-1.10.6.tar.bz2) = 18c8e72691e6d2e7d3137ae4ad98b9f8977cca5eb2504fab48d55e584b10eca7
+SIZE (subversion-1.10.6.tar.bz2) = 8397762
diff --git a/devel/subversion-lts/files/220_subversion.conf.sample.in b/devel/subversion-lts/files/220_subversion.conf.sample.in
new file mode 100644
index 000000000000..07bd9a5e1c7a
--- /dev/null
+++ b/devel/subversion-lts/files/220_subversion.conf.sample.in
@@ -0,0 +1,104 @@
+## $FreeBSD$
+## vim: set filetype=apache:
+##
+## module file for subversion
+##
+## PROVIDE: mod_dav_svn mod_authz_svn mod_dontdothat
+## REQUIRE: mod_dav
+
+## make sure the following module is activated (httpd.conf or here)
+## LoadModule dav_module %%APACHEMODDIR%%/mod_dav.so
+
+
+## ==========================================================================
+## Subversion modules
+## ==========================================================================
+#LoadModule dav_svn_module %%APACHEMODDIR%%/mod_dav_svn.so
+#LoadModule authz_svn_module %%APACHEMODDIR%%/mod_authz_svn.so
+#LoadModule dontdothat_module %%APACHEMODDIR%%/mod_dontdothat.so
+
+
+## ==========================================================================
+## Example multi repo configuration from
+## http://svnbook.red-bean.com/
+##
+## The Printed book can be ordered from
+## http://svnbook.red-bean.com/buy/
+##
+## ==========================================================================
+## Required apache24 modules for the example below:
+## mod_alias mod_auth_digest, mod_authn_core, mod_authn_file,
+## mod_authz_core, mod_authz_user, mod_dav
+##
+## ==========================================================================
+##
+## The trailing '/' in /svn/ is needed to browse repos with standart browser!
+## RedirectMatch ^(/svn)$ $1/
+##
+## Tuning:
+## KeepAlive on
+## MaxKeepAliveRequests 1000
+##
+## # http://subversion.apache.org/docs/release-notes/1.7.html#server-performance-tuning
+## # Calculate your own values!
+## # For mod_dav_svn, a 1GB cache configuration with maximum data coverage looks like this
+## <IfModule dav_svn_module>
+## SVNInMemoryCacheSize 1048576
+## SVNCacheFullTexts on
+## SVNCacheTextDeltas on
+## </IfModule>
+##
+## Multiple Repos with Digest auth:
+## - AuthName is an arbitrary name that you choose for the authentication
+## domain. Most browsers display this name in the dialog box when prompting
+## for username and password.
+## - AuthType specifies the type of authentication to use.
+## - AuthUserFile specifies the location of the password file to use.
+##
+##<IfModule dav_svn_module>
+##<Location /svn/>
+## <ifModule mime_module>
+## RemoveEncoding .gz .tgz .Z
+## RemoveType .gz .tgz .Z
+## </ifModule>
+##
+## # Enable Subversion
+## DAV svn
+##
+## # Directory containing all repository for this path
+## SVNParentPath /space/svn/
+##
+## # List repositories collection
+## SVNListParentPath on
+##
+## # Disable WebDAV automatic versioning
+## SVNAutoversioning off
+##
+## # Return a descriptive name for the repository.
+## SVNReposName "Project XYZ repo"
+##
+## # Anonymous access
+## AuthzSVNAnonymous off
+##
+## # XSL to display files
+## SVNIndexXSLT "/style/svnindex.xsl"
+##
+## # Authentication: Digest
+## AuthType Digest
+## AuthName "SVN-repo"
+## AuthDigestDomain /svn/ http://mirror.my.dom/svn2/
+##
+## # You can use the htdigest program to create the password database:
+## # htdigest -c "%%APACHEETCDIR%%/svn-auth.passwd" SVN-repo admin
+## AuthDigestProvider file
+## AuthUserFile %%APACHEETCDIR%%/svn-auth.passwd
+##
+## # Authorization: Authenticated users only
+## Require valid-user
+##
+## # Do not limit large update requests
+## LimitXMLRequestBody 0
+##</Location>
+##</IfModule>
+## ==========================================================================
+
diff --git a/devel/subversion-lts/files/build-outputs.mk.addons b/devel/subversion-lts/files/build-outputs.mk.addons
new file mode 100644
index 000000000000..397cf11589eb
--- /dev/null
+++ b/devel/subversion-lts/files/build-outputs.mk.addons
@@ -0,0 +1,3684 @@
+# DO NOT EDIT -- AUTOMATICALLY GENERATED BY build/generator/gen_make.py
+# FROM build/generator/templates/build-outputs.mk.ezt
+
+########################################
+# Section 1: Global make variables
+########################################
+
+FS_BASE_DEPS = subversion/libsvn_fs_base/libsvn_fs_base-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la
+FS_BASE_LINK = ../../subversion/libsvn_fs_base/libsvn_fs_base-1.la ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la
+
+FS_FS_DEPS = subversion/libsvn_fs_fs/libsvn_fs_fs-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la
+FS_FS_LINK = ../../subversion/libsvn_fs_fs/libsvn_fs_fs-1.la ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la
+
+FS_X_DEPS = subversion/libsvn_fs_util/libsvn_fs_util-1.la
+FS_X_LINK = -lsvn_fs_x-1 ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la
+
+RA_LOCAL_DEPS = subversion/libsvn_ra_local/libsvn_ra_local-1.la
+RA_LOCAL_LINK = ../../subversion/libsvn_ra_local/libsvn_ra_local-1.la
+
+RA_SERF_DEPS = subversion/libsvn_ra_serf/libsvn_ra_serf-1.la
+RA_SERF_LINK = ../../subversion/libsvn_ra_serf/libsvn_ra_serf-1.la
+
+RA_SVN_DEPS = subversion/libsvn_ra_svn/libsvn_ra_svn-1.la
+RA_SVN_LINK = ../../subversion/libsvn_ra_svn/libsvn_ra_svn-1.la
+
+BUILD_DIRS = subversion/tests/afl subversion/tests/cmdline subversion/tests/libsvn_subr subversion/tests/libsvn_repos subversion/tests/libsvn_fs_base subversion/tests/libsvn_client subversion/tests/libsvn_wc subversion/tests/libsvn_client/../libsvn_wc subversion/bindings/cxxhl subversion/bindings/cxxhl/tests tools/diff subversion/tests/libsvn_diff subversion/tests/libsvn_fs_fs subversion/tests/libsvn_fs subversion/tests/libsvn_fs_x tools/dev subversion/bindings/javahl/src/org/apache/subversion/javahl/callback subversion/bindings/javahl/classes subversion/bindings/javahl/include subversion/bindings/javahl/src/org/tigris/subversion/javahl subversion/bindings/javahl/tests/org/tigris/subversion/javahl subversion/bindings/javahl/src/org/apache/subversion/javahl subversion/bindings/javahl/src/org/apache/subversion/javahl/remote subversion/bindings/javahl/src/org/apache/subversion/javahl/types subversion/bindings/javahl/src/org/apache/subversion/javahl/util subversion/bindings/javahl/tests/org/apache/subversion/javahl googlemock googlemock/googletest/src googlemock/googlemock/src subversion/libsvn_auth_gnome_keyring subversion/libsvn_auth_kwallet subversion/libsvn_client subversion/libsvn_delta subversion/libsvn_diff subversion/libsvn_fs subversion/libsvn_fs_base subversion/libsvn_fs_base/bdb subversion/libsvn_fs_base/util subversion/libsvn_fs_fs subversion/libsvn_fs_util subversion/libsvn_fs_x subversion/libsvn_ra subversion/libsvn_ra_local subversion/libsvn_ra_serf subversion/libsvn_ra_svn subversion/libsvn_repos subversion/libsvn_subr subversion/libsvn_subr/lz4 subversion/bindings/swig/perl/libsvn_swig_perl subversion/bindings/swig/python/libsvn_swig_py subversion/bindings/swig/ruby/libsvn_swig_ruby subversion/tests subversion/libsvn_wc subversion/bindings/cxxhl/src subversion/bindings/cxxhl/src/aprwrap subversion/bindings/javahl/native subversion/bindings/javahl/native/jniwrapper subversion/po subversion/mod_authz_svn subversion/mod_dav_svn subversion/mod_dav_svn/reports subversion/mod_dav_svn/posts tools/server-side/mod_dontdothat subversion/tests/libsvn_ra_local subversion/tests/libsvn_ra subversion/tests/libsvn_delta subversion/svn tools/client-side/svn-mergeinfo-normalizer tools/server-side tools/dev/wc-ng subversion/svnadmin subversion/svnbench tools/client-side/svnconflict subversion/svndumpfilter subversion/svnfsfs subversion/svnlook tools/dev/svnmover subversion/svnmucc tools/dev/svnraisetreeconflict subversion/svnrdump subversion/svnserve subversion/svnsync subversion/svnversion subversion/bindings/swig subversion/tests/libsvn_wc/../../libsvn_subr subversion/bindings/swig/python subversion/bindings/swig/perl subversion/bindings/swig/ruby subversion/bindings/swig/proxy
+
+BDB_TEST_DEPS = subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT)
+
+BDB_TEST_PROGRAMS = subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT)
+
+TEST_DEPS = subversion/tests/afl/afl-x509$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_repos/authz-test$(EXEEXT) subversion/tests/libsvn_subr/bit-array-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/compress-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_client/conflicts-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_repos/dump-load-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT) subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/cmdline/lock-helper$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_client/mtcc-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/packed-data-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT) subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/root-pools-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/sqlite-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_subr/x509-test$(EXEEXT) subversion/tests/libsvn_subr/xml-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subversion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/tests/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/mod_authz_svn_tests.py subversion/tests/cmdline/mod_dav_svn_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py subversion/tests/cmdline/resolve_tests.py subversion/tests/cmdline/revert_tests.py subversion/tests/cmdline/schedule_tests.py subversion/tests/cmdline/shelve_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnfsfs_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tests/cmdline/svnmover_tests.py subversion/tests/cmdline/svnmucc_tests.py subversion/tests/cmdline/svnrdump_tests.py subversion/tests/cmdline/svnsync_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py
+
+TEST_PROGRAMS = subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_repos/authz-test$(EXEEXT) subversion/tests/libsvn_subr/bit-array-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/compress-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_client/conflicts-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_repos/dump-load-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT) subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_client/mtcc-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/packed-data-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT) subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/root-pools-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/sqlite-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_subr/x509-test$(EXEEXT) subversion/tests/libsvn_subr/xml-test$(EXEEXT) subversion/tests/cmdline/authz_tests.py subversion/tests/cmdline/autoprop_tests.py subversion/tests/cmdline/basic_tests.py subversion/tests/cmdline/blame_tests.py subversion/tests/cmdline/cat_tests.py subversion/tests/cmdline/changelist_tests.py subversion/tests/cmdline/checkout_tests.py subversion/tests/cmdline/commit_tests.py subversion/tests/cmdline/copy_tests.py subversion/tests/cmdline/depth_tests.py subversion/tests/cmdline/diff_tests.py subversion/tests/cmdline/entries_tests.py subversion/tests/cmdline/export_tests.py subversion/tests/cmdline/externals_tests.py subversion/tests/cmdline/getopt_tests.py subversion/tests/cmdline/history_tests.py subversion/tests/cmdline/import_tests.py subversion/tests/cmdline/info_tests.py subversion/tests/cmdline/input_validation_tests.py subversion/tests/cmdline/iprop_authz_tests.py subversion/tests/cmdline/iprop_tests.py subversion/tests/cmdline/lock_tests.py subversion/tests/cmdline/log_tests.py subversion/tests/cmdline/merge_authz_tests.py subversion/tests/cmdline/merge_automatic_tests.py subversion/tests/cmdline/merge_reintegrate_tests.py subversion/tests/cmdline/merge_tests.py subversion/tests/cmdline/merge_tree_conflict_tests.py subversion/tests/cmdline/mergeinfo_tests.py subversion/tests/cmdline/mod_authz_svn_tests.py subversion/tests/cmdline/mod_dav_svn_tests.py subversion/tests/cmdline/move_tests.py subversion/tests/cmdline/patch_tests.py subversion/tests/cmdline/prop_tests.py subversion/tests/cmdline/redirect_tests.py subversion/tests/cmdline/relocate_tests.py subversion/tests/cmdline/resolve_tests.py subversion/tests/cmdline/revert_tests.py subversion/tests/cmdline/schedule_tests.py subversion/tests/cmdline/shelve_tests.py subversion/tests/cmdline/special_tests.py subversion/tests/cmdline/stat_tests.py subversion/tests/cmdline/svnadmin_tests.py subversion/tests/cmdline/svnauthz_tests.py subversion/tests/cmdline/svndumpfilter_tests.py subversion/tests/cmdline/svnfsfs_tests.py subversion/tests/cmdline/svnlook_tests.py subversion/tests/cmdline/svnmover_tests.py subversion/tests/cmdline/svnmucc_tests.py subversion/tests/cmdline/svnrdump_tests.py subversion/tests/cmdline/svnsync_authz_tests.py subversion/tests/cmdline/svnsync_tests.py subversion/tests/cmdline/svnversion_tests.py subversion/tests/cmdline/switch_tests.py subversion/tests/cmdline/trans_tests.py subversion/tests/cmdline/tree_conflict_tests.py subversion/tests/cmdline/update_tests.py subversion/tests/cmdline/upgrade_tests.py subversion/tests/cmdline/wc_tests.py
+
+check-deps test-deps: subversion/tests/afl/afl-x509$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/cmdline/lock-helper$(EXEEXT) tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT)
+
+MANPAGES = subversion/svn/svn.1 subversion/svnadmin/svnadmin.1 subversion/svndumpfilter/svndumpfilter.1 subversion/svnlook/svnlook.1 subversion/svnmucc/svnmucc.1 subversion/svnrdump/svnrdump.1 subversion/svnserve/svnserve.8 subversion/svnserve/svnserve.conf.5 subversion/svnsync/svnsync.1 subversion/svnversion/svnversion.1
+
+CLEAN_FILES = subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT) subversion/svn/svn$(EXEEXT) subversion/svnadmin/svnadmin$(EXEEXT) subversion/svnbench/svnbench$(EXEEXT) subversion/svndumpfilter/svndumpfilter$(EXEEXT) subversion/svnfsfs/svnfsfs$(EXEEXT) subversion/svnlook/svnlook$(EXEEXT) subversion/svnmucc/svnmucc$(EXEEXT) subversion/svnrdump/svnrdump$(EXEEXT) subversion/svnserve/svnserve$(EXEEXT) subversion/svnsync/svnsync$(EXEEXT) subversion/svnversion/svnversion$(EXEEXT) subversion/tests/afl/afl-x509$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/cmdline/authz_tests.pyc subversion/tests/cmdline/autoprop_tests.pyc subversion/tests/cmdline/basic_tests.pyc subversion/tests/cmdline/blame_tests.pyc subversion/tests/cmdline/cat_tests.pyc subversion/tests/cmdline/changelist_tests.pyc subversion/tests/cmdline/checkout_tests.pyc subversion/tests/cmdline/commit_tests.pyc subversion/tests/cmdline/copy_tests.pyc subversion/tests/cmdline/depth_tests.pyc subversion/tests/cmdline/diff_tests.pyc subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/cmdline/entries_tests.pyc subversion/tests/cmdline/export_tests.pyc subversion/tests/cmdline/externals_tests.pyc subversion/tests/cmdline/getopt_tests.pyc subversion/tests/cmdline/history_tests.pyc subversion/tests/cmdline/import_tests.pyc subversion/tests/cmdline/info_tests.pyc subversion/tests/cmdline/input_validation_tests.pyc subversion/tests/cmdline/iprop_authz_tests.pyc subversion/tests/cmdline/iprop_tests.pyc subversion/tests/cmdline/lock-helper$(EXEEXT) subversion/tests/cmdline/lock_tests.pyc subversion/tests/cmdline/log_tests.pyc subversion/tests/cmdline/merge_authz_tests.pyc subversion/tests/cmdline/merge_automatic_tests.pyc subversion/tests/cmdline/merge_reintegrate_tests.pyc subversion/tests/cmdline/merge_tests.pyc subversion/tests/cmdline/merge_tree_conflict_tests.pyc subversion/tests/cmdline/mergeinfo_tests.pyc subversion/tests/cmdline/mod_authz_svn_tests.pyc subversion/tests/cmdline/mod_dav_svn_tests.pyc subversion/tests/cmdline/move_tests.pyc subversion/tests/cmdline/patch_tests.pyc subversion/tests/cmdline/prop_tests.pyc subversion/tests/cmdline/redirect_tests.pyc subversion/tests/cmdline/relocate_tests.pyc subversion/tests/cmdline/resolve_tests.pyc subversion/tests/cmdline/revert_tests.pyc subversion/tests/cmdline/schedule_tests.pyc subversion/tests/cmdline/shelve_tests.pyc subversion/tests/cmdline/special_tests.pyc subversion/tests/cmdline/stat_tests.pyc subversion/tests/cmdline/svnadmin_tests.pyc subversion/tests/cmdline/svnauthz_tests.pyc subversion/tests/cmdline/svndumpfilter_tests.pyc subversion/tests/cmdline/svnfsfs_tests.pyc subversion/tests/cmdline/svnlook_tests.pyc subversion/tests/cmdline/svnmover_tests.pyc subversion/tests/cmdline/svnmucc_tests.pyc subversion/tests/cmdline/svnrdump_tests.pyc subversion/tests/cmdline/svnsync_authz_tests.pyc subversion/tests/cmdline/svnsync_tests.pyc subversion/tests/cmdline/svnversion_tests.pyc subversion/tests/cmdline/switch_tests.pyc subversion/tests/cmdline/trans_tests.pyc subversion/tests/cmdline/tree_conflict_tests.pyc subversion/tests/cmdline/update_tests.pyc subversion/tests/cmdline/upgrade_tests.pyc subversion/tests/cmdline/wc_tests.pyc subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_client/conflicts-test$(EXEEXT) subversion/tests/libsvn_client/mtcc-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT) subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT) subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_repos/authz-test$(EXEEXT) subversion/tests/libsvn_repos/dump-load-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_subr/bit-array-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/compress-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/packed-data-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT) subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/root-pools-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/sqlite-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_subr/x509-test$(EXEEXT) subversion/tests/libsvn_subr/xml-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer$(EXEEXT) tools/client-side/svnconflict/svnconflict$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/dev/svnmover/svnmover$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT) tools/dev/x509-parser$(EXEEXT) tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT)
+EXTRACLEAN_FILES = subversion/libsvn_fs_fs/rep-cache-db.h subversion/libsvn_fs_x/rep-cache-db.h subversion/libsvn_subr/internal_statements.h subversion/libsvn_wc/wc-queries.h subversion/tests/libsvn_wc/wc-test-queries.h \
+ $(abs_builddir)/subversion/libsvn_subr/errorcode.inc \
+ $(abs_builddir)/subversion/libsvn_subr/config_keys.inc \
+ $(abs_srcdir)/compile_commands.json
+
+SWIG_INCLUDES = -I$(abs_builddir)/subversion \
+ -I$(abs_srcdir)/subversion/include \
+ -I$(abs_srcdir)/subversion/bindings/swig \
+ -I$(abs_srcdir)/subversion/bindings/swig/include \
+ -I$(abs_srcdir)/subversion/bindings/swig/proxy \
+ -I$(abs_builddir)/subversion/bindings/swig/proxy \
+ $(SVN_APR_INCLUDES) $(SVN_APRUTIL_INCLUDES)
+
+RELEASE_MODE = 1
+
+
+########################################
+# Section 2: SWIG headers (wrappers and external runtimes)
+########################################
+
+
+########################################
+# Section 3: SWIG autogen rules
+########################################
+
+autogen-swig-py: subversion/bindings/swig/python/core.c subversion/bindings/swig/python/svn_client.c subversion/bindings/swig/python/svn_delta.c subversion/bindings/swig/python/svn_diff.c subversion/bindings/swig/python/svn_fs.c subversion/bindings/swig/python/svn_ra.c subversion/bindings/swig/python/svn_repos.c subversion/bindings/swig/python/svn_wc.c
+autogen-swig: autogen-swig-py
+
+autogen-swig-pl: subversion/bindings/swig/perl/native/core.c subversion/bindings/swig/perl/native/svn_client.c subversion/bindings/swig/perl/native/svn_delta.c subversion/bindings/swig/perl/native/svn_diff.c subversion/bindings/swig/perl/native/svn_fs.c subversion/bindings/swig/perl/native/svn_ra.c subversion/bindings/swig/perl/native/svn_repos.c subversion/bindings/swig/perl/native/svn_wc.c
+autogen-swig: autogen-swig-pl
+
+autogen-swig-rb: subversion/bindings/swig/ruby/core.c subversion/bindings/swig/ruby/svn_client.c subversion/bindings/swig/ruby/svn_delta.c subversion/bindings/swig/ruby/svn_diff.c subversion/bindings/swig/ruby/svn_fs.c subversion/bindings/swig/ruby/svn_ra.c subversion/bindings/swig/ruby/svn_repos.c subversion/bindings/swig/ruby/svn_wc.c
+autogen-swig: autogen-swig-rb
+
+
+
+########################################
+# Section 4: Rules to build SWIG .c files from .i files
+########################################
+
+
+# This needs to be here, rather than in Makefile.in, else
+# './autogen.sh --release' doesn't find it.
+.swig_checked:
+ @if [ "$(SWIG)" = "none" ]; then \
+ echo "SWIG disabled at configure time" >&2; \
+ exit 1; \
+ fi
+ @touch .swig_checked
+
+
+########################################
+# Section 5: Individual target build rules
+########################################
+
+afl_x509_PATH = subversion/tests/afl
+afl_x509_DEPS = subversion/tests/afl/afl-x509.lo
+afl_x509_OBJECTS = afl-x509.lo
+subversion/tests/afl/afl-x509$(EXEEXT): $(afl_x509_DEPS)
+ cd subversion/tests/afl && $(LINK) $(afl_x509_LDFLAGS) -o afl-x509$(EXEEXT) $(afl_x509_OBJECTS) -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+atomic_ra_revprop_change_PATH = subversion/tests/cmdline
+atomic_ra_revprop_change_DEPS = subversion/tests/cmdline/atomic-ra-revprop-change.lo
+atomic_ra_revprop_change_OBJECTS = atomic-ra-revprop-change.lo
+subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT): $(atomic_ra_revprop_change_DEPS)
+ cd subversion/tests/cmdline && $(LINK) $(atomic_ra_revprop_change_LDFLAGS) -o atomic-ra-revprop-change$(EXEEXT) $(atomic_ra_revprop_change_OBJECTS) -lsvn_ra-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+auth_test_PATH = subversion/tests/libsvn_subr
+auth_test_DEPS = subversion/tests/libsvn_subr/auth-test.lo subversion/tests/libsvn_test-1.la
+auth_test_OBJECTS = auth-test.lo
+subversion/tests/libsvn_subr/auth-test$(EXEEXT): $(auth_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(auth_test_LDFLAGS) -o auth-test$(EXEEXT) $(auth_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+authz_test_PATH = subversion/tests/libsvn_repos
+authz_test_DEPS = subversion/tests/libsvn_repos/authz-test.lo subversion/tests/libsvn_test-1.la
+authz_test_OBJECTS = authz-test.lo
+subversion/tests/libsvn_repos/authz-test$(EXEEXT): $(authz_test_DEPS)
+ cd subversion/tests/libsvn_repos && $(LINK) $(authz_test_LDFLAGS) -o authz-test$(EXEEXT) $(authz_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+bit_array_test_PATH = subversion/tests/libsvn_subr
+bit_array_test_DEPS = subversion/tests/libsvn_subr/bit-array-test.lo subversion/tests/libsvn_test-1.la
+bit_array_test_OBJECTS = bit-array-test.lo
+subversion/tests/libsvn_subr/bit-array-test$(EXEEXT): $(bit_array_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(bit_array_test_LDFLAGS) -o bit-array-test$(EXEEXT) $(bit_array_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+cache_test_PATH = subversion/tests/libsvn_subr
+cache_test_DEPS = subversion/tests/libsvn_subr/cache-test.lo subversion/tests/libsvn_test-1.la
+cache_test_OBJECTS = cache-test.lo
+subversion/tests/libsvn_subr/cache-test$(EXEEXT): $(cache_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(cache_test_LDFLAGS) -o cache-test$(EXEEXT) $(cache_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+changes_test_PATH = subversion/tests/libsvn_fs_base
+changes_test_DEPS = subversion/tests/libsvn_fs_base/changes-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_base/libsvn_fs_base-1.la
+changes_test_OBJECTS = changes-test.lo
+subversion/tests/libsvn_fs_base/changes-test$(EXEEXT): $(changes_test_DEPS)
+ cd subversion/tests/libsvn_fs_base && $(LINK) $(changes_test_LDFLAGS) -o changes-test$(EXEEXT) $(changes_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_base/libsvn_fs_base-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+checksum_test_PATH = subversion/tests/libsvn_subr
+checksum_test_DEPS = subversion/tests/libsvn_subr/checksum-test.lo subversion/tests/libsvn_test-1.la
+checksum_test_OBJECTS = checksum-test.lo
+subversion/tests/libsvn_subr/checksum-test$(EXEEXT): $(checksum_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(checksum_test_LDFLAGS) -o checksum-test$(EXEEXT) $(checksum_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(SVN_ZLIB_LIBS) $(LIBS)
+
+client_test_PATH = subversion/tests/libsvn_client
+client_test_DEPS = subversion/tests/libsvn_client/client-test.lo subversion/tests/libsvn_test-1.la
+client_test_OBJECTS = client-test.lo
+subversion/tests/libsvn_client/client-test$(EXEEXT): $(client_test_DEPS)
+ cd subversion/tests/libsvn_client && $(LINK) $(client_test_LDFLAGS) -o client-test$(EXEEXT) $(client_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_client-1 -lsvn_wc-1 -lsvn_repos-1 -lsvn_ra-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+compat_test_PATH = subversion/tests/libsvn_subr
+compat_test_DEPS = subversion/tests/libsvn_subr/compat-test.lo subversion/tests/libsvn_test-1.la
+compat_test_OBJECTS = compat-test.lo
+subversion/tests/libsvn_subr/compat-test$(EXEEXT): $(compat_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(compat_test_LDFLAGS) -o compat-test$(EXEEXT) $(compat_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+compress_test_PATH = subversion/tests/libsvn_subr
+compress_test_DEPS = subversion/tests/libsvn_subr/compress-test.lo subversion/tests/libsvn_test-1.la
+compress_test_OBJECTS = compress-test.lo
+subversion/tests/libsvn_subr/compress-test$(EXEEXT): $(compress_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(compress_test_LDFLAGS) -o compress-test$(EXEEXT) $(compress_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+config_test_PATH = subversion/tests/libsvn_subr
+config_test_DEPS = subversion/tests/libsvn_subr/config-test.lo subversion/tests/libsvn_test-1.la
+config_test_OBJECTS = config-test.lo
+subversion/tests/libsvn_subr/config-test$(EXEEXT): $(config_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(config_test_LDFLAGS) -o config-test$(EXEEXT) $(config_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+conflict_data_test_PATH = subversion/tests/libsvn_wc
+conflict_data_test_DEPS = subversion/tests/libsvn_wc/conflict-data-test.lo subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_test-1.la
+conflict_data_test_OBJECTS = conflict-data-test.lo utils.lo
+subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT): $(conflict_data_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(conflict_data_test_LDFLAGS) -o conflict-data-test$(EXEEXT) $(conflict_data_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+conflicts_test_PATH = subversion/tests/libsvn_client
+conflicts_test_DEPS = subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_client/conflicts-test.lo subversion/tests/libsvn_test-1.la
+conflicts_test_OBJECTS = ../libsvn_wc/utils.lo conflicts-test.lo
+subversion/tests/libsvn_client/conflicts-test$(EXEEXT): $(conflicts_test_DEPS)
+ cd subversion/tests/libsvn_client && $(LINK) $(conflicts_test_LDFLAGS) -o conflicts-test$(EXEEXT) $(conflicts_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_client-1 -lsvn_wc-1 -lsvn_repos-1 -lsvn_ra-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+crypto_test_PATH = subversion/tests/libsvn_subr
+crypto_test_DEPS = subversion/tests/libsvn_subr/crypto-test.lo subversion/tests/libsvn_test-1.la
+crypto_test_OBJECTS = crypto-test.lo
+subversion/tests/libsvn_subr/crypto-test$(EXEEXT): $(crypto_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(crypto_test_LDFLAGS) -o crypto-test$(EXEEXT) $(crypto_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+cxxhl_tests_PATH = subversion/bindings/cxxhl
+cxxhl_tests_DEPS = subversion/bindings/cxxhl/tests/cxxhl-tests.lo subversion/bindings/cxxhl/tests/test_aprwrap.lo subversion/bindings/cxxhl/tests/test_exception.lo subversion/bindings/cxxhl/libsvncxxhl-1.la googlemock/libgooglemock-1.la
+cxxhl_tests_OBJECTS = tests/cxxhl-tests.lo tests/test_aprwrap.lo tests/test_exception.lo
+subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT): $(cxxhl_tests_DEPS)
+ if $(SVN_USE_GOOGLEMOCK) ; then cd subversion/bindings/cxxhl && $(LINK_CXX) $(cxxhl_tests_LDFLAGS) -o cxxhl-tests$(EXEEXT) $(cxxhl_tests_OBJECTS) ../../../subversion/bindings/cxxhl/libsvncxxhl-1.la ../../../googlemock/libgooglemock-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS) ; else echo "fake" > subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT) ; fi
+
+db_test_PATH = subversion/tests/libsvn_wc
+db_test_DEPS = subversion/tests/libsvn_wc/db-test.lo subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_test-1.la
+db_test_OBJECTS = db-test.lo utils.lo
+subversion/tests/libsvn_wc/db-test$(EXEEXT): $(db_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(db_test_LDFLAGS) -o db-test$(EXEEXT) $(db_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+diff_PATH = tools/diff
+diff_DEPS = tools/diff/diff.lo
+diff_OBJECTS = diff.lo
+tools/diff/diff$(EXEEXT): $(diff_DEPS)
+ cd tools/diff && $(LINK) $(diff_LDFLAGS) -o diff$(EXEEXT) $(diff_OBJECTS) -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+diff_diff3_test_PATH = subversion/tests/libsvn_diff
+diff_diff3_test_DEPS = subversion/tests/libsvn_diff/diff-diff3-test.lo subversion/tests/libsvn_test-1.la
+diff_diff3_test_OBJECTS = diff-diff3-test.lo
+subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT): $(diff_diff3_test_DEPS)
+ cd subversion/tests/libsvn_diff && $(LINK) $(diff_diff3_test_LDFLAGS) -o diff-diff3-test$(EXEEXT) $(diff_diff3_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+diff3_PATH = tools/diff
+diff3_DEPS = tools/diff/diff3.lo
+diff3_OBJECTS = diff3.lo
+tools/diff/diff3$(EXEEXT): $(diff3_DEPS)
+ cd tools/diff && $(LINK) $(diff3_LDFLAGS) -o diff3$(EXEEXT) $(diff3_OBJECTS) -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+diff4_PATH = tools/diff
+diff4_DEPS = tools/diff/diff4.lo
+diff4_OBJECTS = diff4.lo
+tools/diff/diff4$(EXEEXT): $(diff4_DEPS)
+ cd tools/diff && $(LINK) $(diff4_LDFLAGS) -o diff4$(EXEEXT) $(diff4_OBJECTS) -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+dirent_uri_test_PATH = subversion/tests/libsvn_subr
+dirent_uri_test_DEPS = subversion/tests/libsvn_subr/dirent_uri-test.lo subversion/tests/libsvn_test-1.la
+dirent_uri_test_OBJECTS = dirent_uri-test.lo
+subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT): $(dirent_uri_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(dirent_uri_test_LDFLAGS) -o dirent_uri-test$(EXEEXT) $(dirent_uri_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+dump_load_test_PATH = subversion/tests/libsvn_repos
+dump_load_test_DEPS = subversion/tests/libsvn_repos/dump-load-test.lo subversion/tests/libsvn_test-1.la
+dump_load_test_OBJECTS = dump-load-test.lo
+subversion/tests/libsvn_repos/dump-load-test$(EXEEXT): $(dump_load_test_DEPS)
+ cd subversion/tests/libsvn_repos && $(LINK) $(dump_load_test_LDFLAGS) -o dump-load-test$(EXEEXT) $(dump_load_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+entries_compat_test_PATH = subversion/tests/libsvn_wc
+entries_compat_test_DEPS = subversion/tests/libsvn_wc/entries-compat.lo subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_test-1.la
+entries_compat_test_OBJECTS = entries-compat.lo utils.lo
+subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT): $(entries_compat_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(entries_compat_test_LDFLAGS) -o entries-compat-test$(EXEEXT) $(entries_compat_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+entries_dump_PATH = subversion/tests/cmdline
+entries_dump_DEPS = subversion/tests/cmdline/entries-dump.lo
+entries_dump_OBJECTS = entries-dump.lo
+subversion/tests/cmdline/entries-dump$(EXEEXT): $(entries_dump_DEPS)
+ cd subversion/tests/cmdline && $(LINK) $(entries_dump_LDFLAGS) -o entries-dump$(EXEEXT) $(entries_dump_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+error_code_test_PATH = subversion/tests/libsvn_subr
+error_code_test_DEPS = subversion/tests/libsvn_subr/error-code-test.lo subversion/tests/libsvn_test-1.la
+error_code_test_OBJECTS = error-code-test.lo
+subversion/tests/libsvn_subr/error-code-test$(EXEEXT): $(error_code_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(error_code_test_LDFLAGS) -o error-code-test$(EXEEXT) $(error_code_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+error_test_PATH = subversion/tests/libsvn_subr
+error_test_DEPS = subversion/tests/libsvn_subr/error-test.lo subversion/tests/libsvn_test-1.la
+error_test_OBJECTS = error-test.lo
+subversion/tests/libsvn_subr/error-test$(EXEEXT): $(error_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(error_test_LDFLAGS) -o error-test$(EXEEXT) $(error_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_base_test_PATH = subversion/tests/libsvn_fs_base
+fs_base_test_DEPS = subversion/tests/libsvn_fs_base/fs-base-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_base/libsvn_fs_base-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la
+fs_base_test_OBJECTS = fs-base-test.lo
+subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT): $(fs_base_test_DEPS)
+ cd subversion/tests/libsvn_fs_base && $(LINK) $(fs_base_test_LDFLAGS) -o fs-base-test$(EXEEXT) $(fs_base_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_base/libsvn_fs_base-1.la -lsvn_delta-1 ../../../subversion/libsvn_fs_util/libsvn_fs_util-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_fs_fuzzy_test_PATH = subversion/tests/libsvn_fs_fs
+fs_fs_fuzzy_test_DEPS = subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_fs/libsvn_fs_fs-1.la
+fs_fs_fuzzy_test_OBJECTS = fs-fs-fuzzy-test.lo
+subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test$(EXEEXT): $(fs_fs_fuzzy_test_DEPS)
+ cd subversion/tests/libsvn_fs_fs && $(LINK) $(fs_fs_fuzzy_test_LDFLAGS) -o fs-fs-fuzzy-test$(EXEEXT) $(fs_fs_fuzzy_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_fs/libsvn_fs_fs-1.la -lsvn_delta-1 -lsvn_repos-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_fs_pack_test_PATH = subversion/tests/libsvn_fs_fs
+fs_fs_pack_test_DEPS = subversion/tests/libsvn_fs_fs/fs-fs-pack-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_fs/libsvn_fs_fs-1.la
+fs_fs_pack_test_OBJECTS = fs-fs-pack-test.lo
+subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT): $(fs_fs_pack_test_DEPS)
+ cd subversion/tests/libsvn_fs_fs && $(LINK) $(fs_fs_pack_test_LDFLAGS) -o fs-fs-pack-test$(EXEEXT) $(fs_fs_pack_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_fs/libsvn_fs_fs-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_fs_private_test_PATH = subversion/tests/libsvn_fs_fs
+fs_fs_private_test_DEPS = subversion/tests/libsvn_fs_fs/fs-fs-private-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_fs/libsvn_fs_fs-1.la
+fs_fs_private_test_OBJECTS = fs-fs-private-test.lo
+subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT): $(fs_fs_private_test_DEPS)
+ cd subversion/tests/libsvn_fs_fs && $(LINK) $(fs_fs_private_test_LDFLAGS) -o fs-fs-private-test$(EXEEXT) $(fs_fs_private_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_fs/libsvn_fs_fs-1.la -lsvn_delta-1 -lsvn_repos-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_sequential_test_PATH = subversion/tests/libsvn_fs
+fs_sequential_test_DEPS = subversion/tests/libsvn_fs/fs-sequential-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la
+fs_sequential_test_OBJECTS = fs-sequential-test.lo
+subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT): $(fs_sequential_test_DEPS)
+ cd subversion/tests/libsvn_fs && $(LINK) $(fs_sequential_test_LDFLAGS) -o fs-sequential-test$(EXEEXT) $(fs_sequential_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 -lsvn_delta-1 ../../../subversion/libsvn_fs_util/libsvn_fs_util-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_test_PATH = subversion/tests/libsvn_fs
+fs_test_DEPS = subversion/tests/libsvn_fs/fs-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la
+fs_test_OBJECTS = fs-test.lo
+subversion/tests/libsvn_fs/fs-test$(EXEEXT): $(fs_test_DEPS)
+ cd subversion/tests/libsvn_fs && $(LINK) $(fs_test_LDFLAGS) -o fs-test$(EXEEXT) $(fs_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 -lsvn_delta-1 ../../../subversion/libsvn_fs_util/libsvn_fs_util-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fs_x_pack_test_PATH = subversion/tests/libsvn_fs_x
+fs_x_pack_test_DEPS = subversion/tests/libsvn_fs_x/fs-x-pack-test.lo subversion/tests/libsvn_test-1.la
+fs_x_pack_test_OBJECTS = fs-x-pack-test.lo
+subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT): $(fs_x_pack_test_DEPS)
+ cd subversion/tests/libsvn_fs_x && $(LINK) $(fs_x_pack_test_LDFLAGS) -o fs-x-pack-test$(EXEEXT) $(fs_x_pack_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 -lsvn_fs_x-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+fsfs_access_map_PATH = tools/dev
+fsfs_access_map_DEPS = tools/dev/fsfs-access-map.lo
+fsfs_access_map_OBJECTS = fsfs-access-map.lo
+tools/dev/fsfs-access-map$(EXEEXT): $(fsfs_access_map_DEPS)
+ cd tools/dev && $(LINK) $(fsfs_access_map_LDFLAGS) -o fsfs-access-map$(EXEEXT) $(fsfs_access_map_OBJECTS) -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+hashdump_test_PATH = subversion/tests/libsvn_subr
+hashdump_test_DEPS = subversion/tests/libsvn_subr/hashdump-test.lo subversion/tests/libsvn_test-1.la
+hashdump_test_OBJECTS = hashdump-test.lo
+subversion/tests/libsvn_subr/hashdump-test$(EXEEXT): $(hashdump_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(hashdump_test_LDFLAGS) -o hashdump-test$(EXEEXT) $(hashdump_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+io_test_PATH = subversion/tests/libsvn_subr
+io_test_DEPS = subversion/tests/libsvn_subr/io-test.lo subversion/tests/libsvn_test-1.la
+io_test_OBJECTS = io-test.lo
+subversion/tests/libsvn_subr/io-test$(EXEEXT): $(io_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(io_test_LDFLAGS) -o io-test$(EXEEXT) $(io_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+javahl_callback_javah_PATH = subversion/bindings/javahl/include
+javahl_callback_javah_HEADERS = subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_AuthnCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_BlameCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ChangelistCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ClientNotifyCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_CommitCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_CommitMessageCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ConfigEvent.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ConflictResolverCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_DiffSummaryCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ImportFilterCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_InfoCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_InheritedProplistCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ListCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ListItemCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_LogMessageCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_PatchCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ProgressCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ProplistCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_RemoteFileRevisionsCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_RemoteLocationSegmentsCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_RemoteStatus.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ReposFreezeAction.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ReposNotifyCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_ReposVerifyCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_StatusCallback.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_TunnelAgent.h subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_UserPasswordCallback.h
+javahl_callback_javah_OBJECTS =
+javahl_callback_javah_DEPS = $(javahl_callback_javah_HEADERS) $(javahl_callback_javah_OBJECTS) $(javahl_java_DEPS)
+javahl-callback-javah: $(javahl_callback_javah_DEPS)
+javahl_callback_javah_CLASS_FILENAMES = subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/AuthnCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/BlameCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ChangelistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ClientNotifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitMessageCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConfigEvent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConflictResolverCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/DiffSummaryCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ImportFilterCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InfoCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InheritedProplistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListItemCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/LogMessageCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/PatchCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProgressCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProplistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteStatus.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposFreezeAction.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposNotifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposVerifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/StatusCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/TunnelAgent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/UserPasswordCallback.class
+javahl_callback_javah_CLASSES = org.apache.subversion.javahl.callback.AuthnCallback org.apache.subversion.javahl.callback.BlameCallback org.apache.subversion.javahl.callback.ChangelistCallback org.apache.subversion.javahl.callback.ClientNotifyCallback org.apache.subversion.javahl.callback.CommitCallback org.apache.subversion.javahl.callback.CommitMessageCallback org.apache.subversion.javahl.callback.ConfigEvent org.apache.subversion.javahl.callback.ConflictResolverCallback org.apache.subversion.javahl.callback.DiffSummaryCallback org.apache.subversion.javahl.callback.ImportFilterCallback org.apache.subversion.javahl.callback.InfoCallback org.apache.subversion.javahl.callback.InheritedProplistCallback org.apache.subversion.javahl.callback.ListCallback org.apache.subversion.javahl.callback.ListItemCallback org.apache.subversion.javahl.callback.LogMessageCallback org.apache.subversion.javahl.callback.PatchCallback org.apache.subversion.javahl.callback.ProgressCallback org.apache.subversion.javahl.callback.ProplistCallback org.apache.subversion.javahl.callback.RemoteFileRevisionsCallback org.apache.subversion.javahl.callback.RemoteLocationSegmentsCallback org.apache.subversion.javahl.callback.RemoteStatus org.apache.subversion.javahl.callback.ReposFreezeAction org.apache.subversion.javahl.callback.ReposNotifyCallback org.apache.subversion.javahl.callback.ReposVerifyCallback org.apache.subversion.javahl.callback.StatusCallback org.apache.subversion.javahl.callback.TunnelAgent org.apache.subversion.javahl.callback.UserPasswordCallback
+$(javahl_callback_javah_HEADERS): $(javahl_callback_javah_CLASS_FILENAMES)
+ $(COMPILE_JAVAHL_JAVAH) -force -d subversion/bindings/javahl/include -classpath subversion/bindings/javahl/classes:$(javahl_callback_javah_CLASSPATH) $(javahl_callback_javah_CLASSES)
+
+
+javahl_compat_java_PATH = subversion/bindings/javahl/classes
+javahl_compat_java_HEADERS =
+javahl_compat_java_OBJECTS = subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback2.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback3.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallbackImpl.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ChangePath.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ChangelistCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ClientException.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitItem.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitItemStateFlags.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitMessage.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictDescriptor.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictResolverCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictResult.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictVersion.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CopySource.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Depth.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DiffSummary.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DiffSummaryReceiver.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DirEntry.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ErrorCodes.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Info.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Info2.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/InfoCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/InputInterface.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ListCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Lock.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LockStatus.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogDate.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogMessage.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogMessageCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Mergeinfo.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/MergeinfoLogKind.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NativeException.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NodeKind.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Notify.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Notify2.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyAction.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyInformation.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyStatus.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Operation.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/OutputInterface.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Path.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProgressEvent.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProgressListener.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword2.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword3.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PropertyData.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProplistCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProplistCallbackImpl.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Revision.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RevisionKind.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RevisionRange.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNAdmin.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClient.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientInterface.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientLogLevel.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientSynchronized.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNInputStream.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNOutputStream.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ScheduleKind.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Status.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/StatusCallback.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/StatusKind.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SubversionException.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Version.class
+javahl_compat_java_DEPS = $(javahl_compat_java_HEADERS) $(javahl_compat_java_OBJECTS) $(javahl_java_DEPS)
+javahl-compat-java: $(javahl_compat_java_DEPS)
+javahl_compat_java_SRC = $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback2.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback3.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallbackImpl.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ChangePath.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ChangelistCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ClientException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitItem.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitItemStateFlags.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitMessage.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictResolverCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictResult.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictVersion.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/CopySource.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Depth.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummaryReceiver.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/DirEntry.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ErrorCodes.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/InfoCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/InputInterface.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ListCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Lock.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LockStatus.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogMessage.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogMessageCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/MergeinfoLogKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NodeKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Notify.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Notify2.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyInformation.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyStatus.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Operation.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/OutputInterface.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProgressEvent.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProgressListener.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword2.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword3.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/PropertyData.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProplistCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProplistCallbackImpl.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/RevisionKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/RevisionRange.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientLogLevel.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNInputStream.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNOutputStream.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/ScheduleKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/StatusCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/StatusKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SubversionException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java
+$(javahl_compat_java_OBJECTS): $(javahl_compat_java_SRC)
+ $(COMPILE_JAVAHL_COMPAT_JAVAC) -d subversion/bindings/javahl/classes -classpath subversion/bindings/javahl/classes:$(javahl_compat_java_CLASSPATH) $(javahl_compat_java_SRC)
+
+
+javahl_compat_tests_PATH = subversion/bindings/javahl/classes
+javahl_compat_tests_HEADERS =
+javahl_compat_tests_OBJECTS = subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BasicTests.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RunTests.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNAdminTests.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNTests.class subversion/bindings/javahl/classes/org/tigris/subversion/javahl/WC.class
+javahl_compat_tests_DEPS = $(javahl_compat_tests_HEADERS) $(javahl_compat_tests_OBJECTS) $(javahl_compat_java_DEPS)
+javahl-compat-tests: $(javahl_compat_tests_DEPS)
+javahl_compat_tests_SRC = $(abs_srcdir)/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java
+$(javahl_compat_tests_OBJECTS): $(javahl_compat_tests_SRC)
+ $(COMPILE_JAVAHL_COMPAT_JAVAC) -d subversion/bindings/javahl/classes -classpath subversion/bindings/javahl/classes:$(javahl_compat_tests_CLASSPATH) $(javahl_compat_tests_SRC)
+
+
+javahl_java_PATH = subversion/bindings/javahl/classes
+javahl_java_HEADERS =
+javahl_java_OBJECTS = subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientException.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientNotifyInformation.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitInfo.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItem.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItemStateFlags.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictDescriptor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictResult.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/DiffSummary.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNClient.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNConfig.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNEditor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRemote.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNReporter.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRepos.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIError.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIObject.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeException.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeResources.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/OperationContext.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ProgressEvent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ReposNotifyInformation.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNClient.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRepos.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNUtil.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SubversionException.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/AuthnCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/BlameCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ChangelistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ClientNotifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitMessageCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConfigEvent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConflictResolverCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/DiffSummaryCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ImportFilterCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InfoCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InheritedProplistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListItemCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/LogMessageCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/PatchCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProgressCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProplistCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteStatus.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposFreezeAction.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposNotifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposVerifyCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/StatusCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/TunnelAgent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/UserPasswordCallback.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/CommitEditor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteFactory.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteSession.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RetryOpenSession.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StateReporter.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StatusEditor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ChangePath.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Checksum.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ConflictVersion.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/CopySource.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Depth.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DiffOptions.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DirEntry.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ExternalItem.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Info.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Lock.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/LogDate.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Mergeinfo.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeInputStream.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeOutputStream.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NodeKind.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Property.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Revision.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRange.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRangeList.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RuntimeVersion.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Status.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Tristate.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Version.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/VersionExtended.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigImpl.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/DiffLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/PropLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/RequestChannel.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ResponseChannel.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/SubstLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/TunnelChannel.class
+javahl_java_DEPS = $(javahl_java_HEADERS) $(javahl_java_OBJECTS)
+javahl-java: $(javahl_java_DEPS)
+javahl_java_SRC = $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictResult.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/OperationContext.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ProgressEvent.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/SubversionException.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/AuthnCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/BlameCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ChangelistCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ClientNotifyCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/CommitCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/CommitMessageCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ConfigEvent.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ConflictResolverCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/DiffSummaryCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListItemCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/LogMessageCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/PatchCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProgressCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteStatus.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposNotifyCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposVerifyCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/UserPasswordCallback.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RetryOpenSession.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ChangePath.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Checksum.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/CopySource.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Depth.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DirEntry.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ExternalItem.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Lock.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Mergeinfo.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NativeInputStream.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NativeOutputStream.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Property.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Revision.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RuntimeVersion.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Tristate.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ConfigImpl.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ConfigLib.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/PropLib.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/RequestChannel.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ResponseChannel.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/SubstLib.java $(abs_srcdir)/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/TunnelChannel.java
+$(javahl_java_OBJECTS): $(javahl_java_SRC)
+ $(COMPILE_JAVAHL_JAVAC) -d subversion/bindings/javahl/classes -classpath subversion/bindings/javahl/classes:$(javahl_java_CLASSPATH) $(javahl_java_SRC)
+
+
+javahl_javah_PATH = subversion/bindings/javahl/include
+javahl_javah_HEADERS = subversion/bindings/javahl/include/org_apache_subversion_javahl_ClientException.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ClientNotifyInformation.h subversion/bindings/javahl/include/org_apache_subversion_javahl_CommitInfo.h subversion/bindings/javahl/include/org_apache_subversion_javahl_CommitItem.h subversion/bindings/javahl/include/org_apache_subversion_javahl_CommitItemStateFlags.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ConflictDescriptor.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ConflictResult.h subversion/bindings/javahl/include/org_apache_subversion_javahl_DiffSummary.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNClient.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNConfig.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNEditor.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNRemote.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNReporter.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ISVNRepos.h subversion/bindings/javahl/include/org_apache_subversion_javahl_JNIError.h subversion/bindings/javahl/include/org_apache_subversion_javahl_JNIObject.h subversion/bindings/javahl/include/org_apache_subversion_javahl_NativeException.h subversion/bindings/javahl/include/org_apache_subversion_javahl_NativeResources.h subversion/bindings/javahl/include/org_apache_subversion_javahl_OperationContext.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ProgressEvent.h subversion/bindings/javahl/include/org_apache_subversion_javahl_ReposNotifyInformation.h subversion/bindings/javahl/include/org_apache_subversion_javahl_SVNClient.h subversion/bindings/javahl/include/org_apache_subversion_javahl_SVNRepos.h subversion/bindings/javahl/include/org_apache_subversion_javahl_SVNUtil.h subversion/bindings/javahl/include/org_apache_subversion_javahl_SubversionException.h
+javahl_javah_OBJECTS =
+javahl_javah_DEPS = $(javahl_javah_HEADERS) $(javahl_javah_OBJECTS) $(javahl_java_DEPS)
+javahl-javah: $(javahl_javah_DEPS)
+javahl_javah_CLASS_FILENAMES = subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientException.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientNotifyInformation.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitInfo.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItem.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItemStateFlags.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictDescriptor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictResult.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/DiffSummary.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNClient.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNConfig.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNEditor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRemote.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNReporter.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRepos.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIError.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIObject.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeException.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeResources.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/OperationContext.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ProgressEvent.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ReposNotifyInformation.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNClient.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRepos.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNUtil.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SubversionException.class
+javahl_javah_CLASSES = org.apache.subversion.javahl.ClientException org.apache.subversion.javahl.ClientNotifyInformation org.apache.subversion.javahl.CommitInfo org.apache.subversion.javahl.CommitItem org.apache.subversion.javahl.CommitItemStateFlags org.apache.subversion.javahl.ConflictDescriptor org.apache.subversion.javahl.ConflictResult org.apache.subversion.javahl.DiffSummary org.apache.subversion.javahl.ISVNClient org.apache.subversion.javahl.ISVNConfig org.apache.subversion.javahl.ISVNEditor org.apache.subversion.javahl.ISVNRemote org.apache.subversion.javahl.ISVNReporter org.apache.subversion.javahl.ISVNRepos org.apache.subversion.javahl.JNIError org.apache.subversion.javahl.JNIObject org.apache.subversion.javahl.NativeException org.apache.subversion.javahl.NativeResources org.apache.subversion.javahl.OperationContext org.apache.subversion.javahl.ProgressEvent org.apache.subversion.javahl.ReposNotifyInformation org.apache.subversion.javahl.SVNClient org.apache.subversion.javahl.SVNRepos org.apache.subversion.javahl.SVNUtil org.apache.subversion.javahl.SubversionException
+$(javahl_javah_HEADERS): $(javahl_javah_CLASS_FILENAMES)
+ $(COMPILE_JAVAHL_JAVAH) -force -d subversion/bindings/javahl/include -classpath subversion/bindings/javahl/classes:$(javahl_javah_CLASSPATH) $(javahl_javah_CLASSES)
+
+
+javahl_remote_javah_PATH = subversion/bindings/javahl/include
+javahl_remote_javah_HEADERS = subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_CommitEditor.h subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteFactory.h subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteSession.h subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RetryOpenSession.h subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_StateReporter.h subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_StatusEditor.h
+javahl_remote_javah_OBJECTS =
+javahl_remote_javah_DEPS = $(javahl_remote_javah_HEADERS) $(javahl_remote_javah_OBJECTS) $(javahl_java_DEPS)
+javahl-remote-javah: $(javahl_remote_javah_DEPS)
+javahl_remote_javah_CLASS_FILENAMES = subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/CommitEditor.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteFactory.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteSession.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RetryOpenSession.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StateReporter.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StatusEditor.class
+javahl_remote_javah_CLASSES = org.apache.subversion.javahl.remote.CommitEditor org.apache.subversion.javahl.remote.RemoteFactory org.apache.subversion.javahl.remote.RemoteSession org.apache.subversion.javahl.remote.RetryOpenSession org.apache.subversion.javahl.remote.StateReporter org.apache.subversion.javahl.remote.StatusEditor
+$(javahl_remote_javah_HEADERS): $(javahl_remote_javah_CLASS_FILENAMES)
+ $(COMPILE_JAVAHL_JAVAH) -force -d subversion/bindings/javahl/include -classpath subversion/bindings/javahl/classes:$(javahl_remote_javah_CLASSPATH) $(javahl_remote_javah_CLASSES)
+
+
+javahl_tests_PATH = subversion/bindings/javahl/classes
+javahl_tests_HEADERS =
+javahl_tests_OBJECTS = subversion/bindings/javahl/classes/org/apache/subversion/javahl/BasicTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/ExceptionTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/RunTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRemoteTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNReposTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/UtilTests.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/WC.class
+javahl_tests_DEPS = $(javahl_tests_HEADERS) $(javahl_tests_OBJECTS) $(javahl_java_DEPS)
+javahl-tests: $(javahl_tests_DEPS)
+javahl_tests_SRC = $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/ExceptionTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java $(abs_srcdir)/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
+$(javahl_tests_OBJECTS): $(javahl_tests_SRC)
+ $(COMPILE_JAVAHL_JAVAC) -d subversion/bindings/javahl/classes -classpath subversion/bindings/javahl/classes:$(javahl_tests_CLASSPATH) $(javahl_tests_SRC)
+
+
+javahl_types_javah_PATH = subversion/bindings/javahl/include
+javahl_types_javah_HEADERS = subversion/bindings/javahl/include/org_apache_subversion_javahl_types_ChangePath.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Checksum.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_ConflictVersion.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_CopySource.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Depth.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_DiffOptions.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_DirEntry.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_ExternalItem.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Info.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Lock.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_LogDate.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Mergeinfo.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_NativeInputStream.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_NativeOutputStream.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_NodeKind.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Property.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Revision.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RevisionRange.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RevisionRangeList.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RuntimeVersion.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Status.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Tristate.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Version.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended.h
+javahl_types_javah_OBJECTS =
+javahl_types_javah_DEPS = $(javahl_types_javah_HEADERS) $(javahl_types_javah_OBJECTS) $(javahl_java_DEPS)
+javahl-types-javah: $(javahl_types_javah_DEPS)
+javahl_types_javah_CLASS_FILENAMES = subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ChangePath.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Checksum.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ConflictVersion.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/CopySource.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Depth.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DiffOptions.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DirEntry.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ExternalItem.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Info.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Lock.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/LogDate.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Mergeinfo.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeInputStream.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeOutputStream.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NodeKind.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Property.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Revision.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRange.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRangeList.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RuntimeVersion.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Status.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Tristate.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Version.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/VersionExtended.class
+javahl_types_javah_CLASSES = org.apache.subversion.javahl.types.ChangePath org.apache.subversion.javahl.types.Checksum org.apache.subversion.javahl.types.ConflictVersion org.apache.subversion.javahl.types.CopySource org.apache.subversion.javahl.types.Depth org.apache.subversion.javahl.types.DiffOptions org.apache.subversion.javahl.types.DirEntry org.apache.subversion.javahl.types.ExternalItem org.apache.subversion.javahl.types.Info org.apache.subversion.javahl.types.Lock org.apache.subversion.javahl.types.LogDate org.apache.subversion.javahl.types.Mergeinfo org.apache.subversion.javahl.types.NativeInputStream org.apache.subversion.javahl.types.NativeOutputStream org.apache.subversion.javahl.types.NodeKind org.apache.subversion.javahl.types.Property org.apache.subversion.javahl.types.Revision org.apache.subversion.javahl.types.RevisionRange org.apache.subversion.javahl.types.RevisionRangeList org.apache.subversion.javahl.types.RuntimeVersion org.apache.subversion.javahl.types.Status org.apache.subversion.javahl.types.Tristate org.apache.subversion.javahl.types.Version org.apache.subversion.javahl.types.VersionExtended
+$(javahl_types_javah_HEADERS): $(javahl_types_javah_CLASS_FILENAMES)
+ $(COMPILE_JAVAHL_JAVAH) -force -d subversion/bindings/javahl/include -classpath subversion/bindings/javahl/classes:$(javahl_types_javah_CLASSPATH) $(javahl_types_javah_CLASSES)
+
+
+javahl_util_javah_PATH = subversion/bindings/javahl/include
+javahl_util_javah_HEADERS = subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ConfigImpl.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ConfigLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_DiffLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_PropLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_RequestChannel.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ResponseChannel.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_SubstLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_TunnelChannel.h
+javahl_util_javah_OBJECTS =
+javahl_util_javah_DEPS = $(javahl_util_javah_HEADERS) $(javahl_util_javah_OBJECTS) $(javahl_java_DEPS)
+javahl-util-javah: $(javahl_util_javah_DEPS)
+javahl_util_javah_CLASS_FILENAMES = subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigImpl.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/DiffLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/PropLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/RequestChannel.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ResponseChannel.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/SubstLib.class subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/TunnelChannel.class
+javahl_util_javah_CLASSES = org.apache.subversion.javahl.util.ConfigImpl org.apache.subversion.javahl.util.ConfigLib org.apache.subversion.javahl.util.DiffLib org.apache.subversion.javahl.util.PropLib org.apache.subversion.javahl.util.RequestChannel org.apache.subversion.javahl.util.ResponseChannel org.apache.subversion.javahl.util.SubstLib org.apache.subversion.javahl.util.TunnelChannel
+$(javahl_util_javah_HEADERS): $(javahl_util_javah_CLASS_FILENAMES)
+ $(COMPILE_JAVAHL_JAVAH) -force -d subversion/bindings/javahl/include -classpath subversion/bindings/javahl/classes:$(javahl_util_javah_CLASSPATH) $(javahl_util_javah_CLASSES)
+
+
+libgooglemock_PATH = googlemock
+libgooglemock_DEPS =
+libgooglemock_OBJECTS =
+googlemock/libgooglemock-1.la: $(libgooglemock_DEPS)
+ if $(SVN_USE_GOOGLEMOCK) ; then cd googlemock && $(LINK_CXX_LIB) $(libgooglemock_LDFLAGS) -o libgooglemock-1.la $(LT_NO_UNDEFINED) $(libgooglemock_OBJECTS) $(LIBS) ; else echo "fake" > googlemock/libgooglemock-1.la ; fi
+
+libsvn_auth_gnome_keyring_PATH = subversion/libsvn_auth_gnome_keyring
+libsvn_auth_gnome_keyring_DEPS = subversion/libsvn_auth_gnome_keyring/gnome_keyring.lo subversion/libsvn_auth_gnome_keyring/version.lo
+libsvn_auth_gnome_keyring_OBJECTS = gnome_keyring.lo version.lo
+subversion/libsvn_auth_gnome_keyring/libsvn_auth_gnome_keyring-1.la: $(libsvn_auth_gnome_keyring_DEPS)
+ cd subversion/libsvn_auth_gnome_keyring && $(LINK_SHARED_ONLY_LIB) $(libsvn_auth_gnome_keyring_LDFLAGS) -o libsvn_auth_gnome_keyring-1.la $(LT_NO_UNDEFINED) $(libsvn_auth_gnome_keyring_OBJECTS) -lsvn_subr-1 $(SVN_APR_LIBS) $(SVN_GNOME_KEYRING_LIBS) $(LIBS)
+
+libsvn_auth_kwallet_PATH = subversion/libsvn_auth_kwallet
+libsvn_auth_kwallet_DEPS = subversion/libsvn_auth_kwallet/kwallet.lo subversion/libsvn_auth_kwallet/version.lo
+libsvn_auth_kwallet_OBJECTS = kwallet.lo version.lo
+subversion/libsvn_auth_kwallet/libsvn_auth_kwallet-1.la: $(libsvn_auth_kwallet_DEPS)
+ cd subversion/libsvn_auth_kwallet && $(LINK_SHARED_ONLY_CXX_LIB) $(libsvn_auth_kwallet_LDFLAGS) -o libsvn_auth_kwallet-1.la $(LT_NO_UNDEFINED) $(libsvn_auth_kwallet_OBJECTS) -lsvn_subr-1 $(SVN_APR_LIBS) $(SVN_KWALLET_LIBS) $(LIBS)
+
+libsvn_client_PATH = subversion/libsvn_client
+libsvn_client_DEPS = subversion/libsvn_client/add.lo subversion/libsvn_client/blame.lo subversion/libsvn_client/cat.lo subversion/libsvn_client/changelist.lo subversion/libsvn_client/checkout.lo subversion/libsvn_client/cleanup.lo subversion/libsvn_client/cmdline.lo subversion/libsvn_client/commit.lo subversion/libsvn_client/commit_util.lo subversion/libsvn_client/compat_providers.lo subversion/libsvn_client/conflicts.lo subversion/libsvn_client/copy.lo subversion/libsvn_client/copy_foreign.lo subversion/libsvn_client/ctx.lo subversion/libsvn_client/delete.lo subversion/libsvn_client/deprecated.lo subversion/libsvn_client/diff.lo subversion/libsvn_client/diff_local.lo subversion/libsvn_client/diff_summarize.lo subversion/libsvn_client/export.lo subversion/libsvn_client/externals.lo subversion/libsvn_client/import.lo subversion/libsvn_client/info.lo subversion/libsvn_client/iprops.lo subversion/libsvn_client/list.lo subversion/libsvn_client/locking_commands.lo subversion/libsvn_client/log.lo subversion/libsvn_client/merge.lo subversion/libsvn_client/merge_elements.lo subversion/libsvn_client/mergeinfo.lo subversion/libsvn_client/mtcc.lo subversion/libsvn_client/patch.lo subversion/libsvn_client/prop_commands.lo subversion/libsvn_client/ra.lo subversion/libsvn_client/relocate.lo subversion/libsvn_client/repos_diff.lo subversion/libsvn_client/resolved.lo subversion/libsvn_client/revert.lo subversion/libsvn_client/revisions.lo subversion/libsvn_client/shelve.lo subversion/libsvn_client/status.lo subversion/libsvn_client/switch.lo subversion/libsvn_client/update.lo subversion/libsvn_client/upgrade.lo subversion/libsvn_client/url.lo subversion/libsvn_client/util.lo subversion/libsvn_client/version.lo
+libsvn_client_OBJECTS = add.lo blame.lo cat.lo changelist.lo checkout.lo cleanup.lo cmdline.lo commit.lo commit_util.lo compat_providers.lo conflicts.lo copy.lo copy_foreign.lo ctx.lo delete.lo deprecated.lo diff.lo diff_local.lo diff_summarize.lo export.lo externals.lo import.lo info.lo iprops.lo list.lo locking_commands.lo log.lo merge.lo merge_elements.lo mergeinfo.lo mtcc.lo patch.lo prop_commands.lo ra.lo relocate.lo repos_diff.lo resolved.lo revert.lo revisions.lo shelve.lo status.lo switch.lo update.lo upgrade.lo url.lo util.lo version.lo
+subversion/libsvn_client/libsvn_client-1.la: $(libsvn_client_DEPS)
+ cd subversion/libsvn_client && $(LINK_LIB) $(libsvn_client_LDFLAGS) -o libsvn_client-1.la $(LT_NO_UNDEFINED) $(libsvn_client_OBJECTS) -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_delta_PATH = subversion/libsvn_delta
+libsvn_delta_DEPS = subversion/libsvn_delta/branch.lo subversion/libsvn_delta/branch_compat.lo subversion/libsvn_delta/branch_migrate.lo subversion/libsvn_delta/branch_nested.lo subversion/libsvn_delta/branch_repos.lo subversion/libsvn_delta/cancel.lo subversion/libsvn_delta/compat.lo subversion/libsvn_delta/compose_delta.lo subversion/libsvn_delta/debug_editor.lo subversion/libsvn_delta/default_editor.lo subversion/libsvn_delta/deprecated.lo subversion/libsvn_delta/depth_filter_editor.lo subversion/libsvn_delta/editor.lo subversion/libsvn_delta/element.lo subversion/libsvn_delta/path_driver.lo subversion/libsvn_delta/svndiff.lo subversion/libsvn_delta/text_delta.lo subversion/libsvn_delta/version.lo subversion/libsvn_delta/xdelta.lo
+libsvn_delta_OBJECTS = branch.lo branch_compat.lo branch_migrate.lo branch_nested.lo branch_repos.lo cancel.lo compat.lo compose_delta.lo debug_editor.lo default_editor.lo deprecated.lo depth_filter_editor.lo editor.lo element.lo path_driver.lo svndiff.lo text_delta.lo version.lo xdelta.lo
+subversion/libsvn_delta/libsvn_delta-1.la: $(libsvn_delta_DEPS)
+ cd subversion/libsvn_delta && $(LINK_LIB) $(libsvn_delta_LDFLAGS) -o libsvn_delta-1.la $(LT_NO_UNDEFINED) $(libsvn_delta_OBJECTS) -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_ZLIB_LIBS) $(LIBS)
+
+libsvn_diff_PATH = subversion/libsvn_diff
+libsvn_diff_DEPS = subversion/libsvn_diff/binary_diff.lo subversion/libsvn_diff/deprecated.lo subversion/libsvn_diff/diff.lo subversion/libsvn_diff/diff3.lo subversion/libsvn_diff/diff4.lo subversion/libsvn_diff/diff_file.lo subversion/libsvn_diff/diff_memory.lo subversion/libsvn_diff/diff_tree.lo subversion/libsvn_diff/lcs.lo subversion/libsvn_diff/parse-diff.lo subversion/libsvn_diff/token.lo subversion/libsvn_diff/util.lo
+libsvn_diff_OBJECTS = binary_diff.lo deprecated.lo diff.lo diff3.lo diff4.lo diff_file.lo diff_memory.lo diff_tree.lo lcs.lo parse-diff.lo token.lo util.lo
+subversion/libsvn_diff/libsvn_diff-1.la: $(libsvn_diff_DEPS)
+ cd subversion/libsvn_diff && $(LINK_LIB) $(libsvn_diff_LDFLAGS) -o libsvn_diff-1.la $(LT_NO_UNDEFINED) $(libsvn_diff_OBJECTS) -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_ZLIB_LIBS) $(LIBS)
+
+libsvn_fs_PATH = subversion/libsvn_fs
+install-ramod-lib: $(SVN_FS_LIB_INSTALL_DEPS)
+libsvn_fs_DEPS = $(SVN_FS_LIB_DEPS) subversion/libsvn_fs/access.lo subversion/libsvn_fs/deprecated.lo subversion/libsvn_fs/editor.lo subversion/libsvn_fs/fs-loader.lo subversion/libsvn_fs_util/libsvn_fs_util-1.la
+libsvn_fs_OBJECTS = access.lo deprecated.lo editor.lo fs-loader.lo
+subversion/libsvn_fs/libsvn_fs-1.la: $(libsvn_fs_DEPS)
+ cd subversion/libsvn_fs && $(LINK_LIB) $(libsvn_fs_LDFLAGS) -o libsvn_fs-1.la $(LT_NO_UNDEFINED) $(libsvn_fs_OBJECTS) ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_FS_LIB_LINK) $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_fs_base_PATH = subversion/libsvn_fs_base
+libsvn_fs_base_DEPS = subversion/libsvn_fs_base/bdb/bdb-err.lo subversion/libsvn_fs_base/bdb/bdb_compat.lo subversion/libsvn_fs_base/bdb/changes-table.lo subversion/libsvn_fs_base/bdb/checksum-reps-table.lo subversion/libsvn_fs_base/bdb/copies-table.lo subversion/libsvn_fs_base/bdb/dbt.lo subversion/libsvn_fs_base/bdb/env.lo subversion/libsvn_fs_base/bdb/lock-tokens-table.lo subversion/libsvn_fs_base/bdb/locks-table.lo subversion/libsvn_fs_base/bdb/miscellaneous-table.lo subversion/libsvn_fs_base/bdb/node-origins-table.lo subversion/libsvn_fs_base/bdb/nodes-table.lo subversion/libsvn_fs_base/bdb/reps-table.lo subversion/libsvn_fs_base/bdb/rev-table.lo subversion/libsvn_fs_base/bdb/strings-table.lo subversion/libsvn_fs_base/bdb/txn-table.lo subversion/libsvn_fs_base/bdb/uuids-table.lo subversion/libsvn_fs_base/dag.lo subversion/libsvn_fs_base/err.lo subversion/libsvn_fs_base/fs.lo subversion/libsvn_fs_base/id.lo subversion/libsvn_fs_base/key-gen.lo subversion/libsvn_fs_base/lock.lo subversion/libsvn_fs_base/node-rev.lo subversion/libsvn_fs_base/reps-strings.lo subversion/libsvn_fs_base/revs-txns.lo subversion/libsvn_fs_base/trail.lo subversion/libsvn_fs_base/tree.lo subversion/libsvn_fs_base/util/fs_skels.lo subversion/libsvn_fs_base/uuid.lo subversion/libsvn_fs_util/libsvn_fs_util-1.la
+libsvn_fs_base_OBJECTS = bdb/bdb-err.lo bdb/bdb_compat.lo bdb/changes-table.lo bdb/checksum-reps-table.lo bdb/copies-table.lo bdb/dbt.lo bdb/env.lo bdb/lock-tokens-table.lo bdb/locks-table.lo bdb/miscellaneous-table.lo bdb/node-origins-table.lo bdb/nodes-table.lo bdb/reps-table.lo bdb/rev-table.lo bdb/strings-table.lo bdb/txn-table.lo bdb/uuids-table.lo dag.lo err.lo fs.lo id.lo key-gen.lo lock.lo node-rev.lo reps-strings.lo revs-txns.lo trail.lo tree.lo util/fs_skels.lo uuid.lo
+subversion/libsvn_fs_base/libsvn_fs_base-1.la: $(libsvn_fs_base_DEPS)
+ cd subversion/libsvn_fs_base && $(LINK_LIB) $(libsvn_fs_base_LDFLAGS) -o libsvn_fs_base-1.la $(LT_NO_UNDEFINED) $(libsvn_fs_base_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_DB_LIBS) ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la $(LIBS)
+
+libsvn_fs_fs_PATH = subversion/libsvn_fs_fs
+libsvn_fs_fs_DEPS = subversion/libsvn_fs_fs/cached_data.lo subversion/libsvn_fs_fs/caching.lo subversion/libsvn_fs_fs/dag.lo subversion/libsvn_fs_fs/dump-index.lo subversion/libsvn_fs_fs/fs.lo subversion/libsvn_fs_fs/fs_fs.lo subversion/libsvn_fs_fs/hotcopy.lo subversion/libsvn_fs_fs/id.lo subversion/libsvn_fs_fs/index.lo subversion/libsvn_fs_fs/load-index.lo subversion/libsvn_fs_fs/lock.lo subversion/libsvn_fs_fs/low_level.lo subversion/libsvn_fs_fs/pack.lo subversion/libsvn_fs_fs/recovery.lo subversion/libsvn_fs_fs/rep-cache.lo subversion/libsvn_fs_fs/rev_file.lo subversion/libsvn_fs_fs/revprops.lo subversion/libsvn_fs_fs/stats.lo subversion/libsvn_fs_fs/temp_serializer.lo subversion/libsvn_fs_fs/transaction.lo subversion/libsvn_fs_fs/tree.lo subversion/libsvn_fs_fs/util.lo subversion/libsvn_fs_fs/verify.lo subversion/libsvn_fs_util/libsvn_fs_util-1.la
+libsvn_fs_fs_OBJECTS = cached_data.lo caching.lo dag.lo dump-index.lo fs.lo fs_fs.lo hotcopy.lo id.lo index.lo load-index.lo lock.lo low_level.lo pack.lo recovery.lo rep-cache.lo rev_file.lo revprops.lo stats.lo temp_serializer.lo transaction.lo tree.lo util.lo verify.lo
+subversion/libsvn_fs_fs/libsvn_fs_fs-1.la: $(libsvn_fs_fs_DEPS)
+ cd subversion/libsvn_fs_fs && $(LINK_LIB) $(libsvn_fs_fs_LDFLAGS) -o libsvn_fs_fs-1.la $(LT_NO_UNDEFINED) $(libsvn_fs_fs_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la $(LIBS)
+
+libsvn_fs_util_PATH = subversion/libsvn_fs_util
+libsvn_fs_util_DEPS = subversion/libsvn_fs_util/fs-util.lo
+libsvn_fs_util_OBJECTS = fs-util.lo
+subversion/libsvn_fs_util/libsvn_fs_util-1.la: $(libsvn_fs_util_DEPS)
+ cd subversion/libsvn_fs_util && $(LINK_LIB) $(libsvn_fs_util_LDFLAGS) -o libsvn_fs_util-1.la $(LT_NO_UNDEFINED) $(libsvn_fs_util_OBJECTS) -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_fs_x_PATH = subversion/libsvn_fs_x
+libsvn_fs_x_DEPS = subversion/libsvn_fs_x/batch_fsync.lo subversion/libsvn_fs_x/cached_data.lo subversion/libsvn_fs_x/caching.lo subversion/libsvn_fs_x/changes.lo subversion/libsvn_fs_x/dag.lo subversion/libsvn_fs_x/dag_cache.lo subversion/libsvn_fs_x/fs.lo subversion/libsvn_fs_x/fs_id.lo subversion/libsvn_fs_x/fs_x.lo subversion/libsvn_fs_x/hotcopy.lo subversion/libsvn_fs_x/id.lo subversion/libsvn_fs_x/index.lo subversion/libsvn_fs_x/lock.lo subversion/libsvn_fs_x/low_level.lo subversion/libsvn_fs_x/noderevs.lo subversion/libsvn_fs_x/pack.lo subversion/libsvn_fs_x/recovery.lo subversion/libsvn_fs_x/rep-cache.lo subversion/libsvn_fs_x/reps.lo subversion/libsvn_fs_x/rev_file.lo subversion/libsvn_fs_x/revprops.lo subversion/libsvn_fs_x/string_table.lo subversion/libsvn_fs_x/temp_serializer.lo subversion/libsvn_fs_x/transaction.lo subversion/libsvn_fs_x/tree.lo subversion/libsvn_fs_x/util.lo subversion/libsvn_fs_x/verify.lo subversion/libsvn_fs_util/libsvn_fs_util-1.la
+libsvn_fs_x_OBJECTS = batch_fsync.lo cached_data.lo caching.lo changes.lo dag.lo dag_cache.lo fs.lo fs_id.lo fs_x.lo hotcopy.lo id.lo index.lo lock.lo low_level.lo noderevs.lo pack.lo recovery.lo rep-cache.lo reps.lo rev_file.lo revprops.lo string_table.lo temp_serializer.lo transaction.lo tree.lo util.lo verify.lo
+subversion/libsvn_fs_x/libsvn_fs_x-1.la: $(libsvn_fs_x_DEPS)
+ cd subversion/libsvn_fs_x && $(LINK_LIB) $(libsvn_fs_x_LDFLAGS) -o libsvn_fs_x-1.la $(LT_NO_UNDEFINED) $(libsvn_fs_x_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) ../../subversion/libsvn_fs_util/libsvn_fs_util-1.la $(LIBS)
+
+libsvn_ra_PATH = subversion/libsvn_ra
+install-lib: $(SVN_RA_LIB_INSTALL_DEPS)
+libsvn_ra_DEPS = $(SVN_RA_LIB_DEPS) subversion/libsvn_ra/compat.lo subversion/libsvn_ra/debug_reporter.lo subversion/libsvn_ra/deprecated.lo subversion/libsvn_ra/editor.lo subversion/libsvn_ra/ra_loader.lo subversion/libsvn_ra/util.lo
+libsvn_ra_OBJECTS = compat.lo debug_reporter.lo deprecated.lo editor.lo ra_loader.lo util.lo
+subversion/libsvn_ra/libsvn_ra-1.la: $(libsvn_ra_DEPS)
+ cd subversion/libsvn_ra && $(LINK_LIB) $(libsvn_ra_LDFLAGS) -o libsvn_ra-1.la $(LT_NO_UNDEFINED) $(libsvn_ra_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_RA_LIB_LINK) $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_ra_local_PATH = subversion/libsvn_ra_local
+libsvn_ra_local_DEPS = subversion/libsvn_ra_local/ra_plugin.lo subversion/libsvn_ra_local/split_url.lo
+libsvn_ra_local_OBJECTS = ra_plugin.lo split_url.lo
+subversion/libsvn_ra_local/libsvn_ra_local-1.la: $(libsvn_ra_local_DEPS)
+ cd subversion/libsvn_ra_local && $(LINK_LIB) $(libsvn_ra_local_LDFLAGS) -o libsvn_ra_local-1.la $(LT_NO_UNDEFINED) $(libsvn_ra_local_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_ra_serf_PATH = subversion/libsvn_ra_serf
+libsvn_ra_serf_DEPS = subversion/libsvn_ra_serf/blame.lo subversion/libsvn_ra_serf/blncache.lo subversion/libsvn_ra_serf/commit.lo subversion/libsvn_ra_serf/eagain_bucket.lo subversion/libsvn_ra_serf/get_deleted_rev.lo subversion/libsvn_ra_serf/get_file.lo subversion/libsvn_ra_serf/get_lock.lo subversion/libsvn_ra_serf/getdate.lo subversion/libsvn_ra_serf/getlocations.lo subversion/libsvn_ra_serf/getlocationsegments.lo subversion/libsvn_ra_serf/getlocks.lo subversion/libsvn_ra_serf/inherited_props.lo subversion/libsvn_ra_serf/list.lo subversion/libsvn_ra_serf/lock.lo subversion/libsvn_ra_serf/log.lo subversion/libsvn_ra_serf/merge.lo subversion/libsvn_ra_serf/mergeinfo.lo subversion/libsvn_ra_serf/multistatus.lo subversion/libsvn_ra_serf/options.lo subversion/libsvn_ra_serf/property.lo subversion/libsvn_ra_serf/replay.lo subversion/libsvn_ra_serf/request_body.lo subversion/libsvn_ra_serf/sb_bucket.lo subversion/libsvn_ra_serf/serf.lo subversion/libsvn_ra_serf/stat.lo subversion/libsvn_ra_serf/stream_bucket.lo subversion/libsvn_ra_serf/update.lo subversion/libsvn_ra_serf/util.lo subversion/libsvn_ra_serf/util_error.lo subversion/libsvn_ra_serf/xml.lo
+libsvn_ra_serf_OBJECTS = blame.lo blncache.lo commit.lo eagain_bucket.lo get_deleted_rev.lo get_file.lo get_lock.lo getdate.lo getlocations.lo getlocationsegments.lo getlocks.lo inherited_props.lo list.lo lock.lo log.lo merge.lo mergeinfo.lo multistatus.lo options.lo property.lo replay.lo request_body.lo sb_bucket.lo serf.lo stat.lo stream_bucket.lo update.lo util.lo util_error.lo xml.lo
+subversion/libsvn_ra_serf/libsvn_ra_serf-1.la: $(libsvn_ra_serf_DEPS)
+ cd subversion/libsvn_ra_serf && $(LINK_LIB) $(libsvn_ra_serf_LDFLAGS) -o libsvn_ra_serf-1.la $(LT_NO_UNDEFINED) $(libsvn_ra_serf_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_SERF_LIBS) $(SVN_ZLIB_LIBS) $(LIBS)
+
+libsvn_ra_svn_PATH = subversion/libsvn_ra_svn
+libsvn_ra_svn_DEPS = subversion/libsvn_ra_svn/client.lo subversion/libsvn_ra_svn/cram.lo subversion/libsvn_ra_svn/cyrus_auth.lo subversion/libsvn_ra_svn/deprecated.lo subversion/libsvn_ra_svn/editorp.lo subversion/libsvn_ra_svn/internal_auth.lo subversion/libsvn_ra_svn/marshal.lo subversion/libsvn_ra_svn/streams.lo subversion/libsvn_ra_svn/version.lo subversion/libsvn_ra_svn/wrapped_sasl.lo
+libsvn_ra_svn_OBJECTS = client.lo cram.lo cyrus_auth.lo deprecated.lo editorp.lo internal_auth.lo marshal.lo streams.lo version.lo wrapped_sasl.lo
+subversion/libsvn_ra_svn/libsvn_ra_svn-1.la: $(libsvn_ra_svn_DEPS)
+ cd subversion/libsvn_ra_svn && $(LINK_LIB) $(libsvn_ra_svn_LDFLAGS) -o libsvn_ra_svn-1.la $(LT_NO_UNDEFINED) $(libsvn_ra_svn_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_SASL_LIBS) $(LIBS)
+
+libsvn_repos_PATH = subversion/libsvn_repos
+libsvn_repos_DEPS = subversion/libsvn_repos/authz.lo subversion/libsvn_repos/authz_info.lo subversion/libsvn_repos/authz_parse.lo subversion/libsvn_repos/commit.lo subversion/libsvn_repos/compat.lo subversion/libsvn_repos/config_file.lo subversion/libsvn_repos/config_pool.lo subversion/libsvn_repos/delta.lo subversion/libsvn_repos/deprecated.lo subversion/libsvn_repos/dump.lo subversion/libsvn_repos/fs-wrap.lo subversion/libsvn_repos/hooks.lo subversion/libsvn_repos/list.lo subversion/libsvn_repos/load-fs-vtable.lo subversion/libsvn_repos/load.lo subversion/libsvn_repos/log.lo subversion/libsvn_repos/node_tree.lo subversion/libsvn_repos/notify.lo subversion/libsvn_repos/replay.lo subversion/libsvn_repos/reporter.lo subversion/libsvn_repos/repos.lo subversion/libsvn_repos/rev_hunt.lo
+libsvn_repos_OBJECTS = authz.lo authz_info.lo authz_parse.lo commit.lo compat.lo config_file.lo config_pool.lo delta.lo deprecated.lo dump.lo fs-wrap.lo hooks.lo list.lo load-fs-vtable.lo load.lo log.lo node_tree.lo notify.lo replay.lo reporter.lo repos.lo rev_hunt.lo
+subversion/libsvn_repos/libsvn_repos-1.la: $(libsvn_repos_DEPS)
+ cd subversion/libsvn_repos && $(LINK_LIB) $(libsvn_repos_LDFLAGS) -o libsvn_repos-1.la $(LT_NO_UNDEFINED) $(libsvn_repos_OBJECTS) -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_subr_PATH = subversion/libsvn_subr
+libsvn_subr_DEPS = subversion/libsvn_subr/adler32.lo subversion/libsvn_subr/atomic.lo subversion/libsvn_subr/auth.lo subversion/libsvn_subr/base64.lo subversion/libsvn_subr/bit_array.lo subversion/libsvn_subr/cache-inprocess.lo subversion/libsvn_subr/cache-membuffer.lo subversion/libsvn_subr/cache-memcache.lo subversion/libsvn_subr/cache-null.lo subversion/libsvn_subr/cache.lo subversion/libsvn_subr/cache_config.lo subversion/libsvn_subr/checksum.lo subversion/libsvn_subr/cmdline.lo subversion/libsvn_subr/compat.lo subversion/libsvn_subr/compress_lz4.lo subversion/libsvn_subr/compress_zlib.lo subversion/libsvn_subr/config.lo subversion/libsvn_subr/config_auth.lo subversion/libsvn_subr/config_file.lo subversion/libsvn_subr/config_win.lo subversion/libsvn_subr/crypto.lo subversion/libsvn_subr/ctype.lo subversion/libsvn_subr/date.lo subversion/libsvn_subr/debug.lo subversion/libsvn_subr/deprecated.lo subversion/libsvn_subr/dirent_uri.lo subversion/libsvn_subr/dso.lo subversion/libsvn_subr/encode.lo subversion/libsvn_subr/eol.lo subversion/libsvn_subr/error.lo subversion/libsvn_subr/fnv1a.lo subversion/libsvn_subr/gpg_agent.lo subversion/libsvn_subr/hash.lo subversion/libsvn_subr/io.lo subversion/libsvn_subr/iter.lo subversion/libsvn_subr/lock.lo subversion/libsvn_subr/log.lo subversion/libsvn_subr/lz4/lz4.lo subversion/libsvn_subr/macos_keychain.lo subversion/libsvn_subr/magic.lo subversion/libsvn_subr/md5.lo subversion/libsvn_subr/mergeinfo.lo subversion/libsvn_subr/mutex.lo subversion/libsvn_subr/nls.lo subversion/libsvn_subr/object_pool.lo subversion/libsvn_subr/opt.lo subversion/libsvn_subr/packed_data.lo subversion/libsvn_subr/path.lo subversion/libsvn_subr/pool.lo subversion/libsvn_subr/prefix_string.lo subversion/libsvn_subr/prompt.lo subversion/libsvn_subr/properties.lo subversion/libsvn_subr/quoprint.lo subversion/libsvn_subr/root_pools.lo subversion/libsvn_subr/simple_providers.lo subversion/libsvn_subr/skel.lo subversion/libsvn_subr/sorts.lo subversion/libsvn_subr/spillbuf.lo subversion/libsvn_subr/sqlite.lo subversion/libsvn_subr/sqlite3wrapper.lo subversion/libsvn_subr/ssl_client_cert_providers.lo subversion/libsvn_subr/ssl_client_cert_pw_providers.lo subversion/libsvn_subr/ssl_server_trust_providers.lo subversion/libsvn_subr/stream.lo subversion/libsvn_subr/string.lo subversion/libsvn_subr/subst.lo subversion/libsvn_subr/sysinfo.lo subversion/libsvn_subr/target.lo subversion/libsvn_subr/temp_serializer.lo subversion/libsvn_subr/time.lo subversion/libsvn_subr/token.lo subversion/libsvn_subr/types.lo subversion/libsvn_subr/user.lo subversion/libsvn_subr/username_providers.lo subversion/libsvn_subr/utf.lo subversion/libsvn_subr/utf8proc.lo subversion/libsvn_subr/utf_validate.lo subversion/libsvn_subr/utf_width.lo subversion/libsvn_subr/validate.lo subversion/libsvn_subr/version.lo subversion/libsvn_subr/win32_crashrpt.lo subversion/libsvn_subr/win32_crypto.lo subversion/libsvn_subr/win32_xlate.lo subversion/libsvn_subr/x509info.lo subversion/libsvn_subr/x509parse.lo subversion/libsvn_subr/xml.lo
+libsvn_subr_OBJECTS = adler32.lo atomic.lo auth.lo base64.lo bit_array.lo cache-inprocess.lo cache-membuffer.lo cache-memcache.lo cache-null.lo cache.lo cache_config.lo checksum.lo cmdline.lo compat.lo compress_lz4.lo compress_zlib.lo config.lo config_auth.lo config_file.lo config_win.lo crypto.lo ctype.lo date.lo debug.lo deprecated.lo dirent_uri.lo dso.lo encode.lo eol.lo error.lo fnv1a.lo gpg_agent.lo hash.lo io.lo iter.lo lock.lo log.lo lz4/lz4.lo macos_keychain.lo magic.lo md5.lo mergeinfo.lo mutex.lo nls.lo object_pool.lo opt.lo packed_data.lo path.lo pool.lo prefix_string.lo prompt.lo properties.lo quoprint.lo root_pools.lo simple_providers.lo skel.lo sorts.lo spillbuf.lo sqlite.lo sqlite3wrapper.lo ssl_client_cert_providers.lo ssl_client_cert_pw_providers.lo ssl_server_trust_providers.lo stream.lo string.lo subst.lo sysinfo.lo target.lo temp_serializer.lo time.lo token.lo types.lo user.lo username_providers.lo utf.lo utf8proc.lo utf_validate.lo utf_width.lo validate.lo version.lo win32_crashrpt.lo win32_crypto.lo win32_xlate.lo x509info.lo x509parse.lo xml.lo
+subversion/libsvn_subr/libsvn_subr-1.la: $(libsvn_subr_DEPS)
+ cd subversion/libsvn_subr && $(LINK_LIB) $(libsvn_subr_LDFLAGS) -o libsvn_subr-1.la $(LT_NO_UNDEFINED) $(libsvn_subr_OBJECTS) $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_XML_LIBS) $(SVN_ZLIB_LIBS) $(SVN_APR_MEMCACHE_LIBS) $(SVN_SQLITE_LIBS) $(SVN_MAGIC_LIBS) $(SVN_INTL_LIBS) $(SVN_LZ4_LIBS) $(SVN_UTF8PROC_LIBS) $(LIBS)
+
+libsvn_swig_perl_PATH = subversion/bindings/swig/perl/libsvn_swig_perl
+libsvn_swig_perl_DEPS = subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.lo
+libsvn_swig_perl_OBJECTS = swigutil_pl.lo
+subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la: $(libsvn_swig_perl_DEPS)
+ cd subversion/bindings/swig/perl/libsvn_swig_perl && $(LINK_LIB) $(libsvn_swig_perl_LDFLAGS) -o libsvn_swig_perl-1.la $(LT_NO_UNDEFINED) $(libsvn_swig_perl_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_PERL_LIBS) $(SVN_SWIG_LIBS) $(LIBS)
+
+libsvn_swig_py_PATH = subversion/bindings/swig/python/libsvn_swig_py
+libsvn_swig_py_DEPS = subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.lo
+libsvn_swig_py_OBJECTS = swigutil_py.lo
+subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la: $(libsvn_swig_py_DEPS)
+ cd subversion/bindings/swig/python/libsvn_swig_py && $(LINK) $(libsvn_swig_py_LDFLAGS) -o libsvn_swig_py-1.la $(LT_NO_UNDEFINED) $(libsvn_swig_py_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_PYTHON_LIBS) $(SVN_SWIG_LIBS) $(LIBS)
+
+libsvn_swig_ruby_PATH = subversion/bindings/swig/ruby/libsvn_swig_ruby
+libsvn_swig_ruby_DEPS = subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.lo
+libsvn_swig_ruby_OBJECTS = swigutil_rb.lo
+subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la: $(libsvn_swig_ruby_DEPS)
+ cd subversion/bindings/swig/ruby/libsvn_swig_ruby && $(LINK) $(SWIG_RB_LIBS) $(libsvn_swig_ruby_LDFLAGS) -o libsvn_swig_ruby-1.la $(LT_NO_UNDEFINED) $(libsvn_swig_ruby_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_RUBY_LIBS) $(SVN_SWIG_LIBS) $(LIBS)
+
+libsvn_test_PATH = subversion/tests
+libsvn_test_DEPS = subversion/tests/svn_test_fs.lo subversion/tests/svn_test_main.lo
+libsvn_test_OBJECTS = svn_test_fs.lo svn_test_main.lo
+subversion/tests/libsvn_test-1.la: $(libsvn_test_DEPS)
+ cd subversion/tests && $(LINK_LIB) $(libsvn_test_LDFLAGS) -o libsvn_test-1.la $(libsvn_test_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvn_wc_PATH = subversion/libsvn_wc
+libsvn_wc_DEPS = subversion/libsvn_wc/adm_crawler.lo subversion/libsvn_wc/adm_files.lo subversion/libsvn_wc/adm_ops.lo subversion/libsvn_wc/ambient_depth_filter_editor.lo subversion/libsvn_wc/cleanup.lo subversion/libsvn_wc/conflicts.lo subversion/libsvn_wc/context.lo subversion/libsvn_wc/copy.lo subversion/libsvn_wc/crop.lo subversion/libsvn_wc/delete.lo subversion/libsvn_wc/deprecated.lo subversion/libsvn_wc/diff_editor.lo subversion/libsvn_wc/diff_local.lo subversion/libsvn_wc/entries.lo subversion/libsvn_wc/externals.lo subversion/libsvn_wc/info.lo subversion/libsvn_wc/lock.lo subversion/libsvn_wc/merge.lo subversion/libsvn_wc/node.lo subversion/libsvn_wc/old-and-busted.lo subversion/libsvn_wc/props.lo subversion/libsvn_wc/questions.lo subversion/libsvn_wc/relocate.lo subversion/libsvn_wc/revert.lo subversion/libsvn_wc/revision_status.lo subversion/libsvn_wc/status.lo subversion/libsvn_wc/translate.lo subversion/libsvn_wc/tree_conflicts.lo subversion/libsvn_wc/update_editor.lo subversion/libsvn_wc/upgrade.lo subversion/libsvn_wc/util.lo subversion/libsvn_wc/wc_db.lo subversion/libsvn_wc/wc_db_pristine.lo subversion/libsvn_wc/wc_db_update_move.lo subversion/libsvn_wc/wc_db_util.lo subversion/libsvn_wc/wc_db_wcroot.lo subversion/libsvn_wc/wcroot_anchor.lo subversion/libsvn_wc/workqueue.lo
+libsvn_wc_OBJECTS = adm_crawler.lo adm_files.lo adm_ops.lo ambient_depth_filter_editor.lo cleanup.lo conflicts.lo context.lo copy.lo crop.lo delete.lo deprecated.lo diff_editor.lo diff_local.lo entries.lo externals.lo info.lo lock.lo merge.lo node.lo old-and-busted.lo props.lo questions.lo relocate.lo revert.lo revision_status.lo status.lo translate.lo tree_conflicts.lo update_editor.lo upgrade.lo util.lo wc_db.lo wc_db_pristine.lo wc_db_update_move.lo wc_db_util.lo wc_db_wcroot.lo wcroot_anchor.lo workqueue.lo
+subversion/libsvn_wc/libsvn_wc-1.la: $(libsvn_wc_DEPS)
+ cd subversion/libsvn_wc && $(LINK_LIB) $(libsvn_wc_LDFLAGS) -o libsvn_wc-1.la $(LT_NO_UNDEFINED) $(libsvn_wc_OBJECTS) -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvncxxhl_PATH = subversion/bindings/cxxhl
+libsvncxxhl_DEPS = subversion/bindings/cxxhl/src/aprwrap/impl.lo subversion/bindings/cxxhl/src/exception.lo subversion/bindings/cxxhl/src/tristate.lo
+libsvncxxhl_OBJECTS = src/aprwrap/impl.lo src/exception.lo src/tristate.lo
+subversion/bindings/cxxhl/libsvncxxhl-1.la: $(libsvncxxhl_DEPS)
+ cd subversion/bindings/cxxhl && $(LINK_CXX_LIB) $(libsvncxxhl_LDFLAGS) -o libsvncxxhl-1.la $(LT_NO_UNDEFINED) $(libsvncxxhl_OBJECTS) -lsvn_repos-1 -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 -lsvn_fs-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+libsvnjavahl_PATH = subversion/bindings/javahl/native
+libsvnjavahl_DEPS = $(javahl_java_DEPS) $(javahl_callback_javah_DEPS) $(javahl_remote_javah_DEPS) $(javahl_types_javah_DEPS) $(javahl_util_javah_DEPS) $(javahl_javah_DEPS) subversion/bindings/javahl/native/Array.lo subversion/bindings/javahl/native/AuthnCallback.lo subversion/bindings/javahl/native/BlameCallback.lo subversion/bindings/javahl/native/ChangelistCallback.lo subversion/bindings/javahl/native/ClientContext.lo subversion/bindings/javahl/native/CommitCallback.lo subversion/bindings/javahl/native/CommitEditor.lo subversion/bindings/javahl/native/CommitMessage.lo subversion/bindings/javahl/native/CopySources.lo subversion/bindings/javahl/native/CreateJ.lo subversion/bindings/javahl/native/Credential.lo subversion/bindings/javahl/native/DiffOptions.lo subversion/bindings/javahl/native/DiffSummaryReceiver.lo subversion/bindings/javahl/native/EditorCallbacks.lo subversion/bindings/javahl/native/EditorProxy.lo subversion/bindings/javahl/native/EnumMapper.lo subversion/bindings/javahl/native/ExternalItem.lo subversion/bindings/javahl/native/File.lo subversion/bindings/javahl/native/ImportFilterCallback.lo subversion/bindings/javahl/native/InfoCallback.lo subversion/bindings/javahl/native/InputStream.lo subversion/bindings/javahl/native/Iterator.lo subversion/bindings/javahl/native/JNIByteArray.lo subversion/bindings/javahl/native/JNICriticalSection.lo subversion/bindings/javahl/native/JNIMutex.lo subversion/bindings/javahl/native/JNIStackElement.lo subversion/bindings/javahl/native/JNIStringHolder.lo subversion/bindings/javahl/native/JNIUtil.lo subversion/bindings/javahl/native/ListCallback.lo subversion/bindings/javahl/native/LockTokenTable.lo subversion/bindings/javahl/native/LogMessageCallback.lo subversion/bindings/javahl/native/MessageReceiver.lo subversion/bindings/javahl/native/NativeStream.lo subversion/bindings/javahl/native/OperationContext.lo subversion/bindings/javahl/native/OutputStream.lo subversion/bindings/javahl/native/PatchCallback.lo subversion/bindings/javahl/native/Path.lo subversion/bindings/javahl/native/Pool.lo subversion/bindings/javahl/native/Prompter.lo subversion/bindings/javahl/native/PropertyTable.lo subversion/bindings/javahl/native/ProplistCallback.lo subversion/bindings/javahl/native/RemoteSession.lo subversion/bindings/javahl/native/RemoteSessionContext.lo subversion/bindings/javahl/native/ReposFreezeAction.lo subversion/bindings/javahl/native/ReposNotifyCallback.lo subversion/bindings/javahl/native/ReposVerifyCallback.lo subversion/bindings/javahl/native/Revision.lo subversion/bindings/javahl/native/RevisionRange.lo subversion/bindings/javahl/native/RevisionRangeList.lo subversion/bindings/javahl/native/SVNBase.lo subversion/bindings/javahl/native/SVNClient.lo subversion/bindings/javahl/native/SVNRepos.lo subversion/bindings/javahl/native/StateReporter.lo subversion/bindings/javahl/native/StatusCallback.lo subversion/bindings/javahl/native/StringArray.lo subversion/bindings/javahl/native/SubversionException.lo subversion/bindings/javahl/native/Targets.lo subversion/bindings/javahl/native/Utility.lo subversion/bindings/javahl/native/VersionExtended.lo subversion/bindings/javahl/native/deprecated.lo subversion/bindings/javahl/native/jniwrapper/jni_base.lo subversion/bindings/javahl/native/jniwrapper/jni_channel.lo subversion/bindings/javahl/native/jniwrapper/jni_class_cache.lo subversion/bindings/javahl/native/jniwrapper/jni_io_stream.lo subversion/bindings/javahl/native/jniwrapper/jni_iterator.lo subversion/bindings/javahl/native/jniwrapper/jni_list.lo subversion/bindings/javahl/native/jniwrapper/jni_string_map.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RuntimeVersion.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_types_Version.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigLib.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.lo subversion/bindings/javahl/native/org_apache_subversion_javahl_util_TunnelChannel.lo
+libsvnjavahl_OBJECTS = Array.lo AuthnCallback.lo BlameCallback.lo ChangelistCallback.lo ClientContext.lo CommitCallback.lo CommitEditor.lo CommitMessage.lo CopySources.lo CreateJ.lo Credential.lo DiffOptions.lo DiffSummaryReceiver.lo EditorCallbacks.lo EditorProxy.lo EnumMapper.lo ExternalItem.lo File.lo ImportFilterCallback.lo InfoCallback.lo InputStream.lo Iterator.lo JNIByteArray.lo JNICriticalSection.lo JNIMutex.lo JNIStackElement.lo JNIStringHolder.lo JNIUtil.lo ListCallback.lo LockTokenTable.lo LogMessageCallback.lo MessageReceiver.lo NativeStream.lo OperationContext.lo OutputStream.lo PatchCallback.lo Path.lo Pool.lo Prompter.lo PropertyTable.lo ProplistCallback.lo RemoteSession.lo RemoteSessionContext.lo ReposFreezeAction.lo ReposNotifyCallback.lo ReposVerifyCallback.lo Revision.lo RevisionRange.lo RevisionRangeList.lo SVNBase.lo SVNClient.lo SVNRepos.lo StateReporter.lo StatusCallback.lo StringArray.lo SubversionException.lo Targets.lo Utility.lo VersionExtended.lo deprecated.lo jniwrapper/jni_base.lo jniwrapper/jni_channel.lo jniwrapper/jni_class_cache.lo jniwrapper/jni_io_stream.lo jniwrapper/jni_iterator.lo jniwrapper/jni_list.lo jniwrapper/jni_string_map.lo org_apache_subversion_javahl_NativeResources.lo org_apache_subversion_javahl_SVNClient.lo org_apache_subversion_javahl_SVNRepos.lo org_apache_subversion_javahl_remote_CommitEditor.lo org_apache_subversion_javahl_remote_RemoteFactory.lo org_apache_subversion_javahl_remote_RemoteSession.lo org_apache_subversion_javahl_remote_StateReporter.lo org_apache_subversion_javahl_types_RevisionRangeList.lo org_apache_subversion_javahl_types_RuntimeVersion.lo org_apache_subversion_javahl_types_Version.lo org_apache_subversion_javahl_types_VersionExtended.lo org_apache_subversion_javahl_util_ConfigImpl_Category.lo org_apache_subversion_javahl_util_ConfigLib.lo org_apache_subversion_javahl_util_DiffLib.lo org_apache_subversion_javahl_util_PropLib.lo org_apache_subversion_javahl_util_SubstLib.lo org_apache_subversion_javahl_util_TunnelChannel.lo
+subversion/bindings/javahl/native/libsvnjavahl-1.la: $(libsvnjavahl_DEPS)
+ cd subversion/bindings/javahl/native && $(LINK_JAVAHL_CXX) $(libsvnjavahl_LDFLAGS) -o libsvnjavahl-1.la $(LT_NO_UNDEFINED) $(libsvnjavahl_OBJECTS) -lsvn_repos-1 -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 -lsvn_fs-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_JAVA_SDK_LIBS) $(LIBS)
+
+locale_PATH = subversion/po
+locale_DEPS = subversion/po/de.mo subversion/po/es.mo subversion/po/fr.mo subversion/po/it.mo subversion/po/ja.mo subversion/po/ko.mo subversion/po/nb.mo subversion/po/pl.mo subversion/po/pt_BR.mo subversion/po/sv.mo subversion/po/zh_CN.mo subversion/po/zh_TW.mo
+locale: $(locale_DEPS)
+
+lock_helper_PATH = subversion/tests/cmdline
+lock_helper_DEPS = subversion/tests/cmdline/lock-helper.lo
+lock_helper_OBJECTS = lock-helper.lo
+subversion/tests/cmdline/lock-helper$(EXEEXT): $(lock_helper_DEPS)
+ cd subversion/tests/cmdline && $(LINK) $(lock_helper_LDFLAGS) -o lock-helper$(EXEEXT) $(lock_helper_OBJECTS) -lsvn_fs-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+locks_test_PATH = subversion/tests/libsvn_fs
+locks_test_DEPS = subversion/tests/libsvn_fs/locks-test.lo subversion/tests/libsvn_test-1.la
+locks_test_OBJECTS = locks-test.lo
+subversion/tests/libsvn_fs/locks-test$(EXEEXT): $(locks_test_DEPS)
+ cd subversion/tests/libsvn_fs && $(LINK) $(locks_test_LDFLAGS) -o locks-test$(EXEEXT) $(locks_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+mergeinfo_test_PATH = subversion/tests/libsvn_subr
+mergeinfo_test_DEPS = subversion/tests/libsvn_subr/mergeinfo-test.lo subversion/tests/libsvn_test-1.la
+mergeinfo_test_OBJECTS = mergeinfo-test.lo
+subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT): $(mergeinfo_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(mergeinfo_test_LDFLAGS) -o mergeinfo-test$(EXEEXT) $(mergeinfo_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+mod_authz_svn_PATH = subversion/mod_authz_svn
+mod_authz_svn_DEPS = subversion/mod_authz_svn/mod_authz_svn.lo subversion/mod_dav_svn/mod_dav_svn.la
+mod_authz_svn_OBJECTS = mod_authz_svn.lo
+subversion/mod_authz_svn/mod_authz_svn.la: $(mod_authz_svn_DEPS)
+ if $(INSTALL_APACHE_MODS) ; then cd subversion/mod_authz_svn && $(LINK_APACHE_MOD) $(mod_authz_svn_LDFLAGS) -o mod_authz_svn.la $(LT_NO_UNDEFINED) $(mod_authz_svn_OBJECTS) -lsvn_repos-1 -lsvn_subr-1 $(SVN_HTTPD_LIBS) $(LIBS) ; else echo "fake" > subversion/mod_authz_svn/mod_authz_svn.la ; fi
+
+mod_dav_svn_PATH = subversion/mod_dav_svn
+mod_dav_svn_DEPS = subversion/mod_dav_svn/activity.lo subversion/mod_dav_svn/authz.lo subversion/mod_dav_svn/deadprops.lo subversion/mod_dav_svn/liveprops.lo subversion/mod_dav_svn/lock.lo subversion/mod_dav_svn/merge.lo subversion/mod_dav_svn/mirror.lo subversion/mod_dav_svn/mod_dav_svn.lo subversion/mod_dav_svn/posts/create_txn.lo subversion/mod_dav_svn/reports/dated-rev.lo subversion/mod_dav_svn/reports/deleted-rev.lo subversion/mod_dav_svn/reports/file-revs.lo subversion/mod_dav_svn/reports/get-location-segments.lo subversion/mod_dav_svn/reports/get-locations.lo subversion/mod_dav_svn/reports/get-locks.lo subversion/mod_dav_svn/reports/inherited-props.lo subversion/mod_dav_svn/reports/list.lo subversion/mod_dav_svn/reports/log.lo subversion/mod_dav_svn/reports/mergeinfo.lo subversion/mod_dav_svn/reports/replay.lo subversion/mod_dav_svn/reports/update.lo subversion/mod_dav_svn/repos.lo subversion/mod_dav_svn/status.lo subversion/mod_dav_svn/util.lo subversion/mod_dav_svn/version.lo
+mod_dav_svn_OBJECTS = activity.lo authz.lo deadprops.lo liveprops.lo lock.lo merge.lo mirror.lo mod_dav_svn.lo posts/create_txn.lo reports/dated-rev.lo reports/deleted-rev.lo reports/file-revs.lo reports/get-location-segments.lo reports/get-locations.lo reports/get-locks.lo reports/inherited-props.lo reports/list.lo reports/log.lo reports/mergeinfo.lo reports/replay.lo reports/update.lo repos.lo status.lo util.lo version.lo
+subversion/mod_dav_svn/mod_dav_svn.la: $(mod_dav_svn_DEPS)
+ if $(INSTALL_APACHE_MODS) ; then cd subversion/mod_dav_svn && $(LINK_APACHE_MOD) $(mod_dav_svn_LDFLAGS) -o mod_dav_svn.la $(LT_NO_UNDEFINED) $(mod_dav_svn_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_HTTPD_LIBS) $(SVN_MOD_DAV_LIBS) $(LIBS) ; else echo "fake" > subversion/mod_dav_svn/mod_dav_svn.la ; fi
+
+mod_dontdothat_PATH = tools/server-side/mod_dontdothat
+mod_dontdothat_DEPS = tools/server-side/mod_dontdothat/mod_dontdothat.lo subversion/mod_dav_svn/mod_dav_svn.la
+mod_dontdothat_OBJECTS = mod_dontdothat.lo
+tools/server-side/mod_dontdothat/mod_dontdothat.la: $(mod_dontdothat_DEPS)
+ if $(INSTALL_APACHE_MODS) ; then cd tools/server-side/mod_dontdothat && $(LINK_APACHE_MOD) $(mod_dontdothat_LDFLAGS) -o mod_dontdothat.la $(LT_NO_UNDEFINED) $(mod_dontdothat_OBJECTS) -lsvn_subr-1 $(SVN_HTTPD_LIBS) $(LIBS) ; else echo "fake" > tools/server-side/mod_dontdothat/mod_dontdothat.la ; fi
+
+mtcc_test_PATH = subversion/tests/libsvn_client
+mtcc_test_DEPS = subversion/tests/libsvn_client/mtcc-test.lo subversion/tests/libsvn_test-1.la
+mtcc_test_OBJECTS = mtcc-test.lo
+subversion/tests/libsvn_client/mtcc-test$(EXEEXT): $(mtcc_test_DEPS)
+ cd subversion/tests/libsvn_client && $(LINK) $(mtcc_test_LDFLAGS) -o mtcc-test$(EXEEXT) $(mtcc_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_client-1 -lsvn_wc-1 -lsvn_repos-1 -lsvn_ra-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+op_depth_test_PATH = subversion/tests/libsvn_wc
+op_depth_test_DEPS = subversion/tests/libsvn_wc/op-depth-test.lo subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_test-1.la
+op_depth_test_OBJECTS = op-depth-test.lo utils.lo
+subversion/tests/libsvn_wc/op-depth-test$(EXEEXT): $(op_depth_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(op_depth_test_LDFLAGS) -o op-depth-test$(EXEEXT) $(op_depth_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+opt_test_PATH = subversion/tests/libsvn_subr
+opt_test_DEPS = subversion/tests/libsvn_subr/opt-test.lo subversion/tests/libsvn_test-1.la
+opt_test_OBJECTS = opt-test.lo
+subversion/tests/libsvn_subr/opt-test$(EXEEXT): $(opt_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(opt_test_LDFLAGS) -o opt-test$(EXEEXT) $(opt_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+packed_data_test_PATH = subversion/tests/libsvn_subr
+packed_data_test_DEPS = subversion/tests/libsvn_subr/packed-data-test.lo subversion/tests/libsvn_test-1.la
+packed_data_test_OBJECTS = packed-data-test.lo
+subversion/tests/libsvn_subr/packed-data-test$(EXEEXT): $(packed_data_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(packed_data_test_LDFLAGS) -o packed-data-test$(EXEEXT) $(packed_data_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+parse_diff_test_PATH = subversion/tests/libsvn_diff
+parse_diff_test_DEPS = subversion/tests/libsvn_diff/parse-diff-test.lo subversion/tests/libsvn_test-1.la
+parse_diff_test_OBJECTS = parse-diff-test.lo
+subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT): $(parse_diff_test_DEPS)
+ cd subversion/tests/libsvn_diff && $(LINK) $(parse_diff_test_LDFLAGS) -o parse-diff-test$(EXEEXT) $(parse_diff_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+path_test_PATH = subversion/tests/libsvn_subr
+path_test_DEPS = subversion/tests/libsvn_subr/path-test.lo subversion/tests/libsvn_test-1.la
+path_test_OBJECTS = path-test.lo
+subversion/tests/libsvn_subr/path-test$(EXEEXT): $(path_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(path_test_LDFLAGS) -o path-test$(EXEEXT) $(path_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+perl_client_PATH = subversion/bindings/swig/perl/native
+perl_client_DEPS = subversion/bindings/swig/perl/native/svn_client.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_client_OBJECTS = svn_client.lo
+subversion/bindings/swig/perl/native/_Client.la: $(perl_client_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_client_LDFLAGS) -o _Client.la $(LT_NO_UNDEFINED) $(perl_client_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_client-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_core_PATH = subversion/bindings/swig/perl/native
+perl_core_DEPS = subversion/bindings/swig/perl/native/core.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la
+perl_core_OBJECTS = core.lo
+subversion/bindings/swig/perl/native/_Core.la: $(perl_core_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_core_LDFLAGS) -o _Core.la $(LT_NO_UNDEFINED) $(perl_core_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_delta_PATH = subversion/bindings/swig/perl/native
+perl_delta_DEPS = subversion/bindings/swig/perl/native/svn_delta.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_delta_OBJECTS = svn_delta.lo
+subversion/bindings/swig/perl/native/_Delta.la: $(perl_delta_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_delta_LDFLAGS) -o _Delta.la $(LT_NO_UNDEFINED) $(perl_delta_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_diff_PATH = subversion/bindings/swig/perl/native
+perl_diff_DEPS = subversion/bindings/swig/perl/native/svn_diff.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_diff_OBJECTS = svn_diff.lo
+subversion/bindings/swig/perl/native/_Diff.la: $(perl_diff_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_diff_LDFLAGS) -o _Diff.la $(LT_NO_UNDEFINED) $(perl_diff_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_fs_PATH = subversion/bindings/swig/perl/native
+perl_fs_DEPS = subversion/bindings/swig/perl/native/svn_fs.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_fs_OBJECTS = svn_fs.lo
+subversion/bindings/swig/perl/native/_Fs.la: $(perl_fs_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_fs_LDFLAGS) -o _Fs.la $(LT_NO_UNDEFINED) $(perl_fs_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_ra_PATH = subversion/bindings/swig/perl/native
+perl_ra_DEPS = subversion/bindings/swig/perl/native/svn_ra.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_ra_OBJECTS = svn_ra.lo
+subversion/bindings/swig/perl/native/_Ra.la: $(perl_ra_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_ra_LDFLAGS) -o _Ra.la $(LT_NO_UNDEFINED) $(perl_ra_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_ra-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_repos_PATH = subversion/bindings/swig/perl/native
+perl_repos_DEPS = subversion/bindings/swig/perl/native/svn_repos.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_repos_OBJECTS = svn_repos.lo
+subversion/bindings/swig/perl/native/_Repos.la: $(perl_repos_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_repos_LDFLAGS) -o _Repos.la $(LT_NO_UNDEFINED) $(perl_repos_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_repos-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+perl_wc_PATH = subversion/bindings/swig/perl/native
+perl_wc_DEPS = subversion/bindings/swig/perl/native/svn_wc.lo subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la subversion/bindings/swig/perl/native/_Core.la
+perl_wc_OBJECTS = svn_wc.lo
+subversion/bindings/swig/perl/native/_Wc.la: $(perl_wc_DEPS)
+ cd subversion/bindings/swig/perl/native && $(LINK_PL_WRAPPER) $(perl_wc_LDFLAGS) -o _Wc.la $(LT_NO_UNDEFINED) $(perl_wc_OBJECTS) ../../../../../subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+prefix_string_test_PATH = subversion/tests/libsvn_subr
+prefix_string_test_DEPS = subversion/tests/libsvn_subr/prefix-string-test.lo subversion/tests/libsvn_test-1.la
+prefix_string_test_OBJECTS = prefix-string-test.lo
+subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT): $(prefix_string_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(prefix_string_test_LDFLAGS) -o prefix-string-test$(EXEEXT) $(prefix_string_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+priority_queue_test_PATH = subversion/tests/libsvn_subr
+priority_queue_test_DEPS = subversion/tests/libsvn_subr/priority-queue-test.lo subversion/tests/libsvn_test-1.la
+priority_queue_test_OBJECTS = priority-queue-test.lo
+subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT): $(priority_queue_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(priority_queue_test_LDFLAGS) -o priority-queue-test$(EXEEXT) $(priority_queue_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+pristine_store_test_PATH = subversion/tests/libsvn_wc
+pristine_store_test_DEPS = subversion/tests/libsvn_wc/pristine-store-test.lo subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_test-1.la
+pristine_store_test_OBJECTS = pristine-store-test.lo utils.lo
+subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT): $(pristine_store_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(pristine_store_test_LDFLAGS) -o pristine-store-test$(EXEEXT) $(pristine_store_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+python_client_PATH = subversion/bindings/swig/python
+python_client_DEPS = subversion/bindings/swig/python/svn_client.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_client_OBJECTS = svn_client.lo
+subversion/bindings/swig/python/_client.la: $(python_client_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_client_LDFLAGS) -o _client.la $(LT_NO_UNDEFINED) $(python_client_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_client-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_core_PATH = subversion/bindings/swig/python
+python_core_DEPS = subversion/bindings/swig/python/core.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la
+python_core_OBJECTS = core.lo
+subversion/bindings/swig/python/_core.la: $(python_core_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_core_LDFLAGS) -o _core.la $(LT_NO_UNDEFINED) $(python_core_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_delta_PATH = subversion/bindings/swig/python
+python_delta_DEPS = subversion/bindings/swig/python/svn_delta.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_delta_OBJECTS = svn_delta.lo
+subversion/bindings/swig/python/_delta.la: $(python_delta_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_delta_LDFLAGS) -o _delta.la $(LT_NO_UNDEFINED) $(python_delta_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_diff_PATH = subversion/bindings/swig/python
+python_diff_DEPS = subversion/bindings/swig/python/svn_diff.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_diff_OBJECTS = svn_diff.lo
+subversion/bindings/swig/python/_diff.la: $(python_diff_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_diff_LDFLAGS) -o _diff.la $(LT_NO_UNDEFINED) $(python_diff_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_fs_PATH = subversion/bindings/swig/python
+python_fs_DEPS = subversion/bindings/swig/python/svn_fs.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_fs_OBJECTS = svn_fs.lo
+subversion/bindings/swig/python/_fs.la: $(python_fs_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_fs_LDFLAGS) -o _fs.la $(LT_NO_UNDEFINED) $(python_fs_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_ra_PATH = subversion/bindings/swig/python
+python_ra_DEPS = subversion/bindings/swig/python/svn_ra.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_ra_OBJECTS = svn_ra.lo
+subversion/bindings/swig/python/_ra.la: $(python_ra_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_ra_LDFLAGS) -o _ra.la $(LT_NO_UNDEFINED) $(python_ra_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_ra-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_repos_PATH = subversion/bindings/swig/python
+python_repos_DEPS = subversion/bindings/swig/python/svn_repos.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_repos_OBJECTS = svn_repos.lo
+subversion/bindings/swig/python/_repos.la: $(python_repos_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_repos_LDFLAGS) -o _repos.la $(LT_NO_UNDEFINED) $(python_repos_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_repos-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+python_wc_PATH = subversion/bindings/swig/python
+python_wc_DEPS = subversion/bindings/swig/python/svn_wc.lo subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la subversion/bindings/swig/python/_core.la
+python_wc_OBJECTS = svn_wc.lo
+subversion/bindings/swig/python/_wc.la: $(python_wc_DEPS)
+ cd subversion/bindings/swig/python && $(LINK_PY_WRAPPER) $(python_wc_LDFLAGS) -o _wc.la $(LT_NO_UNDEFINED) $(python_wc_OBJECTS) ../../../../subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ra_local_test_PATH = subversion/tests/libsvn_ra_local
+ra_local_test_DEPS = subversion/tests/libsvn_ra_local/ra-local-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_ra_local/libsvn_ra_local-1.la
+ra_local_test_OBJECTS = ra-local-test.lo
+subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT): $(ra_local_test_DEPS)
+ cd subversion/tests/libsvn_ra_local && $(LINK) $(ra_local_test_LDFLAGS) -o ra-local-test$(EXEEXT) $(ra_local_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la ../../../subversion/libsvn_ra_local/libsvn_ra_local-1.la -lsvn_ra-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+ra_test_PATH = subversion/tests/libsvn_ra
+ra_test_DEPS = subversion/tests/libsvn_ra/ra-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_ra_svn/libsvn_ra_svn-1.la
+ra_test_OBJECTS = ra-test.lo
+subversion/tests/libsvn_ra/ra-test$(EXEEXT): $(ra_test_DEPS)
+ cd subversion/tests/libsvn_ra && $(LINK) $(ra_test_LDFLAGS) -o ra-test$(EXEEXT) $(ra_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_ra-1 ../../../subversion/libsvn_ra_svn/libsvn_ra_svn-1.la -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+random_test_PATH = subversion/tests/libsvn_delta
+random_test_DEPS = subversion/tests/libsvn_delta/random-test.lo subversion/tests/libsvn_test-1.la
+random_test_OBJECTS = random-test.lo
+subversion/tests/libsvn_delta/random-test$(EXEEXT): $(random_test_DEPS)
+ cd subversion/tests/libsvn_delta && $(LINK) $(random_test_LDFLAGS) -o random-test$(EXEEXT) $(random_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+repos_test_PATH = subversion/tests/libsvn_repos
+repos_test_DEPS = subversion/tests/libsvn_repos/dir-delta-editor.lo subversion/tests/libsvn_repos/repos-test.lo subversion/tests/libsvn_test-1.la
+repos_test_OBJECTS = dir-delta-editor.lo repos-test.lo
+subversion/tests/libsvn_repos/repos-test$(EXEEXT): $(repos_test_DEPS)
+ cd subversion/tests/libsvn_repos && $(LINK) $(repos_test_LDFLAGS) -o repos-test$(EXEEXT) $(repos_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+revision_test_PATH = subversion/tests/libsvn_subr
+revision_test_DEPS = subversion/tests/libsvn_subr/revision-test.lo subversion/tests/libsvn_test-1.la
+revision_test_OBJECTS = revision-test.lo
+subversion/tests/libsvn_subr/revision-test$(EXEEXT): $(revision_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(revision_test_LDFLAGS) -o revision-test$(EXEEXT) $(revision_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+root_pools_test_PATH = subversion/tests/libsvn_subr
+root_pools_test_DEPS = subversion/tests/libsvn_subr/root-pools-test.lo subversion/tests/libsvn_test-1.la
+root_pools_test_OBJECTS = root-pools-test.lo
+subversion/tests/libsvn_subr/root-pools-test$(EXEEXT): $(root_pools_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(root_pools_test_LDFLAGS) -o root-pools-test$(EXEEXT) $(root_pools_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+ruby_client_PATH = subversion/bindings/swig/ruby
+ruby_client_DEPS = subversion/bindings/swig/ruby/svn_client.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_client_OBJECTS = svn_client.lo
+subversion/bindings/swig/ruby/client.la: $(ruby_client_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_client_LDFLAGS) -o client.la $(LT_NO_UNDEFINED) $(ruby_client_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_client-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_core_PATH = subversion/bindings/swig/ruby
+ruby_core_DEPS = subversion/bindings/swig/ruby/core.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la
+ruby_core_OBJECTS = core.lo
+subversion/bindings/swig/ruby/core.la: $(ruby_core_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_core_LDFLAGS) -o core.la $(LT_NO_UNDEFINED) $(ruby_core_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_delta_PATH = subversion/bindings/swig/ruby
+ruby_delta_DEPS = subversion/bindings/swig/ruby/svn_delta.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_delta_OBJECTS = svn_delta.lo
+subversion/bindings/swig/ruby/delta.la: $(ruby_delta_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_delta_LDFLAGS) -o delta.la $(LT_NO_UNDEFINED) $(ruby_delta_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_diff_PATH = subversion/bindings/swig/ruby
+ruby_diff_DEPS = subversion/bindings/swig/ruby/svn_diff.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_diff_OBJECTS = svn_diff.lo
+subversion/bindings/swig/ruby/diff.la: $(ruby_diff_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_diff_LDFLAGS) -o diff.la $(LT_NO_UNDEFINED) $(ruby_diff_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_diff-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_fs_PATH = subversion/bindings/swig/ruby
+ruby_fs_DEPS = subversion/bindings/swig/ruby/svn_fs.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_fs_OBJECTS = svn_fs.lo
+subversion/bindings/swig/ruby/fs.la: $(ruby_fs_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_fs_LDFLAGS) -o fs.la $(LT_NO_UNDEFINED) $(ruby_fs_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_ra_PATH = subversion/bindings/swig/ruby
+ruby_ra_DEPS = subversion/bindings/swig/ruby/svn_ra.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_ra_OBJECTS = svn_ra.lo
+subversion/bindings/swig/ruby/ra.la: $(ruby_ra_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_ra_LDFLAGS) -o ra.la $(LT_NO_UNDEFINED) $(ruby_ra_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_ra-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_repos_PATH = subversion/bindings/swig/ruby
+ruby_repos_DEPS = subversion/bindings/swig/ruby/svn_repos.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_repos_OBJECTS = svn_repos.lo
+subversion/bindings/swig/ruby/repos.la: $(ruby_repos_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_repos_LDFLAGS) -o repos.la $(LT_NO_UNDEFINED) $(ruby_repos_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_repos-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+ruby_wc_PATH = subversion/bindings/swig/ruby
+ruby_wc_DEPS = subversion/bindings/swig/ruby/svn_wc.lo subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la subversion/bindings/swig/ruby/core.la
+ruby_wc_OBJECTS = svn_wc.lo
+subversion/bindings/swig/ruby/wc.la: $(ruby_wc_DEPS)
+ cd subversion/bindings/swig/ruby && $(LINK_RB_WRAPPER) $(ruby_wc_LDFLAGS) -o wc.la $(LT_NO_UNDEFINED) $(ruby_wc_OBJECTS) ../../../../subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+skel_test_PATH = subversion/tests/libsvn_subr
+skel_test_DEPS = subversion/tests/libsvn_subr/skel-test.lo subversion/tests/libsvn_test-1.la
+skel_test_OBJECTS = skel-test.lo
+subversion/tests/libsvn_subr/skel-test$(EXEEXT): $(skel_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(skel_test_LDFLAGS) -o skel-test$(EXEEXT) $(skel_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+spillbuf_test_PATH = subversion/tests/libsvn_subr
+spillbuf_test_DEPS = subversion/tests/libsvn_subr/spillbuf-test.lo subversion/tests/libsvn_test-1.la
+spillbuf_test_OBJECTS = spillbuf-test.lo
+subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT): $(spillbuf_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(spillbuf_test_LDFLAGS) -o spillbuf-test$(EXEEXT) $(spillbuf_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+sqlite_test_PATH = subversion/tests/libsvn_subr
+sqlite_test_DEPS = subversion/tests/libsvn_subr/sqlite-test.lo subversion/tests/libsvn_test-1.la
+sqlite_test_OBJECTS = sqlite-test.lo
+subversion/tests/libsvn_subr/sqlite-test$(EXEEXT): $(sqlite_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(sqlite_test_LDFLAGS) -o sqlite-test$(EXEEXT) $(sqlite_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+stream_test_PATH = subversion/tests/libsvn_subr
+stream_test_DEPS = subversion/tests/libsvn_subr/stream-test.lo subversion/tests/libsvn_test-1.la
+stream_test_OBJECTS = stream-test.lo
+subversion/tests/libsvn_subr/stream-test$(EXEEXT): $(stream_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(stream_test_LDFLAGS) -o stream-test$(EXEEXT) $(stream_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+string_table_test_PATH = subversion/tests/libsvn_fs_x
+string_table_test_DEPS = subversion/tests/libsvn_fs_x/string-table-test.lo subversion/tests/libsvn_test-1.la
+string_table_test_OBJECTS = string-table-test.lo
+subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT): $(string_table_test_DEPS)
+ cd subversion/tests/libsvn_fs_x && $(LINK) $(string_table_test_LDFLAGS) -o string-table-test$(EXEEXT) $(string_table_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs_x-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+string_test_PATH = subversion/tests/libsvn_subr
+string_test_DEPS = subversion/tests/libsvn_subr/string-test.lo subversion/tests/libsvn_test-1.la
+string_test_OBJECTS = string-test.lo
+subversion/tests/libsvn_subr/string-test$(EXEEXT): $(string_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(string_test_LDFLAGS) -o string-test$(EXEEXT) $(string_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+strings_reps_test_PATH = subversion/tests/libsvn_fs_base
+strings_reps_test_DEPS = subversion/tests/libsvn_fs_base/strings-reps-test.lo subversion/tests/libsvn_test-1.la subversion/libsvn_fs_base/libsvn_fs_base-1.la
+strings_reps_test_OBJECTS = strings-reps-test.lo
+subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT): $(strings_reps_test_DEPS)
+ cd subversion/tests/libsvn_fs_base && $(LINK) $(strings_reps_test_LDFLAGS) -o strings-reps-test$(EXEEXT) $(strings_reps_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_fs-1 ../../../subversion/libsvn_fs_base/libsvn_fs_base-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+subst_translate_test_PATH = subversion/tests/libsvn_subr
+subst_translate_test_DEPS = subversion/tests/libsvn_subr/subst_translate-test.lo subversion/tests/libsvn_test-1.la
+subst_translate_test_OBJECTS = subst_translate-test.lo
+subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT): $(subst_translate_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(subst_translate_test_LDFLAGS) -o subst_translate-test$(EXEEXT) $(subst_translate_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svn_PATH = subversion/svn
+svn_DEPS = subversion/svn/add-cmd.lo subversion/svn/auth-cmd.lo subversion/svn/blame-cmd.lo subversion/svn/cat-cmd.lo subversion/svn/changelist-cmd.lo subversion/svn/checkout-cmd.lo subversion/svn/cl-conflicts.lo subversion/svn/cleanup-cmd.lo subversion/svn/commit-cmd.lo subversion/svn/conflict-callbacks.lo subversion/svn/copy-cmd.lo subversion/svn/delete-cmd.lo subversion/svn/deprecated.lo subversion/svn/diff-cmd.lo subversion/svn/export-cmd.lo subversion/svn/file-merge.lo subversion/svn/help-cmd.lo subversion/svn/import-cmd.lo subversion/svn/info-cmd.lo subversion/svn/list-cmd.lo subversion/svn/lock-cmd.lo subversion/svn/log-cmd.lo subversion/svn/merge-cmd.lo subversion/svn/mergeinfo-cmd.lo subversion/svn/mkdir-cmd.lo subversion/svn/move-cmd.lo subversion/svn/notify.lo subversion/svn/patch-cmd.lo subversion/svn/propdel-cmd.lo subversion/svn/propedit-cmd.lo subversion/svn/propget-cmd.lo subversion/svn/proplist-cmd.lo subversion/svn/props.lo subversion/svn/propset-cmd.lo subversion/svn/relocate-cmd.lo subversion/svn/resolve-cmd.lo subversion/svn/resolved-cmd.lo subversion/svn/revert-cmd.lo subversion/svn/shelve-cmd.lo subversion/svn/similarity.lo subversion/svn/status-cmd.lo subversion/svn/status.lo subversion/svn/svn.lo subversion/svn/switch-cmd.lo subversion/svn/unlock-cmd.lo subversion/svn/update-cmd.lo subversion/svn/upgrade-cmd.lo subversion/svn/util.lo
+svn_OBJECTS = add-cmd.lo auth-cmd.lo blame-cmd.lo cat-cmd.lo changelist-cmd.lo checkout-cmd.lo cl-conflicts.lo cleanup-cmd.lo commit-cmd.lo conflict-callbacks.lo copy-cmd.lo delete-cmd.lo deprecated.lo diff-cmd.lo export-cmd.lo file-merge.lo help-cmd.lo import-cmd.lo info-cmd.lo list-cmd.lo lock-cmd.lo log-cmd.lo merge-cmd.lo mergeinfo-cmd.lo mkdir-cmd.lo move-cmd.lo notify.lo patch-cmd.lo propdel-cmd.lo propedit-cmd.lo propget-cmd.lo proplist-cmd.lo props.lo propset-cmd.lo relocate-cmd.lo resolve-cmd.lo resolved-cmd.lo revert-cmd.lo shelve-cmd.lo similarity.lo status-cmd.lo status.lo svn.lo switch-cmd.lo unlock-cmd.lo update-cmd.lo upgrade-cmd.lo util.lo
+subversion/svn/svn$(EXEEXT): $(svn_DEPS)
+ cd subversion/svn && $(LINK) $(svn_LDFLAGS) -o svn$(EXEEXT) $(svn_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svn_mergeinfo_normalizer_PATH = tools/client-side/svn-mergeinfo-normalizer
+svn_mergeinfo_normalizer_DEPS = tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.lo tools/client-side/svn-mergeinfo-normalizer/help-cmd.lo tools/client-side/svn-mergeinfo-normalizer/log.lo tools/client-side/svn-mergeinfo-normalizer/logic.lo tools/client-side/svn-mergeinfo-normalizer/missing-branches.lo tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.lo tools/client-side/svn-mergeinfo-normalizer/remove-branches-cmd.lo tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.lo tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.lo
+svn_mergeinfo_normalizer_OBJECTS = analyze-cmd.lo help-cmd.lo log.lo logic.lo missing-branches.lo normalize-cmd.lo remove-branches-cmd.lo svn-mergeinfo-normalizer.lo wc_mergeinfo.lo
+tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer$(EXEEXT): $(svn_mergeinfo_normalizer_DEPS)
+ cd tools/client-side/svn-mergeinfo-normalizer && $(LINK) $(svn_mergeinfo_normalizer_LDFLAGS) -o svn-mergeinfo-normalizer$(EXEEXT) $(svn_mergeinfo_normalizer_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svn_populate_node_origins_index_PATH = tools/server-side
+svn_populate_node_origins_index_DEPS = tools/server-side/svn-populate-node-origins-index.lo
+svn_populate_node_origins_index_OBJECTS = svn-populate-node-origins-index.lo
+tools/server-side/svn-populate-node-origins-index$(EXEEXT): $(svn_populate_node_origins_index_DEPS)
+ cd tools/server-side && $(LINK) $(svn_populate_node_origins_index_LDFLAGS) -o svn-populate-node-origins-index$(EXEEXT) $(svn_populate_node_origins_index_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+svn_wc_db_tester_PATH = tools/dev/wc-ng
+svn_wc_db_tester_DEPS = tools/dev/wc-ng/svn-wc-db-tester.lo
+svn_wc_db_tester_OBJECTS = svn-wc-db-tester.lo
+tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT): $(svn_wc_db_tester_DEPS)
+ cd tools/dev/wc-ng && $(LINK) $(svn_wc_db_tester_LDFLAGS) -o svn-wc-db-tester$(EXEEXT) $(svn_wc_db_tester_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+svnadmin_PATH = subversion/svnadmin
+svnadmin_DEPS = subversion/svnadmin/svnadmin.lo
+svnadmin_OBJECTS = svnadmin.lo
+subversion/svnadmin/svnadmin$(EXEEXT): $(svnadmin_DEPS)
+ cd subversion/svnadmin && $(LINK) $(svnadmin_LDFLAGS) -o svnadmin$(EXEEXT) $(svnadmin_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnauthz_PATH = tools/server-side
+svnauthz_DEPS = tools/server-side/svnauthz.lo
+svnauthz_OBJECTS = svnauthz.lo
+tools/server-side/svnauthz$(EXEEXT): $(svnauthz_DEPS)
+ cd tools/server-side && $(LINK) $(svnauthz_LDFLAGS) -o svnauthz$(EXEEXT) $(svnauthz_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+svnauthz_validate_PATH = tools/server-side
+svnauthz_validate_DEPS = tools/server-side/svnauthz.lo
+svnauthz_validate_OBJECTS = svnauthz.lo
+tools/server-side/svnauthz-validate$(EXEEXT): $(svnauthz_validate_DEPS)
+ cd tools/server-side && $(LINK) $(svnauthz_validate_LDFLAGS) -o svnauthz-validate$(EXEEXT) $(svnauthz_validate_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+svnbench_PATH = subversion/svnbench
+svnbench_DEPS = subversion/svnbench/help-cmd.lo subversion/svnbench/notify.lo subversion/svnbench/null-blame-cmd.lo subversion/svnbench/null-export-cmd.lo subversion/svnbench/null-info-cmd.lo subversion/svnbench/null-list-cmd.lo subversion/svnbench/null-log-cmd.lo subversion/svnbench/svnbench.lo subversion/svnbench/util.lo
+svnbench_OBJECTS = help-cmd.lo notify.lo null-blame-cmd.lo null-export-cmd.lo null-info-cmd.lo null-list-cmd.lo null-log-cmd.lo svnbench.lo util.lo
+subversion/svnbench/svnbench$(EXEEXT): $(svnbench_DEPS)
+ cd subversion/svnbench && $(LINK) $(svnbench_LDFLAGS) -o svnbench$(EXEEXT) $(svnbench_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_subr-1 -lsvn_delta-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnconflict_PATH = tools/client-side/svnconflict
+svnconflict_DEPS = tools/client-side/svnconflict/svnconflict.lo
+svnconflict_OBJECTS = svnconflict.lo
+tools/client-side/svnconflict/svnconflict$(EXEEXT): $(svnconflict_DEPS)
+ cd tools/client-side/svnconflict && $(LINK) $(svnconflict_LDFLAGS) -o svnconflict$(EXEEXT) $(svnconflict_OBJECTS) -lsvn_client-1 -lsvn_wc-1 -lsvn_ra-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svndiff_stream_test_PATH = subversion/tests/libsvn_delta
+svndiff_stream_test_DEPS = subversion/tests/libsvn_delta/svndiff-stream-test.lo subversion/tests/libsvn_test-1.la
+svndiff_stream_test_OBJECTS = svndiff-stream-test.lo
+subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT): $(svndiff_stream_test_DEPS)
+ cd subversion/tests/libsvn_delta && $(LINK) $(svndiff_stream_test_LDFLAGS) -o svndiff-stream-test$(EXEEXT) $(svndiff_stream_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svndiff_test_PATH = subversion/tests/libsvn_delta
+svndiff_test_DEPS = subversion/tests/libsvn_delta/svndiff-test.lo
+svndiff_test_OBJECTS = svndiff-test.lo
+subversion/tests/libsvn_delta/svndiff-test$(EXEEXT): $(svndiff_test_DEPS)
+ cd subversion/tests/libsvn_delta && $(LINK) $(svndiff_test_LDFLAGS) -o svndiff-test$(EXEEXT) $(svndiff_test_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svndumpfilter_PATH = subversion/svndumpfilter
+svndumpfilter_DEPS = subversion/svndumpfilter/svndumpfilter.lo
+svndumpfilter_OBJECTS = svndumpfilter.lo
+subversion/svndumpfilter/svndumpfilter$(EXEEXT): $(svndumpfilter_DEPS)
+ cd subversion/svndumpfilter && $(LINK) $(svndumpfilter_LDFLAGS) -o svndumpfilter$(EXEEXT) $(svndumpfilter_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnfsfs_PATH = subversion/svnfsfs
+svnfsfs_DEPS = subversion/svnfsfs/dump-index-cmd.lo subversion/svnfsfs/load-index-cmd.lo subversion/svnfsfs/stats-cmd.lo subversion/svnfsfs/svnfsfs.lo subversion/libsvn_fs_fs/libsvn_fs_fs-1.la
+svnfsfs_OBJECTS = dump-index-cmd.lo load-index-cmd.lo stats-cmd.lo svnfsfs.lo
+subversion/svnfsfs/svnfsfs$(EXEEXT): $(svnfsfs_DEPS)
+ cd subversion/svnfsfs && $(LINK) $(svnfsfs_LDFLAGS) -o svnfsfs$(EXEEXT) $(svnfsfs_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 ../../subversion/libsvn_fs_fs/libsvn_fs_fs-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnlook_PATH = subversion/svnlook
+svnlook_DEPS = subversion/svnlook/svnlook.lo
+svnlook_OBJECTS = svnlook.lo
+subversion/svnlook/svnlook$(EXEEXT): $(svnlook_DEPS)
+ cd subversion/svnlook && $(LINK) $(svnlook_LDFLAGS) -o svnlook$(EXEEXT) $(svnlook_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_diff-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnmover_PATH = tools/dev/svnmover
+svnmover_DEPS = tools/dev/svnmover/merge3.lo tools/dev/svnmover/ra.lo tools/dev/svnmover/scanlog.lo tools/dev/svnmover/svnmover.lo tools/dev/svnmover/util.lo
+svnmover_OBJECTS = merge3.lo ra.lo scanlog.lo svnmover.lo util.lo
+tools/dev/svnmover/svnmover$(EXEEXT): $(svnmover_DEPS)
+ cd tools/dev/svnmover && $(LINK) $(svnmover_LDFLAGS) -o svnmover$(EXEEXT) $(svnmover_OBJECTS) -lsvn_client-1 -lsvn_ra-1 -lsvn_subr-1 -lsvn_delta-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnmucc_PATH = subversion/svnmucc
+svnmucc_DEPS = subversion/svnmucc/svnmucc.lo
+svnmucc_OBJECTS = svnmucc.lo
+subversion/svnmucc/svnmucc$(EXEEXT): $(svnmucc_DEPS)
+ cd subversion/svnmucc && $(LINK) $(svnmucc_LDFLAGS) -o svnmucc$(EXEEXT) $(svnmucc_OBJECTS) -lsvn_client-1 -lsvn_ra-1 -lsvn_subr-1 -lsvn_delta-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnraisetreeconflict_PATH = tools/dev/svnraisetreeconflict
+svnraisetreeconflict_DEPS = tools/dev/svnraisetreeconflict/svnraisetreeconflict.lo
+svnraisetreeconflict_OBJECTS = svnraisetreeconflict.lo
+tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT): $(svnraisetreeconflict_DEPS)
+ cd tools/dev/svnraisetreeconflict && $(LINK) $(svnraisetreeconflict_LDFLAGS) -o svnraisetreeconflict$(EXEEXT) $(svnraisetreeconflict_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnrdump_PATH = subversion/svnrdump
+svnrdump_DEPS = subversion/svnrdump/dump_editor.lo subversion/svnrdump/load_editor.lo subversion/svnrdump/svnrdump.lo subversion/svnrdump/util.lo
+svnrdump_OBJECTS = dump_editor.lo load_editor.lo svnrdump.lo util.lo
+subversion/svnrdump/svnrdump$(EXEEXT): $(svnrdump_DEPS)
+ cd subversion/svnrdump && $(LINK) $(svnrdump_LDFLAGS) -o svnrdump$(EXEEXT) $(svnrdump_OBJECTS) -lsvn_client-1 -lsvn_ra-1 -lsvn_repos-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+svnserve_PATH = subversion/svnserve
+svnserve_DEPS = subversion/svnserve/cyrus_auth.lo subversion/svnserve/log-escape.lo subversion/svnserve/logger.lo subversion/svnserve/serve.lo subversion/svnserve/svnserve.lo subversion/svnserve/winservice.lo subversion/libsvn_ra_svn/libsvn_ra_svn-1.la
+svnserve_OBJECTS = cyrus_auth.lo log-escape.lo logger.lo serve.lo svnserve.lo winservice.lo
+subversion/svnserve/svnserve$(EXEEXT): $(svnserve_DEPS)
+ cd subversion/svnserve && $(LINK) $(svnserve_LDFLAGS) -o svnserve$(EXEEXT) $(svnserve_OBJECTS) -lsvn_repos-1 -lsvn_fs-1 -lsvn_delta-1 -lsvn_subr-1 ../../subversion/libsvn_ra_svn/libsvn_ra_svn-1.la $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_SASL_LIBS) $(LIBS)
+
+svnsync_PATH = subversion/svnsync
+svnsync_DEPS = subversion/svnsync/svnsync.lo subversion/svnsync/sync.lo
+svnsync_OBJECTS = svnsync.lo sync.lo
+subversion/svnsync/svnsync$(EXEEXT): $(svnsync_DEPS)
+ cd subversion/svnsync && $(LINK) $(svnsync_LDFLAGS) -o svnsync$(EXEEXT) $(svnsync_OBJECTS) -lsvn_ra-1 -lsvn_delta-1 -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+svnversion_PATH = subversion/svnversion
+svnversion_DEPS = subversion/svnversion/svnversion.lo
+svnversion_OBJECTS = svnversion.lo
+subversion/svnversion/svnversion$(EXEEXT): $(svnversion_DEPS)
+ cd subversion/svnversion && $(LINK) $(svnversion_LDFLAGS) -o svnversion$(EXEEXT) $(svnversion_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+time_test_PATH = subversion/tests/libsvn_subr
+time_test_DEPS = subversion/tests/libsvn_subr/time-test.lo subversion/tests/libsvn_test-1.la
+time_test_OBJECTS = time-test.lo
+subversion/tests/libsvn_subr/time-test$(EXEEXT): $(time_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(time_test_LDFLAGS) -o time-test$(EXEEXT) $(time_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+translate_test_PATH = subversion/tests/libsvn_subr
+translate_test_DEPS = subversion/tests/libsvn_subr/translate-test.lo subversion/tests/libsvn_test-1.la
+translate_test_OBJECTS = translate-test.lo
+subversion/tests/libsvn_subr/translate-test$(EXEEXT): $(translate_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(translate_test_LDFLAGS) -o translate-test$(EXEEXT) $(translate_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+utf_test_PATH = subversion/tests/libsvn_subr
+utf_test_DEPS = subversion/tests/libsvn_subr/utf-test.lo subversion/tests/libsvn_test-1.la
+utf_test_OBJECTS = utf-test.lo
+subversion/tests/libsvn_subr/utf-test$(EXEEXT): $(utf_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(utf_test_LDFLAGS) -o utf-test$(EXEEXT) $(utf_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+vdelta_test_PATH = subversion/tests/libsvn_delta
+vdelta_test_DEPS = subversion/tests/libsvn_delta/vdelta-test.lo
+vdelta_test_OBJECTS = vdelta-test.lo
+subversion/tests/libsvn_delta/vdelta-test$(EXEEXT): $(vdelta_test_DEPS)
+ cd subversion/tests/libsvn_delta && $(LINK) $(vdelta_test_LDFLAGS) -o vdelta-test$(EXEEXT) $(vdelta_test_OBJECTS) -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+wc_incomplete_tester_PATH = subversion/tests/libsvn_wc
+wc_incomplete_tester_DEPS = subversion/tests/libsvn_wc/wc-incomplete-tester.lo
+wc_incomplete_tester_OBJECTS = wc-incomplete-tester.lo
+subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT): $(wc_incomplete_tester_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(wc_incomplete_tester_LDFLAGS) -o wc-incomplete-tester$(EXEEXT) $(wc_incomplete_tester_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+wc_lock_tester_PATH = subversion/tests/libsvn_wc
+wc_lock_tester_DEPS = subversion/tests/libsvn_wc/wc-lock-tester.lo
+wc_lock_tester_OBJECTS = wc-lock-tester.lo
+subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT): $(wc_lock_tester_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(wc_lock_tester_LDFLAGS) -o wc-lock-tester$(EXEEXT) $(wc_lock_tester_OBJECTS) -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+wc_queries_test_PATH = subversion/tests/libsvn_wc
+wc_queries_test_DEPS = subversion/libsvn_subr/sqlite3wrapper.lo subversion/tests/libsvn_wc/wc-queries-test.lo subversion/tests/libsvn_test-1.la
+wc_queries_test_OBJECTS = ../../libsvn_subr/sqlite3wrapper.lo wc-queries-test.lo
+subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT): $(wc_queries_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(wc_queries_test_LDFLAGS) -o wc-queries-test$(EXEEXT) $(wc_queries_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(SVN_SQLITE_LIBS) $(LIBS)
+
+wc_test_PATH = subversion/tests/libsvn_wc
+wc_test_DEPS = subversion/tests/libsvn_wc/utils.lo subversion/tests/libsvn_wc/wc-test.lo subversion/tests/libsvn_test-1.la
+wc_test_OBJECTS = utils.lo wc-test.lo
+subversion/tests/libsvn_wc/wc-test$(EXEEXT): $(wc_test_DEPS)
+ cd subversion/tests/libsvn_wc && $(LINK) $(wc_test_LDFLAGS) -o wc-test$(EXEEXT) $(wc_test_OBJECTS) -lsvn_client-1 ../../../subversion/tests/libsvn_test-1.la -lsvn_wc-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+window_test_PATH = subversion/tests/libsvn_delta
+window_test_DEPS = subversion/tests/libsvn_delta/window-test.lo subversion/tests/libsvn_test-1.la
+window_test_OBJECTS = window-test.lo
+subversion/tests/libsvn_delta/window-test$(EXEEXT): $(window_test_DEPS)
+ cd subversion/tests/libsvn_delta && $(LINK) $(window_test_LDFLAGS) -o window-test$(EXEEXT) $(window_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_delta-1 -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+x509_parser_PATH = tools/dev
+x509_parser_DEPS = tools/dev/x509-parser.lo
+x509_parser_OBJECTS = x509-parser.lo
+tools/dev/x509-parser$(EXEEXT): $(x509_parser_DEPS)
+ cd tools/dev && $(LINK) $(x509_parser_LDFLAGS) -o x509-parser$(EXEEXT) $(x509_parser_OBJECTS) -lsvn_subr-1 $(SVN_APR_LIBS) $(LIBS)
+
+x509_test_PATH = subversion/tests/libsvn_subr
+x509_test_DEPS = subversion/tests/libsvn_subr/x509-test.lo subversion/tests/libsvn_test-1.la
+x509_test_OBJECTS = x509-test.lo
+subversion/tests/libsvn_subr/x509-test$(EXEEXT): $(x509_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(x509_test_LDFLAGS) -o x509-test$(EXEEXT) $(x509_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+xml_test_PATH = subversion/tests/libsvn_subr
+xml_test_DEPS = subversion/tests/libsvn_subr/xml-test.lo subversion/tests/libsvn_test-1.la
+xml_test_OBJECTS = xml-test.lo
+subversion/tests/libsvn_subr/xml-test$(EXEEXT): $(xml_test_DEPS)
+ cd subversion/tests/libsvn_subr && $(LINK) $(xml_test_LDFLAGS) -o xml-test$(EXEEXT) $(xml_test_OBJECTS) ../../../subversion/tests/libsvn_test-1.la -lsvn_subr-1 $(SVN_APRUTIL_LIBS) $(SVN_APR_LIBS) $(LIBS)
+
+
+########################################
+# Section 6: Install-Group build targets
+########################################
+
+apache-mod: subversion/mod_authz_svn/mod_authz_svn.la subversion/mod_dav_svn/mod_dav_svn.la tools/server-side/mod_dontdothat/mod_dontdothat.la
+
+bdb-lib: subversion/libsvn_fs_base/libsvn_fs_base-1.la
+
+bdb-test: subversion/tests/libsvn_fs_base/changes-test$(EXEEXT) subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT) subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT)
+
+bin: subversion/svn/svn$(EXEEXT) subversion/svnadmin/svnadmin$(EXEEXT) subversion/svnbench/svnbench$(EXEEXT) subversion/svndumpfilter/svndumpfilter$(EXEEXT) subversion/svnfsfs/svnfsfs$(EXEEXT) subversion/svnlook/svnlook$(EXEEXT) subversion/svnmucc/svnmucc$(EXEEXT) subversion/svnrdump/svnrdump$(EXEEXT) subversion/svnserve/svnserve$(EXEEXT) subversion/svnsync/svnsync$(EXEEXT) subversion/svnversion/svnversion$(EXEEXT)
+
+cxxhl-lib: subversion/bindings/cxxhl/libsvncxxhl-1.la
+
+cxxhl-tests: subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT) googlemock/libgooglemock-1.la
+
+fsmod-lib: subversion/libsvn_delta/libsvn_delta-1.la subversion/libsvn_fs_fs/libsvn_fs_fs-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la subversion/libsvn_fs_x/libsvn_fs_x-1.la subversion/libsvn_subr/libsvn_subr-1.la
+
+gnome-keyring-lib: subversion/libsvn_auth_gnome_keyring/libsvn_auth_gnome_keyring-1.la
+
+javahl-callback-javah:
+
+javahl-compat-java:
+
+javahl-compat-tests:
+
+javahl-java:
+
+javahl-javah:
+
+javahl-lib: subversion/bindings/javahl/native/libsvnjavahl-1.la
+
+javahl-remote-javah:
+
+javahl-tests:
+
+javahl-types-javah:
+
+javahl-util-javah:
+
+kwallet-lib: subversion/libsvn_auth_kwallet/libsvn_auth_kwallet-1.la
+
+lib: subversion/libsvn_client/libsvn_client-1.la subversion/libsvn_diff/libsvn_diff-1.la subversion/libsvn_ra/libsvn_ra-1.la subversion/libsvn_wc/libsvn_wc-1.la
+
+locale:
+
+ramod-lib: subversion/libsvn_fs/libsvn_fs-1.la subversion/libsvn_ra_local/libsvn_ra_local-1.la subversion/libsvn_ra_svn/libsvn_ra_svn-1.la subversion/libsvn_repos/libsvn_repos-1.la
+
+serf-lib: subversion/libsvn_ra_serf/libsvn_ra_serf-1.la
+
+sub-test: subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test$(EXEEXT)
+
+swig-pl-lib: subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la
+
+swig-py: subversion/bindings/swig/python/_client.la subversion/bindings/swig/python/_core.la subversion/bindings/swig/python/_delta.la subversion/bindings/swig/python/_diff.la subversion/bindings/swig/python/_fs.la subversion/bindings/swig/python/_ra.la subversion/bindings/swig/python/_repos.la subversion/bindings/swig/python/_wc.la
+
+swig-py-lib: subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la
+
+swig-rb: subversion/bindings/swig/ruby/client.la subversion/bindings/swig/ruby/core.la subversion/bindings/swig/ruby/delta.la subversion/bindings/swig/ruby/diff.la subversion/bindings/swig/ruby/fs.la subversion/bindings/swig/ruby/ra.la subversion/bindings/swig/ruby/repos.la subversion/bindings/swig/ruby/wc.la
+
+swig-rb-lib: subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la
+
+test: subversion/tests/afl/afl-x509$(EXEEXT) subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT) subversion/tests/libsvn_subr/auth-test$(EXEEXT) subversion/tests/libsvn_repos/authz-test$(EXEEXT) subversion/tests/libsvn_subr/bit-array-test$(EXEEXT) subversion/tests/libsvn_subr/cache-test$(EXEEXT) subversion/tests/libsvn_subr/checksum-test$(EXEEXT) subversion/tests/libsvn_client/client-test$(EXEEXT) subversion/tests/libsvn_subr/compat-test$(EXEEXT) subversion/tests/libsvn_subr/compress-test$(EXEEXT) subversion/tests/libsvn_subr/config-test$(EXEEXT) subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT) subversion/tests/libsvn_client/conflicts-test$(EXEEXT) subversion/tests/libsvn_subr/crypto-test$(EXEEXT) subversion/tests/libsvn_wc/db-test$(EXEEXT) subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT) subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT) subversion/tests/libsvn_repos/dump-load-test$(EXEEXT) subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT) subversion/tests/cmdline/entries-dump$(EXEEXT) subversion/tests/libsvn_subr/error-code-test$(EXEEXT) subversion/tests/libsvn_subr/error-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT) subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT) subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT) subversion/tests/libsvn_fs/fs-test$(EXEEXT) subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT) subversion/tests/libsvn_subr/hashdump-test$(EXEEXT) subversion/tests/libsvn_subr/io-test$(EXEEXT) subversion/tests/libsvn_test-1.la subversion/tests/cmdline/lock-helper$(EXEEXT) subversion/tests/libsvn_fs/locks-test$(EXEEXT) subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT) subversion/tests/libsvn_client/mtcc-test$(EXEEXT) subversion/tests/libsvn_wc/op-depth-test$(EXEEXT) subversion/tests/libsvn_subr/opt-test$(EXEEXT) subversion/tests/libsvn_subr/packed-data-test$(EXEEXT) subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT) subversion/tests/libsvn_subr/path-test$(EXEEXT) subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT) subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT) subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT) subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT) subversion/tests/libsvn_ra/ra-test$(EXEEXT) subversion/tests/libsvn_delta/random-test$(EXEEXT) subversion/tests/libsvn_repos/repos-test$(EXEEXT) subversion/tests/libsvn_subr/revision-test$(EXEEXT) subversion/tests/libsvn_subr/root-pools-test$(EXEEXT) subversion/tests/libsvn_subr/skel-test$(EXEEXT) subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT) subversion/tests/libsvn_subr/sqlite-test$(EXEEXT) subversion/tests/libsvn_subr/stream-test$(EXEEXT) subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT) subversion/tests/libsvn_subr/string-test$(EXEEXT) subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT) tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT) subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT) subversion/tests/libsvn_delta/svndiff-test$(EXEEXT) subversion/tests/libsvn_subr/time-test$(EXEEXT) subversion/tests/libsvn_subr/translate-test$(EXEEXT) subversion/tests/libsvn_subr/utf-test$(EXEEXT) subversion/tests/libsvn_delta/vdelta-test$(EXEEXT) subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT) subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT) subversion/tests/libsvn_wc/wc-test$(EXEEXT) subversion/tests/libsvn_delta/window-test$(EXEEXT) subversion/tests/libsvn_subr/x509-test$(EXEEXT) subversion/tests/libsvn_subr/xml-test$(EXEEXT)
+
+tools: tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer$(EXEEXT) tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) tools/client-side/svnconflict/svnconflict$(EXEEXT) tools/dev/svnmover/svnmover$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/dev/x509-parser$(EXEEXT)
+
+
+########################################
+# Section 7: Install-Group install targets
+########################################
+
+install-mods-shared: subversion/mod_dav_svn/mod_dav_svn.la subversion/mod_authz_svn/mod_authz_svn.la tools/server-side/mod_dontdothat/mod_dontdothat.la
+ if $(INSTALL_APACHE_MODS) ; then cd subversion/mod_dav_svn ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n dav_svn mod_dav_svn.la ; fi
+ if $(INSTALL_APACHE_MODS) ; then cd subversion/mod_authz_svn ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n authz_svn mod_authz_svn.la ; fi
+ if $(INSTALL_APACHE_MODS) ; then cd tools/server-side/mod_dontdothat ; $(MKDIR) "$(APACHE_LIBEXECDIR)" ; $(INSTALL_MOD_SHARED) -n dontdothat mod_dontdothat.la ; fi
+
+install-bdb-lib: subversion/libsvn_fs_base/libsvn_fs_base-1.la
+ $(MKDIR) $(DESTDIR)$(bdb_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_fs_base ; $(INSTALL_BDB_LIB) libsvn_fs_base-1.la $(DESTDIR)$(bdb_libdir)/libsvn_fs_base-1.la
+ $(INSTALL_DATA) subversion/libsvn_fs_base/libsvn_fs_base.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_fs_base.pc
+
+install-bin: subversion/svn/svn$(EXEEXT) subversion/svnadmin/svnadmin$(EXEEXT) subversion/svnbench/svnbench$(EXEEXT) subversion/svndumpfilter/svndumpfilter$(EXEEXT) subversion/svnfsfs/svnfsfs$(EXEEXT) subversion/svnlook/svnlook$(EXEEXT) subversion/svnmucc/svnmucc$(EXEEXT) subversion/svnrdump/svnrdump$(EXEEXT) subversion/svnserve/svnserve$(EXEEXT) subversion/svnsync/svnsync$(EXEEXT) subversion/svnversion/svnversion$(EXEEXT)
+ $(MKDIR) $(DESTDIR)$(bindir)
+ cd subversion/svn ; $(INSTALL_BIN) svn$(EXEEXT) $(DESTDIR)$(bindir)/svn$(EXEEXT)
+
+ cd subversion/svnadmin ; $(INSTALL_BIN) svnadmin$(EXEEXT) $(DESTDIR)$(bindir)/svnadmin$(EXEEXT)
+
+ cd subversion/svnbench ; $(INSTALL_BIN) svnbench$(EXEEXT) $(DESTDIR)$(bindir)/svnbench$(EXEEXT)
+
+ cd subversion/svndumpfilter ; $(INSTALL_BIN) svndumpfilter$(EXEEXT) $(DESTDIR)$(bindir)/svndumpfilter$(EXEEXT)
+
+ cd subversion/svnfsfs ; $(INSTALL_BIN) svnfsfs$(EXEEXT) $(DESTDIR)$(bindir)/svnfsfs$(EXEEXT)
+
+ cd subversion/svnlook ; $(INSTALL_BIN) svnlook$(EXEEXT) $(DESTDIR)$(bindir)/svnlook$(EXEEXT)
+
+ cd subversion/svnmucc ; $(INSTALL_BIN) svnmucc$(EXEEXT) $(DESTDIR)$(bindir)/svnmucc$(EXEEXT)
+
+ cd subversion/svnrdump ; $(INSTALL_BIN) svnrdump$(EXEEXT) $(DESTDIR)$(bindir)/svnrdump$(EXEEXT)
+
+ cd subversion/svnserve ; $(INSTALL_BIN) svnserve$(EXEEXT) $(DESTDIR)$(bindir)/svnserve$(EXEEXT)
+
+ cd subversion/svnsync ; $(INSTALL_BIN) svnsync$(EXEEXT) $(DESTDIR)$(bindir)/svnsync$(EXEEXT)
+
+ cd subversion/svnversion ; $(INSTALL_BIN) svnversion$(EXEEXT) $(DESTDIR)$(bindir)/svnversion$(EXEEXT)
+
+
+install-cxxhl-lib: subversion/bindings/cxxhl/libsvncxxhl-1.la
+ $(MKDIR) $(DESTDIR)$(cxxhl_libdir)
+ cd subversion/bindings/cxxhl ; $(INSTALL_CXXHL_LIB) libsvncxxhl-1.la $(DESTDIR)$(cxxhl_libdir)/libsvncxxhl-1.la
+
+ $(INSTALL_EXTRA_CXXHL_LIB)
+
+install-cxxhl-tests: googlemock/libgooglemock-1.la subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT)
+ $(MKDIR) $(DESTDIR)$(cxxhl_testsdir)
+ if $(SVN_USE_GOOGLEMOCK) ; then cd googlemock ; $(INSTALL_CXXHL_TESTS) libgooglemock-1.la $(DESTDIR)$(cxxhl_testsdir)/libgooglemock-1.la ; fi
+
+ if $(SVN_USE_GOOGLEMOCK) ; then cd subversion/bindings/cxxhl ; $(INSTALL_CXXHL_TESTS) cxxhl-tests$(EXEEXT) $(DESTDIR)$(cxxhl_testsdir)/cxxhl-tests$(EXEEXT) ; fi
+
+ $(INSTALL_EXTRA_CXXHL_TESTS)
+
+install-fsmod-lib: subversion/libsvn_subr/libsvn_subr-1.la subversion/libsvn_delta/libsvn_delta-1.la subversion/libsvn_fs_util/libsvn_fs_util-1.la subversion/libsvn_fs_fs/libsvn_fs_fs-1.la subversion/libsvn_fs_x/libsvn_fs_x-1.la
+ $(MKDIR) $(DESTDIR)$(fsmod_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_subr ; $(INSTALL_FSMOD_LIB) libsvn_subr-1.la $(DESTDIR)$(fsmod_libdir)/libsvn_subr-1.la
+ $(INSTALL_DATA) subversion/libsvn_subr/libsvn_subr.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_subr.pc
+ cd subversion/libsvn_delta ; $(INSTALL_FSMOD_LIB) libsvn_delta-1.la $(DESTDIR)$(fsmod_libdir)/libsvn_delta-1.la
+ $(INSTALL_DATA) subversion/libsvn_delta/libsvn_delta.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_delta.pc
+ cd subversion/libsvn_fs_util ; $(INSTALL_FSMOD_LIB) libsvn_fs_util-1.la $(DESTDIR)$(fsmod_libdir)/libsvn_fs_util-1.la
+ $(INSTALL_DATA) subversion/libsvn_fs_util/libsvn_fs_util.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_fs_util.pc
+ cd subversion/libsvn_fs_fs ; $(INSTALL_FSMOD_LIB) libsvn_fs_fs-1.la $(DESTDIR)$(fsmod_libdir)/libsvn_fs_fs-1.la
+ $(INSTALL_DATA) subversion/libsvn_fs_fs/libsvn_fs_fs.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_fs_fs.pc
+ cd subversion/libsvn_fs_x ; $(INSTALL_FSMOD_LIB) libsvn_fs_x-1.la $(DESTDIR)$(fsmod_libdir)/libsvn_fs_x-1.la
+ $(INSTALL_DATA) subversion/libsvn_fs_x/libsvn_fs_x.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_fs_x.pc
+
+install-gnome-keyring-lib: subversion/libsvn_auth_gnome_keyring/libsvn_auth_gnome_keyring-1.la
+ $(MKDIR) $(DESTDIR)$(gnome_keyring_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_auth_gnome_keyring ; $(INSTALL_GNOME_KEYRING_LIB) libsvn_auth_gnome_keyring-1.la $(DESTDIR)$(gnome_keyring_libdir)/libsvn_auth_gnome_keyring-1.la
+ $(INSTALL_DATA) subversion/libsvn_auth_gnome_keyring/libsvn_auth_gnome_keyring.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_auth_gnome_keyring.pc
+
+install-javahl-callback-javah:
+ $(MKDIR) $(DESTDIR)$(javahl_callback_javahdir)
+ $(INSTALL_EXTRA_JAVAHL_CALLBACK_JAVAH)
+
+install-javahl-compat-java:
+ $(MKDIR) $(DESTDIR)$(javahl_compat_javadir)
+ $(INSTALL_EXTRA_JAVAHL_COMPAT_JAVA)
+
+install-javahl-compat-tests:
+ $(MKDIR) $(DESTDIR)$(javahl_compat_testsdir)
+ $(INSTALL_EXTRA_JAVAHL_COMPAT_TESTS)
+
+install-javahl-java:
+ $(MKDIR) $(DESTDIR)$(javahl_javadir)
+ $(INSTALL_EXTRA_JAVAHL_JAVA)
+
+install-javahl-javah:
+ $(MKDIR) $(DESTDIR)$(javahl_javahdir)
+ $(INSTALL_EXTRA_JAVAHL_JAVAH)
+
+install-javahl-lib: subversion/bindings/javahl/native/libsvnjavahl-1.la
+ $(MKDIR) $(DESTDIR)$(javahl_libdir)
+ cd subversion/bindings/javahl/native ; $(INSTALL_JAVAHL_LIB) libsvnjavahl-1.la $(DESTDIR)$(javahl_libdir)/libsvnjavahl-1.la
+
+ $(INSTALL_EXTRA_JAVAHL_LIB)
+
+install-javahl-remote-javah:
+ $(MKDIR) $(DESTDIR)$(javahl_remote_javahdir)
+ $(INSTALL_EXTRA_JAVAHL_REMOTE_JAVAH)
+
+install-javahl-tests:
+ $(MKDIR) $(DESTDIR)$(javahl_testsdir)
+ $(INSTALL_EXTRA_JAVAHL_TESTS)
+
+install-javahl-types-javah:
+ $(MKDIR) $(DESTDIR)$(javahl_types_javahdir)
+ $(INSTALL_EXTRA_JAVAHL_TYPES_JAVAH)
+
+install-javahl-util-javah:
+ $(MKDIR) $(DESTDIR)$(javahl_util_javahdir)
+ $(INSTALL_EXTRA_JAVAHL_UTIL_JAVAH)
+
+install-kwallet-lib: subversion/libsvn_auth_kwallet/libsvn_auth_kwallet-1.la
+ $(MKDIR) $(DESTDIR)$(kwallet_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_auth_kwallet ; $(INSTALL_KWALLET_LIB) libsvn_auth_kwallet-1.la $(DESTDIR)$(kwallet_libdir)/libsvn_auth_kwallet-1.la
+ $(INSTALL_DATA) subversion/libsvn_auth_kwallet/libsvn_auth_kwallet.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_auth_kwallet.pc
+
+install-lib: subversion/libsvn_diff/libsvn_diff-1.la subversion/libsvn_ra/libsvn_ra-1.la subversion/libsvn_wc/libsvn_wc-1.la subversion/libsvn_client/libsvn_client-1.la
+ $(MKDIR) $(DESTDIR)$(libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_diff ; $(INSTALL_LIB) libsvn_diff-1.la $(DESTDIR)$(libdir)/libsvn_diff-1.la
+ $(INSTALL_DATA) subversion/libsvn_diff/libsvn_diff.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_diff.pc
+ cd subversion/libsvn_ra ; $(INSTALL_LIB) libsvn_ra-1.la $(DESTDIR)$(libdir)/libsvn_ra-1.la
+ $(INSTALL_DATA) subversion/libsvn_ra/libsvn_ra.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_ra.pc
+ cd subversion/libsvn_wc ; $(INSTALL_LIB) libsvn_wc-1.la $(DESTDIR)$(libdir)/libsvn_wc-1.la
+ $(INSTALL_DATA) subversion/libsvn_wc/libsvn_wc.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_wc.pc
+ cd subversion/libsvn_client ; $(INSTALL_LIB) libsvn_client-1.la $(DESTDIR)$(libdir)/libsvn_client-1.la
+ $(INSTALL_DATA) subversion/libsvn_client/libsvn_client.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_client.pc
+
+install-locale: subversion/po/de.mo subversion/po/es.mo subversion/po/fr.mo subversion/po/it.mo subversion/po/ja.mo subversion/po/ko.mo subversion/po/nb.mo subversion/po/pl.mo subversion/po/pt_BR.mo subversion/po/sv.mo subversion/po/zh_CN.mo subversion/po/zh_TW.mo
+ $(MKDIR) $(DESTDIR)$(localedir)
+ $(MKDIR) $(DESTDIR)$(localedir)/de/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) de.mo $(DESTDIR)$(localedir)/de/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/es/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) es.mo $(DESTDIR)$(localedir)/es/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/fr/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) fr.mo $(DESTDIR)$(localedir)/fr/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/it/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) it.mo $(DESTDIR)$(localedir)/it/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/ja/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) ja.mo $(DESTDIR)$(localedir)/ja/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/ko/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) ko.mo $(DESTDIR)$(localedir)/ko/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/nb/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) nb.mo $(DESTDIR)$(localedir)/nb/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/pl/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) pl.mo $(DESTDIR)$(localedir)/pl/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/pt_BR/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) pt_BR.mo $(DESTDIR)$(localedir)/pt_BR/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/sv/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) sv.mo $(DESTDIR)$(localedir)/sv/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/zh_CN/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) zh_CN.mo $(DESTDIR)$(localedir)/zh_CN/LC_MESSAGES/$(PACKAGE_NAME).mo
+ $(MKDIR) $(DESTDIR)$(localedir)/zh_TW/LC_MESSAGES
+ cd subversion/po ; $(INSTALL_LOCALE) zh_TW.mo $(DESTDIR)$(localedir)/zh_TW/LC_MESSAGES/$(PACKAGE_NAME).mo
+
+install-ramod-lib: subversion/libsvn_fs/libsvn_fs-1.la subversion/libsvn_ra_svn/libsvn_ra_svn-1.la subversion/libsvn_repos/libsvn_repos-1.la subversion/libsvn_ra_local/libsvn_ra_local-1.la
+ $(MKDIR) $(DESTDIR)$(ramod_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_fs ; $(INSTALL_RAMOD_LIB) libsvn_fs-1.la $(DESTDIR)$(ramod_libdir)/libsvn_fs-1.la
+ $(INSTALL_DATA) subversion/libsvn_fs/libsvn_fs.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_fs.pc
+ cd subversion/libsvn_ra_svn ; $(INSTALL_RAMOD_LIB) libsvn_ra_svn-1.la $(DESTDIR)$(ramod_libdir)/libsvn_ra_svn-1.la
+ $(INSTALL_DATA) subversion/libsvn_ra_svn/libsvn_ra_svn.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_ra_svn.pc
+ cd subversion/libsvn_repos ; $(INSTALL_RAMOD_LIB) libsvn_repos-1.la $(DESTDIR)$(ramod_libdir)/libsvn_repos-1.la
+ $(INSTALL_DATA) subversion/libsvn_repos/libsvn_repos.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_repos.pc
+ cd subversion/libsvn_ra_local ; $(INSTALL_RAMOD_LIB) libsvn_ra_local-1.la $(DESTDIR)$(ramod_libdir)/libsvn_ra_local-1.la
+ $(INSTALL_DATA) subversion/libsvn_ra_local/libsvn_ra_local.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_ra_local.pc
+
+install-serf-lib: subversion/libsvn_ra_serf/libsvn_ra_serf-1.la
+ $(MKDIR) $(DESTDIR)$(serf_libdir) $(DESTDIR)$(pkgconfig_dir)
+ cd subversion/libsvn_ra_serf ; $(INSTALL_SERF_LIB) libsvn_ra_serf-1.la $(DESTDIR)$(serf_libdir)/libsvn_ra_serf-1.la
+ $(INSTALL_DATA) subversion/libsvn_ra_serf/libsvn_ra_serf.pc $(DESTDIR)$(pkgconfig_dir)/libsvn_ra_serf.pc
+
+install-sub-test: subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test$(EXEEXT)
+ $(MKDIR) $(DESTDIR)$(sub_testdir)
+ cd subversion/tests/libsvn_fs_fs ; $(INSTALL_SUB_TEST) fs-fs-fuzzy-test$(EXEEXT) $(DESTDIR)$(sub_testdir)/fs-fs-fuzzy-test$(EXEEXT)
+
+
+install-swig-pl-lib: subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la
+ $(MKDIR) $(DESTDIR)$(swig_pl_libdir)
+ cd subversion/bindings/swig/perl/libsvn_swig_perl ; $(INSTALL_SWIG_PL_LIB) libsvn_swig_perl-1.la $(DESTDIR)$(swig_pl_libdir)/libsvn_swig_perl-1.la
+
+
+install-swig-py: subversion/bindings/swig/python/_core.la subversion/bindings/swig/python/_client.la subversion/bindings/swig/python/_delta.la subversion/bindings/swig/python/_diff.la subversion/bindings/swig/python/_fs.la subversion/bindings/swig/python/_ra.la subversion/bindings/swig/python/_repos.la subversion/bindings/swig/python/_wc.la
+ $(MKDIR) $(DESTDIR)$(swig_pydir)
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _core.la $(DESTDIR)$(swig_pydir)/_core.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _client.la $(DESTDIR)$(swig_pydir)/_client.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _delta.la $(DESTDIR)$(swig_pydir)/_delta.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _diff.la $(DESTDIR)$(swig_pydir)/_diff.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _fs.la $(DESTDIR)$(swig_pydir)/_fs.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _ra.la $(DESTDIR)$(swig_pydir)/_ra.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _repos.la $(DESTDIR)$(swig_pydir)/_repos.la
+
+ cd subversion/bindings/swig/python ; $(INSTALL_SWIG_PY) _wc.la $(DESTDIR)$(swig_pydir)/_wc.la
+
+ $(INSTALL_EXTRA_SWIG_PY)
+
+install-swig-py-lib: subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la
+ $(MKDIR) $(DESTDIR)$(swig_py_libdir)
+ cd subversion/bindings/swig/python/libsvn_swig_py ; $(INSTALL_SWIG_PY_LIB) libsvn_swig_py-1.la $(DESTDIR)$(swig_py_libdir)/libsvn_swig_py-1.la
+
+
+install-swig-rb: subversion/bindings/swig/ruby/core.la subversion/bindings/swig/ruby/client.la subversion/bindings/swig/ruby/delta.la subversion/bindings/swig/ruby/diff.la subversion/bindings/swig/ruby/fs.la subversion/bindings/swig/ruby/ra.la subversion/bindings/swig/ruby/repos.la subversion/bindings/swig/ruby/wc.la
+ $(MKDIR) $(DESTDIR)$(swig_rbdir)
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) core.la $(DESTDIR)$(swig_rbdir)/core.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) client.la $(DESTDIR)$(swig_rbdir)/client.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) delta.la $(DESTDIR)$(swig_rbdir)/delta.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) diff.la $(DESTDIR)$(swig_rbdir)/diff.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) fs.la $(DESTDIR)$(swig_rbdir)/fs.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) ra.la $(DESTDIR)$(swig_rbdir)/ra.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) repos.la $(DESTDIR)$(swig_rbdir)/repos.la
+
+ cd subversion/bindings/swig/ruby ; $(INSTALL_SWIG_RB) wc.la $(DESTDIR)$(swig_rbdir)/wc.la
+
+ $(INSTALL_EXTRA_SWIG_RB)
+
+install-swig-rb-lib: subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la
+ $(MKDIR) $(DESTDIR)$(swig_rb_libdir)
+ cd subversion/bindings/swig/ruby/libsvn_swig_ruby ; $(INSTALL_SWIG_RB_LIB) libsvn_swig_ruby-1.la $(DESTDIR)$(swig_rb_libdir)/libsvn_swig_ruby-1.la
+
+
+install-tools: tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer$(EXEEXT) tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) tools/client-side/svnconflict/svnconflict$(EXEEXT) tools/dev/svnmover/svnmover$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/dev/x509-parser$(EXEEXT)
+ $(MKDIR) $(DESTDIR)$(toolsdir)
+ cd tools/diff ; $(INSTALL_TOOLS) diff$(EXEEXT) $(DESTDIR)$(toolsdir)/diff$(EXEEXT)
+
+ cd tools/diff ; $(INSTALL_TOOLS) diff3$(EXEEXT) $(DESTDIR)$(toolsdir)/diff3$(EXEEXT)
+
+ cd tools/diff ; $(INSTALL_TOOLS) diff4$(EXEEXT) $(DESTDIR)$(toolsdir)/diff4$(EXEEXT)
+
+ cd tools/dev ; $(INSTALL_TOOLS) fsfs-access-map$(EXEEXT) $(DESTDIR)$(toolsdir)/fsfs-access-map$(EXEEXT)
+
+ cd tools/client-side/svn-mergeinfo-normalizer ; $(INSTALL_TOOLS) svn-mergeinfo-normalizer$(EXEEXT) $(DESTDIR)$(toolsdir)/svn-mergeinfo-normalizer$(EXEEXT)
+
+ cd tools/server-side ; $(INSTALL_TOOLS) svn-populate-node-origins-index$(EXEEXT) $(DESTDIR)$(toolsdir)/svn-populate-node-origins-index$(EXEEXT)
+
+ cd tools/server-side ; $(INSTALL_TOOLS) svnauthz$(EXEEXT) $(DESTDIR)$(toolsdir)/svnauthz$(EXEEXT)
+
+ cd tools/server-side ; $(INSTALL_TOOLS) svnauthz-validate$(EXEEXT) $(DESTDIR)$(toolsdir)/svnauthz-validate$(EXEEXT)
+
+ cd tools/client-side/svnconflict ; $(INSTALL_TOOLS) svnconflict$(EXEEXT) $(DESTDIR)$(toolsdir)/svnconflict$(EXEEXT)
+
+ cd tools/dev/svnmover ; $(INSTALL_TOOLS) svnmover$(EXEEXT) $(DESTDIR)$(toolsdir)/svnmover$(EXEEXT)
+
+ cd tools/dev/svnraisetreeconflict ; $(INSTALL_TOOLS) svnraisetreeconflict$(EXEEXT) $(DESTDIR)$(toolsdir)/svnraisetreeconflict$(EXEEXT)
+
+ cd tools/dev ; $(INSTALL_TOOLS) x509-parser$(EXEEXT) $(DESTDIR)$(toolsdir)/x509-parser$(EXEEXT)
+
+ $(INSTALL_EXTRA_TOOLS)
+
+
+########################################
+# Section 8: The install-include rule
+########################################
+
+install-include: subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_md5.h subversion/include/svn_mergeinfo.h subversion/include/svn_nls.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_quoprint.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/include/svn_x509.h subversion/include/svn_xml.h
+ $(MKDIR) $(DESTDIR)$(includedir)/subversion-1
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/mod_authz_svn.h $(DESTDIR)$(includedir)/subversion-1/mod_authz_svn.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/mod_dav_svn.h $(DESTDIR)$(includedir)/subversion-1/mod_dav_svn.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_auth.h $(DESTDIR)$(includedir)/subversion-1/svn_auth.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_base64.h $(DESTDIR)$(includedir)/subversion-1/svn_base64.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_cache_config.h $(DESTDIR)$(includedir)/subversion-1/svn_cache_config.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_checksum.h $(DESTDIR)$(includedir)/subversion-1/svn_checksum.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_client.h $(DESTDIR)$(includedir)/subversion-1/svn_client.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_cmdline.h $(DESTDIR)$(includedir)/subversion-1/svn_cmdline.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_compat.h $(DESTDIR)$(includedir)/subversion-1/svn_compat.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_config.h $(DESTDIR)$(includedir)/subversion-1/svn_config.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_ctype.h $(DESTDIR)$(includedir)/subversion-1/svn_ctype.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_dav.h $(DESTDIR)$(includedir)/subversion-1/svn_dav.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_delta.h $(DESTDIR)$(includedir)/subversion-1/svn_delta.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_diff.h $(DESTDIR)$(includedir)/subversion-1/svn_diff.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_dirent_uri.h $(DESTDIR)$(includedir)/subversion-1/svn_dirent_uri.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_dso.h $(DESTDIR)$(includedir)/subversion-1/svn_dso.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_error.h $(DESTDIR)$(includedir)/subversion-1/svn_error.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_error_codes.h $(DESTDIR)$(includedir)/subversion-1/svn_error_codes.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_fs.h $(DESTDIR)$(includedir)/subversion-1/svn_fs.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_hash.h $(DESTDIR)$(includedir)/subversion-1/svn_hash.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_io.h $(DESTDIR)$(includedir)/subversion-1/svn_io.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_iter.h $(DESTDIR)$(includedir)/subversion-1/svn_iter.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_md5.h $(DESTDIR)$(includedir)/subversion-1/svn_md5.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_mergeinfo.h $(DESTDIR)$(includedir)/subversion-1/svn_mergeinfo.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_nls.h $(DESTDIR)$(includedir)/subversion-1/svn_nls.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_opt.h $(DESTDIR)$(includedir)/subversion-1/svn_opt.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_path.h $(DESTDIR)$(includedir)/subversion-1/svn_path.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_pools.h $(DESTDIR)$(includedir)/subversion-1/svn_pools.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_props.h $(DESTDIR)$(includedir)/subversion-1/svn_props.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_quoprint.h $(DESTDIR)$(includedir)/subversion-1/svn_quoprint.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_ra.h $(DESTDIR)$(includedir)/subversion-1/svn_ra.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_ra_svn.h $(DESTDIR)$(includedir)/subversion-1/svn_ra_svn.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_repos.h $(DESTDIR)$(includedir)/subversion-1/svn_repos.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_sorts.h $(DESTDIR)$(includedir)/subversion-1/svn_sorts.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_string.h $(DESTDIR)$(includedir)/subversion-1/svn_string.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_subst.h $(DESTDIR)$(includedir)/subversion-1/svn_subst.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_time.h $(DESTDIR)$(includedir)/subversion-1/svn_time.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_types.h $(DESTDIR)$(includedir)/subversion-1/svn_types.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_user.h $(DESTDIR)$(includedir)/subversion-1/svn_user.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_utf.h $(DESTDIR)$(includedir)/subversion-1/svn_utf.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_version.h $(DESTDIR)$(includedir)/subversion-1/svn_version.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_wc.h $(DESTDIR)$(includedir)/subversion-1/svn_wc.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_x509.h $(DESTDIR)$(includedir)/subversion-1/svn_x509.h
+ $(INSTALL_INCLUDE) $(abs_srcdir)/subversion/include/svn_xml.h $(DESTDIR)$(includedir)/subversion-1/svn_xml.h
+
+########################################
+# Section 9: Shortcut targets for manual builds of specific items
+########################################
+
+afl-x509: subversion/tests/afl/afl-x509$(EXEEXT)
+atomic-ra-revprop-change: subversion/tests/cmdline/atomic-ra-revprop-change$(EXEEXT)
+auth-test: subversion/tests/libsvn_subr/auth-test$(EXEEXT)
+authz-test: subversion/tests/libsvn_repos/authz-test$(EXEEXT)
+bit-array-test: subversion/tests/libsvn_subr/bit-array-test$(EXEEXT)
+cache-test: subversion/tests/libsvn_subr/cache-test$(EXEEXT)
+changes-test: subversion/tests/libsvn_fs_base/changes-test$(EXEEXT)
+checksum-test: subversion/tests/libsvn_subr/checksum-test$(EXEEXT)
+client-test: subversion/tests/libsvn_client/client-test$(EXEEXT)
+compat-test: subversion/tests/libsvn_subr/compat-test$(EXEEXT)
+compress-test: subversion/tests/libsvn_subr/compress-test$(EXEEXT)
+config-test: subversion/tests/libsvn_subr/config-test$(EXEEXT)
+conflict-data-test: subversion/tests/libsvn_wc/conflict-data-test$(EXEEXT)
+conflicts-test: subversion/tests/libsvn_client/conflicts-test$(EXEEXT)
+crypto-test: subversion/tests/libsvn_subr/crypto-test$(EXEEXT)
+cxxhl-tests: subversion/bindings/cxxhl/cxxhl-tests$(EXEEXT)
+db-test: subversion/tests/libsvn_wc/db-test$(EXEEXT)
+diff: tools/diff/diff$(EXEEXT)
+diff-diff3-test: subversion/tests/libsvn_diff/diff-diff3-test$(EXEEXT)
+diff3: tools/diff/diff3$(EXEEXT)
+diff4: tools/diff/diff4$(EXEEXT)
+dirent_uri-test: subversion/tests/libsvn_subr/dirent_uri-test$(EXEEXT)
+dump-load-test: subversion/tests/libsvn_repos/dump-load-test$(EXEEXT)
+entries-compat-test: subversion/tests/libsvn_wc/entries-compat-test$(EXEEXT)
+entries-dump: subversion/tests/cmdline/entries-dump$(EXEEXT)
+error-code-test: subversion/tests/libsvn_subr/error-code-test$(EXEEXT)
+error-test: subversion/tests/libsvn_subr/error-test$(EXEEXT)
+fs-base-test: subversion/tests/libsvn_fs_base/fs-base-test$(EXEEXT)
+fs-fs-fuzzy-test: subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test$(EXEEXT)
+fs-fs-pack-test: subversion/tests/libsvn_fs_fs/fs-fs-pack-test$(EXEEXT)
+fs-fs-private-test: subversion/tests/libsvn_fs_fs/fs-fs-private-test$(EXEEXT)
+fs-sequential-test: subversion/tests/libsvn_fs/fs-sequential-test$(EXEEXT)
+fs-test: subversion/tests/libsvn_fs/fs-test$(EXEEXT)
+fs-x-pack-test: subversion/tests/libsvn_fs_x/fs-x-pack-test$(EXEEXT)
+fsfs-access-map: tools/dev/fsfs-access-map$(EXEEXT)
+hashdump-test: subversion/tests/libsvn_subr/hashdump-test$(EXEEXT)
+io-test: subversion/tests/libsvn_subr/io-test$(EXEEXT)
+libgooglemock: googlemock/libgooglemock-1.la
+libsvn_auth_gnome_keyring: subversion/libsvn_auth_gnome_keyring/libsvn_auth_gnome_keyring-1.la
+libsvn_auth_kwallet: subversion/libsvn_auth_kwallet/libsvn_auth_kwallet-1.la
+libsvn_client: subversion/libsvn_client/libsvn_client-1.la
+libsvn_delta: subversion/libsvn_delta/libsvn_delta-1.la
+libsvn_diff: subversion/libsvn_diff/libsvn_diff-1.la
+libsvn_fs: subversion/libsvn_fs/libsvn_fs-1.la
+libsvn_fs_base: subversion/libsvn_fs_base/libsvn_fs_base-1.la
+libsvn_fs_fs: subversion/libsvn_fs_fs/libsvn_fs_fs-1.la
+libsvn_fs_util: subversion/libsvn_fs_util/libsvn_fs_util-1.la
+libsvn_fs_x: subversion/libsvn_fs_x/libsvn_fs_x-1.la
+libsvn_ra: subversion/libsvn_ra/libsvn_ra-1.la
+libsvn_ra_local: subversion/libsvn_ra_local/libsvn_ra_local-1.la
+libsvn_ra_serf: subversion/libsvn_ra_serf/libsvn_ra_serf-1.la
+libsvn_ra_svn: subversion/libsvn_ra_svn/libsvn_ra_svn-1.la
+libsvn_repos: subversion/libsvn_repos/libsvn_repos-1.la
+libsvn_subr: subversion/libsvn_subr/libsvn_subr-1.la
+libsvn_swig_perl: subversion/bindings/swig/perl/libsvn_swig_perl/libsvn_swig_perl-1.la
+libsvn_swig_py: subversion/bindings/swig/python/libsvn_swig_py/libsvn_swig_py-1.la
+libsvn_swig_ruby: subversion/bindings/swig/ruby/libsvn_swig_ruby/libsvn_swig_ruby-1.la
+libsvn_test: subversion/tests/libsvn_test-1.la
+libsvn_wc: subversion/libsvn_wc/libsvn_wc-1.la
+libsvncxxhl: subversion/bindings/cxxhl/libsvncxxhl-1.la
+libsvnjavahl: subversion/bindings/javahl/native/libsvnjavahl-1.la
+lock-helper: subversion/tests/cmdline/lock-helper$(EXEEXT)
+locks-test: subversion/tests/libsvn_fs/locks-test$(EXEEXT)
+mergeinfo-test: subversion/tests/libsvn_subr/mergeinfo-test$(EXEEXT)
+mod_authz_svn: subversion/mod_authz_svn/mod_authz_svn.la
+mod_dav_svn: subversion/mod_dav_svn/mod_dav_svn.la
+mod_dontdothat: tools/server-side/mod_dontdothat/mod_dontdothat.la
+mtcc-test: subversion/tests/libsvn_client/mtcc-test$(EXEEXT)
+op-depth-test: subversion/tests/libsvn_wc/op-depth-test$(EXEEXT)
+opt-test: subversion/tests/libsvn_subr/opt-test$(EXEEXT)
+packed-data-test: subversion/tests/libsvn_subr/packed-data-test$(EXEEXT)
+parse-diff-test: subversion/tests/libsvn_diff/parse-diff-test$(EXEEXT)
+path-test: subversion/tests/libsvn_subr/path-test$(EXEEXT)
+perl_client: subversion/bindings/swig/perl/native/_Client.la
+perl_core: subversion/bindings/swig/perl/native/_Core.la
+perl_delta: subversion/bindings/swig/perl/native/_Delta.la
+perl_diff: subversion/bindings/swig/perl/native/_Diff.la
+perl_fs: subversion/bindings/swig/perl/native/_Fs.la
+perl_ra: subversion/bindings/swig/perl/native/_Ra.la
+perl_repos: subversion/bindings/swig/perl/native/_Repos.la
+perl_wc: subversion/bindings/swig/perl/native/_Wc.la
+prefix-string-test: subversion/tests/libsvn_subr/prefix-string-test$(EXEEXT)
+priority-queue-test: subversion/tests/libsvn_subr/priority-queue-test$(EXEEXT)
+pristine-store-test: subversion/tests/libsvn_wc/pristine-store-test$(EXEEXT)
+python_client: subversion/bindings/swig/python/_client.la
+python_core: subversion/bindings/swig/python/_core.la
+python_delta: subversion/bindings/swig/python/_delta.la
+python_diff: subversion/bindings/swig/python/_diff.la
+python_fs: subversion/bindings/swig/python/_fs.la
+python_ra: subversion/bindings/swig/python/_ra.la
+python_repos: subversion/bindings/swig/python/_repos.la
+python_wc: subversion/bindings/swig/python/_wc.la
+ra-local-test: subversion/tests/libsvn_ra_local/ra-local-test$(EXEEXT)
+ra-test: subversion/tests/libsvn_ra/ra-test$(EXEEXT)
+random-test: subversion/tests/libsvn_delta/random-test$(EXEEXT)
+repos-test: subversion/tests/libsvn_repos/repos-test$(EXEEXT)
+revision-test: subversion/tests/libsvn_subr/revision-test$(EXEEXT)
+root-pools-test: subversion/tests/libsvn_subr/root-pools-test$(EXEEXT)
+ruby_client: subversion/bindings/swig/ruby/client.la
+ruby_core: subversion/bindings/swig/ruby/core.la
+ruby_delta: subversion/bindings/swig/ruby/delta.la
+ruby_diff: subversion/bindings/swig/ruby/diff.la
+ruby_fs: subversion/bindings/swig/ruby/fs.la
+ruby_ra: subversion/bindings/swig/ruby/ra.la
+ruby_repos: subversion/bindings/swig/ruby/repos.la
+ruby_wc: subversion/bindings/swig/ruby/wc.la
+skel-test: subversion/tests/libsvn_subr/skel-test$(EXEEXT)
+spillbuf-test: subversion/tests/libsvn_subr/spillbuf-test$(EXEEXT)
+sqlite-test: subversion/tests/libsvn_subr/sqlite-test$(EXEEXT)
+stream-test: subversion/tests/libsvn_subr/stream-test$(EXEEXT)
+string-table-test: subversion/tests/libsvn_fs_x/string-table-test$(EXEEXT)
+string-test: subversion/tests/libsvn_subr/string-test$(EXEEXT)
+strings-reps-test: subversion/tests/libsvn_fs_base/strings-reps-test$(EXEEXT)
+subst_translate-test: subversion/tests/libsvn_subr/subst_translate-test$(EXEEXT)
+svn: subversion/svn/svn$(EXEEXT)
+svn-mergeinfo-normalizer: tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer$(EXEEXT)
+svn-populate-node-origins-index: tools/server-side/svn-populate-node-origins-index$(EXEEXT)
+svn-wc-db-tester: tools/dev/wc-ng/svn-wc-db-tester$(EXEEXT)
+svnadmin: subversion/svnadmin/svnadmin$(EXEEXT)
+svnauthz: tools/server-side/svnauthz$(EXEEXT)
+svnauthz-validate: tools/server-side/svnauthz-validate$(EXEEXT)
+svnbench: subversion/svnbench/svnbench$(EXEEXT)
+svnconflict: tools/client-side/svnconflict/svnconflict$(EXEEXT)
+svndiff-stream-test: subversion/tests/libsvn_delta/svndiff-stream-test$(EXEEXT)
+svndiff-test: subversion/tests/libsvn_delta/svndiff-test$(EXEEXT)
+svndumpfilter: subversion/svndumpfilter/svndumpfilter$(EXEEXT)
+svnfsfs: subversion/svnfsfs/svnfsfs$(EXEEXT)
+svnlook: subversion/svnlook/svnlook$(EXEEXT)
+svnmover: tools/dev/svnmover/svnmover$(EXEEXT)
+svnmucc: subversion/svnmucc/svnmucc$(EXEEXT)
+svnraisetreeconflict: tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT)
+svnrdump: subversion/svnrdump/svnrdump$(EXEEXT)
+svnserve: subversion/svnserve/svnserve$(EXEEXT)
+svnsync: subversion/svnsync/svnsync$(EXEEXT)
+svnversion: subversion/svnversion/svnversion$(EXEEXT)
+time-test: subversion/tests/libsvn_subr/time-test$(EXEEXT)
+translate-test: subversion/tests/libsvn_subr/translate-test$(EXEEXT)
+utf-test: subversion/tests/libsvn_subr/utf-test$(EXEEXT)
+vdelta-test: subversion/tests/libsvn_delta/vdelta-test$(EXEEXT)
+wc-incomplete-tester: subversion/tests/libsvn_wc/wc-incomplete-tester$(EXEEXT)
+wc-lock-tester: subversion/tests/libsvn_wc/wc-lock-tester$(EXEEXT)
+wc-queries-test: subversion/tests/libsvn_wc/wc-queries-test$(EXEEXT)
+wc-test: subversion/tests/libsvn_wc/wc-test$(EXEEXT)
+window-test: subversion/tests/libsvn_delta/window-test$(EXEEXT)
+x509-parser: tools/dev/x509-parser$(EXEEXT)
+x509-test: subversion/tests/libsvn_subr/x509-test$(EXEEXT)
+xml-test: subversion/tests/libsvn_subr/xml-test$(EXEEXT)
+
+########################################
+# Section 10: Rules to build all other kinds of object-like files
+########################################
+
+subversion/bindings/cxxhl/src/aprwrap/impl.lo: subversion/bindings/cxxhl/src/aprwrap/impl.cpp subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp subversion/bindings/cxxhl/include/svncxxhl/exception.hpp subversion/bindings/cxxhl/src/aprwrap/hash.hpp subversion/bindings/cxxhl/src/aprwrap/pool.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_CXXHL_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/src/aprwrap/impl.cpp
+
+subversion/bindings/cxxhl/src/exception.lo: subversion/bindings/cxxhl/src/exception.cpp subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp subversion/bindings/cxxhl/include/svncxxhl/exception.hpp subversion/bindings/cxxhl/src/aprwrap.hpp subversion/bindings/cxxhl/src/aprwrap/array.hpp subversion/bindings/cxxhl/src/aprwrap/hash.hpp subversion/bindings/cxxhl/src/aprwrap/pool.hpp subversion/bindings/cxxhl/src/private.hpp subversion/bindings/cxxhl/src/private/exception-private.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_error_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+ $(COMPILE_CXXHL_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/src/exception.cpp
+
+subversion/bindings/cxxhl/src/tristate.lo: subversion/bindings/cxxhl/src/tristate.cpp subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h
+ $(COMPILE_CXXHL_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/src/tristate.cpp
+
+subversion/bindings/cxxhl/tests/cxxhl-tests.lo: subversion/bindings/cxxhl/tests/cxxhl-tests.cpp
+ if $(SVN_USE_GOOGLEMOCK) ; then $(COMPILE_CXXHL_GOOGLEMOCK_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/tests/cxxhl-tests.cpp ; else echo "fake" > subversion/bindings/cxxhl/tests/cxxhl-tests.lo ; fi
+
+subversion/bindings/cxxhl/tests/test_aprwrap.lo: subversion/bindings/cxxhl/tests/test_aprwrap.cpp subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp subversion/bindings/cxxhl/include/svncxxhl/exception.hpp subversion/bindings/cxxhl/src/aprwrap.hpp subversion/bindings/cxxhl/src/aprwrap/array.hpp subversion/bindings/cxxhl/src/aprwrap/hash.hpp subversion/bindings/cxxhl/src/aprwrap/pool.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/svn_private_config.h
+ if $(SVN_USE_GOOGLEMOCK) ; then $(COMPILE_CXXHL_GOOGLEMOCK_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/tests/test_aprwrap.cpp ; else echo "fake" > subversion/bindings/cxxhl/tests/test_aprwrap.lo ; fi
+
+subversion/bindings/cxxhl/tests/test_exception.lo: subversion/bindings/cxxhl/tests/test_exception.cpp subversion/bindings/cxxhl/include/svncxxhl.hpp subversion/bindings/cxxhl/include/svncxxhl/_compat.hpp subversion/bindings/cxxhl/include/svncxxhl/exception.hpp subversion/bindings/cxxhl/include/svncxxhl/tristate.hpp subversion/bindings/cxxhl/src/private.hpp subversion/bindings/cxxhl/src/private/exception-private.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h
+ if $(SVN_USE_GOOGLEMOCK) ; then $(COMPILE_CXXHL_GOOGLEMOCK_CXX) $(canonicalized_srcdir)subversion/bindings/cxxhl/tests/test_exception.cpp ; else echo "fake" > subversion/bindings/cxxhl/tests/test_exception.lo ; fi
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/BasicTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientException.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientException.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientNotifyInformation.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ClientNotifyInformation.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitInfo.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItem.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItem.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItemStateFlags.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitItemStateFlags.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictDescriptor.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictDescriptor.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictResult.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ConflictResult.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/DiffSummary.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/DiffSummary.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ExceptionTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/ExceptionTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNClient.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNConfig.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNConfig.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNEditor.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNEditor.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRemote.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRemote.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNReporter.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNReporter.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRepos.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNRepos.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIError.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIError.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIObject.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/JNIObject.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeException.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeException.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeResources.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/NativeResources.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/OperationContext.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/OperationContext.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ProgressEvent.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ProgressEvent.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/ReposNotifyInformation.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/ReposNotifyInformation.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/RunTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNClient.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRemoteTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNRemoteTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRepos.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNRepos.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNReposTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNReposTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/SVNTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNUtil.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/SubversionException.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/SubversionException.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/UtilTests.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/WC.class: subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/AuthnCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/AuthnCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/BlameCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/BlameCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ChangelistCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ChangelistCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ClientNotifyCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ClientNotifyCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/CommitCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitMessageCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/CommitMessageCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConfigEvent.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ConfigEvent.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConflictResolverCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ConflictResolverCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/DiffSummaryCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/DiffSummaryCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ImportFilterCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ImportFilterCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InfoCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InfoCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InheritedProplistCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/InheritedProplistCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListItemCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ListItemCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/LogMessageCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/LogMessageCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/PatchCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/PatchCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProgressCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProgressCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProplistCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ProplistCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteStatus.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/RemoteStatus.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposFreezeAction.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposFreezeAction.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposNotifyCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposNotifyCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposVerifyCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/ReposVerifyCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/StatusCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/StatusCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/TunnelAgent.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/TunnelAgent.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/UserPasswordCallback.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/callback/UserPasswordCallback.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/CommitEditor.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/CommitEditor.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteFactory.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteFactory.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteSession.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RemoteSession.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RetryOpenSession.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/RetryOpenSession.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StateReporter.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StateReporter.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StatusEditor.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/remote/StatusEditor.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ChangePath.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ChangePath.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Checksum.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Checksum.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ConflictVersion.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ConflictVersion.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/CopySource.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/CopySource.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Depth.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Depth.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DiffOptions.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DiffOptions.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DirEntry.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/DirEntry.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ExternalItem.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/ExternalItem.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Info.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Lock.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Lock.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/LogDate.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/LogDate.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Mergeinfo.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Mergeinfo.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeInputStream.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NativeInputStream.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeOutputStream.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NativeOutputStream.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NodeKind.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/NodeKind.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Property.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Property.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Revision.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Revision.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRange.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRange.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRangeList.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RuntimeVersion.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RuntimeVersion.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Status.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Status.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Tristate.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Tristate.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Version.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Version.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/VersionExtended.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/types/VersionExtended.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigImpl.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ConfigImpl.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigLib.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ConfigLib.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/DiffLib.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/PropLib.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/PropLib.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/RequestChannel.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/RequestChannel.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ResponseChannel.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/ResponseChannel.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/SubstLib.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/SubstLib.java
+
+subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/TunnelChannel.class: subversion/bindings/javahl/src/org/apache/subversion/javahl/util/TunnelChannel.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BasicTests.class: subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback2.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback2.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallback3.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallback3.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/BlameCallbackImpl.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/BlameCallbackImpl.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ChangePath.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ChangePath.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ChangelistCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ChangelistCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ClientException.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ClientException.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitItem.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitItem.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitItemStateFlags.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitItemStateFlags.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CommitMessage.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/CommitMessage.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictDescriptor.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictDescriptor.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictResolverCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictResolverCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictResult.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictResult.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ConflictVersion.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ConflictVersion.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/CopySource.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/CopySource.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Depth.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Depth.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DiffSummary.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummary.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DiffSummaryReceiver.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/DiffSummaryReceiver.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/DirEntry.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/DirEntry.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ErrorCodes.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ErrorCodes.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Info.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Info2.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/InfoCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/InfoCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/InputInterface.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/InputInterface.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ListCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ListCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Lock.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Lock.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LockStatus.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/LockStatus.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogDate.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogDate.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogMessage.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogMessage.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/LogMessageCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/LogMessageCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Mergeinfo.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/MergeinfoLogKind.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/MergeinfoLogKind.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NativeException.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/NativeException.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NodeKind.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/NodeKind.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Notify.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Notify.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Notify2.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Notify2.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyAction.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyAction.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyInformation.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyInformation.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/NotifyStatus.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/NotifyStatus.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Operation.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Operation.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/OutputInterface.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/OutputInterface.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Path.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Path.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProgressEvent.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProgressEvent.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProgressListener.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProgressListener.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword2.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword2.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PromptUserPassword3.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/PromptUserPassword3.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/PropertyData.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/PropertyData.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProplistCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProplistCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ProplistCallbackImpl.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ProplistCallbackImpl.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Revision.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Revision.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RevisionKind.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/RevisionKind.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RevisionRange.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/RevisionRange.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/RunTests.class: subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNAdmin.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNAdminTests.class: subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNAdminTests.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClient.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientInterface.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientLogLevel.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientLogLevel.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNClientSynchronized.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNInputStream.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNInputStream.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNOutputStream.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNOutputStream.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SVNTests.class: subversion/bindings/javahl/tests/org/tigris/subversion/javahl/SVNTests.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/ScheduleKind.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ScheduleKind.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Status.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Status.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/StatusCallback.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/StatusCallback.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/StatusKind.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/StatusKind.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/SubversionException.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SubversionException.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/Version.class: subversion/bindings/javahl/src/org/tigris/subversion/javahl/Version.java
+
+subversion/bindings/javahl/classes/org/tigris/subversion/javahl/WC.class: subversion/bindings/javahl/tests/org/tigris/subversion/javahl/WC.java
+
+subversion/bindings/javahl/include/AuthnCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/AuthnCallback.class
+
+subversion/bindings/javahl/include/BlameCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/BlameCallback.class
+
+subversion/bindings/javahl/include/ChangePath.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ChangePath.class
+
+subversion/bindings/javahl/include/ChangelistCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ChangelistCallback.class
+
+subversion/bindings/javahl/include/Checksum.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Checksum.class
+
+subversion/bindings/javahl/include/ClientException.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientException.class
+
+subversion/bindings/javahl/include/ClientNotifyCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ClientNotifyCallback.class
+
+subversion/bindings/javahl/include/ClientNotifyInformation.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ClientNotifyInformation.class
+
+subversion/bindings/javahl/include/CommitCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitCallback.class
+
+subversion/bindings/javahl/include/CommitEditor.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/CommitEditor.class
+
+subversion/bindings/javahl/include/CommitInfo.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitInfo.class
+
+subversion/bindings/javahl/include/CommitItem.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItem.class
+
+subversion/bindings/javahl/include/CommitItemStateFlags.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/CommitItemStateFlags.class
+
+subversion/bindings/javahl/include/CommitMessageCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/CommitMessageCallback.class
+
+subversion/bindings/javahl/include/ConfigEvent.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConfigEvent.class
+
+subversion/bindings/javahl/include/ConfigImpl.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigImpl.class
+
+subversion/bindings/javahl/include/ConfigLib.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ConfigLib.class
+
+subversion/bindings/javahl/include/ConflictDescriptor.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictDescriptor.class
+
+subversion/bindings/javahl/include/ConflictResolverCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ConflictResolverCallback.class
+
+subversion/bindings/javahl/include/ConflictResult.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ConflictResult.class
+
+subversion/bindings/javahl/include/ConflictVersion.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ConflictVersion.class
+
+subversion/bindings/javahl/include/CopySource.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/CopySource.class
+
+subversion/bindings/javahl/include/Depth.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Depth.class
+
+subversion/bindings/javahl/include/DiffLib.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/DiffLib.class
+
+subversion/bindings/javahl/include/DiffOptions.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DiffOptions.class
+
+subversion/bindings/javahl/include/DiffSummary.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/DiffSummary.class
+
+subversion/bindings/javahl/include/DiffSummaryCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/DiffSummaryCallback.class
+
+subversion/bindings/javahl/include/DirEntry.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/DirEntry.class
+
+subversion/bindings/javahl/include/ExternalItem.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/ExternalItem.class
+
+subversion/bindings/javahl/include/ISVNClient.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNClient.class
+
+subversion/bindings/javahl/include/ISVNConfig.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNConfig.class
+
+subversion/bindings/javahl/include/ISVNEditor.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNEditor.class
+
+subversion/bindings/javahl/include/ISVNRemote.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRemote.class
+
+subversion/bindings/javahl/include/ISVNReporter.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNReporter.class
+
+subversion/bindings/javahl/include/ISVNRepos.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ISVNRepos.class
+
+subversion/bindings/javahl/include/ImportFilterCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ImportFilterCallback.class
+
+subversion/bindings/javahl/include/Info.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Info.class
+
+subversion/bindings/javahl/include/InfoCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InfoCallback.class
+
+subversion/bindings/javahl/include/InheritedProplistCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/InheritedProplistCallback.class
+
+subversion/bindings/javahl/include/JNIError.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIError.class
+
+subversion/bindings/javahl/include/JNIObject.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/JNIObject.class
+
+subversion/bindings/javahl/include/ListCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListCallback.class
+
+subversion/bindings/javahl/include/ListItemCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ListItemCallback.class
+
+subversion/bindings/javahl/include/Lock.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Lock.class
+
+subversion/bindings/javahl/include/LogDate.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/LogDate.class
+
+subversion/bindings/javahl/include/LogMessageCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/LogMessageCallback.class
+
+subversion/bindings/javahl/include/Mergeinfo.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Mergeinfo.class
+
+subversion/bindings/javahl/include/NativeException.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeException.class
+
+subversion/bindings/javahl/include/NativeInputStream.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeInputStream.class
+
+subversion/bindings/javahl/include/NativeOutputStream.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NativeOutputStream.class
+
+subversion/bindings/javahl/include/NativeResources.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/NativeResources.class
+
+subversion/bindings/javahl/include/NodeKind.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/NodeKind.class
+
+subversion/bindings/javahl/include/OperationContext.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/OperationContext.class
+
+subversion/bindings/javahl/include/PatchCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/PatchCallback.class
+
+subversion/bindings/javahl/include/ProgressCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProgressCallback.class
+
+subversion/bindings/javahl/include/ProgressEvent.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ProgressEvent.class
+
+subversion/bindings/javahl/include/PropLib.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/PropLib.class
+
+subversion/bindings/javahl/include/Property.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Property.class
+
+subversion/bindings/javahl/include/ProplistCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ProplistCallback.class
+
+subversion/bindings/javahl/include/RemoteFactory.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteFactory.class
+
+subversion/bindings/javahl/include/RemoteFileRevisionsCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteFileRevisionsCallback.class
+
+subversion/bindings/javahl/include/RemoteLocationSegmentsCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteLocationSegmentsCallback.class
+
+subversion/bindings/javahl/include/RemoteSession.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RemoteSession.class
+
+subversion/bindings/javahl/include/RemoteStatus.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/RemoteStatus.class
+
+subversion/bindings/javahl/include/ReposFreezeAction.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposFreezeAction.class
+
+subversion/bindings/javahl/include/ReposNotifyCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposNotifyCallback.class
+
+subversion/bindings/javahl/include/ReposNotifyInformation.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/ReposNotifyInformation.class
+
+subversion/bindings/javahl/include/ReposVerifyCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/ReposVerifyCallback.class
+
+subversion/bindings/javahl/include/RequestChannel.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/RequestChannel.class
+
+subversion/bindings/javahl/include/ResponseChannel.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/ResponseChannel.class
+
+subversion/bindings/javahl/include/RetryOpenSession.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/RetryOpenSession.class
+
+subversion/bindings/javahl/include/Revision.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Revision.class
+
+subversion/bindings/javahl/include/RevisionRange.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRange.class
+
+subversion/bindings/javahl/include/RevisionRangeList.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RevisionRangeList.class
+
+subversion/bindings/javahl/include/RuntimeVersion.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/RuntimeVersion.class
+
+subversion/bindings/javahl/include/SVNClient.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNClient.class
+
+subversion/bindings/javahl/include/SVNRepos.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNRepos.class
+
+subversion/bindings/javahl/include/SVNUtil.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/SVNUtil.class
+
+subversion/bindings/javahl/include/StateReporter.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StateReporter.class
+
+subversion/bindings/javahl/include/Status.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Status.class
+
+subversion/bindings/javahl/include/StatusCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/StatusCallback.class
+
+subversion/bindings/javahl/include/StatusEditor.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/remote/StatusEditor.class
+
+subversion/bindings/javahl/include/SubstLib.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/SubstLib.class
+
+subversion/bindings/javahl/include/SubversionException.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/SubversionException.class
+
+subversion/bindings/javahl/include/Tristate.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Tristate.class
+
+subversion/bindings/javahl/include/TunnelAgent.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/TunnelAgent.class
+
+subversion/bindings/javahl/include/TunnelChannel.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/util/TunnelChannel.class
+
+subversion/bindings/javahl/include/UserPasswordCallback.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/callback/UserPasswordCallback.class
+
+subversion/bindings/javahl/include/Version.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/Version.class
+
+subversion/bindings/javahl/include/VersionExtended.h: subversion/bindings/javahl/classes/org/apache/subversion/javahl/types/VersionExtended.class
+
+subversion/bindings/javahl/native/Array.lo: subversion/bindings/javahl/native/Array.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Array.cpp
+
+subversion/bindings/javahl/native/AuthnCallback.lo: subversion/bindings/javahl/native/AuthnCallback.cpp subversion/bindings/javahl/native/AuthnCallback.hpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_x509.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/AuthnCallback.cpp
+
+subversion/bindings/javahl/native/BlameCallback.lo: subversion/bindings/javahl/native/BlameCallback.cpp subversion/bindings/javahl/native/BlameCallback.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/BlameCallback.cpp
+
+subversion/bindings/javahl/native/ChangelistCallback.lo: subversion/bindings/javahl/native/ChangelistCallback.cpp subversion/bindings/javahl/native/ChangelistCallback.h subversion/bindings/javahl/native/ClientContext.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNClient.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ChangelistCallback.cpp
+
+subversion/bindings/javahl/native/ClientContext.lo: subversion/bindings/javahl/native/ClientContext.cpp subversion/bindings/javahl/native/ClientContext.h subversion/bindings/javahl/native/CommitMessage.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ClientContext.cpp
+
+subversion/bindings/javahl/native/CommitCallback.lo: subversion/bindings/javahl/native/CommitCallback.cpp subversion/bindings/javahl/native/CommitCallback.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/CommitCallback.cpp
+
+subversion/bindings/javahl/native/CommitEditor.lo: subversion/bindings/javahl/native/CommitEditor.cpp subversion/bindings/javahl/native/CommitCallback.h subversion/bindings/javahl/native/CommitEditor.h subversion/bindings/javahl/native/EditorCallbacks.hpp subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/InputStream.h subversion/bindings/javahl/native/Iterator.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/LockTokenTable.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/PropertyTable.h subversion/bindings/javahl/native/RemoteSession.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/CommitEditor.cpp
+
+subversion/bindings/javahl/native/CommitMessage.lo: subversion/bindings/javahl/native/CommitMessage.cpp subversion/bindings/javahl/native/CommitMessage.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/CommitMessage.cpp
+
+subversion/bindings/javahl/native/CopySources.lo: subversion/bindings/javahl/native/CopySources.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/CopySources.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Revision.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/CopySources.cpp
+
+subversion/bindings/javahl/native/CreateJ.lo: subversion/bindings/javahl/native/CreateJ.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_CommitItemStateFlags.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Revision.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/RevisionRange.h subversion/bindings/javahl/native/RevisionRangeList.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/CreateJ.cpp
+
+subversion/bindings/javahl/native/Credential.lo: subversion/bindings/javahl/native/Credential.cpp subversion/bindings/javahl/native/AuthnCallback.hpp subversion/bindings/javahl/native/Credential.hpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Credential.cpp
+
+subversion/bindings/javahl/native/DiffOptions.lo: subversion/bindings/javahl/native/DiffOptions.cpp subversion/bindings/javahl/native/DiffOptions.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/DiffOptions.cpp
+
+subversion/bindings/javahl/native/DiffSummaryReceiver.lo: subversion/bindings/javahl/native/DiffSummaryReceiver.cpp subversion/bindings/javahl/native/DiffSummaryReceiver.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/DiffSummaryReceiver.cpp
+
+subversion/bindings/javahl/native/EditorCallbacks.lo: subversion/bindings/javahl/native/EditorCallbacks.cpp subversion/bindings/javahl/native/EditorCallbacks.hpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Utility.hpp subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/EditorCallbacks.cpp
+
+subversion/bindings/javahl/native/EditorProxy.lo: subversion/bindings/javahl/native/EditorProxy.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EditorProxy.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/NativeStream.hpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/EditorProxy.cpp
+
+subversion/bindings/javahl/native/EnumMapper.lo: subversion/bindings/javahl/native/EnumMapper.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_CommitItemStateFlags.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/EnumMapper.cpp
+
+subversion/bindings/javahl/native/ExternalItem.lo: subversion/bindings/javahl/native/ExternalItem.cpp subversion/bindings/javahl/native/ExternalItem.hpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ExternalItem.cpp
+
+subversion/bindings/javahl/native/File.lo: subversion/bindings/javahl/native/File.cpp subversion/bindings/javahl/native/File.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/File.cpp
+
+subversion/bindings/javahl/native/ImportFilterCallback.lo: subversion/bindings/javahl/native/ImportFilterCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/ImportFilterCallback.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ImportFilterCallback.cpp
+
+subversion/bindings/javahl/native/InfoCallback.lo: subversion/bindings/javahl/native/InfoCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/InfoCallback.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/InfoCallback.cpp
+
+subversion/bindings/javahl/native/InputStream.lo: subversion/bindings/javahl/native/InputStream.cpp subversion/bindings/javahl/native/InputStream.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/InputStream.cpp
+
+subversion/bindings/javahl/native/Iterator.lo: subversion/bindings/javahl/native/Iterator.cpp subversion/bindings/javahl/native/Iterator.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Iterator.cpp
+
+subversion/bindings/javahl/native/JNIByteArray.lo: subversion/bindings/javahl/native/JNIByteArray.cpp subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNIByteArray.cpp
+
+subversion/bindings/javahl/native/JNICriticalSection.lo: subversion/bindings/javahl/native/JNICriticalSection.cpp subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIMutex.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNICriticalSection.cpp
+
+subversion/bindings/javahl/native/JNIMutex.lo: subversion/bindings/javahl/native/JNIMutex.cpp subversion/bindings/javahl/native/JNIMutex.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNIMutex.cpp
+
+subversion/bindings/javahl/native/JNIStackElement.lo: subversion/bindings/javahl/native/JNIStackElement.cpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNIStackElement.cpp
+
+subversion/bindings/javahl/native/JNIStringHolder.lo: subversion/bindings/javahl/native/JNIStringHolder.cpp subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNIStringHolder.cpp
+
+subversion/bindings/javahl/native/JNIUtil.lo: subversion/bindings/javahl/native/JNIUtil.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIMutex.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/JNIUtil.cpp
+
+subversion/bindings/javahl/native/ListCallback.lo: subversion/bindings/javahl/native/ListCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/ListCallback.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ListCallback.cpp
+
+subversion/bindings/javahl/native/LockTokenTable.lo: subversion/bindings/javahl/native/LockTokenTable.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/LockTokenTable.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/LockTokenTable.cpp
+
+subversion/bindings/javahl/native/LogMessageCallback.lo: subversion/bindings/javahl/native/LogMessageCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/LogMessageCallback.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/LogMessageCallback.cpp
+
+subversion/bindings/javahl/native/MessageReceiver.lo: subversion/bindings/javahl/native/MessageReceiver.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/MessageReceiver.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/MessageReceiver.cpp
+
+subversion/bindings/javahl/native/NativeStream.lo: subversion/bindings/javahl/native/NativeStream.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_types_NativeInputStream.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_NativeOutputStream.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/NativeStream.hpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/NativeStream.cpp
+
+subversion/bindings/javahl/native/OperationContext.lo: subversion/bindings/javahl/native/OperationContext.cpp subversion/bindings/javahl/native/CommitMessage.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/GlobalConfig.h subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/OperationContext.cpp
+
+subversion/bindings/javahl/native/OutputStream.lo: subversion/bindings/javahl/native/OutputStream.cpp subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/OutputStream.cpp
+
+subversion/bindings/javahl/native/PatchCallback.lo: subversion/bindings/javahl/native/PatchCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/PatchCallback.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/PatchCallback.cpp
+
+subversion/bindings/javahl/native/Path.lo: subversion/bindings/javahl/native/Path.cpp subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Path.cpp
+
+subversion/bindings/javahl/native/Pool.lo: subversion/bindings/javahl/native/Pool.cpp subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIMutex.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Pool.cpp
+
+subversion/bindings/javahl/native/Prompter.lo: subversion/bindings/javahl/native/Prompter.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_UserPasswordCallback.h subversion/bindings/javahl/native/AuthnCallback.hpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Prompter.cpp
+
+subversion/bindings/javahl/native/PropertyTable.lo: subversion/bindings/javahl/native/PropertyTable.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/PropertyTable.h subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/PropertyTable.cpp
+
+subversion/bindings/javahl/native/ProplistCallback.lo: subversion/bindings/javahl/native/ProplistCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ProplistCallback.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ProplistCallback.cpp
+
+subversion/bindings/javahl/native/RemoteSession.lo: subversion/bindings/javahl/native/RemoteSession.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EditorProxy.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/Iterator.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/LogMessageCallback.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/RemoteSession.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/StateReporter.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/RemoteSession.cpp
+
+subversion/bindings/javahl/native/RemoteSessionContext.lo: subversion/bindings/javahl/native/RemoteSessionContext.cpp subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/RemoteSessionContext.cpp
+
+subversion/bindings/javahl/native/ReposFreezeAction.lo: subversion/bindings/javahl/native/ReposFreezeAction.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ReposFreezeAction.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ReposFreezeAction.cpp
+
+subversion/bindings/javahl/native/ReposNotifyCallback.lo: subversion/bindings/javahl/native/ReposNotifyCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ReposNotifyCallback.h subversion/bindings/javahl/native/RevisionRange.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ReposNotifyCallback.cpp
+
+subversion/bindings/javahl/native/ReposVerifyCallback.lo: subversion/bindings/javahl/native/ReposVerifyCallback.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ReposVerifyCallback.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/ReposVerifyCallback.cpp
+
+subversion/bindings/javahl/native/Revision.lo: subversion/bindings/javahl/native/Revision.cpp subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Revision.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Revision.cpp
+
+subversion/bindings/javahl/native/RevisionRange.lo: subversion/bindings/javahl/native/RevisionRange.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/RevisionRange.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/RevisionRange.cpp
+
+subversion/bindings/javahl/native/RevisionRangeList.lo: subversion/bindings/javahl/native/RevisionRangeList.cpp subversion/bindings/javahl/native/Iterator.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/RevisionRange.h subversion/bindings/javahl/native/RevisionRangeList.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/RevisionRangeList.cpp
+
+subversion/bindings/javahl/native/SVNBase.lo: subversion/bindings/javahl/native/SVNBase.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/SVNBase.cpp
+
+subversion/bindings/javahl/native/SVNClient.lo: subversion/bindings/javahl/native/SVNClient.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/BlameCallback.h subversion/bindings/javahl/native/ChangelistCallback.h subversion/bindings/javahl/native/ClientContext.h subversion/bindings/javahl/native/CommitCallback.h subversion/bindings/javahl/native/CommitMessage.h subversion/bindings/javahl/native/CopySources.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/DiffOptions.h subversion/bindings/javahl/native/DiffSummaryReceiver.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/ExternalItem.hpp subversion/bindings/javahl/native/ImportFilterCallback.h subversion/bindings/javahl/native/InfoCallback.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/ListCallback.h subversion/bindings/javahl/native/LogMessageCallback.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/PatchCallback.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/PropertyTable.h subversion/bindings/javahl/native/ProplistCallback.h subversion/bindings/javahl/native/RemoteSession.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/RevisionRange.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNClient.h subversion/bindings/javahl/native/StatusCallback.h subversion/bindings/javahl/native/StringArray.h subversion/bindings/javahl/native/Targets.h subversion/bindings/javahl/native/VersionExtended.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/SVNClient.cpp
+
+subversion/bindings/javahl/native/SVNRepos.lo: subversion/bindings/javahl/native/SVNRepos.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/File.h subversion/bindings/javahl/native/InputStream.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/MessageReceiver.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ReposFreezeAction.h subversion/bindings/javahl/native/ReposNotifyCallback.h subversion/bindings/javahl/native/ReposVerifyCallback.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNRepos.h subversion/bindings/javahl/native/StringArray.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/SVNRepos.cpp
+
+subversion/bindings/javahl/native/StateReporter.lo: subversion/bindings/javahl/native/StateReporter.cpp subversion/bindings/javahl/native/EditorProxy.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/StateReporter.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/StateReporter.cpp
+
+subversion/bindings/javahl/native/StatusCallback.lo: subversion/bindings/javahl/native/StatusCallback.cpp subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/StatusCallback.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/StatusCallback.cpp
+
+subversion/bindings/javahl/native/StringArray.lo: subversion/bindings/javahl/native/StringArray.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/StringArray.h subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/StringArray.cpp
+
+subversion/bindings/javahl/native/SubversionException.lo: subversion/bindings/javahl/native/SubversionException.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SubversionException.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/SubversionException.cpp
+
+subversion/bindings/javahl/native/Targets.lo: subversion/bindings/javahl/native/Targets.cpp subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/StringArray.h subversion/bindings/javahl/native/Targets.h subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Targets.cpp
+
+subversion/bindings/javahl/native/Utility.lo: subversion/bindings/javahl/native/Utility.cpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Utility.hpp subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/Utility.cpp
+
+subversion/bindings/javahl/native/VersionExtended.lo: subversion/bindings/javahl/native/VersionExtended.cpp subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/VersionExtended.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/include/svn_version.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/VersionExtended.cpp
+
+subversion/bindings/javahl/native/deprecated.lo: subversion/bindings/javahl/native/deprecated.cpp subversion/bindings/javahl/native/ClientContext.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNClient.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/deprecated.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_base.lo: subversion/bindings/javahl/native/jniwrapper/jni_base.cpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_base.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_channel.lo: subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_channel.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_class_cache.lo: subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp subversion/bindings/javahl/native/AuthnCallback.hpp subversion/bindings/javahl/native/Credential.hpp subversion/bindings/javahl/native/EditorCallbacks.hpp subversion/bindings/javahl/native/ExternalItem.hpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SubversionException.hpp subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_io_stream.lo: subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_io_stream.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_iterator.lo: subversion/bindings/javahl/native/jniwrapper/jni_iterator.cpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_iterator.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_list.lo: subversion/bindings/javahl/native/jniwrapper/jni_list.cpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_list.cpp
+
+subversion/bindings/javahl/native/jniwrapper/jni_string_map.lo: subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/jniwrapper/jni_string_map.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_NativeResources.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_NativeResources.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_SVNClient.h subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/BlameCallback.h subversion/bindings/javahl/native/ChangelistCallback.h subversion/bindings/javahl/native/ClientContext.h subversion/bindings/javahl/native/CommitCallback.h subversion/bindings/javahl/native/CommitMessage.h subversion/bindings/javahl/native/CopySources.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/DiffOptions.h subversion/bindings/javahl/native/DiffSummaryReceiver.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/ImportFilterCallback.h subversion/bindings/javahl/native/InfoCallback.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/ListCallback.h subversion/bindings/javahl/native/LogMessageCallback.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/PatchCallback.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/PropertyTable.h subversion/bindings/javahl/native/ProplistCallback.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/RevisionRange.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNClient.h subversion/bindings/javahl/native/StatusCallback.h subversion/bindings/javahl/native/StringArray.h subversion/bindings/javahl/native/Targets.h subversion/bindings/javahl/native/VersionExtended.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/version.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_SVNRepos.h subversion/bindings/javahl/native/Array.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/File.h subversion/bindings/javahl/native/InputStream.h subversion/bindings/javahl/native/JNIByteArray.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/MessageReceiver.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/ReposFreezeAction.h subversion/bindings/javahl/native/ReposNotifyCallback.h subversion/bindings/javahl/native/ReposVerifyCallback.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/SVNRepos.h subversion/bindings/javahl/native/StringArray.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNRepos.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_CommitEditor.h subversion/bindings/javahl/native/CommitCallback.h subversion/bindings/javahl/native/CommitEditor.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_CommitEditor.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteFactory.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/RemoteSession.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteFactory.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteSession.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/Prompter.h subversion/bindings/javahl/native/RemoteSession.h subversion/bindings/javahl/native/RemoteSessionContext.h subversion/bindings/javahl/native/Revision.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_RemoteSession.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_StateReporter.h subversion/bindings/javahl/native/EditorProxy.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/StateReporter.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_remote_StateReporter.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RevisionRangeList.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/RevisionRangeList.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RuntimeVersion.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RuntimeVersion.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RuntimeVersion.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RuntimeVersion.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_types_Version.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_types_Version.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Version.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/include/svn_version.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_types_Version.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LinkedLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LinkedLibIterator.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLib.h subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLibIterator.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/VersionExtended.h subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_types_VersionExtended.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ConfigImpl_Category.h subversion/bindings/javahl/native/CreateJ.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OperationContext.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigLib.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigLib.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ConfigLib.h subversion/bindings/javahl/native/AuthnCallback.hpp subversion/bindings/javahl/native/Credential.hpp subversion/bindings/javahl/native/GlobalConfig.h subversion/bindings/javahl/native/JNICriticalSection.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SubversionException.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_x509.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigLib.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_DiffLib.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIStringHolder.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/OutputStream.h subversion/bindings/javahl/native/Path.h subversion/bindings/javahl/native/Pool.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_PropLib.h subversion/bindings/javahl/native/EnumMapper.h subversion/bindings/javahl/native/ExternalItem.hpp subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SubversionException.hpp subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_list.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_PropLib.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_SubstLib.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/NativeStream.hpp subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/SVNBase.h subversion/bindings/javahl/native/Utility.hpp subversion/bindings/javahl/native/jniwrapper/jni_array.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_io_stream.hpp subversion/bindings/javahl/native/jniwrapper/jni_iterator.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/bindings/javahl/native/jniwrapper/jni_string.hpp subversion/bindings/javahl/native/jniwrapper/jni_string_map.hpp subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_SubstLib.cpp
+
+subversion/bindings/javahl/native/org_apache_subversion_javahl_util_TunnelChannel.lo: subversion/bindings/javahl/native/org_apache_subversion_javahl_util_TunnelChannel.cpp subversion/bindings/javahl/include/org_apache_subversion_javahl_util_RequestChannel.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_ResponseChannel.h subversion/bindings/javahl/include/org_apache_subversion_javahl_util_TunnelChannel.h subversion/bindings/javahl/native/JNIStackElement.h subversion/bindings/javahl/native/JNIUtil.h subversion/bindings/javahl/native/Pool.h subversion/bindings/javahl/native/jniwrapper/jni_channel.hpp subversion/bindings/javahl/native/jniwrapper/jni_env.hpp subversion/bindings/javahl/native/jniwrapper/jni_exception.hpp subversion/bindings/javahl/native/jniwrapper/jni_globalref.hpp subversion/bindings/javahl/native/jniwrapper/jni_object.hpp subversion/bindings/javahl/native/jniwrapper/jni_stack.hpp subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/svn_private_config.h
+ $(COMPILE_JAVAHL_CXX) $(canonicalized_srcdir)subversion/bindings/javahl/native/org_apache_subversion_javahl_util_TunnelChannel.cpp
+
+subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.lo: subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl__pre_perl.h subversion/bindings/swig/proxy/swig_perl_external_runtime.swg subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_SWIG_PL) $(canonicalized_srcdir)subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
+
+subversion/bindings/swig/perl/native/core.lo: subversion/bindings/swig/perl/native/core.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/core.c
+
+subversion/bindings/swig/perl/native/svn_client.lo: subversion/bindings/swig/perl/native/svn_client.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_client.c
+
+subversion/bindings/swig/perl/native/svn_delta.lo: subversion/bindings/swig/perl/native/svn_delta.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_delta.c
+
+subversion/bindings/swig/perl/native/svn_diff.lo: subversion/bindings/swig/perl/native/svn_diff.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_diff.c
+
+subversion/bindings/swig/perl/native/svn_fs.lo: subversion/bindings/swig/perl/native/svn_fs.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_fs.c
+
+subversion/bindings/swig/perl/native/svn_ra.lo: subversion/bindings/swig/perl/native/svn_ra.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_ra.c
+
+subversion/bindings/swig/perl/native/svn_repos.lo: subversion/bindings/swig/perl/native/svn_repos.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_repos.c
+
+subversion/bindings/swig/perl/native/svn_wc.lo: subversion/bindings/swig/perl/native/svn_wc.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_PL_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/perl/native/svn_wc.c
+
+subversion/bindings/swig/python/core.lo: subversion/bindings/swig/python/core.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/core.c
+
+subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.lo: subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c subversion/bindings/swig/proxy/swig_python_external_runtime.swg subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_SWIG_PY) $(canonicalized_srcdir)subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
+
+subversion/bindings/swig/python/svn_client.lo: subversion/bindings/swig/python/svn_client.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_client.c
+
+subversion/bindings/swig/python/svn_delta.lo: subversion/bindings/swig/python/svn_delta.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_delta.c
+
+subversion/bindings/swig/python/svn_diff.lo: subversion/bindings/swig/python/svn_diff.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_diff.c
+
+subversion/bindings/swig/python/svn_fs.lo: subversion/bindings/swig/python/svn_fs.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_fs.c
+
+subversion/bindings/swig/python/svn_ra.lo: subversion/bindings/swig/python/svn_ra.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_ra.c
+
+subversion/bindings/swig/python/svn_repos.lo: subversion/bindings/swig/python/svn_repos.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_repos.c
+
+subversion/bindings/swig/python/svn_wc.lo: subversion/bindings/swig/python/svn_wc.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_PY_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/python/svn_wc.c
+
+subversion/bindings/swig/ruby/core.lo: subversion/bindings/swig/ruby/core.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/core.c
+
+subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.lo: subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c subversion/bindings/swig/proxy/swig_ruby_external_runtime.swg subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_nls.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_SWIG_RB) $(canonicalized_srcdir)subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c
+
+subversion/bindings/swig/ruby/svn_client.lo: subversion/bindings/swig/ruby/svn_client.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_client.c
+
+subversion/bindings/swig/ruby/svn_delta.lo: subversion/bindings/swig/ruby/svn_delta.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_delta.c
+
+subversion/bindings/swig/ruby/svn_diff.lo: subversion/bindings/swig/ruby/svn_diff.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_delta.h subversion/include/svn_fs.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_diff.c
+
+subversion/bindings/swig/ruby/svn_fs.lo: subversion/bindings/swig/ruby/svn_fs.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_fs.c
+
+subversion/bindings/swig/ruby/svn_ra.lo: subversion/bindings/swig/ruby/svn_ra.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_ra.c
+
+subversion/bindings/swig/ruby/svn_repos.lo: subversion/bindings/swig/ruby/svn_repos.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_ra.h subversion/include/svn_wc.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_repos.c
+
+subversion/bindings/swig/ruby/svn_wc.lo: subversion/bindings/swig/ruby/svn_wc.c subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.h subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb__pre_ruby.h subversion/include/svn_client.h subversion/include/svn_fs.h subversion/include/svn_repos.h subversion/svn_private_config.h
+ $(COMPILE_RB_WRAPPER) $(canonicalized_srcdir)subversion/bindings/swig/ruby/svn_wc.c
+
+subversion/libsvn_auth_gnome_keyring/gnome_keyring.lo: subversion/libsvn_auth_gnome_keyring/gnome_keyring.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/svn_private_config.h
+ $(COMPILE_SHARED_ONLY_LIB) $(canonicalized_srcdir)subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
+
+subversion/libsvn_auth_gnome_keyring/version.lo: subversion/libsvn_auth_gnome_keyring/version.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h
+ $(COMPILE_SHARED_ONLY_LIB) $(canonicalized_srcdir)subversion/libsvn_auth_gnome_keyring/version.c
+
+subversion/libsvn_auth_kwallet/kwallet.lo: subversion/libsvn_auth_kwallet/kwallet.cpp subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/svn_private_config.h
+ $(COMPILE_SHARED_ONLY_CXX_LIB) $(canonicalized_srcdir)subversion/libsvn_auth_kwallet/kwallet.cpp
+
+subversion/libsvn_auth_kwallet/version.lo: subversion/libsvn_auth_kwallet/version.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h
+ $(COMPILE_SHARED_ONLY_CXX_LIB) $(canonicalized_srcdir)subversion/libsvn_auth_kwallet/version.c
+
+subversion/libsvn_client/add.lo: subversion/libsvn_client/add.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/blame.lo: subversion/libsvn_client/blame.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/cat.lo: subversion/libsvn_client/cat.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/changelist.lo: subversion/libsvn_client/changelist.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/checkout.lo: subversion/libsvn_client/checkout.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/cleanup.lo: subversion/libsvn_client/cleanup.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/cmdline.lo: subversion/libsvn_client/cmdline.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_opt_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/commit.lo: subversion/libsvn_client/commit.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/commit_util.lo: subversion/libsvn_client/commit_util.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/compat_providers.lo: subversion/libsvn_client/compat_providers.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h
+
+subversion/libsvn_client/conflicts.lo: subversion/libsvn_client/conflicts.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/copy.lo: subversion/libsvn_client/copy.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_client/copy_foreign.lo: subversion/libsvn_client/copy_foreign.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/ctx.lo: subversion/libsvn_client/ctx.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h
+
+subversion/libsvn_client/delete.lo: subversion/libsvn_client/delete.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/deprecated.lo: subversion/libsvn_client/deprecated.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_client/diff.lo: subversion/libsvn_client/diff.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_io_private.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/diff_local.lo: subversion/libsvn_client/diff_local.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/diff_summarize.lo: subversion/libsvn_client/diff_summarize.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h
+
+subversion/libsvn_client/export.lo: subversion/libsvn_client/export.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/externals.lo: subversion/libsvn_client/externals.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/import.lo: subversion/libsvn_client/import.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/info.lo: subversion/libsvn_client/info.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/iprops.lo: subversion/libsvn_client/iprops.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/list.lo: subversion/libsvn_client/list.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/locking_commands.lo: subversion/libsvn_client/locking_commands.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/log.lo: subversion/libsvn_client/log.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/merge.lo: subversion/libsvn_client/merge.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_magic.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_client/merge_elements.lo: subversion/libsvn_client/merge_elements.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_element.h subversion/include/private/svn_magic.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/mergeinfo.lo: subversion/libsvn_client/mergeinfo.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_magic.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_client/mtcc.lo: subversion/libsvn_client/mtcc.c subversion/include/private/svn_client_mtcc.h subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/patch.lo: subversion/libsvn_client/patch.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/prop_commands.lo: subversion/libsvn_client/prop_commands.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/ra.lo: subversion/libsvn_client/ra.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_client/relocate.lo: subversion/libsvn_client/relocate.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/repos_diff.lo: subversion/libsvn_client/repos_diff.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/resolved.lo: subversion/libsvn_client/resolved.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/revert.lo: subversion/libsvn_client/revert.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/revisions.lo: subversion/libsvn_client/revisions.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/shelve.lo: subversion/libsvn_client/shelve.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/status.lo: subversion/libsvn_client/status.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/switch.lo: subversion/libsvn_client/switch.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/update.lo: subversion/libsvn_client/update.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/upgrade.lo: subversion/libsvn_client/upgrade.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/url.lo: subversion/libsvn_client/url.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/util.lo: subversion/libsvn_client/util.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_magic.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/svn_private_config.h
+
+subversion/libsvn_client/version.lo: subversion/libsvn_client/version.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h
+
+subversion/libsvn_delta/branch.lo: subversion/libsvn_delta/branch.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_impl.h subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/branch_compat.lo: subversion/libsvn_delta/branch_compat.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_branch_impl.h subversion/include/private/svn_branch_nested.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_element.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/branch_migrate.lo: subversion/libsvn_delta/branch_migrate.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/branch_nested.lo: subversion/libsvn_delta/branch_nested.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_impl.h subversion/include/private/svn_branch_nested.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/branch_repos.lo: subversion/libsvn_delta/branch_repos.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/cancel.lo: subversion/libsvn_delta/cancel.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/compat.lo: subversion/libsvn_delta/compat.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/compose_delta.lo: subversion/libsvn_delta/compose_delta.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h
+
+subversion/libsvn_delta/debug_editor.lo: subversion/libsvn_delta/debug_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/default_editor.lo: subversion/libsvn_delta/default_editor.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/deprecated.lo: subversion/libsvn_delta/deprecated.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/depth_filter_editor.lo: subversion/libsvn_delta/depth_filter_editor.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/editor.lo: subversion/libsvn_delta/editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/element.lo: subversion/libsvn_delta/element.c subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/private/svn_sorts_private.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_iter.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/path_driver.lo: subversion/libsvn_delta/path_driver.c subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_delta/svndiff.lo: subversion/libsvn_delta/svndiff.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_error_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h subversion/svn_private_config.h
+
+subversion/libsvn_delta/text_delta.lo: subversion/libsvn_delta/text_delta.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h
+
+subversion/libsvn_delta/version.lo: subversion/libsvn_delta/version.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h
+
+subversion/libsvn_delta/xdelta.lo: subversion/libsvn_delta/xdelta.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h
+
+subversion/libsvn_diff/binary_diff.lo: subversion/libsvn_diff/binary_diff.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/deprecated.lo: subversion/libsvn_diff/deprecated.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/diff.lo: subversion/libsvn_diff/diff.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h
+
+subversion/libsvn_diff/diff3.lo: subversion/libsvn_diff/diff3.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h
+
+subversion/libsvn_diff/diff4.lo: subversion/libsvn_diff/diff4.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h
+
+subversion/libsvn_diff/diff_file.lo: subversion/libsvn_diff/diff_file.c subversion/include/private/svn_adler32.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/diff_memory.lo: subversion/libsvn_diff/diff_memory.c subversion/include/private/svn_adler32.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/diff_tree.lo: subversion/libsvn_diff/diff_tree.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/lcs.lo: subversion/libsvn_diff/lcs.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h
+
+subversion/libsvn_diff/parse-diff.lo: subversion/libsvn_diff/parse-diff.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h
+
+subversion/libsvn_diff/token.lo: subversion/libsvn_diff/token.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_diff/diff.h
+
+subversion/libsvn_diff/util.lo: subversion/libsvn_diff/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_diff/diff.h subversion/svn_private_config.h
+
+subversion/libsvn_fs/access.lo: subversion/libsvn_fs/access.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h
+
+subversion/libsvn_fs/deprecated.lo: subversion/libsvn_fs/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_fs/editor.lo: subversion/libsvn_fs/editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs/fs-loader.lo: subversion/libsvn_fs/fs-loader.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/bdb-err.lo: subversion/libsvn_fs_base/bdb/bdb-err.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/bdb_compat.lo: subversion/libsvn_fs_base/bdb/bdb_compat.c subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/changes-table.lo: subversion/libsvn_fs_base/bdb/changes-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/checksum-reps-table.lo: subversion/libsvn_fs_base/bdb/checksum-reps-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/checksum-reps-table.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/copies-table.lo: subversion/libsvn_fs_base/bdb/copies-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/copies-table.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/dbt.lo: subversion/libsvn_fs_base/bdb/dbt.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/id.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/env.lo: subversion/libsvn_fs_base/bdb/env.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/lock-tokens-table.lo: subversion/libsvn_fs_base/bdb/lock-tokens-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/lock-tokens-table.h subversion/libsvn_fs_base/bdb/locks-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/locks-table.lo: subversion/libsvn_fs_base/bdb/locks-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/lock-tokens-table.h subversion/libsvn_fs_base/bdb/locks-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/miscellaneous-table.lo: subversion/libsvn_fs_base/bdb/miscellaneous-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/miscellaneous-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/node-origins-table.lo: subversion/libsvn_fs_base/bdb/node-origins-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/node-origins-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/nodes-table.lo: subversion/libsvn_fs_base/bdb/nodes-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/reps-table.lo: subversion/libsvn_fs_base/bdb/reps-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/rev-table.lo: subversion/libsvn_fs_base/bdb/rev-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/strings-table.lo: subversion/libsvn_fs_base/bdb/strings-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/txn-table.lo: subversion/libsvn_fs_base/bdb/txn-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/bdb/uuids-table.lo: subversion/libsvn_fs_base/bdb/uuids-table.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/dbt.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/uuids-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/dag.lo: subversion/libsvn_fs_base/dag.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/checksum-reps-table.h subversion/libsvn_fs_base/bdb/copies-table.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/node-origins-table.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/dag.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/node-rev.h subversion/libsvn_fs_base/reps-strings.h subversion/libsvn_fs_base/revs-txns.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/err.lo: subversion/libsvn_fs_base/err.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/fs.lo: subversion/libsvn_fs_base/fs.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/checksum-reps-table.h subversion/libsvn_fs_base/bdb/copies-table.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/lock-tokens-table.h subversion/libsvn_fs_base/bdb/locks-table.h subversion/libsvn_fs_base/bdb/miscellaneous-table.h subversion/libsvn_fs_base/bdb/node-origins-table.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/bdb/uuids-table.h subversion/libsvn_fs_base/dag.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/lock.h subversion/libsvn_fs_base/revs-txns.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/tree.h subversion/libsvn_fs_base/uuid.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/id.lo: subversion/libsvn_fs_base/id.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h
+
+subversion/libsvn_fs_base/key-gen.lo: subversion/libsvn_fs_base/key-gen.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_base/key-gen.h
+
+subversion/libsvn_fs_base/lock.lo: subversion/libsvn_fs_base/lock.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/lock-tokens-table.h subversion/libsvn_fs_base/bdb/locks-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/lock.h subversion/libsvn_fs_base/revs-txns.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/tree.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/node-rev.lo: subversion/libsvn_fs_base/node-rev.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/node-origins-table.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/node-rev.h subversion/libsvn_fs_base/reps-strings.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/reps-strings.lo: subversion/libsvn_fs_base/reps-strings.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/reps-strings.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/revs-txns.lo: subversion/libsvn_fs_base/revs-txns.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/copies-table.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/dag.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/revs-txns.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/tree.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/trail.lo: subversion/libsvn_fs_base/trail.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb-err.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/tree.lo: subversion/libsvn_fs_base/tree.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/copies-table.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/miscellaneous-table.h subversion/libsvn_fs_base/bdb/node-origins-table.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/bdb/rev-table.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/dag.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/lock.h subversion/libsvn_fs_base/node-rev.h subversion/libsvn_fs_base/revs-txns.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/tree.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/util/fs_skels.lo: subversion/libsvn_fs_base/util/fs_skels.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_skel.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/util/fs_skels.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_base/uuid.lo: subversion/libsvn_fs_base/uuid.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/uuids-table.h subversion/libsvn_fs_base/err.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/uuid.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/cached_data.lo: subversion/libsvn_fs_fs/cached_data.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/caching.lo: subversion/libsvn_fs_fs/caching.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/dag.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/dag.lo: subversion/libsvn_fs_fs/dag.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/dag.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/dump-index.lo: subversion/libsvn_fs_fs/dump-index.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h
+
+subversion/libsvn_fs_fs/fs.lo: subversion/libsvn_fs_fs/fs.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/hotcopy.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/lock.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/recovery.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_fs/verify.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/fs_fs.lo: subversion/libsvn_fs_fs/fs_fs.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/hotcopy.lo: subversion/libsvn_fs_fs/hotcopy.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/hotcopy.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/recovery.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/id.lo: subversion/libsvn_fs_fs/id.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_x/fs_init.h
+
+subversion/libsvn_fs_fs/index.lo: subversion/libsvn_fs_fs/index.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/load-index.lo: subversion/libsvn_fs_fs/load-index.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/util.h
+
+subversion/libsvn_fs_fs/lock.lo: subversion/libsvn_fs_fs/lock.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/lock.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/low_level.lo: subversion/libsvn_fs_fs/low_level.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/pack.lo: subversion/libsvn_fs_fs/pack.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/recovery.lo: subversion/libsvn_fs_fs/recovery.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/recovery.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/rep-cache.lo: subversion/libsvn_fs_fs/rep-cache.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/rep-cache-db.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/rev_file.lo: subversion/libsvn_fs_fs/rev_file.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/revprops.lo: subversion/libsvn_fs_fs/revprops.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/stats.lo: subversion/libsvn_fs_fs/stats.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/temp_serializer.lo: subversion/libsvn_fs_fs/temp_serializer.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h
+
+subversion/libsvn_fs_fs/transaction.lo: subversion/libsvn_fs_fs/transaction.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/lock.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/tree.lo: subversion/libsvn_fs_fs/tree.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/dag.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/lock.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/temp_serializer.h subversion/libsvn_fs_fs/transaction.h subversion/libsvn_fs_fs/tree.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/util.lo: subversion/libsvn_fs_fs/util.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_fs/verify.lo: subversion/libsvn_fs_fs/verify.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/cached_data.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rep-cache.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/revprops.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_fs/verify.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_util/fs-util.lo: subversion/libsvn_fs_util/fs-util.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/batch_fsync.lo: subversion/libsvn_fs_x/batch_fsync.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/batch_fsync.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/cached_data.lo: subversion/libsvn_fs_x/cached_data.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/changes.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/noderevs.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/reps.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/caching.lo: subversion/libsvn_fs_x/caching.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/changes.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/dag_cache.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/noderevs.h subversion/libsvn_fs_x/reps.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/changes.lo: subversion/libsvn_fs_x/changes.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/changes.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/string_table.h subversion/libsvn_fs_x/temp_serializer.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/dag.lo: subversion/libsvn_fs_x/dag.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/dag_cache.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_id.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/transaction.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/dag_cache.lo: subversion/libsvn_fs_x/dag_cache.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/dag_cache.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_id.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/lock.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/fs.lo: subversion/libsvn_fs_x/fs.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/hotcopy.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/lock.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/recovery.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/libsvn_fs_x/verify.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/fs_id.lo: subversion/libsvn_fs_x/fs_id.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_id.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/rev_file.h
+
+subversion/libsvn_fs_x/fs_x.lo: subversion/libsvn_fs_x/fs_x.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/hotcopy.lo: subversion/libsvn_fs_x/hotcopy.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/hotcopy.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/recovery.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/id.lo: subversion/libsvn_fs_x/id.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/util.h
+
+subversion/libsvn_fs_x/index.lo: subversion/libsvn_fs_x/index.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/lock.lo: subversion/libsvn_fs_x/lock.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/lock.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/low_level.lo: subversion/libsvn_fs_x/low_level.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/noderevs.lo: subversion/libsvn_fs_x/noderevs.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/noderevs.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/string_table.h subversion/libsvn_fs_x/temp_serializer.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/pack.lo: subversion/libsvn_fs_x/pack.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/changes.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/noderevs.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/reps.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/recovery.lo: subversion/libsvn_fs_x/recovery.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/recovery.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/rep-cache.lo: subversion/libsvn_fs_x/rep-cache.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/rep-cache-db.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/reps.lo: subversion/libsvn_fs_x/reps.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/reps.h subversion/libsvn_fs_x/rev_file.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/rev_file.lo: subversion/libsvn_fs_x/rev_file.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/revprops.lo: subversion/libsvn_fs_x/revprops.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/string_table.lo: subversion/libsvn_fs_x/string_table.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/string_table.h
+
+subversion/libsvn_fs_x/temp_serializer.lo: subversion/libsvn_fs_x/temp_serializer.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h
+
+subversion/libsvn_fs_x/transaction.lo: subversion/libsvn_fs_x/transaction.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_io_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/lock.h subversion/libsvn_fs_x/low_level.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/tree.lo: subversion/libsvn_fs_x/tree.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_temp_serializer.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/dag.h subversion/libsvn_fs_x/dag_cache.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_id.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/lock.h subversion/libsvn_fs_x/pack.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/temp_serializer.h subversion/libsvn_fs_x/transaction.h subversion/libsvn_fs_x/tree.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/util.lo: subversion/libsvn_fs_x/util.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/util.h subversion/svn_private_config.h
+
+subversion/libsvn_fs_x/verify.lo: subversion/libsvn_fs_x/verify.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/cached_data.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/fs_init.h subversion/libsvn_fs_x/fs_x.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/index.h subversion/libsvn_fs_x/rep-cache.h subversion/libsvn_fs_x/rev_file.h subversion/libsvn_fs_x/revprops.h subversion/libsvn_fs_x/util.h subversion/libsvn_fs_x/verify.h subversion/svn_private_config.h
+
+subversion/libsvn_ra/compat.lo: subversion/libsvn_ra/compat.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra/ra_loader.h subversion/svn_private_config.h
+
+subversion/libsvn_ra/debug_reporter.lo: subversion/libsvn_ra/debug_reporter.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra/debug_reporter.h
+
+subversion/libsvn_ra/deprecated.lo: subversion/libsvn_ra/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra/deprecated.h subversion/libsvn_ra/ra_loader.h subversion/svn_private_config.h
+
+subversion/libsvn_ra/editor.lo: subversion/libsvn_ra/editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra/ra_loader.h subversion/svn_private_config.h
+
+subversion/libsvn_ra/ra_loader.lo: subversion/libsvn_ra/ra_loader.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/deprecated.h subversion/libsvn_ra/ra_loader.h subversion/svn_private_config.h
+
+subversion/libsvn_ra/util.lo: subversion/libsvn_ra/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_local/ra_plugin.lo: subversion/libsvn_ra_local/ra_plugin.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra/wrapper_template.h subversion/libsvn_ra_local/ra_local.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_local/split_url.lo: subversion/libsvn_ra_local/split_url.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_local/ra_local.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/blame.lo: subversion/libsvn_ra_serf/blame.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/blncache.lo: subversion/libsvn_ra_serf/blncache.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_serf/blncache.h
+
+subversion/libsvn_ra_serf/commit.lo: subversion/libsvn_ra_serf/commit.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/eagain_bucket.lo: subversion/libsvn_ra_serf/eagain_bucket.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/get_deleted_rev.lo: subversion/libsvn_ra_serf/get_deleted_rev.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/get_file.lo: subversion/libsvn_ra_serf/get_file.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/get_lock.lo: subversion/libsvn_ra_serf/get_lock.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/getdate.lo: subversion/libsvn_ra_serf/getdate.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/getlocations.lo: subversion/libsvn_ra_serf/getlocations.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/getlocationsegments.lo: subversion/libsvn_ra_serf/getlocationsegments.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/getlocks.lo: subversion/libsvn_ra_serf/getlocks.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/inherited_props.lo: subversion/libsvn_ra_serf/inherited_props.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/list.lo: subversion/libsvn_ra_serf/list.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/lock.lo: subversion/libsvn_ra_serf/lock.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/log.lo: subversion/libsvn_ra_serf/log.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/merge.lo: subversion/libsvn_ra_serf/merge.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/mergeinfo.lo: subversion/libsvn_ra_serf/mergeinfo.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/multistatus.lo: subversion/libsvn_ra_serf/multistatus.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/options.lo: subversion/libsvn_ra_serf/options.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/property.lo: subversion/libsvn_ra_serf/property.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/replay.lo: subversion/libsvn_ra_serf/replay.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/request_body.lo: subversion/libsvn_ra_serf/request_body.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h
+
+subversion/libsvn_ra_serf/sb_bucket.lo: subversion/libsvn_ra_serf/sb_bucket.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/serf.lo: subversion/libsvn_ra_serf/serf.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra/wrapper_template.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/stat.lo: subversion/libsvn_ra_serf/stat.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/stream_bucket.lo: subversion/libsvn_ra_serf/stream_bucket.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h
+
+subversion/libsvn_ra_serf/update.lo: subversion/libsvn_ra_serf/update.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/util.lo: subversion/libsvn_ra_serf/util.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_cert.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_serf/util_error.lo: subversion/libsvn_ra_serf/util_error.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_error_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h
+
+subversion/libsvn_ra_serf/xml.lo: subversion/libsvn_ra_serf/xml.c subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra_serf/blncache.h subversion/libsvn_ra_serf/ra_serf.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/client.lo: subversion/libsvn_ra_svn/client.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_ra_svn_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_ra/ra_loader.h subversion/libsvn_ra/wrapper_template.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/cram.lo: subversion/libsvn_ra_svn/cram.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_svn_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/cyrus_auth.lo: subversion/libsvn_ra_svn/cyrus_auth.c subversion/include/private/ra_svn_sasl.h subversion/include/private/ra_svn_wrapped_sasl.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_ra_svn_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/deprecated.lo: subversion/libsvn_ra_svn/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_svn_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_ra_svn/editorp.lo: subversion/libsvn_ra_svn/editorp.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_ra_svn_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/internal_auth.lo: subversion/libsvn_ra_svn/internal_auth.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_ra_svn_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/marshal.lo: subversion/libsvn_ra_svn/marshal.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_error_private.h subversion/include/private/svn_ra_svn_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/streams.lo: subversion/libsvn_ra_svn/streams.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_io_private.h subversion/include/private/svn_ra_svn_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_ra_svn/ra_svn.h subversion/svn_private_config.h
+
+subversion/libsvn_ra_svn/version.lo: subversion/libsvn_ra_svn/version.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_ra_svn.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h
+
+subversion/libsvn_ra_svn/wrapped_sasl.lo: subversion/libsvn_ra_svn/wrapped_sasl.c subversion/include/private/ra_svn_wrapped_sasl.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/authz.lo: subversion/libsvn_repos/authz.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/authz.h subversion/libsvn_repos/config_file.h subversion/libsvn_repos/repos.h
+
+subversion/libsvn_repos/authz_info.lo: subversion/libsvn_repos/authz_info.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/authz.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/authz_parse.lo: subversion/libsvn_repos/authz_parse.c subversion/include/private/svn_config_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/authz.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/commit.lo: subversion/libsvn_repos/commit.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/compat.lo: subversion/libsvn_repos/compat.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/config_file.lo: subversion/libsvn_repos/config_file.c subversion/include/private/svn_config_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/config_file.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/config_pool.lo: subversion/libsvn_repos/config_pool.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/config_file.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/delta.lo: subversion/libsvn_repos/delta.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/deprecated.lo: subversion/libsvn_repos/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/dump.lo: subversion/libsvn_repos/dump.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/fs-wrap.lo: subversion/libsvn_repos/fs-wrap.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/hooks.lo: subversion/libsvn_repos/hooks.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/list.lo: subversion/libsvn_repos/list.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/load-fs-vtable.lo: subversion/libsvn_repos/load-fs-vtable.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/load.lo: subversion/libsvn_repos/load.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/log.lo: subversion/libsvn_repos/log.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/node_tree.lo: subversion/libsvn_repos/node_tree.c subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/notify.lo: subversion/libsvn_repos/notify.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/replay.lo: subversion/libsvn_repos/replay.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/reporter.lo: subversion/libsvn_repos/reporter.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_fspath.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/repos.lo: subversion/libsvn_repos/repos.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_repos/rev_hunt.lo: subversion/libsvn_repos/rev_hunt.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_repos/repos.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/adler32.lo: subversion/libsvn_subr/adler32.c subversion/include/private/svn_adler32.h
+
+subversion/libsvn_subr/atomic.lo: subversion/libsvn_subr/atomic.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/auth.lo: subversion/libsvn_subr/auth.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_subr/auth.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/base64.lo: subversion/libsvn_subr/base64.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/bit_array.lo: subversion/libsvn_subr/bit_array.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/cache-inprocess.lo: subversion/libsvn_subr/cache-inprocess.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/cache.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/cache-membuffer.lo: subversion/libsvn_subr/cache-membuffer.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/cache.h subversion/libsvn_subr/fnv1a.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/cache-memcache.lo: subversion/libsvn_subr/cache-memcache.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/cache.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/cache-null.lo: subversion/libsvn_subr/cache-null.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/cache.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/cache.lo: subversion/libsvn_subr/cache.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/cache.h
+
+subversion/libsvn_subr/cache_config.lo: subversion/libsvn_subr/cache_config.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/checksum.lo: subversion/libsvn_subr/checksum.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/checksum.h subversion/libsvn_subr/fnv1a.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/cmdline.lo: subversion/libsvn_subr/cmdline.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_nls.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_xml.h subversion/libsvn_subr/win32_crashrpt.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/compat.lo: subversion/libsvn_subr/compat.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/compress_lz4.lo: subversion/libsvn_subr/compress_lz4.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/lz4/lz4internal.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/compress_zlib.lo: subversion/libsvn_subr/compress_zlib.c subversion/include/private/svn_debug.h subversion/include/private/svn_error_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/config.lo: subversion/libsvn_subr/config.c subversion/include/private/svn_config_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/config_impl.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/config_auth.lo: subversion/libsvn_subr/config_auth.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/auth.h subversion/libsvn_subr/config_impl.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/config_file.lo: subversion/libsvn_subr/config_file.c subversion/include/private/svn_config_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/libsvn_subr/config_impl.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/config_win.lo: subversion/libsvn_subr/config_win.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_subr/config_impl.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/crypto.lo: subversion/libsvn_subr/crypto.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/crypto.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/ctype.lo: subversion/libsvn_subr/ctype.c subversion/include/svn_ctype.h
+
+subversion/libsvn_subr/date.lo: subversion/libsvn_subr/date.c subversion/include/private/svn_debug.h subversion/include/private/svn_token.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/debug.lo: subversion/libsvn_subr/debug.c subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/deprecated.lo: subversion/libsvn_subr/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_opt_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/libsvn_subr/auth.h subversion/libsvn_subr/opt.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/dirent_uri.lo: subversion/libsvn_subr/dirent_uri.c subversion/include/private/svn_cert.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/dirent_uri.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/dso.lo: subversion/libsvn_subr/dso.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/encode.lo: subversion/libsvn_subr/encode.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/eol.lo: subversion/libsvn_subr/eol.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_eol_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/error.lo: subversion/libsvn_subr/error.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_error_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_subr/pools.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/fnv1a.lo: subversion/libsvn_subr/fnv1a.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/fnv1a.h
+
+subversion/libsvn_subr/gpg_agent.lo: subversion/libsvn_subr/gpg_agent.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/libsvn_subr/auth.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/hash.lo: subversion/libsvn_subr/hash.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/io.lo: subversion/libsvn_subr/io.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_io_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/iter.lo: subversion/libsvn_subr/iter.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_iter.h subversion/include/svn_pools.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/lock.lo: subversion/libsvn_subr/lock.c subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/log.lo: subversion/libsvn_subr/log.c subversion/include/private/svn_debug.h subversion/include/private/svn_log.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/lz4/lz4.lo: subversion/libsvn_subr/lz4/lz4.c subversion/libsvn_subr/lz4/lz4internal.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/macos_keychain.lo: subversion/libsvn_subr/macos_keychain.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/libsvn_subr/auth.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/magic.lo: subversion/libsvn_subr/magic.c subversion/include/private/svn_debug.h subversion/include/private/svn_magic.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/md5.lo: subversion/libsvn_subr/md5.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_md5.h subversion/include/svn_types.h subversion/libsvn_subr/checksum.h
+
+subversion/libsvn_subr/mergeinfo.lo: subversion/libsvn_subr/mergeinfo.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/mutex.lo: subversion/libsvn_subr/mutex.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/nls.lo: subversion/libsvn_subr/nls.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_nls.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/object_pool.lo: subversion/libsvn_subr/object_pool.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/opt.lo: subversion/libsvn_subr/opt.c subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_subr/opt.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/packed_data.lo: subversion/libsvn_subr/packed_data.c subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_packed_data.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/path.lo: subversion/libsvn_subr/path.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_subr/dirent_uri.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/pool.lo: subversion/libsvn_subr/pool.c subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_types.h subversion/libsvn_subr/pools.h
+
+subversion/libsvn_subr/prefix_string.lo: subversion/libsvn_subr/prefix_string.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/prompt.lo: subversion/libsvn_subr/prompt.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/properties.lo: subversion/libsvn_subr/properties.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/quoprint.lo: subversion/libsvn_subr/quoprint.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_quoprint.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/root_pools.lo: subversion/libsvn_subr/root_pools.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/simple_providers.lo: subversion/libsvn_subr/simple_providers.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/libsvn_subr/auth.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/skel.lo: subversion/libsvn_subr/skel.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/private/svn_string_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/sorts.lo: subversion/libsvn_subr/sorts.c subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/spillbuf.lo: subversion/libsvn_subr/spillbuf.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/sqlite.lo: subversion/libsvn_subr/sqlite.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/internal_statements.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/sqlite3wrapper.lo: subversion/libsvn_subr/sqlite3wrapper.c subversion/svn_private_config.h
+
+subversion/libsvn_subr/ssl_client_cert_providers.lo: subversion/libsvn_subr/ssl_client_cert_providers.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/ssl_client_cert_pw_providers.lo: subversion/libsvn_subr/ssl_client_cert_pw_providers.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/ssl_server_trust_providers.lo: subversion/libsvn_subr/ssl_server_trust_providers.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/stream.lo: subversion/libsvn_subr/stream.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_error_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/string.lo: subversion/libsvn_subr/string.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_string_private.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/subst.lo: subversion/libsvn_subr/subst.c subversion/include/private/svn_debug.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_io_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/sysinfo.lo: subversion/libsvn_subr/sysinfo.c subversion/include/private/svn_debug.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/libsvn_subr/sysinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/target.lo: subversion/libsvn_subr/target.c subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/temp_serializer.lo: subversion/libsvn_subr/temp_serializer.c subversion/include/private/svn_debug.h subversion/include/private/svn_temp_serializer.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/time.lo: subversion/libsvn_subr/time.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/token.lo: subversion/libsvn_subr/token.c subversion/include/private/svn_debug.h subversion/include/private/svn_token.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/types.lo: subversion/libsvn_subr/types.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_props.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/user.lo: subversion/libsvn_subr/user.c subversion/include/private/svn_debug.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h
+
+subversion/libsvn_subr/username_providers.lo: subversion/libsvn_subr/username_providers.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h
+
+subversion/libsvn_subr/utf.lo: subversion/libsvn_subr/utf.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_subr/win32_xlate.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/utf8proc.lo: subversion/libsvn_subr/utf8proc.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/utf8proc/utf8proc.c subversion/libsvn_subr/utf8proc/utf8proc_data.c subversion/libsvn_subr/utf8proc/utf8proc_internal.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/utf_validate.lo: subversion/libsvn_subr/utf_validate.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_eol_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/libsvn_subr/utf_width.lo: subversion/libsvn_subr/utf_width.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/validate.lo: subversion/libsvn_subr/validate.c subversion/include/private/svn_debug.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/version.lo: subversion/libsvn_subr/version.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_subr/sysinfo.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/win32_crashrpt.lo: subversion/libsvn_subr/win32_crashrpt.c subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_subr/sysinfo.h subversion/libsvn_subr/win32_crashrpt.h subversion/libsvn_subr/win32_crashrpt_dll.h
+
+subversion/libsvn_subr/win32_crypto.lo: subversion/libsvn_subr/win32_crypto.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/libsvn_subr/auth.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/win32_xlate.lo: subversion/libsvn_subr/win32_xlate.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/libsvn_subr/win32_xlate.h subversion/svn_private_config.h
+
+subversion/libsvn_subr/x509info.lo: subversion/libsvn_subr/x509info.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_x509.h subversion/libsvn_subr/x509.h
+
+subversion/libsvn_subr/x509parse.lo: subversion/libsvn_subr/x509parse.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_x509.h subversion/libsvn_subr/x509.h
+
+subversion/libsvn_subr/xml.lo: subversion/libsvn_subr/xml.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/adm_crawler.lo: subversion/libsvn_wc/adm_crawler.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/adm_files.lo: subversion/libsvn_wc/adm_files.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/adm_ops.lo: subversion/libsvn_wc/adm_ops.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/ambient_depth_filter_editor.lo: subversion/libsvn_wc/ambient_depth_filter_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/cleanup.lo: subversion/libsvn_wc/cleanup.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/conflicts.lo: subversion/libsvn_wc/conflicts.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/context.lo: subversion/libsvn_wc/context.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/copy.lo: subversion/libsvn_wc/copy.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/crop.lo: subversion/libsvn_wc/crop.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/delete.lo: subversion/libsvn_wc/delete.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/deprecated.lo: subversion/libsvn_wc/deprecated.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/diff_editor.lo: subversion/libsvn_wc/diff_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/diff.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/diff_local.lo: subversion/libsvn_wc/diff_local.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/diff.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/entries.lo: subversion/libsvn_wc/entries.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/tree_conflicts.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/externals.lo: subversion/libsvn_wc/externals.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/info.lo: subversion/libsvn_wc/info.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/lock.lo: subversion/libsvn_wc/lock.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/merge.lo: subversion/libsvn_wc/merge.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/node.lo: subversion/libsvn_wc/node.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/old-and-busted.lo: subversion/libsvn_wc/old-and-busted.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/props.lo: subversion/libsvn_wc/props.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/questions.lo: subversion/libsvn_wc/questions.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/relocate.lo: subversion/libsvn_wc/relocate.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/revert.lo: subversion/libsvn_wc/revert.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/revision_status.lo: subversion/libsvn_wc/revision_status.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/status.lo: subversion/libsvn_wc/status.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/translate.lo: subversion/libsvn_wc/translate.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/tree_conflicts.lo: subversion/libsvn_wc/tree_conflicts.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/tree_conflicts.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/update_editor.lo: subversion/libsvn_wc/update_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/upgrade.lo: subversion/libsvn_wc/upgrade.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/props.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/tree_conflicts.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/util.lo: subversion/libsvn_wc/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wc_db.lo: subversion/libsvn_wc/wc_db.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/entries.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/props.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wc_db_pristine.lo: subversion/libsvn_wc/wc_db_pristine.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wc_db_update_move.lo: subversion/libsvn_wc/wc_db_update_move.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wc_db_util.lo: subversion/libsvn_wc/wc_db_util.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wc_db_wcroot.lo: subversion/libsvn_wc/wc_db_wcroot.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/props.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/wcroot_anchor.lo: subversion/libsvn_wc/wcroot_anchor.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/libsvn_wc/workqueue.lo: subversion/libsvn_wc/workqueue.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/adm_files.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/props.h subversion/libsvn_wc/translate.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/mod_authz_svn/mod_authz_svn.lo: subversion/mod_authz_svn/mod_authz_svn.c subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_authz_svn/mod_authz_svn.c ; else echo "fake" > subversion/mod_authz_svn/mod_authz_svn.lo ; fi
+
+subversion/mod_dav_svn/activity.lo: subversion/mod_dav_svn/activity.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/activity.c ; else echo "fake" > subversion/mod_dav_svn/activity.lo ; fi
+
+subversion/mod_dav_svn/authz.lo: subversion/mod_dav_svn/authz.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/authz.c ; else echo "fake" > subversion/mod_dav_svn/authz.lo ; fi
+
+subversion/mod_dav_svn/deadprops.lo: subversion/mod_dav_svn/deadprops.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/deadprops.c ; else echo "fake" > subversion/mod_dav_svn/deadprops.lo ; fi
+
+subversion/mod_dav_svn/liveprops.lo: subversion/mod_dav_svn/liveprops.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/liveprops.c ; else echo "fake" > subversion/mod_dav_svn/liveprops.lo ; fi
+
+subversion/mod_dav_svn/lock.lo: subversion/mod_dav_svn/lock.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/lock.c ; else echo "fake" > subversion/mod_dav_svn/lock.lo ; fi
+
+subversion/mod_dav_svn/merge.lo: subversion/mod_dav_svn/merge.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/merge.c ; else echo "fake" > subversion/mod_dav_svn/merge.lo ; fi
+
+subversion/mod_dav_svn/mirror.lo: subversion/mod_dav_svn/mirror.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/mirror.c ; else echo "fake" > subversion/mod_dav_svn/mirror.lo ; fi
+
+subversion/mod_dav_svn/mod_dav_svn.lo: subversion/mod_dav_svn/mod_dav_svn.c subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/private/svn_subr_private.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_dso.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/mod_dav_svn.c ; else echo "fake" > subversion/mod_dav_svn/mod_dav_svn.lo ; fi
+
+subversion/mod_dav_svn/posts/create_txn.lo: subversion/mod_dav_svn/posts/create_txn.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/posts/create_txn.c ; else echo "fake" > subversion/mod_dav_svn/posts/create_txn.lo ; fi
+
+subversion/mod_dav_svn/reports/dated-rev.lo: subversion/mod_dav_svn/reports/dated-rev.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/dated-rev.c ; else echo "fake" > subversion/mod_dav_svn/reports/dated-rev.lo ; fi
+
+subversion/mod_dav_svn/reports/deleted-rev.lo: subversion/mod_dav_svn/reports/deleted-rev.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/deleted-rev.c ; else echo "fake" > subversion/mod_dav_svn/reports/deleted-rev.lo ; fi
+
+subversion/mod_dav_svn/reports/file-revs.lo: subversion/mod_dav_svn/reports/file-revs.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/file-revs.c ; else echo "fake" > subversion/mod_dav_svn/reports/file-revs.lo ; fi
+
+subversion/mod_dav_svn/reports/get-location-segments.lo: subversion/mod_dav_svn/reports/get-location-segments.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/get-location-segments.c ; else echo "fake" > subversion/mod_dav_svn/reports/get-location-segments.lo ; fi
+
+subversion/mod_dav_svn/reports/get-locations.lo: subversion/mod_dav_svn/reports/get-locations.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/get-locations.c ; else echo "fake" > subversion/mod_dav_svn/reports/get-locations.lo ; fi
+
+subversion/mod_dav_svn/reports/get-locks.lo: subversion/mod_dav_svn/reports/get-locks.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/get-locks.c ; else echo "fake" > subversion/mod_dav_svn/reports/get-locks.lo ; fi
+
+subversion/mod_dav_svn/reports/inherited-props.lo: subversion/mod_dav_svn/reports/inherited-props.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/inherited-props.c ; else echo "fake" > subversion/mod_dav_svn/reports/inherited-props.lo ; fi
+
+subversion/mod_dav_svn/reports/list.lo: subversion/mod_dav_svn/reports/list.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/list.c ; else echo "fake" > subversion/mod_dav_svn/reports/list.lo ; fi
+
+subversion/mod_dav_svn/reports/log.lo: subversion/mod_dav_svn/reports/log.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/log.c ; else echo "fake" > subversion/mod_dav_svn/reports/log.lo ; fi
+
+subversion/mod_dav_svn/reports/mergeinfo.lo: subversion/mod_dav_svn/reports/mergeinfo.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/mergeinfo.c ; else echo "fake" > subversion/mod_dav_svn/reports/mergeinfo.lo ; fi
+
+subversion/mod_dav_svn/reports/replay.lo: subversion/mod_dav_svn/reports/replay.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/replay.c ; else echo "fake" > subversion/mod_dav_svn/reports/replay.lo ; fi
+
+subversion/mod_dav_svn/reports/update.lo: subversion/mod_dav_svn/reports/update.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_skel.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/reports/update.c ; else echo "fake" > subversion/mod_dav_svn/reports/update.lo ; fi
+
+subversion/mod_dav_svn/repos.lo: subversion/mod_dav_svn/repos.c subversion/include/mod_authz_svn.h subversion/include/mod_dav_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/repos.c ; else echo "fake" > subversion/mod_dav_svn/repos.lo ; fi
+
+subversion/mod_dav_svn/status.lo: subversion/mod_dav_svn/status.c subversion/include/mod_authz_svn.h subversion/include/private/svn_cache.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_skel.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h subversion/svn_private_config.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/status.c ; else echo "fake" > subversion/mod_dav_svn/status.lo ; fi
+
+subversion/mod_dav_svn/util.lo: subversion/mod_dav_svn/util.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_skel.h subversion/include/private/svn_string_private.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_ctype.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/util.c ; else echo "fake" > subversion/mod_dav_svn/util.lo ; fi
+
+subversion/mod_dav_svn/version.lo: subversion/mod_dav_svn/version.c subversion/include/mod_authz_svn.h subversion/include/private/svn_dav_protocol.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_skel.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dav.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/mod_dav_svn/dav_svn.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)subversion/mod_dav_svn/version.c ; else echo "fake" > subversion/mod_dav_svn/version.lo ; fi
+
+subversion/po/de.mo: subversion/po/de.po
+
+subversion/po/es.mo: subversion/po/es.po
+
+subversion/po/fr.mo: subversion/po/fr.po
+
+subversion/po/it.mo: subversion/po/it.po
+
+subversion/po/ja.mo: subversion/po/ja.po
+
+subversion/po/ko.mo: subversion/po/ko.po
+
+subversion/po/nb.mo: subversion/po/nb.po
+
+subversion/po/pl.mo: subversion/po/pl.po
+
+subversion/po/pt_BR.mo: subversion/po/pt_BR.po
+
+subversion/po/sv.mo: subversion/po/sv.po
+
+subversion/po/zh_CN.mo: subversion/po/zh_CN.po
+
+subversion/po/zh_TW.mo: subversion/po/zh_TW.po
+
+subversion/svn/add-cmd.lo: subversion/svn/add-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/auth-cmd.lo: subversion/svn/auth-cmd.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_x509.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/blame-cmd.lo: subversion/svn/blame-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/cat-cmd.lo: subversion/svn/cat-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/changelist-cmd.lo: subversion/svn/changelist-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/checkout-cmd.lo: subversion/svn/checkout-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/cl-conflicts.lo: subversion/svn/cl-conflicts.c subversion/include/private/svn_debug.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl-conflicts.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/cleanup-cmd.lo: subversion/svn/cleanup-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/commit-cmd.lo: subversion/svn/commit-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/conflict-callbacks.lo: subversion/svn/conflict-callbacks.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl-conflicts.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/copy-cmd.lo: subversion/svn/copy-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/delete-cmd.lo: subversion/svn/delete-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/deprecated.lo: subversion/svn/deprecated.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h
+
+subversion/svn/diff-cmd.lo: subversion/svn/diff-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/export-cmd.lo: subversion/svn/export-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/file-merge.lo: subversion/svn/file-merge.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/help-cmd.lo: subversion/svn/help-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/import-cmd.lo: subversion/svn/import-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/info-cmd.lo: subversion/svn/info-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl-conflicts.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/list-cmd.lo: subversion/svn/list-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/lock-cmd.lo: subversion/svn/lock-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/log-cmd.lo: subversion/svn/log-cmd.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl-log.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/merge-cmd.lo: subversion/svn/merge-cmd.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/mergeinfo-cmd.lo: subversion/svn/mergeinfo-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl-log.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/mkdir-cmd.lo: subversion/svn/mkdir-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/move-cmd.lo: subversion/svn/move-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/notify.lo: subversion/svn/notify.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/patch-cmd.lo: subversion/svn/patch-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/propdel-cmd.lo: subversion/svn/propdel-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/propedit-cmd.lo: subversion/svn/propedit-cmd.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/propget-cmd.lo: subversion/svn/propget-cmd.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/proplist-cmd.lo: subversion/svn/proplist-cmd.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/props.lo: subversion/svn/props.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/propset-cmd.lo: subversion/svn/propset-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/relocate-cmd.lo: subversion/svn/relocate-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/resolve-cmd.lo: subversion/svn/resolve-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/resolved-cmd.lo: subversion/svn/resolved-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/revert-cmd.lo: subversion/svn/revert-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/shelve-cmd.lo: subversion/svn/shelve-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/similarity.lo: subversion/svn/similarity.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/status-cmd.lo: subversion/svn/status-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/status.lo: subversion/svn/status.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl-conflicts.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/svn.lo: subversion/svn/svn.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/switch-cmd.lo: subversion/svn/switch-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/unlock-cmd.lo: subversion/svn/unlock-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/update-cmd.lo: subversion/svn/update-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/upgrade-cmd.lo: subversion/svn/upgrade-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svn/util.lo: subversion/svn/util.c subversion/include/private/svn_client_private.h subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn/cl.h subversion/svn_private_config.h
+
+subversion/svnadmin/svnadmin.lo: subversion/svnadmin/svnadmin.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/svn_private_config.h
+
+subversion/svnbench/help-cmd.lo: subversion/svnbench/help-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/notify.lo: subversion/svnbench/notify.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/null-blame-cmd.lo: subversion/svnbench/null-blame-cmd.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/null-export-cmd.lo: subversion/svnbench/null-export-cmd.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/null-info-cmd.lo: subversion/svnbench/null-info-cmd.c subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/null-list-cmd.lo: subversion/svnbench/null-list-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/include/svn_xml.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/null-log-cmd.lo: subversion/svnbench/null-log-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/svnbench.lo: subversion/svnbench/svnbench.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svnbench/util.lo: subversion/svnbench/util.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnbench/cl.h
+
+subversion/svndumpfilter/svndumpfilter.lo: subversion/svndumpfilter/svndumpfilter.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/svn_private_config.h
+
+subversion/svnfsfs/dump-index-cmd.lo: subversion/svnfsfs/dump-index-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_fs_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svnfsfs/svnfsfs.h
+
+subversion/svnfsfs/load-index-cmd.lo: subversion/svnfsfs/load-index-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnfsfs/svnfsfs.h
+
+subversion/svnfsfs/stats-cmd.lo: subversion/svnfsfs/stats-cmd.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnfsfs/svnfsfs.h
+
+subversion/svnfsfs/svnfsfs.lo: subversion/svnfsfs/svnfsfs.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/svn_private_config.h subversion/svnfsfs/svnfsfs.h
+
+subversion/svnlook/svnlook.lo: subversion/svnlook/svnlook.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_private.h subversion/include/private/svn_fspath.h subversion/include/private/svn_io_private.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_xml.h subversion/svn_private_config.h
+
+subversion/svnmucc/svnmucc.lo: subversion/svnmucc/svnmucc.c subversion/include/private/svn_client_mtcc.h subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+
+subversion/svnrdump/dump_editor.lo: subversion/svnrdump/dump_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/svnrdump/svnrdump.h
+
+subversion/svnrdump/load_editor.lo: subversion/svnrdump/load_editor.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnrdump/svnrdump.h
+
+subversion/svnrdump/svnrdump.lo: subversion/svnrdump/svnrdump.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_wc.h subversion/svn_private_config.h subversion/svnrdump/svnrdump.h
+
+subversion/svnrdump/util.lo: subversion/svnrdump/util.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svnrdump/svnrdump.h
+
+subversion/svnserve/cyrus_auth.lo: subversion/svnserve/cyrus_auth.c subversion/include/private/ra_svn_sasl.h subversion/include/private/ra_svn_wrapped_sasl.h subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_ra_svn_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnserve/server.h
+
+subversion/svnserve/log-escape.lo: subversion/svnserve/log-escape.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svnserve/server.h
+
+subversion/svnserve/logger.lo: subversion/svnserve/logger.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnserve/logger.h subversion/svnserve/server.h
+
+subversion/svnserve/serve.lo: subversion/svnserve/serve.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fspath.h subversion/include/private/svn_log.h subversion/include/private/svn_mergeinfo_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_ra_svn_private.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_compat.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_user.h subversion/svn_private_config.h subversion/svnserve/logger.h subversion/svnserve/server.h
+
+subversion/svnserve/svnserve.lo: subversion/svnserve/svnserve.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_cache_config.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra_svn.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/svn_private_config.h subversion/svnserve/logger.h subversion/svnserve/server.h subversion/svnserve/winservice.h
+
+subversion/svnserve/winservice.lo: subversion/svnserve/winservice.c subversion/include/private/svn_debug.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/svnserve/winservice.h
+
+subversion/svnsync/svnsync.lo: subversion/svnsync/svnsync.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_ra_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/svn_private_config.h subversion/svnsync/sync.h
+
+subversion/svnsync/sync.lo: subversion/svnsync/sync.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/svn_private_config.h subversion/svnsync/sync.h
+
+subversion/svnversion/svnversion.lo: subversion/svnversion/svnversion.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+
+subversion/tests/afl/afl-x509.lo: subversion/tests/afl/afl-x509.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_x509.h
+
+subversion/tests/cmdline/atomic-ra-revprop-change.lo: subversion/tests/cmdline/atomic-ra-revprop-change.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h
+
+subversion/tests/cmdline/entries-dump.lo: subversion/tests/cmdline/entries-dump.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/lock.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/tests/cmdline/lock-helper.lo: subversion/tests/cmdline/lock-helper.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_client/client-test.lo: subversion/tests/libsvn_client/client-test.c subversion/include/private/svn_client_mtcc.h subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_magic.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_client/client.h subversion/libsvn_client/mergeinfo.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_client/conflicts-test.lo: subversion/tests/libsvn_client/conflicts-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_client/mtcc-test.lo: subversion/tests/libsvn_client/mtcc-test.c subversion/include/private/svn_client_mtcc.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_delta/random-test.lo: subversion/tests/libsvn_delta/random-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/compose_delta.c subversion/libsvn_delta/delta.h subversion/tests/libsvn_delta/delta-window-test.h subversion/tests/libsvn_delta/range-index-test.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_delta/svndiff-stream-test.lo: subversion/tests/libsvn_delta/svndiff-stream-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_delta/svndiff-test.lo: subversion/tests/libsvn_delta/svndiff-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_quoprint.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_delta/vdelta-test.lo: subversion/tests/libsvn_delta/vdelta-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_delta/delta.h subversion/tests/libsvn_delta/delta-window-test.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_delta/window-test.lo: subversion/tests/libsvn_delta/window-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_diff/diff-diff3-test.lo: subversion/tests/libsvn_diff/diff-diff3-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_diff/parse-diff-test.lo: subversion/tests/libsvn_diff/parse-diff-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_fs/fs-sequential-test.lo: subversion/tests/libsvn_fs/fs-sequential-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_delta/delta.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs/fs-test.lo: subversion/tests/libsvn_fs/fs-test.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_fspath.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_delta/delta.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs/locks-test.lo: subversion/tests/libsvn_fs/locks-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_base/changes-test.lo: subversion/tests/libsvn_fs_base/changes-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/changes-table.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_base/fs-base-test.lo: subversion/tests/libsvn_fs_base/fs-base-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_fs_util.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_delta/delta.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/nodes-table.h subversion/libsvn_fs_base/bdb/txn-table.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/id.h subversion/libsvn_fs_base/key-gen.h subversion/libsvn_fs_base/trail.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_base/strings-reps-test.lo: subversion/tests/libsvn_fs_base/strings-reps-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_mutex.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/bdb/bdb_compat.h subversion/libsvn_fs_base/bdb/env.h subversion/libsvn_fs_base/bdb/reps-table.h subversion/libsvn_fs_base/bdb/strings-table.h subversion/libsvn_fs_base/fs.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_base/trail.h subversion/libsvn_fs_base/util/fs_skels.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_x/fs_init.h subversion/svn_private_config.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.lo: subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/rev_file.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_fs/fs-fs-pack-test.lo: subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs/fs-loader.h subversion/libsvn_fs_base/fs_init.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/fs_fs.h subversion/libsvn_fs_fs/fs_init.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/low_level.h subversion/libsvn_fs_fs/pack.h subversion/libsvn_fs_fs/rev_file.h subversion/libsvn_fs_fs/util.h subversion/libsvn_fs_x/fs_init.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_fs/fs-fs-private-test.lo: subversion/tests/libsvn_fs_fs/fs-fs-private-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_fs_private.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_fs/fs.h subversion/libsvn_fs_fs/id.h subversion/libsvn_fs_fs/index.h subversion/libsvn_fs_fs/rev_file.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_x/fs-x-pack-test.lo: subversion/tests/libsvn_fs_x/fs-x-pack-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_fs_private.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_string_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/batch_fsync.h subversion/libsvn_fs_x/fs.h subversion/libsvn_fs_x/id.h subversion/libsvn_fs_x/reps.h subversion/libsvn_fs_x/rev_file.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_fs_x/string-table-test.lo: subversion/tests/libsvn_fs_x/string-table-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_temp_serializer.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_fs_x/string_table.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_ra/ra-test.lo: subversion/tests/libsvn_ra/ra-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/libsvn_ra_local/ra_local.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_ra_local/ra-local-test.lo: subversion/tests/libsvn_ra_local/ra-local-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_ra_local/ra_local.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_repos/authz-test.lo: subversion/tests/libsvn_repos/authz-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_repos/authz.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_repos/dir-delta-editor.lo: subversion/tests/libsvn_repos/dir-delta-editor.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/libsvn_repos/dir-delta-editor.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_repos/dump-load-test.lo: subversion/tests/libsvn_repos/dump-load-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_repos/repos-test.lo: subversion/tests/libsvn_repos/repos-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_editor.h subversion/include/private/svn_mutex.h subversion/include/private/svn_object_pool.h subversion/include/private/svn_repos_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/libsvn_subr/config_impl.h subversion/tests/libsvn_repos/dir-delta-editor.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_subr/auth-test.lo: subversion/tests/libsvn_subr/auth-test.c subversion/include/private/svn_auth_private.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/bit-array-test.lo: subversion/tests/libsvn_subr/bit-array-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/cache-test.lo: subversion/tests/libsvn_subr/cache-test.c subversion/include/private/svn_cache.h subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/svn_private_config.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/checksum-test.lo: subversion/tests/libsvn_subr/checksum-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/compat-test.lo: subversion/tests/libsvn_subr/compat-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_version.h subversion/svn_private_config.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/compress-test.lo: subversion/tests/libsvn_subr/compress-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/config-test.lo: subversion/tests/libsvn_subr/config-test.c subversion/include/private/svn_config_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/crypto-test.lo: subversion/tests/libsvn_subr/crypto-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_subr/crypto.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/dirent_uri-test.lo: subversion/tests/libsvn_subr/dirent_uri-test.c subversion/include/private/svn_cert.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/error-code-test.lo: subversion/tests/libsvn_subr/error-code-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/error-test.lo: subversion/tests/libsvn_subr/error-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_error_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/hashdump-test.lo: subversion/tests/libsvn_subr/hashdump-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/io-test.lo: subversion/tests/libsvn_subr/io-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_io_private.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_subr/mergeinfo-test.lo: subversion/tests/libsvn_subr/mergeinfo-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_mergeinfo_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/opt-test.lo: subversion/tests/libsvn_subr/opt-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/packed-data-test.lo: subversion/tests/libsvn_subr/packed-data-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_packed_data.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/path-test.lo: subversion/tests/libsvn_subr/path-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/prefix-string-test.lo: subversion/tests/libsvn_subr/prefix-string-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/priority-queue-test.lo: subversion/tests/libsvn_subr/priority-queue-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/revision-test.lo: subversion/tests/libsvn_subr/revision-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/root-pools-test.lo: subversion/tests/libsvn_subr/root-pools-test.c subversion/include/private/svn_atomic.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/skel-test.lo: subversion/tests/libsvn_subr/skel-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_skel.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_subr/spillbuf-test.lo: subversion/tests/libsvn_subr/spillbuf-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/sqlite-test.lo: subversion/tests/libsvn_subr/sqlite-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/stream-test.lo: subversion/tests/libsvn_subr/stream-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_io_private.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/string-test.lo: subversion/tests/libsvn_subr/string-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/subst_translate-test.lo: subversion/tests/libsvn_subr/subst_translate-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/time-test.lo: subversion/tests/libsvn_subr/time-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/translate-test.lo: subversion/tests/libsvn_subr/translate-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/utf-test.lo: subversion/tests/libsvn_subr/utf-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/private/svn_utf_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/x509-test.lo: subversion/tests/libsvn_subr/x509-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_x509.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_subr/xml-test.lo: subversion/tests/libsvn_subr/xml-test.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h subversion/tests/svn_test.h
+
+subversion/libsvn_subr/sqlite3wrapper.lo: subversion/libsvn_subr/sqlite3wrapper.c subversion/svn_private_config.h
+
+subversion/tests/libsvn_wc/conflict-data-test.lo: subversion/tests/libsvn_wc/conflict-data-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/tree_conflicts.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/db-test.lo: subversion/tests/libsvn_wc/db-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/entries-compat.lo: subversion/tests/libsvn_wc/entries-compat.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/op-depth-test.lo: subversion/tests/libsvn_wc/op-depth-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/conflicts.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/libsvn_wc/wc-test-queries.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/pristine-store-test.lo: subversion/tests/libsvn_wc/pristine-store-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/utils.lo: subversion/tests/libsvn_wc/utils.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/token-map.h subversion/libsvn_wc/wc-queries.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/libsvn_wc/wc-incomplete-tester.lo: subversion/tests/libsvn_wc/wc-incomplete-tester.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+subversion/tests/libsvn_wc/wc-lock-tester.lo: subversion/tests/libsvn_wc/wc-lock-tester.c subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/workqueue.h subversion/svn_private_config.h
+
+subversion/tests/libsvn_wc/wc-queries-test.lo: subversion/tests/libsvn_wc/wc-queries-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/libsvn_wc/wc-queries.h subversion/svn_private_config.h subversion/tests/svn_test.h
+
+subversion/tests/libsvn_wc/wc-test.lo: subversion/tests/libsvn_wc/wc-test.c subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/libsvn_wc/wc_db_private.h subversion/svn_private_config.h subversion/tests/libsvn_wc/utils.h subversion/tests/svn_test.h
+
+subversion/tests/svn_test_fs.lo: subversion/tests/svn_test_fs.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/tests/svn_test.h subversion/tests/svn_test_fs.h
+
+subversion/tests/svn_test_main.lo: subversion/tests/svn_test_main.c subversion/include/private/svn_atomic.h subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_dep_compat.h subversion/include/private/svn_mutex.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_ctype.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/svn_private_config.h subversion/tests/svn_test.h
+
+tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.lo: tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/help-cmd.lo: tools/client-side/svn-mergeinfo-normalizer/help-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/log.lo: tools/client-side/svn-mergeinfo-normalizer/log.c subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/logic.lo: tools/client-side/svn-mergeinfo-normalizer/logic.c subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_sorts_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/missing-branches.lo: tools/client-side/svn-mergeinfo-normalizer/missing-branches.c subversion/include/private/svn_debug.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.lo: tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/remove-branches-cmd.lo: tools/client-side/svn-mergeinfo-normalizer/remove-branches-cmd.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.lo: tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.lo: tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+
+tools/client-side/svnconflict/svnconflict.lo: tools/client-side/svnconflict/svnconflict.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_opt_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+
+tools/dev/fsfs-access-map.lo: tools/dev/fsfs-access-map.c subversion/include/private/svn_debug.h subversion/include/private/svn_string_private.h subversion/include/svn_checksum.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+tools/dev/svnmover/merge3.lo: tools/dev/svnmover/merge3.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_branch_nested.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_element.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_subr_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/dev/svnmover/svnmover.h
+
+tools/dev/svnmover/ra.lo: tools/dev/svnmover/ra.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_editor.h subversion/include/private/svn_element.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_string_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/dev/svnmover/svnmover.h
+
+tools/dev/svnmover/scanlog.lo: tools/dev/svnmover/scanlog.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_client_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_element.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/dev/svnmover/svnmover.h
+
+tools/dev/svnmover/svnmover.lo: tools/dev/svnmover/svnmover.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_branch_nested.h subversion/include/private/svn_branch_repos.h subversion/include/private/svn_client_private.h subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_delta_private.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_editor.h subversion/include/private/svn_element.h subversion/include/private/svn_ra_private.h subversion/include/private/svn_sorts_private.h subversion/include/private/svn_string_private.h subversion/include/private/svn_subr_private.h subversion/include/private/svn_token.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_hash.h subversion/include/svn_io.h subversion/include/svn_iter.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_props.h subversion/include/svn_ra.h subversion/include/svn_sorts.h subversion/include/svn_string.h subversion/include/svn_subst.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h tools/dev/svnmover/linenoise/linenoise.h tools/dev/svnmover/svnmover.h
+
+tools/dev/svnmover/util.lo: tools/dev/svnmover/util.c subversion/include/private/svn_branch.h subversion/include/private/svn_branch_compat.h subversion/include/private/svn_debug.h subversion/include/private/svn_element.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_client.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_wc.h tools/dev/svnmover/linenoise/linenoise.c tools/dev/svnmover/linenoise/linenoise.h tools/dev/svnmover/svnmover.h
+
+tools/dev/svnraisetreeconflict/svnraisetreeconflict.lo: tools/dev/svnraisetreeconflict/svnraisetreeconflict.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/svn_private_config.h
+
+tools/dev/wc-ng/svn-wc-db-tester.lo: tools/dev/wc-ng/svn-wc-db-tester.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_diff_tree.h subversion/include/private/svn_skel.h subversion/include/private/svn_sqlite.h subversion/include/private/svn_token.h subversion/include/private/svn_wc_private.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_ra.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h subversion/include/svn_version.h subversion/include/svn_wc.h subversion/libsvn_wc/wc.h subversion/libsvn_wc/wc_db.h subversion/svn_private_config.h
+
+tools/dev/x509-parser.lo: tools/dev/x509-parser.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_base64.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_time.h subversion/include/svn_types.h subversion/include/svn_x509.h subversion/svn_private_config.h
+
+tools/diff/diff.lo: tools/diff/diff.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h
+
+tools/diff/diff3.lo: tools/diff/diff3.c subversion/include/private/svn_debug.h subversion/include/private/svn_token.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+tools/diff/diff4.lo: tools/diff/diff4.c subversion/include/private/svn_debug.h subversion/include/svn_checksum.h subversion/include/svn_diff.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_pools.h subversion/include/svn_string.h subversion/include/svn_types.h
+
+tools/server-side/mod_dontdothat/mod_dontdothat.lo: tools/server-side/mod_dontdothat/mod_dontdothat.c subversion/include/mod_dav_svn.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_checksum.h subversion/include/svn_config.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_io.h subversion/include/svn_path.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_xml.h
+ if $(INSTALL_APACHE_MODS) ; then $(COMPILE_APACHE_MOD) $(canonicalized_srcdir)tools/server-side/mod_dontdothat/mod_dontdothat.c ; else echo "fake" > tools/server-side/mod_dontdothat/mod_dontdothat.lo ; fi
+
+tools/server-side/svn-populate-node-origins-index.lo: tools/server-side/svn-populate-node-origins-index.c subversion/include/private/svn_debug.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h
+
+tools/server-side/svnauthz.lo: tools/server-side/svnauthz.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h
+
+tools/server-side/svnauthz.lo: tools/server-side/svnauthz.c subversion/include/private/svn_cmdline_private.h subversion/include/private/svn_debug.h subversion/include/private/svn_fspath.h subversion/include/svn_auth.h subversion/include/svn_checksum.h subversion/include/svn_cmdline.h subversion/include/svn_config.h subversion/include/svn_delta.h subversion/include/svn_dirent_uri.h subversion/include/svn_error.h subversion/include/svn_error_codes.h subversion/include/svn_fs.h subversion/include/svn_io.h subversion/include/svn_mergeinfo.h subversion/include/svn_opt.h subversion/include/svn_path.h subversion/include/svn_pools.h subversion/include/svn_repos.h subversion/include/svn_string.h subversion/include/svn_types.h subversion/include/svn_utf.h
+
diff --git a/devel/subversion-lts/files/extra-patch-build.conf b/devel/subversion-lts/files/extra-patch-build.conf
new file mode 100644
index 000000000000..5ca23bbdc3ce
--- /dev/null
+++ b/devel/subversion-lts/files/extra-patch-build.conf
@@ -0,0 +1,11 @@
+--- build.conf.orig 2018-04-19 20:21:34.859567000 +0300
++++ build.conf 2018-04-19 20:21:55.939112000 +0300
+@@ -430,7 +430,7 @@
+ path = tools/server-side/mod_dontdothat
+ nonlibs = mod_dav_svn apr aprutil
+ libs = libsvn_subr libhttpd
+-install = tools
++install = apache-mod
+
+ # The Subversion FSFS repository manipulation tool
+ [svnfsfs]
diff --git a/devel/subversion-lts/files/extra-patch-fbsd-template b/devel/subversion-lts/files/extra-patch-fbsd-template
new file mode 100644
index 000000000000..ee4bf924c32e
--- /dev/null
+++ b/devel/subversion-lts/files/extra-patch-fbsd-template
@@ -0,0 +1,164 @@
+--- subversion/svn/util.c.orig 2015-02-28 13:37:27.000000000 +0300
++++ subversion/svn/util.c 2016-03-19 16:53:13.016472654 +0300
+@@ -66,6 +66,9 @@
+ #include "private/svn_client_private.h"
+ #include "private/svn_cmdline_private.h"
+ #include "private/svn_string_private.h"
++#ifdef HAS_ORGANIZATION_NAME
++#include "freebsd-organization.h"
++#endif
+
+
+
+@@ -331,6 +334,71 @@
+ }
+
+
++/*
++ * Since we're adding freebsd-specific tokens to the log message,
++ * clean out any leftovers to avoid accidently sending them to other
++ * projects that won't be expecting them.
++ */
++
++static const char *prefixes[] = {
++ "PR:",
++ "Submitted by:",
++ "Reported by:",
++ "Reviewed by:",
++ "Approved by:",
++ "Obtained from:",
++ "MFC after:",
++ "MFH:",
++ "Relnotes:",
++ "Security:",
++ "Sponsored by:",
++ "Differential Revision:",
++};
++
++void
++cleanmsg(apr_size_t *l, char *s)
++{
++ int i;
++ char *pos;
++ char *kw;
++ char *p;
++ int empty;
++
++ for (i = 0; i < sizeof(prefixes) / sizeof(prefixes[0]); i++) {
++ pos = s;
++ while ((kw = strstr(pos, prefixes[i])) != NULL) {
++ /* Check to see if keyword is at start of line (or buffer) */
++ if (!(kw == s || kw[-1] == '\r' || kw[-1] == '\n')) {
++ pos = kw + 1;
++ continue;
++ }
++ p = kw + strlen(prefixes[i]);
++ empty = 1;
++ while (1) {
++ if (*p == ' ' || *p == '\t') {
++ p++;
++ continue;
++ }
++ if (*p == '\0' || *p == '\r' || *p == '\n')
++ break;
++ empty = 0;
++ break;
++ }
++ if (empty && (*p == '\r' || *p == '\n')) {
++ memmove(kw, p + 1, strlen(p + 1) + 1);
++ if (l)
++ *l -= (p + 1 - kw);
++ } else if (empty) {
++ *kw = '\0';
++ if (l)
++ *l -= (p - kw);
++ } else {
++ pos = p;
++ }
++ }
++ }
++}
++
+ #define EDITOR_EOF_PREFIX _("--This line, and those below, will be ignored--")
+
+ svn_error_t *
+@@ -343,11 +411,56 @@
+ svn_stringbuf_t *default_msg = NULL;
+ struct log_msg_baton *lmb = baton;
+ svn_stringbuf_t *message = NULL;
++ svn_config_t *cfg;
++ const char *mfc_after, *sponsored_by;
++
++ cfg = lmb->config ? svn_hash_gets(lmb->config, SVN_CONFIG_CATEGORY_CONFIG) : NULL;
+
+ /* Set default message. */
+ default_msg = svn_stringbuf_create(APR_EOL_STR, pool);
++ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "PR:\t\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Submitted by:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Reported by:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Reviewed by:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Approved by:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Obtained from:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "MFC after:\t");
++ svn_config_get(cfg, &mfc_after, SVN_CONFIG_SECTION_MISCELLANY, "freebsd-mfc-after", NULL);
++ if (mfc_after != NULL)
++ svn_stringbuf_appendcstr(default_msg, mfc_after);
++ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "MFH:\t\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Relnotes:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Security:\t" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Sponsored by:\t");
++ svn_config_get(cfg, &sponsored_by, SVN_CONFIG_SECTION_MISCELLANY, "freebsd-sponsored-by",
++#ifdef HAS_ORGANIZATION_NAME
++ ORGANIZATION_NAME);
++#else
++ NULL);
++#endif
++ if (sponsored_by != NULL)
++ svn_stringbuf_appendcstr(default_msg, sponsored_by);
++ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "Differential Revision:\t" APR_EOL_STR);
+ svn_stringbuf_appendcstr(default_msg, EDITOR_EOF_PREFIX);
+- svn_stringbuf_appendcstr(default_msg, APR_EOL_STR APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Description of fields to fill in above: 76 columns --|" APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> PR: If and which Problem Report is related." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Submitted by: If someone else sent in the change." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Reported by: If someone else reported the issue." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Reviewed by: If someone else reviewed your modification." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Approved by: If you needed approval for this commit." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Obtained from: If the change is from a third party." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> MFC after: N [day[s]|week[s]|month[s]]. Request a reminder email." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> MFH: Ports tree branch name. Request approval for merge." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Relnotes: Set to 'yes' for mention in release notes." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Security: Vulnerability reference (one per line) or description." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Sponsored by: If the change was sponsored by an organization (each collaborator)." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Differential Revision: https://reviews.freebsd.org/D### (*full* phabric URL needed)." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, "> Empty fields above will be automatically removed." APR_EOL_STR);
++ svn_stringbuf_appendcstr(default_msg, APR_EOL_STR);
+
+ *tmp_file = NULL;
+ if (lmb->message)
+@@ -362,6 +475,7 @@
+ /* Strip off the EOF marker text and the junk that follows it. */
+ truncate_buffer_at_prefix(&(log_msg_str->len), (char *)log_msg_str->data,
+ EDITOR_EOF_PREFIX);
++ cleanmsg(NULL, (char*)log_msg_str->data);
+
+ *log_msg = log_msg_str->data;
+ return SVN_NO_ERROR;
+@@ -472,6 +586,13 @@
+ if (message)
+ truncate_buffer_at_prefix(&message->len, message->data,
+ EDITOR_EOF_PREFIX);
++ /*
++ * Since we're adding freebsd-specific tokens to the log message,
++ * clean out any leftovers to avoid accidently sending them to other
++ * projects that won't be expecting them.
++ */
++ if (message)
++ cleanmsg(&message->len, message->data);
+
+ if (message)
+ {
diff --git a/devel/subversion-lts/files/extra-patch-svnserve-wrapper b/devel/subversion-lts/files/extra-patch-svnserve-wrapper
new file mode 100644
index 000000000000..b06f5714ba3e
--- /dev/null
+++ b/devel/subversion-lts/files/extra-patch-svnserve-wrapper
@@ -0,0 +1,11 @@
+--- build-outputs.mk.orig 2015-10-15 01:24:35.493881000 +0300
++++ build-outputs.mk 2015-10-15 01:24:47.968766000 +0300
+@@ -1115,7 +1115,7 @@
+
+ cd subversion/svnrdump ; $(INSTALL_BIN) svnrdump$(EXEEXT) $(DESTDIR)$(bindir)/svnrdump$(EXEEXT)
+
+- cd subversion/svnserve ; $(INSTALL_BIN) svnserve$(EXEEXT) $(DESTDIR)$(bindir)/svnserve$(EXEEXT)
++ cd subversion/svnserve ; $(INSTALL_BIN) svnserve$(EXEEXT) $(DESTDIR)$(bindir)/svnserve.bin$(EXEEXT)
+
+ cd subversion/svnsync ; $(INSTALL_BIN) svnsync$(EXEEXT) $(DESTDIR)$(bindir)/svnsync$(EXEEXT)
+
diff --git a/devel/subversion-lts/files/patch-Makefile.in b/devel/subversion-lts/files/patch-Makefile.in
new file mode 100644
index 000000000000..e3db9ed8bb1e
--- /dev/null
+++ b/devel/subversion-lts/files/patch-Makefile.in
@@ -0,0 +1,11 @@
+--- Makefile.in.orig 2015-09-18 15:56:29.000000000 +0300
++++ Makefile.in 2015-10-15 01:29:59.889146000 +0300
+@@ -86,7 +86,7 @@
+ swig_pydir_extra = @libdir@/svn-python/svn
+ swig_pldir = @libdir@/svn-perl
+ swig_rbdir = $(SWIG_RB_SITE_ARCH_DIR)/svn/ext
+-toolsdir = @bindir@/svn-tools
++toolsdir = @bindir@
+
+ # where to install pkg-config files
+ pkgconfig_dir = $(datadir)/pkgconfig
diff --git a/devel/subversion-lts/files/patch-build-outputs.mk b/devel/subversion-lts/files/patch-build-outputs.mk
new file mode 100644
index 000000000000..d0b980e9ce5f
--- /dev/null
+++ b/devel/subversion-lts/files/patch-build-outputs.mk
@@ -0,0 +1,17 @@
+--- build-outputs.mk.orig 2015-10-15 01:24:35.493881000 +0300
++++ build-outputs.mk 2015-10-15 01:25:35.653321000 +0300
+@@ -1316,11 +1316,11 @@
+
+ install-tools: tools/diff/diff$(EXEEXT) tools/diff/diff3$(EXEEXT) tools/diff/diff4$(EXEEXT) tools/dev/fsfs-access-map$(EXEEXT) tools/server-side/mod_dontdothat/mod_dontdothat.la tools/server-side/svn-populate-node-origins-index$(EXEEXT) tools/server-side/svnauthz$(EXEEXT) tools/server-side/svnauthz-validate$(EXEEXT) tools/dev/svnraisetreeconflict/svnraisetreeconflict$(EXEEXT) tools/dev/x509-parser$(EXEEXT)
+ $(MKDIR) $(DESTDIR)$(toolsdir)
+- cd tools/diff ; $(INSTALL_TOOLS) diff$(EXEEXT) $(DESTDIR)$(toolsdir)/diff$(EXEEXT)
++ cd tools/diff ; $(INSTALL_TOOLS) diff$(EXEEXT) $(DESTDIR)$(toolsdir)/svndiff$(EXEEXT)
+
+- cd tools/diff ; $(INSTALL_TOOLS) diff3$(EXEEXT) $(DESTDIR)$(toolsdir)/diff3$(EXEEXT)
++ cd tools/diff ; $(INSTALL_TOOLS) diff3$(EXEEXT) $(DESTDIR)$(toolsdir)/svndiff3$(EXEEXT)
+
+- cd tools/diff ; $(INSTALL_TOOLS) diff4$(EXEEXT) $(DESTDIR)$(toolsdir)/diff4$(EXEEXT)
++ cd tools/diff ; $(INSTALL_TOOLS) diff4$(EXEEXT) $(DESTDIR)$(toolsdir)/svndiff4$(EXEEXT)
+
+ cd tools/dev ; $(INSTALL_TOOLS) fsfs-access-map$(EXEEXT) $(DESTDIR)$(toolsdir)/fsfs-access-map$(EXEEXT)
+
diff --git a/devel/subversion-lts/files/pkg-message.in b/devel/subversion-lts/files/pkg-message.in
new file mode 100644
index 000000000000..fb11b255c24b
--- /dev/null
+++ b/devel/subversion-lts/files/pkg-message.in
@@ -0,0 +1,8 @@
+[
+{ type: install
+ message: <<EOM
+The subversion dav modules are no longer activated in httpd.conf!
+There is now a dedicated modules file in %%APACHEETCDIR%%/modules.d
+EOM
+}
+]
diff --git a/devel/subversion-lts/files/svnserve.in b/devel/subversion-lts/files/svnserve.in
new file mode 100644
index 000000000000..29b1df8c838c
--- /dev/null
+++ b/devel/subversion-lts/files/svnserve.in
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# svnserve.sh for rc.d usage (c) 2005 Thomas E. Spanjaard.
+# $Id$
+
+# PROVIDE: svnserve
+# REQUIRE: DAEMON
+# BEFORE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following line to /etc/rc.conf to enable SVNServe:
+#
+# svnserve_enable="YES"
+# # optional
+# svnserve_flags="-d --listen-port=3690 --listen-host 0.0.0.0"
+# svnserve_data="/usr/local/repositories"
+# svnserve_user="svn"
+# svnserve_group="svn"
+#
+# Note:
+# svnserve bind per default at the ipv6 address!
+# If you want svnserve binding at ipv4 address, you have
+# to use option 'svnserve_flags' with --listen-host parameter
+
+. /etc/rc.subr
+
+# Set some defaults
+svnserve_enable=${svnserve_enable:-"NO"}
+svnserve_flags=${svnserve_flags:-"-d --listen-port=3690 --listen-host 0.0.0.0"}
+svnserve_data=${svnserve_data:-"/home/svn/repos"}
+svnserve_user=${svnserve_user:-"svn"}
+svnserve_group=${svnserve_group:-"svn"}
+
+name=svnserve
+rcvar=svnserve_enable
+load_rc_config $name
+command=%%PREFIX%%/bin/svnserve%%SVNSERVE_BIN_EXT%%
+command_args="-r ${svnserve_data}"
+
+run_rc_command "$1"
diff --git a/devel/subversion-lts/files/svnserve.wrapper b/devel/subversion-lts/files/svnserve.wrapper
new file mode 100644
index 000000000000..92fffc384652
--- /dev/null
+++ b/devel/subversion-lts/files/svnserve.wrapper
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# $FreeBSD$
+
+SVNSERVE=$(dirname $(realpath $0))/svnserve.bin
+
+umask 002
+$SVNSERVE "$@"
+
diff --git a/devel/subversion-lts/pkg-descr b/devel/subversion-lts/pkg-descr
new file mode 100644
index 000000000000..44798a3fa2b2
--- /dev/null
+++ b/devel/subversion-lts/pkg-descr
@@ -0,0 +1,6 @@
+Subversion is a version control system designed to be as similar to cvs(1)
+as possible, while fixing many outstanding problems with cvs(1).
+
+This port contains LTS release.
+
+WWW: http://subversion.apache.org/
diff --git a/devel/subversion-lts/pkg-plist b/devel/subversion-lts/pkg-plist
new file mode 100644
index 000000000000..673a16679f70
--- /dev/null
+++ b/devel/subversion-lts/pkg-plist
@@ -0,0 +1,472 @@
+%%TOOLS%%bin/fsfs-access-map
+%%TOOLS%%bin/fsfs-stats
+bin/svn
+%%TOOLS%%bin/svn-mergeinfo-normalizer
+%%TOOLS%%bin/svn-populate-node-origins-index
+bin/svnadmin
+%%TOOLS%%bin/svnauthz
+%%TOOLS%%bin/svnauthz-validate
+%%TOOLS%%bin/svnbench
+%%TOOLS%%bin/svnconflict
+%%TOOLS%%bin/svndiff
+%%TOOLS%%bin/svndiff3
+%%TOOLS%%bin/svndiff4
+bin/svndumpfilter
+bin/svnfsfs
+bin/svnlook
+%%TOOLS%%bin/svnmover
+bin/svnmucc
+%%TOOLS%%bin/svnraisetreeconflict
+bin/svnrdump
+%%NO_SVNSERVE_WRAPPER%%bin/svnserve
+%%SVNSERVE_WRAPPER%%bin/svnserve.bin
+%%SVNSERVE_WRAPPER%%@sample bin/svnserve.sample
+bin/svnsync
+bin/svnversion
+%%TOOLS%%bin/x509-parser
+include/subversion-1/mod_authz_svn.h
+include/subversion-1/mod_dav_svn.h
+include/subversion-1/svn-revision.txt
+include/subversion-1/svn_auth.h
+include/subversion-1/svn_base64.h
+include/subversion-1/svn_cache_config.h
+include/subversion-1/svn_checksum.h
+include/subversion-1/svn_client.h
+include/subversion-1/svn_cmdline.h
+include/subversion-1/svn_compat.h
+include/subversion-1/svn_config.h
+include/subversion-1/svn_ctype.h
+include/subversion-1/svn_dav.h
+include/subversion-1/svn_delta.h
+include/subversion-1/svn_diff.h
+include/subversion-1/svn_dirent_uri.h
+include/subversion-1/svn_dso.h
+include/subversion-1/svn_error.h
+include/subversion-1/svn_error_codes.h
+include/subversion-1/svn_fs.h
+include/subversion-1/svn_hash.h
+include/subversion-1/svn_io.h
+include/subversion-1/svn_iter.h
+include/subversion-1/svn_md5.h
+include/subversion-1/svn_mergeinfo.h
+include/subversion-1/svn_nls.h
+include/subversion-1/svn_opt.h
+include/subversion-1/svn_path.h
+include/subversion-1/svn_pools.h
+include/subversion-1/svn_props.h
+include/subversion-1/svn_quoprint.h
+include/subversion-1/svn_ra.h
+include/subversion-1/svn_ra_svn.h
+include/subversion-1/svn_repos.h
+include/subversion-1/svn_sorts.h
+include/subversion-1/svn_string.h
+include/subversion-1/svn_subst.h
+include/subversion-1/svn_time.h
+include/subversion-1/svn_types.h
+include/subversion-1/svn_user.h
+include/subversion-1/svn_utf.h
+include/subversion-1/svn_version.h
+include/subversion-1/svn_wc.h
+include/subversion-1/svn_x509.h
+include/subversion-1/svn_xml.h
+lib/libsvn_client-1.a
+%%NO_STATIC%%lib/libsvn_client-1.so
+%%NO_STATIC%%lib/libsvn_client-1.so.0
+%%NO_STATIC%%lib/libsvn_client-1.so.0.0.0
+lib/libsvn_delta-1.a
+%%NO_STATIC%%lib/libsvn_delta-1.so
+%%NO_STATIC%%lib/libsvn_delta-1.so.0
+%%NO_STATIC%%lib/libsvn_delta-1.so.0.0.0
+lib/libsvn_diff-1.a
+%%NO_STATIC%%lib/libsvn_diff-1.so
+%%NO_STATIC%%lib/libsvn_diff-1.so.0
+%%NO_STATIC%%lib/libsvn_diff-1.so.0.0.0
+lib/libsvn_fs-1.a
+%%NO_STATIC%%lib/libsvn_fs-1.so
+%%NO_STATIC%%lib/libsvn_fs-1.so.0
+%%NO_STATIC%%lib/libsvn_fs-1.so.0.0.0
+%%BDB%%lib/libsvn_fs_base-1.a
+%%NO_STATIC%%%%BDB%%lib/libsvn_fs_base-1.so
+%%NO_STATIC%%%%BDB%%lib/libsvn_fs_base-1.so.0
+%%NO_STATIC%%%%BDB%%lib/libsvn_fs_base-1.so.0.0.0
+lib/libsvn_fs_fs-1.a
+%%NO_STATIC%%lib/libsvn_fs_fs-1.so
+%%NO_STATIC%%lib/libsvn_fs_fs-1.so.0
+%%NO_STATIC%%lib/libsvn_fs_fs-1.so.0.0.0
+lib/libsvn_fs_util-1.a
+%%NO_STATIC%%lib/libsvn_fs_util-1.so
+%%NO_STATIC%%lib/libsvn_fs_util-1.so.0
+%%NO_STATIC%%lib/libsvn_fs_util-1.so.0.0.0
+lib/libsvn_fs_x-1.a
+%%NO_STATIC%%lib/libsvn_fs_x-1.so
+%%NO_STATIC%%lib/libsvn_fs_x-1.so.0
+%%NO_STATIC%%lib/libsvn_fs_x-1.so.0.0.0
+lib/libsvn_ra-1.a
+%%NO_STATIC%%lib/libsvn_ra-1.so
+%%NO_STATIC%%lib/libsvn_ra-1.so.0
+%%NO_STATIC%%lib/libsvn_ra-1.so.0.0.0
+lib/libsvn_ra_local-1.a
+%%NO_STATIC%%lib/libsvn_ra_local-1.so
+%%NO_STATIC%%lib/libsvn_ra_local-1.so.0
+%%NO_STATIC%%lib/libsvn_ra_local-1.so.0.0.0
+%%SERF%%lib/libsvn_ra_serf-1.a
+%%NO_STATIC%%%%SERF%%lib/libsvn_ra_serf-1.so
+%%NO_STATIC%%%%SERF%%lib/libsvn_ra_serf-1.so.0
+%%NO_STATIC%%%%SERF%%lib/libsvn_ra_serf-1.so.0.0.0
+lib/libsvn_ra_svn-1.a
+%%NO_STATIC%%lib/libsvn_ra_svn-1.so
+%%NO_STATIC%%lib/libsvn_ra_svn-1.so.0
+%%NO_STATIC%%lib/libsvn_ra_svn-1.so.0.0.0
+lib/libsvn_repos-1.a
+%%NO_STATIC%%lib/libsvn_repos-1.so
+%%NO_STATIC%%lib/libsvn_repos-1.so.0
+%%NO_STATIC%%lib/libsvn_repos-1.so.0.0.0
+lib/libsvn_subr-1.a
+%%NO_STATIC%%lib/libsvn_subr-1.so
+%%NO_STATIC%%lib/libsvn_subr-1.so.0
+%%NO_STATIC%%lib/libsvn_subr-1.so.0.0.0
+lib/libsvn_wc-1.a
+%%NO_STATIC%%lib/libsvn_wc-1.so
+%%NO_STATIC%%lib/libsvn_wc-1.so.0
+%%NO_STATIC%%lib/libsvn_wc-1.so.0.0.0
+libdata/pkgconfig/libsvn_client.pc
+libdata/pkgconfig/libsvn_delta.pc
+libdata/pkgconfig/libsvn_diff.pc
+libdata/pkgconfig/libsvn_fs.pc
+%%BDB%%libdata/pkgconfig/libsvn_fs_base.pc
+libdata/pkgconfig/libsvn_fs_fs.pc
+libdata/pkgconfig/libsvn_fs_util.pc
+libdata/pkgconfig/libsvn_fs_x.pc
+libdata/pkgconfig/libsvn_ra.pc
+libdata/pkgconfig/libsvn_ra_local.pc
+%%SERF%%libdata/pkgconfig/libsvn_ra_serf.pc
+libdata/pkgconfig/libsvn_ra_svn.pc
+libdata/pkgconfig/libsvn_repos.pc
+libdata/pkgconfig/libsvn_subr.pc
+libdata/pkgconfig/libsvn_wc.pc
+man/man1/svn.1.gz
+man/man1/svnadmin.1.gz
+man/man1/svndumpfilter.1.gz
+man/man1/svnlook.1.gz
+man/man1/svnmucc.1.gz
+man/man1/svnrdump.1.gz
+man/man1/svnsync.1.gz
+man/man1/svnversion.1.gz
+man/man5/svnserve.conf.5.gz
+man/man8/svnserve.8.gz
+%%NLS%%share/locale/de/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/es/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/fr/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/it/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/ja/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/ko/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/nb/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/pl/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/pt_BR/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/sv/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/zh_CN/LC_MESSAGES/subversion.mo
+%%NLS%%share/locale/zh_TW/LC_MESSAGES/subversion.mo
+%%DATADIR%%/backup/hot-backup.py
+%%DATADIR%%/bdb/erase-all-text-data.py
+%%DATADIR%%/bdb/skel.py
+%%DATADIR%%/bdb/svn-bdb-view.py
+%%DATADIR%%/bdb/svnfs.py
+%%DATADIR%%/bdb/whatis-rep.py
+%%DATADIR%%/buildbot/master/README
+%%DATADIR%%/buildbot/slaves/README
+%%DATADIR%%/buildbot/slaves/bb-openbsd/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/bb-openbsd/svncheck-bindings.sh
+%%DATADIR%%/buildbot/slaves/bb-openbsd/svncheck.sh
+%%DATADIR%%/buildbot/slaves/bb-openbsd/svnclean.sh
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/mount-ramdrive.c
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svncheck.sh
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnclean.sh
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/svnlog.sh
+%%DATADIR%%/buildbot/slaves/i686-debian-sarge1/unmount-ramdrive.c
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/mount-tmpfs.c
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/rebuild-svn-bits.sh
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/serf.patch
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svncheck.sh
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svncleanup.sh
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/svnenv.sh
+%%DATADIR%%/buildbot/slaves/svn-sparc-solaris/twisted.patch
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/list-svn-deps.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/svncheck-bindings.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/svncheck.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnclean.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-centos/svnlog.sh
+%%SERF%%%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnbuild.sh
+%%SERF%%%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svncheck.sh
+%%SERF%%%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnclean.sh
+%%SERF%%%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnlog.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared/svncheck.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared/svnclean.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx-gnu-shared/svnlog.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/mkramdisk.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/rmramdisk.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/setenv.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svncheck.sh
+%%DATADIR%%/buildbot/slaves/svn-x64-macosx/svnclean.sh
+%%DATADIR%%/buildbot/slaves/ubuntu-x64/svnbuild.sh
+%%DATADIR%%/buildbot/slaves/ubuntu-x64/svncheck-bindings.sh
+%%DATADIR%%/buildbot/slaves/ubuntu-x64/svncheck.sh
+%%DATADIR%%/buildbot/slaves/ubuntu-x64/svnclean.sh
+%%DATADIR%%/buildbot/slaves/ubuntu-x64/svnlog.sh
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svn-config.cmd.template
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-build.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-javahl.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-template.cmd
+%%DATADIR%%/buildbot/slaves/win32-SharpSvn/svntest-test.cmd
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/config.bat
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/do_all.bat
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/svnbuild.bat
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/svncheck.bat
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/svnclean.bat
+%%DATADIR%%/buildbot/slaves/win32-xp-VS2005/svnlog.bat
+%%DATADIR%%/buildbot/slaves/xp-vc60-ia32/config.bat.tmpl
+%%DATADIR%%/buildbot/slaves/xp-vc60-ia32/svnbuild.bat
+%%DATADIR%%/buildbot/slaves/xp-vc60-ia32/svncheck.bat
+%%DATADIR%%/buildbot/slaves/xp-vc60-ia32/svnclean.bat
+%%DATADIR%%/buildbot/slaves/xp-vc60-ia32/svnlog.bat
+%%DATADIR%%/client-side/bash_completion
+%%DATADIR%%/client-side/bash_completion_test
+%%DATADIR%%/client-side/change-svn-wc-format.py
+%%DATADIR%%/client-side/mergeinfo-sanitizer.py
+%%DATADIR%%/client-side/server-version.py
+%%DATADIR%%/client-side/svn-graph.pl
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/analyze-cmd.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/help-cmd.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/log.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/logic.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/missing-branches.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/normalize-cmd.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/remove-branches-cmd.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
+%%DATADIR%%/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c
+%%DATADIR%%/client-side/svn-ssl-fingerprints.sh
+%%DATADIR%%/client-side/svn-vendor.py
+%%DATADIR%%/client-side/svn-viewspec.py
+%%DATADIR%%/client-side/svnconflict/README
+%%DATADIR%%/client-side/svnconflict/svnconflict.c
+%%DATADIR%%/client-side/wcfind
+%%DATADIR%%/dev/analyze-svnlogs.py
+%%DATADIR%%/dev/aprerr.txt
+%%DATADIR%%/dev/benchmarks/RepoPerf/ClearMemory.cpp
+%%DATADIR%%/dev/benchmarks/RepoPerf/TimeWin.cpp
+%%DATADIR%%/dev/benchmarks/RepoPerf/copy_repo.py
+%%DATADIR%%/dev/benchmarks/RepoPerf/win_repo_bench.py
+%%DATADIR%%/dev/benchmarks/large_dirs/create_bigdir.sh
+%%DATADIR%%/dev/benchmarks/suite1/benchmark.py
+%%DATADIR%%/dev/benchmarks/suite1/cronjob
+%%DATADIR%%/dev/benchmarks/suite1/crontab.entry
+%%DATADIR%%/dev/benchmarks/suite1/generate_charts
+%%DATADIR%%/dev/benchmarks/suite1/run
+%%DATADIR%%/dev/benchmarks/suite1/run.bat
+%%DATADIR%%/dev/build-svn-deps-win.pl
+%%DATADIR%%/dev/check-license.py
+%%DATADIR%%/dev/contribulyze.py
+%%DATADIR%%/dev/datecheck.py
+%%DATADIR%%/dev/find-bad-style.py
+%%DATADIR%%/dev/find-control-statements.py
+%%DATADIR%%/dev/find-unmoved-deprecated.sh
+%%DATADIR%%/dev/fsfs-access-map.c
+%%DATADIR%%/dev/gdb-py/README
+%%DATADIR%%/dev/gdb-py/svndbg/__init__.py
+%%DATADIR%%/dev/gdb-py/svndbg/printers.py
+%%DATADIR%%/dev/gen-javahl-errors.py
+%%DATADIR%%/dev/gen-py-errors.py
+%%DATADIR%%/dev/gen_junit_report.py
+%%DATADIR%%/dev/gnuify-changelog.pl
+%%DATADIR%%/dev/graph-dav-servers.py
+%%DATADIR%%/dev/histogram.py
+%%DATADIR%%/dev/iz/defect.dem
+%%DATADIR%%/dev/iz/ff2csv.command
+%%DATADIR%%/dev/iz/ff2csv.py
+%%DATADIR%%/dev/iz/find-fix.py
+%%DATADIR%%/dev/iz/run-queries.sh
+%%DATADIR%%/dev/lock-check.py
+%%DATADIR%%/dev/log_revnum_change_asf.py
+%%DATADIR%%/dev/merge-graph.py
+%%DATADIR%%/dev/mergegraph/__init__.py
+%%DATADIR%%/dev/mergegraph/mergegraph.py
+%%DATADIR%%/dev/mergegraph/save_as_sh.py
+%%DATADIR%%/dev/min-includes.sh
+%%DATADIR%%/dev/mklog.py
+%%DATADIR%%/dev/mlpatch.py
+%%DATADIR%%/dev/normalize-dump.py
+%%DATADIR%%/dev/po-merge.py
+%%DATADIR%%/dev/prebuild-cleanup.sh
+%%DATADIR%%/dev/random-commits.py
+%%DATADIR%%/dev/remove-trailing-whitespace.sh
+%%DATADIR%%/dev/sbox-ospath.py
+%%DATADIR%%/dev/scramble-tree.py
+%%DATADIR%%/dev/stress.pl
+%%DATADIR%%/dev/svn-dev.el
+%%DATADIR%%/dev/svn-dev.vim
+%%DATADIR%%/dev/svn-entries.el
+%%DATADIR%%/dev/svn-merge-revs.py
+%%DATADIR%%/dev/svnmover/linenoise/LICENSE
+%%DATADIR%%/dev/svnmover/linenoise/README.markdown
+%%DATADIR%%/dev/svnmover/linenoise/linenoise.c
+%%DATADIR%%/dev/svnmover/linenoise/linenoise.h
+%%DATADIR%%/dev/svnmover/merge3.c
+%%DATADIR%%/dev/svnmover/ra.c
+%%DATADIR%%/dev/svnmover/scanlog.c
+%%DATADIR%%/dev/svnmover/svnmover.c
+%%DATADIR%%/dev/svnmover/svnmover.h
+%%DATADIR%%/dev/svnmover/util.c
+%%DATADIR%%/dev/svnqlite3-dump
+%%DATADIR%%/dev/svnraisetreeconflict/svnraisetreeconflict.c
+%%DATADIR%%/dev/trails.py
+%%DATADIR%%/dev/unix-build/Makefile.svn
+%%DATADIR%%/dev/unix-build/README
+%%DATADIR%%/dev/verify-history.py
+%%DATADIR%%/dev/warn-ignored-err.sh
+%%DATADIR%%/dev/wc-format.py
+%%DATADIR%%/dev/wc-ng/bump-to-19.py
+%%DATADIR%%/dev/wc-ng/count-progress.py
+%%DATADIR%%/dev/wc-ng/gather-data.sh
+%%DATADIR%%/dev/wc-ng/graph-data.py
+%%DATADIR%%/dev/wc-ng/populate-pristine.py
+%%DATADIR%%/dev/wc-ng/svn-wc-db-tester.c
+%%DATADIR%%/dev/which-error.py
+%%DATADIR%%/dev/windows-build/Makefile
+%%DATADIR%%/dev/windows-build/README
+%%DATADIR%%/dev/windows-build/document-version.pl
+%%DATADIR%%/dev/x509-parser.c
+%%DATADIR%%/diff/diff.c
+%%DATADIR%%/diff/diff3.c
+%%DATADIR%%/diff/diff4.c
+%%DATADIR%%/dist/README.advisory
+%%DATADIR%%/dist/README.backport
+%%DATADIR%%/dist/advisory.py
+%%DATADIR%%/dist/backport.pl
+%%DATADIR%%/dist/backport/__init__.py
+%%DATADIR%%/dist/backport/merger.py
+%%DATADIR%%/dist/backport/status.py
+%%DATADIR%%/dist/backport_tests.py
+%%DATADIR%%/dist/backport_tests_data/backport_accept.dump
+%%DATADIR%%/dist/backport_tests_data/backport_branch_with_original_revision.dump
+%%DATADIR%%/dist/backport_tests_data/backport_branches.dump
+%%DATADIR%%/dist/backport_tests_data/backport_indented_entry.dump
+%%DATADIR%%/dist/backport_tests_data/backport_multirevisions.dump
+%%DATADIR%%/dist/backport_tests_data/backport_two_approveds.dump
+%%DATADIR%%/dist/backport_tests_data/backport_unicode_entry.dump
+%%DATADIR%%/dist/backport_tests_pl.py
+%%DATADIR%%/dist/backport_tests_py.py
+%%DATADIR%%/dist/checksums.py
+%%DATADIR%%/dist/detect-conflicting-backports.py
+%%DATADIR%%/dist/dist.sh
+%%DATADIR%%/dist/extract-for-examination.sh
+%%DATADIR%%/dist/merge-approved-backports.py
+%%DATADIR%%/dist/nightly.sh
+%%DATADIR%%/dist/nominate.pl
+%%DATADIR%%/dist/rat-excludes
+%%DATADIR%%/dist/release.py
+%%DATADIR%%/dist/security/__init__.py
+%%DATADIR%%/dist/security/_gnupg.py
+%%DATADIR%%/dist/security/adviser.py
+%%DATADIR%%/dist/security/mailer.py
+%%DATADIR%%/dist/security/mailinglist.py
+%%DATADIR%%/dist/security/parser.py
+%%DATADIR%%/dist/templates/download.ezt
+%%DATADIR%%/dist/templates/rc-news.ezt
+%%DATADIR%%/dist/templates/rc-release-ann.ezt
+%%DATADIR%%/dist/templates/stable-news.ezt
+%%DATADIR%%/dist/templates/stable-release-ann.ezt
+%%DATADIR%%/dist/test.sh
+%%DATADIR%%/examples/ExampleAuthn.java
+%%DATADIR%%/examples/ExampleAuthnOld.java
+%%DATADIR%%/examples/ExampleAuthnVeryOld.java
+%%DATADIR%%/examples/SvnCLBrowse
+%%DATADIR%%/examples/blame.py
+%%DATADIR%%/examples/check-modified.py
+%%DATADIR%%/examples/dumpprops.py
+%%DATADIR%%/examples/get-location-segments.py
+%%DATADIR%%/examples/getfile.py
+%%DATADIR%%/examples/getlocks_test.c
+%%DATADIR%%/examples/geturl.py
+%%DATADIR%%/examples/headrev.c
+%%DATADIR%%/examples/info.rb
+%%DATADIR%%/examples/minimal_client.c
+%%DATADIR%%/examples/putfile.py
+%%DATADIR%%/examples/revplist.py
+%%DATADIR%%/examples/svnlog2html.rb
+%%DATADIR%%/examples/svnlook.py
+%%DATADIR%%/examples/svnlook.rb
+%%DATADIR%%/examples/svnput.c
+%%DATADIR%%/examples/svnserve-sgid.c
+%%DATADIR%%/examples/svnshell.py
+%%DATADIR%%/examples/svnshell.rb
+%%DATADIR%%/examples/testwrite.c
+%%DATADIR%%/examples/walk-config-auth.py
+%%DATADIR%%/hook-scripts/CVE-2017-9800-pre-commit.py
+%%DATADIR%%/hook-scripts/commit-access-control.cfg.example
+%%DATADIR%%/hook-scripts/commit-access-control.pl
+%%DATADIR%%/hook-scripts/commit-email.rb
+%%DATADIR%%/hook-scripts/control-chars.py
+%%DATADIR%%/hook-scripts/log-police.py
+%%DATADIR%%/hook-scripts/mailer/mailer.conf.example
+%%DATADIR%%/hook-scripts/mailer/mailer.py
+%%DATADIR%%/hook-scripts/mailer/tests/mailer-init.sh
+%%DATADIR%%/hook-scripts/mailer/tests/mailer-t1.output
+%%DATADIR%%/hook-scripts/mailer/tests/mailer-t1.sh
+%%DATADIR%%/hook-scripts/mailer/tests/mailer-tweak.py
+%%DATADIR%%/hook-scripts/mailer/tests/mailer.conf
+%%DATADIR%%/hook-scripts/persist-ephemeral-txnprops.py
+%%DATADIR%%/hook-scripts/reject-detected-sha1-collisions.sh
+%%DATADIR%%/hook-scripts/reject-known-sha1-collisions.sh
+%%DATADIR%%/hook-scripts/svn2feed.py
+%%DATADIR%%/hook-scripts/svnperms.conf.example
+%%DATADIR%%/hook-scripts/svnperms.py
+%%DATADIR%%/hook-scripts/validate-extensions.py
+%%DATADIR%%/hook-scripts/validate-files.conf.example
+%%DATADIR%%/hook-scripts/validate-files.py
+%%DATADIR%%/hook-scripts/verify-po.py
+%%DATADIR%%/po/l10n-report.py
+%%DATADIR%%/po/po-update.sh
+%%DATADIR%%/server-side/fsfs-reshard.py
+%%DATADIR%%/server-side/mod_dontdothat/README
+%%DATADIR%%/server-side/mod_dontdothat/mod_dontdothat.c
+%%DATADIR%%/server-side/svn-backup-dumps.py
+%%DATADIR%%/server-side/svn-populate-node-origins-index.c
+%%DATADIR%%/server-side/svn_server_log_parse.py
+%%DATADIR%%/server-side/svnauthz.c
+%%DATADIR%%/server-side/svnpredumpfilter.py
+%%DATADIR%%/server-side/svnpubsub/README.txt
+%%DATADIR%%/server-side/svnpubsub/commit-hook.py
+%%DATADIR%%/server-side/svnpubsub/daemonize.py
+%%DATADIR%%/server-side/svnpubsub/irkerbridge.py
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnpubsub
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnpubsub.debian
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnpubsub.freebsd
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnpubsub.solaris
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnwcsub
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnwcsub.debian
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnwcsub.freebsd
+%%DATADIR%%/server-side/svnpubsub/rc.d/svnwcsub.solaris
+%%DATADIR%%/server-side/svnpubsub/revprop-change-hook.py
+%%DATADIR%%/server-side/svnpubsub/svnpubsub.tac
+%%DATADIR%%/server-side/svnpubsub/svnpubsub/__init__.py
+%%DATADIR%%/server-side/svnpubsub/svnpubsub/client.py
+%%DATADIR%%/server-side/svnpubsub/svnpubsub/server.py
+%%DATADIR%%/server-side/svnpubsub/svnpubsub/util.py
+%%DATADIR%%/server-side/svnpubsub/svntweet.py
+%%DATADIR%%/server-side/svnpubsub/svnwcsub.conf.example
+%%DATADIR%%/server-side/svnpubsub/svnwcsub.py
+%%DATADIR%%/server-side/svnpubsub/testserver.py
+%%DATADIR%%/server-side/svnpubsub/watcher.py
+%%DATADIR%%/server-side/test_svn_server_log_parse.py
+%%DATADIR%%/xslt/svnindex.css
+%%DATADIR%%/xslt/svnindex.xsl
diff --git a/devel/viewvc/Makefile b/devel/viewvc/Makefile
new file mode 100644
index 000000000000..8387a30a432f
--- /dev/null
+++ b/devel/viewvc/Makefile
@@ -0,0 +1,70 @@
+# Created by: will
+# $FreeBSD$
+
+PORTNAME= viewvc
+DISTVERSION= 1.2.1
+PORTREVISION= 1
+CATEGORIES= devel python
+
+MAINTAINER= ohauer@FreeBSD.org
+COMMENT= Web-based Version Control Repository Browsing
+
+CONFLICTS_INSTALL= py[23][6-8]-viewvc-1.3*
+
+LICENSE= BSD2CLAUSE
+
+USES= cpe python:2.7
+USE_GITHUB= yes
+USE_RC_SUBR= viewvc
+
+NO_BUILD= yes
+NO_OPTIONS_SORT= yes
+OPTIONS_DEFINE= WEBSRV APMOD SVN
+OPTIONS_DEFAULT= WEBSRV APACHE SVN
+
+OPTIONS_SINGLE= WEBSRV APMOD
+OPTIONS_SINGLE_WEBSRV= APACHE LIGHTTPD
+OPTIONS_SINGLE_APMOD= MODWSGI
+
+WEBSRV_DESC= Enable web server support
+APMOD_DESC= depend on Apache module
+
+MODWSGI_DESC= Add mod_wsgi to the list of package dependencies
+
+APACHE_USE= APACHE_RUN=24+
+LIGHTTPD_RUN_DEPENDS= lighttpd:www/lighttpd
+MODWSGI_RUN_DEPENDS= ${APACHE_PKGNAMEPREFIX}${PYTHON_PKGNAMEPREFIX}mod_wsgi>=4.4.13:www/mod_wsgi4@${PY_FLAVOR}
+
+SVN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}subversion-lts>=0:devel/py-subversion@${PY_FLAVOR}
+
+RUN_DEPENDS+= ${PY_PYGMENTS}
+
+.include <bsd.port.options.mk>
+
+SUB_FILES= pkg-message
+SUB_LIST= PYTHON_CMD=${PYTHON_CMD} \
+ ECHO=${ECHO} EGREP=${EGREP} TOUCH=${TOUCH} \
+ CHOWN=${CHOWN} RM=${RM:Q}
+
+pre-everything::
+.if ${PORT_OPTIONS:MAPMOD} && !${PORT_OPTIONS:MAPACHE}
+IGNORE= apache module needs Apache server, please re-run 'make config' then choose WEBSRV and APACHE
+.endif
+
+post-patch:
+.for i in cvsgraph.conf mimetypes.conf viewvc.conf
+ ${MV} ${WRKSRC}/conf/${i}.dist ${WRKSRC}/conf/${i}.sample
+ ${REINPLACE_CMD} -e '/"${i}"/d' ${WRKSRC}/viewvc-install
+.endfor
+ ${REINPLACE_CMD} -e 's/conf.dist/conf.sample/g' \
+ ${WRKSRC}/viewvc-install
+# to much files, use own shebangfix
+ ${FIND} ${WRKSRC} -type f | ${GREP} -v -e 'png' -e 'images' \
+ | ${XARGS} ${SED} -i '' \
+ -e '1s|^\#![[:space:]]*/usr/bin/env python|\#!${PYTHON_CMD}|' \
+ -e '1s|^\#![[:space:]]*/usr/bin/python|\#!${PYTHON_CMD}|'
+
+do-install:
+ @(cd ${WRKSRC} && ${PYTHON_CMD} viewvc-install --prefix=${PREFIX}/${PORTNAME} --destdir="${STAGEDIR}" --clean-mode=false)
+
+.include <bsd.port.mk>
diff --git a/devel/viewvc/distinfo b/devel/viewvc/distinfo
new file mode 100644
index 000000000000..f58c474a8fdd
--- /dev/null
+++ b/devel/viewvc/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1587311591
+SHA256 (viewvc-viewvc-1.2.1_GH0.tar.gz) = 5fe1e16f986b51a2800d908683673b880684e90ae1611d98744187f0649634f5
+SIZE (viewvc-viewvc-1.2.1_GH0.tar.gz) = 361031
diff --git a/devel/viewvc/files/pkg-message.in b/devel/viewvc/files/pkg-message.in
new file mode 100644
index 000000000000..e12163bc856d
--- /dev/null
+++ b/devel/viewvc/files/pkg-message.in
@@ -0,0 +1,74 @@
+[
+{ type: install
+ message: <<EOM
+ To use ViewVC, modify the configuration file located at
+ %%PREFIX%%/viewvc/viewvc.conf.
+
+ If no webserver was selected during installation, then
+ a rc script for running ViewVC standalone is installed.
+ To enable the standalone ViewVC server in rc.conf use
+ parameter viewvc_enable="YES".
+
+ You can also adjust the user which runs the ViewVC standalone
+ server with the parameter "viewvc_user".
+
+ If you want to run the ViewVC standalone server with another
+ IP/PORT, use the parameter "viewvc_flags".
+
+ To see all available parameters, use the command
+ %%PREFIX%%/viewvc/bin/standalone.py --help
+
+
+ To use ViewVC with Apache or lighttpd as a CGI script,
+ see the following config examples.
+
+ Example config lines for Apache 2.4
+ ===================================
+ <IfModule wsgi_module>
+ WSGIRestrictSignal Off
+ </IfModule>
+
+ <IfModule !wsgi_module>
+ ScriptAlias "/viewvc" "%%PREFIX%%/viewvc/bin/cgi/viewvc.cgi"
+ </IfModule>
+
+ <IfModule wsgi_module>
+ WSGIScriptAlias "/viewvc" "%%PREFIX%%/viewvc/bin/wsgi/viewvc.wsgi"
+ </IfModule>
+
+ <Location /viewvc>
+ Options NONE +ExecCGI
+ </Location>
+
+ Example config lines for lighttpd
+ =================================
+ server.modules = (
+ "mod_alias",
+ "mod_access"
+ )
+
+ alias.url += ( "/viewvc" => "%%PREFIX%%/viewvc/bin/cgi" )
+
+ $HTTP["url"] =~ "^/viewvc/" {
+ index-file.names = ( "viewvc.cgi" )
+ cgi.assign = (
+ ".cgi" => "%%PYTHON_CMD%%",
+ )
+ }
+EOM
+}
+{
+ type: upgrade
+ maximum_version: "1.2.1"
+ message: <<EOM
+ Please review your vievc.conf, see viewvc.sample.conf
+ ======================================================
+ - the template path has changed
+ - the vhost notation has changed
+
+ Additional upgrade informations:
+ https://github.com/viewvc/viewvc/blob/master/docs/upgrading-howto.html
+
+EOM
+}
+]
diff --git a/devel/viewvc/files/viewvc.in b/devel/viewvc/files/viewvc.in
new file mode 100644
index 000000000000..064ff67ab917
--- /dev/null
+++ b/devel/viewvc/files/viewvc.in
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# $FreeBSD$
+#
+# PROVIDE: viewvc
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following line(s) to /etc/rc.conf to enable ViewVC:
+#
+# viewvc_enable="YES"
+# # optional
+# viewvc_flags="-h localhost -p PORT"
+# viewvc_user="www"
+#
+# To get available parameters and the default values, use the
+# command %%PREFIX%%/viewvc/bin/standalone.py --help
+# for more info.
+#
+# Note:
+# If you choose a listen port less then 1024 then you have
+# to use a privileged user.
+# If the user www cannot access your cvs/svn repository,
+# adjust the parameter viewvc_user and it should work.
+#
+# INFO:
+# ViewVC default tcp port: 49152
+# see http://viewvc.tigris.org/issues/show_bug.cgi?id=234
+
+. /etc/rc.subr
+
+name=viewvc
+rcvar=viewvc_enable
+load_rc_config $name
+
+# Set defaults
+viewvc_enable=${viewvc_enable:-"NO"}
+viewvc_flags=${viewvc_flags:-"-p 49152"}
+viewvc_user=${viewvc_user:-"www"}
+
+pidfile=/var/run/viewvc.pid
+command=%%PYTHON_CMD%%
+standalone=%%PREFIX%%/viewvc/bin/standalone.py
+
+start_precmd=viewvc_precmd
+start_cmd=viewvc_start
+stop_postcmd=viewvc_cleanup
+
+viewvc_precmd()
+{
+ # with param -d we get another pid so prevent this
+ %%ECHO%% "${viewvc_flags}" | %%EGREP%% -q "(^\-d| \-d)" 2>&1 > /dev/null
+ if [ $? -eq 0 ]; then
+ %%ECHO%% "Please remove parameter -d from viewvc_flags"
+ %%ECHO%%
+ return 1
+ fi
+}
+
+viewvc_start() {
+ echo "Starting viewvc."
+ %%TOUCH%% ${pidfile} && %%CHOWN%% ${viewvc_user} ${pidfile}
+ /usr/sbin/daemon -cf -p ${pidfile} -u ${viewvc_user} ${standalone} ${viewvc_flags}
+}
+
+viewvc_cleanup() {
+ [ -f ${pidfile} ] && %%RM%% ${pidfile}
+}
+
+run_rc_command "$1"
diff --git a/devel/viewvc/pkg-descr b/devel/viewvc/pkg-descr
new file mode 100644
index 000000000000..69e1fb0eee77
--- /dev/null
+++ b/devel/viewvc/pkg-descr
@@ -0,0 +1,8 @@
+ViewVC is a browser interface for CVS and Subversion version control
+repositories. It generates templatized HTML to present navigable directory,
+revision, and change log listings. It can display specific versions of files as
+well as diffs between those versions. Basically, ViewVC provides the bulk of the
+report-like functionality you expect out of your version control tool, but much
+more prettily than the average textual command-line program output.
+
+WWW: http://www.viewvc.org/
diff --git a/devel/viewvc/pkg-plist b/devel/viewvc/pkg-plist
new file mode 100644
index 000000000000..8250de615db1
--- /dev/null
+++ b/devel/viewvc/pkg-plist
@@ -0,0 +1,178 @@
+viewvc/bin/cgi/viewvc.cgi
+viewvc/bin/cvsdbadmin
+viewvc/bin/loginfo-handler
+viewvc/bin/make-database
+viewvc/bin/mod_python/.htaccess
+viewvc/bin/mod_python/handler.py
+viewvc/bin/mod_python/viewvc.py
+viewvc/bin/standalone.py
+viewvc/bin/svndbadmin
+viewvc/bin/wsgi/viewvc.fcgi
+viewvc/bin/wsgi/viewvc.wsgi
+@sample viewvc/cvsgraph.conf.sample
+viewvc/lib/accept.py
+viewvc/lib/accept.pyc
+viewvc/lib/blame.py
+viewvc/lib/blame.pyc
+viewvc/lib/common.py
+viewvc/lib/common.pyc
+viewvc/lib/compat_difflib.py
+viewvc/lib/compat_difflib.pyc
+viewvc/lib/compat_ndiff.py
+viewvc/lib/compat_ndiff.pyc
+viewvc/lib/config.py
+viewvc/lib/config.pyc
+viewvc/lib/cvsdb.py
+viewvc/lib/cvsdb.pyc
+viewvc/lib/dbi.py
+viewvc/lib/dbi.pyc
+viewvc/lib/debug.py
+viewvc/lib/debug.pyc
+viewvc/lib/ezt.py
+viewvc/lib/ezt.pyc
+viewvc/lib/idiff.py
+viewvc/lib/idiff.pyc
+viewvc/lib/popen.py
+viewvc/lib/popen.pyc
+viewvc/lib/sapi.py
+viewvc/lib/sapi.pyc
+viewvc/lib/vcauth/__init__.py
+viewvc/lib/vcauth/__init__.pyc
+viewvc/lib/vcauth/forbidden/__init__.py
+viewvc/lib/vcauth/forbidden/__init__.pyc
+viewvc/lib/vcauth/forbiddenre/__init__.py
+viewvc/lib/vcauth/forbiddenre/__init__.pyc
+viewvc/lib/vcauth/svnauthz/__init__.py
+viewvc/lib/vcauth/svnauthz/__init__.pyc
+viewvc/lib/vclib/__init__.py
+viewvc/lib/vclib/__init__.pyc
+viewvc/lib/vclib/ccvs/__init__.py
+viewvc/lib/vclib/ccvs/__init__.pyc
+viewvc/lib/vclib/ccvs/bincvs.py
+viewvc/lib/vclib/ccvs/bincvs.pyc
+viewvc/lib/vclib/ccvs/blame.py
+viewvc/lib/vclib/ccvs/blame.pyc
+viewvc/lib/vclib/ccvs/ccvs.py
+viewvc/lib/vclib/ccvs/ccvs.pyc
+viewvc/lib/vclib/ccvs/rcsparse/__init__.py
+viewvc/lib/vclib/ccvs/rcsparse/__init__.pyc
+viewvc/lib/vclib/ccvs/rcsparse/common.py
+viewvc/lib/vclib/ccvs/rcsparse/common.pyc
+viewvc/lib/vclib/ccvs/rcsparse/debug.py
+viewvc/lib/vclib/ccvs/rcsparse/debug.pyc
+viewvc/lib/vclib/ccvs/rcsparse/default.py
+viewvc/lib/vclib/ccvs/rcsparse/default.pyc
+viewvc/lib/vclib/ccvs/rcsparse/parse_rcs_file.py
+viewvc/lib/vclib/ccvs/rcsparse/parse_rcs_file.pyc
+viewvc/lib/vclib/ccvs/rcsparse/run-tests.py
+viewvc/lib/vclib/ccvs/rcsparse/run-tests.pyc
+viewvc/lib/vclib/ccvs/rcsparse/test-data/default,v
+viewvc/lib/vclib/ccvs/rcsparse/test-data/default.out
+viewvc/lib/vclib/ccvs/rcsparse/test-data/empty-file,v
+viewvc/lib/vclib/ccvs/rcsparse/test-data/empty-file.out
+viewvc/lib/vclib/ccvs/rcsparse/texttools.py
+viewvc/lib/vclib/ccvs/rcsparse/texttools.pyc
+viewvc/lib/vclib/svn/__init__.py
+viewvc/lib/vclib/svn/__init__.pyc
+viewvc/lib/vclib/svn/svn_ra.py
+viewvc/lib/vclib/svn/svn_ra.pyc
+viewvc/lib/vclib/svn/svn_repos.py
+viewvc/lib/vclib/svn/svn_repos.pyc
+viewvc/lib/viewvc.py
+viewvc/lib/viewvc.pyc
+viewvc/lib/win32popen.py
+viewvc/lib/win32popen.pyc
+@sample viewvc/mimetypes.conf.sample
+viewvc/templates/classic/diff.ezt
+viewvc/templates/classic/dir_new.ezt
+viewvc/templates/classic/directory.ezt
+viewvc/templates/classic/docroot/help.css
+viewvc/templates/classic/docroot/help_dirview.html
+viewvc/templates/classic/docroot/help_log.html
+viewvc/templates/classic/docroot/help_rootview.html
+viewvc/templates/classic/docroot/images/annotate.png
+viewvc/templates/classic/docroot/images/back.png
+viewvc/templates/classic/docroot/images/back_small.png
+viewvc/templates/classic/docroot/images/binary.png
+viewvc/templates/classic/docroot/images/broken.png
+viewvc/templates/classic/docroot/images/chalk.jpg
+viewvc/templates/classic/docroot/images/cvsgraph_16x16.png
+viewvc/templates/classic/docroot/images/cvsgraph_32x32.png
+viewvc/templates/classic/docroot/images/diff.png
+viewvc/templates/classic/docroot/images/dir.png
+viewvc/templates/classic/docroot/images/down.png
+viewvc/templates/classic/docroot/images/download.png
+viewvc/templates/classic/docroot/images/favicon.ico
+viewvc/templates/classic/docroot/images/feed-icon-16x16.jpg
+viewvc/templates/classic/docroot/images/forward.png
+viewvc/templates/classic/docroot/images/image.png
+viewvc/templates/classic/docroot/images/list.png
+viewvc/templates/classic/docroot/images/lock.png
+viewvc/templates/classic/docroot/images/log.png
+viewvc/templates/classic/docroot/images/text.png
+viewvc/templates/classic/docroot/images/up.png
+viewvc/templates/classic/docroot/images/view.png
+viewvc/templates/classic/docroot/images/viewvc-logo.png
+viewvc/templates/classic/docroot/styles.css
+viewvc/templates/classic/error.ezt
+viewvc/templates/classic/file.ezt
+viewvc/templates/classic/graph.ezt
+viewvc/templates/classic/include/diff_display.ezt
+viewvc/templates/classic/include/diff_form.ezt
+viewvc/templates/classic/include/dir_footer.ezt
+viewvc/templates/classic/include/dir_header.ezt
+viewvc/templates/classic/include/file_header.ezt
+viewvc/templates/classic/include/footer.ezt
+viewvc/templates/classic/include/header.ezt
+viewvc/templates/classic/include/log_footer.ezt
+viewvc/templates/classic/include/log_header.ezt
+viewvc/templates/classic/include/paging.ezt
+viewvc/templates/classic/include/pathrev_form.ezt
+viewvc/templates/classic/include/props.ezt
+viewvc/templates/classic/include/sort.ezt
+viewvc/templates/classic/log.ezt
+viewvc/templates/classic/log_table.ezt
+viewvc/templates/classic/query_form.ezt
+viewvc/templates/classic/query_results.ezt
+viewvc/templates/classic/revision.ezt
+viewvc/templates/classic/roots.ezt
+viewvc/templates/classic/rss.ezt
+viewvc/templates/default/diff.ezt
+viewvc/templates/default/directory.ezt
+viewvc/templates/default/docroot/help.css
+viewvc/templates/default/docroot/help_dirview.html
+viewvc/templates/default/docroot/help_log.html
+viewvc/templates/default/docroot/help_rootview.html
+viewvc/templates/default/docroot/images/back.png
+viewvc/templates/default/docroot/images/back_small.png
+viewvc/templates/default/docroot/images/binary.png
+viewvc/templates/default/docroot/images/broken.png
+viewvc/templates/default/docroot/images/cvs-logo.png
+viewvc/templates/default/docroot/images/dir.png
+viewvc/templates/default/docroot/images/down.png
+viewvc/templates/default/docroot/images/feed-icon-16x16.jpg
+viewvc/templates/default/docroot/images/forward.png
+viewvc/templates/default/docroot/images/image.png
+viewvc/templates/default/docroot/images/lock-icon.gif
+viewvc/templates/default/docroot/images/svn-logo.png
+viewvc/templates/default/docroot/images/text.png
+viewvc/templates/default/docroot/images/up.png
+viewvc/templates/default/docroot/images/viewvc-logo.png
+viewvc/templates/default/docroot/scripts.js
+viewvc/templates/default/docroot/styles.css
+viewvc/templates/default/error.ezt
+viewvc/templates/default/file.ezt
+viewvc/templates/default/graph.ezt
+viewvc/templates/default/include/diff_display.ezt
+viewvc/templates/default/include/diff_form.ezt
+viewvc/templates/default/include/footer.ezt
+viewvc/templates/default/include/header.ezt
+viewvc/templates/default/include/pathrev_form.ezt
+viewvc/templates/default/include/props.ezt
+viewvc/templates/default/log.ezt
+viewvc/templates/default/query_form.ezt
+viewvc/templates/default/query_results.ezt
+viewvc/templates/default/revision.ezt
+viewvc/templates/default/roots.ezt
+viewvc/templates/default/rss.ezt
+@sample viewvc/viewvc.conf.sample
diff --git a/dns/Makefile b/dns/Makefile
index 58fb49f6ec7b..500fced48ed4 100644
--- a/dns/Makefile
+++ b/dns/Makefile
@@ -180,6 +180,7 @@
SUBDIR += py-adns
SUBDIR += py-aiodns
SUBDIR += py-cloudflare
+ SUBDIR += py-dns
SUBDIR += py-dns-lexicon
SUBDIR += py-dnspython
SUBDIR += py-dnspython2
diff --git a/dns/py-dns/Makefile b/dns/py-dns/Makefile
new file mode 100644
index 000000000000..489c3e7af095
--- /dev/null
+++ b/dns/py-dns/Makefile
@@ -0,0 +1,32 @@
+# Created by: Mark Linimon <linimon@lonesome.com>
+# $FreeBSD$
+
+PORTNAME= dns
+PORTVERSION= 2.3.6
+PORTREVISION= 2
+CATEGORIES= dns python
+MASTER_SITES= SF/py${PORTNAME}/py${PORTNAME}/py${PORTNAME}-${PORTVERSION}
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DISTNAME= pydns-${PORTVERSION}
+
+MAINTAINER= rm@FreeBSD.org
+COMMENT= DNS (Domain Name Service) library for Python
+
+LICENSE= CNRI
+LICENSE_NAME= CNRI LICENSE AGREEMENT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+PORTDOCS= README.txt README-guido.txt
+DOCSDIR= ${PREFIX}/share/doc/py-dns
+
+OPTIONS_DEFINE= DOCS
+
+post-install:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/dns/py-dns/distinfo b/dns/py-dns/distinfo
new file mode 100644
index 000000000000..99f466193e8b
--- /dev/null
+++ b/dns/py-dns/distinfo
@@ -0,0 +1,2 @@
+SHA256 (pydns-2.3.6.tar.gz) = d3cf6fc4ec088e934cf2dd4d71080efdb5c09ae79cbb2512427eb0fc393f2417
+SIZE (pydns-2.3.6.tar.gz) = 28220
diff --git a/dns/py-dns/files/patch-DNS-Lib.py b/dns/py-dns/files/patch-DNS-Lib.py
new file mode 100644
index 000000000000..c2e84e31f28a
--- /dev/null
+++ b/dns/py-dns/files/patch-DNS-Lib.py
@@ -0,0 +1,15 @@
+--- DNS/Lib.py.orig 2011-03-16 23:06:39.000000000 +0300
++++ DNS/Lib.py 2011-03-29 12:42:45.000000000 +0400
+@@ -706,10 +706,10 @@
+ # added identifying header to top of each file
+ #
+ # Revision 1.7 2001/07/19 07:50:44 anthony
+-# Added SRV (RFC 2782) support. Code from Michael Ströder.
++# Added SRV (RFC 2782) support. Code from Michael Ströder.
+ #
+ # Revision 1.6 2001/07/19 07:39:18 anthony
+-# 'type' -> 'rrtype' in getRRheader(). Fix from Michael Ströder.
++# 'type' -> 'rrtype' in getRRheader(). Fix from Michael Ströder.
+ #
+ # Revision 1.5 2001/07/19 07:34:19 anthony
+ # oops. glitch in storeRR (fixed now).
diff --git a/dns/py-dns/files/patch-DNS-Type.py b/dns/py-dns/files/patch-DNS-Type.py
new file mode 100644
index 000000000000..78fdfc4693ff
--- /dev/null
+++ b/dns/py-dns/files/patch-DNS-Type.py
@@ -0,0 +1,11 @@
+--- DNS/Type.py.orig 2011-03-16 23:06:39.000000000 +0300
++++ DNS/Type.py 2011-03-29 12:44:27.000000000 +0400
+@@ -74,7 +74,7 @@
+ # added identifying header to top of each file
+ #
+ # Revision 1.3 2001/07/19 07:38:28 anthony
+-# added type code for SRV. From Michael Ströder.
++# added type code for SRV. From Michael Ströder.
+ #
+ # Revision 1.2 2001/07/19 06:57:07 anthony
+ # cvs keywords added
diff --git a/dns/py-dns/pkg-descr b/dns/py-dns/pkg-descr
new file mode 100644
index 000000000000..7f8467fc8959
--- /dev/null
+++ b/dns/py-dns/pkg-descr
@@ -0,0 +1,5 @@
+This directory contains a Python module that implements a DNS (Domain
+Name Server) client, plus additional modules that define some symbolic
+constants used by DNS (dnstype, dnsclass, dnsopcode).
+
+WWW: http://pydns.sourceforge.net/
diff --git a/editors/Makefile b/editors/Makefile
index d8ba795ba7ae..de48d57562f6 100644
--- a/editors/Makefile
+++ b/editors/Makefile
@@ -10,6 +10,7 @@
SUBDIR += aewan
SUBDIR += apel
SUBDIR += asedit
+ SUBDIR += atom
SUBDIR += beav
SUBDIR += biew
SUBDIR += bitedit
diff --git a/editors/atom/Makefile b/editors/atom/Makefile
new file mode 100644
index 000000000000..418f657eeabc
--- /dev/null
+++ b/editors/atom/Makefile
@@ -0,0 +1,261 @@
+# $FreeBSD$
+
+PORTNAME= atom
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.48.0
+CATEGORIES= editors
+MASTER_SITES= https://nodejs.org/dist/v${APM_NODE_VER}/:node \
+ https://github.com/tagattie/FreeBSD-Atom/releases/download/v1.42.0/:jasmine_tagged \
+ https://github.com/tagattie/FreeBSD-Atom/releases/download/${DISTVERSIONFULL}/:npm_cache
+PKGNAMESUFFIX= -ide
+DISTFILES= node-v${APM_NODE_VER}${EXTRACT_SUFX}:node \
+ jasmine-tagged-1.1.4.tar.gz:jasmine_tagged \
+ atom-npm-cache-${DISTVERSION}${EXTRACT_SUFX}:npm_cache \
+ atom-apm-cache-${DISTVERSION}${EXTRACT_SUFX}:npm_cache
+
+MAINTAINER= tagattie@FreeBSD.org
+COMMENT= Hackable text editor for the 21st century
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE.md
+
+ONLY_FOR_ARCHS= amd64
+
+BUILD_DEPENDS= zip:archivers/zip \
+ electron${ELECTRON_VER_MAJOR}:devel/electron${ELECTRON_VER_MAJOR} \
+ bash:shells/bash \
+ rg:textproc/ripgrep \
+ node10>:www/node10 \
+ npm-node10>0:www/npm-node10
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libatspi.so:accessibility/at-spi2-core \
+ libsnappy.so:archivers/snappy \
+ libasound.so:audio/alsa-lib \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libdbus-1.so:devel/dbus \
+ libinotify.so:devel/libinotify \
+ libnotify.so:devel/libnotify \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libpcre2-8.so:devel/pcre2 \
+ libre2.so:devel/re2 \
+ liblcms2.so:graphics/lcms2 \
+ libdrm.so:graphics/libdrm \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libvpx.so:multimedia/libvpx \
+ libopenh264.so:multimedia/openh264 \
+ libcups.so:print/cups \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+RUN_DEPENDS= git:devel/git \
+ xdg-open:devel/xdg-utils \
+ bash:shells/bash
+TEST_DEPENDS= bash:shells/bash
+
+USES= desktop-file-utils gl gnome jpeg localbase:ldflags pkgconfig \
+ python:2.7 shebangfix xorg
+
+USE_GITHUB= yes
+
+.include "${.CURDIR}/../../devel/electron5/Makefile.version"
+# See ${WRKSRC}/apm/node_modules/atom-package-manager/BUNDLED_NODE_VERSION for APM_NODE_VER
+APM_NODE_VER= 10.20.1
+
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xkbfile \
+ xrandr xrender xscrnsaver xtst
+USE_GL= gl glesv2
+USE_GNOME= atk cairo pango gtk30 libxml2 libxslt
+INSTALLS_ICONS= yes
+
+USE_LDCONFIG= ${DATADIR}
+
+SHEBANG_FILES= atom.sh
+SHEBANG_FILES_APM= apm/node_modules/atom-package-manager/bin/apm \
+ apm/node_modules/atom-package-manager/bin/npm \
+ apm/node_modules/atom-package-manager/script/postinstall.sh \
+ apm/node_modules/atom-package-manager/node_modules/npm/configure \
+ apm/node_modules/atom-package-manager/node_modules/npm/lib/utils/completion.sh \
+ apm/node_modules/atom-package-manager/node_modules/npm/node_modules/node-gyp/gyp/gyp \
+ apm/node_modules/atom-package-manager/node_modules/npm/node_modules/node-gyp/gyp/samples/samples \
+ apm/node_modules/atom-package-manager/node_modules/npm/scripts/clean-old.sh \
+ apm/node_modules/atom-package-manager/node_modules/npm/scripts/dep-update \
+ apm/node_modules/atom-package-manager/node_modules/npm/scripts/dev-dep-update \
+ apm/node_modules/atom-package-manager/node_modules/npm/scripts/relocate.sh \
+
+pre-everything::
+ @${ECHO_MSG} ""
+ @${ECHO_MSG} "The limit imposed by poudriere(8) for the maximum number of files allowed to be"
+ @${ECHO_MSG} "opened by a jail (default 1024) is exceeded during the build of ${PORTNAME}."
+ @${ECHO_MSG} "To successfully build ${PORTNAME} with poudriere(8), you must add the following"
+ @${ECHO_MSG} "line to poudriere.conf:"
+ @${ECHO_MSG} "MAX_FILES_${PORTNAME}${PKGNAMESUFFIX:C/-/_/}=4096"
+ @${ECHO_MSG} ""
+
+post-extract:
+ # copy linux keymaps and menus files
+ cd ${WRKSRC}/keymaps && ${CP} linux.cson freebsd.cson
+ cd ${WRKSRC}/menus && ${CP} linux.cson freebsd.cson
+
+post-patch:
+ ${REINPLACE_CMD} -E 's|("electronVersion":.*").*(")|\1${ELECTRON_VER}\2|' \
+ ${WRKSRC}/package.json
+ ${REINPLACE_CMD} -e 's|/usr/share|${PREFIX}/share|g' \
+ ${WRKSRC}/script/lib/install-application.js
+ ${REINPLACE_CMD} -e 's|<%= installDir %>|${PREFIX}|' \
+ ${WRKSRC}/resources/linux/atom.desktop.in
+ # Fix build with clang11: https://github.com/nodejs/node/commit/89a306bca9088a79aed3fb3fd511fff82178d3cb.patch
+ ${REINPLACE_CMD} -e 's|context->VARARGS()|context->VARARGS() != nullptr|g' \
+ ${WRKDIR}/node-v10.20.1/deps/v8/src/torque/ast-generator.cc
+
+pre-build: build-apm-node bootstrap-script bootstrap-apm bootstrap-atom clean-backup
+build-apm-node:
+ for p in ${PATCHDIR}/node/patch-*; do \
+ ${PATCH} -p0 -d ${WRKDIR}/node-v${APM_NODE_VER} < $${p}; \
+ done
+ cd ${WRKDIR}/node-v${APM_NODE_VER} && \
+ ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} ./configure && \
+ ${SETENV} ${MAKE_ENV} ${BSDMAKE} -j ${MAKE_JOBS_NUMBER}
+bootstrap-script:
+ cd ${WRKSRC}/script && ${SETENV} ${MAKE_ENV} \
+ npm install --ignore-scripts --offline
+ for p in ${PATCHDIR}/script/patch-*; do \
+ ${PATCH} -p0 -d ${WRKSRC} < $${p}; \
+ done
+ cd ${WRKSRC}/script && ${SETENV} ${MAKE_ENV} \
+ npm_config_build_from_source=true \
+ npm_config_offline=true \
+ npm rebuild --nodedir=${LOCALBASE}
+bootstrap-apm:
+ cd ${WRKSRC}/apm && ${SETENV} ${MAKE_ENV} \
+ npm install --global-style --ignore-scripts --offline
+ for p in ${PATCHDIR}/apm/patch-*; do \
+ ${PATCH} -p0 -d ${WRKSRC} < $${p}; \
+ done
+ cd ${WRKSRC} && ${FIND} ${SHEBANG_FILES_APM} -type f \
+ -exec ${SED} -i '' -e 's|#!/bin/bash|#!${LOCALBASE}/bin/bash|' \
+ -e 's|#!/usr/bin/python|#!${PYTHON_CMD}|' \
+ -e 's|exec python|exec ${PYTHON_VERSION}|' {} ';'
+ cd ${WRKSRC}/apm/node_modules/atom-package-manager/node_modules/npm/node_modules/node-gyp && \
+ ${FIND} . -type f -name '*.py' -exec ${SED} -i '' \
+ -e 's|#!/usr/bin/env python|#!${PYTHON_CMD}|' {} ';'
+ ${CP} ${WRKDIR}/node-v${APM_NODE_VER}/out/Release/node \
+ ${WRKSRC}/apm/node_modules/atom-package-manager/bin && \
+ ${STRIP_CMD} ${WRKSRC}/apm/node_modules/atom-package-manager/bin/node
+ cd ${WRKSRC}/apm/node_modules/atom-package-manager && \
+ ${SETENV} ${MAKE_ENV} \
+ npm_config_build_from_source=true \
+ npm_config_offline=true \
+ npm_config_target=${APM_NODE_VER} \
+ npm rebuild --nodedir=${WRKDIR}/node-v${APM_NODE_VER} && \
+ ${SETENV} ${MAKE_ENV} \
+ npm_config_build_from_source=true \
+ npm_config_offline=true \
+ npm_config_target=${APM_NODE_VER} \
+ npm dedupe --nodedir=${WRKDIR}/node-v${APM_NODE_VER}
+bootstrap-atom:
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ATOM_RESOURCE_PATH=${WRKSRC} \
+ npm_config_target=${ELECTRON_VER} \
+ npm_config_ignore_scripts=true \
+ npm_config_offline=true \
+ ./apm/node_modules/atom-package-manager/bin/apm install
+ for p in ${PATCHDIR}/atom/patch-*; do \
+ ${PATCH} -p0 -d ${WRKSRC} < $${p}; \
+ done
+ ${MKDIR} ${WRKSRC}/node_modules/vscode-ripgrep/bin
+ ${CP} ${LOCALBASE}/bin/rg ${WRKSRC}/node_modules/vscode-ripgrep/bin
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ATOM_RESOURCE_PATH=${WRKSRC} \
+ npm_config_target=${ELECTRON_VER} \
+ npm_config_build_from_source=true \
+ npm_config_nodedir=${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR}/node_headers \
+ npm_config_offline=true \
+ ./apm/node_modules/atom-package-manager/bin/apm rebuild
+clean-backup:
+ cd ${WRKSRC} && ${FIND} . \( -name '*.bak' -o -name '*.orig' -o -name '*~' \) -print -delete
+
+do-build:
+ # setup download cache for electron-packager
+ ${MKDIR} ${WRKSRC}/electron
+ cd ${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR} && \
+ zip -q -r ${WRKSRC}/electron/electron-v${ELECTRON_VER}-freebsd-x64.zip .
+ cd ${WRKSRC}/electron && \
+ ${SHA256} -r *-v${ELECTRON_VER}-freebsd-*.zip | \
+ ${SED} -e 's/ / */' > SHASUMS256.txt-${ELECTRON_VER}
+ # build atom
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ npm_config_target=${ELECTRON_VER} \
+ npm_config_build_from_source=true \
+ npm_config_nodedir=${LOCALBASE}/share/electron${ELECTRON_VER_MAJOR}/node_headers \
+ npm_config_offline=true \
+ ./script/build --no-bootstrap
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} XDG_DATA_DIRS=${STAGEDIR}${PREFIX}/share \
+ npm_config_build_from_source=true \
+ npm_config_offline=true \
+ ./script/build --no-bootstrap --existing-binaries --install=${STAGEDIR}${PREFIX}
+.for f in chromedriver mksnapshot v8_context_snapshot_generator
+ ${RM} ${STAGEDIR}${DATADIR}/${f}
+.endfor
+ ${RM} -r ${STAGEDIR}${DATADIR}/node_headers
+ cd ${STAGEDIR}${DATADIR}/resources/app/apm && \
+ ${FIND} . -type f -name '*.node' -exec ${STRIP_CMD} {} ';'
+ cd ${STAGEDIR}${DATADIR}/resources/app.asar.unpacked && \
+ ${FIND} . -type f -name '*.node' -exec ${STRIP_CMD} {} ';'
+
+do-test:
+ # Note: Xvfb or something similar is necessary for headless testing
+ # core main process tests
+ cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ./script/test
+ # bundled package tests
+ cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ./script/test --package
+
+# Helper targets for port maintainers
+make-npm-cache:
+ # do "make patch" before executing this target
+ cd ${WRKDIR} && ${RM} -r .npm
+ cd ${WRKSRC}/script && \
+ ${SETENV} HOME=${WRKDIR} npm install --ignore-scripts
+ cd ${WRKSRC}/apm && \
+ ${SETENV} HOME=${WRKDIR} npm install --ignore-scripts
+ cd ${WRKDIR}/.npm && \
+ ${RM} -r _locks anonymous-cli-metrics.json
+ cd ${WRKDIR} && \
+ ${TAR} -czf atom-npm-cache-${DISTVERSION}${EXTRACT_SUFX} .npm
+
+make-apm-cache:
+ # do up to "make bootstrap-apm" before executing this target
+ cd ${WRKDIR} && ${RM} -r .atom
+ cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
+ ATOM_RESOURCE_PATH=${WRKSRC} \
+ npm_config_target=${ELECTRON_VER} \
+ npm_config_ignore_scripts=true \
+ ${WRKSRC}/apm/node_modules/atom-package-manager/bin/apm install
+ cd ${WRKSRC}/node_modules && \
+ for p in `${AWK} '/packageDependencies.*{/,/}/' ${WRKSRC}/package.json | \
+ ${SED} -e '1d; $$d' | ${AWK} -F ': ' '{print $$1}' | ${SED} -e 's/"//g'`; do \
+ ${ECHO_CMD} "Installing modules for $${p}"; \
+ cd ${WRKSRC}/node_modules/$${p} && ${SETENV} ${MAKE_ENV} \
+ ATOM_RESOURCE_PATH=${WRKSRC} \
+ npm_config_target=${ELECTRON_VER} \
+ npm_config_ignore_scripts=true \
+ ${WRKSRC}/apm/node_modules/atom-package-manager/bin/apm install; \
+ done
+ cd ${WRKDIR}/.atom && \
+ ${RM} -r .node-gyp packages
+ cd ${WRKDIR}/.atom/.apm && \
+ ${RM} -r .apmrc _locks anonymous-cli-metrics.json index-v5
+ cd ${WRKDIR} && \
+ ${TAR} -czf atom-apm-cache-${DISTVERSION}${EXTRACT_SUFX} .atom
+
+.include <bsd.port.mk>
diff --git a/editors/atom/distinfo b/editors/atom/distinfo
new file mode 100644
index 000000000000..697823f164ce
--- /dev/null
+++ b/editors/atom/distinfo
@@ -0,0 +1,11 @@
+TIMESTAMP = 1592293794
+SHA256 (node-v10.20.1.tar.gz) = ea39a70b715bfbd0281979c95a5b81136ffdc0e5bf66b1fd7dc3ef3473ce2c5a
+SIZE (node-v10.20.1.tar.gz) = 47181867
+SHA256 (jasmine-tagged-1.1.4.tar.gz) = 8988597858ddf9e9ba3333a19d8651691c8384117bf2e362e8a5ba193ed47585
+SIZE (jasmine-tagged-1.1.4.tar.gz) = 3071259
+SHA256 (atom-npm-cache-1.48.0.tar.gz) = 0fa90aabf0dae2d27947204b2a582c9adb8a779ee0b9653aac5cdc250ef6a5bc
+SIZE (atom-npm-cache-1.48.0.tar.gz) = 52247716
+SHA256 (atom-apm-cache-1.48.0.tar.gz) = 7ebd39b57102ce08c9a7a0ffe427aeecc2d69e9e799cf1efd75008d6de93d8eb
+SIZE (atom-apm-cache-1.48.0.tar.gz) = 108042065
+SHA256 (atom-atom-v1.48.0_GH0.tar.gz) = 107dda1915a8bbf0c7d0dfd9637ca15d6c0032ae260d82db5327a041d12c4465
+SIZE (atom-atom-v1.48.0_GH0.tar.gz) = 11943695
diff --git a/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_apm.js b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_apm.js
new file mode 100644
index 000000000000..c4290358cc20
--- /dev/null
+++ b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_apm.js
@@ -0,0 +1,11 @@
+--- apm/node_modules/atom-package-manager/lib/apm.js.orig 2019-12-27 05:56:26 UTC
++++ apm/node_modules/atom-package-manager/lib/apm.js
+@@ -72,7 +72,7 @@
+ }
+ return callback(`${appLocation}/Contents/Resources/app.asar`);
+ });
+- case 'linux':
++ case 'linux': case 'freebsd':
+ appLocation = '/usr/local/share/atom/resources/app.asar';
+ if (!fs.existsSync(appLocation)) {
+ appLocation = '/usr/share/atom/resources/app.asar';
diff --git a/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_auth.js b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_auth.js
new file mode 100644
index 000000000000..57f52e2e73c1
--- /dev/null
+++ b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_auth.js
@@ -0,0 +1,11 @@
+--- apm/node_modules/atom-package-manager/lib/auth.js.orig 2019-12-27 05:53:35 UTC
++++ apm/node_modules/atom-package-manager/lib/auth.js
+@@ -6,7 +6,7 @@
+ } catch (error1) {
+ error = error1;
+ // Gracefully handle keytar failing to load due to missing library on Linux
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ keytar = {
+ findPassword: function() {
+ return Promise.reject();
diff --git a/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_install.js b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_install.js
new file mode 100644
index 000000000000..59d979b90d7f
--- /dev/null
+++ b/editors/atom/files/apm/patch-apm_node__modules_atom-package-manager_lib_install.js
@@ -0,0 +1,11 @@
+--- apm/node_modules/atom-package-manager/lib/install.js.orig 2019-12-27 05:57:00 UTC
++++ apm/node_modules/atom-package-manager/lib/install.js
+@@ -159,7 +159,7 @@
+ case 'win32':
+ message += "\nYou can install Git by downloading, installing, and launching GitHub for Windows: https://windows.github.com\n";
+ break;
+- case 'linux':
++ case 'linux': case 'freebsd':
+ message += "\nYou can install Git from your OS package manager.\n";
+ }
+ message += "\nRun apm -v after installing Git to see what version has been detected.";
diff --git a/editors/atom/files/atom/patch-node__modules_ATatom_nsfw_binding.gyp b/editors/atom/files/atom/patch-node__modules_ATatom_nsfw_binding.gyp
new file mode 100644
index 000000000000..3770b7094e4a
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_ATatom_nsfw_binding.gyp
@@ -0,0 +1,12 @@
+--- node_modules/@atom/nsfw/binding.gyp.orig 1985-10-26 08:15:00 UTC
++++ node_modules/@atom/nsfw/binding.gyp
+@@ -97,6 +97,9 @@
+ ["OS=='freebsd'", {
+ "include_dirs": [
+ "/usr/local/include"
++ ],
++ "ldflags": [
++ "-L/usr/local/lib", "-linotify"
+ ]
+ }],
+ ]
diff --git a/editors/atom/files/atom/patch-node__modules_ATatom_watcher_binding.gyp b/editors/atom/files/atom/patch-node__modules_ATatom_watcher_binding.gyp
new file mode 100644
index 000000000000..025ec78486b8
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_ATatom_watcher_binding.gyp
@@ -0,0 +1,11 @@
+--- node_modules/@atom/watcher/binding.gyp.orig 1985-10-26 08:15:00 UTC
++++ node_modules/@atom/watcher/binding.gyp
+@@ -66,7 +66,7 @@
+ "src/worker/windows/windows_worker_platform.cpp"
+ ]
+ }],
+- ["OS=='linux'", {
++ ["OS=='linux' or OS=='freebsd'", {
+ "defines": [
+ 'PLATFORM_LINUX'
+ ],
diff --git a/editors/atom/files/atom/patch-node__modules_atom-keymap_lib_helpers.js b/editors/atom/files/atom/patch-node__modules_atom-keymap_lib_helpers.js
new file mode 100644
index 000000000000..7f4a5bf5e5a6
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_atom-keymap_lib_helpers.js
@@ -0,0 +1,20 @@
+--- node_modules/atom-keymap/lib/helpers.js.orig 1985-10-26 08:15:00 UTC
++++ node_modules/atom-keymap/lib/helpers.js
+@@ -218,7 +218,7 @@
+ if (KEY_NAMES_BY_KEYBOARD_EVENT_CODE[code] != null) {
+ key = KEY_NAMES_BY_KEYBOARD_EVENT_CODE[code];
+ }
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ if (code === 'NumpadDecimal' && !event.getModifierState('NumLock')) {
+ key = 'delete';
+ }
+@@ -257,7 +257,7 @@
+ altKey = false;
+ isAltModifiedKey = true;
+ }
+- } else if (process.platform === 'linux') {
++ } else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ nonAltModifiedKey = nonAltModifiedKeyForKeyboardEvent(event);
+ if (nonAltModifiedKey && (ctrlKey || altKey || metaKey)) {
+ key = nonAltModifiedKey;
diff --git a/editors/atom/files/atom/patch-node__modules_dugite_build_lib_git-environment.js b/editors/atom/files/atom/patch-node__modules_dugite_build_lib_git-environment.js
new file mode 100644
index 000000000000..8ace7478be54
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_dugite_build_lib_git-environment.js
@@ -0,0 +1,52 @@
+--- node_modules/dugite/build/lib/git-environment.js.orig 1985-10-26 08:15:00 UTC
++++ node_modules/dugite/build/lib/git-environment.js
+@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value:
+ const path = require("path");
+ function resolveEmbeddedGitDir() {
+ if (process.platform === 'darwin' ||
+- process.platform === 'linux' ||
++ process.platform === 'linux' || process.platform === 'freebsd' ||
+ process.platform === 'android' ||
+ process.platform === 'win32') {
+ const s = path.sep;
+@@ -23,6 +23,9 @@ function resolveGitDir() {
+ if (process.env.LOCAL_GIT_DIRECTORY != null) {
+ return path.resolve(process.env.LOCAL_GIT_DIRECTORY);
+ }
++ else if (process.platform === 'freebsd') {
++ return '/usr/local';
++ }
+ else {
+ return resolveEmbeddedGitDir();
+ }
+@@ -94,13 +97,13 @@ function setupEnvironment(environmentVariables) {
+ delete env.Path;
+ }
+ }
+- if (process.platform === 'darwin' || process.platform === 'linux') {
++ if (process.platform === 'darwin' || process.platform === 'linux' || process.platform === 'freebsd') {
+ // templates are used to populate your .git folder
+ // when a repository is initialized locally
+ const templateDir = `${gitDir}/share/git-core/templates`;
+ env.GIT_TEMPLATE_DIR = templateDir;
+ }
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ // when building Git for Linux and then running it from
+ // an arbitrary location, you should set PREFIX for the
+ // process to ensure that it knows how to resolve things
+@@ -109,11 +112,11 @@ function setupEnvironment(environmentVariables) {
+ // use the SSL certificate bundle included in the distribution only
+ // when using embedded Git and not providing your own bundle
+ const distDir = resolveEmbeddedGitDir();
+- const sslCABundle = `${distDir}/ssl/cacert.pem`;
++ const sslCABundle = `/etc/ssl/cert.pem`;
+ env.GIT_SSL_CAINFO = sslCABundle;
+ }
+ }
+ return { env, gitLocation };
+ }
+ exports.setupEnvironment = setupEnvironment;
+-//# sourceMappingURL=git-environment.js.map
+\ No newline at end of file
++//# sourceMappingURL=git-environment.js.map
diff --git a/editors/atom/files/atom/patch-node__modules_fs-admin_binding.gyp b/editors/atom/files/atom/patch-node__modules_fs-admin_binding.gyp
new file mode 100644
index 000000000000..94327feacfff
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_fs-admin_binding.gyp
@@ -0,0 +1,11 @@
+--- node_modules/fs-admin/binding.gyp.orig 1985-10-26 08:15:00 UTC
++++ node_modules/fs-admin/binding.gyp
+@@ -37,7 +37,7 @@
+ '$(SDKROOT)/System/Library/Frameworks/Security.framework',
+ ],
+ }],
+- ['OS=="linux"', {
++ ['OS=="linux" or OS=="freebsd"', {
+ 'sources': [
+ 'src/fs-admin-linux.cc',
+ ],
diff --git a/editors/atom/files/atom/patch-node__modules_github_bin_linux-ssh-wrapper.sh b/editors/atom/files/atom/patch-node__modules_github_bin_linux-ssh-wrapper.sh
new file mode 100644
index 000000000000..cab803194a80
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_bin_linux-ssh-wrapper.sh
@@ -0,0 +1,9 @@
+--- node_modules/github/bin/linux-ssh-wrapper.sh.orig 2020-02-15 07:03:49 UTC
++++ node_modules/github/bin/linux-ssh-wrapper.sh
+@@ -26,5 +26,5 @@ if type setsid >/dev/null 2>&1; then
+ setsid ${SSH_CMD} "${@:-}"
+ else
+ log "no setsid available. SSH prompts may appear on a tty."
+- sh -c "${SSH_CMD} ${@:-}"
++ ${SSH_CMD} "${@:-}"
+ fi
diff --git a/editors/atom/files/atom/patch-node__modules_github_lib_git-shell-out-strategy.js b/editors/atom/files/atom/patch-node__modules_github_lib_git-shell-out-strategy.js
new file mode 100644
index 000000000000..939d736a2d2c
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_lib_git-shell-out-strategy.js
@@ -0,0 +1,11 @@
+--- node_modules/github/lib/git-shell-out-strategy.js.orig 2019-12-11 03:24:32 UTC
++++ node_modules/github/lib/git-shell-out-strategy.js
+@@ -190,7 +190,7 @@ export default class GitShellOutStrategy {
+ env.SSH_ASKPASS = normalizeGitHelperPath(gitTempDir.getAskPassSh());
+ env.GIT_ASKPASS = normalizeGitHelperPath(gitTempDir.getAskPassSh());
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ env.GIT_SSH_COMMAND = gitTempDir.getSshWrapperSh();
+ } else if (process.env.GIT_SSH_COMMAND) {
+ env.GIT_SSH_COMMAND = process.env.GIT_SSH_COMMAND;
diff --git a/editors/atom/files/atom/patch-node__modules_github_lib_models_workdir-context.js b/editors/atom/files/atom/patch-node__modules_github_lib_models_workdir-context.js
new file mode 100644
index 000000000000..2a4ea1e0c099
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_lib_models_workdir-context.js
@@ -0,0 +1,11 @@
+--- node_modules/github/lib/models/workdir-context.js.orig 2019-08-21 13:55:10 UTC
++++ node_modules/github/lib/models/workdir-context.js
+@@ -116,7 +116,7 @@ export default class WorkdirContext {
+ }
+
+ useWorkspaceChangeObserver() {
+- return !!process.env.ATOM_GITHUB_WORKSPACE_OBSERVER || process.platform === 'linux';
++ return !!process.env.ATOM_GITHUB_WORKSPACE_OBSERVER || (process.platform === 'linux' || process.platform === 'freebsd');
+ }
+
+ // Event subscriptions
diff --git a/editors/atom/files/atom/patch-node__modules_github_package.json b/editors/atom/files/atom/patch-node__modules_github_package.json
new file mode 100644
index 000000000000..7545f4d4a844
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_package.json
@@ -0,0 +1,10 @@
+--- node_modules/github/package.json.orig 2020-05-22 08:46:19 UTC
++++ node_modules/github/package.json
+@@ -214,7 +214,6 @@
+ "dedent-js": "1.0.1",
+ "electron-devtools-installer": "2.2.4",
+ "electron-link": "0.4.1",
+- "electron-mksnapshot": "^4.2.0",
+ "enzyme": "3.10.0",
+ "enzyme-adapter-react-16": "1.7.1",
+ "eslint": "6.7.2",
diff --git a/editors/atom/files/atom/patch-node__modules_github_test_git-strategies.test.js b/editors/atom/files/atom/patch-node__modules_github_test_git-strategies.test.js
new file mode 100644
index 000000000000..5c6c44d71a22
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_test_git-strategies.test.js
@@ -0,0 +1,11 @@
+--- node_modules/github/test/git-strategies.test.js.orig 2020-02-26 21:07:14 UTC
++++ node_modules/github/test/git-strategies.test.js
+@@ -1535,7 +1535,7 @@ import * as reporterProxy from '../lib/reporter-proxy'
+ assert.match(options.env.DISPLAY, /^.+$/);
+ assert.match(options.env.SSH_ASKPASS, /git-askpass-atom\.sh$/);
+ assert.match(options.env.GIT_ASKPASS, /git-askpass-atom\.sh$/);
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ assert.match(options.env.GIT_SSH_COMMAND, /linux-ssh-wrapper\.sh$/);
+ }
+
diff --git a/editors/atom/files/atom/patch-node__modules_github_test_github-package.test.js b/editors/atom/files/atom/patch-node__modules_github_test_github-package.test.js
new file mode 100644
index 000000000000..46597ff509b1
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_github_test_github-package.test.js
@@ -0,0 +1,20 @@
+--- node_modules/github/test/github-package.test.js.orig 2020-02-05 20:24:36 UTC
++++ node_modules/github/test/github-package.test.js
+@@ -1040,7 +1040,7 @@ describe('GithubPackage', function() {
+
+ describe('when a file change is made outside Atom in workspace 1', function() {
+ beforeEach(function() {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip();
+ }
+
+@@ -1058,7 +1058,7 @@ describe('GithubPackage', function() {
+
+ describe('when a file change is made outside Atom in workspace 2', function() {
+ beforeEach(function() {
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ this.skip();
+ }
+
diff --git a/editors/atom/files/atom/patch-node__modules_nslog_binding.gyp b/editors/atom/files/atom/patch-node__modules_nslog_binding.gyp
new file mode 100644
index 000000000000..b56e1f6f9075
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_nslog_binding.gyp
@@ -0,0 +1,11 @@
+--- node_modules/nslog/binding.gyp.orig 1985-10-26 08:15:00 UTC
++++ node_modules/nslog/binding.gyp
+@@ -33,7 +33,7 @@
+ 'src/nslog_win.cc',
+ ],
+ }],
+- ['OS=="linux"', {
++ ['OS=="linux" or OS=="freebsd"', {
+ 'sources': [
+ 'src/nslog_linux.cc',
+ ],
diff --git a/editors/atom/files/atom/patch-node__modules_os-homedir_index.js b/editors/atom/files/atom/patch-node__modules_os-homedir_index.js
new file mode 100644
index 000000000000..a4da0c243086
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_os-homedir_index.js
@@ -0,0 +1,11 @@
+--- node_modules/os-homedir/index.js.orig 2015-07-20 23:25:14 UTC
++++ node_modules/os-homedir/index.js
+@@ -14,7 +14,7 @@ function homedir() {
+ return home || (user ? '/Users/' + user : null);
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null));
+ }
+
diff --git a/editors/atom/files/atom/patch-node__modules_scrollbar-style_binding.gyp b/editors/atom/files/atom/patch-node__modules_scrollbar-style_binding.gyp
new file mode 100644
index 000000000000..48ff507c8dce
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_scrollbar-style_binding.gyp
@@ -0,0 +1,16 @@
+--- node_modules/scrollbar-style/binding.gyp.orig 2015-01-28 01:01:40 UTC
++++ node_modules/scrollbar-style/binding.gyp
+@@ -33,11 +33,11 @@
+ 4996, # function was declared deprecated
+ ],
+ }], # OS=="win"
+- ['OS=="linux"', {
++ ['OS=="linux" or OS=="freebsd"', {
+ "sources": [
+ "src/scrollbar-style-observer-non-mac.cc",
+ ],
+- }], # OS=="linux"
++ }], # OS=="linux" or OS=="freebsd"
+ ]
+ }
+ ]
diff --git a/editors/atom/files/atom/patch-node__modules_spell-check_lib_checker-env.coffee b/editors/atom/files/atom/patch-node__modules_spell-check_lib_checker-env.coffee
new file mode 100644
index 000000000000..d21e50082881
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_spell-check_lib_checker-env.coffee
@@ -0,0 +1,9 @@
+--- node_modules/spell-check/lib/checker-env.coffee.orig 2020-05-09 06:40:15 UTC
++++ node_modules/spell-check/lib/checker-env.coffee
+@@ -1,5 +1,5 @@
+ module.exports =
+- isLinux: -> /linux/.test process.platform
++ isLinux: -> /(linux|freebsd)/.test process.platform
+ isWindows: -> /win32/.test process.platform # TODO: Windows < 8 or >= 8
+ isDarwin: -> /darwin/.test process.platform
+ preferHunspell: -> !!process.env.SPELLCHECKER_PREFER_HUNSPELL
diff --git a/editors/atom/files/atom/patch-node__modules_spell-check_lib_locale-checker.coffee b/editors/atom/files/atom/patch-node__modules_spell-check_lib_locale-checker.coffee
new file mode 100644
index 000000000000..1c2916469a15
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_spell-check_lib_locale-checker.coffee
@@ -0,0 +1,10 @@
+--- node_modules/spell-check/lib/locale-checker.coffee.orig 2020-05-18 17:31:39 UTC
++++ node_modules/spell-check/lib/locale-checker.coffee
+@@ -73,6 +73,7 @@ class LocaleChecker
+ searchPaths.push "/usr/share/hunspell"
+ searchPaths.push "/usr/share/myspell"
+ searchPaths.push "/usr/share/myspell/dicts"
++ searchPaths.push "/usr/local/share/hunspell"
+
+ if env.isDarwin()
+ searchPaths.push "/"
diff --git a/editors/atom/files/atom/patch-node__modules_spellchecker_binding.gyp b/editors/atom/files/atom/patch-node__modules_spellchecker_binding.gyp
new file mode 100644
index 000000000000..814fd09df81c
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_spellchecker_binding.gyp
@@ -0,0 +1,20 @@
+--- node_modules/spellchecker/binding.gyp.orig 1985-10-26 08:15:00 UTC
++++ node_modules/spellchecker/binding.gyp
+@@ -4,7 +4,7 @@
+ ['OS=="mac"', {
+ 'spellchecker_use_hunspell%': 'true',
+ }],
+- ['OS=="linux"', {
++ ['OS=="linux" or OS=="freebsd"', {
+ 'spellchecker_use_hunspell': 'true',
+ }],
+ ['OS=="win"', {
+@@ -53,7 +53,7 @@
+ 'src/transcoder_win.cc',
+ ],
+ }],
+- ['OS=="linux"', {
++ ['OS=="linux" or OS=="freebsd"', {
+ 'sources': [
+ 'src/spellchecker_linux.cc',
+ 'src/transcoder_posix.cc',
diff --git a/editors/atom/files/atom/patch-node__modules_spellchecker_vendor_hunspell_src_hunspell_affentry.hxx b/editors/atom/files/atom/patch-node__modules_spellchecker_vendor_hunspell_src_hunspell_affentry.hxx
new file mode 100644
index 000000000000..c68cdba31d80
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_spellchecker_vendor_hunspell_src_hunspell_affentry.hxx
@@ -0,0 +1,102 @@
+--- node_modules/spellchecker/vendor/hunspell/src/hunspell/affentry.hxx.orig 2019-12-27 07:21:39 UTC
++++ node_modules/spellchecker/vendor/hunspell/src/hunspell/affentry.hxx
+@@ -24,10 +24,10 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected Af
+ ~PfxEntry();
+
+ inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); }
+- struct hentry * checkword(const char * word, int len, char in_compound,
++ struct hentry * checkword(const char * word, int len, char in_compound,
+ const FLAG needflag = FLAG_NULL);
+
+- struct hentry * check_twosfx(const char * word, int len, char in_compound, const FLAG needflag = NULL);
++ struct hentry * check_twosfx(const char * word, int len, char in_compound, const FLAG needflag = FLAG_NULL);
+
+ char * check_morph(const char * word, int len, char in_compound,
+ const FLAG needflag = FLAG_NULL);
+@@ -36,15 +36,15 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected Af
+ char in_compound, const FLAG needflag = FLAG_NULL);
+
+ inline FLAG getFlag() { return aflag; }
+- inline const char * getKey() { return appnd; }
++ inline const char * getKey() { return appnd; }
+ char * add(const char * word, int len);
+
+- inline short getKeyLen() { return appndl; }
++ inline short getKeyLen() { return appndl; }
+
+- inline const char * getMorph() { return morphcode; }
++ inline const char * getMorph() { return morphcode; }
+
+- inline const unsigned short * getCont() { return contclass; }
+- inline short getContLen() { return contclasslen; }
++ inline const unsigned short * getCont() { return contclass; }
++ inline short getContLen() { return contclasslen; }
+
+ inline PfxEntry * getNext() { return next; }
+ inline PfxEntry * getNextNE() { return nextne; }
+@@ -55,7 +55,7 @@ class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected Af
+ inline void setNextNE(PfxEntry * ptr) { nextne = ptr; }
+ inline void setNextEQ(PfxEntry * ptr) { nexteq = ptr; }
+ inline void setFlgNxt(PfxEntry * ptr) { flgnxt = ptr; }
+-
++
+ inline char * nextchar(char * p);
+ inline int test_condition(const char * st);
+ };
+@@ -74,7 +74,7 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected Af
+ SfxEntry * nexteq;
+ SfxEntry * nextne;
+ SfxEntry * flgnxt;
+-
++
+ SfxEntry * l_morph;
+ SfxEntry * r_morph;
+ SfxEntry * eq_morph;
+@@ -85,32 +85,32 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected Af
+ ~SfxEntry();
+
+ inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); }
+- struct hentry * checkword(const char * word, int len, int optflags,
++ struct hentry * checkword(const char * word, int len, int optflags,
+ PfxEntry* ppfx, char ** wlst, int maxSug, int * ns,
+ // const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound=IN_CPD_NOT);
+ const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, const FLAG badflag = 0);
+
+- struct hentry * check_twosfx(const char * word, int len, int optflags, PfxEntry* ppfx, const FLAG needflag = NULL);
++ struct hentry * check_twosfx(const char * word, int len, int optflags, PfxEntry* ppfx, const FLAG needflag = FLAG_NULL);
+
+ char * check_twosfx_morph(const char * word, int len, int optflags,
+ PfxEntry* ppfx, const FLAG needflag = FLAG_NULL);
+ struct hentry * get_next_homonym(struct hentry * he);
+- struct hentry * get_next_homonym(struct hentry * word, int optflags, PfxEntry* ppfx,
++ struct hentry * get_next_homonym(struct hentry * word, int optflags, PfxEntry* ppfx,
+ const FLAG cclass, const FLAG needflag);
+
+
+ inline FLAG getFlag() { return aflag; }
+- inline const char * getKey() { return rappnd; }
++ inline const char * getKey() { return rappnd; }
+ char * add(const char * word, int len);
+
+
+- inline const char * getMorph() { return morphcode; }
++ inline const char * getMorph() { return morphcode; }
+
+- inline const unsigned short * getCont() { return contclass; }
+- inline short getContLen() { return contclasslen; }
+- inline const char * getAffix() { return appnd; }
++ inline const unsigned short * getCont() { return contclass; }
++ inline short getContLen() { return contclasslen; }
++ inline const char * getAffix() { return appnd; }
+
+- inline short getKeyLen() { return appndl; }
++ inline short getKeyLen() { return appndl; }
+
+ inline SfxEntry * getNext() { return next; }
+ inline SfxEntry * getNextNE() { return nextne; }
+@@ -132,5 +132,3 @@ class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected Af
+ };
+
+ #endif
+-
+-
diff --git a/editors/atom/files/atom/patch-node__modules_symbols-view_lib_tag-generator.js b/editors/atom/files/atom/patch-node__modules_symbols-view_lib_tag-generator.js
new file mode 100644
index 000000000000..c3f530cf868a
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_symbols-view_lib_tag-generator.js
@@ -0,0 +1,11 @@
+--- node_modules/symbols-view/lib/tag-generator.js.orig 2019-12-27 07:45:34 UTC
++++ node_modules/symbols-view/lib/tag-generator.js
+@@ -79,7 +79,7 @@ export default class TagGenerator {
+ generate() {
+ let tags = {};
+ const packageRoot = this.getPackageRoot();
+- const command = path.join(packageRoot, 'vendor', `ctags-${process.platform}`);
++ const command = 'ctags';
+ const defaultCtagsFile = path.join(packageRoot, 'lib', 'ctags-config');
+ const args = [`--options=${defaultCtagsFile}`, '--fields=+KS'];
+
diff --git a/editors/atom/files/atom/patch-node__modules_tabs_lib_tab-bar-view.coffee b/editors/atom/files/atom/patch-node__modules_tabs_lib_tab-bar-view.coffee
new file mode 100644
index 000000000000..47542b4975d1
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_tabs_lib_tab-bar-view.coffee
@@ -0,0 +1,11 @@
+--- node_modules/tabs/lib/tab-bar-view.coffee.orig 2019-01-24 00:42:27 UTC
++++ node_modules/tabs/lib/tab-bar-view.coffee
+@@ -462,7 +462,7 @@ class TabBarView
+
+ updateTabScrolling: (value) ->
+ if value is 'platform'
+- @tabScrolling = (process.platform is 'linux')
++ @tabScrolling = (process.platform is 'linux' or process.platform is 'freebsd')
+ else
+ @tabScrolling = value
+
diff --git a/editors/atom/files/atom/patch-node__modules_text-buffer_lib_text-buffer.js b/editors/atom/files/atom/patch-node__modules_text-buffer_lib_text-buffer.js
new file mode 100644
index 000000000000..5b55773f16c0
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_text-buffer_lib_text-buffer.js
@@ -0,0 +1,11 @@
+--- node_modules/text-buffer/lib/text-buffer.js.orig 2019-12-27 06:41:17 UTC
++++ node_modules/text-buffer/lib/text-buffer.js
+@@ -1925,7 +1925,7 @@ class TextBuffer {
+ try {
+ await this.buffer.save(destination, this.getEncoding())
+ } catch (error) {
+- const canEscalate = process.platform === 'darwin' || process.platform === 'linux'
++ const canEscalate = process.platform === 'darwin' || process.platform === 'linux' || process.platform === 'freebsd'
+ if (error.code === 'EACCES' && destination === filePath && canEscalate) {
+ const fsAdmin = require('fs-admin')
+ try {
diff --git a/editors/atom/files/atom/patch-node__modules_tree-view_lib_root-drag-and-drop.coffee b/editors/atom/files/atom/patch-node__modules_tree-view_lib_root-drag-and-drop.coffee
new file mode 100644
index 000000000000..32ef53088946
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_tree-view_lib_root-drag-and-drop.coffee
@@ -0,0 +1,11 @@
+--- node_modules/tree-view/lib/root-drag-and-drop.coffee.orig 2019-05-14 21:29:00 UTC
++++ node_modules/tree-view/lib/root-drag-and-drop.coffee
+@@ -42,7 +42,7 @@ class RootDragAndDropHandler
+
+ e.dataTransfer.setData 'text/plain', directory.path
+
+- if process.platform in ['darwin', 'linux']
++ if process.platform in ['darwin', 'linux', 'freebsd']
+ pathUri = "file://#{directory.path}" unless @uriHasProtocol(directory.path)
+ e.dataTransfer.setData 'text/uri-list', pathUri
+
diff --git a/editors/atom/files/atom/patch-node__modules_tree-view_spec_tree-view-package-spec.coffee b/editors/atom/files/atom/patch-node__modules_tree-view_spec_tree-view-package-spec.coffee
new file mode 100644
index 000000000000..ece834e6c2cd
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_tree-view_spec_tree-view-package-spec.coffee
@@ -0,0 +1,11 @@
+--- node_modules/tree-view/spec/tree-view-package-spec.coffee.orig 2019-12-27 06:42:40 UTC
++++ node_modules/tree-view/spec/tree-view-package-spec.coffee
+@@ -5054,7 +5054,7 @@ describe "TreeView", ->
+ treeView.rootDragAndDrop.onDragStart(dragStartEvent)
+
+ expect(dragStartEvent.dataTransfer.getData("text/plain")).toEqual gammaDirPath
+- if process.platform in ['darwin', 'linux']
++ if process.platform in ['darwin', 'linux', 'freebsd']
+ expect(dragStartEvent.dataTransfer.getData("text/uri-list")).toEqual "file://#{gammaDirPath}"
+
+ describe "when a root folder is dropped from another Atom window", ->
diff --git a/editors/atom/files/atom/patch-node__modules_user-home_index.js b/editors/atom/files/atom/patch-node__modules_user-home_index.js
new file mode 100644
index 000000000000..c2ec8edf9df5
--- /dev/null
+++ b/editors/atom/files/atom/patch-node__modules_user-home_index.js
@@ -0,0 +1,11 @@
+--- node_modules/user-home/index.js.orig 2019-12-27 06:43:28 UTC
++++ node_modules/user-home/index.js
+@@ -7,7 +7,7 @@ if (process.platform === 'win32') {
+ module.exports = env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null;
+ } else if (process.platform === 'darwin') {
+ module.exports = home || (user ? '/Users/' + user : null) || null;
+-} else if (process.platform === 'linux') {
++} else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ module.exports = home ||
+ (user ? (process.getuid() === 0 ? '/root' : '/home/' + user) : null) || null;
+ } else {
diff --git a/editors/atom/files/node/patch-common.gypi b/editors/atom/files/node/patch-common.gypi
new file mode 100644
index 000000000000..becb72fa3fc4
--- /dev/null
+++ b/editors/atom/files/node/patch-common.gypi
@@ -0,0 +1,18 @@
+--- common.gypi.orig 2020-04-12 11:55:35 UTC
++++ common.gypi
+@@ -509,15 +509,6 @@
+ 'libraries': [ '-lelf' ],
+ }],
+ ['OS=="freebsd"', {
+- 'conditions': [
+- ['"0" < llvm_version < "4.0"', {
+- # Use this flag because on FreeBSD std::pairs copy constructor is non-trivial.
+- # Doesn't apply to llvm 4.0 (FreeBSD 11.1) or later.
+- # Refs: https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html
+- # Refs: https://svnweb.freebsd.org/ports/head/www/node/Makefile?revision=444555&view=markup
+- 'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ],
+- }],
+- ],
+ 'ldflags': [
+ '-Wl,--export-dynamic',
+ ],
diff --git a/editors/atom/files/node/patch-configure.py b/editors/atom/files/node/patch-configure.py
new file mode 100644
index 000000000000..f069527a7b00
--- /dev/null
+++ b/editors/atom/files/node/patch-configure.py
@@ -0,0 +1,11 @@
+--- configure.py.orig 2020-06-16 06:19:09 UTC
++++ configure.py
+@@ -705,7 +705,7 @@ def get_nasm_version(asm):
+
+ def get_llvm_version(cc):
+ return get_version_helper(
+- cc, r"(^(?:FreeBSD )?clang version|based on LLVM) ([3-9]\.[0-9]+)")
++ cc, r"(^(?:FreeBSD )?clang version|based on LLVM) ([0-9]+\.[0-9]+)")
+
+ def get_xcode_version(cc):
+ return get_version_helper(
diff --git a/editors/atom/files/patch-atom.sh b/editors/atom/files/patch-atom.sh
new file mode 100644
index 000000000000..9fa6334e5cc4
--- /dev/null
+++ b/editors/atom/files/patch-atom.sh
@@ -0,0 +1,20 @@
+--- atom.sh.orig 2019-05-22 03:44:37 UTC
++++ atom.sh
+@@ -2,6 +2,8 @@
+
+ if [ "$(uname)" == 'Darwin' ]; then
+ OS='Mac'
++elif [ "$(uname)" == 'FreeBSD' ]; then
++ OS='FreeBSD'
+ elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
+ OS='Linux'
+ else
+@@ -149,7 +151,7 @@ if [ $OS == 'Mac' ]; then
+ else
+ open -a "$ATOM_PATH/$ATOM_APP_NAME" -n --args --executed-from="$(pwd)" --pid=$$ --path-environment="$PATH" "$@"
+ fi
+-elif [ $OS == 'Linux' ]; then
++elif [ $OS == 'Linux' ] || [ $OS == 'FreeBSD' ]; then
+ SCRIPT=$(readlink -f "$0")
+ USR_DIRECTORY=$(readlink -f $(dirname $SCRIPT)/..)
+
diff --git a/editors/atom/files/patch-package.json b/editors/atom/files/patch-package.json
new file mode 100644
index 000000000000..14607eee4e07
--- /dev/null
+++ b/editors/atom/files/patch-package.json
@@ -0,0 +1,11 @@
+--- package.json.orig 2020-05-18 19:34:10 UTC
++++ package.json
+@@ -76,7 +76,7 @@
+ "incompatible-packages": "file:packages/incompatible-packages",
+ "jasmine-json": "~0.0",
+ "jasmine-reporters": "1.1.0",
+- "jasmine-tagged": "^1.1.4",
++ "jasmine-tagged": "file:../jasmine-tagged",
+ "key-path-helpers": "^0.4.0",
+ "keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.0/tarball",
+ "language-c": "https://www.atom.io/api/packages/language-c/versions/0.60.19/tarball",
diff --git a/editors/atom/files/patch-packages_welcome_lib_guide-view.js b/editors/atom/files/patch-packages_welcome_lib_guide-view.js
new file mode 100644
index 000000000000..2d5a2ab28855
--- /dev/null
+++ b/editors/atom/files/patch-packages_welcome_lib_guide-view.js
@@ -0,0 +1,11 @@
+--- packages/welcome/lib/guide-view.js.orig 2019-12-27 05:12:53 UTC
++++ packages/welcome/lib/guide-view.js
+@@ -380,7 +380,7 @@ export default class GuideView {
+ getApplicationMenuName() {
+ if (process.platform === 'darwin') {
+ return 'Atom';
+- } else if (process.platform === 'linux') {
++ } else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return 'Edit';
+ } else {
+ return 'File';
diff --git a/editors/atom/files/patch-script_build b/editors/atom/files/patch-script_build
new file mode 100644
index 000000000000..e79a30d6250b
--- /dev/null
+++ b/editors/atom/files/patch-script_build
@@ -0,0 +1,20 @@
+--- script/build.orig 2020-04-22 18:42:32 UTC
++++ script/build
+@@ -69,7 +69,7 @@ process.env.ELECTRON_VERSION = CONFIG.appMetadata.elec
+ let binariesPromise = Promise.resolve()
+
+ if (!argv.existingBinaries) {
+- checkChromedriverVersion()
++ // checkChromedriverVersion()
+ cleanOutputDirectory()
+ copyAssets()
+ transpilePackagesWithCustomTranspilerPaths()
+@@ -89,7 +89,7 @@ if (!argv.existingBinaries) {
+ if (!argv.generateApiDocs) {
+ binariesPromise
+ .then(packageApplication)
+- .then(packagedAppPath => generateStartupSnapshot(packagedAppPath).then(() => packagedAppPath))
++ // .then(packagedAppPath => generateStartupSnapshot(packagedAppPath).then(() => packagedAppPath))
+ .then(async packagedAppPath => {
+ switch (process.platform) {
+ case 'darwin': {
diff --git a/editors/atom/files/patch-script_lib_dump-symbols.js b/editors/atom/files/patch-script_lib_dump-symbols.js
new file mode 100644
index 000000000000..fcfe0f9d3515
--- /dev/null
+++ b/editors/atom/files/patch-script_lib_dump-symbols.js
@@ -0,0 +1,14 @@
+--- script/lib/dump-symbols.js.orig 2019-10-21 17:33:40 UTC
++++ script/lib/dump-symbols.js
+@@ -6,9 +6,9 @@ const path = require('path');
+
+ const CONFIG = require('../config');
+ module.exports = function() {
+- if (process.platform === 'win32') {
++ if (process.platform === 'win32' || process.platform === 'freebsd') {
+ console.log(
+- 'Skipping symbol dumping because minidump is not supported on Windows'
++ 'Skipping symbol dumping because minidump is not supported on Windows or FreeBSD'
+ .gray
+ );
+ return Promise.resolve();
diff --git a/editors/atom/files/patch-script_lib_package-application.js b/editors/atom/files/patch-script_lib_package-application.js
new file mode 100644
index 000000000000..f711f1fc2f67
--- /dev/null
+++ b/editors/atom/files/patch-script_lib_package-application.js
@@ -0,0 +1,29 @@
+--- script/lib/package-application.js.orig 2019-10-21 17:33:40 UTC
++++ script/lib/package-application.js
+@@ -66,7 +66,7 @@ module.exports = function() {
+ 'Resources'
+ );
+ setAtomHelperVersion(packagedAppPath);
+- } else if (process.platform === 'linux') {
++ } else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ bundledResourcesPath = path.join(packagedAppPath, 'resources');
+ chmodNodeFiles(packagedAppPath);
+ } else {
+@@ -118,7 +118,7 @@ function copyNonASARResources(packagedAppPath, bundled
+ path.join(CONFIG.repositoryRootPath, 'resources', 'mac', 'file.icns'),
+ path.join(bundledResourcesPath, 'file.icns')
+ );
+- } else if (process.platform === 'linux') {
++ } else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ fs.copySync(
+ path.join(
+ CONFIG.repositoryRootPath,
+@@ -234,7 +234,7 @@ function renamePackagedAppDir(packageOutputDirPath) {
+ path.join(packageOutputDirPath, appBundleName),
+ packagedAppPath
+ );
+- } else if (process.platform === 'linux') {
++ } else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ const appName =
+ CONFIG.channel !== 'stable' ? `atom-${CONFIG.channel}` : 'atom';
+ let architecture;
diff --git a/editors/atom/files/patch-script_package.json b/editors/atom/files/patch-script_package.json
new file mode 100644
index 000000000000..1b086dc74d46
--- /dev/null
+++ b/editors/atom/files/patch-script_package.json
@@ -0,0 +1,20 @@
+--- script/package.json.orig 2020-06-10 09:38:09 UTC
++++ script/package.json
+@@ -10,9 +10,7 @@
+ "coffeelint": "1.15.7",
+ "colors": "1.1.2",
+ "donna": "1.0.16",
+- "electron-chromedriver": "^5.0.0",
+ "electron-link": "0.4.1",
+- "electron-mksnapshot": "^5.0.0",
+ "electron-packager": "12.2.0",
+ "@atom/electron-winstaller": "0.0.1",
+ "eslint": "^5.16.0",
+@@ -31,7 +29,6 @@
+ "legal-eagle": "0.14.0",
+ "lodash.startcase": "4.4.0",
+ "lodash.template": "4.5.0",
+- "minidump": "0.9.0",
+ "mkdirp": "0.5.1",
+ "normalize-package-data": "2.3.5",
+ "npm": "6.14.4",
diff --git a/editors/atom/files/patch-script_test b/editors/atom/files/patch-script_test
new file mode 100644
index 000000000000..7bde6f8301cb
--- /dev/null
+++ b/editors/atom/files/patch-script_test
@@ -0,0 +1,20 @@
+--- script/test.orig 2020-05-18 19:34:10 UTC
++++ script/test
+@@ -51,7 +51,7 @@ if (process.platform === 'darwin') {
+ const executablePaths = glob.sync(path.join(CONFIG.buildOutputPath, '*.app'))
+ assert(executablePaths.length === 1, `More than one application to run tests against was found. ${executablePaths.join(',')}`)
+ executablePath = path.join(executablePaths[0], 'Contents', 'MacOS', path.basename(executablePaths[0], '.app'))
+-} else if (process.platform === 'linux') {
++} else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ const executablePaths = glob.sync(path.join(CONFIG.buildOutputPath, 'atom-*', 'atom'))
+ assert(executablePaths.length === 1, `More than one application to run tests against was found. ${executablePaths.join(',')}`)
+ executablePath = executablePaths[0]
+@@ -222,7 +222,7 @@ function testSuitesForPlatform (platform) {
+ case 'win32':
+ suites = (process.arch === 'x64') ? [runCoreMainProcessTests, runCoreRenderProcessTests] : [runCoreMainProcessTests]
+ break
+- case 'linux':
++ case 'linux': case 'freebsd':
+ suites = [runCoreMainProcessTests]
+ break
+ default:
diff --git a/editors/atom/files/patch-spec_main-process_atom-application.test.js b/editors/atom/files/patch-spec_main-process_atom-application.test.js
new file mode 100644
index 000000000000..fd18328129a9
--- /dev/null
+++ b/editors/atom/files/patch-spec_main-process_atom-application.test.js
@@ -0,0 +1,11 @@
+--- spec/main-process/atom-application.test.js.orig 2019-11-16 08:38:38 UTC
++++ spec/main-process/atom-application.test.js
+@@ -1107,7 +1107,7 @@ describe('AtomApplication', function() {
+ });
+
+ describe('when closing the last window', function() {
+- if (process.platform === 'linux' || process.platform === 'win32') {
++ if (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'win32') {
+ it('quits the application', async function() {
+ const [w] = await scenario.launch(parseCommandLine(['a']));
+ scenario.getApplication(0).removeWindow(w);
diff --git a/editors/atom/files/patch-src_atom-paths.js b/editors/atom/files/patch-src_atom-paths.js
new file mode 100644
index 000000000000..987472267818
--- /dev/null
+++ b/editors/atom/files/patch-src_atom-paths.js
@@ -0,0 +1,11 @@
+--- src/atom-paths.js.orig 2019-12-13 19:07:42 UTC
++++ src/atom-paths.js
+@@ -19,7 +19,7 @@ const getAppDirectory = () => {
+ 0,
+ process.execPath.indexOf('.app') + 4
+ );
+- case 'linux':
++ case 'linux': case 'freebsd':
+ case 'win32':
+ return path.join(process.execPath, '..');
+ }
diff --git a/editors/atom/files/patch-src_config-schema.js b/editors/atom/files/patch-src_config-schema.js
new file mode 100644
index 000000000000..62e8e795dabe
--- /dev/null
+++ b/editors/atom/files/patch-src_config-schema.js
@@ -0,0 +1,17 @@
+--- src/config-schema.js.orig 2020-06-10 09:38:09 UTC
++++ src/config-schema.js
+@@ -620,12 +620,12 @@ const configSchema = {
+ }
+ };
+
+-if (['win32', 'linux'].includes(process.platform)) {
++if (['win32', 'linux', 'freebsd'].includes(process.platform)) {
+ configSchema.core.properties.autoHideMenuBar = {
+ type: 'boolean',
+ default: false,
+ description:
+- 'Automatically hide the menu bar and toggle it by pressing Alt. This is only supported on Windows & Linux.'
++ 'Automatically hide the menu bar and toggle it by pressing Alt. This is only supported on Windows, Linux & FreeBSD.'
+ };
+ }
+
diff --git a/editors/atom/files/patch-src_crash-reporter-start.js b/editors/atom/files/patch-src_crash-reporter-start.js
new file mode 100644
index 000000000000..705b6f62bf81
--- /dev/null
+++ b/editors/atom/files/patch-src_crash-reporter-start.js
@@ -0,0 +1,18 @@
+--- src/crash-reporter-start.js.orig 2019-10-21 17:33:40 UTC
++++ src/crash-reporter-start.js
+@@ -1,15 +1,2 @@
+ module.exports = function(params) {
+- const { crashReporter } = require('electron');
+- const os = require('os');
+- const platformRelease = os.release();
+- const arch = os.arch();
+- const { uploadToServer, releaseChannel } = params;
+-
+- crashReporter.start({
+- productName: 'Atom',
+- companyName: 'GitHub',
+- submitURL: 'https://atom.io/crash_reports',
+- uploadToServer,
+- extra: { platformRelease, arch, releaseChannel }
+- });
+ };
diff --git a/editors/atom/files/patch-src_main-process_atom-application.js b/editors/atom/files/patch-src_main-process_atom-application.js
new file mode 100644
index 000000000000..5b3b0e364a40
--- /dev/null
+++ b/editors/atom/files/patch-src_main-process_atom-application.js
@@ -0,0 +1,11 @@
+--- src/main-process/atom-application.js.orig 2019-10-21 17:33:40 UTC
++++ src/main-process/atom-application.js
+@@ -463,7 +463,7 @@ module.exports = class AtomApplication extends EventEm
+ if (this.applicationMenu != null) {
+ this.applicationMenu.enableWindowSpecificItems(false);
+ }
+- if (['win32', 'linux'].includes(process.platform)) {
++ if (['win32', 'linux', 'freebsd'].includes(process.platform)) {
+ app.quit();
+ return;
+ }
diff --git a/editors/atom/files/patch-src_main-process_atom-window.js b/editors/atom/files/patch-src_main-process_atom-window.js
new file mode 100644
index 000000000000..5ea35f3dd028
--- /dev/null
+++ b/editors/atom/files/patch-src_main-process_atom-window.js
@@ -0,0 +1,11 @@
+--- src/main-process/atom-window.js.orig 2020-06-10 09:38:09 UTC
++++ src/main-process/atom-window.js
+@@ -55,7 +55,7 @@ module.exports = class AtomWindow extends EventEmitter
+
+ // Don't set icon on Windows so the exe's ico will be used as window and
+ // taskbar's icon. See https://github.com/atom/atom/issues/4811 for more.
+- if (process.platform === 'linux') options.icon = ICON_PATH;
++ if (process.platform === 'linux' || process.platform === 'freebsd') options.icon = ICON_PATH;
+ if (this.shouldAddCustomTitleBar()) options.titleBarStyle = 'hidden';
+ if (this.shouldAddCustomInsetTitleBar())
+ options.titleBarStyle = 'hiddenInset';
diff --git a/editors/atom/files/patch-src_main-process_auto-update-manager.js b/editors/atom/files/patch-src_main-process_auto-update-manager.js
new file mode 100644
index 000000000000..61ba8d1631f4
--- /dev/null
+++ b/editors/atom/files/patch-src_main-process_auto-update-manager.js
@@ -0,0 +1,11 @@
+--- src/main-process/auto-update-manager.js.orig 2019-12-13 19:07:42 UTC
++++ src/main-process/auto-update-manager.js
+@@ -101,7 +101,7 @@ module.exports = class AutoUpdateManager extends Event
+ this.setState(UnsupportedState);
+ }
+ break;
+- case 'linux':
++ case 'linux': case 'freebsd':
+ this.setState(UnsupportedState);
+ }
+ }
diff --git a/editors/atom/files/patch-src_text-editor-component.js b/editors/atom/files/patch-src_text-editor-component.js
new file mode 100644
index 000000000000..f11b1f96399e
--- /dev/null
+++ b/editors/atom/files/patch-src_text-editor-component.js
@@ -0,0 +1,29 @@
+--- src/text-editor-component.js.orig 2020-06-10 09:38:09 UTC
++++ src/text-editor-component.js
+@@ -1812,7 +1812,7 @@ module.exports = class TextEditorComponent {
+ // the paste event. And since we don't use the `paste` event for any
+ // behavior in Atom, we can no-op the event to eliminate this issue.
+ // See https://github.com/atom/atom/pull/15183#issue-248432413.
+- if (this.getPlatform() === 'linux') event.preventDefault();
++ if (this.getPlatform() === 'linux' || this.getPlatform() === 'freebsd') event.preventDefault();
+ }
+
+ didTextInput(event) {
+@@ -1976,7 +1976,7 @@ module.exports = class TextEditorComponent {
+ // On Linux, pasting happens on middle click. A textInput event with the
+ // contents of the selection clipboard will be dispatched by the browser
+ // automatically on mouseup.
+- if (platform === 'linux' && this.isInputEnabled())
++ if ((platform === 'linux' || platform === 'freebsd') && this.isInputEnabled())
+ model.insertText(clipboard.readText('selection'));
+ return;
+ }
+@@ -2848,7 +2848,7 @@ module.exports = class TextEditorComponent {
+ didChangeSelectionRange() {
+ const { model } = this.props;
+
+- if (this.getPlatform() === 'linux') {
++ if (this.getPlatform() === 'linux' || this.getPlatform() === 'freebsd') {
+ if (this.selectionClipboardImmediateId) {
+ clearImmediate(this.selectionClipboardImmediateId);
+ }
diff --git a/editors/atom/files/patch-src_update-process-env.js b/editors/atom/files/patch-src_update-process-env.js
new file mode 100644
index 000000000000..fe34de0678a2
--- /dev/null
+++ b/editors/atom/files/patch-src_update-process-env.js
@@ -0,0 +1,11 @@
+--- src/update-process-env.js.orig 2019-10-21 17:33:40 UTC
++++ src/update-process-env.js
+@@ -8,7 +8,7 @@ const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([
+ 'ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT'
+ ]);
+
+-const PLATFORMS_KNOWN_TO_WORK = new Set(['darwin', 'linux']);
++const PLATFORMS_KNOWN_TO_WORK = new Set(['darwin', 'linux', 'freebsd']);
+
+ async function updateProcessEnv(launchEnv) {
+ let envToAssign;
diff --git a/editors/atom/files/patch-src_window-event-handler.js b/editors/atom/files/patch-src_window-event-handler.js
new file mode 100644
index 000000000000..a7e5cde400ad
--- /dev/null
+++ b/editors/atom/files/patch-src_window-event-handler.js
@@ -0,0 +1,11 @@
+--- src/window-event-handler.js.orig 2019-10-21 17:33:40 UTC
++++ src/window-event-handler.js
+@@ -44,7 +44,7 @@ module.exports = class WindowEventHandler {
+ })
+ );
+
+- if (['win32', 'linux'].includes(process.platform)) {
++ if (['win32', 'linux', 'freebsd'].includes(process.platform)) {
+ this.subscriptions.add(
+ this.atomEnvironment.commands.add(this.window, {
+ 'window:toggle-menu-bar': this.handleWindowToggleMenuBar
diff --git a/editors/atom/files/script/patch-script_node__modules_electron-packager_ignore.js b/editors/atom/files/script/patch-script_node__modules_electron-packager_ignore.js
new file mode 100644
index 000000000000..34b3130d4630
--- /dev/null
+++ b/editors/atom/files/script/patch-script_node__modules_electron-packager_ignore.js
@@ -0,0 +1,11 @@
+--- script/node_modules/electron-packager/ignore.js.orig 2019-12-27 05:37:51 UTC
++++ script/node_modules/electron-packager/ignore.js
+@@ -19,7 +19,7 @@ function generateIgnores (opts) {
+ } else {
+ opts.ignore = [].concat(DEFAULT_IGNORES)
+ }
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ opts.ignore.push(common.baseTempDir(opts))
+ }
+
diff --git a/editors/atom/files/script/patch-script_node__modules_electron-packager_targets.js b/editors/atom/files/script/patch-script_node__modules_electron-packager_targets.js
new file mode 100644
index 000000000000..947ba8cce13b
--- /dev/null
+++ b/editors/atom/files/script/patch-script_node__modules_electron-packager_targets.js
@@ -0,0 +1,22 @@
+--- script/node_modules/electron-packager/targets.js.orig 1985-10-26 08:15:00 UTC
++++ script/node_modules/electron-packager/targets.js
+@@ -5,9 +5,10 @@ const downloadArch = require('electron-download/lib/ar
+ const semver = require('semver')
+
+ const officialArchs = ['ia32', 'x64', 'armv7l', 'arm64', 'mips64el']
+-const officialPlatforms = ['darwin', 'linux', 'mas', 'win32']
++const officialPlatforms = ['darwin', 'freebsd', 'linux', 'mas', 'win32']
+ const officialPlatformArchCombos = {
+ darwin: ['x64'],
++ freebsd: ['x64'],
+ linux: ['ia32', 'x64', 'armv7l', 'arm64', 'mips64el'],
+ mas: ['x64'],
+ win32: ['ia32', 'x64']
+@@ -21,6 +22,7 @@ const linuxArchBuildVersions = {
+ // Maps to module filename for each platform (lazy-required if used)
+ const osModules = {
+ darwin: './mac',
++ freebsd: './linux',
+ linux: './linux',
+ mas: './mac', // map to darwin
+ win32: './win32'
diff --git a/editors/atom/files/script/patch-script_node__modules_passwd-user_index.js b/editors/atom/files/script/patch-script_node__modules_passwd-user_index.js
new file mode 100644
index 000000000000..4c991b8cce26
--- /dev/null
+++ b/editors/atom/files/script/patch-script_node__modules_passwd-user_index.js
@@ -0,0 +1,29 @@
+--- script/node_modules/passwd-user/index.js.orig 2019-12-27 05:40:00 UTC
++++ script/node_modules/passwd-user/index.js
+@@ -53,7 +53,7 @@ function extractLinux(line) {
+ }
+
+ function getUser(str, username) {
+- const extract = process.platform === 'linux' ? extractLinux : extractDarwin;
++ const extract = (process.platform === 'linux' || process.platform === 'freebsd') ? extractLinux : extractDarwin;
+ const lines = str.split('\n');
+ const l = lines.length;
+ let i = 0;
+@@ -76,7 +76,7 @@ module.exports = username => {
+ username = process.getuid();
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return pify(fs.readFile)('/etc/passwd', 'utf8')
+ .then(passwd => getUser(passwd, username));
+ }
+@@ -98,7 +98,7 @@ module.exports.sync = username => {
+ username = process.getuid();
+ }
+
+- if (process.platform === 'linux') {
++ if (process.platform === 'linux' || process.platform === 'freebsd') {
+ return getUser(fs.readFileSync('/etc/passwd', 'utf8'), username);
+ }
+
diff --git a/editors/atom/files/script/patch-script_node__modules_user-home_index.js b/editors/atom/files/script/patch-script_node__modules_user-home_index.js
new file mode 100644
index 000000000000..0fbfc84d9341
--- /dev/null
+++ b/editors/atom/files/script/patch-script_node__modules_user-home_index.js
@@ -0,0 +1,11 @@
+--- script/node_modules/user-home/index.js.orig 2019-12-27 05:43:04 UTC
++++ script/node_modules/user-home/index.js
+@@ -7,7 +7,7 @@ if (process.platform === 'win32') {
+ module.exports = env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null;
+ } else if (process.platform === 'darwin') {
+ module.exports = home || (user ? '/Users/' + user : null) || null;
+-} else if (process.platform === 'linux') {
++} else if (process.platform === 'linux' || process.platform === 'freebsd') {
+ module.exports = home ||
+ (user ? (process.getuid() === 0 ? '/root' : '/home/' + user) : null) || null;
+ } else {
diff --git a/editors/atom/pkg-descr b/editors/atom/pkg-descr
new file mode 100644
index 000000000000..62e92ae65ffb
--- /dev/null
+++ b/editors/atom/pkg-descr
@@ -0,0 +1,6 @@
+Atom is a hackable text editor for the 21st century, built on
+Electron, and based on everything we love about our favorite
+editors. We designed it to be deeply customizable, but still
+approachable using the default configuration.
+
+WWW: https://atom.io/
diff --git a/editors/atom/pkg-plist b/editors/atom/pkg-plist
new file mode 100644
index 000000000000..db3b1244f9fe
--- /dev/null
+++ b/editors/atom/pkg-plist
@@ -0,0 +1,8726 @@
+bin/apm
+bin/atom
+share/applications/atom.desktop
+%%DATADIR%%/LICENSE
+%%DATADIR%%/LICENSES.chromium.html
+%%DATADIR%%/atom
+%%DATADIR%%/atom.png
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/natives_blob.bin
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/LICENSE.md
+%%DATADIR%%/resources/app.asar
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/@atom/fuzzy-native/build/Release/fuzzy-native.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/@atom/nsfw/build/Release/nsfw.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/@atom/watcher/build/Release/watcher.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/ctags/build/Release/ctags.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/fs-admin/build/Release/fs_admin.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/git-utils/build/Release/git.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/git-askpass-atom.js
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/git-askpass-atom.sh
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/git-credential-atom.js
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/git-credential-atom.sh
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/gpg-wrapper.sh
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/github/bin/linux-ssh-wrapper.sh
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/keyboard-layout/build/Release/keyboard-layout-manager.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/keytar/build/Release/keytar.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/nslog/build/Release/nslog.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/oniguruma/build/Release/onig_scanner.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/pathwatcher/build/Release/pathwatcher.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/scrollbar-style/build/Release/scrollbar-style-observer.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/LICENSE.md
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/README.md
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/build/Release/hunspell.a
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/build/Release/spellchecker.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/lib/spellchecker.js
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/package.json
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/src/spellchecker_mac.mm
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/vendor/hunspell_dictionaries/README.txt
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/vendor/hunspell_dictionaries/en_US.aff
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/spellchecker/vendor/hunspell_dictionaries/en_US.dic
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/superstring/build/Release/superstring.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/symbols-view/lib/ctags-config
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/symbols-view/vendor/ctags-darwin
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/symbols-view/vendor/ctags-linux
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/symbols-view/vendor/ctags-win32.exe
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/Release/tree_sitter_bash_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-c/build/Release/tree_sitter_c_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-cpp/build/Release/tree_sitter_cpp_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-css/build/Release/tree_sitter_css_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-embedded-template/build/Release/tree_sitter_embedded_template_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-go/build/Release/tree_sitter_go_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-html/build/Release/tree_sitter_html_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-javascript/build/Release/tree_sitter_javascript_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-jsdoc/build/Release/tree_sitter_jsdoc_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-json/build/Release/tree_sitter_json_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-python/build/Release/tree_sitter_python_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-regex/build/Release/tree_sitter_regex_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-ruby/build/Release/tree_sitter_ruby_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-rust/build/Release/tree_sitter_rust_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-typescript/build/Release/tree_sitter_tsx_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter-typescript/build/Release/tree_sitter_typescript_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/tree-sitter/build/Release/tree_sitter_runtime_binding.node
+%%DATADIR%%/resources/app.asar.unpacked/node_modules/vscode-ripgrep/bin/rg
+%%DATADIR%%/resources/app.asar.unpacked/resources/atom.png
+%%DATADIR%%/resources/app/apm/.github/no-response.yml
+%%DATADIR%%/resources/app/apm/BUNDLED_NODE_VERSION
+%%DATADIR%%/resources/app/apm/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/ISSUE_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/LICENSE.md
+%%DATADIR%%/resources/app/apm/PULL_REQUEST_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/README.md
+%%DATADIR%%/resources/app/apm/bin/apm
+%%DATADIR%%/resources/app/apm/bin/apm.cmd
+%%DATADIR%%/resources/app/apm/bin/node
+%%DATADIR%%/resources/app/apm/bin/npm
+%%DATADIR%%/resources/app/apm/bin/npm.cmd
+%%DATADIR%%/resources/app/apm/deprecated-packages.json
+%%DATADIR%%/resources/app/apm/lib/apm-cli.js
+%%DATADIR%%/resources/app/apm/lib/apm.js
+%%DATADIR%%/resources/app/apm/lib/auth.js
+%%DATADIR%%/resources/app/apm/lib/ci.js
+%%DATADIR%%/resources/app/apm/lib/clean.js
+%%DATADIR%%/resources/app/apm/lib/cli.js
+%%DATADIR%%/resources/app/apm/lib/command.js
+%%DATADIR%%/resources/app/apm/lib/config.js
+%%DATADIR%%/resources/app/apm/lib/dedupe.js
+%%DATADIR%%/resources/app/apm/lib/deprecated-packages.js
+%%DATADIR%%/resources/app/apm/lib/develop.js
+%%DATADIR%%/resources/app/apm/lib/disable.js
+%%DATADIR%%/resources/app/apm/lib/docs.js
+%%DATADIR%%/resources/app/apm/lib/enable.js
+%%DATADIR%%/resources/app/apm/lib/featured.js
+%%DATADIR%%/resources/app/apm/lib/fs.js
+%%DATADIR%%/resources/app/apm/lib/git.js
+%%DATADIR%%/resources/app/apm/lib/init.js
+%%DATADIR%%/resources/app/apm/lib/install.js
+%%DATADIR%%/resources/app/apm/lib/link.js
+%%DATADIR%%/resources/app/apm/lib/links.js
+%%DATADIR%%/resources/app/apm/lib/list.js
+%%DATADIR%%/resources/app/apm/lib/login.js
+%%DATADIR%%/resources/app/apm/lib/package-converter.js
+%%DATADIR%%/resources/app/apm/lib/packages.js
+%%DATADIR%%/resources/app/apm/lib/publish.js
+%%DATADIR%%/resources/app/apm/lib/rebuild-module-cache.js
+%%DATADIR%%/resources/app/apm/lib/rebuild.js
+%%DATADIR%%/resources/app/apm/lib/request.js
+%%DATADIR%%/resources/app/apm/lib/search.js
+%%DATADIR%%/resources/app/apm/lib/star.js
+%%DATADIR%%/resources/app/apm/lib/stars.js
+%%DATADIR%%/resources/app/apm/lib/test.js
+%%DATADIR%%/resources/app/apm/lib/text-mate-theme.js
+%%DATADIR%%/resources/app/apm/lib/theme-converter.js
+%%DATADIR%%/resources/app/apm/lib/tree.js
+%%DATADIR%%/resources/app/apm/lib/uninstall.js
+%%DATADIR%%/resources/app/apm/lib/unlink.js
+%%DATADIR%%/resources/app/apm/lib/unpublish.js
+%%DATADIR%%/resources/app/apm/lib/unstar.js
+%%DATADIR%%/resources/app/apm/lib/upgrade.js
+%%DATADIR%%/resources/app/apm/lib/view.js
+%%DATADIR%%/resources/app/apm/native-module/index.js
+%%DATADIR%%/resources/app/apm/native-module/package.json
+%%DATADIR%%/resources/app/apm/node_modules/.bin/apm
+%%DATADIR%%/resources/app/apm/node_modules/.bin/asar
+%%DATADIR%%/resources/app/apm/node_modules/.bin/cake
+%%DATADIR%%/resources/app/apm/node_modules/.bin/coffee
+%%DATADIR%%/resources/app/apm/node_modules/.bin/csonc
+%%DATADIR%%/resources/app/apm/node_modules/.bin/decompress-zip
+%%DATADIR%%/resources/app/apm/node_modules/.bin/detect-libc
+%%DATADIR%%/resources/app/apm/node_modules/.bin/mkdirp
+%%DATADIR%%/resources/app/apm/node_modules/.bin/ncp
+%%DATADIR%%/resources/app/apm/node_modules/.bin/nopt
+%%DATADIR%%/resources/app/apm/node_modules/.bin/npm
+%%DATADIR%%/resources/app/apm/node_modules/.bin/npx
+%%DATADIR%%/resources/app/apm/node_modules/.bin/prebuild-install
+%%DATADIR%%/resources/app/apm/node_modules/.bin/rc
+%%DATADIR%%/resources/app/apm/node_modules/.bin/rimraf
+%%DATADIR%%/resources/app/apm/node_modules/.bin/semver
+%%DATADIR%%/resources/app/apm/node_modules/.bin/sshpk-conv
+%%DATADIR%%/resources/app/apm/node_modules/.bin/sshpk-sign
+%%DATADIR%%/resources/app/apm/node_modules/.bin/sshpk-verify
+%%DATADIR%%/resources/app/apm/node_modules/.bin/uuid
+%%DATADIR%%/resources/app/apm/node_modules/.bin/window-size
+%%DATADIR%%/resources/app/apm/node_modules/@atom/plist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/@atom/plist/README.md
+%%DATADIR%%/resources/app/apm/node_modules/@atom/plist/lib/plist.js
+%%DATADIR%%/resources/app/apm/node_modules/@atom/plist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/abbrev/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/abbrev/README.md
+%%DATADIR%%/resources/app/apm/node_modules/abbrev/abbrev.js
+%%DATADIR%%/resources/app/apm/node_modules/abbrev/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/.tonic_example.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/ajv/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ajv/dist/ajv.bundle.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/dist/ajv.min.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/ajv.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/cache.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/async.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/equal.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/error_classes.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/formats.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/resolve.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/rules.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/schema_obj.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/ucs2length.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/compile/util.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/data.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/definition_schema.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/_limit.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/_limitItems.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/_limitLength.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/_limitProperties.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/allOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/anyOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/coerce.def
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/comment.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/const.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/contains.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/custom.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/defaults.def
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/definitions.def
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/dependencies.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/enum.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/errors.def
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/format.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/if.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/items.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/missing.def
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/multipleOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/not.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/oneOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/pattern.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/properties.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/propertyNames.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/ref.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/required.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/uniqueItems.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dot/validate.jst
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/_limit.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/_limitItems.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/_limitLength.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/_limitProperties.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/allOf.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/anyOf.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/comment.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/const.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/contains.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/custom.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/dependencies.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/enum.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/format.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/if.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/items.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/multipleOf.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/not.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/oneOf.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/pattern.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/properties.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/propertyNames.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/ref.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/required.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/uniqueItems.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/dotjs/validate.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/keyword.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/refs/data.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/refs/json-schema-draft-04.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/refs/json-schema-draft-06.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/refs/json-schema-draft-07.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/lib/refs/json-schema-secure.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/bundle.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/compile-dots.js
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/info
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/prepare-tests
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/publish-built-version
+%%DATADIR%%/resources/app/apm/node_modules/ajv/scripts/travis-gh-pages
+%%DATADIR%%/resources/app/apm/node_modules/ansi-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ansi-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/ansi-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ansi-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/README.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/index.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/isarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/package.json
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/tracker-base.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/tracker-group.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/tracker-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/are-we-there-yet/tracker.js
+%%DATADIR%%/resources/app/apm/node_modules/asar-require/README.md
+%%DATADIR%%/resources/app/apm/node_modules/asar-require/lib/require.js
+%%DATADIR%%/resources/app/apm/node_modules/asar-require/package.json
+%%DATADIR%%/resources/app/apm/node_modules/asar/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/asar/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/asar/README.md
+%%DATADIR%%/resources/app/apm/node_modules/asar/bin/asar
+%%DATADIR%%/resources/app/apm/node_modules/asar/lib/asar.js
+%%DATADIR%%/resources/app/apm/node_modules/asar/lib/crawlfs.js
+%%DATADIR%%/resources/app/apm/node_modules/asar/lib/disk.js
+%%DATADIR%%/resources/app/apm/node_modules/asar/lib/filesystem.js
+%%DATADIR%%/resources/app/apm/node_modules/asar/lib/snapshot.js
+%%DATADIR%%/resources/app/apm/node_modules/asar/package.json
+%%DATADIR%%/resources/app/apm/node_modules/asn1/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/asn1/README.md
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/ber/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/ber/index.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/ber/reader.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/ber/types.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/ber/writer.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/asn1/package.json
+%%DATADIR%%/resources/app/apm/node_modules/assert-plus/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/assert-plus/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/assert-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/assert-plus/assert.js
+%%DATADIR%%/resources/app/apm/node_modules/assert-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/async/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/async/README.md
+%%DATADIR%%/resources/app/apm/node_modules/async/component.json
+%%DATADIR%%/resources/app/apm/node_modules/async/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/async/package.json
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/bench.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/abort.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/defer.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/iterate.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/readable_asynckit.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/readable_parallel.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/readable_serial.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/readable_serial_ordered.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/state.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/streamify.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/lib/terminator.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/parallel.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/serial.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/serialOrdered.js
+%%DATADIR%%/resources/app/apm/node_modules/asynckit/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/aws-sign2/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/aws-sign2/README.md
+%%DATADIR%%/resources/app/apm/node_modules/aws-sign2/index.js
+%%DATADIR%%/resources/app/apm/node_modules/aws-sign2/package.json
+%%DATADIR%%/resources/app/apm/node_modules/aws4/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/aws4/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/aws4/README.md
+%%DATADIR%%/resources/app/apm/node_modules/aws4/aws4.js
+%%DATADIR%%/resources/app/apm/node_modules/aws4/lru.js
+%%DATADIR%%/resources/app/apm/node_modules/aws4/package.json
+%%DATADIR%%/resources/app/apm/node_modules/balanced-match/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/balanced-match/README.md
+%%DATADIR%%/resources/app/apm/node_modules/balanced-match/index.js
+%%DATADIR%%/resources/app/apm/node_modules/balanced-match/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bcrypt-pbkdf/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/bcrypt-pbkdf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/bcrypt-pbkdf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bcrypt-pbkdf/index.js
+%%DATADIR%%/resources/app/apm/node_modules/bcrypt-pbkdf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/binary/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/binary/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/binary/index.js
+%%DATADIR%%/resources/app/apm/node_modules/binary/lib/vars.js
+%%DATADIR%%/resources/app/apm/node_modules/binary/package.json
+%%DATADIR%%/resources/app/apm/node_modules/binary/perf/loop.js
+%%DATADIR%%/resources/app/apm/node_modules/binary/perf/small.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/bl/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/bl.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/isarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/bl/package.json
+%%DATADIR%%/resources/app/apm/node_modules/block-stream/LICENCE
+%%DATADIR%%/resources/app/apm/node_modules/block-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/block-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/block-stream/block-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/block-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/brace-expansion/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/brace-expansion/README.md
+%%DATADIR%%/resources/app/apm/node_modules/brace-expansion/index.js
+%%DATADIR%%/resources/app/apm/node_modules/brace-expansion/package.json
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc-unsafe/index.js
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc-unsafe/package.json
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc-unsafe/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc/index.js
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc/package.json
+%%DATADIR%%/resources/app/apm/node_modules/buffer-alloc/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/buffer-fill/index.js
+%%DATADIR%%/resources/app/apm/node_modules/buffer-fill/package.json
+%%DATADIR%%/resources/app/apm/node_modules/buffer-fill/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/buffers/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/buffers/index.js
+%%DATADIR%%/resources/app/apm/node_modules/buffers/package.json
+%%DATADIR%%/resources/app/apm/node_modules/camelcase/index.js
+%%DATADIR%%/resources/app/apm/node_modules/camelcase/license
+%%DATADIR%%/resources/app/apm/node_modules/camelcase/package.json
+%%DATADIR%%/resources/app/apm/node_modules/camelcase/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/caseless/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/caseless/README.md
+%%DATADIR%%/resources/app/apm/node_modules/caseless/index.js
+%%DATADIR%%/resources/app/apm/node_modules/caseless/package.json
+%%DATADIR%%/resources/app/apm/node_modules/caseless/test.js
+%%DATADIR%%/resources/app/apm/node_modules/chainsaw/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/chainsaw/index.js
+%%DATADIR%%/resources/app/apm/node_modules/chainsaw/package.json
+%%DATADIR%%/resources/app/apm/node_modules/chownr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/chownr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/chownr/chownr.js
+%%DATADIR%%/resources/app/apm/node_modules/chownr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/chromium-pickle-js/README.md
+%%DATADIR%%/resources/app/apm/node_modules/chromium-pickle-js/lib/exports.js
+%%DATADIR%%/resources/app/apm/node_modules/chromium-pickle-js/lib/pickle.js
+%%DATADIR%%/resources/app/apm/node_modules/chromium-pickle-js/package.json
+%%DATADIR%%/resources/app/apm/node_modules/chromium-pickle-js/test.js
+%%DATADIR%%/resources/app/apm/node_modules/cliui/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/cliui/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/cliui/README.md
+%%DATADIR%%/resources/app/apm/node_modules/cliui/index.js
+%%DATADIR%%/resources/app/apm/node_modules/cliui/package.json
+%%DATADIR%%/resources/app/apm/node_modules/code-point-at/index.js
+%%DATADIR%%/resources/app/apm/node_modules/code-point-at/license
+%%DATADIR%%/resources/app/apm/node_modules/code-point-at/package.json
+%%DATADIR%%/resources/app/apm/node_modules/code-point-at/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/README.md
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/bin/cake
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/bin/coffee
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/cake.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/coffee-script.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/command.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/grammar.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/helpers.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/index.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/lexer.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/nodes.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/optparse.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/parser.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/register.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/repl.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/rewriter.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/scope.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/lib/coffee-script/sourcemap.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/package.json
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/register.js
+%%DATADIR%%/resources/app/apm/node_modules/coffee-script/repl.js
+%%DATADIR%%/resources/app/apm/node_modules/colors/MIT-LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/colors/ReadMe.md
+%%DATADIR%%/resources/app/apm/node_modules/colors/colors.js
+%%DATADIR%%/resources/app/apm/node_modules/colors/example.html
+%%DATADIR%%/resources/app/apm/node_modules/colors/example.js
+%%DATADIR%%/resources/app/apm/node_modules/colors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/colors/test.js
+%%DATADIR%%/resources/app/apm/node_modules/colors/themes/winston-dark.js
+%%DATADIR%%/resources/app/apm/node_modules/colors/themes/winston-light.js
+%%DATADIR%%/resources/app/apm/node_modules/combined-stream/License
+%%DATADIR%%/resources/app/apm/node_modules/combined-stream/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/combined-stream/lib/combined_stream.js
+%%DATADIR%%/resources/app/apm/node_modules/combined-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/combined-stream/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/commander/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/commander/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/commander/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/commander/index.js
+%%DATADIR%%/resources/app/apm/node_modules/commander/package.json
+%%DATADIR%%/resources/app/apm/node_modules/concat-map/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/concat-map/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/concat-map/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/concat-map/index.js
+%%DATADIR%%/resources/app/apm/node_modules/concat-map/package.json
+%%DATADIR%%/resources/app/apm/node_modules/console-control-strings/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/console-control-strings/README.md
+%%DATADIR%%/resources/app/apm/node_modules/console-control-strings/index.js
+%%DATADIR%%/resources/app/apm/node_modules/console-control-strings/package.json
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/README.md
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/float.patch
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/lib/util.js
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/package.json
+%%DATADIR%%/resources/app/apm/node_modules/core-util-is/test.js
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/README.md
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/lib/cson-parser.js
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/lib/stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/cson-parser/package.json
+%%DATADIR%%/resources/app/apm/node_modules/cuint/History.md
+%%DATADIR%%/resources/app/apm/node_modules/cuint/README.md
+%%DATADIR%%/resources/app/apm/node_modules/cuint/build.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/build/uint32.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/build/uint32.min.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/build/uint64.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/build/uint64.min.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/index.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/lib/uint32.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/lib/uint64.js
+%%DATADIR%%/resources/app/apm/node_modules/cuint/package.json
+%%DATADIR%%/resources/app/apm/node_modules/d/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/d/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/d/LICENCE
+%%DATADIR%%/resources/app/apm/node_modules/d/README.md
+%%DATADIR%%/resources/app/apm/node_modules/d/auto-bind.js
+%%DATADIR%%/resources/app/apm/node_modules/d/index.js
+%%DATADIR%%/resources/app/apm/node_modules/d/lazy.js
+%%DATADIR%%/resources/app/apm/node_modules/d/package.json
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/README.md
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/etc/dashdash.bash_completion.in
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/lib/dashdash.js
+%%DATADIR%%/resources/app/apm/node_modules/dashdash/package.json
+%%DATADIR%%/resources/app/apm/node_modules/decamelize/index.js
+%%DATADIR%%/resources/app/apm/node_modules/decamelize/license
+%%DATADIR%%/resources/app/apm/node_modules/decamelize/package.json
+%%DATADIR%%/resources/app/apm/node_modules/decamelize/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-response/index.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-response/license
+%%DATADIR%%/resources/app/apm/node_modules/decompress-response/package.json
+%%DATADIR%%/resources/app/apm/node_modules/decompress-response/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/README.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/bin/decompress-zip
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/lib/decompress-zip.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/lib/extractors.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/lib/file-details.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/lib/signatures.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/lib/structures.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/license
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/README.md
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/package.json
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/q.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/node_modules/q/queue.js
+%%DATADIR%%/resources/app/apm/node_modules/decompress-zip/package.json
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/index.js
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/lib/deep-extend.js
+%%DATADIR%%/resources/app/apm/node_modules/deep-extend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/delayed-stream/License
+%%DATADIR%%/resources/app/apm/node_modules/delayed-stream/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/delayed-stream/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/delayed-stream/lib/delayed_stream.js
+%%DATADIR%%/resources/app/apm/node_modules/delayed-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/delegates/History.md
+%%DATADIR%%/resources/app/apm/node_modules/delegates/License
+%%DATADIR%%/resources/app/apm/node_modules/delegates/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/delegates/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/delegates/index.js
+%%DATADIR%%/resources/app/apm/node_modules/delegates/package.json
+%%DATADIR%%/resources/app/apm/node_modules/detect-libc/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/detect-libc/README.md
+%%DATADIR%%/resources/app/apm/node_modules/detect-libc/bin/detect-libc.js
+%%DATADIR%%/resources/app/apm/node_modules/detect-libc/lib/detect-libc.js
+%%DATADIR%%/resources/app/apm/node_modules/detect-libc/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/lib/LICENSE-jsbn
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/lib/ec.js
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/lib/sec.js
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ecc-jsbn/test.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/emissary/README.md
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/behavior.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/emissary.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/emitter.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/helpers.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/signal.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/subscriber.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/lib/subscription.js
+%%DATADIR%%/resources/app/apm/node_modules/emissary/package.json
+%%DATADIR%%/resources/app/apm/node_modules/end-of-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/end-of-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/end-of-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/end-of-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/.github/FUNDING.yml
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/@@iterator/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/@@iterator/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/@@iterator/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/@@iterator/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/_compare-by-length.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/binary-search.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/clear.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/compact.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/concat/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/concat/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/concat/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/concat/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/contains.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/copy-within/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/copy-within/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/copy-within/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/copy-within/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/diff.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/e-index-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/e-last-index-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/entries/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/entries/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/entries/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/entries/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/exclusion.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/fill/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/fill/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/fill/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/fill/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/filter/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/filter/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/filter/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/filter/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find-index/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find-index/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find-index/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find-index/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/find/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/first-index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/first.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/flatten.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/for-each-right.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/group.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/indexes-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/intersection.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/is-copy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/is-empty.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/is-uniq.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/keys/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/keys/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/keys/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/keys/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/last-index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/last.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/map/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/map/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/map/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/map/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/remove.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/separate.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/slice/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/slice/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/slice/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/slice/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/some-right.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/splice/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/splice/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/splice/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/splice/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/uniq.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/values/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/values/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/values/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/#/values/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/_is-extensible.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/_sub-array-dummy-safe.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/_sub-array-dummy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/from/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/from/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/from/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/from/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/generate.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/is-plain-array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/of/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/of/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/of/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/of/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/to-array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/array/valid-array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/boolean/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/boolean/is-boolean.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/copy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/days-in-month.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/floor-day.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/floor-month.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/floor-year.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/format.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/ensure-time-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/is-date.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/is-time-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/date/valid-date.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/#/throw.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/custom.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/is-error.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/error/valid-error.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/compose.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/copy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/curry.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/lock.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/microtask-delay.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/not.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/partial.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/spread.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/#/to-string-tokens.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/_define-length.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/constant.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/identity.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/invoke.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/is-arguments.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/is-function.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/noop.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/pluck.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/function/valid-function.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/global.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/iterable/for-each.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/iterable/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/iterable/is.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/iterable/validate-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/iterable/validate.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/json/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/json/safe-stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/_decimal-adjust.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/_pack-ieee754.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/_unpack-ieee754.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/acosh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/acosh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/acosh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/acosh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/asinh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/asinh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/asinh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/asinh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/atanh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/atanh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/atanh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/atanh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cbrt/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cbrt/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cbrt/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cbrt/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/ceil-10.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/clz32/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/clz32/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/clz32/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/clz32/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cosh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cosh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cosh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/cosh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/expm1/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/expm1/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/expm1/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/expm1/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/floor-10.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/fround/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/fround/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/fround/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/fround/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/hypot/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/hypot/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/hypot/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/hypot/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/imul/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/imul/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/imul/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/imul/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log10/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log10/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log10/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log10/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log1p/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log1p/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log1p/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log1p/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log2/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log2/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log2/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/log2/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/round-10.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sign/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sign/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sign/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sinh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sinh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sinh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/sinh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/tanh/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/tanh/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/tanh/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/tanh/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/trunc/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/trunc/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/trunc/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/math/trunc/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/.github/FUNDING.yml
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/auto-bind.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/lazy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/#/chain.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/for-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/get.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/is-iterable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/string.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/valid-iterable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/.github/FUNDING.yml
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/.testignore
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/is-native-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/is-symbol.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/lib/private/generate-name.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/lib/private/setup/standard-symbols.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/lib/private/setup/symbol-registry.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/polyfill.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/validate-symbol.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/#/pad.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/epsilon/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/epsilon/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/epsilon/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-finite/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-finite/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-finite/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-finite/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-integer/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-integer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-integer/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-integer/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-nan/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-nan/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-nan/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-nan/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-natural.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-number.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-safe-integer/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-safe-integer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-safe-integer/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/is-safe-integer/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/max-safe-integer/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/max-safe-integer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/max-safe-integer/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/min-safe-integer/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/min-safe-integer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/min-safe-integer/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/to-integer.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/to-pos-integer.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/number/to-uint32.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/_iterate.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/assign-deep.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/assign/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/assign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/assign/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/assign/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/clear.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/compact.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/compare.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/copy-deep.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/copy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/count.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/create.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-finite-number.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-integer.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-natural-number-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-natural-number.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-plain-function.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-plain-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-promise.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/ensure-thenable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/entries/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/entries/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/entries/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/entries/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/eq.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/every.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/filter.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/find-key.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/find.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/first-key.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/flatten.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/for-each.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/get-property-names.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-array-like.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-callable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-copy-deep.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-copy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-empty.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-finite-number.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-integer.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-natural-number-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-natural-number.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-number-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-plain-function.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-plain-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-promise.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-thenable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/is.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/key-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/keys/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/keys/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/keys/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/keys/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/map-keys.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/map.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/mixin-prototypes.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/mixin.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/normalize-options.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/primitive-set.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/safe-traverse.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/serialize.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/set-prototype-of/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/set-prototype-of/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/set-prototype-of/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/set-prototype-of/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/some.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/to-array.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/unserialize.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/valid-callable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/valid-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/valid-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/validate-array-like-object.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/validate-array-like.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/validate-stringifiable-value.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/object/validate-stringifiable.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/optional-chaining.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/as-callback.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/finally/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/finally/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/finally/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/finally/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/promise/lazy.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/is-sticky.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/is-unicode.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/match/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/match/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/match/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/match/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/replace/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/replace/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/replace/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/search/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/search/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/search/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/search/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/split/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/split/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/split/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/split/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/sticky/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/unicode/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/escape.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/is-reg-exp.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/reg-exp/valid-reg-exp.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/safe-to-string.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/@@iterator/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/@@iterator/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/@@iterator/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/@@iterator/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/at.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/camel-to-hyphen.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/capitalize.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/case-insensitive-compare.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/code-point-at/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/code-point-at/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/code-point-at/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/code-point-at/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/contains/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/contains/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/contains/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/contains/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/count.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/ends-with/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/ends-with/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/ends-with/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/ends-with/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/hyphen-to-camel.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/indent.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/last.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/normalize/_data.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/normalize/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/normalize/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/normalize/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/normalize/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/pad.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/plain-replace-all.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/plain-replace.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/repeat/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/repeat/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/repeat/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/repeat/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/starts-with/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/starts-with/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/starts-with/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/starts-with/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/#/uncapitalize.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/format-method.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/from-code-point/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/from-code-point/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/from-code-point/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/from-code-point/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/is-string.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/random-uniq.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/random.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/raw/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/raw/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/raw/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/string/raw/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/es5-ext/to-short-string-representation.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/#/chain.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/array.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/for-of.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/get.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/is-iterable.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/string.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-iterator/valid-iterable.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/is-native-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/is-symbol.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/polyfill.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-symbol/validate-symbol.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/LICENCE
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/README.md
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/index.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/is-native-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/is-weak-map.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/package.json
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/polyfill.js
+%%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/valid-weak-map.js
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/.github/no-response.yml
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/api.json
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/dist/composite-disposable.js
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/dist/disposable.js
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/dist/emitter.js
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/dist/event-kit.js
+%%DATADIR%%/resources/app/apm/node_modules/event-kit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/README.md
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/index.js
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/package.json
+%%DATADIR%%/resources/app/apm/node_modules/expand-template/test.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/ext/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/function/identity.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/global-this.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/math/ceil-10.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/math/floor-10.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/math/round-10.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/object/entries.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/string/random.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/string_/includes.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/docs/thenable_/finally.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/function/identity.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/global-this/implementation.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/global-this/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/global-this/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/lib/private/decimal-adjust.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/math/ceil-10.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/math/floor-10.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/math/round-10.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array-length/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array-length/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array-like/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array-like/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/array/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/date/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/date/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/error/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/error/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/finite/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/finite/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/function/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/function/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/integer/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/integer/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/iterable/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/iterable/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/lib/is-to-string-tag-supported.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/lib/resolve-error-message.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/lib/resolve-exception.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/lib/safe-to-string.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/lib/to-short-string.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/natural-number/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/natural-number/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/number/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/number/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/object/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/object/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/plain-function/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/plain-function/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/plain-object/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/plain-object/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/promise/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/promise/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/prototype/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/reg-exp/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/reg-exp/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/safe-integer/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/safe-integer/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/string/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/string/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/thenable/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/thenable/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/time-value/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/time-value/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/value/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/value/is.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/object/entries/implement.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/object/entries/implementation.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/object/entries/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/object/entries/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ext/string/random.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/string_/includes/implementation.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/string_/includes/index.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/string_/includes/is-implemented.js
+%%DATADIR%%/resources/app/apm/node_modules/ext/thenable_/finally.js
+%%DATADIR%%/resources/app/apm/node_modules/extend/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/extend/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/extend/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/extend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/extend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/extend/component.json
+%%DATADIR%%/resources/app/apm/node_modules/extend/index.js
+%%DATADIR%%/resources/app/apm/node_modules/extend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/.gitmodules
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/Makefile.targ
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/jsl.node.conf
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/lib/extsprintf.js
+%%DATADIR%%/resources/app/apm/node_modules/extsprintf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/es6/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/es6/react.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fast-deep-equal/react.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/.github/FUNDING.yml
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/benchmark/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/benchmark/test.json
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/README.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/api.json
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/benchmark/bootstrap.css
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/benchmark/bootstrap.min.css
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/benchmark/large.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/benchmark/large.min.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/first-mate.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/grammar-registry.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/grammar.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/injections.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/null-grammar.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/pattern.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/rule.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/scanner.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/scope-selector-matchers.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/scope-selector-parser.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/lib/scope-selector.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/README.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/dist/async.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/dist/async.min.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/async/package.json
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/fs-plus/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/fs-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/fs-plus/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/fs-plus/lib/fs-plus.js
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/node_modules/fs-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/first-mate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/forever-agent/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/forever-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/forever-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/forever-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/form-data/License
+%%DATADIR%%/resources/app/apm/node_modules/form-data/README.md
+%%DATADIR%%/resources/app/apm/node_modules/form-data/lib/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/form-data/lib/form_data.js
+%%DATADIR%%/resources/app/apm/node_modules/form-data/lib/populate.js
+%%DATADIR%%/resources/app/apm/node_modules/form-data/package.json
+%%DATADIR%%/resources/app/apm/node_modules/form-data/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/fs-constants/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fs-constants/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-constants/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-constants/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-constants/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy-sync/copy-file-sync.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy-sync/copy-sync.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy-sync/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy/copy.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/copy/ncp.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/empty/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/file.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/link.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/symlink-paths.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/symlink-type.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/ensure/symlink.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/json/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/json/jsonfile.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/json/output-json-sync.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/json/output-json.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/mkdirs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/mkdirs/mkdirs.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/move/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/output/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/remove/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/streams/create-output-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/streams/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/util/assign.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/util/utimes.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/lib/walk/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-extra/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/lib/fs-plus.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/dist/async.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/dist/async.min.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/node_modules/async/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fs-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fs.realpath/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fs.realpath/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fs.realpath/index.js
+%%DATADIR%%/resources/app/apm/node_modules/fs.realpath/old.js
+%%DATADIR%%/resources/app/apm/node_modules/fs.realpath/package.json
+%%DATADIR%%/resources/app/apm/node_modules/fstream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/fstream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/fstream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/fstream/fstream.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/abstract.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/collect.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/dir-reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/dir-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/file-reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/file-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/get-type.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/link-reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/link-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/proxy-reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/proxy-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/socket-reader.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/lib/writer.js
+%%DATADIR%%/resources/app/apm/node_modules/fstream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/gauge/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/gauge/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/gauge/README.md
+%%DATADIR%%/resources/app/apm/node_modules/gauge/base-theme.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/error.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/has-color.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/index.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/package.json
+%%DATADIR%%/resources/app/apm/node_modules/gauge/plumbing.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/process.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/progress-bar.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/render-template.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/set-immediate.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/set-interval.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/spin.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/template-item.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/theme-set.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/themes.js
+%%DATADIR%%/resources/app/apm/node_modules/gauge/wide-truncate.js
+%%DATADIR%%/resources/app/apm/node_modules/getpass/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/getpass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/getpass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/getpass/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/getpass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/README.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/git.node
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/git2.a
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/http_parser.a
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/zlib.a
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/README.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/dist/async.js
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/dist/async.min.js
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/async/package.json
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/fs-plus/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/fs-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/fs-plus/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/fs-plus/lib/fs-plus.js
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/node_modules/fs-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/package.json
+%%DATADIR%%/resources/app/apm/node_modules/git-utils/src/git.js
+%%DATADIR%%/resources/app/apm/node_modules/github-from-package/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/github-from-package/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/github-from-package/index.js
+%%DATADIR%%/resources/app/apm/node_modules/github-from-package/package.json
+%%DATADIR%%/resources/app/apm/node_modules/github-from-package/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/glob/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/glob/README.md
+%%DATADIR%%/resources/app/apm/node_modules/glob/common.js
+%%DATADIR%%/resources/app/apm/node_modules/glob/glob.js
+%%DATADIR%%/resources/app/apm/node_modules/glob/package.json
+%%DATADIR%%/resources/app/apm/node_modules/glob/sync.js
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/clone.js
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/graceful-fs.js
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/legacy-streams.js
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/graceful-fs/polyfills.js
+%%DATADIR%%/resources/app/apm/node_modules/grim/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/grim/README.md
+%%DATADIR%%/resources/app/apm/node_modules/grim/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/grim/lib/deprecation.js
+%%DATADIR%%/resources/app/apm/node_modules/grim/lib/grim.js
+%%DATADIR%%/resources/app/apm/node_modules/grim/package.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/README.md
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/afterRequest.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/beforeRequest.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/browser.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/cache.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/content.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/cookie.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/creator.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/entry.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/har.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/header.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/log.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/page.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/pageTimings.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/postData.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/query.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/request.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/response.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/lib/timings.json
+%%DATADIR%%/resources/app/apm/node_modules/har-schema/package.json
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/README.md
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/lib/error.js
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/lib/promise.js
+%%DATADIR%%/resources/app/apm/node_modules/har-validator/package.json
+%%DATADIR%%/resources/app/apm/node_modules/has-unicode/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/has-unicode/README.md
+%%DATADIR%%/resources/app/apm/node_modules/has-unicode/index.js
+%%DATADIR%%/resources/app/apm/node_modules/has-unicode/package.json
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/README.md
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/git-host-info.js
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/git-host.js
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/index.js
+%%DATADIR%%/resources/app/apm/node_modules/hosted-git-info/package.json
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/.dir-locals.el
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/README.md
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/http_signing.md
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/lib/parser.js
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/lib/signer.js
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/lib/verify.js
+%%DATADIR%%/resources/app/apm/node_modules/http-signature/package.json
+%%DATADIR%%/resources/app/apm/node_modules/inflight/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/inflight/README.md
+%%DATADIR%%/resources/app/apm/node_modules/inflight/inflight.js
+%%DATADIR%%/resources/app/apm/node_modules/inflight/package.json
+%%DATADIR%%/resources/app/apm/node_modules/inherits/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/inherits/README.md
+%%DATADIR%%/resources/app/apm/node_modules/inherits/inherits.js
+%%DATADIR%%/resources/app/apm/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/resources/app/apm/node_modules/inherits/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ini/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/ini/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ini/ini.js
+%%DATADIR%%/resources/app/apm/node_modules/ini/package.json
+%%DATADIR%%/resources/app/apm/node_modules/invert-kv/index.js
+%%DATADIR%%/resources/app/apm/node_modules/invert-kv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/invert-kv/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/is-fullwidth-code-point/index.js
+%%DATADIR%%/resources/app/apm/node_modules/is-fullwidth-code-point/license
+%%DATADIR%%/resources/app/apm/node_modules/is-fullwidth-code-point/package.json
+%%DATADIR%%/resources/app/apm/node_modules/is-fullwidth-code-point/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/is-typedarray/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/is-typedarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/is-typedarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/is-typedarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/is-typedarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/isarray/build/build.js
+%%DATADIR%%/resources/app/apm/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/isstream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/isstream/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/isstream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/isstream/isstream.js
+%%DATADIR%%/resources/app/apm/node_modules/isstream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/isstream/test.js
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/example.html
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/example.js
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/jsbn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/README.md
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/index.js
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/spec/fixtures/schema.js
+%%DATADIR%%/resources/app/apm/node_modules/json-schema-traverse/spec/index.spec.js
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/README.md
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-00/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-00/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-00/links
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-00/schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-01/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-01/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-01/links
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-01/schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-02/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-02/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-02/links
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-02/schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-03/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-03/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-03/links
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-03/schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-04/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-04/links
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-04/schema
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-zyp-json-schema-03.xml
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-zyp-json-schema-04.xml
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/lib/links.js
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/lib/validate.js
+%%DATADIR%%/resources/app/apm/node_modules/json-schema/package.json
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/README.md
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/package.json
+%%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/README.md
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/index.js
+%%DATADIR%%/resources/app/apm/node_modules/jsonfile/package.json
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/README.md
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/lib/jsprim.js
+%%DATADIR%%/resources/app/apm/node_modules/jsprim/package.json
+%%DATADIR%%/resources/app/apm/node_modules/keytar/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/keytar/README.md
+%%DATADIR%%/resources/app/apm/node_modules/keytar/build/Release/keytar.node
+%%DATADIR%%/resources/app/apm/node_modules/keytar/lib/keytar.js
+%%DATADIR%%/resources/app/apm/node_modules/keytar/package.json
+%%DATADIR%%/resources/app/apm/node_modules/klaw/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/klaw/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/klaw/README.md
+%%DATADIR%%/resources/app/apm/node_modules/klaw/package.json
+%%DATADIR%%/resources/app/apm/node_modules/klaw/src/assign.js
+%%DATADIR%%/resources/app/apm/node_modules/klaw/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/lcid/index.js
+%%DATADIR%%/resources/app/apm/node_modules/lcid/lcid.json
+%%DATADIR%%/resources/app/apm/node_modules/lcid/license
+%%DATADIR%%/resources/app/apm/node_modules/lcid/package.json
+%%DATADIR%%/resources/app/apm/node_modules/lcid/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/HISTORY.md
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/db.json
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mime-db/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mime-types/HISTORY.md
+%%DATADIR%%/resources/app/apm/node_modules/mime-types/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mime-types/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mime-types/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mime-types/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mimic-response/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mimic-response/license
+%%DATADIR%%/resources/app/apm/node_modules/mimic-response/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mimic-response/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/minimatch/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/minimatch/README.md
+%%DATADIR%%/resources/app/apm/node_modules/minimatch/minimatch.js
+%%DATADIR%%/resources/app/apm/node_modules/minimatch/package.json
+%%DATADIR%%/resources/app/apm/node_modules/minimist/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/minimist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/minimist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/minimist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/minimist/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/mixto/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/mixto/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mixto/lib/mixin.js
+%%DATADIR%%/resources/app/apm/node_modules/mixto/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/bin/cmd.js
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/bin/usage.txt
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mkdirp/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/mkpath/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mkpath/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mkpath/mkpath.js
+%%DATADIR%%/resources/app/apm/node_modules/mkpath/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/lib/main.js
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/lib/mksnapshot-call.js
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/lib/mksnapshot-path.js
+%%DATADIR%%/resources/app/apm/node_modules/mksnapshot/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mute-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mute-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mute-stream/mute.js
+%%DATADIR%%/resources/app/apm/node_modules/mute-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mv/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/mv/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mv/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/.bin/ncp
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/.bin/rimraf
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/index.js
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/bin/ncp
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/lib/ncp.js
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/rimraf.js
+%%DATADIR%%/resources/app/apm/node_modules/mv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/napi-build-utils/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/napi-build-utils/README.md
+%%DATADIR%%/resources/app/apm/node_modules/napi-build-utils/index.js
+%%DATADIR%%/resources/app/apm/node_modules/napi-build-utils/index.md
+%%DATADIR%%/resources/app/apm/node_modules/napi-build-utils/package.json
+%%DATADIR%%/resources/app/apm/node_modules/ncp/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/ncp/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/ncp/README.md
+%%DATADIR%%/resources/app/apm/node_modules/ncp/bin/ncp
+%%DATADIR%%/resources/app/apm/node_modules/ncp/lib/ncp.js
+%%DATADIR%%/resources/app/apm/node_modules/ncp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/CHANGES
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/README.md
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/index.js
+%%DATADIR%%/resources/app/apm/node_modules/next-tick/package.json
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/CODE_OF_CONDUCT.md
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/README.md
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/node-abi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/History.md
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/circle.yml
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/noop-logger/package.json
+%%DATADIR%%/resources/app/apm/node_modules/nopt/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/nopt/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/nopt/README.md
+%%DATADIR%%/resources/app/apm/node_modules/nopt/bin/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/nopt/lib/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/nopt/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/.licensee.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/.mailmap
+%%DATADIR%%/resources/app/apm/node_modules/npm/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/node-gyp-bin/node-gyp
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/node-gyp-bin/node-gyp.cmd
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npm
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npm-cli.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npm.cmd
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npx
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npx-cli.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/bin/npx.cmd
+%%DATADIR%%/resources/app/apm/node_modules/npm/changelogs/CHANGELOG-1.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/changelogs/CHANGELOG-2.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/changelogs/CHANGELOG-3.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/changelogs/CHANGELOG-4.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/changelogs/CHANGELOG-5.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/configure
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/access.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/adduser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/audit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/auth/legacy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/auth/oauth.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/auth/saml.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/auth/sso.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/bugs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/cache.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/ci.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/completion.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/bin-links.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/clear-credentials-by-uri.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/cmd-list.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/core.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/defaults.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/figgy-config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/gentle-fs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/get-credentials-by-uri.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/lifecycle.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/load-cafile.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/load-prefix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/nerf-dart.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/set-credentials-by-uri.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/config/set-user.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/dedupe.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/deprecate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/dist-tag.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/docs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/check-files-permission.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/check-ping.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/get-git-path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/get-latest-nodejs-version.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/get-latest-npm-version.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/doctor/verify-cached-files.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/edit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/explore.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/fetch-package-metadata.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/fetch-package-metadata.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/fund.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/get.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/help-search.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/help.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/hook.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/init.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install-ci-test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install-test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/access-error.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/extract-worker.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/fetch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/finalize.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/global-install.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/global-link.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/install.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/move.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/postinstall.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/preinstall.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/prepare.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/refresh-package-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/remove.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/action/unbuild.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/actions.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/and-add-parent-to-errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/and-finish-tracker.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/and-ignore-errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/audit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/check-permissions.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/copy-tree.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/decompose-actions.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/deps.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/diff-trees.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/exists.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/flatten-tree.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/fund.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/get-requested.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/has-modern-meta.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/inflate-bundled.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/inflate-shrinkwrap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-dev-dep.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-extraneous.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-fs-access-available.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-only-dev.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-only-optional.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-opt-dep.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/is-prod-dep.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/module-staging-path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/mutate-into-logical-tree.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/read-shrinkwrap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/realize-shrinkwrap-specifier.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/report-optional-failure.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/save.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/update-package-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/validate-args.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/validate-tree.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/install/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/link.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/logout.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/ls.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/npm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/org.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/outdated.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/owner.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/pack.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/ping.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/prefix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/profile.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/prune.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/publish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/rebuild.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/repo.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/restart.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/root.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/run-script.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/search.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/search/all-package-metadata.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/search/all-package-search.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/search/format-package-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/search/package-filter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/set.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/shrinkwrap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/star.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/stars.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/start.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/stop.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/substack.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/team.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/token.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/unbuild.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/uninstall.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/unpublish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/update.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/ansi-trim.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/cache-file.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/child-path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/completion.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/completion/file-completion.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/completion/installed-deep.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/completion/installed-shallow.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/correct-mkdir.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/deep-sort-object.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/depr-check.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/did-you-mean.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/error-handler.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/error-message.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/escape-arg.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/escape-exec-path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/funding.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/gently-rm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/git.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/gunzip-maybe.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/is-registry.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/is-windows-bash.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/is-windows-shell.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/is-windows.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/lifecycle-cmd.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/lifecycle.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/link.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/locker.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/metrics-launch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/metrics.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/module-name.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/move.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/no-progress-while-running.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/open-url.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/otplease.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/output.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/package-id.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/parse-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/perf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/pick-manifest-from-registry-metadata.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/pulse-till-done.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/read-local-package.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/read-user-info.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/save-stack.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/spawn.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/temp-filename.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/umask.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/unix-format-path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/unsupported.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/usage.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/utils/warn-deprecated.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/version.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/view.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/visnup.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/whoami.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/lib/xmas.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/make.bat
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/JSONStream
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/errno
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/is-ci
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/mkdirp
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/node-gyp
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/nopt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/opener
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/qrcode-terminal
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/rc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/rimraf
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/semver
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/sshpk-conv
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/sshpk-sign
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/sshpk-verify
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/uuid
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/.bin/which
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/LICENSE.APACHE2
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/LICENSE.MIT
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/abbrev/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/abbrev/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/abbrev/abbrev.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/abbrev/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/patch-core.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/lib/_http_agent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/lib/agent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/lib/https_agent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agentkeepalive/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/.tonic_example.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/dist/ajv.bundle.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/dist/ajv.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/dist/nodent.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/dist/regenerator.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/$data.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/ajv.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/cache.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/_rules.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/async.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/equal.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/error_classes.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/formats.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/resolve.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/rules.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/schema_obj.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/ucs2length.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/compile/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/_limit.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/_limitItems.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/_limitLength.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/_limitProperties.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/allOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/anyOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/coerce.def
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/const.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/contains.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/custom.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/defaults.def
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/definitions.def
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/dependencies.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/enum.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/errors.def
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/format.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/items.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/missing.def
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/multipleOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/not.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/oneOf.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/pattern.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/properties.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/propertyNames.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/ref.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/required.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/uniqueItems.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dot/validate.jst
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/_limit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/_limitItems.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/_limitLength.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/_limitProperties.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/allOf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/anyOf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/const.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/contains.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/custom.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/dependencies.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/enum.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/format.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/items.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/multipleOf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/not.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/oneOf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/pattern.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/properties.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/propertyNames.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/ref.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/required.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/uniqueItems.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/dotjs/validate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/keyword.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/patternGroups.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/refs/$data.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/refs/json-schema-draft-04.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/refs/json-schema-draft-06.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/lib/refs/json-schema-v5.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/scripts/bundle.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/scripts/compile-dots.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/scripts/info
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/scripts/prepare-tests
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ajv/scripts/travis-gh-pages
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-align/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-align/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-align/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-align/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-align/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-styles/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-styles/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-styles/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansi-styles/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansicolors/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansicolors/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansicolors/ansicolors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansicolors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansistyles/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansistyles/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansistyles/ansistyles.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansistyles/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aproba/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/tracker-base.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/tracker-group.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/tracker-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/are-we-there-yet/tracker.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/asap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/browser-asap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/browser-raw.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asap/raw.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/ber/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/ber/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/ber/reader.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/ber/types.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/ber/writer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asn1/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/assert-plus/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/assert-plus/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/assert-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/assert-plus/assert.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/assert-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/bench.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/abort.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/defer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/iterate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/readable_asynckit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/readable_parallel.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/readable_serial.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/readable_serial_ordered.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/state.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/streamify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/lib/terminator.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/parallel.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/serial.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/serialOrdered.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/asynckit/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws-sign2/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws-sign2/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws-sign2/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws-sign2/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/aws4.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/lru.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/aws4/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/balanced-match/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/balanced-match/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/balanced-match/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/balanced-match/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bcrypt-pbkdf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bcrypt-pbkdf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bcrypt-pbkdf/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bcrypt-pbkdf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bin-links/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bin-links/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bin-links/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bin-links/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bin-links/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/browser/bluebird.core.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/browser/bluebird.core.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/browser/bluebird.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/browser/bluebird.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/any.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/assert.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/async.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/bind.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/bluebird.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/call_get.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/cancel.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/catch_filter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/context.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/debuggability.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/direct_resolve.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/each.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/es5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/filter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/finally.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/generators.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/join.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/map.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/method.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/nodeback.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/nodeify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/promise_array.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/promisify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/props.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/queue.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/race.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/reduce.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/schedule.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/settle.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/some.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/synchronous_inspection.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/thenables.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/timers.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/using.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/js/release/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/bluebird/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/boxen/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/boxen/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/boxen/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/boxen/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/brace-expansion/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/brace-expansion/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/brace-expansion/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/brace-expansion/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/buffer-from/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/buffer-from/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/buffer-from/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/buffer-from/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/builtins.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/builtins/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byline/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byline/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byline/lib/byline.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byline/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/README.hbs
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/dist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/index.mjs
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/byte-size/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/README.es.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/en.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/es.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/get.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/content/path.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/content/read.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/content/rm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/content/write.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/entry-index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/memoization.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/util/fix-owner.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/util/hash-to-segments.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/util/move-file.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/util/tmp.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/util/y.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/lib/verify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/locales/en.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/locales/en.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/locales/es.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/locales/es.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/ls.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/put.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/rm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cacache/verify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/call-limit/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/call-limit/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/call-limit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/call-limit/call-limit.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/call-limit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/camelcase/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/camelcase/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/camelcase/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/camelcase/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/capture-stack-trace/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/capture-stack-trace/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/capture-stack-trace/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/caseless/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/caseless/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/caseless/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/caseless/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/caseless/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/index.js.flow
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/templates.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chownr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chownr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chownr/chownr.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chownr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ci-info/vendors.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cidr-regex/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cidr-regex/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cidr-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cidr-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-boxes/boxes.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-boxes/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-boxes/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-boxes/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-boxes/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/color.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-columns/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/src/cell.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/src/layout-manager.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/src/table.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cli-table3/src/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/ansi-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/ansi-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/ansi-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/ansi-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/strip-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/strip-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/strip-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/node_modules/strip-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cliui/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/clone/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/clone/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/clone/clone.iml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/clone/clone.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/clone/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cmd-shim/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cmd-shim/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cmd-shim/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cmd-shim/lib/to-batch-syntax.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cmd-shim/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/co/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/co/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/co/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/co/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/co/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/code-point-at/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/code-point-at/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/code-point-at/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/code-point-at/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/conversions.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-convert/route.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-name/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-name/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-name/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-name/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/color-name/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/colors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/custom/trap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/custom/zalgo.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/extendStringPrototype.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/maps/america.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/maps/rainbow.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/maps/random.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/maps/zebra.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/styles.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/system/has-flag.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/lib/system/supports-colors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/safe.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/themes/generic-logging.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/columnify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/columnify/width.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/combined-stream/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/combined-stream/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/combined-stream/lib/combined_stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/combined-stream/lib/defer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/combined-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-stream/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/config-chain/LICENCE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/config-chain/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/config-chain/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/config-chain/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/configstore/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/configstore/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/configstore/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/configstore/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/console-control-strings/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/console-control-strings/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/console-control-strings/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/console-control-strings/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/copy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/is-windows.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/index.coffee
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/float.patch
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/lib/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/core-util-is/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/create-error-class/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/create-error-class/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/create-error-class/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/create-error-class/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/enoent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/util/escapeArgument.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/util/escapeCommand.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/util/readShebang.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/lib/util/resolveCommand.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/lru-cache/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/yallist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/yallist/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/yallist/iterator.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/yallist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/node_modules/yallist/yallist.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cross-spawn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/crypto-random-string/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/crypto-random-string/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/crypto-random-string/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/crypto-random-string/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cyclist/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cyclist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/cyclist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/etc/dashdash.bash_completion.in
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/lib/dashdash.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dashdash/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/.coveralls.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/karma.conf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/node_modules/ms/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/node_modules/ms/license.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/node_modules/ms/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/node_modules/ms/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/src/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/src/debug.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debug/src/node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debuglog/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debuglog/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debuglog/debuglog.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/debuglog/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decamelize/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decamelize/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decamelize/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decamelize/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decode-uri-component/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decode-uri-component/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decode-uri-component/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/decode-uri-component/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/lib/deep-extend.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/deep-extend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/defaults/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/defaults/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/defaults/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/defaults/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/defaults/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delayed-stream/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delayed-stream/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delayed-stream/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delayed-stream/lib/delayed_stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delayed-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-indent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-indent/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-indent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-indent/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-newline/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-newline/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-newline/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/detect-newline/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/dezalgo.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dot-prop/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dot-prop/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dot-prop/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dot-prop/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/lib/main.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dotenv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexer3/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexer3/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexer3/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexer3/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/example.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/duplexify/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/lib/LICENSE-jsbn
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/lib/ec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/lib/sec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ecc-jsbn/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/editor/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/editor/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/editor/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/editor/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/lib/encoding.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/lib/iconv-loader.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/end-of-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/end-of-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/end-of-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/end-of-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/env-paths/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/env-paths/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/env-paths/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/env-paths/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/bower.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/index.umd.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/cli.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/custom.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/errno.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/errno/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/.nycrc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/GetIntrinsic.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es2015.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es2016.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es2017.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es6.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/es7.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/assign.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/isFinite.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/isNaN.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/isPrimitive.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/mod.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/helpers/sign.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/operations/2015.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/operations/2016.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/operations/2017.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/operations/es5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/es2015.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/es5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/es6.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/helpers/isPrimitive.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/auto.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.auto.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.auto.map
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.auto.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.auto.min.map
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.map
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/dist/es6-promise.min.map
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise.auto.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/-internal.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/asap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/enumerator.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/polyfill.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/promise/all.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/promise/race.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/promise/reject.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/promise/resolve.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/then.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/lib/es6-promise/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promise/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promisify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promisify/dist/promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promisify/dist/promisify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es6-promisify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/escape-string-regexp/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/escape-string-regexp/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/escape-string-regexp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/escape-string-regexp/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/lib/errname.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/lib/stdio.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/node_modules/get-stream/buffer-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/node_modules/get-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/node_modules/get-stream/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/node_modules/get-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/node_modules/get-stream/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/execa/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/component.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/.gitmodules
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/Makefile.targ
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/jsl.node.conf
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/lib/extsprintf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/extsprintf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-deep-equal/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-deep-equal/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-deep-equal/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-deep-equal/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/benchmark/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/benchmark/test.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/figgy-pudding/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/figgy-pudding/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/figgy-pudding/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/figgy-pudding/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/figgy-pudding/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-npm-prefix/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-npm-prefix/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-npm-prefix/find-prefix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-npm-prefix/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-up/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-up/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-up/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-up/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/example.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/flush-write-stream/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/forever-agent/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/forever-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/forever-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/forever-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/lib/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/lib/form_data.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/lib/populate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/form-data/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/from2/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/node_modules/minipass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/node_modules/minipass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/node_modules/minipass/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/node_modules/minipass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-minipass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/vacuum.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/index.coffee
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs.realpath/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs.realpath/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs.realpath/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs.realpath/old.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs.realpath/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/implementation.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/base-theme.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/error.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/has-color.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/string-width/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/string-width/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/string-width/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/node_modules/string-width/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/plumbing.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/process.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/progress-bar.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/render-template.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/set-immediate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/set-interval.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/spin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/template-item.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/theme-set.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/themes.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gauge/wide-truncate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/lib/genfun.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/lib/method.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/lib/role.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/lib/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/genfun/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/lib/bin-link.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/lib/chown.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/lib/link.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/lib/mkdir.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/lib/rm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/index.coffee
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-caller-file/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-caller-file/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-caller-file/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-caller-file/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-stream/buffer-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-stream/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/get-stream/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/getpass/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/getpass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/getpass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/getpass/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/getpass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/common.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/glob.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/glob/sync.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/global-dirs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/global-dirs/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/global-dirs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/global-dirs/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/node_modules/get-stream/buffer-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/node_modules/get-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/node_modules/get-stream/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/node_modules/get-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/node_modules/get-stream/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/got/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/clone.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/graceful-fs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/legacy-streams.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/graceful-fs/polyfills.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/afterRequest.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/beforeRequest.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/browser.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/cache.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/content.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/cookie.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/creator.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/entry.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/har.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/header.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/log.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/page.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/pageTimings.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/postData.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/query.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/request.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/response.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/lib/timings.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-schema/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/lib/error.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/lib/promise.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/har-validator/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-flag/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-flag/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-flag/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-flag/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/shams.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-unicode/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-unicode/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-unicode/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-unicode/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has/LICENSE-MIT
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/git-host-info.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/git-host.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/hosted-git-info/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-cache-semantics/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-cache-semantics/node4/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-cache-semantics/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/.dir-locals.el
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/http_signing.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/lib/parser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/lib/signer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/lib/verify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-signature/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/https-proxy-agent/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/https-proxy-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/https-proxy-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/https-proxy-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/humanize-ms/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/humanize-ms/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/humanize-ms/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/humanize-ms/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/humanize-ms/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/Changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-codec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/dbcs-data.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/internal.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-codec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data-generated.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/sbcs-data.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/big5-added.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp936.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp949.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/cp950.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/eucjp.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/gbk-added.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/tables/shiftjis.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/utf16.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/encodings/utf7.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/lib/bom-handling.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/lib/extend-node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/lib/streams.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iconv-lite/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iferr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iferr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iferr/iferr.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/iferr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ignore-walk/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ignore-walk/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ignore-walk/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ignore-walk/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/import-lazy/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/import-lazy/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/import-lazy/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/import-lazy/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/imurmurhash/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/imurmurhash/imurmurhash.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/imurmurhash/imurmurhash.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/imurmurhash/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/infer-owner/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/infer-owner/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/infer-owner/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/infer-owner/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inflight/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inflight/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inflight/inflight.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inflight/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inherits/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inherits/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inherits/inherits.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inherits/inherits_browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/inherits/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ini/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ini/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ini/ini.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ini/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/default-input.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/init-package-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/init-package-json/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/invert-kv/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/invert-kv/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/invert-kv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/invert-kv/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/.jscsrc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/lib/ip.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/.istanbul.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-callable/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/node_modules/ci-info/vendors.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-ci/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-cidr/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-cidr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-cidr/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-cidr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-date-object/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-fullwidth-code-point/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-fullwidth-code-point/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-fullwidth-code-point/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-fullwidth-code-point/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-installed-globally/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-installed-globally/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-installed-globally/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-installed-globally/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-npm/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-npm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-npm/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-obj/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-obj/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-obj/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-obj/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-path-inside/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-path-inside/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-path-inside/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-path-inside/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-redirect/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-redirect/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-redirect/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-redirect/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-regex/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-retry-allowed/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-retry-allowed/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-retry-allowed/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-retry-allowed/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-stream/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-stream/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/.nvmrc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-typedarray/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-typedarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-typedarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-typedarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-typedarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/mode.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/windows.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/isstream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isstream/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/example.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/example.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsbn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-parse-better-errors/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-parse-better-errors/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-parse-better-errors/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-parse-better-errors/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-parse-better-errors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/spec/fixtures/schema.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema-traverse/spec/index.spec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-00/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-00/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-00/links
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-00/schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-01/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-01/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-01/links
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-01/schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-02/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-02/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-02/links
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-02/schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-03/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-03/json-ref
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-03/links
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-03/schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-04/hyper-schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-04/links
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-04/schema
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-zyp-json-schema-03.xml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/lib/links.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/lib/validate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/bench.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/jsonparse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/samplejson/basic.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/samplejson/basic2.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsprim/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsprim/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsprim/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsprim/lib/jsprim.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsprim/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/latest-version/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/latest-version/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/latest-version/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/latest-version/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lazy-property/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lazy-property/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lazy-property/component.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lazy-property/lazyProperty.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lazy-property/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lcid/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lcid/lcid.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lcid/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lcid/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lcid/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/lib/config/npm-config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/lib/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/lib/silentlog.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/lib/worker.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libcipm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/access.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/adduser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/fetch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/get-prefix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/hook.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/link-bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/log.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/logical-tree.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/login.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/org.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/packument.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/parse-arg.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/profile.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/publish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/read-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/run-script.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/search.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/stringify-package.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/tarball.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/team.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/unpublish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpm/verify-lock.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/find-up/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/locate-path/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-limit/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-locate/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/node_modules/p-try/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmconfig/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmhook/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmhook/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmhook/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmhook/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmhook/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/publish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/unpublish.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/PULL_REQUEST_TEMPLATE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/auto-fallback.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/child.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/get-prefix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/libnpx.1
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/ca.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/cs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/de.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/en.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/es.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/fr.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/id.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/it.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/ja.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/ko.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/nb.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/nl.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/nn.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/no.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/pl.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/pt_BR.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/ro.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/ru.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/sr.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/tr.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/uk.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/zh_CN.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/locales/zh_TW.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/parse-args.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpx/y.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/locate-path/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/locate-path/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/locate-path/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/locate-path/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lock-verify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lock-verify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lock-verify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lock-verify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/gen-changelog.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/lockfile.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/sockets.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/speedtest.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseindexof/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseindexof/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseindexof/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseindexof/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseuniq/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseuniq/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseuniq/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._baseuniq/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._bindcallback/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._bindcallback/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._bindcallback/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._bindcallback/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._cacheindexof/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._cacheindexof/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._cacheindexof/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._cacheindexof/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createcache/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createcache/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createcache/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createcache/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createset/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createset/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createset/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._createset/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._getnative/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._getnative/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._getnative/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._getnative/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._root/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._root/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._root/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash._root/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.clonedeep/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.clonedeep/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.clonedeep/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.clonedeep/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.restparam/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.restparam/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.restparam/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.restparam/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.union/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.union/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.union/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.union/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.uniq/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.uniq/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.uniq/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.uniq/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.without/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.without/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.without/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lodash.without/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lowercase-keys/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lowercase-keys/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lowercase-keys/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lowercase-keys/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lru-cache/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lru-cache/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lru-cache/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lru-cache/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-dir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-dir/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-dir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-dir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/agent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/cache.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/make-fetch-happen/warning.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/map-age-cleaner/dist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/map-age-cleaner/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/map-age-cleaner/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/map-age-cleaner/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/meant/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/node_modules/mimic-fn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/node_modules/mimic-fn/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/node_modules/mimic-fn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/node_modules/mimic-fn/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mem/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/HISTORY.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/db.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-db/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-types/HISTORY.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-types/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-types/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-types/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mime-types/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minimatch/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minimatch/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minimatch/minimatch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minimatch/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/constants.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/node_modules/minipass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/node_modules/minipass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/node_modules/minipass/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/node_modules/minipass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/minizlib/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mississippi/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mississippi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mississippi/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mississippi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mississippi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/bin/cmd.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/bin/usage.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/move.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/move-concurrently/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ms/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ms/license.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ms/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ms/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/__root__/index.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/__root__/mute.js.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/base.css
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/index.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/prettify.css
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/prettify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/sort-arrow-sprite.png
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov-report/sorter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/coverage/lcov.info
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/mute.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nice-try/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nice-try/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nice-try/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nice-try/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nice-try/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/blob.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/body.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/common.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/fetch-error.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/headers.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/request.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-fetch-npm/src/response.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/.github/ISSUE_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/.github/PULL_REQUEST_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/.github/workflows/Python_tests.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/addon.gypi
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/DEPS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/OWNERS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/PRESUBMIT.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/codereview.settings
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/gyp
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/gyp.bat
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/common_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/make.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input_test.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.pyc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/samples/samples
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/samples/samples.bat
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/setup.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/README
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/README
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.pbfilespec
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/README
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/gyp-tests.el
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/gyp.el
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/run-unit-tests.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/emacs/testdata/media.gyp.fontified
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/graphviz.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/pretty_gyp.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/pretty_sln.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/tools/pretty_vcproj.py
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/Find-VisualStudio.cs
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/clean.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/configure.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/find-node-directory.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/find-python.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/find-visualstudio.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/install.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/list.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/node-gyp.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/process-release.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/proxy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/rebuild.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/remove.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/lib/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/macOS_Catalina.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/src/win_delay_load_hook.cc
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/bin/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/lib/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/nopt/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/extract_description.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/fixer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/make_warning.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/safe_format.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/typos.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/lib/warning_messages.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/.eslintignore
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/changelog.hbs
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/caller.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/core.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/core.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/node-modules-paths.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/normalize-options.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/lib/sync.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/reporters/detail.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/reporters/install.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/reporters/json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/reporters/parseable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-audit-report/reporters/quiet.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-bundled/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-bundled/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-bundled/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-bundled/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-cache-filename/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-cache-filename/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-cache-filename/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-cache-filename/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-cache-filename/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-install-checks/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-install-checks/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-install-checks/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-install-checks/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-install-checks/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin/node-gyp
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin/node-gyp.cmd
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-lifecycle/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-logical-tree/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-logical-tree/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-logical-tree/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-logical-tree/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-logical-tree/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/.github/settings.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/package-lock.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-package-arg/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-package-arg/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-package-arg/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-package-arg/npa.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-package-arg/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-packlist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-packlist/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-packlist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-packlist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-pick-manifest/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-pick-manifest/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-pick-manifest/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-pick-manifest/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-pick-manifest/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-profile/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-profile/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-profile/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-profile/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-profile/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/auth.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/check-response.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/config.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-registry-fetch/silentlog.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-run-path/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-run-path/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-run-path/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-run-path/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-user-validate/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-user-validate/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-user-validate/npm-user-validate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-user-validate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npmlog/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npmlog/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npmlog/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npmlog/log.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npmlog/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/number-is-nan/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/number-is-nan/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/number-is-nan/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/number-is-nan/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/oauth-sign/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/oauth-sign/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/oauth-sign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/oauth-sign/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-assign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-assign/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-assign/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-assign/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/isArguments.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/.jscs.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/implementation.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/polyfill.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/shim.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/once/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/once/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/once/once.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/once/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/opener/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/opener/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/opener/bin/opener-bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/opener/lib/opener.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/opener/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-homedir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-homedir/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-homedir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-homedir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/lib/enoent.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/escape.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/readShebang.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/resolveCommand.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/cross-spawn/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/lib/errname.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/lib/stdio.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/node_modules/execa/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-locale/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-tmpdir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-tmpdir/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-tmpdir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/os-tmpdir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/osenv/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/osenv/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/osenv/osenv.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/osenv/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-defer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-defer/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-defer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-defer/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-finally/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-finally/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-finally/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-finally/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-is-promise/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-is-promise/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-is-promise/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-is-promise/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-limit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-limit/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-limit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-limit/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-locate/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-locate/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-locate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-locate/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-try/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-try/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-try/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/p-try/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/package-json/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/package-json/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/package-json/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/package-json/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/extract-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/alias.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/directory.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/file.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/git.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/hosted.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/range.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/registry/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/registry/manifest.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/registry/packument.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/registry/tarball.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/remote.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/tag.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/fetchers/version.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/finalize-manifest.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/cache-key.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/finished.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/git.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/opt-check.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/pack-dir.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/proclog.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/util/read-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/lib/with-tarball-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/manifest.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/node_modules/minipass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/node_modules/minipass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/node_modules/minipass/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/node_modules/minipass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/packument.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/prefetch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pacote/tarball.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/parallel-transform/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-exists/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-exists/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-exists/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-exists/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-absolute/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-absolute/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-absolute/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-absolute/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-inside/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-inside/lib/path-is-inside.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-is-inside/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-key/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-key/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-key/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-key/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/path-parse/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/.tm_properties
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/lib/performance-now.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/license.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/src/performance-now.coffee
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pify/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pify/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prepend-http/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prepend-http/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prepend-http/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prepend-http/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/process-nextick-args/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/process-nextick-args/license.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/process-nextick-args/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/process-nextick-args/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-inflight/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-inflight/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-inflight/inflight.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-inflight/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/equation.gif
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/lib/retry.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/lib/retry_operation.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/promzard.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/proto-list/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/proto-list/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/proto-list/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/proto-list/proto-list.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/protoduck/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/protoduck/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/protoduck/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/protoduck/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/protoduck/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/prr.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/prr/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/map.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/pseudomap.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/.eslintignore
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/data/rules.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/dist/psl.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/dist/psl.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/karma.conf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/psl/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/test-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pump/test-node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/test-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/node_modules/pump/test-node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pumpify/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/punycode/LICENSE-MIT.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/punycode/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/punycode/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/punycode/punycode.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/bin/qrcode-terminal.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/lib/main.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/vendor/QRCode/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/.eslintignore
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/dist/qs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/lib/formats.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/lib/stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/query-string/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/query-string/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/query-string/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/query-string/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qw/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qw/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qw/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qw/qw.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/LICENSE.APACHE2
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/LICENSE.BSD
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/LICENSE.MIT
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/cli.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-cmd-shim/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-cmd-shim/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-cmd-shim/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-cmd-shim/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/read-installed.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-json/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-json/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-json/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-json/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-json/read-json.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-tree/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-tree/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-tree/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-tree/realpath.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-package-tree/rpt.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read/lib/read.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/errors-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/experimentalWarning.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/async_iterator.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/buffer_list.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/end-of-stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/from-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/from.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/pipeline.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/state.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readdir-scoped-modules/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readdir-scoped-modules/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readdir-scoped-modules/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/readdir-scoped-modules/readdir.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/base64.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/registry-url.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-url/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-url/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-url/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-url/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/auth.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/cookies.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/getProxyFromURI.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/har.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/hawk.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/helpers.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/multipart.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/oauth.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/querystring.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/redirect.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/lib/tunnel.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/request/request.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-directory/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-directory/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-directory/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-directory/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-directory/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/require-main-filename/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/resolve-from/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/resolve-from/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/resolve-from/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/resolve-from/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/License
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/equation.gif
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/lib/retry.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/lib/retry_operation.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rimraf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rimraf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rimraf/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rimraf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rimraf/rimraf.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/node_modules/aproba/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/node_modules/aproba/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/node_modules/aproba/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/node_modules/aproba/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/run-queue/queue.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/Porting-Buffer.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/dangerous.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/safer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/safer-buffer/tests.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver-diff/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver-diff/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver-diff/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver-diff/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/bin/semver
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/range.bnf
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/semver/semver.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/set-blocking/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/set-blocking/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/set-blocking/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/set-blocking/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/set-blocking/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sha/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sha/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sha/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sha/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-command/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-command/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-command/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-command/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/shebang-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/signal-exit/signals.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/lib/async-map-ordered.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/lib/async-map.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/lib/bind-actor.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/lib/chain.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/lib/slide.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/slide/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/.prettierrc.yaml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/build/smartbuffer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/build/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/docs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/docs/README_v3.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/docs/ROADMAP.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/patch-core.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/.prettierrc.yaml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/client/socksclient.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/common/constants.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/common/helpers.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/common/receivebuffer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/common/util.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/build/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/docs/index.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/docs/migratingFromV1.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-object/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-object/lib/sorted-object.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-object/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/example.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/from2/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray/build/build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/float.patch
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sorted-union-stream/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-correct/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-correct/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-correct/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-correct/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-exceptions/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-exceptions/index.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-exceptions/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-expression-parse/scan.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-license-ids/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-license-ids/deprecated.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-license-ids/index.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/spdx-license-ids/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/split-on-first/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/split-on-first/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/split-on-first/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/split-on-first/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/bin/sshpk-conv
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/bin/sshpk-sign
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/bin/sshpk-verify
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/algs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/certificate.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/dhe.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/ed-compat.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/fingerprint.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/auto.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/dnssec.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/openssh-cert.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/pem.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/pkcs1.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/pkcs8.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/rfc4253.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/ssh-private.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/ssh.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/x509-pem.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/formats/x509.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/identity.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/key.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/private-key.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/signature.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/ssh-buffer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/man/man1/sshpk-conv.1
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/man/man1/sshpk-sign.1
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/man/man1/sshpk-verify.1
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/sshpk/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ssri/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ssri/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ssri/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ssri/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ssri/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/collaborators.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-each/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-iterate/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stream-shift/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strict-uri-encode/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strict-uri-encode/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strict-uri-encode/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strict-uri-encode/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/ansi-regex/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/is-fullwidth-code-point/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/strip-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/strip-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/strip-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/node_modules/strip-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string-width/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stringify-package/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stringify-package/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stringify-package/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stringify-package/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/stringify-package/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-eof/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-eof/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-eof/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-eof/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-json-comments/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-json-comments/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-json-comments/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/strip-json-comments/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/supports-color/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/supports-color/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/supports-color/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/supports-color/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/supports-color/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/buffer.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/create.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/header.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/high-level-opt.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/large-numbers.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/list.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/mkdir.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/mode-fix.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/pack.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/pax.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/read-entry.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/replace.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/types.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/unpack.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/update.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/warn-mixin.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/winchars.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/lib/write-entry.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/node_modules/minipass/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/node_modules/minipass/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/node_modules/minipass/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/node_modules/minipass/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tar/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/vendor/macos/term-size
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/term-size/vendor/windows/term-size.exe
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/LICENSE.APACHE2
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/LICENSE.MIT
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/LICENSE.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through2/through2.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/timed-out/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/timed-out/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/timed-out/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/timed-out/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/lib/factory.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/src/factory.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/src/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/translations/da.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/translations/de.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/translations/en-short.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/translations/en.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tiny-relative-date/translations/es.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/cookie.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/memstore.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/pathMatch.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/permuteDomain.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/pubsuffix-psl.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/lib/store.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tough-cookie/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tunnel-agent/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tunnel-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tunnel-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tunnel-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/AUTHORS.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/nacl-fast.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/nacl-fast.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/nacl.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/nacl.min.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/tweetnacl/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/readme.markdown
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uid-number/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uid-number/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uid-number/get-uid-gid.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uid-number/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uid-number/uid-number.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/ChangeLog
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/__root__/index.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/__root__/index.js.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/base.css
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/index.html
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/prettify.css
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/prettify.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/sort-arrow-sprite.png
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/coverage/sorter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-slug/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-slug/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-slug/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-slug/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-string/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-string/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-string/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-string/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unpipe/HISTORY.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unpipe/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unpipe/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unpipe/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unpipe/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unzip-response/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unzip-response/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unzip-response/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unzip-response/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/update-notifier/check.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/update-notifier/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/update-notifier/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/update-notifier/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/update-notifier/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/url-parse-lax/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/url-parse-lax/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/url-parse-lax/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/url-parse-lax/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/History.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/node.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-deprecate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-extend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-extend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-extend/extend.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-extend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-extend/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/bin/uuid
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/bytesToUuid.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/md5-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/md5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/rng-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/rng.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/sha1-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/sha1.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/lib/v35.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/v1.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/v3.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/v4.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/uuid/v5.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-license/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-license/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-license/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-license/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/verror/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/verror/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/verror/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/verror/lib/verror.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/verror/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/combining.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/docs/index.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which-module/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which-module/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which-module/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which-module/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which-module/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/bin/which
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/which/which.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/align.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/node_modules/string-width/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/node_modules/string-width/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/node_modules/string-width/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/node_modules/string-width/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wide-align/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/widest-line/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/widest-line/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/widest-line/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/widest-line/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/lib/child/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/lib/farm.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/lib/fork.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrap-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrappy/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrappy/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrappy/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wrappy/wrappy.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/write-file-atomic/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/write-file-atomic/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/write-file-atomic/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/write-file-atomic/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/write-file-atomic/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xdg-basedir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xdg-basedir/license
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xdg-basedir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xdg-basedir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/LICENCE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/immutable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/mutable.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/xtend/test.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/y18n/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/y18n/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/y18n/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/y18n/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/y18n/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yallist/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yallist/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yallist/iterator.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yallist/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yallist/yallist.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/lib/tokenize-arg-string.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs-parser/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/completion.sh.hbs
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/apply-extends.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/argsert.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/command.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/completion.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/levenshtein.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/obj-filter.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/usage.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/validation.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/lib/yerror.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/be.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/de.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/en.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/es.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/fr.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/hi.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/hu.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/id.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/it.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/ja.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/ko.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/nb.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/nl.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/nn.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/pirate.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/pl.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/pt.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/pt_BR.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/ru.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/th.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/tr.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/zh_CN.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/locales/zh_TW.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/node_modules/y18n/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/node_modules/y18n/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/node_modules/y18n/index.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/node_modules/y18n/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/yargs/yargs.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/package.json
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/changelog.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/clean-old.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/dep-update
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/dev-dep-update
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/docs-build.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/gen-changelog
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/gen-dev-ignores.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/install.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/maketest
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/pr
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/publish-tag.js
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/release.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/relocate.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/update-authors.sh
+%%DATADIR%%/resources/app/apm/node_modules/npm/scripts/update-dist-tags.js
+%%DATADIR%%/resources/app/apm/node_modules/npmlog/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/npmlog/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/npmlog/README.md
+%%DATADIR%%/resources/app/apm/node_modules/npmlog/log.js
+%%DATADIR%%/resources/app/apm/node_modules/npmlog/package.json
+%%DATADIR%%/resources/app/apm/node_modules/number-is-nan/index.js
+%%DATADIR%%/resources/app/apm/node_modules/number-is-nan/license
+%%DATADIR%%/resources/app/apm/node_modules/number-is-nan/package.json
+%%DATADIR%%/resources/app/apm/node_modules/number-is-nan/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/oauth-sign/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/oauth-sign/README.md
+%%DATADIR%%/resources/app/apm/node_modules/oauth-sign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/oauth-sign/package.json
+%%DATADIR%%/resources/app/apm/node_modules/object-assign/index.js
+%%DATADIR%%/resources/app/apm/node_modules/object-assign/license
+%%DATADIR%%/resources/app/apm/node_modules/object-assign/package.json
+%%DATADIR%%/resources/app/apm/node_modules/object-assign/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/once/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/once/README.md
+%%DATADIR%%/resources/app/apm/node_modules/once/once.js
+%%DATADIR%%/resources/app/apm/node_modules/once/package.json
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/README.md
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/onig_scanner.node
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/oniguruma.a
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/package.json
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/spec/onig-reg-exp-spec.js
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/spec/onig-scanner-spec.js
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/spec/onig-string-spec.js
+%%DATADIR%%/resources/app/apm/node_modules/oniguruma/src/oniguruma.js
+%%DATADIR%%/resources/app/apm/node_modules/open/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/open/README.md
+%%DATADIR%%/resources/app/apm/node_modules/open/lib/open.js
+%%DATADIR%%/resources/app/apm/node_modules/open/package.json
+%%DATADIR%%/resources/app/apm/node_modules/open/vendor/xdg-open
+%%DATADIR%%/resources/app/apm/node_modules/os-homedir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/os-homedir/license
+%%DATADIR%%/resources/app/apm/node_modules/os-homedir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/os-homedir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/os-locale/index.js
+%%DATADIR%%/resources/app/apm/node_modules/os-locale/license
+%%DATADIR%%/resources/app/apm/node_modules/os-locale/package.json
+%%DATADIR%%/resources/app/apm/node_modules/os-locale/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/os-tmpdir/index.js
+%%DATADIR%%/resources/app/apm/node_modules/os-tmpdir/license
+%%DATADIR%%/resources/app/apm/node_modules/os-tmpdir/package.json
+%%DATADIR%%/resources/app/apm/node_modules/os-tmpdir/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/path-is-absolute/index.js
+%%DATADIR%%/resources/app/apm/node_modules/path-is-absolute/license
+%%DATADIR%%/resources/app/apm/node_modules/path-is-absolute/package.json
+%%DATADIR%%/resources/app/apm/node_modules/path-is-absolute/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/.tm_properties
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/README.md
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/lib/performance-now.js
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/license.txt
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/package.json
+%%DATADIR%%/resources/app/apm/node_modules/performance-now/src/performance-now.coffee
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/README.md
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/asset.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/download.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/error.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/help.txt
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/index.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/log.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/package.json
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/proxy.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/rc.js
+%%DATADIR%%/resources/app/apm/node_modules/prebuild-install/util.js
+%%DATADIR%%/resources/app/apm/node_modules/process-nextick-args/index.js
+%%DATADIR%%/resources/app/apm/node_modules/process-nextick-args/license.md
+%%DATADIR%%/resources/app/apm/node_modules/process-nextick-args/package.json
+%%DATADIR%%/resources/app/apm/node_modules/process-nextick-args/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/property-accessors/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/property-accessors/README.md
+%%DATADIR%%/resources/app/apm/node_modules/property-accessors/lib/property-accessors.js
+%%DATADIR%%/resources/app/apm/node_modules/property-accessors/package.json
+%%DATADIR%%/resources/app/apm/node_modules/psl/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/psl/README.md
+%%DATADIR%%/resources/app/apm/node_modules/psl/browserstack-logo.svg
+%%DATADIR%%/resources/app/apm/node_modules/psl/data/rules.json
+%%DATADIR%%/resources/app/apm/node_modules/psl/dist/psl.js
+%%DATADIR%%/resources/app/apm/node_modules/psl/dist/psl.min.js
+%%DATADIR%%/resources/app/apm/node_modules/psl/index.js
+%%DATADIR%%/resources/app/apm/node_modules/psl/package.json
+%%DATADIR%%/resources/app/apm/node_modules/pump/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/pump/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/pump/README.md
+%%DATADIR%%/resources/app/apm/node_modules/pump/index.js
+%%DATADIR%%/resources/app/apm/node_modules/pump/package.json
+%%DATADIR%%/resources/app/apm/node_modules/pump/test-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/pump/test-node.js
+%%DATADIR%%/resources/app/apm/node_modules/punycode/LICENSE-MIT.txt
+%%DATADIR%%/resources/app/apm/node_modules/punycode/README.md
+%%DATADIR%%/resources/app/apm/node_modules/punycode/package.json
+%%DATADIR%%/resources/app/apm/node_modules/punycode/punycode.es6.js
+%%DATADIR%%/resources/app/apm/node_modules/punycode/punycode.js
+%%DATADIR%%/resources/app/apm/node_modules/q/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/q/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/q/README.md
+%%DATADIR%%/resources/app/apm/node_modules/q/benchmark/compare-with-callbacks.js
+%%DATADIR%%/resources/app/apm/node_modules/q/benchmark/scenarios.js
+%%DATADIR%%/resources/app/apm/node_modules/q/package.json
+%%DATADIR%%/resources/app/apm/node_modules/q/q.js
+%%DATADIR%%/resources/app/apm/node_modules/q/queue.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/.eslintignore
+%%DATADIR%%/resources/app/apm/node_modules/qs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/qs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/qs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/qs/dist/qs.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/lib/formats.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/lib/stringify.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/qs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/rc/LICENSE.APACHE2
+%%DATADIR%%/resources/app/apm/node_modules/rc/LICENSE.BSD
+%%DATADIR%%/resources/app/apm/node_modules/rc/LICENSE.MIT
+%%DATADIR%%/resources/app/apm/node_modules/rc/README.md
+%%DATADIR%%/resources/app/apm/node_modules/rc/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/rc/cli.js
+%%DATADIR%%/resources/app/apm/node_modules/rc/index.js
+%%DATADIR%%/resources/app/apm/node_modules/rc/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/rc/package.json
+%%DATADIR%%/resources/app/apm/node_modules/read/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/read/README.md
+%%DATADIR%%/resources/app/apm/node_modules/read/lib/read.js
+%%DATADIR%%/resources/app/apm/node_modules/read/package.json
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/float.patch
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/request/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/request/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/request/README.md
+%%DATADIR%%/resources/app/apm/node_modules/request/index.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/auth.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/cookies.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/getProxyFromURI.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/har.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/hawk.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/helpers.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/multipart.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/oauth.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/querystring.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/redirect.js
+%%DATADIR%%/resources/app/apm/node_modules/request/lib/tunnel.js
+%%DATADIR%%/resources/app/apm/node_modules/request/package.json
+%%DATADIR%%/resources/app/apm/node_modules/request/request.js
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/README.md
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/common.js
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/glob.js
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/package.json
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/node_modules/glob/sync.js
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/rimraf/rimraf.js
+%%DATADIR%%/resources/app/apm/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/Porting-Buffer.md
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/Readme.md
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/dangerous.js
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/safer.js
+%%DATADIR%%/resources/app/apm/node_modules/safer-buffer/tests.js
+%%DATADIR%%/resources/app/apm/node_modules/season/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/season/README.md
+%%DATADIR%%/resources/app/apm/node_modules/season/bin/csonc
+%%DATADIR%%/resources/app/apm/node_modules/season/lib/cson.js
+%%DATADIR%%/resources/app/apm/node_modules/season/lib/csonc.js
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/README.md
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/dist/async.js
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/dist/async.min.js
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/lib/async.js
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/async/package.json
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/fs-plus/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/fs-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/fs-plus/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/fs-plus/lib/fs-plus.js
+%%DATADIR%%/resources/app/apm/node_modules/season/node_modules/fs-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/season/package.json
+%%DATADIR%%/resources/app/apm/node_modules/semver/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/semver/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/semver/README.md
+%%DATADIR%%/resources/app/apm/node_modules/semver/bin/semver
+%%DATADIR%%/resources/app/apm/node_modules/semver/package.json
+%%DATADIR%%/resources/app/apm/node_modules/semver/range.bnf
+%%DATADIR%%/resources/app/apm/node_modules/semver/semver.js
+%%DATADIR%%/resources/app/apm/node_modules/set-blocking/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/set-blocking/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/set-blocking/README.md
+%%DATADIR%%/resources/app/apm/node_modules/set-blocking/index.js
+%%DATADIR%%/resources/app/apm/node_modules/set-blocking/package.json
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/LICENSE.txt
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/README.md
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/index.js
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/package.json
+%%DATADIR%%/resources/app/apm/node_modules/signal-exit/signals.js
+%%DATADIR%%/resources/app/apm/node_modules/simple-concat/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/simple-concat/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/simple-concat/README.md
+%%DATADIR%%/resources/app/apm/node_modules/simple-concat/index.js
+%%DATADIR%%/resources/app/apm/node_modules/simple-concat/package.json
+%%DATADIR%%/resources/app/apm/node_modules/simple-get/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/simple-get/README.md
+%%DATADIR%%/resources/app/apm/node_modules/simple-get/index.js
+%%DATADIR%%/resources/app/apm/node_modules/simple-get/package.json
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/README.md
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/bin/sshpk-conv
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/bin/sshpk-sign
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/bin/sshpk-verify
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/algs.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/certificate.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/dhe.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/ed-compat.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/errors.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/fingerprint.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/auto.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/dnssec.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/openssh-cert.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/pem.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/pkcs1.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/pkcs8.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/putty.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/rfc4253.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/ssh-private.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/ssh.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/x509-pem.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/formats/x509.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/identity.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/key.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/private-key.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/signature.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/ssh-buffer.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/lib/utils.js
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/man/man1/sshpk-conv.1
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/man/man1/sshpk-sign.1
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/man/man1/sshpk-verify.1
+%%DATADIR%%/resources/app/apm/node_modules/sshpk/package.json
+%%DATADIR%%/resources/app/apm/node_modules/string-width/index.js
+%%DATADIR%%/resources/app/apm/node_modules/string-width/license
+%%DATADIR%%/resources/app/apm/node_modules/string-width/package.json
+%%DATADIR%%/resources/app/apm/node_modules/string-width/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/string_decoder/index.js
+%%DATADIR%%/resources/app/apm/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/strip-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/strip-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/strip-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/strip-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/strip-json-comments/index.js
+%%DATADIR%%/resources/app/apm/node_modules/strip-json-comments/license
+%%DATADIR%%/resources/app/apm/node_modules/strip-json-comments/package.json
+%%DATADIR%%/resources/app/apm/node_modules/strip-json-comments/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/test-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/node_modules/pump/test.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-fs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/headers.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/component.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/isarray/test.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/duplex-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_duplex.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_readable.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_transform.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/_stream_writable.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/BufferList.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/destroy.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/lib/internal/streams/stream.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/passthrough.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/readable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/readable.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/transform.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/writable-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/readable-stream/writable.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/safe-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/safe-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/safe-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/safe-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/string_decoder/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/string_decoder/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/string_decoder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/string_decoder/lib/string_decoder.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/node_modules/string_decoder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/pack.js
+%%DATADIR%%/resources/app/apm/node_modules/tar-stream/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/37d58de4-deea-4808-bb77-d27685bd1501.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/ea0194cb-f599-402f-8876-84fb8251e8db.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/fb518800-240c-42ff-811f-79e92708d9db.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/fdecfc06-a944-4897-9530-e08f62883fc1.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/0471d9cf-687f-4ae8-84a5-ce7468becd03.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/12bca2bc-6a2b-4f45-abc7-8483922a524d.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/37d58de4-deea-4808-bb77-d27685bd1501.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/5ad8066b-6b8c-4bc8-b807-c40bf80898b7.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/5cbf674c-7089-4b7d-b9de-2119be4dbb0b.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/7853e29b-78ef-4ab4-b8fb-e1e176c0787b.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/9d414044-b18d-4f6d-b2e0-531a89bf6f4f.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/c3ffeb8c-8e79-4a2c-b678-e5a917fe721e.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/ea0194cb-f599-402f-8876-84fb8251e8db.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/eda6b7a3-5e15-440f-8619-e11a15a07f77.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/fb518800-240c-42ff-811f-79e92708d9db.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/fdecfc06-a944-4897-9530-e08f62883fc1.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.nyc_output/processinfo/index.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tar/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tar/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/base.css
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/index.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/prettify.css
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/prettify.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/sort-arrow-sprite.png
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/sorter.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/index.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/index.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/create.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/extract.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/header.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/high-level-opt.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/index.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/large-numbers.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/list.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/mkdir.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/pack.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/parse.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/pax.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/read-entry.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/replace.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/types.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/unpack.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/update.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/warn-mixin.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/winchars.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov-report/tar/lib/write-entry.js.html
+%%DATADIR%%/resources/app/apm/node_modules/tar/coverage/lcov.info
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/buffer-entry.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/entry-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/entry.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/extended-header-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/extended-header.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/extract.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/global-header-writer.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/header.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/pack.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/lib/parse.js
+%%DATADIR%%/resources/app/apm/node_modules/tar/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tar/tar.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/temp/README.md
+%%DATADIR%%/resources/app/apm/node_modules/temp/lib/temp.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/.bin/rimraf
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/README.md
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/changelog.md
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/common.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/glob.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/package.json
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/glob/sync.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/rimraf/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/rimraf/README.md
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/rimraf/bin.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/rimraf/package.json
+%%DATADIR%%/resources/app/apm/node_modules/temp/node_modules/rimraf/rimraf.js
+%%DATADIR%%/resources/app/apm/node_modules/temp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tmp/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/tmp/Gruntfile.js
+%%DATADIR%%/resources/app/apm/node_modules/tmp/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tmp/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tmp/cleanup.sh
+%%DATADIR%%/resources/app/apm/node_modules/tmp/lib/tmp.js
+%%DATADIR%%/resources/app/apm/node_modules/tmp/package.json
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/README.md
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/index.js
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/package.json
+%%DATADIR%%/resources/app/apm/node_modules/to-buffer/test.js
+%%DATADIR%%/resources/app/apm/node_modules/touch/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/touch/README.md
+%%DATADIR%%/resources/app/apm/node_modules/touch/bin/touch.js
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/.bin/nopt
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/README.md
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/bin/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/lib/nopt.js
+%%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/package.json
+%%DATADIR%%/resources/app/apm/node_modules/touch/package.json
+%%DATADIR%%/resources/app/apm/node_modules/touch/touch.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/cookie.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/memstore.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/pathMatch.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/permuteDomain.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/pubsuffix-psl.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/store.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/lib/version.js
+%%DATADIR%%/resources/app/apm/node_modules/tough-cookie/package.json
+%%DATADIR%%/resources/app/apm/node_modules/traverse/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/traverse/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/traverse/index.js
+%%DATADIR%%/resources/app/apm/node_modules/traverse/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tunnel-agent/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tunnel-agent/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tunnel-agent/index.js
+%%DATADIR%%/resources/app/apm/node_modules/tunnel-agent/package.json
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/AUTHORS.md
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/PULL_REQUEST_TEMPLATE.md
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/README.md
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/nacl-fast.js
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/nacl-fast.min.js
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/nacl.js
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/nacl.min.js
+%%DATADIR%%/resources/app/apm/node_modules/tweetnacl/package.json
+%%DATADIR%%/resources/app/apm/node_modules/type/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/type/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/type/README.md
+%%DATADIR%%/resources/app/apm/node_modules/type/array-length/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/array-length/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/array-like/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/array-like/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/array/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/array/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/date/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/date/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/error/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/error/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/finite/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/finite/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/function/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/function/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/integer/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/integer/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/iterable/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/iterable/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/lib/is-to-string-tag-supported.js
+%%DATADIR%%/resources/app/apm/node_modules/type/lib/resolve-exception.js
+%%DATADIR%%/resources/app/apm/node_modules/type/lib/safe-to-string.js
+%%DATADIR%%/resources/app/apm/node_modules/type/lib/to-short-string.js
+%%DATADIR%%/resources/app/apm/node_modules/type/natural-number/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/natural-number/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/number/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/number/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/object/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/object/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/package.json
+%%DATADIR%%/resources/app/apm/node_modules/type/plain-function/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/plain-function/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/plain-object/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/plain-object/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/promise/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/promise/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/prototype/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/reg-exp/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/reg-exp/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/safe-integer/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/safe-integer/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/string/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/string/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/thenable/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/thenable/is.js
+%%DATADIR%%/resources/app/apm/node_modules/type/time-value/coerce.js
+%%DATADIR%%/resources/app/apm/node_modules/type/time-value/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/value/ensure.js
+%%DATADIR%%/resources/app/apm/node_modules/type/value/is.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore-plus/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/underscore-plus/README.md
+%%DATADIR%%/resources/app/apm/node_modules/underscore-plus/appveyor.yml
+%%DATADIR%%/resources/app/apm/node_modules/underscore-plus/lib/underscore-plus.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore-plus/package.json
+%%DATADIR%%/resources/app/apm/node_modules/underscore/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/underscore/README.md
+%%DATADIR%%/resources/app/apm/node_modules/underscore/modules/index-all.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore/modules/index-default.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore/modules/index.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore/package.json
+%%DATADIR%%/resources/app/apm/node_modules/underscore/underscore-min.js
+%%DATADIR%%/resources/app/apm/node_modules/underscore/underscore.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/README.md
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/bower.json
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/es5/uri.all.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/es5/uri.all.min.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/index.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/regexps-iri.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/regexps-uri.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/schemes/http.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/schemes/https.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/schemes/mailto.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/schemes/urn.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/uri.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/dist/esnext/util.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/package.json
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/rollup.config.js
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/index.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/regexps-iri.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/regexps-uri.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/schemes/http.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/schemes/https.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/schemes/mailto.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/schemes/urn-uuid.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/schemes/urn.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/uri.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/src/util.ts
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/tsconfig.json
+%%DATADIR%%/resources/app/apm/node_modules/uri-js/yarn.lock
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/History.md
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/README.md
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/browser.js
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/node.js
+%%DATADIR%%/resources/app/apm/node_modules/util-deprecate/package.json
+%%DATADIR%%/resources/app/apm/node_modules/uuid/AUTHORS
+%%DATADIR%%/resources/app/apm/node_modules/uuid/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/uuid/LICENSE.md
+%%DATADIR%%/resources/app/apm/node_modules/uuid/README.md
+%%DATADIR%%/resources/app/apm/node_modules/uuid/bin/uuid
+%%DATADIR%%/resources/app/apm/node_modules/uuid/index.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/bytesToUuid.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/md5-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/md5.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/rng-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/rng.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/sha1-browser.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/sha1.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/lib/v35.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/package.json
+%%DATADIR%%/resources/app/apm/node_modules/uuid/v1.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/v3.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/v4.js
+%%DATADIR%%/resources/app/apm/node_modules/uuid/v5.js
+%%DATADIR%%/resources/app/apm/node_modules/verror/CHANGES.md
+%%DATADIR%%/resources/app/apm/node_modules/verror/CONTRIBUTING.md
+%%DATADIR%%/resources/app/apm/node_modules/verror/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/verror/README.md
+%%DATADIR%%/resources/app/apm/node_modules/verror/lib/verror.js
+%%DATADIR%%/resources/app/apm/node_modules/verror/package.json
+%%DATADIR%%/resources/app/apm/node_modules/which-pm-runs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/which-pm-runs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/which-pm-runs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/which-pm-runs/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wide-align/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/wide-align/README.md
+%%DATADIR%%/resources/app/apm/node_modules/wide-align/align.js
+%%DATADIR%%/resources/app/apm/node_modules/wide-align/package.json
+%%DATADIR%%/resources/app/apm/node_modules/window-size/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/window-size/README.md
+%%DATADIR%%/resources/app/apm/node_modules/window-size/cli.js
+%%DATADIR%%/resources/app/apm/node_modules/window-size/index.js
+%%DATADIR%%/resources/app/apm/node_modules/window-size/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wordwrap/README.markdown
+%%DATADIR%%/resources/app/apm/node_modules/wordwrap/index.js
+%%DATADIR%%/resources/app/apm/node_modules/wordwrap/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wrap-ansi/index.js
+%%DATADIR%%/resources/app/apm/node_modules/wrap-ansi/license
+%%DATADIR%%/resources/app/apm/node_modules/wrap-ansi/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wrap-ansi/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/wrappy/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/wrappy/README.md
+%%DATADIR%%/resources/app/apm/node_modules/wrappy/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wrappy/wrappy.js
+%%DATADIR%%/resources/app/apm/node_modules/wrench/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/wrench/lib/wrench.js
+%%DATADIR%%/resources/app/apm/node_modules/wrench/package.json
+%%DATADIR%%/resources/app/apm/node_modules/wrench/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/Makefile
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/README.md
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/lib/XMLBuilder.js
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/lib/XMLFragment.js
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/lib/index.js
+%%DATADIR%%/resources/app/apm/node_modules/xmlbuilder/package.json
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/.travis.yml
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/__package__.js
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/changelog
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/component.json
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/dom-parser.js
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/dom.js
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/package.json
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/readme.md
+%%DATADIR%%/resources/app/apm/node_modules/xmldom/sax.js
+%%DATADIR%%/resources/app/apm/node_modules/xtend/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/xtend/README.md
+%%DATADIR%%/resources/app/apm/node_modules/xtend/immutable.js
+%%DATADIR%%/resources/app/apm/node_modules/xtend/mutable.js
+%%DATADIR%%/resources/app/apm/node_modules/xtend/package.json
+%%DATADIR%%/resources/app/apm/node_modules/xtend/test.js
+%%DATADIR%%/resources/app/apm/node_modules/y18n/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/y18n/README.md
+%%DATADIR%%/resources/app/apm/node_modules/y18n/index.js
+%%DATADIR%%/resources/app/apm/node_modules/y18n/package.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/node_modules/yargs/LICENSE
+%%DATADIR%%/resources/app/apm/node_modules/yargs/README.md
+%%DATADIR%%/resources/app/apm/node_modules/yargs/completion.sh.hbs
+%%DATADIR%%/resources/app/apm/node_modules/yargs/index.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/lib/completion.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/lib/parser.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/lib/tokenize-arg-string.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/lib/usage.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/lib/validation.js
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/de.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/en.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/es.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/fr.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/id.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/ja.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/ko.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/nb.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/pirate.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/pl.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/pt.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/pt_BR.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/tr.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/locales/zh.json
+%%DATADIR%%/resources/app/apm/node_modules/yargs/package.json
+%%DATADIR%%/resources/app/apm/package-lock.json
+%%DATADIR%%/resources/app/apm/package.json
+%%DATADIR%%/resources/app/apm/script/bundled-node-version.js
+%%DATADIR%%/resources/app/apm/script/check-version.js
+%%DATADIR%%/resources/app/apm/script/download-node.js
+%%DATADIR%%/resources/app/apm/script/postinstall.cmd
+%%DATADIR%%/resources/app/apm/script/postinstall.js
+%%DATADIR%%/resources/app/apm/script/postinstall.sh
+%%DATADIR%%/resources/app/apm/src/generator/safemake.pyc
+%%DATADIR%%/resources/app/apm/templates/bundle/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/templates/bundle/README.md
+%%DATADIR%%/resources/app/apm/templates/bundle/package.json
+%%DATADIR%%/resources/app/apm/templates/language/.gitignore.template
+%%DATADIR%%/resources/app/apm/templates/language/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/templates/language/LICENSE.md
+%%DATADIR%%/resources/app/apm/templates/language/README.md
+%%DATADIR%%/resources/app/apm/templates/language/grammars/__package-name__.cson
+%%DATADIR%%/resources/app/apm/templates/language/package.json
+%%DATADIR%%/resources/app/apm/templates/language/settings/language-__package-name__.cson
+%%DATADIR%%/resources/app/apm/templates/language/snippets/language-__package-name__.cson
+%%DATADIR%%/resources/app/apm/templates/language/spec/language-__package-name__-spec.coffee.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/.gitignore.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/LICENSE.md
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/README.md
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/keymaps/__package-name__.cson.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/lib/__package-name__-view.coffee.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/lib/__package-name__.coffee.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/menus/__package-name__.cson.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/package.json
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/spec/__package-name__-spec.coffee.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/spec/__package-name__-view-spec.coffee.template
+%%DATADIR%%/resources/app/apm/templates/package-coffeescript/styles/__package-name__.less.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/.gitignore.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/templates/package-javascript/LICENSE.md
+%%DATADIR%%/resources/app/apm/templates/package-javascript/README.md
+%%DATADIR%%/resources/app/apm/templates/package-javascript/keymaps/__package-name__.json.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/lib/__package-name__-view.js.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/lib/__package-name__.js.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/menus/__package-name__.json.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/package.json
+%%DATADIR%%/resources/app/apm/templates/package-javascript/spec/__package-name__-spec.js.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/spec/__package-name__-view-spec.js.template
+%%DATADIR%%/resources/app/apm/templates/package-javascript/styles/__package-name__.less.template
+%%DATADIR%%/resources/app/apm/templates/theme/.gitignore.template
+%%DATADIR%%/resources/app/apm/templates/theme/CHANGELOG.md
+%%DATADIR%%/resources/app/apm/templates/theme/LICENSE.md
+%%DATADIR%%/resources/app/apm/templates/theme/README.md
+%%DATADIR%%/resources/app/apm/templates/theme/index.less
+%%DATADIR%%/resources/app/apm/templates/theme/package.json
+%%DATADIR%%/resources/app/apm/templates/theme/styles/base.less
+%%DATADIR%%/resources/app/apm/templates/theme/styles/colors.less
+%%DATADIR%%/resources/app/apm/templates/theme/styles/syntax-variables.less
+%%DATADIR%%/resources/app/atom.sh
+%%DATADIR%%/resources/electron.asar
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DATADIR%%/version
+share/icons/hicolor/1024x1024/apps/atom.png
+share/icons/hicolor/128x128/apps/atom.png
+share/icons/hicolor/16x16/apps/atom.png
+share/icons/hicolor/24x24/apps/atom.png
+share/icons/hicolor/256x256/apps/atom.png
+share/icons/hicolor/32x32/apps/atom.png
+share/icons/hicolor/48x48/apps/atom.png
+share/icons/hicolor/512x512/apps/atom.png
+share/icons/hicolor/64x64/apps/atom.png
+@dir %%DATADIR%%/resources/app/apm/native-module/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/expected/extractthis/dir1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/expected/extractthis/dir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/expected/packthis-unpack.asar.unpacked/dir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/extractthis-unpack-dir.asar.unpacked/dir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/extractthis-unpack.asar.unpacked/dir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis/dir1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis/dir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-glob/x1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-glob/x2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-glob/y3/x1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-glob/y3/z1/x2
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-glob/z4/w1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-subdir/dir1
+@dir %%DATADIR%%/resources/app/apm/node_modules/asar/test/input/packthis-subdir/dir2/subdir
+@dir %%DATADIR%%/resources/app/apm/node_modules/binary/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/binary/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/bl/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/buffers/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/buffers/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/chainsaw/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/chainsaw/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/commander/typings
+@dir %%DATADIR%%/resources/app/apm/node_modules/concat-map/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/concat-map/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/cuint/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/cuint/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/d/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/delegates/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/d/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-iterator/test/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/node_modules/es6-symbol/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/@@iterator
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/concat
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/copy-within
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/entries
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/fill
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/filter
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/find
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/find-index
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/keys
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/map
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/slice
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/splice
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/#/values
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/from
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/array/of
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/boolean
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/date/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/error/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/function/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/iterable
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/json
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/acosh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/asinh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/atanh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/cbrt
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/clz32
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/cosh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/expm1
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/fround
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/hypot
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/imul
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/log10
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/log1p
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/log2
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/sign
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/sinh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/tanh
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/math/trunc
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/epsilon
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/is-finite
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/is-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/is-nan
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/is-safe-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/max-safe-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/number/min-safe-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/object/assign
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/object/entries
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/object/keys
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/object/set-prototype-of
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/promise/#/finally
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/match
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/replace
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/search
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/split
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/sticky
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/reg-exp/#/unicode
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/@@iterator
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/code-point-at
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/contains
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/ends-with
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/normalize
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/repeat
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/#/starts-with
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/from-code-point
+@dir %%DATADIR%%/resources/app/apm/node_modules/es5-ext/test/string/raw
+@dir %%DATADIR%%/resources/app/apm/node_modules/es6-iterator/test/#
+@dir %%DATADIR%%/resources/app/apm/node_modules/es6-symbol/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/es6-weak-map/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/_lib
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/array
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/array-length
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/array-like
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/date
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/error
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/finite
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/function
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/iterable
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/lib
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/natural-number
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/number
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/object
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/plain-function
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/plain-object
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/promise
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/prototype
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/reg-exp
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/safe-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/string
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/thenable
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/time-value
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/node_modules/type/test/value
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/function
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/global-this
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/math
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/object/entries
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/string
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/string_/includes
+@dir %%DATADIR%%/resources/app/apm/node_modules/ext/test/thenable_
+@dir %%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/fast-json-stable-stringify/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/fstream/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/git/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/http_parser/deps/libgit2/deps/http-parser
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/allocators
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/hash
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/streams
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/transports
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/unix
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/libgit2/deps/libgit2/src/xdiff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/.deps/Release/obj.target/zlib/deps/libgit2/deps/zlib
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/git/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/http_parser/deps/libgit2/deps/http-parser
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/allocators
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/hash
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/streams
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/transports
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/unix
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/libgit2/deps/libgit2/src/xdiff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/build/Release/obj.target/zlib/deps/libgit2/deps/zlib
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/.github
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/azure-pipelines
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/ci
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/cmake/Modules
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/deps/http-parser
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/deps/ntlmclient
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/deps/pcre/cmake
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/deps/winhttp
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/deps/zlib
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/docs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/fuzzers/corpora/config_file
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/fuzzers/corpora/download_refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/fuzzers/corpora/objects
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/fuzzers/corpora/packfile
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/include/git2/sys
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/script
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/allocators
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/hash/sha1dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/streams
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/transports
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/unix
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/win32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/src/xdiff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/apply
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/attr
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/blame
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/buf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/checkout
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/cherrypick
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/clar
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/clone
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/commit
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/config
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/core
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/date
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/delta
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/describe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/diff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/fetchhead
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/filter
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/graph
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/ignore
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/index
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/iterator
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/mailmap
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/merge/trees
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/merge/workdir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/message
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/network/remote
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/notes
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/object/blob
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/object/commit
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/object/raw
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/object/tag
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/object/tree
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/odb/backend
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/online
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/patch
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/path
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/perf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/rebase
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/refs/branches
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/refs/reflog
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/remote
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/repo
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/reset
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/21
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/24
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/2c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/37
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/3a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/3b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/55
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/58
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/60
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/6d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/8d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/93
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/9e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/c0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/c7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/c9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/d8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/ec
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/ed
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/fb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/fe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/dir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/sub/dir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/sub/ign/sub
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr/sub/sub
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/59
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/attr_index/sub/sub
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/bad_tag.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/bad_tag.git/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/binaryunicode/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/binaryunicode/.gitted/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/binaryunicode/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/binaryunicode/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/1a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/37
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/5a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/98
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/b9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/blametest.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/02
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/11
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/12
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/1c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/20
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/28
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/2c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/35
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/40
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/49
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/51
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/54
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/56
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/58
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/5f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/6d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/82
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/85
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/ab
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/b8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/ba
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/bb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/e2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/eb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/cherrypick/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/config
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/04
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/20
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/23
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/2c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/33
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/47
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/5a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/79
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/7c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/85
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/92
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/9d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/a2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/af
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/bb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/c8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/d1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/ea
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/objects/fe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_false,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_input,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_odb/autocrlf_true,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_input,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/posix_to_workdir/autocrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_false,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_input,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_odb/autocrlf_true,safecrlf_warn,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_false,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_input,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,-crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,-text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text_auto
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text_auto,eol_crlf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/crlf_data/windows_to_workdir/autocrlf_true,text_auto,eol_lf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/objects/3d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/deprecated-mode.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/31
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/56
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/65
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/6d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/8e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/describe/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/54
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/07
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/1a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/20
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/23
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/24
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/2f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/55
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/6e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/85
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/89
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/8c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/8d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/92
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/9b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/a3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/af
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/b0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/bb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/c7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/d1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/db
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/e1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/f3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/fc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/diff_format_email/dir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/duplicate.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_bare.git/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_bare.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_bare.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_bare.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_standard_repo/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_standard_repo/.gitted/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_standard_repo/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/empty_standard_repo/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/filemodes/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/L
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/icase/k
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/indexv4/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/indexv4/.gitted/objects/b0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/indexv4/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/indexv4/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/8a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/8e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_1397/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/49
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592/t
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/b3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/issue_592b/ignored/contained
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/02
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/3a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/43
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/7e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/8c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/a1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/c9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/objects/fe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mailmap/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/05
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/07
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/0b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/12
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/15
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/1c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/21
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/23
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/2c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/2e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/30
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/34
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/35
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/37
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/3a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/3b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/40
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/43
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/51
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/56
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/5f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/65
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/6e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/72
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/7c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/7e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/89
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/8a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/98
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/9b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/9e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/b9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ba
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/bb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/c0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/c7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ca
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/d8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/db
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ea
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/fe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-recursive/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/ab
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/c2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/modules/submodule/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/02
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/05
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/07
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/11
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/14
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/15
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/1a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/1c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/20
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/21
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/23
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/24
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/2f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/31
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/33
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/34
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/35
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/37
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/3b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/40
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/43
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/47
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/49
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/51
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/54
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/55
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/56
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/57
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/58
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/59
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/5c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/5f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/60
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/67
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/6e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/72
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/7c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/7e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/86
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/8a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/8c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/90
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/91
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/92
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/93
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/98
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/9e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ab
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ac
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/b8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ba
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/c9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ca
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/cc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/db
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/dd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/df
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/eb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ec
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ed
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/fb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/fc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/fe
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-resolve/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/11
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/24
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/2f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/3c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/40
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/43
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/54
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/70
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/a2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/bf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/c7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/ec
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/objects/f8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/merge-whitespace/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/3a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/47
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/51
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/70
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/8a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/9d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/e2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/mergedrepo/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/02
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/04
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/05
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/07
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/0b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/11
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/12
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/14
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/15
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/24
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/35
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/38
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/3b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/65
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/69
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/7d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/82
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/89
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/8c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/91
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/9d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/9e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/a5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/ac
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/af
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/b8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/bb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/bf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/c2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/c6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/c8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/cc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/d2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/de
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/e8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/eb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/ed
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nasty/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nsecs/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nsecs/.gitted/objects/6d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nsecs/.gitted/objects/c5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nsecs/.gitted/objects/df
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/nsecs/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/14
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/partial-testrepo/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/peeled.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/peeled.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/peeled.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/1a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/modules/submodule/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/28
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/5c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/64
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/c1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/f8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/fold
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/push_src/submodule
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/logs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/02
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/05
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/11
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/12
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/1d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/20
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/30
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/33
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/34
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/3c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/3d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/3e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/3f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/40
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/4c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/58
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/5a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/60
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/67
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/6d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/79
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/7a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/7c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/85
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/86
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/8d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/91
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/92
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/a1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ab
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/b9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/bc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/c5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/dc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/df
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/e4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/e8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ec
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ed
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/f7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/f8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/fc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/01
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/7c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/ab
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/f3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/objects/ff
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/rebase-submodule/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/redundant.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/redundant.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/redundant.git/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/03
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/1c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/2c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/31
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/35
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/3c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/44
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/47
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/50
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/89
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/93
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/95
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/b9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/ea
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/renames/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/0a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/15
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/21
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/33
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/3a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/55
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/5a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/72
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/ac
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/d1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/dd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/e5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/ea
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/eb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revert/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revwalk.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revwalk.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/revwalk.git/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sha1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/shallow.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/shallow.git/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/short_tag.git/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/short_tag.git/objects/4d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/short_tag.git/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/short_tag.git/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/short_tag.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/splitindex/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/splitindex/.gitted/objects
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/splitindex/.gitted/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/00
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/37
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/54
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/55
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/70
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/90
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/9c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/aa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/e8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/e9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/ed
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/status/subdir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/objects/b7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/sub.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_added_and_uncommited/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_file/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/3d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/77
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/8e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_head/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_index/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_changed_untracked_file/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_missing_commits/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/modules/sm_unchanged/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/14
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/2a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/57
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/59
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/60
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/74
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/9d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/f5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/just_a_dir
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not/.gitted
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/not-submodule/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_added_and_uncommited
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_changed_file
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_changed_head
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_changed_index
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_changed_untracked_file
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_missing_commits
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2/sm_unchanged
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod2_target/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/EIGHT/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/Five/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/FoUr/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/One/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TEN/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/TWO/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/nine/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/sEvEn/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/six/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/modules/three/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/33
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/4f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/6e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/90
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/EIGHT
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/Five
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/FoUr
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/One
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/TEN
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/TWO
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/nine
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/sEvEn
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/six
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submod3/three
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/objects/b4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_simple/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/89
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/ba
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/c8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodule_with_path/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/.gitted/worktrees/submodules-worktree-parent
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules/testrepo/.gitted/worktrees/submodules-worktree-child
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules-worktree-child
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules-worktree-parent
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/26
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/submodules.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/super/.gitted/objects/51
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/super/.gitted/objects/79
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/super/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/super/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/template/hooks
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/template/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/14
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/16
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/1d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/2b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/4e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/57
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/62
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/66
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/87
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/97
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/9b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/a3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/ad
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/af
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/c0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/ce
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/d4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/e3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/ee
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo/.gitted/worktrees/testrepo-worktree/logs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo-worktree
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/logs/refs/remotes/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/1a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/25
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/27
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/43
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/4b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/52
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/5d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/5f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/8e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/94
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/a6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/ae
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/b2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/b6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/b9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/db
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/e7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/f0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/f1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/refs/notes
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo.git/refs/remotes/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/logs/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/logs/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/36
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/45
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/4a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/5b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/61
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/81
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/84
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/a7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/be
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/c4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/f6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/fa
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/.gitted/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/testrepo2/subdir/subdir2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/1c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/1f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/22
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/29
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/31
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/3b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/49
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/59
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/6c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/7b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/82
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/9a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/9b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/9f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/a4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/a9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/bd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/c3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/cb
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/cd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/d6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/d9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/ef
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/objects/fc
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/twowaymerge.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/b/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/d/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/06
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/41
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/48
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/5e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/6b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/73
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/78
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/88
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/objects/d0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/modules/e/refs/remotes/origin
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/0d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/0e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/0f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/18
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/1b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/1e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/42
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/68
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/6a
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/6e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/71
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/75
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/76
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/79
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/85
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/8b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/93
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/96
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/99
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/9b
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/9d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/9e
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/a0
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/b1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/d7
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/e1
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/e4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/e6
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/f2
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/objects/fd
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/typechanges/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/08
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/13
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/19
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/58
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/5c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/6f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/7f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/80
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/83
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/a8
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/cf
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/d5
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/f4
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/objects/f9
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/unsymlinked.git/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/09
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/0c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/39
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/3c
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/46
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/53
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/63
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/f3
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/objects/pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/.gitted/refs
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/after
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/before
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/expected/driver
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/expected/nodriver
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/userdiff/files
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/info
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/10
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/17
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/2d
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/34
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/8f
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/da
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/objects/ea
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/resources/win32-forbidden/.gitted/refs/heads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/revert
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/revwalk
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/stash
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/status
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/stream
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/stress
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/submodule
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/threads
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/trace/windows
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/transport
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/transports/smart
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/win32
+@dir %%DATADIR%%/resources/app/apm/node_modules/git-utils/deps/libgit2/tests/worktree
+@dir %%DATADIR%%/resources/app/apm/node_modules/github-from-package/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/github-from-package/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/json-schema/draft-03/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/json-schema/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/json-stringify-safe/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/keytar/build/Release/.deps/Release/obj.target/keytar/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/keytar/build/Release/obj.target/keytar/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/keytar/node_modules/nan/doc
+@dir %%DATADIR%%/resources/app/apm/node_modules/keytar/node_modules/nan/tools
+@dir %%DATADIR%%/resources/app/apm/node_modules/keytar/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/minimist/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/minimist/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/mkpath/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/mkdirp/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/ncp/test/fixtures/src/sub
+@dir %%DATADIR%%/resources/app/apm/node_modules/mv/node_modules/rimraf/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/mv/test/a-folder/another-folder
+@dir %%DATADIR%%/resources/app/apm/node_modules/nan/doc
+@dir %%DATADIR%%/resources/app/apm/node_modules/nan/tools
+@dir %%DATADIR%%/resources/app/apm/node_modules/ncp/test/fixtures/src/sub
+@dir %%DATADIR%%/resources/app/apm/node_modules/next-tick/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/node-abi/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/noop-logger/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/nopt/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/nopt/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/content/cli-commands
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/content/configuring-npm
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/content/using-npm
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-access
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-adduser
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-audit
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-bin
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-bugs
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-build
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-bundle
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-cache
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-ci
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-completion
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-config
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-dedupe
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-deprecate
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-dist-tag
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-docs
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-doctor
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-edit
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-explore
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-fund
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-help
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-help-search
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-hook
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-init
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-install
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-install-ci-test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-install-test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-link
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-logout
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-ls
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-org
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-outdated
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-owner
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-pack
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-ping
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-prefix
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-profile
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-prune
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-publish
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-rebuild
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-repo
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-restart
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-root
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-run-script
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-search
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-shrinkwrap
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-star
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-stars
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-start
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-stop
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-team
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-token
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-uninstall
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-unpublish
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-update
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-version
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-view
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/cli-commands/npm-whoami
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/folders
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/install
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/npmrc
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/package-json
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/package-lock-json
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/package-locks
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/configuring-npm/shrinkwrap-json
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/google-fonts/s/poppins/v9
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/icons
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/static/d
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/config
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/developers
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/disputes
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/orgs
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/registry
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/removal
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/scope
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/scripts
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/public/using-npm/semver
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/src/components/home
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/src/images
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/src/pages
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/docs/src/templates
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/man/man1
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/man/man5
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/man/man7
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/JSONStream/test/fixtures
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/agent-base/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansicolors/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ansistyles/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/archy/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/chalk/types
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/colors/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/concat-map/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/copy-concurrently/node_modules/iferr/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/define-properties/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/delegates/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/dezalgo/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/editor/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/encoding/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/err-code/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-abstract/test/helpers
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/es-to-primitive/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fast-json-stable-stringify/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/find-npm-prefix/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-vacuum/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/node_modules/iferr/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/fs-write-stream-atomic/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/function-bind/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/gentle-fs/node_modules/iferr/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/has-symbols/test/shams
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/http-proxy-agent/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/ip/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/is-symbol/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/isexe/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/draft-03/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-schema/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/json-stringify-safe/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/jsonparse/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmaccess/test/util
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmorg/test/util
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmpublish/test/util
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmsearch/test/util
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/libnpmteam/test/util
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/lockfile/test/fixtures
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mkdirp/node_modules/minimist/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/mute-stream/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/gyp/data/win
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/node-gyp/test/fixtures
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/dotdot/abc
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/module_dir/xmodules/aaa
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/module_dir/ymodules/aaa
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/module_dir/zmodules/bbb
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/node_path/x/aaa
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/node_path/x/ccc
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/node_path/y/bbb
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/node_path/y/ccc
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/pathfilter/deep_ref
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/precedence/aaa
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/precedence/bbb
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/baz
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/browser_field
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/dot_main
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/dot_slash_main
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/incorrect_main
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/invalid_main
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/multirepo/packages/package-a
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/multirepo/packages/package-b
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/other_path/lib
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/quux/foo
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/same_names/foo
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/symlinked/_/node_modules
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/symlinked/_/symlink_target
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/normalize-package-data/node_modules/resolve/test/resolver/without_basedir
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/npm-normalize-package-bin/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object-keys/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/object.getownpropertydescriptors/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/performance-now/test/scripts
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/node_modules/retry/test/integration
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promise-retry/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/example/npm-init
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/promzard/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/proto-list/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/pseudomap/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qrcode-terminal/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/qs/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/node_modules/minimist/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/rc/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/test/fixtures/extraneous-detected
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/test/fixtures/extraneous-dev-dep
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/test/fixtures/grandparent-peer
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/read-installed/test/fixtures/grandparent-peer-dev
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/registry-auth-token/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/retry/test/integration
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/smart-buffer/typings
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/docs/examples/javascript
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/docs/examples/typescript
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/typings/client
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks/typings/common
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/node_modules/agent-base/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/socks-proxy-agent/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/text-table/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/through/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/typedarray/test/server
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/umask/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-filename/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/unique-slug/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/util-promisify/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/validate-npm-package-name/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/wcwidth/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/examples/basic
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/examples/pi
+@dir %%DATADIR%%/resources/app/apm/node_modules/npm/node_modules/worker-farm/tests
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/.deps/Release/obj.target/onig_scanner/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/.deps/Release/obj.target/oniguruma/deps/onig/enc
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/obj.target/onig_scanner/src
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/build/Release/obj.target/oniguruma/deps/onig/enc
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/deps/onig/doc
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/deps/onig/enc
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/deps/onig/m4
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/deps/onig/sample
+@dir %%DATADIR%%/resources/app/apm/node_modules/oniguruma/deps/onig/win32
+@dir %%DATADIR%%/resources/app/apm/node_modules/performance-now/test/scripts
+@dir %%DATADIR%%/resources/app/apm/node_modules/qs/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/rc/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/simple-concat/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar/test/link-file-entry-collision
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar-fs/test/fixtures/a
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar-fs/test/fixtures/b/a
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar-fs/test/fixtures/d/sub-dir
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar-fs/test/fixtures/d/sub-files
+@dir %%DATADIR%%/resources/app/apm/node_modules/tar-fs/test/fixtures/e/directory
+@dir %%DATADIR%%/resources/app/apm/node_modules/tmp/test/symlinkme
+@dir %%DATADIR%%/resources/app/apm/node_modules/touch/node_modules/nopt/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/touch/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/traverse/examples
+@dir %%DATADIR%%/resources/app/apm/node_modules/traverse/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/_lib
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/array
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/array-length
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/array-like
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/date
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/error
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/finite
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/function
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/iterable
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/lib
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/natural-number
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/number
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/object
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/plain-function
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/plain-object
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/promise
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/prototype
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/reg-exp
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/safe-integer
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/string
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/thenable
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/time-value
+@dir %%DATADIR%%/resources/app/apm/node_modules/type/test/value
+@dir %%DATADIR%%/resources/app/apm/node_modules/uri-js/tests
+@dir %%DATADIR%%/resources/app/apm/node_modules/wordwrap/example
+@dir %%DATADIR%%/resources/app/apm/node_modules/wordwrap/test
+@dir %%DATADIR%%/resources/app/apm/node_modules/wrench/tests/readdir/foo/bar
+@dir %%DATADIR%%/resources/app/apm/node_modules/wrench/tests/shown/.hidden
+@dir %%DATADIR%%/resources/app/apm/node_modules/wrench/tests/shown/foo/bar
+@dir %%DATADIR%%/resources/app/apm/node_modules/wrench/tests/withsymlinks
diff --git a/emulators/Makefile b/emulators/Makefile
index 733793d3f602..5d51409d36dd 100644
--- a/emulators/Makefile
+++ b/emulators/Makefile
@@ -35,6 +35,7 @@
SUBDIR += elliott-803
SUBDIR += emu64
SUBDIR += emulationstation
+ SUBDIR += fceux
SUBDIR += fmsx
SUBDIR += frodo
SUBDIR += fs-uae
@@ -43,6 +44,7 @@
SUBDIR += fuse-roms
SUBDIR += fuse-utils
SUBDIR += gbe
+ SUBDIR += gem5
SUBDIR += gens
SUBDIR += gngb
SUBDIR += gngeo
@@ -93,6 +95,7 @@
SUBDIR += mupen64plus-video-z64
SUBDIR += nemu
SUBDIR += nestopia
+ SUBDIR += nonpareil
SUBDIR += o2em
SUBDIR += ods2reader
SUBDIR += open-vm-tools
diff --git a/emulators/fceux/Makefile b/emulators/fceux/Makefile
new file mode 100644
index 000000000000..119df2b80273
--- /dev/null
+++ b/emulators/fceux/Makefile
@@ -0,0 +1,93 @@
+# Created by: HIYAMA Takeshi <gibbon@cocoa.freemail.ne.jp>
+# $FreeBSD$
+
+PORTNAME= fceux
+PORTVERSION= 2.2.3
+PORTREVISION= 10
+CATEGORIES= emulators
+MASTER_SITES= SF/fceultra/Source%20Code/${PORTVERSION}%20src/
+DISTNAME= ${PORTNAME}-${PORTVERSION}.src
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Portable NES/Famicom emulator based on Bero's original FCE
+
+LICENSE= GPLv2+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= zenity:x11/zenity
+
+USES= compiler:c++0x desktop-file-utils dos2unix localbase:ldflags \
+ pkgconfig scons:python2 sdl xorg
+USE_SDL= sdl
+USE_XORG= x11
+USE_GNOME+= gdkpixbuf2
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
+
+CXXFLAGS+= ${CXXFLAGS_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_clang= -Wno-c++11-narrowing
+
+OPTIONS_DEFINE= CREATE_AVI DEBUG DOCS FRAMESKIP LOGO LUA OPENGL
+OPTIONS_SINGLE= GUI
+OPTIONS_SINGLE_GUI= GTK2 GTK3
+OPTIONS_DEFAULT= CREATE_AVI FRAMESKIP GTK2 LOGO LUA OPENGL
+
+CREATE_AVI_DESC= Enable avi creation support
+CREATE_AVI_MAKE_ARGS= CREATE_AVI=1
+CREATE_AVI_MAKE_ARGS_OFF= CREATE_AVI=0
+DEBUG_MAKE_ARGS= DEBUG=1
+DEBUG_MAKE_ARGS_OFF= DEBUG=0
+FRAMESKIP_DESC= Enable frameskipping
+FRAMESKIP_MAKE_ARGS= FRAMESKIP=1
+FRAMESKIP_MAKE_ARGS_OFF= FRAMESKIP=0
+GTK2_USES= gnome
+GTK2_USE= GNOME=gtk20
+GTK2_MAKE_ARGS= GTK=1
+GTK2_MAKE_ARGS_OFF= GTK=0
+GTK3_USES= gnome
+GTK3_USE= GNOME=gtk30
+GTK3_MAKE_ARGS= GTK3=1
+GTK3_MAKE_ARGS_OFF= GTK3=0
+LOGO_DESC= Enable a logoscreen when creating avis
+LOGO_LIB_DEPENDS= libgd.so:graphics/gd
+LOGO_MAKE_ARGS= LOGO=1
+LOGO_MAKE_ARGS_OFF= LOGO=0
+LOGO_IMPLIES= CREATE_AVI
+LUA_USES= lua:51
+LUA_MAKE_ARGS= LUA=1 SYSTEM_LUA=1
+LUA_MAKE_ARGS_OFF= LUA=0
+OPENGL_USES= gl
+OPENGL_USE= GL=gl
+OPENGL_MAKE_ARGS= OPENGL=1
+OPENGL_MAKE_ARGS_OFF= OPENGL=0
+
+post-patch:
+ @${REINPLACE_CMD} -e \
+ '/PUBLIC/s|^|#| ; \
+ /CheckLib/s|lua5.1|lua-${LUA_VER}| ; \
+ /LINKFLAGS/s|lua5.1|lua-${LUA_VER}| ; \
+ s|"-ldl"|| ; \
+ s|/usr/include/lua5.1|${LUA_INCDIR}| ; \
+ s|-O2||' ${WRKSRC}/SConstruct
+ @${REINPLACE_CMD} -e \
+ 's|/usr/bin/|| ; \
+ s|/usr/share/|${PREFIX}/share/|' ${WRKSRC}/fceux.desktop
+
+do-install:
+.for i in fceux fceux-net-server
+ ${INSTALL_PROGRAM} ${WRKSRC}/bin/${i} ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_MAN} ${WRKSRC}/documentation/${i}.6 ${STAGEDIR}${MANPREFIX}/man/man6
+.endfor
+ @${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_DATA} ${WRKSRC}/bin/*.lua ${STAGEDIR}${DATADIR}
+ @(cd ${WRKSRC}/output && ${COPYTREE_SHARE} "luaScripts palettes tools" \
+ ${STAGEDIR}${DATADIR})
+ ${INSTALL_DATA} ${WRKSRC}/*.desktop ${STAGEDIR}${DESKTOPDIR}
+ ${INSTALL_DATA} ${WRKSRC}/*.png ${STAGEDIR}${PREFIX}/share/pixmaps
+
+do-install-DOCS-on:
+ @(cd ${WRKSRC}/documentation && ${COPYTREE_SHARE} "TODO-PROJECT Videolog.txt \
+ cheat.html faq fcs.txt fm2.txt protocol.txt snes9x-lua.html tech" \
+ ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.mk>
diff --git a/emulators/fceux/distinfo b/emulators/fceux/distinfo
new file mode 100644
index 000000000000..ce0d7bfe13c3
--- /dev/null
+++ b/emulators/fceux/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1488101003
+SHA256 (fceux-2.2.3.src.tar.gz) = 4be6dda9a347f941809a3c4a90d21815b502384adfdd596adaa7b2daf088823e
+SIZE (fceux-2.2.3.src.tar.gz) = 9292792
diff --git a/emulators/fceux/files/patch-fceux-server_server.cpp b/emulators/fceux/files/patch-fceux-server_server.cpp
new file mode 100644
index 000000000000..843c76927a89
--- /dev/null
+++ b/emulators/fceux/files/patch-fceux-server_server.cpp
@@ -0,0 +1,11 @@
+--- fceux-server/server.cpp.orig 2017-02-26 13:33:11 UTC
++++ fceux-server/server.cpp
+@@ -114,7 +114,7 @@ int LoadConfigFile(char *fn)
+ if(fp=fopen(fn,"rb"))
+ {
+ char buf[256];
+- while(fgets(buf, 256, fp) > 0)
++ while(fgets(buf, 256, fp))
+ {
+ if(!strncasecmp(buf,"maxclients",strlen("maxclients")))
+ sscanf(buf,"%*s %d",&ServerConfig.MaxClients);
diff --git a/emulators/fceux/files/patch-src_boards_mapinc.h b/emulators/fceux/files/patch-src_boards_mapinc.h
new file mode 100644
index 000000000000..dc59f0c4b9fb
--- /dev/null
+++ b/emulators/fceux/files/patch-src_boards_mapinc.h
@@ -0,0 +1,8 @@
+--- src/boards/mapinc.h.orig 2017-02-26 13:37:11 UTC
++++ src/boards/mapinc.h
+@@ -9,4 +9,5 @@
+ #include "../cheat.h"
+ #include "../unif.h"
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
diff --git a/emulators/fceux/files/patch-src_cheat.cpp b/emulators/fceux/files/patch-src_cheat.cpp
new file mode 100644
index 000000000000..e9e5393a17ae
--- /dev/null
+++ b/emulators/fceux/files/patch-src_cheat.cpp
@@ -0,0 +1,11 @@
+--- src/cheat.cpp.orig 2017-02-26 13:33:11 UTC
++++ src/cheat.cpp
+@@ -216,7 +216,7 @@ void FCEU_LoadGameCheats(FILE *override)
+ }
+
+ FCEU_DispMessage("Cheats file loaded.",0); //Tells user a cheats file was loaded.
+- while(fgets(linebuf,2048,fp)>0)
++ while(fgets(linebuf,2048,fp))
+ {
+ char *tbuf=linebuf;
+ int doc=0;
diff --git a/emulators/fceux/pkg-descr b/emulators/fceux/pkg-descr
new file mode 100644
index 000000000000..996dbda4721a
--- /dev/null
+++ b/emulators/fceux/pkg-descr
@@ -0,0 +1,11 @@
+FCE Ultra is an NTSC and PAL Famicom/NES emulator for various
+platforms. It is based upon Bero's original FCE source code. Current
+features include good PPU, CPU, pAPU, expansion chip, and joystick
+emulation. Also a feature unique to this emulator (at the current time)
+is authentic Game Genie emulation. Save states and snapshot features
+also have been implemented. The VS Unisystem is emulated as well.
+
+FCE Ultra supports iNES format ROM images, UNIF format ROM images,
+headerless and FWNES style FDS disk images, and NSF files.
+
+WWW: http://www.fceux.com/
diff --git a/emulators/fceux/pkg-plist b/emulators/fceux/pkg-plist
new file mode 100644
index 000000000000..e15fb8a55a27
--- /dev/null
+++ b/emulators/fceux/pkg-plist
@@ -0,0 +1,106 @@
+bin/fceux
+bin/fceux-net-server
+man/man6/fceux.6.gz
+man/man6/fceux-net-server.6.gz
+share/applications/fceux.desktop
+%%PORTDOCS%%%%DOCSDIR%%/TODO-PROJECT
+%%PORTDOCS%%%%DOCSDIR%%/Videolog.txt
+%%PORTDOCS%%%%DOCSDIR%%/cheat.html
+%%PORTDOCS%%%%DOCSDIR%%/faq
+%%PORTDOCS%%%%DOCSDIR%%/fcs.txt
+%%PORTDOCS%%%%DOCSDIR%%/fm2.txt
+%%PORTDOCS%%%%DOCSDIR%%/protocol.txt
+%%PORTDOCS%%%%DOCSDIR%%/snes9x-lua.html
+%%PORTDOCS%%%%DOCSDIR%%/tech/cpu/4017.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/cpu/dmc.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/cpu/nessound-4th.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/cpu/nessound.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/exp/mmc5-e.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/exp/smb2j.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/exp/tengen.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/exp/vrcvi.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/exp/vrcvii.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/nsfspec.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/ppu/2c02 technical operation.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/ppu/loopy1.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/ppu/loopy2.txt
+%%PORTDOCS%%%%DOCSDIR%%/tech/readme.now
+%%PORTDOCS%%%%DOCSDIR%%/tech/readme.sound
+%%DATADIR%%/auxlib.lua
+%%DATADIR%%/luaScripts/AVI-HeadsUpDisplay.lua
+%%DATADIR%%/luaScripts/BoulderDash_AmoebaAI.lua
+%%DATADIR%%/luaScripts/BugsBunnyBirthdayBlowout.lua
+%%DATADIR%%/luaScripts/ButtonCount.lua
+%%DATADIR%%/luaScripts/CustomLagIndicator_RvT.lua
+%%DATADIR%%/luaScripts/Excitingbike-speedometeronly.lua
+%%DATADIR%%/luaScripts/Excitingbike.lua
+%%DATADIR%%/luaScripts/FRKfunctions.lua
+%%DATADIR%%/luaScripts/GUI-iup_button.lua
+%%DATADIR%%/luaScripts/GUI-iup_example.lua
+%%DATADIR%%/luaScripts/Galaxian.lua
+%%DATADIR%%/luaScripts/Gradius-BulletHell.lua
+%%DATADIR%%/luaScripts/JumpingFCEUXWindow.lua
+%%DATADIR%%/luaScripts/Luabot.lua
+%%DATADIR%%/luaScripts/Machrider.lua
+%%DATADIR%%/luaScripts/MegamanII-LaserEyes.lua
+%%DATADIR%%/luaScripts/MemoryWatch.lua
+%%DATADIR%%/luaScripts/Multitrack.lua
+%%DATADIR%%/luaScripts/Multitrack2.lua
+%%DATADIR%%/luaScripts/NightmareElmStreet-4Player.lua
+%%DATADIR%%/luaScripts/PunchOutChallenge.lua
+%%DATADIR%%/luaScripts/PunchOutStats.lua
+%%DATADIR%%/luaScripts/PunchOutTraining.lua
+%%DATADIR%%/luaScripts/RBIBaseball.lua
+%%DATADIR%%/luaScripts/Registerfind(CheatSearch).lua
+%%DATADIR%%/luaScripts/Rewinder.lua
+%%DATADIR%%/luaScripts/SMB-AreaScrambler.lua
+%%DATADIR%%/luaScripts/SMB-CompetitionRecorder.lua
+%%DATADIR%%/luaScripts/SMB-HitBoxes.lua
+%%DATADIR%%/luaScripts/SMB-Jetpack.lua
+%%DATADIR%%/luaScripts/SMB-Lives&HPDisplay.lua
+%%DATADIR%%/luaScripts/SMB-Mouse.lua
+%%DATADIR%%/luaScripts/SMB-Snow.lua
+%%DATADIR%%/luaScripts/SMB2U.lua
+%%DATADIR%%/luaScripts/SMB3-RainbowRiding.lua
+%%DATADIR%%/luaScripts/ShowPalette.lua
+%%DATADIR%%/luaScripts/SoundDisplay.lua
+%%DATADIR%%/luaScripts/SoundDisplay2.lua
+%%DATADIR%%/luaScripts/Subtitler.lua
+%%DATADIR%%/luaScripts/TeenageMutantNinjaTurtles.lua
+%%DATADIR%%/luaScripts/UsingLuaBot-Documentation.txt
+%%DATADIR%%/luaScripts/UsingLuaScripting-Documentation.txt
+%%DATADIR%%/luaScripts/UsingLuaScripting-ListofFunctions.txt
+%%DATADIR%%/luaScripts/ZapperDisplay.lua
+%%DATADIR%%/luaScripts/ZapperFun.lua
+%%DATADIR%%/luaScripts/luabot_framework.lua
+%%DATADIR%%/luaScripts/m_utils.lua
+%%DATADIR%%/luaScripts/shapedefs.lua
+%%DATADIR%%/luaScripts/taseditor/InputDisplay_for_Selection.lua
+%%DATADIR%%/luaScripts/taseditor/InvertSelection.lua
+%%DATADIR%%/luaScripts/taseditor/RecordBackwards.lua
+%%DATADIR%%/luaScripts/taseditor/ShowNotes.lua
+%%DATADIR%%/luaScripts/taseditor/Swap1P2P.lua
+%%DATADIR%%/luaScripts/taseditor/TrackNoise.lua
+%%DATADIR%%/luaScripts/tetris.lua
+%%DATADIR%%/luaScripts/vnb.lua
+%%DATADIR%%/luaScripts/x_functions.lua
+%%DATADIR%%/luaScripts/x_interface.lua
+%%DATADIR%%/luaScripts/x_smb1enemylist.lua
+%%DATADIR%%/palettes/ASQ_realityA.pal
+%%DATADIR%%/palettes/ASQ_realityB.pal
+%%DATADIR%%/palettes/BMF_final2.pal
+%%DATADIR%%/palettes/BMF_final3.pal
+%%DATADIR%%/palettes/FCEU-13-default_nitsuja.pal
+%%DATADIR%%/palettes/FCEU-15-nitsuja_new.pal
+%%DATADIR%%/palettes/FCEUX.pal
+%%DATADIR%%/palettes/RP2C03.pal
+%%DATADIR%%/palettes/RP2C04_0001.pal
+%%DATADIR%%/palettes/RP2C04_0002.pal
+%%DATADIR%%/palettes/RP2C04_0003.pal
+%%DATADIR%%/palettes/RP2C04_0004.pal
+%%DATADIR%%/palettes/SONY_CXA2025AS_US.pal
+%%DATADIR%%/palettes/Unsaturated-V6.pal
+%%DATADIR%%/palettes/nestopia_rgb.pal
+%%DATADIR%%/palettes/nestopia_yuv.pal
+%%DATADIR%%/tools/taseditor_patterns.txt
+share/pixmaps/fceux.png
diff --git a/emulators/gem5/Makefile b/emulators/gem5/Makefile
new file mode 100644
index 000000000000..2802be6fc377
--- /dev/null
+++ b/emulators/gem5/Makefile
@@ -0,0 +1,51 @@
+# Created by: Veniamin Gvozdikov <vg@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= gem5
+PORTVERSION= 0.0.${DATE}
+CATEGORIES= emulators
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= gem5 Simulator System
+
+BUILD_DEPENDS= swig:devel/swig
+
+BROKEN_armv6= fails to link: undefined reference to HDLcd::BUS_OPTIONS_RESETV
+BROKEN_armv7= fails to link: undefined reference to HDLcd::BUS_OPTIONS_RESETV
+BROKEN_i386= does not build
+BROKEN_mips64= fails to build: claims that gcc version 4.6 or newer required
+BROKEN_FreeBSD_11_powerpc64= fails to build: claims that gcc version 4.6 or newer required
+BROKEN_FreeBSD_12_powerpc64= fails to build: claims that gcc version 4.6 or newer required
+
+USES= gmake scons:python2
+
+DATE= 20140422
+USE_GITHUB= yes
+GH_ACCOUNT= CTSRD-CHERI
+GH_TAGNAME= 99d65cc
+
+ALL_TARGET= build/ARM/gem5.opt
+MAKE_ENV= SWIG="${LOCALBASE}/bin/swig"
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|sys/termios.h|termios.h|' \
+ ${WRKSRC}/src/base/vnc/vncserver.cc \
+ ${WRKSRC}/src/dev/terminal.cc \
+ ${WRKSRC}/util/term/term.c
+
+pre-build:
+ cd ${WRKSRC} && ${GMAKE} -C util/term
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/${PORTNAME} \
+ ${STAGEDIR}${PREFIX}/${PORTNAME}/ARM
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} configs \
+ ${STAGEDIR}${PREFIX}/${PORTNAME})
+ (cd ${WRKSRC} && ${INSTALL_PROGRAM} build/ARM/gem5.opt \
+ ${STAGEDIR}${PREFIX}/${PORTNAME}/ARM/gem5.opt)
+ (cd ${WRKSRC} && ${INSTALL_PROGRAM} util/term/m5term \
+ ${STAGEDIR}${PREFIX}/bin/m5term)
+
+.include <bsd.port.post.mk>
diff --git a/emulators/gem5/distinfo b/emulators/gem5/distinfo
new file mode 100644
index 000000000000..501feb4fd844
--- /dev/null
+++ b/emulators/gem5/distinfo
@@ -0,0 +1,2 @@
+SHA256 (CTSRD-CHERI-gem5-0.0.20140422-99d65cc_GH0.tar.gz) = 63b4f4a5e266b04396e9732ba64205fd1de22432d3379210d4d4a723dc43329a
+SIZE (CTSRD-CHERI-gem5-0.0.20140422-99d65cc_GH0.tar.gz) = 9007377
diff --git a/emulators/gem5/files/patch-SConstruct b/emulators/gem5/files/patch-SConstruct
new file mode 100644
index 000000000000..7fe253ebda09
--- /dev/null
+++ b/emulators/gem5/files/patch-SConstruct
@@ -0,0 +1,39 @@
+--- SConstruct.orig 2015-04-21 11:32:43.000000000 -0400
++++ SConstruct 2018-03-11 21:17:31.106873000 -0400
+@@ -534,6 +534,9 @@
+ main['LTO_CCFLAGS'] = []
+ main['LTO_LDFLAGS'] = []
+
++# Add pthread
++main.Append(LIBS=['pthread'])
++
+ # According to the readme, tcmalloc works best if the compiler doesn't
+ # assume that we're using the builtin malloc and friends. These flags
+ # are compiler-specific, so we need to set them after we detect which
+@@ -785,13 +788,8 @@
+ swig_flags=Split('-c++ -python -modern -templatereduce $_CPPINCFLAGS')
+ main.Append(SWIGFLAGS=swig_flags)
+
+-# Check for 'timeout' from GNU coreutils. If present, regressions will
+-# be run with a time limit. We require version 8.13 since we rely on
+-# support for the '--foreground' option.
+-timeout_lines = readCommand(['timeout', '--version'],
+- exception='').splitlines()
+-# Get the first line and tokenize it
+-timeout_version = timeout_lines[0].split() if timeout_lines else []
++# It expects GNU timeout, FreeBSD one (on 11.x+) is not compatible
++timeout_version = []
+ main['TIMEOUT'] = timeout_version and \
+ compareVersions(timeout_version[-1], '8.13') >= 0
+
+@@ -922,8 +920,8 @@
+ # version of python, see above for instructions on how to invoke
+ # scons with the appropriate PATH set.
+ #
+- # First we check if python2-config exists, else we use python-config
+- python_config = readCommand(['which', 'python2-config'],
++ # First we check if python2.7-config exists, else we use python-config
++ python_config = readCommand(['which', 'python2.7-config'],
+ exception='').strip()
+ if not os.path.exists(python_config):
+ python_config = readCommand(['which', 'python-config'],
diff --git a/emulators/gem5/files/patch-src_SConscript b/emulators/gem5/files/patch-src_SConscript
new file mode 100644
index 000000000000..50bc9affc724
--- /dev/null
+++ b/emulators/gem5/files/patch-src_SConscript
@@ -0,0 +1,11 @@
+--- src/SConscript.orig 2015-04-21 15:32:43 UTC
++++ src/SConscript
+@@ -165,7 +165,7 @@ class Source(SourceFile):
+ '''specify the source file, and any guards'''
+ super(Source, self).__init__(source, **guards)
+
+- self.Werror = Werror
++ self.Werror = False
+ self.swig = swig
+
+ class PySource(SourceFile):
diff --git a/emulators/gem5/files/patch-src_mem_physical.cc b/emulators/gem5/files/patch-src_mem_physical.cc
new file mode 100644
index 000000000000..a2b568bcb7a0
--- /dev/null
+++ b/emulators/gem5/files/patch-src_mem_physical.cc
@@ -0,0 +1,14 @@
+--- src/mem/physical.cc.orig 2015-04-21 15:32:43 UTC
++++ src/mem/physical.cc
+@@ -62,11 +62,9 @@
+ * host. On OSX the MAP_NORESERVE flag does not exist, so simply make
+ * it 0.
+ */
+-#if defined(__APPLE__)
+ #ifndef MAP_NORESERVE
+ #define MAP_NORESERVE 0
+ #endif
+-#endif
+
+ using namespace std;
+
diff --git a/emulators/gem5/files/patch-util_term_Makefile b/emulators/gem5/files/patch-util_term_Makefile
new file mode 100644
index 000000000000..ac67742092fb
--- /dev/null
+++ b/emulators/gem5/files/patch-util_term_Makefile
@@ -0,0 +1,11 @@
+--- util/term/Makefile.orig 2015-04-22 17:24:04 UTC
++++ util/term/Makefile
+@@ -26,7 +26,7 @@
+ #
+ # Authors: Nathan Binkert
+
+-CC= gcc
++CC= cc
+ CCFLAGS= -g -O0
+
+ default: m5term
diff --git a/emulators/gem5/pkg-descr b/emulators/gem5/pkg-descr
new file mode 100644
index 000000000000..29911213888d
--- /dev/null
+++ b/emulators/gem5/pkg-descr
@@ -0,0 +1,5 @@
+The gem5 simulator is a modular platform for computer system
+architecture research, encompassing system-level architecture
+as well as processor microarchitecture.
+
+WWW: http://www.gem5.org/
diff --git a/emulators/gem5/pkg-plist b/emulators/gem5/pkg-plist
new file mode 100644
index 000000000000..b613858602bc
--- /dev/null
+++ b/emulators/gem5/pkg-plist
@@ -0,0 +1,108 @@
+bin/m5term
+gem5/ARM/gem5.opt
+gem5/configs/boot/ammp.rcS
+gem5/configs/boot/ammp.symbol
+gem5/configs/boot/art.rcS
+gem5/configs/boot/bbench-gb.rcS
+gem5/configs/boot/bbench-ics.rcS
+gem5/configs/boot/bn-app.rcS
+gem5/configs/boot/bonnie.rcS
+gem5/configs/boot/bonnie.symbol
+gem5/configs/boot/bzip.rcS
+gem5/configs/boot/cc1.symbol
+gem5/configs/boot/devtime.rcS
+gem5/configs/boot/equake.rcS
+gem5/configs/boot/equake.symbol
+gem5/configs/boot/gcc.rcS
+gem5/configs/boot/gzip.rcS
+gem5/configs/boot/gzip.symbol
+gem5/configs/boot/hack_back_ckpt.rcS
+gem5/configs/boot/halt.sh
+gem5/configs/boot/iscsi-client.rcS
+gem5/configs/boot/iscsi-server.rcS
+gem5/configs/boot/ls.rcS
+gem5/configs/boot/mcf.rcS
+gem5/configs/boot/mcf.symbol
+gem5/configs/boot/mesa.rcS
+gem5/configs/boot/mesa.symbol
+gem5/configs/boot/micro_ctx.rcS
+gem5/configs/boot/micro_memlat.rcS
+gem5/configs/boot/micro_memlat2mb.rcS
+gem5/configs/boot/micro_memlat8.rcS
+gem5/configs/boot/micro_memlat8mb.rcS
+gem5/configs/boot/micro_stream.rcS
+gem5/configs/boot/micro_streamcopy.rcS
+gem5/configs/boot/micro_streamscale.rcS
+gem5/configs/boot/micro_syscall.rcS
+gem5/configs/boot/micro_tlblat.rcS
+gem5/configs/boot/micro_tlblat2.rcS
+gem5/configs/boot/micro_tlblat3.rcS
+gem5/configs/boot/mutex-test.rcS
+gem5/configs/boot/nat-netperf-maerts-client.rcS
+gem5/configs/boot/nat-netperf-server.rcS
+gem5/configs/boot/nat-netperf-stream-client.rcS
+gem5/configs/boot/nat-spec-surge-client.rcS
+gem5/configs/boot/nat-spec-surge-server.rcS
+gem5/configs/boot/natbox-netperf.rcS
+gem5/configs/boot/natbox-spec-surge.rcS
+gem5/configs/boot/netperf-maerts-client.rcS
+gem5/configs/boot/netperf-rr.rcS
+gem5/configs/boot/netperf-server.rcS
+gem5/configs/boot/netperf-stream-client.rcS
+gem5/configs/boot/netperf-stream-nt-client.rcS
+gem5/configs/boot/netperf-stream-udp-client.rcS
+gem5/configs/boot/netperf-stream-udp-local.rcS
+gem5/configs/boot/nfs-client-dbench.rcS
+gem5/configs/boot/nfs-client-nhfsstone.rcS
+gem5/configs/boot/nfs-client-smallb.rcS
+gem5/configs/boot/nfs-client-tcp-smallb.rcS
+gem5/configs/boot/nfs-client-tcp.rcS
+gem5/configs/boot/nfs-client.rcS
+gem5/configs/boot/nfs-server-nhfsstone.rcS
+gem5/configs/boot/nfs-server.rcS
+gem5/configs/boot/null.rcS
+gem5/configs/boot/ping-client.rcS
+gem5/configs/boot/ping-server.rcS
+gem5/configs/boot/setup
+gem5/configs/boot/spec-surge-client.rcS
+gem5/configs/boot/spec-surge-server.rcS
+gem5/configs/boot/surge-client.rcS
+gem5/configs/boot/surge-server.rcS
+gem5/configs/common/Benchmarks.py
+gem5/configs/common/CacheConfig.py
+gem5/configs/common/Caches.py
+gem5/configs/common/CpuConfig.py
+gem5/configs/common/FSConfig.py
+gem5/configs/common/MemConfig.py
+gem5/configs/common/O3_ARM_v7a.py
+gem5/configs/common/Options.py
+gem5/configs/common/Simulation.py
+gem5/configs/common/SysPaths.py
+gem5/configs/common/cpu2000.py
+gem5/configs/dram/sweep.py
+gem5/configs/example/fs.py
+gem5/configs/example/memcheck.py
+gem5/configs/example/memtest.py
+gem5/configs/example/read_config.py
+gem5/configs/example/ruby_direct_test.py
+gem5/configs/example/ruby_mem_test.py
+gem5/configs/example/ruby_network_test.py
+gem5/configs/example/ruby_random_test.py
+gem5/configs/example/se.py
+gem5/configs/ruby/MESI_Three_Level.py
+gem5/configs/ruby/MESI_Two_Level.py
+gem5/configs/ruby/MI_example.py
+gem5/configs/ruby/MOESI_CMP_directory.py
+gem5/configs/ruby/MOESI_CMP_token.py
+gem5/configs/ruby/MOESI_hammer.py
+gem5/configs/ruby/Network_test.py
+gem5/configs/ruby/Ruby.py
+gem5/configs/splash2/cluster.py
+gem5/configs/splash2/run.py
+gem5/configs/topologies/BaseTopology.py
+gem5/configs/topologies/Cluster.py
+gem5/configs/topologies/Crossbar.py
+gem5/configs/topologies/Mesh.py
+gem5/configs/topologies/MeshDirCorners.py
+gem5/configs/topologies/Pt2Pt.py
+gem5/configs/topologies/Torus.py
diff --git a/emulators/nonpareil/Makefile b/emulators/nonpareil/Makefile
new file mode 100644
index 000000000000..97c16af1887b
--- /dev/null
+++ b/emulators/nonpareil/Makefile
@@ -0,0 +1,44 @@
+# Created by: trasz <trasz@pin.if.uz.zgora.pl>
+# $FreeBSD$
+
+PORTNAME= nonpareil
+PORTVERSION= 0.79
+PORTREVISION= 8
+CATEGORIES= emulators
+MASTER_SITES= http://nonpareil.brouhaha.com/download/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Simulator for many HP calculators
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \
+ libfreetype.so:print/freetype2 \
+ libpng.so:graphics/png
+
+USES= bison gnome pkgconfig scons:python2 sdl
+USE_GNOME= cairo gdkpixbuf2 gtk20 libxml2
+USE_SDL= sdl
+
+PORTDOCS= CREDITS DEBUGGING README TODO
+
+OPTIONS_DEFINE= DOCS
+
+post-patch:
+ @${REINPLACE_CMD} -e \
+ 's|%%CFLAGS%%|${CFLAGS}| ; \
+ s|%%CC%%|${CC}|' ${WRKSRC}/src/SConscript
+ @${REINPLACE_CMD} -E \
+ "s|('/usr/local')|\1,PathVariable.PathAccept|" ${WRKSRC}/SConstruct
+ @${REINPLACE_CMD} -e \
+ 's|<stdint.h>|<inttypes.h>|g' ${WRKSRC}/src/*.[cly]
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+
+post-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/emulators/nonpareil/distinfo b/emulators/nonpareil/distinfo
new file mode 100644
index 000000000000..0ddfccbde9f9
--- /dev/null
+++ b/emulators/nonpareil/distinfo
@@ -0,0 +1,2 @@
+SHA256 (nonpareil-0.79.tar.gz) = 3bcb2f9a829a4cad003f84a42c6f0e31a7bf527e634aea9cf13e370b6c175841
+SIZE (nonpareil-0.79.tar.gz) = 4761552
diff --git a/emulators/nonpareil/files/patch-SConstruct b/emulators/nonpareil/files/patch-SConstruct
new file mode 100644
index 000000000000..48263e69f1e4
--- /dev/null
+++ b/emulators/nonpareil/files/patch-SConstruct
@@ -0,0 +1,86 @@
+--- SConstruct.orig 2008-08-24 00:37:34 UTC
++++ SConstruct
+@@ -24,28 +24,28 @@ release = '0.79' # should get from a file, and use on
+ conf_file = 'nonpareil.conf'
+
+ #-----------------------------------------------------------------------------
+-# Options
++# Variables
+ #-----------------------------------------------------------------------------
+
+-opts = Options (conf_file)
++opts = Variables (conf_file)
+
+-opts.AddOptions (EnumOption ('host',
++opts.AddVariables (EnumVariable ('host',
+ help = 'host build platform',
+ allowed_values = ('posix', 'win32'),
+ default = 'posix',
+ ignorecase = 1),
+
+- EnumOption ('target',
++ EnumVariable ('target',
+ help = 'execution target platform',
+ allowed_values = ('posix', 'win32'),
+ default = 'posix',
+ ignorecase = 1),
+
+- PathOption ('prefix',
++ PathVariable ('prefix',
+ 'installation path prefix',
+ '/usr/local'),
+
+- # Don't use PathOption for other paths, because we don't
++ # Don't use PathVariable for other paths, because we don't
+ # require the directories to preexist.
+ ('bindir',
+ 'path for executable files (default is $prefix/bin)',
+@@ -59,25 +59,25 @@ opts.AddOptions (EnumOption ('host',
+ 'installation virtual root directory (for packaging)',
+ ''),
+
+- BoolOption ('debug',
++ BoolVariable ('debug',
+ help = 'compile for debugging',
+ default = 1),
+
+ # Feature switches:
+
+- BoolOption ('has_debugger_gui',
++ BoolVariable ('has_debugger_gui',
+ help = 'enable debugger GUI interface',
+ default = 0),
+
+- BoolOption ('has_debugger_cli',
++ BoolVariable ('has_debugger_cli',
+ help = 'enable debugger command-line interface',
+ default = 0),
+
+- BoolOption ('use_tcl',
++ BoolVariable ('use_tcl',
+ help = 'use Tcl as debug command interpreter (only when debugger CLI is enabled)',
+ default = 1), # only if has_debugger_cli
+
+- BoolOption ('use_readline',
++ BoolVariable ('use_readline',
+ help = 'use Readline library for command editing and history (only when debugger CLI is enabled)',
+ default = 1)) # only if has_debugger_cli
+
+@@ -235,7 +235,7 @@ SConscript (['rom/SConscript',
+ # host platform code
+ #-----------------------------------------------------------------------------
+
+-native_env = env.Copy ()
++native_env = env.Clone ()
+ native_env ['build_target_only'] = 0
+ SConscript ('src/SConscript',
+ build_dir = 'build/' + env ['host'],
+@@ -256,7 +256,7 @@ SConscript ('asm/SConscript',
+ #-----------------------------------------------------------------------------
+
+ if (env ['host'] != env ['target']):
+- cross_build_env = env.Copy ()
++ cross_build_env = env.Clone ()
+ cross_build_env ['build_target_only'] = 1
+ SConscript ('src/SConscript',
+ build_dir = 'build/' + env ['target'],
diff --git a/emulators/nonpareil/files/patch-src_SConscript b/emulators/nonpareil/files/patch-src_SConscript
new file mode 100644
index 000000000000..70c2dcb70b08
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_SConscript
@@ -0,0 +1,114 @@
+--- src/SConscript.orig 2008-08-24 00:37:18 UTC
++++ src/SConscript
+@@ -41,16 +41,11 @@ sdl_pkg_config_cmd = 'sdl-config --cflags --libs'
+
+ build_env.Append (CPPPATH = ['.'])
+ build_env.Append (CPPPATH = ['#/build/common']) # generated includes
+-build_env.Append (CCFLAGS = ['-Wall'])
++build_env.Append (CCFLAGS = "%%CFLAGS%%")
+ build_env.Append (YACCFLAGS = [ '-d', '-v' ])
++build_env.Replace (CC = '%%CC%%')
+
+-if build_env ['debug'] :
+- build_env.Append (CCFLAGS = ['-g'])
+-else:
+- build_env.Append (CCFLAGS = ['-O2'])
+-
+ if cross and ming and build_target_only:
+- build_env.Replace (CC = '/usr/local/mingw/bin/i586-mingw32msvc-gcc')
+ build_env.Append (CCFLAGS = ['-mms-bitfields'])
+ build_env.Append (CPPPATH = ['/usr/local/gtkwin/include']) # libpng
+ build_env.Append (CPPPATH = ['/usr/local/gtkwin/SDL-1.2.8/include'])
+@@ -79,7 +74,7 @@ state_io_srcs = Split ("""state_write.c state_read.c""
+ state_io_objs = [build_env.Object(src) for src in state_io_srcs];
+ state_io_packages = "gtk+-2.0 gdk-2.0 gdk-pixbuf-2.0 glib-2.0 libxml-2.0"
+
+-release_env = build_env.Copy (CPPDEFINES = [('NONPAREIL_RELEASE', build_env ['RELEASE'])])
++release_env = build_env.Clone (CPPDEFINES = [('NONPAREIL_RELEASE', build_env ['RELEASE'])])
+ common_objs.append (release_env.Object ('release.c'))
+
+ build_env.ParseConfig(pkg_config_cmd + state_io_packages)
+@@ -89,7 +84,7 @@ build_env.ParseConfig(pkg_config_cmd + state_io_packag
+ #-----------------------------------------------------------------------------
+
+ if build_env ['build_target_only'] == 0:
+- str2png_env = build_env.Copy ()
++ str2png_env = build_env.Clone ()
+
+ str2png_env.Append (CPPDEFINES = [('DEFAULT_PATH', 'image')])
+
+@@ -196,7 +191,7 @@ if build_env ['build_target_only'] == 0:
+ #-----------------------------------------------------------------------------
+
+ if not build_target_only:
+- title_env = native_env.Copy (STR2PNG_STRING = 'NONPAREIL',
++ title_env = native_env.Clone (STR2PNG_STRING = 'NONPAREIL',
+ STR2PNG_OPTS = '-x 40 -y 44 -m 10')
+
+ title_env.STR2PNG (target = 'nonpareil_title',
+@@ -205,7 +200,7 @@ if not build_target_only:
+ native_env.PNG2C (target = '#build/common/nonpareil_title_png.c',
+ source = 'nonpareil_title.png')
+
+- rgoose_env = native_env.Copy (STR2PNG_STRING = '.',
++ rgoose_env = native_env.Clone (STR2PNG_STRING = '.',
+ STR2PNG_OPTS = '-x 40 -y 44')
+
+ rgoose_env.STR2PNG (target = 'rgoose',
+@@ -214,7 +209,7 @@ if not build_target_only:
+ native_env.PNG2C (target = '#build/common/rgoose_png.c',
+ source = 'rgoose.png')
+
+- lgoose_env = native_env.Copy (STR2PNG_STRING = ',',
++ lgoose_env = native_env.Clone (STR2PNG_STRING = ',',
+ STR2PNG_OPTS = '-x 40 -y 44')
+
+ lgoose_env.STR2PNG (target = 'lgoose',
+@@ -235,7 +230,7 @@ if not build_target_only:
+ # nonpareil
+ #-----------------------------------------------------------------------------
+
+-nonpareil_env = build_env.Copy ()
++nonpareil_env = build_env.Clone ()
+
+ nonpareil_srcs = Split ("""proc.c glib_async_queue_source.c
+ about.c goose.c pixbuf_util.c
+@@ -284,9 +279,9 @@ nonpareil_env.ParseConfig (pkg_config_cmd + nonpareil_
+ if (not ming) or (cross and not build_target_only):
+ nonpareil_env.ParseConfig (sdl_pkg_config_cmd)
+
+-csim_env = nonpareil_env.Copy ()
++csim_env = nonpareil_env.Clone ()
+ if not ming:
+- csim_env.Append (CPPDEFINES = [('DEFAULT_PATH', build_env ['libdir'])])
++ csim_env.Append (CPPDEFINES = [('DEFAULT_PATH' + build_env ['libdir'])])
+
+ if build_env ['target'] == 'win32':
+ csim_env.Append (CPPDEFINES = [('SHAPE_DEFAULT', "false")])
+@@ -296,7 +291,7 @@ if build_env ['has_debugger_gui']:
+
+ if build_env ['has_debugger_cli']:
+ csim_env.Append (CPPDEFINES = [('HAS_DEBUGGER_CLI', 1)])
+- debugger_cli_env = csim_env.Copy ()
++ debugger_cli_env = csim_env.Clone ()
+ if build_env ['use_tcl']:
+ debugger_cli_env.Append (CPPDEFINES = [('USE_TCL', 1)])
+ nonpareil_env.Append (LIBS = 'tcl')
+@@ -325,7 +320,7 @@ nonpareil = nonpareil_env.Program (target = 'nonpareil
+ # udis
+ #-----------------------------------------------------------------------------
+
+-udis_env = build_env.Copy ()
++udis_env = build_env.Clone ()
+
+ udis_srcs = Split ("""dis.c""")
+
+@@ -336,7 +331,7 @@ udis = udis_env.Program (target = 'udis',
+ # nsim_conv
+ #-----------------------------------------------------------------------------
+
+-nsim_conv_env = build_env.Copy ()
++nsim_conv_env = build_env.Clone ()
+
+ nsim_conv_srcs = Split ("""nsim_conv.c
+ state_read_nsim.c state_write_nsim.c""")
diff --git a/emulators/nonpareil/files/patch-src_asm.h b/emulators/nonpareil/files/patch-src_asm.h
new file mode 100644
index 000000000000..6bedaf1394c8
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_asm.h
@@ -0,0 +1,11 @@
+--- src/asm.h.orig 2008-08-24 00:37:18 UTC
++++ src/asm.h
+@@ -22,7 +22,7 @@ MA 02111, USA.
+
+ extern int arch;
+
+-int pass;
++extern int pass;
+ extern int lineno;
+ extern int errors;
+
diff --git a/emulators/nonpareil/files/patch-src_printer.c b/emulators/nonpareil/files/patch-src_printer.c
new file mode 100644
index 000000000000..8fd36a9f860b
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_printer.c
@@ -0,0 +1,10 @@
+--- src/printer.c.orig 2008-08-24 00:37:18 UTC
++++ src/printer.c
+@@ -29,6 +29,7 @@ MA 02111, USA.
+ #include <gtk/gtk.h>
+
+ #include <png.h>
++#include <zlib.h>
+
+ #include "util.h"
+ #include "display.h"
diff --git a/emulators/nonpareil/files/patch-src_proc.c b/emulators/nonpareil/files/patch-src_proc.c
new file mode 100644
index 000000000000..7e5dcc549165
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_proc.c
@@ -0,0 +1,16 @@
+--- src/proc.c.orig 2008-08-24 00:37:18 UTC
++++ src/proc.c
+@@ -352,7 +352,13 @@ bool sim_read_object_file (sim_t *sim, c
+ // Microsoft freopen() isn't compliant with the C standard, which allows
+ // NULL for the filename if you're reopening an existing file handle.
+ #else
++ // XXX: for some reason this does not work.
++#if 0
+ f = freopen (NULL, "r", f);
++#else
++ fclose(f);
++ f = fopen(fn, "rb");
++#endif
+ #endif
+ if (! f)
+ {
diff --git a/emulators/nonpareil/files/patch-src_util.c b/emulators/nonpareil/files/patch-src_util.c
new file mode 100644
index 000000000000..b2de6dbf3909
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_util.c
@@ -0,0 +1,18 @@
+--- src/util.c.orig 2008-08-24 00:37:18 UTC
++++ src/util.c
+@@ -130,6 +130,7 @@ void realloc_strcpy (char **dest, char *
+ }
+
+
++#if 0
+ // strlcpy will copy as much of src into dest as it can, up to one less than
+ // the maximum length of dest specified by the argument l. Unlike strncpy(),
+ // strlcpy() will always leave dest NULL-terminated on return.
+@@ -139,6 +140,7 @@ char *strlcpy (char *dest, const char *s
+ dest [l - 1] = '\0';
+ return dest;
+ }
++#endif
+
+
+ // strlncpy will copy up to n characters from src to dest, but not more than
diff --git a/emulators/nonpareil/files/patch-src_util.h b/emulators/nonpareil/files/patch-src_util.h
new file mode 100644
index 000000000000..547729926f27
--- /dev/null
+++ b/emulators/nonpareil/files/patch-src_util.h
@@ -0,0 +1,11 @@
+--- src/util.h.orig 2008-08-24 00:37:18 UTC
++++ src/util.h
+@@ -56,7 +56,7 @@ void realloc_strcpy (char **dest, char *
+ // strlcpy will copy as much of src into dest as it can, up to one less than
+ // the maximum length of dest specified by the argument l. Unlike strncpy(),
+ // strlcpy() will always leave dest NULL-terminated on return.
+-char *strlcpy (char *dest, const char *src, size_t l);
++//char *strlcpy (char *dest, const char *src, size_t l);
+
+
+ // strlncpy will copy up to n characters from src to dest, but not more than
diff --git a/emulators/nonpareil/pkg-descr b/emulators/nonpareil/pkg-descr
new file mode 100644
index 000000000000..63453174461c
--- /dev/null
+++ b/emulators/nonpareil/pkg-descr
@@ -0,0 +1,7 @@
+Nonpareil is a high-fidelity simulator for calculators. It currently
+supports many HP calculators models introduced between 1972 and
+1982. Simulation fidelity is achieved through the use of the actual
+microcode of the calculators, thus in most cases the simulation
+behavior exactly matches that of the real calculator.
+
+WWW: http://nonpareil.brouhaha.com/
diff --git a/emulators/nonpareil/pkg-plist b/emulators/nonpareil/pkg-plist
new file mode 100644
index 000000000000..eea031930166
--- /dev/null
+++ b/emulators/nonpareil/pkg-plist
@@ -0,0 +1,49 @@
+bin/modutil
+bin/nonpareil
+bin/uasm
+lib/nonpareil/21.kml
+lib/nonpareil/21.obj
+lib/nonpareil/21.png
+lib/nonpareil/25.kml
+lib/nonpareil/25.obj
+lib/nonpareil/25.png
+lib/nonpareil/32e.kml
+lib/nonpareil/32e.obj
+lib/nonpareil/32e.png
+lib/nonpareil/33c.kml
+lib/nonpareil/33c.obj
+lib/nonpareil/33c.png
+lib/nonpareil/34c.kml
+lib/nonpareil/34c.obj
+lib/nonpareil/34c.png
+lib/nonpareil/35.kml
+lib/nonpareil/35.lst
+lib/nonpareil/35.obj
+lib/nonpareil/35.png
+lib/nonpareil/37e.kml
+lib/nonpareil/37e.obj
+lib/nonpareil/37e.png
+lib/nonpareil/38c.kml
+lib/nonpareil/38c.obj
+lib/nonpareil/38c.png
+lib/nonpareil/38e.kml
+lib/nonpareil/38e.obj
+lib/nonpareil/41cv.kml
+lib/nonpareil/41cv.mod
+lib/nonpareil/41cv.png
+lib/nonpareil/41cx.kml
+lib/nonpareil/41cx.mod
+lib/nonpareil/45.kml
+lib/nonpareil/45.lst
+lib/nonpareil/45.obj
+lib/nonpareil/45.png
+lib/nonpareil/55.kml
+lib/nonpareil/55.lst
+lib/nonpareil/55.obj
+lib/nonpareil/55.png
+lib/nonpareil/80.kml
+lib/nonpareil/80.lst
+lib/nonpareil/80.obj
+lib/nonpareil/80.png
+lib/nonpareil/82143a.mod
+lib/nonpareil/82182a.mod
diff --git a/games/0ad/Makefile b/games/0ad/Makefile
new file mode 100644
index 000000000000..fd1ae3e6da87
--- /dev/null
+++ b/games/0ad/Makefile
@@ -0,0 +1,92 @@
+# $FreeBSD$
+
+PORTNAME= 0ad
+PORTVERSION= 0.0.23b
+PORTREVISION= 12
+CATEGORIES= games
+MASTER_SITES= http://releases.wildfiregames.com/ \
+ SF/zero-ad/releases
+DISTFILES= ${PORTNAME}-${PORTVERSION}-alpha-unix-build.tar.xz \
+ ${PORTNAME}-${PORTVERSION}-alpha-unix-data.tar.xz
+
+MAINTAINER= madpilot@FreeBSD.org
+COMMENT= Real-time strategy (RTS) game of ancient warfare
+
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= zip:archivers/zip \
+ cmake:devel/cmake
+LIB_DEPENDS= libboost_thread.so:devel/boost-libs \
+ libicui18n.so:devel/icu \
+ libpng.so:graphics/png \
+ libogg.so:audio/libogg \
+ libvorbis.so:audio/libvorbis \
+ libcurl.so:ftp/curl \
+ libgloox.so:net-im/gloox \
+ libminiupnpc.so:net/miniupnpc \
+ libnspr4.so:devel/nspr \
+ libenet.so:net/enet \
+ libtiff.so:graphics/tiff \
+ libsodium.so:security/libsodium
+
+USES= compiler:c++11-lib desktop-file-utils dos2unix gl gmake gnome \
+ iconv jpeg openal:al pkgconfig python:2.7,build sdl tar:xz xorg
+USE_GNOME= libxml2
+USE_GL= gl
+USE_SDL= sdl2
+USE_XORG= x11 xcursor
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}-alpha
+BUILD_WRKSRC= ${WRKSRC}/build/workspaces/gcc
+MAKE_ARGS= config=release verbose=1
+CPPFLAGS+= -DU_USING_ICU_NAMESPACE=1
+BUNDLE_LIBS= yes
+DOS2UNIX_REGEX= .*\.([ch]p{0,2}|make)
+BINARY_ALIAS= python=${PYTHON_CMD}
+
+USE_WX= 3.0+
+WX_COMPS= wx:lib
+MAKE_ENV+= JOBS=${_MAKE_JOBS}
+
+BROKEN_aarch64= fails to compile: no member named verifyHeapAccessDisassembly
+BROKEN_armv6= fails to link: fatal error: conftest: Unknown error: -1
+BROKEN_armv7= fails to link: fatal error: conftest: Unknown error: -1
+BROKEN_powerpc64= fails to compile: _psutil_bsd.c: error: 'struct xtcpcb' has no member named 'xt_tp'
+
+PORTDATA= *
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
+ -e 's|%%CC%%|${CC}|' \
+ ${WRKSRC}/build/premake/premake5.lua ${WRKSRC}/build/premake/extern_libs5.lua
+.if ${ARCH} == i386 && ${CHOSEN_COMPILER_TYPE} == gcc
+ @${REINPLACE_CMD} -e '1055,1251s/-rdynamic/-lssp_nonshared &/' \
+ -e '1441s/"execinfo",/& "ssp_nonshared",/' \
+ ${WRKSRC}/build/premake/premake5.lua
+.endif
+ @${REINPLACE_CMD} 's,^\(Exec=\)/usr/local,\1${PREFIX},' \
+ ${WRKSRC}/build/resources/0ad.desktop
+ @${REINPLACE_CMD} 's|%%PREFIX%%|${PREFIX}|' \
+ ${WRKSRC}/build/resources/0ad.sh
+
+pre-build:
+ (cd ${WRKSRC}/build/workspaces && ${SETENV} ${MAKE_ENV} ./update-workspaces.sh --bindir=${PREFIX}/bin --datadir=${DATADIR} --libdir=${PREFIX}/lib/${PORTNAME})
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/binaries/system/pyrogenesis ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_SCRIPT} ${WRKSRC}/build/resources/0ad.sh ${STAGEDIR}${PREFIX}/bin/0ad
+ ${INSTALL_PROGRAM} ${WRKSRC}/binaries/system/ActorEditor ${STAGEDIR}${PREFIX}/bin
+ ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}
+ (cd ${WRKSRC}/binaries/system && ${INSTALL_LIB} libAtlasUI.so libCollada.so libmozjs38-ps-release.so libnvcore.so libnvimage.so libnvmath.so libnvtt.so ${STAGEDIR}${PREFIX}/lib/${PORTNAME})
+ ${INSTALL_DATA} ${WRKSRC}/build/resources/0ad.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKSRC}/build/resources/0ad.png ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ (cd ${WRKSRC}/binaries/data && ${COPYTREE_SHARE} "config l10n tests tools" ${STAGEDIR}${DATADIR})
+ ${MKDIR} ${STAGEDIR}${DATADIR}/mods/public ${STAGEDIR}${DATADIR}/mods/mod
+ ${TAR} xf ${WRKSRC}/binaries/data/mods/public/public.zip -C ${STAGEDIR}${DATADIR}/mods/public --no-same-permissions
+ ${TAR} xf ${WRKSRC}/binaries/data/mods/mod/mod.zip -C ${STAGEDIR}${DATADIR}/mods/mod --no-same-permissions
+
+.include <bsd.port.post.mk>
diff --git a/games/0ad/distinfo b/games/0ad/distinfo
new file mode 100644
index 000000000000..7aa206213e7b
--- /dev/null
+++ b/games/0ad/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1545588170
+SHA256 (0ad-0.0.23b-alpha-unix-build.tar.xz) = 01bff7641ee08cac896c54d518d7e4b01752513105558f212e3199d747512a37
+SIZE (0ad-0.0.23b-alpha-unix-build.tar.xz) = 31922812
+SHA256 (0ad-0.0.23b-alpha-unix-data.tar.xz) = e11b4ade7ede954cbbdc1fe6e2e4b25ac6b8d5a644133b640ffc9b099338a713
+SIZE (0ad-0.0.23b-alpha-unix-data.tar.xz) = 691280800
diff --git a/games/0ad/files/patch-build_premake_extern__libs5.lua b/games/0ad/files/patch-build_premake_extern__libs5.lua
new file mode 100644
index 000000000000..946c30375b72
--- /dev/null
+++ b/games/0ad/files/patch-build_premake_extern__libs5.lua
@@ -0,0 +1,21 @@
+--- build/premake/extern_libs5.lua.orig 2018-04-29 15:44:48 UTC
++++ build/premake/extern_libs5.lua
+@@ -191,7 +191,7 @@ extern_lib_defs = {
+ end
+ -- TODO: This actually applies to most libraries we use on BSDs, make this a global setting.
+ if os.istarget("bsd") then
+- sysincludedirs { "/usr/local/include" }
++ sysincludedirs { "%%LOCALBASE%%/include" }
+ end
+ end,
+ link_settings = function()
+@@ -301,9 +301,6 @@ extern_lib_defs = {
+ elseif os.istarget("macosx") then
+ add_default_include_paths("iconv")
+ defines { "LIBICONV_STATIC" }
+- elseif os.getversion().description == "FreeBSD" then
+- defines { "HAVE_ICONV_CONST" }
+- defines { "ICONV_CONST=const" }
+ end
+ end,
+ link_settings = function()
diff --git a/games/0ad/files/patch-build_premake_premake5.lua b/games/0ad/files/patch-build_premake_premake5.lua
new file mode 100644
index 000000000000..edd965ab45dd
--- /dev/null
+++ b/games/0ad/files/patch-build_premake_premake5.lua
@@ -0,0 +1,17 @@
+--- build/premake/premake5.lua.orig 2018-04-22 18:14:45 UTC
++++ build/premake/premake5.lua
+@@ -376,11 +376,11 @@ function project_add_x11_dirs()
+ sysincludedirs {
+ "/usr/X11R6/include/X11",
+ "/usr/X11R6/include",
+- "/usr/local/include/X11",
+- "/usr/local/include",
++ "%%LOCALBASE%%/include/X11",
++ "%%LOCALBASE%%/include",
+ "/usr/include/X11"
+ }
+- libdirs { "/usr/X11R6/lib" }
++ libdirs { "%%LOCALBASE%%/lib" }
+ end
+ end
+
diff --git a/games/0ad/files/patch-build_workspaces_update-workspaces.sh b/games/0ad/files/patch-build_workspaces_update-workspaces.sh
new file mode 100644
index 000000000000..311f65a0c84f
--- /dev/null
+++ b/games/0ad/files/patch-build_workspaces_update-workspaces.sh
@@ -0,0 +1,13 @@
+--- build/workspaces/update-workspaces.sh.orig 2014-09-20 19:02:24 UTC
++++ build/workspaces/update-workspaces.sh
+@@ -1,10 +1,5 @@
+ #!/bin/sh
+
+-if [ "$(id -u)" = "0" ]; then
+- echo "Running as root will mess up file permissions. Aborting ..." 1>&2
+- exit 1
+-fi
+-
+ die()
+ {
+ echo ERROR: $*
diff --git a/games/0ad/files/patch-icu68 b/games/0ad/files/patch-icu68
new file mode 100644
index 000000000000..5e9199d89535
--- /dev/null
+++ b/games/0ad/files/patch-icu68
@@ -0,0 +1,17 @@
+Regressed by https://github.com/unicode-org/icu/commit/c3fe7e09d844
+
+../../../source/i18n/L10n.cpp:208:82: error: use of undeclared identifier 'TRUE'
+ currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == TRUE;
+ ^
+
+--- source/i18n/L10n.cpp.orig 2018-04-10 18:13:32 UTC
++++ source/i18n/L10n.cpp
+@@ -205,7 +205,7 @@ void L10n::ReevaluateCurrentLocaleAndReload()
+ else
+ {
+ GetDictionaryLocale(locale, currentLocale);
+- currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == TRUE;
++ currentLocaleIsOriginalGameLocale = (currentLocale == icu::Locale::getUS()) == true;
+ useLongStrings = false;
+ }
+ LoadDictionaryForCurrentLocale();
diff --git a/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp b/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp
new file mode 100644
index 000000000000..1e7b881a41fb
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_fcollada_src_FCollada_FUtils_FUStringBuilder.hpp
@@ -0,0 +1,157 @@
+--- libraries/source/fcollada/src/FCollada/FUtils/FUStringBuilder.hpp.orig 2017-07-28 19:57:27 UTC
++++ libraries/source/fcollada/src/FCollada/FUtils/FUStringBuilder.hpp
+@@ -26,63 +26,6 @@
+ #define SAFE_DELETE_ARRAY(ptr) if (ptr != NULL) { delete [] ptr; ptr = NULL; }
+ #endif
+
+-template <class Char, class FloatType>
+-void FloatToString(FloatType f, Char* sz)
+-{
+- Char* buffer = sz + 1;
+- static const int digitCount = 6;
+- int decimal, sign;
+-
+- // ecvt rounds the string for us: http://www.datafocus.com/docs/man3/ecvt.3.asp
+- char* end = ecvt(f, digitCount, &decimal, &sign);
+-
+- if (sign != 0) (*buffer++) = '-';
+- int count = digitCount;
+- if (decimal > digitCount)
+- {
+- // We use the scientific notation: P.MeX
+- (*buffer++) = (*end++); // P is one character.
+- (*buffer++) = '.';
+-
+- // Mantissa (cleaned for zeroes)
+- for (--count; count > 0; --count) if (end[count - 1] != '0') break;
+- for (int i = 0; i < count; ++i) (*buffer++) = (*end++);
+- if (buffer[-1] == '.') --buffer;
+-
+- // Exponent
+- (*buffer++) = 'e';
+- uint32 exponent = decimal - 1; // X
+- if (exponent >= 10) (*buffer++) = (Char) ('0' + (exponent / 10));
+- (*buffer++) = (Char) ('0' + (exponent % 10));
+- (*buffer) = 0;
+- return;
+- }
+- else if (decimal > 0)
+- {
+- // Simple number: A.B
+- for (int i = 0; i < decimal; ++i) (*buffer++) = (*end++);
+- if (decimal < digitCount) (*buffer++) = '.';
+- count = digitCount - decimal;
+- }
+- else if (decimal < -digitCount)
+- {
+- // What case is this?
+- decimal = count = 0;
+- }
+- else if (decimal < 0 || (decimal == 0 && *end != '0'))
+- {
+- // Tiny number: 0.Me-X
+- (*buffer++) = '0'; (*buffer++) = '.';
+- for (int i = 0; i < -decimal; ++i) (*buffer++) = '0';
+- count = digitCount + decimal;
+- }
+- for (; count > 0; --count) if (end[count - 1] != '0') break;
+- for (int i = 0; i < count; ++i) (*buffer++) = (*end++);
+- if (decimal == 0 && count == 0) (*buffer++) = '0';
+- if (buffer[-1] == '.') --buffer;
+- (*buffer) = 0;
+-}
+-
+ template <class Char>
+ FUStringBuilderT<Char>::FUStringBuilderT(const String& sz)
+ {
+@@ -234,53 +177,50 @@ void FUStringBuilderT<Char>::append(const FUStringBuil
+ template <class Char>
+ void FUStringBuilderT<Char>::append(float f)
+ {
+-#ifdef WIN32
+- // use <float.h> _isnan method to detect the 1.#IND00 NaN.
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN() && !_isnan((double)f))
+-#else
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN())
+-#endif
+- {
+- if (IsEquivalent(f, 0.0f, std::numeric_limits<float>::epsilon())) append((Char)'0');
+- else
+- {
+- Char sz[128];
+- FloatToString(f, sz);
+- append(sz + 1);
+- }
+- }
+- else if (f == std::numeric_limits<float>::infinity())
+- { append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else if (f == -std::numeric_limits<float>::infinity())
+- { append((Char)'-'); append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else
+- { append((Char)'N'); append((Char)'a'); append((Char)'N'); }
++ append((double)f);
+ }
+
+ template <class Char>
+ void FUStringBuilderT<Char>::append(double f)
+ {
+-#ifdef WIN32
+- // use <float.h> _isnan method to detect the .#IND00 NaN.
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN() && !_isnan(f))
+-#else
+- if (f != std::numeric_limits<float>::infinity() && f != -std::numeric_limits<float>::infinity() && f != std::numeric_limits<float>::quiet_NaN() && f != std::numeric_limits<float>::signaling_NaN())
+-#endif
+- {
+- if (IsEquivalent(f, 0.0, std::numeric_limits<double>::epsilon())) append((Char)'0');
+- else
+- {
+- Char sz[128];
+- FloatToString(f, sz);
+- append(sz + 1);
+- }
++ if (f == -std::numeric_limits<double>::infinity()) {
++ append("-INF");
++ return;
++ } else if (f == std::numeric_limits<double>::infinity()) {
++ append("INF");
++ return;
++ } else if (f != f) {
++ append("NaN");
++ return;
++ } else if (-std::numeric_limits<double>::epsilon() < f && f < std::numeric_limits<double>::epsilon()) {
++ append("0.0E0");
++ return;
+ }
+- else if (f == std::numeric_limits<double>::infinity())
+- { append((Char)'I'); append((Char)'N'); append((Char)'F'); }
+- else if (f == -std::numeric_limits<double>::infinity())
+- { append((Char)'-'); append((Char)'I'); append((Char)'N'); append((Char)'F'); }
++
++ if (f < 0.0) {
++ f = -f;
++ append('-');
++ }
++
++ int e = 0;
++// e = floor(log10(f));
++// f = f / pow(10.0, e);
++
++ if (f < 1.0)
++ for (; f < 1.0; f *= 10.0)
++ e--;
+ else
+- { append((Char)'N'); append((Char)'a'); append((Char)'N'); }
++ for (; f >= 10.0; f /= 10.0)
++ e++;
++
++ char tmp[10];
++ sprintf(tmp, "%.6g", f);
++ append(tmp);
++ if (tmp[1] == 0) // only one digit, add missing part according canonical representation
++ append(".0");
++
++ sprintf(tmp, "E%d", e);
++ append(tmp);
+ }
+
+ template <class Char>
diff --git a/games/0ad/files/patch-libraries_source_fcollada_src_Makefile b/games/0ad/files/patch-libraries_source_fcollada_src_Makefile
new file mode 100644
index 000000000000..5221789a8bcb
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_fcollada_src_Makefile
@@ -0,0 +1,11 @@
+--- libraries/source/fcollada/src/Makefile.orig 2019-04-26 13:27:39 UTC
++++ libraries/source/fcollada/src/Makefile
+@@ -227,7 +227,7 @@ OBJECTS_ALL = $(OBJECTS_DEBUG) $(OBJECTS_RELEASE) $(OB
+ all: output/libFColladaSD.a output/libFColladaSR.a install
+
+ output_dirs:
+- bash -c 'mkdir -p output/{debug,release,test}/{FCollada/{FCDocument,FMath,FUtils,FColladaTest/{FCTestAssetManagement,FCTestExportImport,FCTestXRef}},FColladaPlugins/FArchiveXML}'
++ for x in debug release test; do for y in FCDocument FMath FUtils FColladaTest; do for z in FCTestAssetManagement FCTestExportImport FCTestXRef; do mkdir -p output/$$x/FCollada/$$y/$$z; done; done; mkdir -p output/$$x/FColladaPlugins/FArchiveXML; done
+
+ test: FCollada/FColladaTest/ output/FColladaTest
+ ( cd FCollada/FColladaTest/ ; ../../output/FColladaTest )
diff --git a/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff b/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff
new file mode 100644
index 000000000000..78701a995867
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_spidermonkey_FixpsutilFreeBSD.diff
@@ -0,0 +1,168 @@
+--- libraries/source/spidermonkey/FixpsutilFreeBSD.diff.orig 2017-09-13 00:10:27 UTC
++++ libraries/source/spidermonkey/FixpsutilFreeBSD.diff
+@@ -1,6 +1,6 @@
+---- python/psutil/psutil/_psutil_bsd.c
+-+++ python/psutil/psutil/_psutil_bsd.c
+-@@ -957,11 +957,19 @@ psutil_sockaddr_matches(int family, int port, void *pc
++--- ./python/psutil/psutil/_psutil_bsd.c.orig 2015-09-17 22:12:23.000000000 +0200
+++++ ./python/psutil/psutil/_psutil_bsd.c
++@@ -957,11 +957,19 @@
+ psutil_sockaddr_addrlen(family)) == 0);
+ }
+
+@@ -20,7 +20,7 @@
+ struct xinpgen *xig, *oxig;
+ struct xsocket *so;
+
+-@@ -969,9 +977,15 @@ psutil_search_tcplist(char *buf, struct kinfo_file *ki
++@@ -969,9 +977,15 @@
+ for (xig = (struct xinpgen *)((char *)xig + xig->xig_len);
+ xig->xig_len > sizeof(struct xinpgen);
+ xig = (struct xinpgen *)((char *)xig + xig->xig_len)) {
+@@ -36,7 +36,44 @@
+
+ if (so->so_type != kif->kf_sock_type ||
+ so->xso_family != kif->kf_sock_domain ||
+-@@ -1019,7 +1033,11 @@ psutil_proc_connections(PyObject *self, PyObject *args
++@@ -981,20 +995,36 @@
++ if (kif->kf_sock_domain == AF_INET) {
++ if (!psutil_sockaddr_matches(
++ AF_INET, inp->inp_lport, &inp->inp_laddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local))
+++#endif
++ continue;
++ if (!psutil_sockaddr_matches(
++ AF_INET, inp->inp_fport, &inp->inp_faddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ } else {
++ if (!psutil_sockaddr_matches(
++ AF_INET6, inp->inp_lport, &inp->in6p_laddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ if (!psutil_sockaddr_matches(
++ AF_INET6, inp->inp_fport, &inp->in6p_faddr,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer))
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer))
+++#endif
++ continue;
++ }
++
++@@ -1019,7 +1049,11 @@
+ struct kinfo_file *freep = NULL;
+ struct kinfo_file *kif;
+ char *tcplist = NULL;
+@@ -48,3 +85,100 @@
+
+ PyObject *retList = PyList_New(0);
+ PyObject *tuple = NULL;
++@@ -1094,19 +1128,35 @@
++ inet_ntop(
++ kif->kf_sock_domain,
++ psutil_sockaddr_addr(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local),
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local),
+++#endif
++ lip,
++ sizeof(lip));
++ inet_ntop(
++ kif->kf_sock_domain,
++ psutil_sockaddr_addr(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer),
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer),
+++#endif
++ rip,
++ sizeof(rip));
++ lport = htons(psutil_sockaddr_port(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_local));
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_local));
+++#endif
++ rport = htons(psutil_sockaddr_port(kif->kf_sock_domain,
+++#if __FreeBSD_version < 1200031
++ &kif->kf_sa_peer));
+++#else
+++ &kif->kf_un.kf_sock.kf_sa_peer));
+++#endif
++
++ // construct python tuple/list
++ laddr = Py_BuildValue("(si)", lip, lport);
++@@ -1137,7 +1187,11 @@
++ else if (kif->kf_sock_domain == AF_UNIX) {
++ struct sockaddr_un *sun;
++
+++#if __FreeBSD_version < 1200031
++ sun = (struct sockaddr_un *)&kif->kf_sa_local;
+++#else
+++ sun = (struct sockaddr_un *)&kif->kf_un.kf_sock.kf_sa_local;
+++#endif
++ snprintf(
++ path, sizeof(path), "%.*s",
++ (sun->sun_len - (sizeof(*sun) - sizeof(sun->sun_path))),
++@@ -1779,7 +1833,11 @@
++ struct xinpgen *xig, *exig;
++ struct xinpcb *xip;
++ struct xtcpcb *xtp;
+++#if __FreeBSD_version >= 1200026
+++ struct xinpcb *inp;
+++#else
++ struct inpcb *inp;
+++#endif
++ struct xsocket *so;
++ struct sock *sock;
++ const char *varname;
++@@ -1849,13 +1907,21 @@
++ PyErr_Format(PyExc_RuntimeError, "struct xinpcb size mismatch");
++ goto error;
++ }
+++#if __FreeBSD_version >= 1200026
+++ inp = xip;
+++#else
++ inp = &xip->xi_inp;
+++#endif
++ so = &xip->xi_socket;
++ break;
++ }
++
++ inp = &xtp->xt_inp;
+++#if __FreeBSD_version >= 1200026
+++ so = &xtp->xt_inp.xi_socket;
+++#else
++ so = &xtp->xt_socket;
+++#endif
++ char lip[200], rip[200];
++ int family, lport, rport, pid, status;
++
++@@ -1863,9 +1929,14 @@
++ pid = psutil_get_pid_from_sock(hash);
++ if (pid < 0)
++ continue;
+++
++ lport = ntohs(inp->inp_lport);
++ rport = ntohs(inp->inp_fport);
+++#if __FreeBSD_version >= 1200026
+++ status = xtp->t_state;
+++#else
++ status = xtp->xt_tp.t_state;
+++#endif
++
++ if (inp->inp_vflag & INP_IPV4) {
++ family = AF_INET;
diff --git a/games/0ad/files/patch-libraries_source_spidermonkey_build.sh b/games/0ad/files/patch-libraries_source_spidermonkey_build.sh
new file mode 100644
index 000000000000..661627fc0407
--- /dev/null
+++ b/games/0ad/files/patch-libraries_source_spidermonkey_build.sh
@@ -0,0 +1,17 @@
+--- libraries/source/spidermonkey/build.sh.orig 2016-10-04 15:01:34 UTC
++++ libraries/source/spidermonkey/build.sh
+@@ -96,6 +96,14 @@ cd js/src
+ rm -rf build-debug
+ rm -rf build-release
+
++cp jsnativestack.cpp jsnativestack.cpp.orig
++sed 's/# include <pthread_np.h>/#pragma GCC visibility push(default)\
++#include <pthread_np.h>\
++#pragma GCC visibility pop/' jsnativestack.cpp.orig >jsnativestack.cpp
++
++cp configure configure.orig
++sed -e 's/"$ac_cv_have_visibility_class_bug" = "no"; then/"$ac_cv_have_visibility_class_bug" = "no" -a "$OS_ARCH" != "FreeBSD" ; then/' -e 's/-Werror=conversion-null//' configure.orig >configure
++
+ # We want separate debug/release versions of the library, so we have to change
+ # the LIBRARY_NAME for each build.
+ # (We use perl instead of sed so that it works with MozillaBuild on Windows,
diff --git a/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp b/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp
new file mode 100644
index 000000000000..87d3081a43e7
--- /dev/null
+++ b/games/0ad/files/patch-source_lib_allocators_page__aligned.cpp
@@ -0,0 +1,20 @@
+--- source/lib/allocators/page_aligned.cpp.orig 2017-07-28 19:57:26 UTC
++++ source/lib/allocators/page_aligned.cpp
+@@ -49,7 +49,7 @@ static const int mmap_flags = MAP_PRIVATE|MAP_ANONYMOU
+ Status mem_Reserve(size_t size, u8** pp)
+ {
+ errno = 0;
+- void* ret = mmap(0, size, PROT_NONE, mmap_flags|MAP_NORESERVE, -1, 0);
++ void* ret = mmap(0, size, PROT_NONE, mmap_flags, -1, 0);
+ *pp = (u8*)ret;
+ return StatusFromMap(ret);
+ }
+@@ -76,7 +76,7 @@ Status mem_Commit(u8* p, size_t size, int prot)
+ Status mem_Decommit(u8* p, size_t size)
+ {
+ errno = 0;
+- void* ret = mmap(p, size, PROT_NONE, mmap_flags|MAP_NORESERVE|MAP_FIXED, -1, 0);
++ void* ret = mmap(p, size, PROT_NONE, mmap_flags|MAP_FIXED, -1, 0);
+ return StatusFromMap(ret);
+ }
+
diff --git a/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp b/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp
new file mode 100644
index 000000000000..09152b8501de
--- /dev/null
+++ b/games/0ad/files/patch-source_lib_sysdep_os_unix_uvm.cpp
@@ -0,0 +1,20 @@
+--- source/lib/sysdep/os/unix/uvm.cpp.orig 2017-07-28 19:57:26 UTC
++++ source/lib/sysdep/os/unix/uvm.cpp
+@@ -40,7 +40,7 @@ namespace vm {
+ void* ReserveAddressSpace(size_t size, size_t UNUSED(commitSize), PageType UNUSED(pageType), int UNUSED(prot))
+ {
+ errno = 0;
+- void* p = mmap(0, size, PROT_NONE, mmap_flags|MAP_NORESERVE, -1, 0);
++ void* p = mmap(0, size, PROT_NONE, mmap_flags, -1, 0);
+ if(p == MAP_FAILED)
+ return 0;
+ return p;
+@@ -77,7 +77,7 @@ bool Commit(uintptr_t address, size_t size, PageType U
+ bool Decommit(uintptr_t address, size_t size)
+ {
+ errno = 0;
+- if(mmap((void*)address, size, PROT_NONE, mmap_flags|MAP_NORESERVE|MAP_FIXED, -1, 0) == MAP_FAILED)
++ if(mmap((void*)address, size, PROT_NONE, mmap_flags|MAP_FIXED, -1, 0) == MAP_FAILED)
+ return false;
+ return true;
+ }
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp
new file mode 100644
index 000000000000..b67f4c71c6e6
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasObject_AtlasObjectImpl.cpp
@@ -0,0 +1,30 @@
+--- source/tools/atlas/AtlasObject/AtlasObjectImpl.cpp.orig 2016-11-23 14:09:58 UTC
++++ source/tools/atlas/AtlasObject/AtlasObjectImpl.cpp
+@@ -164,7 +164,12 @@ void AtObj::add(const char* key, AtObj& data)
+
+ void AtObj::add(const char* key, const wxString& value)
+ {
+- add(key, value.wc_str());
++ const AtNode* o = new AtNode(value.wc_str());
++
++ if (!p)
++ p = new AtNode();
++
++ p = p->addChild(key, AtNode::Ptr(o));
+ }
+
+ void AtObj::add(const char* key, const wchar_t* value)
+@@ -187,7 +192,12 @@ void AtObj::set(const char* key, AtObj& data)
+
+ void AtObj::set(const char* key, const wxString& value)
+ {
+- set(key, value.wc_str());
++ const AtNode* o = new AtNode(value.wc_str());
++
++ if (!p)
++ p = new AtNode();
++
++ p = p->setChild(key, AtNode::Ptr(o));
+ }
+
+ void AtObj::set(const char* key, const wchar_t* value)
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp
new file mode 100644
index 000000000000..d9653b27468f
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasUI_CustomControls_MapDialog_MapDialog.cpp
@@ -0,0 +1,34 @@
+--- source/tools/atlas/AtlasUI/CustomControls/MapDialog/MapDialog.cpp.orig 2018-03-13 20:26:30 UTC
++++ source/tools/atlas/AtlasUI/CustomControls/MapDialog/MapDialog.cpp
+@@ -166,11 +166,11 @@ void MapDialog::OnListBox(wxCommandEvent& evt)
+ else
+ {
+ wxString filePath = GetSelectedFilePath();
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (!filePath.IsEmpty() && qry.exists)
+ {
+- AtlasMessage::qVFSFileRealPath qry(filePath.wc_str());
++ AtlasMessage::qVFSFileRealPath qry(filePath.ToStdWstring());
+ qry.Post();
+ wxDynamicCast(FindWindow(ID_MapDialogFilename), wxTextCtrl)->ChangeValue(*qry.realPath);
+ }
+@@ -221,7 +221,7 @@ void MapDialog::OpenFile()
+ if (filePath.empty())
+ return;
+
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (!qry.exists)
+ return;
+@@ -236,7 +236,7 @@ void MapDialog::SaveFile()
+ return;
+
+ // TODO: this test would work better outside the VFS
+- AtlasMessage::qVFSFileExists qry(filePath.wc_str());
++ AtlasMessage::qVFSFileExists qry(filePath.ToStdWstring());
+ qry.Post();
+ if (qry.exists)
+ {
diff --git a/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp b/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp
new file mode 100644
index 000000000000..4b1b88917a8c
--- /dev/null
+++ b/games/0ad/files/patch-source_tools_atlas_AtlasUI_ScenarioEditor_ScenarioEditor.cpp
@@ -0,0 +1,56 @@
+--- source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp.orig 2018-03-13 20:20:45 UTC
++++ source/tools/atlas/AtlasUI/ScenarioEditor/ScenarioEditor.cpp
+@@ -723,7 +723,7 @@ bool ScenarioEditor::OpenFile(const wxString& name, co
+ wxBusyInfo busy(_("Loading ") + name);
+ wxBusyCursor busyc;
+
+- AtlasMessage::qVFSFileExists qry(filename.wc_str());
++ AtlasMessage::qVFSFileExists qry(filename.ToStdWstring());
+ qry.Post();
+ if (!qry.exists)
+ return false;
+@@ -733,7 +733,7 @@ bool ScenarioEditor::OpenFile(const wxString& name, co
+ m_ToolManager.SetCurrentTool(_T(""));
+ // TODO: clear the undo buffer, etc
+
+- std::wstring map(filename.wc_str());
++ std::wstring map(filename.ToStdWstring());
+ POST_MESSAGE(LoadMap, (map));
+
+ SetOpenFilename(name);
+@@ -786,7 +786,7 @@ void ScenarioEditor::OnImportHeightmap(wxCommandEvent&
+
+ OpenFile(_T(""), _T("maps/scenarios/_default.xml"));
+
+- std::wstring image(dlg.GetPath().wc_str());
++ std::wstring image(dlg.GetPath().ToStdWstring());
+ POST_MESSAGE(ImportHeightmap, (image));
+
+ // TODO: Make this a non-undoable command
+@@ -830,7 +830,7 @@ void ScenarioEditor::OnSave(wxCommandEvent& event)
+ // the preview units.)
+ m_ToolManager.SetCurrentTool(_T(""));
+
+- std::wstring map(m_OpenFilename.wc_str());
++ std::wstring map(m_OpenFilename.ToStdWstring());
+ POST_MESSAGE(SaveMap, (map));
+
+ // Wait for it to finish saving
+@@ -852,7 +852,7 @@ void ScenarioEditor::OnSaveAs(wxCommandEvent& WXUNUSED
+
+ m_ToolManager.SetCurrentTool(_T(""));
+
+- std::wstring map(filePath.wc_str());
++ std::wstring map(filePath.ToStdWstring());
+ POST_MESSAGE(SaveMap, (map));
+
+ SetOpenFilename(filePath);
+@@ -920,7 +920,7 @@ void ScenarioEditor::OnJavaScript(wxCommandEvent& WXUN
+ wxString cmd = ::wxGetTextFromUser(_T(""), _("JS command"), _T(""), this);
+ if (cmd.IsEmpty())
+ return;
+- POST_MESSAGE(JavaScript, ((std::wstring)cmd.wc_str()));
++ POST_MESSAGE(JavaScript, ((std::wstring)cmd.ToStdWstring()));
+ }
+
+ void ScenarioEditor::OnCameraReset(wxCommandEvent& WXUNUSED(event))
diff --git a/games/0ad/pkg-descr b/games/0ad/pkg-descr
new file mode 100644
index 000000000000..948039bd24f9
--- /dev/null
+++ b/games/0ad/pkg-descr
@@ -0,0 +1,16 @@
+0 A.D. (pronounced "zero ey-dee") is a free, open-source, cross-platform
+real-time strategy (RTS) game of ancient warfare. In short, it is
+a historically-based war/economy game that allows players to relive
+or rewrite the history of Western civilizations, focusing on the
+years between 500 B.C. and 500 A.D. The project is highly ambitious,
+involving state-of-the-art 3D graphics, detailed artwork, sound,
+and a flexible and powerful custom-built game engine.
+
+The game has been in development by Wildfire Games (WFG), a group
+of volunteer, hobbyist game developers, since 2001. The code and
+data are available under the GPL license, and the art, sound and
+documentation are available under CC-BY-SA. In short, we consider
+0 A.D. an educational celebration of game development and ancient
+history.
+
+WWW: https://play0ad.com/
diff --git a/games/0ad/pkg-plist b/games/0ad/pkg-plist
new file mode 100644
index 000000000000..75d3e4e5b2c5
--- /dev/null
+++ b/games/0ad/pkg-plist
@@ -0,0 +1,12 @@
+bin/pyrogenesis
+bin/0ad
+bin/ActorEditor
+lib/0ad/libAtlasUI.so
+lib/0ad/libCollada.so
+lib/0ad/libmozjs38-ps-release.so
+lib/0ad/libnvcore.so
+lib/0ad/libnvimage.so
+lib/0ad/libnvmath.so
+lib/0ad/libnvtt.so
+share/applications/0ad.desktop
+share/pixmaps/0ad.png
diff --git a/games/Makefile b/games/Makefile
index 46bb221398c8..f13fa6103bd4 100644
--- a/games/Makefile
+++ b/games/Makefile
@@ -3,6 +3,7 @@
COMMENT = Games and related software
+ SUBDIR += 0ad
SUBDIR += 0verkill
SUBDIR += 2048
SUBDIR += 2048-qt
@@ -183,6 +184,7 @@
SUBDIR += d2x
SUBDIR += dMagnetic
SUBDIR += dangen
+ SUBDIR += dangerdeep
SUBDIR += dangerdeep-data
SUBDIR += darkplaces
SUBDIR += defendguin
@@ -289,6 +291,7 @@
SUBDIR += freeminer
SUBDIR += freeminer-default
SUBDIR += freeorion
+ SUBDIR += freera
SUBDIR += freesweep
SUBDIR += freesynd
SUBDIR += freetennis
@@ -316,6 +319,7 @@
SUBDIR += glest-data
SUBDIR += glightoff
SUBDIR += glmaze
+ SUBDIR += glob2
SUBDIR += glsfcave
SUBDIR += gltron
SUBDIR += gmastermind
@@ -589,6 +593,7 @@
SUBDIR += mancala
SUBDIR += mangband
SUBDIR += mari0
+ SUBDIR += marsnomercy
SUBDIR += masterserver
SUBDIR += maxr
SUBDIR += meandmyshadow
@@ -637,6 +642,7 @@
SUBDIR += nethack36
SUBDIR += nethack36-nox11
SUBDIR += netherearth
+ SUBDIR += netpanzer
SUBDIR += netradiant
SUBDIR += netrek-BRMH-bin
SUBDIR += netrek-client-cow
@@ -739,6 +745,7 @@
SUBDIR += phlipple
SUBDIR += picmi
SUBDIR += pinball
+ SUBDIR += pingus
SUBDIR += pink-pony
SUBDIR += pioneer
SUBDIR += pioneers
@@ -821,6 +828,7 @@
SUBDIR += redorblack
SUBDIR += regoth
SUBDIR += reminiscence
+ SUBDIR += renpy
SUBDIR += rescue
SUBDIR += residualvm
SUBDIR += retroarch
diff --git a/games/dangerdeep/Makefile b/games/dangerdeep/Makefile
new file mode 100644
index 000000000000..b8250b4c9282
--- /dev/null
+++ b/games/dangerdeep/Makefile
@@ -0,0 +1,56 @@
+# Created by: Jose Alonso Cardenas Marquez <acardenas@bsd.org.pe>
+# $FreeBSD$
+
+PORTNAME= dangerdeep
+PORTVERSION= 0.3.0
+PORTREVISION= 15
+CATEGORIES= games
+MASTER_SITES= SF/${PORTNAME}/danger_from_the_deep-src/${PORTVERSION}
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Open source World War II German submarine simulation
+
+LIB_DEPENDS= libfftw3.so:math/fftw3
+RUN_DEPENDS= dangerdeep-data>0:games/dangerdeep-data
+
+USES= compiler gl scons:python2 sdl
+USE_GL= yes
+USE_SDL= sdl mixer image net
+
+CXXFLAGS+= ${CXXFLAGS_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_clang= -Wno-c++11-narrowing
+MAKE_ARGS= installbindir=${PREFIX}/bin installdatadir=${DATADIR}
+MAKE_ENV= X11BASE=${LOCALBASE}
+
+PLIST_FILES= bin/dangerdeep bin/crosssection bin/damagemodel \
+ bin/oceantest bin/portal bin/viewmodel \
+ man/man6/dangerdeep.6.gz
+
+PORTDOCS= CREDITS README
+
+OPTIONS_DEFINE= DOCS
+
+.include <bsd.port.pre.mk>
+
+.if defined(PACKAGE_BUILDING)
+MAKE_ARGS+= usex86sse=-1 # disable MMX/SSE on the build cluster
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/share/games/dangerdeep|${DATADIR}|; \
+ s|Linux|"Danger from the Deep"|' ${WRKSRC}/doc/man/dangerdeep.6
+ @${REINPLACE_CMD} -e 's|/usr/X11BASE|${LOCALBASE}|g' \
+ ${WRKSRC}/SConstruct
+
+do-install:
+ @cd ${WRKSRC}/build/freebsd && \
+ ${INSTALL_PROGRAM} dangerdeep crosssection damagemodel oceantest \
+ portal viewmodel ${STAGEDIR}${PREFIX}/bin
+
+ ${INSTALL_MAN} ${WRKSRC}/doc/man/dangerdeep.6 ${STAGEDIR}${PREFIX}/man/man6
+ ${GZIP_CMD} ${STAGEDIR}${PREFIX}/man/man6/dangerdeep.6
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.post.mk>
diff --git a/games/dangerdeep/distinfo b/games/dangerdeep/distinfo
new file mode 100644
index 000000000000..c89dfb7286ee
--- /dev/null
+++ b/games/dangerdeep/distinfo
@@ -0,0 +1,2 @@
+SHA256 (dangerdeep/dangerdeep-0.3.0.tar.gz) = bdab6b9b1c2b5f8e618f5c346965ec1f48c9edc9bff1d4f5ff7c8d235464283f
+SIZE (dangerdeep/dangerdeep-0.3.0.tar.gz) = 1100972
diff --git a/games/dangerdeep/files/patch-SConstruct b/games/dangerdeep/files/patch-SConstruct
new file mode 100644
index 000000000000..b64410a3f260
--- /dev/null
+++ b/games/dangerdeep/files/patch-SConstruct
@@ -0,0 +1,104 @@
+--- SConstruct.orig 2007-06-11 18:29:13 UTC
++++ SConstruct
+@@ -46,7 +46,7 @@ if sys.platform == 'win32':
+ env.Append(CPPDEFINES = ['USE_SSE'])
+ print 'Using x86 SSE/MMX optimizations with GCC intrinsics.'
+ datadir = './data' # use slashes as separator always. C/C++ want it so.
+- build_dir = 'win32'
++ variant_dir = 'win32'
+ elif sys.platform == 'darwin':
+ print "Compiling for MacOSX"
+ env = Environment(ENV = os.environ)
+@@ -57,12 +57,12 @@ elif sys.platform == 'darwin':
+ env.Append(CCFLAGS = '-Wall -g -O2 `sdl-config --cflags`')
+ env.Append(LINKFLAGS = '-F/System/Library/Frameworks -framework AGL -framework OpenGL -framework GLUT -framework Cocoa -framework SDL -framework SDL_image -framework SDL_mixer -framework SDL_net')
+ datadir = './data' # use slashes as separator always. C/C++ want it so.
+- build_dir = 'macosx'
++ variant_dir = 'macosx'
+ osspecificsrc = Split("""Mac/SDLMain.m""")
+ if (debug == 1):
+ env.Append(CCFLAGS = '-g')
+ env.Append(CPPDEFINES = ['DEBUG'])
+-elif (sys.platform == 'freebsd5') or (sys.platform == 'freebsd6') or (sys.platform == 'freebsd7'):
++elif sys.platform.startswith('freebsd'):
+ print "Compiling for FreeBSD Environment"
+ env = Environment(ENV = os.environ)
+ LOCALBASE = os.environ['LOCALBASE']
+@@ -70,7 +70,7 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ SDL_CONFIG = os.environ['SDL_CONFIG']
+ env.Replace(CC = os.environ['CC'])
+ env.Replace(CXX = os.environ['CXX'])
+- env.Append(CPPPATH = [LOCALBASE + '/include', LOCALBASE + '/include/SDL11', X11BASE + '/include', X11BASE + '/include/GL'])
++ env.Append(CPPPATH = [LOCALBASE + '/include', LOCALBASE + '/include/SDL', X11BASE + '/include', X11BASE + '/include/GL'])
+ libpath = [LOCALBASE + '/lib', X11BASE + '/lib']
+ gllibs = ['GL', 'GLU']
+ sdllibs = ['SDL_image']
+@@ -79,7 +79,7 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ cpuinfol = cpuinfof.readlines()
+ mmxsupported = False
+ ssesupported = False
+- for i in cpuinfol:
++ for i in cpuinfol:
+ if i == '1\n':
+ mmxsupported = True
+ ssesupported = True
+@@ -91,14 +91,15 @@ elif (sys.platform == 'freebsd5') or (sys.platform ==
+ osspecificsrc += []
+ print 'Using x86 SSE/MMX optimizations.'
+
+- env.Replace(CCFLAGS = os.environ['CFLAGS'])
++ env.Replace(CCFLAGS = os.environ['CFLAGS'])
+ if (debug == 1):
+ env.Append(CCFLAGS = '-g')
+ env.Append(CPPDEFINES = ['DEBUG'])
+- env.Replace(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
+- env.Append(LINKFLAGS = '`' + SDL_CONFIG + ' --libs`')
+- datadir = '/usr/local/share/dangerdeep'
+- build_dir = 'freebsd'
++ env.Replace(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
++ env.Append(LINKFLAGS = '`' + SDL_CONFIG + ' --libs`')
++ env.Append(LIBPATH = [LOCALBASE + '/lib', X11BASE + '/lib'])
++ datadir = '/usr/local/share/dangerdeep'
++ variant_dir = 'freebsd'
+
+ if (os.system('grep glBindProgram ' + X11BASE + '/include/GL/gl*.h > /dev/null') == 0):
+ gllibdirs = [X11BASE + '/lib/', '/usr/lib/', LOCALBASE + '/lib/']
+@@ -179,7 +180,7 @@ else:
+ print 'Using x86 SSE/MMX optimizations with GCC intrinsics.'
+ env.Append(CCFLAGS = ccflags)
+ datadir = '/usr/local/share/dangerdeep'
+- build_dir = 'linux'
++ variant_dir = 'linux'
+ # check for broken libGL, ignore undefined symbols then
+ if (os.system('grep glBindProgram /usr/include/GL/gl*.h > /dev/null') == 0):
+ gllibdirs = ['/usr/X11R6/lib/', '/usr/lib/', '/usr/local/lib/']
+@@ -208,7 +209,7 @@ if ARGUMENTS.get('installbindir', 0):
+ print 'Install binary path: ' + installbindir
+ print 'Using data dir: ' + datadir
+
+-target_dir = '#build' + os.sep + build_dir
++target_dir = '#build' + os.sep + variant_dir
+ source_base_dir = 'src'
+
+ ################ configure
+@@ -273,9 +274,9 @@ f.close()
+
+ Export('env', 'gfxlibs', 'alllibs', 'installbindir', 'datadir', 'version', 'osspecificsrc')
+
+-SConscript(source_base_dir + os.sep + 'SConscript', build_dir = target_dir, duplicate = 0)
++SConscript(source_base_dir + os.sep + 'SConscript', variant_dir = target_dir, duplicate = 0)
+
+-BuildDir(target_dir, source_base_dir, duplicate=0)
++VariantDir(target_dir, source_base_dir, duplicate=0)
+
+ ############### Helper functions
+ def findCVS(basedir):
+@@ -304,7 +305,7 @@ def findCVS(basedir):
+
+ ############### option so that "scons tarball" builds a tarball of source
+ # tar building works only on linux
+-if (( build_dir == 'linux' ) or ( build_dir == 'freebsd' )) and (os.path.isdir('./CVS')):
++if (( variant_dir == 'linux' ) or ( variant_dir == 'freebsd' )) and (os.path.isdir('./CVS')):
+ basetarfilename = 'dangerdeep-' + version
+ os.system('rm -rf ' + basetarfilename)
+ os.system('ln -s . ' + basetarfilename)
diff --git a/games/dangerdeep/files/patch-src__condvar.h b/games/dangerdeep/files/patch-src__condvar.h
new file mode 100644
index 000000000000..06f52b5bea5f
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__condvar.h
@@ -0,0 +1,18 @@
+--- ./src/condvar.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/condvar.h 2014-08-11 09:56:15.000000000 -0400
+@@ -43,13 +43,13 @@
+
+ /// wait on condition
+ ///@param m - mutex to encapsulate waiting condition
+- void wait(mutex& m);
++ void wait(::mutex& m);
+
+ /// wait on condition with timeout
+ ///@param m - mutex to encapsulate waiting condition
+ ///@param ms - timeout value in milliseconds
+ ///@return true when woken up by signal, false on timeout
+- bool timed_wait(mutex& m, unsigned ms);
++ bool timed_wait(::mutex& m, unsigned ms);
+
+ /// send signal to threads that are waiting on the condition.
+ ///@note Note that before sending the signal you must make the condition false that would
diff --git a/games/dangerdeep/files/patch-src__faulthandler.h b/games/dangerdeep/files/patch-src__faulthandler.h
new file mode 100644
index 000000000000..ee8b4ab008d8
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__faulthandler.h
@@ -0,0 +1,10 @@
+--- ./src/faulthandler.h.orig 2007-06-11 14:29:30.000000000 -0400
++++ ./src/faulthandler.h 2014-08-11 10:17:47.000000000 -0400
+@@ -46,6 +46,7 @@
+ #include <execinfo.h>
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <unistd.h>
+ #include <cxxabi.h> // Needed for __cxa_demangle
+ #include <signal.h>
+ #include <string>
diff --git a/games/dangerdeep/files/patch-src__mutex.h b/games/dangerdeep/files/patch-src__mutex.h
new file mode 100644
index 000000000000..e769fdb33b8d
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__mutex.h
@@ -0,0 +1,20 @@
+--- ./src/mutex.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/mutex.h 2014-08-11 09:59:15.000000000 -0400
+@@ -58,7 +58,7 @@
+ class mutex_locker
+ {
+ protected:
+- mutex& mymutex;
++ ::mutex& mymutex;
+ private:
+ mutex_locker();
+ mutex_locker(const mutex_locker& );
+@@ -67,7 +67,7 @@
+ /// create mutex locker
+ ///@param mtx - mutex to lock
+ ///@note will instantly lock the mutex that was given as parameter
+- mutex_locker(mutex& mtx) : mymutex(mtx) { mymutex.lock(); }
++ mutex_locker(::mutex& mtx) : mymutex(mtx) { mymutex.lock(); }
+
+ /// destroy mutex locker
+ ///@note will unlock the mutex that was given to the constructor
diff --git a/games/dangerdeep/files/patch-src__subsim.cpp b/games/dangerdeep/files/patch-src__subsim.cpp
new file mode 100644
index 000000000000..e8155a51c6a4
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__subsim.cpp
@@ -0,0 +1,19 @@
+--- src/subsim.cpp.orig 2007-06-11 15:16:23 UTC
++++ src/subsim.cpp
+@@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ #else
+ #include "oglext/OglExt.h"
+ #endif
++#include <unistd.h>
+ #include <glu.h>
+ #include <SDL.h>
+ #include <SDL_net.h>
+@@ -1735,7 +1736,7 @@ int mymain(list<string>& args)
+ glEnable(GL_LIGHT0);
+
+ // create and start thread for music handling.
+- thread::auto_ptr<music> mmusic(new music(use_sound));
++ ::thread::auto_ptr<music> mmusic(new music(use_sound));
+ mmusic->start();
+
+ reset_loading_screen();
diff --git a/games/dangerdeep/files/patch-src__thread.h b/games/dangerdeep/files/patch-src__thread.h
new file mode 100644
index 000000000000..ece066ec7311
--- /dev/null
+++ b/games/dangerdeep/files/patch-src__thread.h
@@ -0,0 +1,19 @@
+--- ./src/thread.h.orig 2007-06-11 11:16:23.000000000 -0400
++++ ./src/thread.h 2014-08-11 10:14:00.000000000 -0400
+@@ -25,6 +25,7 @@
+
+ #include "condvar.h"
+ #include <stdexcept>
++#include <string>
+ #include <stdint.h>
+
+ /// base class for threads.
+@@ -47,7 +48,7 @@
+ struct SDL_Thread* thread_id;
+ bool thread_abort_request;
+ thread_state_t thread_state;
+- mutex thread_state_mutex;
++ ::mutex thread_state_mutex;
+ condvar thread_start_cond;
+ std::string thread_error_message; // to pass exception texts via thread boundaries
+
diff --git a/games/dangerdeep/files/patch-src_coastmap.h b/games/dangerdeep/files/patch-src_coastmap.h
new file mode 100644
index 000000000000..b71f6a5a6517
--- /dev/null
+++ b/games/dangerdeep/files/patch-src_coastmap.h
@@ -0,0 +1,20 @@
+--- src/coastmap.h.orig 2020-03-29 09:04:12 UTC
++++ src/coastmap.h
+@@ -151,7 +151,7 @@ class coastmap
+ void process_coastline(int x, int y);
+ void process_segment(int x, int y);
+
+- class worker : public thread
++ class worker : public ::thread
+ {
+ coastmap& cm;
+ public:
+@@ -163,7 +163,7 @@ class coastmap
+ }
+ };
+
+- thread::auto_ptr<worker> myworker;
++ ::thread::auto_ptr<worker> myworker;
+ void construction_threaded();
+
+ public:
diff --git a/games/dangerdeep/files/patch-src_shader.cpp b/games/dangerdeep/files/patch-src_shader.cpp
new file mode 100644
index 000000000000..77a90990d7a9
--- /dev/null
+++ b/games/dangerdeep/files/patch-src_shader.cpp
@@ -0,0 +1,26 @@
+compiling failed, log:
+0:2(1): preprocessor error: #version must appear on the first line
+
+--- src/shader.cpp.orig 2020-03-29 17:02:18 UTC
++++ src/shader.cpp
+@@ -74,6 +74,8 @@ glsl_shader::glsl_shader(const string& filename, type
+ // the program as string
+ string prg;
+
++ prg += "#version 110\n";
++
+ // add defines to top of list for preprocessor
+ for (defines_list::const_iterator it = dl.begin(); it != dl.end(); ++it) {
+ prg += string("#define ") + *it + "\n";
+@@ -83,7 +85,10 @@ glsl_shader::glsl_shader(const string& filename, type
+ while (!ifprg.eof()) {
+ string s;
+ getline(ifprg, s);
+- prg += s + "\n";
++ string prefix("#version");
++ if (0 != s.compare(0, prefix.size(), prefix)) {
++ prg += s + "\n";
++ }
+ }
+
+ const char* prg_cstr = prg.c_str();
diff --git a/games/dangerdeep/pkg-descr b/games/dangerdeep/pkg-descr
new file mode 100644
index 000000000000..5d14b30a85b7
--- /dev/null
+++ b/games/dangerdeep/pkg-descr
@@ -0,0 +1,6 @@
+Danger from the deep (aka dangerdeep) is a Free / Open Source World War II
+German submarine simulation. It is currently available for FreeBSD, Linux/i386
+and Windows, but since it uses SDL/OpenGL it should be portable to other
+operating systems or platforms.
+
+WWW: http://dangerdeep.sourceforge.net/
diff --git a/games/freera/Makefile b/games/freera/Makefile
new file mode 100644
index 000000000000..1d5b5a62a984
--- /dev/null
+++ b/games/freera/Makefile
@@ -0,0 +1,41 @@
+# Created by: Dmitry Marakasov <amdmi3@amdmi3.ru>
+# $FreeBSD$
+
+PORTNAME= freera
+PORTVERSION= 080203
+PORTREVISION= 8
+CATEGORIES= games
+MASTER_SITES= SF/${PORTNAME}/${PORTVERSION}%20${PORTNAME}%2B%2B/0.47%20beta
+DISTNAME= ${PORTVERSION}_freera++_src
+
+MAINTAINER= amdmi3@FreeBSD.org
+COMMENT= Westwood red alert game engine
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/doc/gpl.txt
+
+USES= compiler:c++11-lang scons:python2 sdl
+USE_SDL= sdl mixer
+
+WRKSRC= ${WRKDIR}/freera++
+
+SUB_FILES= pkg-message
+
+PLIST_FILES= bin/${PORTNAME}
+PORTDATA= *
+PLIST_DIRS= %%DATADIR%%/mix
+
+post-patch:
+ @${MV} ${WRKSRC}/SConstruct ${WRKSRC}/SConstruct.orig
+ @${CP} ${FILESDIR}/SConstruct ${WRKSRC}/
+ @${REINPLACE_CMD} -e 's|data/|${DATADIR}/|' ${WRKSRC}/src/video/renderer.cpp \
+ ${WRKSRC}/src/video/graphicsengine.cpp ${WRKSRC}/src/vfs/vfs.cpp \
+ ${WRKSRC}/data/settings/files.ini
+ @${RM} ${WRKSRC}/data/settings/files.ini.bak
+ @${RM} -r ${WRKSRC}/data/settings/ra/.svn ${WRKSRC}/data/settings/td/.svn
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/freera ${STAGEDIR}${PREFIX}/bin/
+ @cd ${WRKSRC}/data && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}/
+
+.include <bsd.port.mk>
diff --git a/games/freera/distinfo b/games/freera/distinfo
new file mode 100644
index 000000000000..3f5358bd54f8
--- /dev/null
+++ b/games/freera/distinfo
@@ -0,0 +1,2 @@
+SHA256 (080203_freera++_src.tar.gz) = dc75ebcf58398170614a21fa01f09d08f7ef86758473e1c815a680c713c9645e
+SIZE (080203_freera++_src.tar.gz) = 492205
diff --git a/games/freera/files/SConstruct b/games/freera/files/SConstruct
new file mode 100644
index 000000000000..38790806b03e
--- /dev/null
+++ b/games/freera/files/SConstruct
@@ -0,0 +1,27 @@
+#!/usr/bin/scons
+
+from os import environ
+from glob import glob
+
+# Source files
+source = ["src/freera.cpp"]
+source += glob("src/*/*.cpp")
+source += glob("src/*/*/*.cpp")
+source += glob("src/lua/*.c")
+# This is blatent overkill
+exclude = ["src/misc/fibheap.cpp"]
+source = filter(lambda x: x not in exclude, source)
+
+env = Environment( CPPPATH = ["#/src/include", "#/src/include/lua"],
+ LIBS = [ "SDL_mixer"], ENV = environ )
+
+for key in [ 'CC', 'CCFLAGS', 'CXX', 'CXXFLAGS' ]:
+ if environ.has_key(key):
+ env.Replace( **{key: environ[key].split(' ')} )
+
+env.Append( CCFLAGS = [ "-Wall", "-Wconversion", "-Wno-unused-parameter" ],
+ CXXFLAGS = [ "-Wall", "-Wconversion", "-Wno-unused-parameter" ] )
+
+env.ParseConfig(environ["SDL_CONFIG"] + " --cflags --libs")
+
+env.Program(target = "freera", source = source)
diff --git a/games/freera/files/patch-src-freera.cpp b/games/freera/files/patch-src-freera.cpp
new file mode 100644
index 000000000000..3ce38d29bb3f
--- /dev/null
+++ b/games/freera/files/patch-src-freera.cpp
@@ -0,0 +1,13 @@
+--- src/freera.cpp.orig 2007-04-20 00:35:26.000000000 +0400
++++ src/freera.cpp 2008-02-05 02:42:33.000000000 +0300
+@@ -58,8 +58,8 @@
+ }
+
+ const string& binpath = determineBinaryLocation(argv[0]);
+- string lf(binpath);
+- lf += "/freera.log";
++ string lf(getenv("HOME"));
++ lf += "/.freera.log";
+
+ VFS_PreInit(binpath.c_str());
+ // Log level is so that only errors are shown on stdout by default
diff --git a/games/freera/files/patch-src_game_loadmap.cpp b/games/freera/files/patch-src_game_loadmap.cpp
new file mode 100644
index 000000000000..c5366d63581b
--- /dev/null
+++ b/games/freera/files/patch-src_game_loadmap.cpp
@@ -0,0 +1,11 @@
+--- src/game/loadmap.cpp.orig 2008-01-30 22:37:44 UTC
++++ src/game/loadmap.cpp
+@@ -63,7 +63,7 @@ std::ostringstream TempString;
+ throw LoadMapError();
+ }
+
+- if (missionData.player != '\0')
++ if (missionData.player != nullptr)
+ printf ("%s line %i: Player = %s\n", __FILE__, __LINE__, missionData.player);
+
+ if (gamemode == GAME_MODE_SINGLE_PLAYER){
diff --git a/games/freera/files/pkg-message.in b/games/freera/files/pkg-message.in
new file mode 100644
index 000000000000..92960a8aa224
--- /dev/null
+++ b/games/freera/files/pkg-message.in
@@ -0,0 +1,14 @@
+[
+{ type: install
+ message: <<EOM
+FreeRA requires original .mix files from Red Alert. Copy those files from
+Red Alert CD's to %%DATADIR%%/mix/ directory:
+
+ main.mix
+ redalert.mix
+
+PS. Both files can be found on either Red Alert CD. Both CDs have the
+ maps for both campaigns but only the videos for one.
+EOM
+}
+]
diff --git a/games/freera/pkg-descr b/games/freera/pkg-descr
new file mode 100644
index 000000000000..f12fb4807b7f
--- /dev/null
+++ b/games/freera/pkg-descr
@@ -0,0 +1,6 @@
+This is a rebuild of the (westwood) red alert game engine (based
+on FreeCNC). It is a real time strategy game. To play the game with
+this engine you need the original game (mix files). The only game
+supported is red alert 1 ;)
+
+WWW: http://freera.sourceforge.net/
diff --git a/games/glob2/Makefile b/games/glob2/Makefile
new file mode 100644
index 000000000000..0cd514a64b7e
--- /dev/null
+++ b/games/glob2/Makefile
@@ -0,0 +1,80 @@
+# Created by: thierry@pompo.net
+# $FreeBSD$
+
+PORTNAME= glob2
+PORTVERSION= 0.9.4.4
+PORTREVISION= 29
+CATEGORIES= games
+MASTER_SITES= SAVANNAH/${PORTNAME}/${PORTVERSION:R}/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Globulation 2, free and innovative strategy game
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libvorbis.so:audio/libvorbis \
+ libspeex.so:audio/speex \
+ libfribidi.so:converters/fribidi \
+ libboost_thread.so:devel/boost-libs \
+ libfreetype.so:print/freetype2
+
+OPTIONS_DEFINE= DOCS PORTAUDIO
+
+USES= compiler:c++11-lang gl gnome pkgconfig scons:python2 sdl
+USE_SDL= image net sdl ttf
+USE_GL= gl glu
+MAKE_ARGS= CCFLAGS="${CFLAGS}" \
+ LINKFLAGS="${LDFLAGS}" \
+ BINDIR="${STAGEDIR}${PREFIX}/bin" \
+ INSTALLDIR="${STAGEDIR}${PREFIX}/share" \
+ DATADIR="${DATADIR}"
+INSTALLS_ICONS= yes
+
+CFLAGS+= -I${LOCALBASE}/include -Wno-return-type
+LDFLAGS+= -lpthread -L${LOCALBASE}/lib
+
+PORTDOCS= README
+SUB_FILES= pkg-message
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MPORTAUDIO}
+LIB_DEPENDS+= libportaudio.so:audio/portaudio
+MAKE_ARGS+= --portaudio=true
+.else
+MAKE_ARGS+= --portaudio=false
+.endif
+
+pre-configure:
+ ${REINPLACE_CMD} -e \
+ 's|"-g"|""|' \
+ ${WRKSRC}/SConstruct
+ ${REINPLACE_CMD} -e \
+ '/^Icon/s|=.*|=${PORTNAME}|' \
+ ${WRKSRC}/data/${PORTNAME}.desktop
+ ${REINPLACE_CMD} -e \
+ '/(PACKAGE_SOURCE_DIR)/s|^|//|' \
+ ${WRKSRC}/libgag/src/FileManager.cpp
+
+manual-regression-test:
+# Don't enable these tests on pointyhat, they take too long.
+.if defined(MAINTAINER_MODE)
+ (cd ${WRKSRC}/src && ./glob2 -test-games)
+.else
+ (cd ${WRKSRC}/src && ./glob2 -test-games-nox)
+.endif
+
+post-install:
+.for s in 16 24 32 48 64 128
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps
+ (cd ${WRKSRC}/data/icons && ${INSTALL_DATA} glob2-icon-${s}x${s}.png \
+ ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps/${PORTNAME}.png)
+.endfor
+ ${RLN} ${STAGEDIR}${PREFIX}/share/icons/hicolor/48x48/apps/${PORTNAME}.png \
+ ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} README ${STAGEDIR}${DOCSDIR})
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/glob2
+
+.include <bsd.port.mk>
diff --git a/games/glob2/distinfo b/games/glob2/distinfo
new file mode 100644
index 000000000000..aad6c9c01af7
--- /dev/null
+++ b/games/glob2/distinfo
@@ -0,0 +1,2 @@
+SHA256 (glob2-0.9.4.4.tar.gz) = 0f4d898ec6b05ce27b4a12ef242cc26571304b90d2509932a4743c71311314b8
+SIZE (glob2-0.9.4.4.tar.gz) = 11338986
diff --git a/games/glob2/files/patch-SConstruct b/games/glob2/files/patch-SConstruct
new file mode 100644
index 000000000000..4e8789ee9234
--- /dev/null
+++ b/games/glob2/files/patch-SConstruct
@@ -0,0 +1,84 @@
+--- SConstruct.orig 2009-08-30 19:23:30 UTC
++++ SConstruct
+@@ -12,9 +12,11 @@ isLinuxPlatform = sys.platform=='linux2'
+ isDarwinPlatform = sys.platform=='darwin'
+
+
+-def establish_options(env):
+- opts = Options('options_cache.py')
++def establish_variables(env):
++ opts = Variables('variables_cache.py')
++ opts.Add("CCFLAGS", "Manually add to the CCFLAGS", "")
+ opts.Add("CXXFLAGS", "Manually add to the CXXFLAGS", "-g")
++ opts.Add("LIBPATH", "Manually add to the LIBPATH", "")
+ opts.Add("LINKFLAGS", "Manually add to the LINKFLAGS", "-g")
+ if isDarwinPlatform:
+ opts.Add(PathOption("INSTALLDIR", "Installation Directory", "./"))
+@@ -22,14 +24,14 @@ def establish_options(env):
+ opts.Add("INSTALLDIR", "Installation Directory", "/usr/local/share")
+ opts.Add("BINDIR", "Binary Installation Directory", "/usr/local/bin")
+ opts.Add("DATADIR", "Directory where data will be put, set to the same as INSTALLDIR", "/usr/local/share")
+- opts.Add(BoolOption("release", "Build for release", 0))
+- opts.Add(BoolOption("profile", "Build with profiling on", 0))
+- opts.Add(BoolOption("mingw", "Build with mingw enabled if not auto-detected", 0))
+- opts.Add(BoolOption("server", "Build only the YOG server, excluding the game and any GUI/sound components", 0))
++ opts.Add(BoolVariable("release", "Build for release", 0))
++ opts.Add(BoolVariable("profile", "Build with profiling on", 0))
++ opts.Add(BoolVariable("mingw", "Build with mingw enabled if not auto-detected", 0))
++ opts.Add(BoolVariable("server", "Build only the YOG server, excluding the game and any GUI/sound components", 0))
+ opts.Add("font", "Build the game using an alternative font placed in the data/font folder", "sans.ttf")
+ Help(opts.GenerateHelpText(env))
+ opts.Update(env)
+- opts.Save("options_cache.py", env)
++ opts.Save("variables_cache.py", env)
+
+
+ class Configuration:
+@@ -111,14 +113,17 @@ def configure(env):
+ missing.append("zlib")
+
+ boost_thread = ''
++ boost_system = ''
+ if conf.CheckLib("boost_thread") and conf.CheckCXXHeader("boost/thread/thread.hpp"):
+ boost_thread="boost_thread"
++ boost_system="boost_system"
+ elif conf.CheckLib("boost_thread-mt") and conf.CheckCXXHeader("boost/thread/thread.hpp"):
+ boost_thread="boost_thread-mt"
+ else:
+ print "Could not find libboost_thread or libboost_thread-mt or boost/thread/thread.hpp"
+ missing.append("libboost_thread")
+ env.Append(LIBS=[boost_thread])
++ env.Append(LIBS=[boost_system])
+
+ boost_date_time = ''
+ if conf.CheckLib("boost_date_time") and conf.CheckCXXHeader("boost/date_time/posix_time/posix_time.hpp"):
+@@ -186,7 +191,7 @@ def configure(env):
+ env.Append(LIBS=['fribidi'])
+
+ #Do checks for portaudio
+- if conf.CheckLib('portaudio') and conf.CheckCXXHeader('portaudio.h'):
++ if conf.CheckLib('portaudio2') and conf.CheckCXXHeader('portaudio.h'):
+ if env['mingw'] or isWindowsPlatform:
+ print "--------"
+ print "NOTE: It appears you are compiling under Windows. At this stage, PortAudio crashes Globulation 2 when voice chat is used."
+@@ -194,9 +199,9 @@ def configure(env):
+ print "--------"
+ else:
+ if GetOption('portaudio'):
+- print "trying to use portaudio"
++ print "trying to use portaudio2"
+ configfile.add("HAVE_PORTAUDIO ", "Defined when Port Audio support is present and compiled")
+- env.Append(LIBS=['portaudio'])
++ env.Append(LIBS=['portaudio2'])
+ else:
+ print " no portaudio"
+ print " no portaudio - although portaudio was found to be installed, you have "
+@@ -236,7 +241,7 @@ def main():
+ Exit(1)
+
+ env["VERSION"] = "0.9.4.4"
+- establish_options(env)
++ establish_variables(env)
+ #Add the paths to important mingw libraries
+ if env['mingw'] or isWindowsPlatform:
+ env.Append(LIBPATH=["C:/msys/1.0/local/lib", "C:/msys/1.0/lib"])
diff --git a/games/glob2/files/patch-boost-1.69 b/games/glob2/files/patch-boost-1.69
new file mode 100644
index 000000000000..2b12ddb3dbac
--- /dev/null
+++ b/games/glob2/files/patch-boost-1.69
@@ -0,0 +1,17 @@
+After https://github.com/boostorg/logic/commit/23cd89d4c80f build fails:
+
+src/AIEcho.cpp:4390:9: error: no viable conversion from returned value of type 'boost::logic::tribool' to function return type 'bool'
+ return is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site;
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+--- src/AIEcho.cpp.orig 2009-08-29 20:39:05 UTC
++++ src/AIEcho.cpp
+@@ -4387,7 +4387,7 @@ bool enemy_building_iterator::operator!=(const enemy_b
+ {
+ if(is_end && rhs.is_end)
+ return false;
+- return is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site;
++ return bool(is_end!=rhs.is_end || team!=rhs.team || building_type!=rhs.building_type || level!=rhs.level || construction_site!=rhs.construction_site);
+ }
+
+
diff --git a/games/glob2/files/patch-data__SConscript b/games/glob2/files/patch-data__SConscript
new file mode 100644
index 000000000000..3959d9adf2c6
--- /dev/null
+++ b/games/glob2/files/patch-data__SConscript
@@ -0,0 +1,9 @@
+--- ./data/SConscript.orig 2009-06-14 12:11:30.000000000 +0200
++++ ./data/SConscript 2013-10-28 01:26:26.000000000 +0100
+@@ -19,6 +19,5 @@
+ SConscript("fonts/SConscript")
+ SConscript("gfx/SConscript")
+ SConscript("gui/SConscript")
+-SConscript("icons/SConscript")
+ SConscript("zik/SConscript")
+
diff --git a/games/glob2/files/patch-src_EditorMainMenu.cpp b/games/glob2/files/patch-src_EditorMainMenu.cpp
new file mode 100644
index 000000000000..da8b9a3ba5a0
--- /dev/null
+++ b/games/glob2/files/patch-src_EditorMainMenu.cpp
@@ -0,0 +1,11 @@
+--- src/EditorMainMenu.cpp.orig 2018-08-26 04:04:18 UTC
++++ src/EditorMainMenu.cpp
+@@ -90,7 +90,7 @@ void EditorMainMenu::onAction(Widget *source, Action a
+ }
+ else if (par1==LOADMAP)
+ {
+- ChooseMapScreen chooseMapScreen("maps", "map", false, "games", "game", false);
++ ChooseMapScreen chooseMapScreen("maps", "map", false, "games", "game", NULL);
+ int rc=chooseMapScreen.execute(globalContainer->gfx, 40);
+ if (rc==ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src_LANMenuScreen.cpp b/games/glob2/files/patch-src_LANMenuScreen.cpp
new file mode 100644
index 000000000000..95e4513fe79b
--- /dev/null
+++ b/games/glob2/files/patch-src_LANMenuScreen.cpp
@@ -0,0 +1,11 @@
+--- src/LANMenuScreen.cpp.orig 2018-08-26 04:11:03 UTC
++++ src/LANMenuScreen.cpp
+@@ -62,7 +62,7 @@ void LANMenuScreen::onAction(Widget *source, Action ac
+ }
+ else if(par1 == HOST)
+ {
+- ChooseMapScreen cms("maps", "map", false, "games", "game", false);
++ ChooseMapScreen cms("maps", "map", false, "games", "game", NULL);
+ int rc = cms.execute(globalContainer->gfx, 40);
+ if(rc == ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp b/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp
new file mode 100644
index 000000000000..9d03f470e21f
--- /dev/null
+++ b/games/glob2/files/patch-src_YOGClientLobbyScreen.cpp
@@ -0,0 +1,11 @@
+--- src/YOGClientLobbyScreen.cpp.orig 2018-08-26 04:08:24 UTC
++++ src/YOGClientLobbyScreen.cpp
+@@ -326,7 +326,7 @@ void YOGClientLobbyScreen::playerListUpdated()
+
+ void YOGClientLobbyScreen::hostGame()
+ {
+- ChooseMapScreen cms("maps", "map", false, "games", "game", false);
++ ChooseMapScreen cms("maps", "map", false, "games", "game", NULL);
+ int rc = cms.execute(globalContainer->gfx, 40);
+ if(rc == ChooseMapScreen::OK)
+ {
diff --git a/games/glob2/files/patch-src__ConfigFiles.h b/games/glob2/files/patch-src__ConfigFiles.h
new file mode 100644
index 000000000000..8f1c30ca2069
--- /dev/null
+++ b/games/glob2/files/patch-src__ConfigFiles.h
@@ -0,0 +1,15 @@
+--- ./src/ConfigFiles.h.orig 2009-06-14 12:11:34.000000000 +0200
++++ ./src/ConfigFiles.h 2013-10-28 01:26:26.000000000 +0100
+@@ -178,7 +178,11 @@
+ else
+ {
+ std::cerr << "ConfigVector::get(" << static_cast<unsigned int>(id) << ") : warning : id is not valid, returning default" << std::endl;
+- assert(false);
++ // FreeBSD: patch impoted from glob2's CVS
++ // assert(false);
++ // I commented the assert because it crashed glob2
++ // sometimes, when a building was repaired.
++ // This has to be really fixed!
+ return &defaultEntry;
+ }
+ }
diff --git a/games/glob2/files/patch-src__Game.h b/games/glob2/files/patch-src__Game.h
new file mode 100644
index 000000000000..ed710bb7bad6
--- /dev/null
+++ b/games/glob2/files/patch-src__Game.h
@@ -0,0 +1,36 @@
+--- src/Game.h.orig
++++ src/Game.h
+@@ -82,6 +82,16 @@
+ DRAW_OVERLAY = 0x100,
+ };
+
++ struct BuildProject
++ {
++ int posX;
++ int posY;
++ int teamNumber;
++ int typeNum;
++ int unitWorking;
++ int unitWorkingFuture;
++ };
++
+ /// This method will prepare the game with this mapHeader
+ void setMapHeader(const MapHeader& mapHeader);
+
+@@ -149,16 +159,6 @@
+ BOTTOM_TO_TOP
+ };
+
+- struct BuildProject
+- {
+- int posX;
+- int posY;
+- int teamNumber;
+- int typeNum;
+- int unitWorking;
+- int unitWorkingFuture;
+- };
+-
+ ///Initiates Game
+ void init(GameGUI *gui, MapEdit* edit);
+
diff --git a/games/glob2/files/pkg-message.in b/games/glob2/files/pkg-message.in
new file mode 100644
index 000000000000..95b6f098faac
--- /dev/null
+++ b/games/glob2/files/pkg-message.in
@@ -0,0 +1,20 @@
+[
+{ type: install
+ message: <<EOM
+Globulation 2 has been installed.
+
+You can try to launch it typing
+
+ glob2
+
+Anyway, it will not always work, so it is suggested that you type
+
+ glob2 --help
+
+and read about command lines arguments.
+
+Try to use -G option if you have problems with dri and glx (OpenGL),
+or -m if you have problems with sound, or -C to disable custom cursor.
+EOM
+}
+]
diff --git a/games/glob2/pkg-descr b/games/glob2/pkg-descr
new file mode 100644
index 000000000000..371eb74a2c24
--- /dev/null
+++ b/games/glob2/pkg-descr
@@ -0,0 +1,12 @@
+Globulation 2 is an innovative high quality Real-Time Strategy [RTS],
+which minimizes micro-management by automatically assigning tasks to
+the units. The player has to choose the number of units he wants for
+the different tasks, and the units will do their best to satisfy the
+requests. This allows to manage more units and to focus on the strategy.
+
+It can be played alone, through your Local Area Network [LAN], or through
+Internet thanks to Ysagoon Online Game [YOG], a meta-server. It also
+features a scripting language for versatile gameplay or tutorials and an
+integrated map editor.
+
+WWW: http://globulation2.org/
diff --git a/games/glob2/pkg-plist b/games/glob2/pkg-plist
new file mode 100644
index 000000000000..f3772c10391d
--- /dev/null
+++ b/games/glob2/pkg-plist
@@ -0,0 +1,1746 @@
+bin/glob2
+share/applications/glob2.desktop
+%%DATADIR%%/campaigns/Tutorial_Campaign.txt
+%%DATADIR%%/campaigns/tutorial-part1.map
+%%DATADIR%%/campaigns/tutorial-part2.map
+%%DATADIR%%/campaigns/tutorial-part3.map
+%%DATADIR%%/campaigns/tutorial-part4.map
+%%DATADIR%%/data/authors.txt
+%%DATADIR%%/data/buildings.default.txt
+%%DATADIR%%/data/buildings.txt
+%%DATADIR%%/data/fonts/sans.ttf
+%%DATADIR%%/data/gfx/IntroMN.png
+%%DATADIR%%/data/gfx/area0.png
+%%DATADIR%%/data/gfx/area1.png
+%%DATADIR%%/data/gfx/area10.png
+%%DATADIR%%/data/gfx/area11.png
+%%DATADIR%%/data/gfx/area12.png
+%%DATADIR%%/data/gfx/area13.png
+%%DATADIR%%/data/gfx/area14.png
+%%DATADIR%%/data/gfx/area15.png
+%%DATADIR%%/data/gfx/area16.png
+%%DATADIR%%/data/gfx/area17.png
+%%DATADIR%%/data/gfx/area18.png
+%%DATADIR%%/data/gfx/area19.png
+%%DATADIR%%/data/gfx/area2.png
+%%DATADIR%%/data/gfx/area20.png
+%%DATADIR%%/data/gfx/area21.png
+%%DATADIR%%/data/gfx/area22.png
+%%DATADIR%%/data/gfx/area23.png
+%%DATADIR%%/data/gfx/area3.png
+%%DATADIR%%/data/gfx/area4.png
+%%DATADIR%%/data/gfx/area5.png
+%%DATADIR%%/data/gfx/area6.png
+%%DATADIR%%/data/gfx/area7.png
+%%DATADIR%%/data/gfx/area8.png
+%%DATADIR%%/data/gfx/area9.png
+%%DATADIR%%/data/gfx/barracks0b0.png
+%%DATADIR%%/data/gfx/barracks0b0r.png
+%%DATADIR%%/data/gfx/barracks1b0.png
+%%DATADIR%%/data/gfx/barracks1b0r.png
+%%DATADIR%%/data/gfx/barracks2b0.png
+%%DATADIR%%/data/gfx/barracks2b0r.png
+%%DATADIR%%/data/gfx/black0.png
+%%DATADIR%%/data/gfx/black1.png
+%%DATADIR%%/data/gfx/black10.png
+%%DATADIR%%/data/gfx/black11.png
+%%DATADIR%%/data/gfx/black12.png
+%%DATADIR%%/data/gfx/black13.png
+%%DATADIR%%/data/gfx/black14.png
+%%DATADIR%%/data/gfx/black15.png
+%%DATADIR%%/data/gfx/black2.png
+%%DATADIR%%/data/gfx/black3.png
+%%DATADIR%%/data/gfx/black4.png
+%%DATADIR%%/data/gfx/black5.png
+%%DATADIR%%/data/gfx/black6.png
+%%DATADIR%%/data/gfx/black7.png
+%%DATADIR%%/data/gfx/black8.png
+%%DATADIR%%/data/gfx/black9.png
+%%DATADIR%%/data/gfx/brush0.png
+%%DATADIR%%/data/gfx/brush1.png
+%%DATADIR%%/data/gfx/brush2.png
+%%DATADIR%%/data/gfx/brush3.png
+%%DATADIR%%/data/gfx/brush4.png
+%%DATADIR%%/data/gfx/brush5.png
+%%DATADIR%%/data/gfx/brush6.png
+%%DATADIR%%/data/gfx/brush7.png
+%%DATADIR%%/data/gfx/brush8.png
+%%DATADIR%%/data/gfx/brush9.png
+%%DATADIR%%/data/gfx/buildingsite0.png
+%%DATADIR%%/data/gfx/buildingsite1.png
+%%DATADIR%%/data/gfx/buildingsite2.png
+%%DATADIR%%/data/gfx/buildingsite3.png
+%%DATADIR%%/data/gfx/buildingsite4.png
+%%DATADIR%%/data/gfx/buildingsite5.png
+%%DATADIR%%/data/gfx/bullet0.png
+%%DATADIR%%/data/gfx/bullet1.png
+%%DATADIR%%/data/gfx/clearingflag0r.png
+%%DATADIR%%/data/gfx/cloud0.png
+%%DATADIR%%/data/gfx/cursor/click0r.png
+%%DATADIR%%/data/gfx/cursor/click1r.png
+%%DATADIR%%/data/gfx/cursor/click2r.png
+%%DATADIR%%/data/gfx/cursor/click3r.png
+%%DATADIR%%/data/gfx/cursor/click4r.png
+%%DATADIR%%/data/gfx/cursor/click5r.png
+%%DATADIR%%/data/gfx/cursor/click6r.png
+%%DATADIR%%/data/gfx/cursor/click7r.png
+%%DATADIR%%/data/gfx/cursor/click8r.png
+%%DATADIR%%/data/gfx/cursor/click9r.png
+%%DATADIR%%/data/gfx/cursor/direction_d0r.png
+%%DATADIR%%/data/gfx/cursor/direction_d10r.png
+%%DATADIR%%/data/gfx/cursor/direction_d11r.png
+%%DATADIR%%/data/gfx/cursor/direction_d12r.png
+%%DATADIR%%/data/gfx/cursor/direction_d13r.png
+%%DATADIR%%/data/gfx/cursor/direction_d14r.png
+%%DATADIR%%/data/gfx/cursor/direction_d15r.png
+%%DATADIR%%/data/gfx/cursor/direction_d16r.png
+%%DATADIR%%/data/gfx/cursor/direction_d17r.png
+%%DATADIR%%/data/gfx/cursor/direction_d18r.png
+%%DATADIR%%/data/gfx/cursor/direction_d19r.png
+%%DATADIR%%/data/gfx/cursor/direction_d1r.png
+%%DATADIR%%/data/gfx/cursor/direction_d2r.png
+%%DATADIR%%/data/gfx/cursor/direction_d3r.png
+%%DATADIR%%/data/gfx/cursor/direction_d4r.png
+%%DATADIR%%/data/gfx/cursor/direction_d5r.png
+%%DATADIR%%/data/gfx/cursor/direction_d6r.png
+%%DATADIR%%/data/gfx/cursor/direction_d7r.png
+%%DATADIR%%/data/gfx/cursor/direction_d8r.png
+%%DATADIR%%/data/gfx/cursor/direction_d9r.png
+%%DATADIR%%/data/gfx/cursor/direction_l0r.png
+%%DATADIR%%/data/gfx/cursor/direction_l10r.png
+%%DATADIR%%/data/gfx/cursor/direction_l11r.png
+%%DATADIR%%/data/gfx/cursor/direction_l12r.png
+%%DATADIR%%/data/gfx/cursor/direction_l13r.png
+%%DATADIR%%/data/gfx/cursor/direction_l14r.png
+%%DATADIR%%/data/gfx/cursor/direction_l15r.png
+%%DATADIR%%/data/gfx/cursor/direction_l16r.png
+%%DATADIR%%/data/gfx/cursor/direction_l17r.png
+%%DATADIR%%/data/gfx/cursor/direction_l18r.png
+%%DATADIR%%/data/gfx/cursor/direction_l19r.png
+%%DATADIR%%/data/gfx/cursor/direction_l1r.png
+%%DATADIR%%/data/gfx/cursor/direction_l2r.png
+%%DATADIR%%/data/gfx/cursor/direction_l3r.png
+%%DATADIR%%/data/gfx/cursor/direction_l4r.png
+%%DATADIR%%/data/gfx/cursor/direction_l5r.png
+%%DATADIR%%/data/gfx/cursor/direction_l6r.png
+%%DATADIR%%/data/gfx/cursor/direction_l7r.png
+%%DATADIR%%/data/gfx/cursor/direction_l8r.png
+%%DATADIR%%/data/gfx/cursor/direction_l9r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld0r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld1r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld2r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld3r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld4r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld5r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld6r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld7r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld8r.png
+%%DATADIR%%/data/gfx/cursor/direction_ld9r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu0r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu1r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu2r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu3r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu4r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu5r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu6r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu7r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu8r.png
+%%DATADIR%%/data/gfx/cursor/direction_lu9r.png
+%%DATADIR%%/data/gfx/cursor/direction_r0r.png
+%%DATADIR%%/data/gfx/cursor/direction_r10r.png
+%%DATADIR%%/data/gfx/cursor/direction_r11r.png
+%%DATADIR%%/data/gfx/cursor/direction_r12r.png
+%%DATADIR%%/data/gfx/cursor/direction_r13r.png
+%%DATADIR%%/data/gfx/cursor/direction_r14r.png
+%%DATADIR%%/data/gfx/cursor/direction_r15r.png
+%%DATADIR%%/data/gfx/cursor/direction_r16r.png
+%%DATADIR%%/data/gfx/cursor/direction_r17r.png
+%%DATADIR%%/data/gfx/cursor/direction_r18r.png
+%%DATADIR%%/data/gfx/cursor/direction_r19r.png
+%%DATADIR%%/data/gfx/cursor/direction_r1r.png
+%%DATADIR%%/data/gfx/cursor/direction_r2r.png
+%%DATADIR%%/data/gfx/cursor/direction_r3r.png
+%%DATADIR%%/data/gfx/cursor/direction_r4r.png
+%%DATADIR%%/data/gfx/cursor/direction_r5r.png
+%%DATADIR%%/data/gfx/cursor/direction_r6r.png
+%%DATADIR%%/data/gfx/cursor/direction_r7r.png
+%%DATADIR%%/data/gfx/cursor/direction_r8r.png
+%%DATADIR%%/data/gfx/cursor/direction_r9r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd0r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd1r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd2r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd3r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd4r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd5r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd6r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd7r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd8r.png
+%%DATADIR%%/data/gfx/cursor/direction_rd9r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru0r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru1r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru2r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru3r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru4r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru5r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru6r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru7r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru8r.png
+%%DATADIR%%/data/gfx/cursor/direction_ru9r.png
+%%DATADIR%%/data/gfx/cursor/direction_u0r.png
+%%DATADIR%%/data/gfx/cursor/direction_u10r.png
+%%DATADIR%%/data/gfx/cursor/direction_u11r.png
+%%DATADIR%%/data/gfx/cursor/direction_u12r.png
+%%DATADIR%%/data/gfx/cursor/direction_u13r.png
+%%DATADIR%%/data/gfx/cursor/direction_u14r.png
+%%DATADIR%%/data/gfx/cursor/direction_u15r.png
+%%DATADIR%%/data/gfx/cursor/direction_u16r.png
+%%DATADIR%%/data/gfx/cursor/direction_u17r.png
+%%DATADIR%%/data/gfx/cursor/direction_u18r.png
+%%DATADIR%%/data/gfx/cursor/direction_u19r.png
+%%DATADIR%%/data/gfx/cursor/direction_u1r.png
+%%DATADIR%%/data/gfx/cursor/direction_u2r.png
+%%DATADIR%%/data/gfx/cursor/direction_u3r.png
+%%DATADIR%%/data/gfx/cursor/direction_u4r.png
+%%DATADIR%%/data/gfx/cursor/direction_u5r.png
+%%DATADIR%%/data/gfx/cursor/direction_u6r.png
+%%DATADIR%%/data/gfx/cursor/direction_u7r.png
+%%DATADIR%%/data/gfx/cursor/direction_u8r.png
+%%DATADIR%%/data/gfx/cursor/direction_u9r.png
+%%DATADIR%%/data/gfx/cursor/mark0r.png
+%%DATADIR%%/data/gfx/cursor/mark10r.png
+%%DATADIR%%/data/gfx/cursor/mark11r.png
+%%DATADIR%%/data/gfx/cursor/mark12r.png
+%%DATADIR%%/data/gfx/cursor/mark13r.png
+%%DATADIR%%/data/gfx/cursor/mark14r.png
+%%DATADIR%%/data/gfx/cursor/mark15r.png
+%%DATADIR%%/data/gfx/cursor/mark16r.png
+%%DATADIR%%/data/gfx/cursor/mark17r.png
+%%DATADIR%%/data/gfx/cursor/mark18r.png
+%%DATADIR%%/data/gfx/cursor/mark19r.png
+%%DATADIR%%/data/gfx/cursor/mark1r.png
+%%DATADIR%%/data/gfx/cursor/mark2r.png
+%%DATADIR%%/data/gfx/cursor/mark3r.png
+%%DATADIR%%/data/gfx/cursor/mark4r.png
+%%DATADIR%%/data/gfx/cursor/mark5r.png
+%%DATADIR%%/data/gfx/cursor/mark6r.png
+%%DATADIR%%/data/gfx/cursor/mark7r.png
+%%DATADIR%%/data/gfx/cursor/mark8r.png
+%%DATADIR%%/data/gfx/cursor/mark9r.png
+%%DATADIR%%/data/gfx/cursor/normal0r.png
+%%DATADIR%%/data/gfx/cursor/normal10r.png
+%%DATADIR%%/data/gfx/cursor/normal11r.png
+%%DATADIR%%/data/gfx/cursor/normal12r.png
+%%DATADIR%%/data/gfx/cursor/normal13r.png
+%%DATADIR%%/data/gfx/cursor/normal14r.png
+%%DATADIR%%/data/gfx/cursor/normal15r.png
+%%DATADIR%%/data/gfx/cursor/normal16r.png
+%%DATADIR%%/data/gfx/cursor/normal17r.png
+%%DATADIR%%/data/gfx/cursor/normal18r.png
+%%DATADIR%%/data/gfx/cursor/normal19r.png
+%%DATADIR%%/data/gfx/cursor/normal1r.png
+%%DATADIR%%/data/gfx/cursor/normal2r.png
+%%DATADIR%%/data/gfx/cursor/normal3r.png
+%%DATADIR%%/data/gfx/cursor/normal4r.png
+%%DATADIR%%/data/gfx/cursor/normal5r.png
+%%DATADIR%%/data/gfx/cursor/normal6r.png
+%%DATADIR%%/data/gfx/cursor/normal7r.png
+%%DATADIR%%/data/gfx/cursor/normal8r.png
+%%DATADIR%%/data/gfx/cursor/normal9r.png
+%%DATADIR%%/data/gfx/cursor/wait0r.png
+%%DATADIR%%/data/gfx/cursor/wait10r.png
+%%DATADIR%%/data/gfx/cursor/wait11r.png
+%%DATADIR%%/data/gfx/cursor/wait12r.png
+%%DATADIR%%/data/gfx/cursor/wait13r.png
+%%DATADIR%%/data/gfx/cursor/wait14r.png
+%%DATADIR%%/data/gfx/cursor/wait15r.png
+%%DATADIR%%/data/gfx/cursor/wait16r.png
+%%DATADIR%%/data/gfx/cursor/wait17r.png
+%%DATADIR%%/data/gfx/cursor/wait18r.png
+%%DATADIR%%/data/gfx/cursor/wait19r.png
+%%DATADIR%%/data/gfx/cursor/wait1r.png
+%%DATADIR%%/data/gfx/cursor/wait2r.png
+%%DATADIR%%/data/gfx/cursor/wait3r.png
+%%DATADIR%%/data/gfx/cursor/wait4r.png
+%%DATADIR%%/data/gfx/cursor/wait5r.png
+%%DATADIR%%/data/gfx/cursor/wait6r.png
+%%DATADIR%%/data/gfx/cursor/wait7r.png
+%%DATADIR%%/data/gfx/cursor/wait8r.png
+%%DATADIR%%/data/gfx/cursor/wait9r.png
+%%DATADIR%%/data/gfx/death0r.png
+%%DATADIR%%/data/gfx/death1r.png
+%%DATADIR%%/data/gfx/death2r.png
+%%DATADIR%%/data/gfx/death3r.png
+%%DATADIR%%/data/gfx/death4r.png
+%%DATADIR%%/data/gfx/death5r.png
+%%DATADIR%%/data/gfx/death6r.png
+%%DATADIR%%/data/gfx/death7r.png
+%%DATADIR%%/data/gfx/death8r.png
+%%DATADIR%%/data/gfx/death9r.png
+%%DATADIR%%/data/gfx/defencetower0b0.png
+%%DATADIR%%/data/gfx/defencetower0b0r.png
+%%DATADIR%%/data/gfx/defencetower1b0.png
+%%DATADIR%%/data/gfx/defencetower1b0r.png
+%%DATADIR%%/data/gfx/defencetower1b1.png
+%%DATADIR%%/data/gfx/defencetower1b1r.png
+%%DATADIR%%/data/gfx/defencetower1b2.png
+%%DATADIR%%/data/gfx/defencetower1b2r.png
+%%DATADIR%%/data/gfx/defencetower2b0.png
+%%DATADIR%%/data/gfx/defencetower2b0r.png
+%%DATADIR%%/data/gfx/explorationflag0r.png
+%%DATADIR%%/data/gfx/explosion0.png
+%%DATADIR%%/data/gfx/explosion1.png
+%%DATADIR%%/data/gfx/explosion2.png
+%%DATADIR%%/data/gfx/explosion3.png
+%%DATADIR%%/data/gfx/explosion4.png
+%%DATADIR%%/data/gfx/explosion5.png
+%%DATADIR%%/data/gfx/gamegui0.png
+%%DATADIR%%/data/gfx/gamegui1.png
+%%DATADIR%%/data/gfx/gamegui10.png
+%%DATADIR%%/data/gfx/gamegui11.png
+%%DATADIR%%/data/gfx/gamegui12.png
+%%DATADIR%%/data/gfx/gamegui13.png
+%%DATADIR%%/data/gfx/gamegui14.png
+%%DATADIR%%/data/gfx/gamegui15.png
+%%DATADIR%%/data/gfx/gamegui16.png
+%%DATADIR%%/data/gfx/gamegui17.png
+%%DATADIR%%/data/gfx/gamegui18.png
+%%DATADIR%%/data/gfx/gamegui19.png
+%%DATADIR%%/data/gfx/gamegui2.png
+%%DATADIR%%/data/gfx/gamegui20.png
+%%DATADIR%%/data/gfx/gamegui21.png
+%%DATADIR%%/data/gfx/gamegui22.png
+%%DATADIR%%/data/gfx/gamegui23.png
+%%DATADIR%%/data/gfx/gamegui24.png
+%%DATADIR%%/data/gfx/gamegui25.png
+%%DATADIR%%/data/gfx/gamegui26.png
+%%DATADIR%%/data/gfx/gamegui27.png
+%%DATADIR%%/data/gfx/gamegui28.png
+%%DATADIR%%/data/gfx/gamegui29.png
+%%DATADIR%%/data/gfx/gamegui3.png
+%%DATADIR%%/data/gfx/gamegui30r.png
+%%DATADIR%%/data/gfx/gamegui31.png
+%%DATADIR%%/data/gfx/gamegui32.png
+%%DATADIR%%/data/gfx/gamegui33.png
+%%DATADIR%%/data/gfx/gamegui34.png
+%%DATADIR%%/data/gfx/gamegui35.png
+%%DATADIR%%/data/gfx/gamegui36.png
+%%DATADIR%%/data/gfx/gamegui37.png
+%%DATADIR%%/data/gfx/gamegui38.png
+%%DATADIR%%/data/gfx/gamegui39.png
+%%DATADIR%%/data/gfx/gamegui4.png
+%%DATADIR%%/data/gfx/gamegui40.png
+%%DATADIR%%/data/gfx/gamegui41.png
+%%DATADIR%%/data/gfx/gamegui42.png
+%%DATADIR%%/data/gfx/gamegui43.png
+%%DATADIR%%/data/gfx/gamegui5.png
+%%DATADIR%%/data/gfx/gamegui6.png
+%%DATADIR%%/data/gfx/gamegui7.png
+%%DATADIR%%/data/gfx/gamegui8.png
+%%DATADIR%%/data/gfx/gamegui9.png
+%%DATADIR%%/data/gfx/guitheme0.png
+%%DATADIR%%/data/gfx/guitheme1.png
+%%DATADIR%%/data/gfx/guitheme10.png
+%%DATADIR%%/data/gfx/guitheme11.png
+%%DATADIR%%/data/gfx/guitheme12.png
+%%DATADIR%%/data/gfx/guitheme13.png
+%%DATADIR%%/data/gfx/guitheme14.png
+%%DATADIR%%/data/gfx/guitheme15.png
+%%DATADIR%%/data/gfx/guitheme16.png
+%%DATADIR%%/data/gfx/guitheme17.png
+%%DATADIR%%/data/gfx/guitheme18.png
+%%DATADIR%%/data/gfx/guitheme19.png
+%%DATADIR%%/data/gfx/guitheme2.png
+%%DATADIR%%/data/gfx/guitheme20.png
+%%DATADIR%%/data/gfx/guitheme21.png
+%%DATADIR%%/data/gfx/guitheme22.png
+%%DATADIR%%/data/gfx/guitheme23.png
+%%DATADIR%%/data/gfx/guitheme24.png
+%%DATADIR%%/data/gfx/guitheme3.png
+%%DATADIR%%/data/gfx/guitheme4.png
+%%DATADIR%%/data/gfx/guitheme5.png
+%%DATADIR%%/data/gfx/guitheme6.png
+%%DATADIR%%/data/gfx/guitheme7.png
+%%DATADIR%%/data/gfx/guitheme8.png
+%%DATADIR%%/data/gfx/guitheme9.png
+%%DATADIR%%/data/gfx/hosp0b0.png
+%%DATADIR%%/data/gfx/hosp0b0r.png
+%%DATADIR%%/data/gfx/hosp0b1.png
+%%DATADIR%%/data/gfx/hosp0c0.png
+%%DATADIR%%/data/gfx/hosp1b0.png
+%%DATADIR%%/data/gfx/hosp1b0r.png
+%%DATADIR%%/data/gfx/hosp1c0.png
+%%DATADIR%%/data/gfx/hosp2b0.png
+%%DATADIR%%/data/gfx/hosp2b0r.png
+%%DATADIR%%/data/gfx/hosp2c0.png
+%%DATADIR%%/data/gfx/image.png
+%%DATADIR%%/data/gfx/inn0b0.png
+%%DATADIR%%/data/gfx/inn0b0r.png
+%%DATADIR%%/data/gfx/inn0b1.png
+%%DATADIR%%/data/gfx/inn0c0.png
+%%DATADIR%%/data/gfx/inn1b0.png
+%%DATADIR%%/data/gfx/inn1b0r.png
+%%DATADIR%%/data/gfx/inn1b1.png
+%%DATADIR%%/data/gfx/inn1b1r.png
+%%DATADIR%%/data/gfx/inn1c0.png
+%%DATADIR%%/data/gfx/inn2b0.png
+%%DATADIR%%/data/gfx/inn2b0r.png
+%%DATADIR%%/data/gfx/inn2c0.png
+%%DATADIR%%/data/gfx/inn3c0.png
+%%DATADIR%%/data/gfx/magiceffect0.png
+%%DATADIR%%/data/gfx/magiceffect0r.png
+%%DATADIR%%/data/gfx/market0b0.png
+%%DATADIR%%/data/gfx/market0b0r.png
+%%DATADIR%%/data/gfx/minibarracks0b0.png
+%%DATADIR%%/data/gfx/minibarracks0b0r.png
+%%DATADIR%%/data/gfx/minibarracks1b0.png
+%%DATADIR%%/data/gfx/minibarracks1b0r.png
+%%DATADIR%%/data/gfx/minibarracks2b0.png
+%%DATADIR%%/data/gfx/minibarracks2b0r.png
+%%DATADIR%%/data/gfx/minibuildingsite0.png
+%%DATADIR%%/data/gfx/minibuildingsite1.png
+%%DATADIR%%/data/gfx/minibuildingsite2.png
+%%DATADIR%%/data/gfx/minibuildingsite3.png
+%%DATADIR%%/data/gfx/minibuildingsite4.png
+%%DATADIR%%/data/gfx/minibuildingsite5.png
+%%DATADIR%%/data/gfx/minidefencetower0b0.png
+%%DATADIR%%/data/gfx/minidefencetower0b0r.png
+%%DATADIR%%/data/gfx/minidefencetower1b0.png
+%%DATADIR%%/data/gfx/minidefencetower1b0r.png
+%%DATADIR%%/data/gfx/minidefencetower2b0.png
+%%DATADIR%%/data/gfx/minidefencetower2b0r.png
+%%DATADIR%%/data/gfx/minihosp0b0.png
+%%DATADIR%%/data/gfx/minihosp0b0r.png
+%%DATADIR%%/data/gfx/minihosp0c0.png
+%%DATADIR%%/data/gfx/minihosp1b0.png
+%%DATADIR%%/data/gfx/minihosp1b0r.png
+%%DATADIR%%/data/gfx/minihosp1c0.png
+%%DATADIR%%/data/gfx/minihosp2b0.png
+%%DATADIR%%/data/gfx/minihosp2b0r.png
+%%DATADIR%%/data/gfx/minihosp2c0.png
+%%DATADIR%%/data/gfx/miniinn0b0.png
+%%DATADIR%%/data/gfx/miniinn0b0r.png
+%%DATADIR%%/data/gfx/miniinn0c0.png
+%%DATADIR%%/data/gfx/miniinn1b0.png
+%%DATADIR%%/data/gfx/miniinn1b0r.png
+%%DATADIR%%/data/gfx/miniinn1c0.png
+%%DATADIR%%/data/gfx/miniinn2b0.png
+%%DATADIR%%/data/gfx/miniinn2b0r.png
+%%DATADIR%%/data/gfx/miniinn2c0.png
+%%DATADIR%%/data/gfx/minimarket0b0.png
+%%DATADIR%%/data/gfx/minimarket0b0r.png
+%%DATADIR%%/data/gfx/minipool0b0.png
+%%DATADIR%%/data/gfx/minipool0b0r.png
+%%DATADIR%%/data/gfx/minipool0c0.png
+%%DATADIR%%/data/gfx/minipool1b0.png
+%%DATADIR%%/data/gfx/minipool1b0r.png
+%%DATADIR%%/data/gfx/minipool2b0.png
+%%DATADIR%%/data/gfx/minipool2b0r.png
+%%DATADIR%%/data/gfx/miniracetrack0b0.png
+%%DATADIR%%/data/gfx/miniracetrack0b0r.png
+%%DATADIR%%/data/gfx/miniracetrack0c0.png
+%%DATADIR%%/data/gfx/miniracetrack0c0r.png
+%%DATADIR%%/data/gfx/miniracetrack1b0.png
+%%DATADIR%%/data/gfx/miniracetrack1b0r.png
+%%DATADIR%%/data/gfx/miniracetrack2b0.png
+%%DATADIR%%/data/gfx/miniracetrack2b0r.png
+%%DATADIR%%/data/gfx/minischool0b0.png
+%%DATADIR%%/data/gfx/minischool1b0.png
+%%DATADIR%%/data/gfx/minischool1b0r.png
+%%DATADIR%%/data/gfx/minischool1c0.png
+%%DATADIR%%/data/gfx/minischool1c0r.png
+%%DATADIR%%/data/gfx/minischool2b0.png
+%%DATADIR%%/data/gfx/minischool2b0r.png
+%%DATADIR%%/data/gfx/miniswarm0b0.png
+%%DATADIR%%/data/gfx/miniswarm0b0r.png
+%%DATADIR%%/data/gfx/miniswarm0c0r.png
+%%DATADIR%%/data/gfx/out.png
+%%DATADIR%%/data/gfx/particle0.png
+%%DATADIR%%/data/gfx/particle0r.png
+%%DATADIR%%/data/gfx/particle1.png
+%%DATADIR%%/data/gfx/particle1r.png
+%%DATADIR%%/data/gfx/particle2.png
+%%DATADIR%%/data/gfx/particle2r.png
+%%DATADIR%%/data/gfx/particle3.png
+%%DATADIR%%/data/gfx/pool0b0.png
+%%DATADIR%%/data/gfx/pool0b0r.png
+%%DATADIR%%/data/gfx/pool0b1.png
+%%DATADIR%%/data/gfx/pool0b1r.png
+%%DATADIR%%/data/gfx/pool0c0.png
+%%DATADIR%%/data/gfx/pool1b0.png
+%%DATADIR%%/data/gfx/pool1b0r.png
+%%DATADIR%%/data/gfx/pool2b0.png
+%%DATADIR%%/data/gfx/pool2b0r.png
+%%DATADIR%%/data/gfx/racetrack0b0.png
+%%DATADIR%%/data/gfx/racetrack0b0r.png
+%%DATADIR%%/data/gfx/racetrack0b1.png
+%%DATADIR%%/data/gfx/racetrack0b1r.png
+%%DATADIR%%/data/gfx/racetrack0b2.png
+%%DATADIR%%/data/gfx/racetrack0b2r.png
+%%DATADIR%%/data/gfx/racetrack0c0.png
+%%DATADIR%%/data/gfx/racetrack0c0r.png
+%%DATADIR%%/data/gfx/racetrack1b0.png
+%%DATADIR%%/data/gfx/racetrack1b0r.png
+%%DATADIR%%/data/gfx/racetrack1b1.png
+%%DATADIR%%/data/gfx/racetrack1b1r.png
+%%DATADIR%%/data/gfx/racetrack1b2.png
+%%DATADIR%%/data/gfx/racetrack1b2r.png
+%%DATADIR%%/data/gfx/racetrack2b0.png
+%%DATADIR%%/data/gfx/racetrack2b0r.png
+%%DATADIR%%/data/gfx/ressource0.png
+%%DATADIR%%/data/gfx/ressource1.png
+%%DATADIR%%/data/gfx/ressource10.png
+%%DATADIR%%/data/gfx/ressource11.png
+%%DATADIR%%/data/gfx/ressource12.png
+%%DATADIR%%/data/gfx/ressource13.png
+%%DATADIR%%/data/gfx/ressource14.png
+%%DATADIR%%/data/gfx/ressource15.png
+%%DATADIR%%/data/gfx/ressource16.png
+%%DATADIR%%/data/gfx/ressource17.png
+%%DATADIR%%/data/gfx/ressource18.png
+%%DATADIR%%/data/gfx/ressource19.png
+%%DATADIR%%/data/gfx/ressource2.png
+%%DATADIR%%/data/gfx/ressource20.png
+%%DATADIR%%/data/gfx/ressource21.png
+%%DATADIR%%/data/gfx/ressource22.png
+%%DATADIR%%/data/gfx/ressource23.png
+%%DATADIR%%/data/gfx/ressource24.png
+%%DATADIR%%/data/gfx/ressource25.png
+%%DATADIR%%/data/gfx/ressource26.png
+%%DATADIR%%/data/gfx/ressource27.png
+%%DATADIR%%/data/gfx/ressource28.png
+%%DATADIR%%/data/gfx/ressource29.png
+%%DATADIR%%/data/gfx/ressource3.png
+%%DATADIR%%/data/gfx/ressource30.png
+%%DATADIR%%/data/gfx/ressource31.png
+%%DATADIR%%/data/gfx/ressource32.png
+%%DATADIR%%/data/gfx/ressource33.png
+%%DATADIR%%/data/gfx/ressource34.png
+%%DATADIR%%/data/gfx/ressource35.png
+%%DATADIR%%/data/gfx/ressource36.png
+%%DATADIR%%/data/gfx/ressource37.png
+%%DATADIR%%/data/gfx/ressource38.png
+%%DATADIR%%/data/gfx/ressource39.png
+%%DATADIR%%/data/gfx/ressource4.png
+%%DATADIR%%/data/gfx/ressource40.png
+%%DATADIR%%/data/gfx/ressource41.png
+%%DATADIR%%/data/gfx/ressource42.png
+%%DATADIR%%/data/gfx/ressource43.png
+%%DATADIR%%/data/gfx/ressource44.png
+%%DATADIR%%/data/gfx/ressource45.png
+%%DATADIR%%/data/gfx/ressource46.png
+%%DATADIR%%/data/gfx/ressource47.png
+%%DATADIR%%/data/gfx/ressource48.png
+%%DATADIR%%/data/gfx/ressource49.png
+%%DATADIR%%/data/gfx/ressource5.png
+%%DATADIR%%/data/gfx/ressource50.png
+%%DATADIR%%/data/gfx/ressource51.png
+%%DATADIR%%/data/gfx/ressource52.png
+%%DATADIR%%/data/gfx/ressource53.png
+%%DATADIR%%/data/gfx/ressource54.png
+%%DATADIR%%/data/gfx/ressource55.png
+%%DATADIR%%/data/gfx/ressource56.png
+%%DATADIR%%/data/gfx/ressource57.png
+%%DATADIR%%/data/gfx/ressource58.png
+%%DATADIR%%/data/gfx/ressource59.png
+%%DATADIR%%/data/gfx/ressource6.png
+%%DATADIR%%/data/gfx/ressource60.png
+%%DATADIR%%/data/gfx/ressource61.png
+%%DATADIR%%/data/gfx/ressource62.png
+%%DATADIR%%/data/gfx/ressource63.png
+%%DATADIR%%/data/gfx/ressource64.png
+%%DATADIR%%/data/gfx/ressource7.png
+%%DATADIR%%/data/gfx/ressource8.png
+%%DATADIR%%/data/gfx/ressource9.png
+%%DATADIR%%/data/gfx/ressourcemini0.png
+%%DATADIR%%/data/gfx/ressourcemini1.png
+%%DATADIR%%/data/gfx/ressourcemini2.png
+%%DATADIR%%/data/gfx/ressourcemini3.png
+%%DATADIR%%/data/gfx/ressourcemini4.png
+%%DATADIR%%/data/gfx/ressourcemini5.png
+%%DATADIR%%/data/gfx/ressourcemini6.png
+%%DATADIR%%/data/gfx/ressourcemini7.png
+%%DATADIR%%/data/gfx/rotatingEarth0.png
+%%DATADIR%%/data/gfx/rotatingEarth1.png
+%%DATADIR%%/data/gfx/rotatingEarth10.png
+%%DATADIR%%/data/gfx/rotatingEarth11.png
+%%DATADIR%%/data/gfx/rotatingEarth12.png
+%%DATADIR%%/data/gfx/rotatingEarth13.png
+%%DATADIR%%/data/gfx/rotatingEarth14.png
+%%DATADIR%%/data/gfx/rotatingEarth15.png
+%%DATADIR%%/data/gfx/rotatingEarth16.png
+%%DATADIR%%/data/gfx/rotatingEarth17.png
+%%DATADIR%%/data/gfx/rotatingEarth18.png
+%%DATADIR%%/data/gfx/rotatingEarth19.png
+%%DATADIR%%/data/gfx/rotatingEarth2.png
+%%DATADIR%%/data/gfx/rotatingEarth3.png
+%%DATADIR%%/data/gfx/rotatingEarth4.png
+%%DATADIR%%/data/gfx/rotatingEarth5.png
+%%DATADIR%%/data/gfx/rotatingEarth6.png
+%%DATADIR%%/data/gfx/rotatingEarth7.png
+%%DATADIR%%/data/gfx/rotatingEarth8.png
+%%DATADIR%%/data/gfx/rotatingEarth9.png
+%%DATADIR%%/data/gfx/rotatingEarthi.png
+%%DATADIR%%/data/gfx/school0b0.png
+%%DATADIR%%/data/gfx/school0b1.png
+%%DATADIR%%/data/gfx/school1b0.png
+%%DATADIR%%/data/gfx/school1b0r.png
+%%DATADIR%%/data/gfx/school1b1.png
+%%DATADIR%%/data/gfx/school1b1r.png
+%%DATADIR%%/data/gfx/school1b2.png
+%%DATADIR%%/data/gfx/school1b2r.png
+%%DATADIR%%/data/gfx/school1c0.png
+%%DATADIR%%/data/gfx/school1c0r.png
+%%DATADIR%%/data/gfx/school2b0.png
+%%DATADIR%%/data/gfx/school2b0r.png
+%%DATADIR%%/data/gfx/shade0.png
+%%DATADIR%%/data/gfx/shade1.png
+%%DATADIR%%/data/gfx/shade10.png
+%%DATADIR%%/data/gfx/shade11.png
+%%DATADIR%%/data/gfx/shade12.png
+%%DATADIR%%/data/gfx/shade13.png
+%%DATADIR%%/data/gfx/shade14.png
+%%DATADIR%%/data/gfx/shade15.png
+%%DATADIR%%/data/gfx/shade16.png
+%%DATADIR%%/data/gfx/shade17.png
+%%DATADIR%%/data/gfx/shade18.png
+%%DATADIR%%/data/gfx/shade19.png
+%%DATADIR%%/data/gfx/shade2.png
+%%DATADIR%%/data/gfx/shade20.png
+%%DATADIR%%/data/gfx/shade3.png
+%%DATADIR%%/data/gfx/shade4.png
+%%DATADIR%%/data/gfx/shade5.png
+%%DATADIR%%/data/gfx/shade6.png
+%%DATADIR%%/data/gfx/shade7.png
+%%DATADIR%%/data/gfx/shade8.png
+%%DATADIR%%/data/gfx/shade9.png
+%%DATADIR%%/data/gfx/swarm0b0.png
+%%DATADIR%%/data/gfx/swarm0b0r.png
+%%DATADIR%%/data/gfx/swarm0c0r.png
+%%DATADIR%%/data/gfx/terrain0.png
+%%DATADIR%%/data/gfx/terrain1.png
+%%DATADIR%%/data/gfx/terrain10.png
+%%DATADIR%%/data/gfx/terrain100.png
+%%DATADIR%%/data/gfx/terrain101.png
+%%DATADIR%%/data/gfx/terrain102.png
+%%DATADIR%%/data/gfx/terrain103.png
+%%DATADIR%%/data/gfx/terrain104.png
+%%DATADIR%%/data/gfx/terrain105.png
+%%DATADIR%%/data/gfx/terrain106.png
+%%DATADIR%%/data/gfx/terrain107.png
+%%DATADIR%%/data/gfx/terrain108.png
+%%DATADIR%%/data/gfx/terrain109.png
+%%DATADIR%%/data/gfx/terrain11.png
+%%DATADIR%%/data/gfx/terrain110.png
+%%DATADIR%%/data/gfx/terrain111.png
+%%DATADIR%%/data/gfx/terrain112.png
+%%DATADIR%%/data/gfx/terrain113.png
+%%DATADIR%%/data/gfx/terrain114.png
+%%DATADIR%%/data/gfx/terrain115.png
+%%DATADIR%%/data/gfx/terrain116.png
+%%DATADIR%%/data/gfx/terrain117.png
+%%DATADIR%%/data/gfx/terrain118.png
+%%DATADIR%%/data/gfx/terrain119.png
+%%DATADIR%%/data/gfx/terrain12.png
+%%DATADIR%%/data/gfx/terrain120.png
+%%DATADIR%%/data/gfx/terrain121.png
+%%DATADIR%%/data/gfx/terrain122.png
+%%DATADIR%%/data/gfx/terrain123.png
+%%DATADIR%%/data/gfx/terrain124.png
+%%DATADIR%%/data/gfx/terrain125.png
+%%DATADIR%%/data/gfx/terrain126.png
+%%DATADIR%%/data/gfx/terrain127.png
+%%DATADIR%%/data/gfx/terrain128.png
+%%DATADIR%%/data/gfx/terrain129.png
+%%DATADIR%%/data/gfx/terrain13.png
+%%DATADIR%%/data/gfx/terrain130.png
+%%DATADIR%%/data/gfx/terrain131.png
+%%DATADIR%%/data/gfx/terrain132.png
+%%DATADIR%%/data/gfx/terrain133.png
+%%DATADIR%%/data/gfx/terrain134.png
+%%DATADIR%%/data/gfx/terrain135.png
+%%DATADIR%%/data/gfx/terrain136.png
+%%DATADIR%%/data/gfx/terrain137.png
+%%DATADIR%%/data/gfx/terrain138.png
+%%DATADIR%%/data/gfx/terrain139.png
+%%DATADIR%%/data/gfx/terrain14.png
+%%DATADIR%%/data/gfx/terrain140.png
+%%DATADIR%%/data/gfx/terrain141.png
+%%DATADIR%%/data/gfx/terrain142.png
+%%DATADIR%%/data/gfx/terrain143.png
+%%DATADIR%%/data/gfx/terrain144.png
+%%DATADIR%%/data/gfx/terrain145.png
+%%DATADIR%%/data/gfx/terrain146.png
+%%DATADIR%%/data/gfx/terrain147.png
+%%DATADIR%%/data/gfx/terrain148.png
+%%DATADIR%%/data/gfx/terrain149.png
+%%DATADIR%%/data/gfx/terrain15.png
+%%DATADIR%%/data/gfx/terrain150.png
+%%DATADIR%%/data/gfx/terrain151.png
+%%DATADIR%%/data/gfx/terrain152.png
+%%DATADIR%%/data/gfx/terrain153.png
+%%DATADIR%%/data/gfx/terrain154.png
+%%DATADIR%%/data/gfx/terrain155.png
+%%DATADIR%%/data/gfx/terrain156.png
+%%DATADIR%%/data/gfx/terrain157.png
+%%DATADIR%%/data/gfx/terrain158.png
+%%DATADIR%%/data/gfx/terrain159.png
+%%DATADIR%%/data/gfx/terrain16.png
+%%DATADIR%%/data/gfx/terrain160.png
+%%DATADIR%%/data/gfx/terrain161.png
+%%DATADIR%%/data/gfx/terrain162.png
+%%DATADIR%%/data/gfx/terrain163.png
+%%DATADIR%%/data/gfx/terrain164.png
+%%DATADIR%%/data/gfx/terrain165.png
+%%DATADIR%%/data/gfx/terrain166.png
+%%DATADIR%%/data/gfx/terrain167.png
+%%DATADIR%%/data/gfx/terrain168.png
+%%DATADIR%%/data/gfx/terrain169.png
+%%DATADIR%%/data/gfx/terrain17.png
+%%DATADIR%%/data/gfx/terrain170.png
+%%DATADIR%%/data/gfx/terrain171.png
+%%DATADIR%%/data/gfx/terrain172.png
+%%DATADIR%%/data/gfx/terrain173.png
+%%DATADIR%%/data/gfx/terrain174.png
+%%DATADIR%%/data/gfx/terrain175.png
+%%DATADIR%%/data/gfx/terrain176.png
+%%DATADIR%%/data/gfx/terrain177.png
+%%DATADIR%%/data/gfx/terrain178.png
+%%DATADIR%%/data/gfx/terrain179.png
+%%DATADIR%%/data/gfx/terrain18.png
+%%DATADIR%%/data/gfx/terrain180.png
+%%DATADIR%%/data/gfx/terrain181.png
+%%DATADIR%%/data/gfx/terrain182.png
+%%DATADIR%%/data/gfx/terrain183.png
+%%DATADIR%%/data/gfx/terrain184.png
+%%DATADIR%%/data/gfx/terrain185.png
+%%DATADIR%%/data/gfx/terrain186.png
+%%DATADIR%%/data/gfx/terrain187.png
+%%DATADIR%%/data/gfx/terrain188.png
+%%DATADIR%%/data/gfx/terrain189.png
+%%DATADIR%%/data/gfx/terrain19.png
+%%DATADIR%%/data/gfx/terrain190.png
+%%DATADIR%%/data/gfx/terrain191.png
+%%DATADIR%%/data/gfx/terrain192.png
+%%DATADIR%%/data/gfx/terrain193.png
+%%DATADIR%%/data/gfx/terrain194.png
+%%DATADIR%%/data/gfx/terrain195.png
+%%DATADIR%%/data/gfx/terrain196.png
+%%DATADIR%%/data/gfx/terrain197.png
+%%DATADIR%%/data/gfx/terrain198.png
+%%DATADIR%%/data/gfx/terrain199.png
+%%DATADIR%%/data/gfx/terrain2.png
+%%DATADIR%%/data/gfx/terrain20.png
+%%DATADIR%%/data/gfx/terrain200.png
+%%DATADIR%%/data/gfx/terrain201.png
+%%DATADIR%%/data/gfx/terrain202.png
+%%DATADIR%%/data/gfx/terrain203.png
+%%DATADIR%%/data/gfx/terrain204.png
+%%DATADIR%%/data/gfx/terrain205.png
+%%DATADIR%%/data/gfx/terrain206.png
+%%DATADIR%%/data/gfx/terrain207.png
+%%DATADIR%%/data/gfx/terrain208.png
+%%DATADIR%%/data/gfx/terrain209.png
+%%DATADIR%%/data/gfx/terrain21.png
+%%DATADIR%%/data/gfx/terrain210.png
+%%DATADIR%%/data/gfx/terrain211.png
+%%DATADIR%%/data/gfx/terrain212.png
+%%DATADIR%%/data/gfx/terrain213.png
+%%DATADIR%%/data/gfx/terrain214.png
+%%DATADIR%%/data/gfx/terrain215.png
+%%DATADIR%%/data/gfx/terrain216.png
+%%DATADIR%%/data/gfx/terrain217.png
+%%DATADIR%%/data/gfx/terrain218.png
+%%DATADIR%%/data/gfx/terrain219.png
+%%DATADIR%%/data/gfx/terrain22.png
+%%DATADIR%%/data/gfx/terrain220.png
+%%DATADIR%%/data/gfx/terrain221.png
+%%DATADIR%%/data/gfx/terrain222.png
+%%DATADIR%%/data/gfx/terrain223.png
+%%DATADIR%%/data/gfx/terrain224.png
+%%DATADIR%%/data/gfx/terrain225.png
+%%DATADIR%%/data/gfx/terrain226.png
+%%DATADIR%%/data/gfx/terrain227.png
+%%DATADIR%%/data/gfx/terrain228.png
+%%DATADIR%%/data/gfx/terrain229.png
+%%DATADIR%%/data/gfx/terrain23.png
+%%DATADIR%%/data/gfx/terrain230.png
+%%DATADIR%%/data/gfx/terrain231.png
+%%DATADIR%%/data/gfx/terrain232.png
+%%DATADIR%%/data/gfx/terrain233.png
+%%DATADIR%%/data/gfx/terrain234.png
+%%DATADIR%%/data/gfx/terrain235.png
+%%DATADIR%%/data/gfx/terrain236.png
+%%DATADIR%%/data/gfx/terrain237.png
+%%DATADIR%%/data/gfx/terrain238.png
+%%DATADIR%%/data/gfx/terrain239.png
+%%DATADIR%%/data/gfx/terrain24.png
+%%DATADIR%%/data/gfx/terrain240.png
+%%DATADIR%%/data/gfx/terrain241.png
+%%DATADIR%%/data/gfx/terrain242.png
+%%DATADIR%%/data/gfx/terrain243.png
+%%DATADIR%%/data/gfx/terrain244.png
+%%DATADIR%%/data/gfx/terrain245.png
+%%DATADIR%%/data/gfx/terrain246.png
+%%DATADIR%%/data/gfx/terrain247.png
+%%DATADIR%%/data/gfx/terrain248.png
+%%DATADIR%%/data/gfx/terrain249.png
+%%DATADIR%%/data/gfx/terrain25.png
+%%DATADIR%%/data/gfx/terrain250.png
+%%DATADIR%%/data/gfx/terrain251.png
+%%DATADIR%%/data/gfx/terrain252.png
+%%DATADIR%%/data/gfx/terrain253.png
+%%DATADIR%%/data/gfx/terrain254.png
+%%DATADIR%%/data/gfx/terrain255.png
+%%DATADIR%%/data/gfx/terrain256.png
+%%DATADIR%%/data/gfx/terrain257.png
+%%DATADIR%%/data/gfx/terrain258.png
+%%DATADIR%%/data/gfx/terrain259.png
+%%DATADIR%%/data/gfx/terrain26.png
+%%DATADIR%%/data/gfx/terrain260.png
+%%DATADIR%%/data/gfx/terrain261.png
+%%DATADIR%%/data/gfx/terrain262.png
+%%DATADIR%%/data/gfx/terrain263.png
+%%DATADIR%%/data/gfx/terrain264.png
+%%DATADIR%%/data/gfx/terrain265.png
+%%DATADIR%%/data/gfx/terrain266.png
+%%DATADIR%%/data/gfx/terrain267.png
+%%DATADIR%%/data/gfx/terrain268.png
+%%DATADIR%%/data/gfx/terrain269.png
+%%DATADIR%%/data/gfx/terrain27.png
+%%DATADIR%%/data/gfx/terrain270.png
+%%DATADIR%%/data/gfx/terrain271.png
+%%DATADIR%%/data/gfx/terrain28.png
+%%DATADIR%%/data/gfx/terrain29.png
+%%DATADIR%%/data/gfx/terrain3.png
+%%DATADIR%%/data/gfx/terrain30.png
+%%DATADIR%%/data/gfx/terrain31.png
+%%DATADIR%%/data/gfx/terrain32.png
+%%DATADIR%%/data/gfx/terrain33.png
+%%DATADIR%%/data/gfx/terrain34.png
+%%DATADIR%%/data/gfx/terrain35.png
+%%DATADIR%%/data/gfx/terrain36.png
+%%DATADIR%%/data/gfx/terrain37.png
+%%DATADIR%%/data/gfx/terrain38.png
+%%DATADIR%%/data/gfx/terrain39.png
+%%DATADIR%%/data/gfx/terrain4.png
+%%DATADIR%%/data/gfx/terrain40.png
+%%DATADIR%%/data/gfx/terrain41.png
+%%DATADIR%%/data/gfx/terrain42.png
+%%DATADIR%%/data/gfx/terrain43.png
+%%DATADIR%%/data/gfx/terrain44.png
+%%DATADIR%%/data/gfx/terrain45.png
+%%DATADIR%%/data/gfx/terrain46.png
+%%DATADIR%%/data/gfx/terrain47.png
+%%DATADIR%%/data/gfx/terrain48.png
+%%DATADIR%%/data/gfx/terrain49.png
+%%DATADIR%%/data/gfx/terrain5.png
+%%DATADIR%%/data/gfx/terrain50.png
+%%DATADIR%%/data/gfx/terrain51.png
+%%DATADIR%%/data/gfx/terrain52.png
+%%DATADIR%%/data/gfx/terrain53.png
+%%DATADIR%%/data/gfx/terrain54.png
+%%DATADIR%%/data/gfx/terrain55.png
+%%DATADIR%%/data/gfx/terrain56.png
+%%DATADIR%%/data/gfx/terrain57.png
+%%DATADIR%%/data/gfx/terrain58.png
+%%DATADIR%%/data/gfx/terrain59.png
+%%DATADIR%%/data/gfx/terrain6.png
+%%DATADIR%%/data/gfx/terrain60.png
+%%DATADIR%%/data/gfx/terrain61.png
+%%DATADIR%%/data/gfx/terrain62.png
+%%DATADIR%%/data/gfx/terrain63.png
+%%DATADIR%%/data/gfx/terrain64.png
+%%DATADIR%%/data/gfx/terrain65.png
+%%DATADIR%%/data/gfx/terrain66.png
+%%DATADIR%%/data/gfx/terrain67.png
+%%DATADIR%%/data/gfx/terrain68.png
+%%DATADIR%%/data/gfx/terrain69.png
+%%DATADIR%%/data/gfx/terrain7.png
+%%DATADIR%%/data/gfx/terrain70.png
+%%DATADIR%%/data/gfx/terrain71.png
+%%DATADIR%%/data/gfx/terrain72.png
+%%DATADIR%%/data/gfx/terrain73.png
+%%DATADIR%%/data/gfx/terrain74.png
+%%DATADIR%%/data/gfx/terrain75.png
+%%DATADIR%%/data/gfx/terrain76.png
+%%DATADIR%%/data/gfx/terrain77.png
+%%DATADIR%%/data/gfx/terrain78.png
+%%DATADIR%%/data/gfx/terrain79.png
+%%DATADIR%%/data/gfx/terrain8.png
+%%DATADIR%%/data/gfx/terrain80.png
+%%DATADIR%%/data/gfx/terrain81.png
+%%DATADIR%%/data/gfx/terrain82.png
+%%DATADIR%%/data/gfx/terrain83.png
+%%DATADIR%%/data/gfx/terrain84.png
+%%DATADIR%%/data/gfx/terrain85.png
+%%DATADIR%%/data/gfx/terrain86.png
+%%DATADIR%%/data/gfx/terrain87.png
+%%DATADIR%%/data/gfx/terrain88.png
+%%DATADIR%%/data/gfx/terrain89.png
+%%DATADIR%%/data/gfx/terrain9.png
+%%DATADIR%%/data/gfx/terrain90.png
+%%DATADIR%%/data/gfx/terrain91.png
+%%DATADIR%%/data/gfx/terrain92.png
+%%DATADIR%%/data/gfx/terrain93.png
+%%DATADIR%%/data/gfx/terrain94.png
+%%DATADIR%%/data/gfx/terrain95.png
+%%DATADIR%%/data/gfx/terrain96.png
+%%DATADIR%%/data/gfx/terrain97.png
+%%DATADIR%%/data/gfx/terrain98.png
+%%DATADIR%%/data/gfx/terrain99.png
+%%DATADIR%%/data/gfx/title.png
+%%DATADIR%%/data/gfx/unit0r.png
+%%DATADIR%%/data/gfx/unit100.png
+%%DATADIR%%/data/gfx/unit100r.png
+%%DATADIR%%/data/gfx/unit101.png
+%%DATADIR%%/data/gfx/unit101r.png
+%%DATADIR%%/data/gfx/unit102.png
+%%DATADIR%%/data/gfx/unit102r.png
+%%DATADIR%%/data/gfx/unit103.png
+%%DATADIR%%/data/gfx/unit103r.png
+%%DATADIR%%/data/gfx/unit104.png
+%%DATADIR%%/data/gfx/unit104r.png
+%%DATADIR%%/data/gfx/unit105.png
+%%DATADIR%%/data/gfx/unit105r.png
+%%DATADIR%%/data/gfx/unit106.png
+%%DATADIR%%/data/gfx/unit106r.png
+%%DATADIR%%/data/gfx/unit107.png
+%%DATADIR%%/data/gfx/unit107r.png
+%%DATADIR%%/data/gfx/unit108.png
+%%DATADIR%%/data/gfx/unit108r.png
+%%DATADIR%%/data/gfx/unit109.png
+%%DATADIR%%/data/gfx/unit109r.png
+%%DATADIR%%/data/gfx/unit10r.png
+%%DATADIR%%/data/gfx/unit110.png
+%%DATADIR%%/data/gfx/unit110r.png
+%%DATADIR%%/data/gfx/unit111.png
+%%DATADIR%%/data/gfx/unit111r.png
+%%DATADIR%%/data/gfx/unit112.png
+%%DATADIR%%/data/gfx/unit112r.png
+%%DATADIR%%/data/gfx/unit113.png
+%%DATADIR%%/data/gfx/unit113r.png
+%%DATADIR%%/data/gfx/unit114.png
+%%DATADIR%%/data/gfx/unit114r.png
+%%DATADIR%%/data/gfx/unit115.png
+%%DATADIR%%/data/gfx/unit115r.png
+%%DATADIR%%/data/gfx/unit116.png
+%%DATADIR%%/data/gfx/unit116r.png
+%%DATADIR%%/data/gfx/unit117.png
+%%DATADIR%%/data/gfx/unit117r.png
+%%DATADIR%%/data/gfx/unit118.png
+%%DATADIR%%/data/gfx/unit118r.png
+%%DATADIR%%/data/gfx/unit119.png
+%%DATADIR%%/data/gfx/unit119r.png
+%%DATADIR%%/data/gfx/unit11r.png
+%%DATADIR%%/data/gfx/unit120.png
+%%DATADIR%%/data/gfx/unit120r.png
+%%DATADIR%%/data/gfx/unit121.png
+%%DATADIR%%/data/gfx/unit121r.png
+%%DATADIR%%/data/gfx/unit122.png
+%%DATADIR%%/data/gfx/unit122r.png
+%%DATADIR%%/data/gfx/unit123.png
+%%DATADIR%%/data/gfx/unit123r.png
+%%DATADIR%%/data/gfx/unit124.png
+%%DATADIR%%/data/gfx/unit124r.png
+%%DATADIR%%/data/gfx/unit125.png
+%%DATADIR%%/data/gfx/unit125r.png
+%%DATADIR%%/data/gfx/unit126.png
+%%DATADIR%%/data/gfx/unit126r.png
+%%DATADIR%%/data/gfx/unit127.png
+%%DATADIR%%/data/gfx/unit127r.png
+%%DATADIR%%/data/gfx/unit128r.png
+%%DATADIR%%/data/gfx/unit129r.png
+%%DATADIR%%/data/gfx/unit12r.png
+%%DATADIR%%/data/gfx/unit130r.png
+%%DATADIR%%/data/gfx/unit131r.png
+%%DATADIR%%/data/gfx/unit132r.png
+%%DATADIR%%/data/gfx/unit133r.png
+%%DATADIR%%/data/gfx/unit134r.png
+%%DATADIR%%/data/gfx/unit135r.png
+%%DATADIR%%/data/gfx/unit136r.png
+%%DATADIR%%/data/gfx/unit137r.png
+%%DATADIR%%/data/gfx/unit138r.png
+%%DATADIR%%/data/gfx/unit139r.png
+%%DATADIR%%/data/gfx/unit13r.png
+%%DATADIR%%/data/gfx/unit140r.png
+%%DATADIR%%/data/gfx/unit141r.png
+%%DATADIR%%/data/gfx/unit142r.png
+%%DATADIR%%/data/gfx/unit143r.png
+%%DATADIR%%/data/gfx/unit144r.png
+%%DATADIR%%/data/gfx/unit145r.png
+%%DATADIR%%/data/gfx/unit146r.png
+%%DATADIR%%/data/gfx/unit147r.png
+%%DATADIR%%/data/gfx/unit148r.png
+%%DATADIR%%/data/gfx/unit149r.png
+%%DATADIR%%/data/gfx/unit14r.png
+%%DATADIR%%/data/gfx/unit150r.png
+%%DATADIR%%/data/gfx/unit151r.png
+%%DATADIR%%/data/gfx/unit152r.png
+%%DATADIR%%/data/gfx/unit153r.png
+%%DATADIR%%/data/gfx/unit154r.png
+%%DATADIR%%/data/gfx/unit155r.png
+%%DATADIR%%/data/gfx/unit156r.png
+%%DATADIR%%/data/gfx/unit157r.png
+%%DATADIR%%/data/gfx/unit158r.png
+%%DATADIR%%/data/gfx/unit159r.png
+%%DATADIR%%/data/gfx/unit15r.png
+%%DATADIR%%/data/gfx/unit160r.png
+%%DATADIR%%/data/gfx/unit161r.png
+%%DATADIR%%/data/gfx/unit162r.png
+%%DATADIR%%/data/gfx/unit163r.png
+%%DATADIR%%/data/gfx/unit164r.png
+%%DATADIR%%/data/gfx/unit165r.png
+%%DATADIR%%/data/gfx/unit166r.png
+%%DATADIR%%/data/gfx/unit167r.png
+%%DATADIR%%/data/gfx/unit168r.png
+%%DATADIR%%/data/gfx/unit169r.png
+%%DATADIR%%/data/gfx/unit16r.png
+%%DATADIR%%/data/gfx/unit170r.png
+%%DATADIR%%/data/gfx/unit171r.png
+%%DATADIR%%/data/gfx/unit172r.png
+%%DATADIR%%/data/gfx/unit173r.png
+%%DATADIR%%/data/gfx/unit174r.png
+%%DATADIR%%/data/gfx/unit175r.png
+%%DATADIR%%/data/gfx/unit176r.png
+%%DATADIR%%/data/gfx/unit177r.png
+%%DATADIR%%/data/gfx/unit178r.png
+%%DATADIR%%/data/gfx/unit179r.png
+%%DATADIR%%/data/gfx/unit17r.png
+%%DATADIR%%/data/gfx/unit180r.png
+%%DATADIR%%/data/gfx/unit181r.png
+%%DATADIR%%/data/gfx/unit182r.png
+%%DATADIR%%/data/gfx/unit183r.png
+%%DATADIR%%/data/gfx/unit184r.png
+%%DATADIR%%/data/gfx/unit185r.png
+%%DATADIR%%/data/gfx/unit186r.png
+%%DATADIR%%/data/gfx/unit187r.png
+%%DATADIR%%/data/gfx/unit188r.png
+%%DATADIR%%/data/gfx/unit189r.png
+%%DATADIR%%/data/gfx/unit18r.png
+%%DATADIR%%/data/gfx/unit190r.png
+%%DATADIR%%/data/gfx/unit191r.png
+%%DATADIR%%/data/gfx/unit192.png
+%%DATADIR%%/data/gfx/unit192r.png
+%%DATADIR%%/data/gfx/unit193.png
+%%DATADIR%%/data/gfx/unit193r.png
+%%DATADIR%%/data/gfx/unit194.png
+%%DATADIR%%/data/gfx/unit194r.png
+%%DATADIR%%/data/gfx/unit195.png
+%%DATADIR%%/data/gfx/unit195r.png
+%%DATADIR%%/data/gfx/unit196.png
+%%DATADIR%%/data/gfx/unit196r.png
+%%DATADIR%%/data/gfx/unit197.png
+%%DATADIR%%/data/gfx/unit197r.png
+%%DATADIR%%/data/gfx/unit198.png
+%%DATADIR%%/data/gfx/unit198r.png
+%%DATADIR%%/data/gfx/unit199.png
+%%DATADIR%%/data/gfx/unit199r.png
+%%DATADIR%%/data/gfx/unit19r.png
+%%DATADIR%%/data/gfx/unit1r.png
+%%DATADIR%%/data/gfx/unit200.png
+%%DATADIR%%/data/gfx/unit200r.png
+%%DATADIR%%/data/gfx/unit201.png
+%%DATADIR%%/data/gfx/unit201r.png
+%%DATADIR%%/data/gfx/unit202.png
+%%DATADIR%%/data/gfx/unit202r.png
+%%DATADIR%%/data/gfx/unit203.png
+%%DATADIR%%/data/gfx/unit203r.png
+%%DATADIR%%/data/gfx/unit204.png
+%%DATADIR%%/data/gfx/unit204r.png
+%%DATADIR%%/data/gfx/unit205.png
+%%DATADIR%%/data/gfx/unit205r.png
+%%DATADIR%%/data/gfx/unit206.png
+%%DATADIR%%/data/gfx/unit206r.png
+%%DATADIR%%/data/gfx/unit207.png
+%%DATADIR%%/data/gfx/unit207r.png
+%%DATADIR%%/data/gfx/unit208.png
+%%DATADIR%%/data/gfx/unit208r.png
+%%DATADIR%%/data/gfx/unit209.png
+%%DATADIR%%/data/gfx/unit209r.png
+%%DATADIR%%/data/gfx/unit20r.png
+%%DATADIR%%/data/gfx/unit210.png
+%%DATADIR%%/data/gfx/unit210r.png
+%%DATADIR%%/data/gfx/unit211.png
+%%DATADIR%%/data/gfx/unit211r.png
+%%DATADIR%%/data/gfx/unit212.png
+%%DATADIR%%/data/gfx/unit212r.png
+%%DATADIR%%/data/gfx/unit213.png
+%%DATADIR%%/data/gfx/unit213r.png
+%%DATADIR%%/data/gfx/unit214.png
+%%DATADIR%%/data/gfx/unit214r.png
+%%DATADIR%%/data/gfx/unit215.png
+%%DATADIR%%/data/gfx/unit215r.png
+%%DATADIR%%/data/gfx/unit216.png
+%%DATADIR%%/data/gfx/unit216r.png
+%%DATADIR%%/data/gfx/unit217.png
+%%DATADIR%%/data/gfx/unit217r.png
+%%DATADIR%%/data/gfx/unit218.png
+%%DATADIR%%/data/gfx/unit218r.png
+%%DATADIR%%/data/gfx/unit219.png
+%%DATADIR%%/data/gfx/unit219r.png
+%%DATADIR%%/data/gfx/unit21r.png
+%%DATADIR%%/data/gfx/unit220.png
+%%DATADIR%%/data/gfx/unit220r.png
+%%DATADIR%%/data/gfx/unit221.png
+%%DATADIR%%/data/gfx/unit221r.png
+%%DATADIR%%/data/gfx/unit222.png
+%%DATADIR%%/data/gfx/unit222r.png
+%%DATADIR%%/data/gfx/unit223.png
+%%DATADIR%%/data/gfx/unit223r.png
+%%DATADIR%%/data/gfx/unit224.png
+%%DATADIR%%/data/gfx/unit224r.png
+%%DATADIR%%/data/gfx/unit225.png
+%%DATADIR%%/data/gfx/unit225r.png
+%%DATADIR%%/data/gfx/unit226.png
+%%DATADIR%%/data/gfx/unit226r.png
+%%DATADIR%%/data/gfx/unit227.png
+%%DATADIR%%/data/gfx/unit227r.png
+%%DATADIR%%/data/gfx/unit228.png
+%%DATADIR%%/data/gfx/unit228r.png
+%%DATADIR%%/data/gfx/unit229.png
+%%DATADIR%%/data/gfx/unit229r.png
+%%DATADIR%%/data/gfx/unit22r.png
+%%DATADIR%%/data/gfx/unit230.png
+%%DATADIR%%/data/gfx/unit230r.png
+%%DATADIR%%/data/gfx/unit231.png
+%%DATADIR%%/data/gfx/unit231r.png
+%%DATADIR%%/data/gfx/unit232.png
+%%DATADIR%%/data/gfx/unit232r.png
+%%DATADIR%%/data/gfx/unit233.png
+%%DATADIR%%/data/gfx/unit233r.png
+%%DATADIR%%/data/gfx/unit234.png
+%%DATADIR%%/data/gfx/unit234r.png
+%%DATADIR%%/data/gfx/unit235.png
+%%DATADIR%%/data/gfx/unit235r.png
+%%DATADIR%%/data/gfx/unit236.png
+%%DATADIR%%/data/gfx/unit236r.png
+%%DATADIR%%/data/gfx/unit237.png
+%%DATADIR%%/data/gfx/unit237r.png
+%%DATADIR%%/data/gfx/unit238.png
+%%DATADIR%%/data/gfx/unit238r.png
+%%DATADIR%%/data/gfx/unit239.png
+%%DATADIR%%/data/gfx/unit239r.png
+%%DATADIR%%/data/gfx/unit23r.png
+%%DATADIR%%/data/gfx/unit240.png
+%%DATADIR%%/data/gfx/unit240r.png
+%%DATADIR%%/data/gfx/unit241.png
+%%DATADIR%%/data/gfx/unit241r.png
+%%DATADIR%%/data/gfx/unit242.png
+%%DATADIR%%/data/gfx/unit242r.png
+%%DATADIR%%/data/gfx/unit243.png
+%%DATADIR%%/data/gfx/unit243r.png
+%%DATADIR%%/data/gfx/unit244.png
+%%DATADIR%%/data/gfx/unit244r.png
+%%DATADIR%%/data/gfx/unit245.png
+%%DATADIR%%/data/gfx/unit245r.png
+%%DATADIR%%/data/gfx/unit246.png
+%%DATADIR%%/data/gfx/unit246r.png
+%%DATADIR%%/data/gfx/unit247.png
+%%DATADIR%%/data/gfx/unit247r.png
+%%DATADIR%%/data/gfx/unit248.png
+%%DATADIR%%/data/gfx/unit248r.png
+%%DATADIR%%/data/gfx/unit249.png
+%%DATADIR%%/data/gfx/unit249r.png
+%%DATADIR%%/data/gfx/unit24r.png
+%%DATADIR%%/data/gfx/unit250.png
+%%DATADIR%%/data/gfx/unit250r.png
+%%DATADIR%%/data/gfx/unit251.png
+%%DATADIR%%/data/gfx/unit251r.png
+%%DATADIR%%/data/gfx/unit252.png
+%%DATADIR%%/data/gfx/unit252r.png
+%%DATADIR%%/data/gfx/unit253.png
+%%DATADIR%%/data/gfx/unit253r.png
+%%DATADIR%%/data/gfx/unit254.png
+%%DATADIR%%/data/gfx/unit254r.png
+%%DATADIR%%/data/gfx/unit255.png
+%%DATADIR%%/data/gfx/unit255r.png
+%%DATADIR%%/data/gfx/unit256.png
+%%DATADIR%%/data/gfx/unit256r.png
+%%DATADIR%%/data/gfx/unit257.png
+%%DATADIR%%/data/gfx/unit257r.png
+%%DATADIR%%/data/gfx/unit258.png
+%%DATADIR%%/data/gfx/unit258r.png
+%%DATADIR%%/data/gfx/unit259.png
+%%DATADIR%%/data/gfx/unit259r.png
+%%DATADIR%%/data/gfx/unit25r.png
+%%DATADIR%%/data/gfx/unit260.png
+%%DATADIR%%/data/gfx/unit260r.png
+%%DATADIR%%/data/gfx/unit261.png
+%%DATADIR%%/data/gfx/unit261r.png
+%%DATADIR%%/data/gfx/unit262.png
+%%DATADIR%%/data/gfx/unit262r.png
+%%DATADIR%%/data/gfx/unit263.png
+%%DATADIR%%/data/gfx/unit263r.png
+%%DATADIR%%/data/gfx/unit264.png
+%%DATADIR%%/data/gfx/unit264r.png
+%%DATADIR%%/data/gfx/unit265.png
+%%DATADIR%%/data/gfx/unit265r.png
+%%DATADIR%%/data/gfx/unit266.png
+%%DATADIR%%/data/gfx/unit266r.png
+%%DATADIR%%/data/gfx/unit267.png
+%%DATADIR%%/data/gfx/unit267r.png
+%%DATADIR%%/data/gfx/unit268.png
+%%DATADIR%%/data/gfx/unit268r.png
+%%DATADIR%%/data/gfx/unit269.png
+%%DATADIR%%/data/gfx/unit269r.png
+%%DATADIR%%/data/gfx/unit26r.png
+%%DATADIR%%/data/gfx/unit270.png
+%%DATADIR%%/data/gfx/unit270r.png
+%%DATADIR%%/data/gfx/unit271.png
+%%DATADIR%%/data/gfx/unit271r.png
+%%DATADIR%%/data/gfx/unit272.png
+%%DATADIR%%/data/gfx/unit272r.png
+%%DATADIR%%/data/gfx/unit273.png
+%%DATADIR%%/data/gfx/unit273r.png
+%%DATADIR%%/data/gfx/unit274.png
+%%DATADIR%%/data/gfx/unit274r.png
+%%DATADIR%%/data/gfx/unit275.png
+%%DATADIR%%/data/gfx/unit275r.png
+%%DATADIR%%/data/gfx/unit276.png
+%%DATADIR%%/data/gfx/unit276r.png
+%%DATADIR%%/data/gfx/unit277.png
+%%DATADIR%%/data/gfx/unit277r.png
+%%DATADIR%%/data/gfx/unit278.png
+%%DATADIR%%/data/gfx/unit278r.png
+%%DATADIR%%/data/gfx/unit279.png
+%%DATADIR%%/data/gfx/unit279r.png
+%%DATADIR%%/data/gfx/unit27r.png
+%%DATADIR%%/data/gfx/unit280.png
+%%DATADIR%%/data/gfx/unit280r.png
+%%DATADIR%%/data/gfx/unit281.png
+%%DATADIR%%/data/gfx/unit281r.png
+%%DATADIR%%/data/gfx/unit282.png
+%%DATADIR%%/data/gfx/unit282r.png
+%%DATADIR%%/data/gfx/unit283.png
+%%DATADIR%%/data/gfx/unit283r.png
+%%DATADIR%%/data/gfx/unit284.png
+%%DATADIR%%/data/gfx/unit284r.png
+%%DATADIR%%/data/gfx/unit285.png
+%%DATADIR%%/data/gfx/unit285r.png
+%%DATADIR%%/data/gfx/unit286.png
+%%DATADIR%%/data/gfx/unit286r.png
+%%DATADIR%%/data/gfx/unit287.png
+%%DATADIR%%/data/gfx/unit287r.png
+%%DATADIR%%/data/gfx/unit288.png
+%%DATADIR%%/data/gfx/unit288r.png
+%%DATADIR%%/data/gfx/unit289.png
+%%DATADIR%%/data/gfx/unit289r.png
+%%DATADIR%%/data/gfx/unit28r.png
+%%DATADIR%%/data/gfx/unit290.png
+%%DATADIR%%/data/gfx/unit290r.png
+%%DATADIR%%/data/gfx/unit291.png
+%%DATADIR%%/data/gfx/unit291r.png
+%%DATADIR%%/data/gfx/unit292.png
+%%DATADIR%%/data/gfx/unit292r.png
+%%DATADIR%%/data/gfx/unit293.png
+%%DATADIR%%/data/gfx/unit293r.png
+%%DATADIR%%/data/gfx/unit294.png
+%%DATADIR%%/data/gfx/unit294r.png
+%%DATADIR%%/data/gfx/unit295.png
+%%DATADIR%%/data/gfx/unit295r.png
+%%DATADIR%%/data/gfx/unit296.png
+%%DATADIR%%/data/gfx/unit296r.png
+%%DATADIR%%/data/gfx/unit297.png
+%%DATADIR%%/data/gfx/unit297r.png
+%%DATADIR%%/data/gfx/unit298.png
+%%DATADIR%%/data/gfx/unit298r.png
+%%DATADIR%%/data/gfx/unit299.png
+%%DATADIR%%/data/gfx/unit299r.png
+%%DATADIR%%/data/gfx/unit29r.png
+%%DATADIR%%/data/gfx/unit2r.png
+%%DATADIR%%/data/gfx/unit300.png
+%%DATADIR%%/data/gfx/unit300r.png
+%%DATADIR%%/data/gfx/unit301.png
+%%DATADIR%%/data/gfx/unit301r.png
+%%DATADIR%%/data/gfx/unit302.png
+%%DATADIR%%/data/gfx/unit302r.png
+%%DATADIR%%/data/gfx/unit303.png
+%%DATADIR%%/data/gfx/unit303r.png
+%%DATADIR%%/data/gfx/unit304.png
+%%DATADIR%%/data/gfx/unit304r.png
+%%DATADIR%%/data/gfx/unit305.png
+%%DATADIR%%/data/gfx/unit305r.png
+%%DATADIR%%/data/gfx/unit306.png
+%%DATADIR%%/data/gfx/unit306r.png
+%%DATADIR%%/data/gfx/unit307.png
+%%DATADIR%%/data/gfx/unit307r.png
+%%DATADIR%%/data/gfx/unit308.png
+%%DATADIR%%/data/gfx/unit308r.png
+%%DATADIR%%/data/gfx/unit309.png
+%%DATADIR%%/data/gfx/unit309r.png
+%%DATADIR%%/data/gfx/unit30r.png
+%%DATADIR%%/data/gfx/unit310.png
+%%DATADIR%%/data/gfx/unit310r.png
+%%DATADIR%%/data/gfx/unit311.png
+%%DATADIR%%/data/gfx/unit311r.png
+%%DATADIR%%/data/gfx/unit312.png
+%%DATADIR%%/data/gfx/unit312r.png
+%%DATADIR%%/data/gfx/unit313.png
+%%DATADIR%%/data/gfx/unit313r.png
+%%DATADIR%%/data/gfx/unit314.png
+%%DATADIR%%/data/gfx/unit314r.png
+%%DATADIR%%/data/gfx/unit315.png
+%%DATADIR%%/data/gfx/unit315r.png
+%%DATADIR%%/data/gfx/unit316.png
+%%DATADIR%%/data/gfx/unit316r.png
+%%DATADIR%%/data/gfx/unit317.png
+%%DATADIR%%/data/gfx/unit317r.png
+%%DATADIR%%/data/gfx/unit318.png
+%%DATADIR%%/data/gfx/unit318r.png
+%%DATADIR%%/data/gfx/unit319.png
+%%DATADIR%%/data/gfx/unit319r.png
+%%DATADIR%%/data/gfx/unit31r.png
+%%DATADIR%%/data/gfx/unit320r.png
+%%DATADIR%%/data/gfx/unit321r.png
+%%DATADIR%%/data/gfx/unit322r.png
+%%DATADIR%%/data/gfx/unit323r.png
+%%DATADIR%%/data/gfx/unit324r.png
+%%DATADIR%%/data/gfx/unit325r.png
+%%DATADIR%%/data/gfx/unit326r.png
+%%DATADIR%%/data/gfx/unit327r.png
+%%DATADIR%%/data/gfx/unit328r.png
+%%DATADIR%%/data/gfx/unit329r.png
+%%DATADIR%%/data/gfx/unit32r.png
+%%DATADIR%%/data/gfx/unit330r.png
+%%DATADIR%%/data/gfx/unit331r.png
+%%DATADIR%%/data/gfx/unit332r.png
+%%DATADIR%%/data/gfx/unit333r.png
+%%DATADIR%%/data/gfx/unit334r.png
+%%DATADIR%%/data/gfx/unit335r.png
+%%DATADIR%%/data/gfx/unit336r.png
+%%DATADIR%%/data/gfx/unit337r.png
+%%DATADIR%%/data/gfx/unit338r.png
+%%DATADIR%%/data/gfx/unit339r.png
+%%DATADIR%%/data/gfx/unit33r.png
+%%DATADIR%%/data/gfx/unit340r.png
+%%DATADIR%%/data/gfx/unit341r.png
+%%DATADIR%%/data/gfx/unit342r.png
+%%DATADIR%%/data/gfx/unit343r.png
+%%DATADIR%%/data/gfx/unit344r.png
+%%DATADIR%%/data/gfx/unit345r.png
+%%DATADIR%%/data/gfx/unit346r.png
+%%DATADIR%%/data/gfx/unit347r.png
+%%DATADIR%%/data/gfx/unit348r.png
+%%DATADIR%%/data/gfx/unit349r.png
+%%DATADIR%%/data/gfx/unit34r.png
+%%DATADIR%%/data/gfx/unit350r.png
+%%DATADIR%%/data/gfx/unit351r.png
+%%DATADIR%%/data/gfx/unit352r.png
+%%DATADIR%%/data/gfx/unit353r.png
+%%DATADIR%%/data/gfx/unit354r.png
+%%DATADIR%%/data/gfx/unit355r.png
+%%DATADIR%%/data/gfx/unit356r.png
+%%DATADIR%%/data/gfx/unit357r.png
+%%DATADIR%%/data/gfx/unit358r.png
+%%DATADIR%%/data/gfx/unit359r.png
+%%DATADIR%%/data/gfx/unit35r.png
+%%DATADIR%%/data/gfx/unit360r.png
+%%DATADIR%%/data/gfx/unit361r.png
+%%DATADIR%%/data/gfx/unit362r.png
+%%DATADIR%%/data/gfx/unit363r.png
+%%DATADIR%%/data/gfx/unit364r.png
+%%DATADIR%%/data/gfx/unit365r.png
+%%DATADIR%%/data/gfx/unit366r.png
+%%DATADIR%%/data/gfx/unit367r.png
+%%DATADIR%%/data/gfx/unit368r.png
+%%DATADIR%%/data/gfx/unit369r.png
+%%DATADIR%%/data/gfx/unit36r.png
+%%DATADIR%%/data/gfx/unit370r.png
+%%DATADIR%%/data/gfx/unit371r.png
+%%DATADIR%%/data/gfx/unit372r.png
+%%DATADIR%%/data/gfx/unit373r.png
+%%DATADIR%%/data/gfx/unit374r.png
+%%DATADIR%%/data/gfx/unit375r.png
+%%DATADIR%%/data/gfx/unit376r.png
+%%DATADIR%%/data/gfx/unit377r.png
+%%DATADIR%%/data/gfx/unit378r.png
+%%DATADIR%%/data/gfx/unit379r.png
+%%DATADIR%%/data/gfx/unit37r.png
+%%DATADIR%%/data/gfx/unit380r.png
+%%DATADIR%%/data/gfx/unit381r.png
+%%DATADIR%%/data/gfx/unit382r.png
+%%DATADIR%%/data/gfx/unit383r.png
+%%DATADIR%%/data/gfx/unit384.png
+%%DATADIR%%/data/gfx/unit384r.png
+%%DATADIR%%/data/gfx/unit385.png
+%%DATADIR%%/data/gfx/unit385r.png
+%%DATADIR%%/data/gfx/unit386.png
+%%DATADIR%%/data/gfx/unit386r.png
+%%DATADIR%%/data/gfx/unit387.png
+%%DATADIR%%/data/gfx/unit387r.png
+%%DATADIR%%/data/gfx/unit388.png
+%%DATADIR%%/data/gfx/unit388r.png
+%%DATADIR%%/data/gfx/unit389.png
+%%DATADIR%%/data/gfx/unit389r.png
+%%DATADIR%%/data/gfx/unit38r.png
+%%DATADIR%%/data/gfx/unit390.png
+%%DATADIR%%/data/gfx/unit390r.png
+%%DATADIR%%/data/gfx/unit391.png
+%%DATADIR%%/data/gfx/unit391r.png
+%%DATADIR%%/data/gfx/unit392.png
+%%DATADIR%%/data/gfx/unit392r.png
+%%DATADIR%%/data/gfx/unit393.png
+%%DATADIR%%/data/gfx/unit393r.png
+%%DATADIR%%/data/gfx/unit394.png
+%%DATADIR%%/data/gfx/unit394r.png
+%%DATADIR%%/data/gfx/unit395.png
+%%DATADIR%%/data/gfx/unit395r.png
+%%DATADIR%%/data/gfx/unit396.png
+%%DATADIR%%/data/gfx/unit396r.png
+%%DATADIR%%/data/gfx/unit397.png
+%%DATADIR%%/data/gfx/unit397r.png
+%%DATADIR%%/data/gfx/unit398.png
+%%DATADIR%%/data/gfx/unit398r.png
+%%DATADIR%%/data/gfx/unit399.png
+%%DATADIR%%/data/gfx/unit399r.png
+%%DATADIR%%/data/gfx/unit39r.png
+%%DATADIR%%/data/gfx/unit3r.png
+%%DATADIR%%/data/gfx/unit400.png
+%%DATADIR%%/data/gfx/unit400r.png
+%%DATADIR%%/data/gfx/unit401.png
+%%DATADIR%%/data/gfx/unit401r.png
+%%DATADIR%%/data/gfx/unit402.png
+%%DATADIR%%/data/gfx/unit402r.png
+%%DATADIR%%/data/gfx/unit403.png
+%%DATADIR%%/data/gfx/unit403r.png
+%%DATADIR%%/data/gfx/unit404.png
+%%DATADIR%%/data/gfx/unit404r.png
+%%DATADIR%%/data/gfx/unit405.png
+%%DATADIR%%/data/gfx/unit405r.png
+%%DATADIR%%/data/gfx/unit406.png
+%%DATADIR%%/data/gfx/unit406r.png
+%%DATADIR%%/data/gfx/unit407.png
+%%DATADIR%%/data/gfx/unit407r.png
+%%DATADIR%%/data/gfx/unit408.png
+%%DATADIR%%/data/gfx/unit408r.png
+%%DATADIR%%/data/gfx/unit409.png
+%%DATADIR%%/data/gfx/unit409r.png
+%%DATADIR%%/data/gfx/unit40r.png
+%%DATADIR%%/data/gfx/unit410.png
+%%DATADIR%%/data/gfx/unit410r.png
+%%DATADIR%%/data/gfx/unit411.png
+%%DATADIR%%/data/gfx/unit411r.png
+%%DATADIR%%/data/gfx/unit412.png
+%%DATADIR%%/data/gfx/unit412r.png
+%%DATADIR%%/data/gfx/unit413.png
+%%DATADIR%%/data/gfx/unit413r.png
+%%DATADIR%%/data/gfx/unit414.png
+%%DATADIR%%/data/gfx/unit414r.png
+%%DATADIR%%/data/gfx/unit415.png
+%%DATADIR%%/data/gfx/unit415r.png
+%%DATADIR%%/data/gfx/unit416.png
+%%DATADIR%%/data/gfx/unit416r.png
+%%DATADIR%%/data/gfx/unit417.png
+%%DATADIR%%/data/gfx/unit417r.png
+%%DATADIR%%/data/gfx/unit418.png
+%%DATADIR%%/data/gfx/unit418r.png
+%%DATADIR%%/data/gfx/unit419.png
+%%DATADIR%%/data/gfx/unit419r.png
+%%DATADIR%%/data/gfx/unit41r.png
+%%DATADIR%%/data/gfx/unit420.png
+%%DATADIR%%/data/gfx/unit420r.png
+%%DATADIR%%/data/gfx/unit421.png
+%%DATADIR%%/data/gfx/unit421r.png
+%%DATADIR%%/data/gfx/unit422.png
+%%DATADIR%%/data/gfx/unit422r.png
+%%DATADIR%%/data/gfx/unit423.png
+%%DATADIR%%/data/gfx/unit423r.png
+%%DATADIR%%/data/gfx/unit424.png
+%%DATADIR%%/data/gfx/unit424r.png
+%%DATADIR%%/data/gfx/unit425.png
+%%DATADIR%%/data/gfx/unit425r.png
+%%DATADIR%%/data/gfx/unit426.png
+%%DATADIR%%/data/gfx/unit426r.png
+%%DATADIR%%/data/gfx/unit427.png
+%%DATADIR%%/data/gfx/unit427r.png
+%%DATADIR%%/data/gfx/unit428.png
+%%DATADIR%%/data/gfx/unit428r.png
+%%DATADIR%%/data/gfx/unit429.png
+%%DATADIR%%/data/gfx/unit429r.png
+%%DATADIR%%/data/gfx/unit42r.png
+%%DATADIR%%/data/gfx/unit430.png
+%%DATADIR%%/data/gfx/unit430r.png
+%%DATADIR%%/data/gfx/unit431.png
+%%DATADIR%%/data/gfx/unit431r.png
+%%DATADIR%%/data/gfx/unit432.png
+%%DATADIR%%/data/gfx/unit432r.png
+%%DATADIR%%/data/gfx/unit433.png
+%%DATADIR%%/data/gfx/unit433r.png
+%%DATADIR%%/data/gfx/unit434.png
+%%DATADIR%%/data/gfx/unit434r.png
+%%DATADIR%%/data/gfx/unit435.png
+%%DATADIR%%/data/gfx/unit435r.png
+%%DATADIR%%/data/gfx/unit436.png
+%%DATADIR%%/data/gfx/unit436r.png
+%%DATADIR%%/data/gfx/unit437.png
+%%DATADIR%%/data/gfx/unit437r.png
+%%DATADIR%%/data/gfx/unit438.png
+%%DATADIR%%/data/gfx/unit438r.png
+%%DATADIR%%/data/gfx/unit439.png
+%%DATADIR%%/data/gfx/unit439r.png
+%%DATADIR%%/data/gfx/unit43r.png
+%%DATADIR%%/data/gfx/unit440.png
+%%DATADIR%%/data/gfx/unit440r.png
+%%DATADIR%%/data/gfx/unit441.png
+%%DATADIR%%/data/gfx/unit441r.png
+%%DATADIR%%/data/gfx/unit442.png
+%%DATADIR%%/data/gfx/unit442r.png
+%%DATADIR%%/data/gfx/unit443.png
+%%DATADIR%%/data/gfx/unit443r.png
+%%DATADIR%%/data/gfx/unit444.png
+%%DATADIR%%/data/gfx/unit444r.png
+%%DATADIR%%/data/gfx/unit445.png
+%%DATADIR%%/data/gfx/unit445r.png
+%%DATADIR%%/data/gfx/unit446.png
+%%DATADIR%%/data/gfx/unit446r.png
+%%DATADIR%%/data/gfx/unit447.png
+%%DATADIR%%/data/gfx/unit447r.png
+%%DATADIR%%/data/gfx/unit44r.png
+%%DATADIR%%/data/gfx/unit45r.png
+%%DATADIR%%/data/gfx/unit46r.png
+%%DATADIR%%/data/gfx/unit47r.png
+%%DATADIR%%/data/gfx/unit48r.png
+%%DATADIR%%/data/gfx/unit49r.png
+%%DATADIR%%/data/gfx/unit4r.png
+%%DATADIR%%/data/gfx/unit50r.png
+%%DATADIR%%/data/gfx/unit51r.png
+%%DATADIR%%/data/gfx/unit52r.png
+%%DATADIR%%/data/gfx/unit53r.png
+%%DATADIR%%/data/gfx/unit54r.png
+%%DATADIR%%/data/gfx/unit55r.png
+%%DATADIR%%/data/gfx/unit56r.png
+%%DATADIR%%/data/gfx/unit57r.png
+%%DATADIR%%/data/gfx/unit58r.png
+%%DATADIR%%/data/gfx/unit59r.png
+%%DATADIR%%/data/gfx/unit5r.png
+%%DATADIR%%/data/gfx/unit60r.png
+%%DATADIR%%/data/gfx/unit61r.png
+%%DATADIR%%/data/gfx/unit62r.png
+%%DATADIR%%/data/gfx/unit63r.png
+%%DATADIR%%/data/gfx/unit64.png
+%%DATADIR%%/data/gfx/unit64r.png
+%%DATADIR%%/data/gfx/unit65.png
+%%DATADIR%%/data/gfx/unit65r.png
+%%DATADIR%%/data/gfx/unit66.png
+%%DATADIR%%/data/gfx/unit66r.png
+%%DATADIR%%/data/gfx/unit67.png
+%%DATADIR%%/data/gfx/unit67r.png
+%%DATADIR%%/data/gfx/unit68.png
+%%DATADIR%%/data/gfx/unit68r.png
+%%DATADIR%%/data/gfx/unit69.png
+%%DATADIR%%/data/gfx/unit69r.png
+%%DATADIR%%/data/gfx/unit6r.png
+%%DATADIR%%/data/gfx/unit70.png
+%%DATADIR%%/data/gfx/unit70r.png
+%%DATADIR%%/data/gfx/unit71.png
+%%DATADIR%%/data/gfx/unit71r.png
+%%DATADIR%%/data/gfx/unit72.png
+%%DATADIR%%/data/gfx/unit72r.png
+%%DATADIR%%/data/gfx/unit73.png
+%%DATADIR%%/data/gfx/unit73r.png
+%%DATADIR%%/data/gfx/unit74.png
+%%DATADIR%%/data/gfx/unit74r.png
+%%DATADIR%%/data/gfx/unit75.png
+%%DATADIR%%/data/gfx/unit75r.png
+%%DATADIR%%/data/gfx/unit76.png
+%%DATADIR%%/data/gfx/unit76r.png
+%%DATADIR%%/data/gfx/unit77.png
+%%DATADIR%%/data/gfx/unit77r.png
+%%DATADIR%%/data/gfx/unit78.png
+%%DATADIR%%/data/gfx/unit78r.png
+%%DATADIR%%/data/gfx/unit79.png
+%%DATADIR%%/data/gfx/unit79r.png
+%%DATADIR%%/data/gfx/unit7r.png
+%%DATADIR%%/data/gfx/unit80.png
+%%DATADIR%%/data/gfx/unit80r.png
+%%DATADIR%%/data/gfx/unit81.png
+%%DATADIR%%/data/gfx/unit81r.png
+%%DATADIR%%/data/gfx/unit82.png
+%%DATADIR%%/data/gfx/unit82r.png
+%%DATADIR%%/data/gfx/unit83.png
+%%DATADIR%%/data/gfx/unit83r.png
+%%DATADIR%%/data/gfx/unit84.png
+%%DATADIR%%/data/gfx/unit84r.png
+%%DATADIR%%/data/gfx/unit85.png
+%%DATADIR%%/data/gfx/unit85r.png
+%%DATADIR%%/data/gfx/unit86.png
+%%DATADIR%%/data/gfx/unit86r.png
+%%DATADIR%%/data/gfx/unit87.png
+%%DATADIR%%/data/gfx/unit87r.png
+%%DATADIR%%/data/gfx/unit88.png
+%%DATADIR%%/data/gfx/unit88r.png
+%%DATADIR%%/data/gfx/unit89.png
+%%DATADIR%%/data/gfx/unit89r.png
+%%DATADIR%%/data/gfx/unit8r.png
+%%DATADIR%%/data/gfx/unit90.png
+%%DATADIR%%/data/gfx/unit90r.png
+%%DATADIR%%/data/gfx/unit91.png
+%%DATADIR%%/data/gfx/unit91r.png
+%%DATADIR%%/data/gfx/unit92.png
+%%DATADIR%%/data/gfx/unit92r.png
+%%DATADIR%%/data/gfx/unit93.png
+%%DATADIR%%/data/gfx/unit93r.png
+%%DATADIR%%/data/gfx/unit94.png
+%%DATADIR%%/data/gfx/unit94r.png
+%%DATADIR%%/data/gfx/unit95.png
+%%DATADIR%%/data/gfx/unit95r.png
+%%DATADIR%%/data/gfx/unit96.png
+%%DATADIR%%/data/gfx/unit96r.png
+%%DATADIR%%/data/gfx/unit97.png
+%%DATADIR%%/data/gfx/unit97r.png
+%%DATADIR%%/data/gfx/unit98.png
+%%DATADIR%%/data/gfx/unit98r.png
+%%DATADIR%%/data/gfx/unit99.png
+%%DATADIR%%/data/gfx/unit99r.png
+%%DATADIR%%/data/gfx/unit9r.png
+%%DATADIR%%/data/gfx/unitmini0r.png
+%%DATADIR%%/data/gfx/unitmini1r.png
+%%DATADIR%%/data/gfx/unitmini2r.png
+%%DATADIR%%/data/gfx/wall0.png
+%%DATADIR%%/data/gfx/wall0r.png
+%%DATADIR%%/data/gfx/wall1.png
+%%DATADIR%%/data/gfx/wall10.png
+%%DATADIR%%/data/gfx/wall10r.png
+%%DATADIR%%/data/gfx/wall11.png
+%%DATADIR%%/data/gfx/wall11r.png
+%%DATADIR%%/data/gfx/wall12.png
+%%DATADIR%%/data/gfx/wall12r.png
+%%DATADIR%%/data/gfx/wall13.png
+%%DATADIR%%/data/gfx/wall13r.png
+%%DATADIR%%/data/gfx/wall14.png
+%%DATADIR%%/data/gfx/wall14r.png
+%%DATADIR%%/data/gfx/wall15.png
+%%DATADIR%%/data/gfx/wall15r.png
+%%DATADIR%%/data/gfx/wall1r.png
+%%DATADIR%%/data/gfx/wall2.png
+%%DATADIR%%/data/gfx/wall2r.png
+%%DATADIR%%/data/gfx/wall3.png
+%%DATADIR%%/data/gfx/wall3r.png
+%%DATADIR%%/data/gfx/wall4.png
+%%DATADIR%%/data/gfx/wall4r.png
+%%DATADIR%%/data/gfx/wall5.png
+%%DATADIR%%/data/gfx/wall5r.png
+%%DATADIR%%/data/gfx/wall6.png
+%%DATADIR%%/data/gfx/wall6r.png
+%%DATADIR%%/data/gfx/wall7.png
+%%DATADIR%%/data/gfx/wall7r.png
+%%DATADIR%%/data/gfx/wall8.png
+%%DATADIR%%/data/gfx/wall8r.png
+%%DATADIR%%/data/gfx/wall9.png
+%%DATADIR%%/data/gfx/wall9r.png
+%%DATADIR%%/data/gfx/wallc0.png
+%%DATADIR%%/data/gfx/wallc0r.png
+%%DATADIR%%/data/gfx/warflag0r.png
+%%DATADIR%%/data/gfx/water0.png
+%%DATADIR%%/data/gfx/water1.png
+%%DATADIR%%/data/gui/editor0.png
+%%DATADIR%%/data/gui/editor1.png
+%%DATADIR%%/data/gui/editor10.png
+%%DATADIR%%/data/gui/editor11.png
+%%DATADIR%%/data/gui/editor12.png
+%%DATADIR%%/data/gui/editor13.png
+%%DATADIR%%/data/gui/editor14.png
+%%DATADIR%%/data/gui/editor15.png
+%%DATADIR%%/data/gui/editor16.png
+%%DATADIR%%/data/gui/editor17.png
+%%DATADIR%%/data/gui/editor18.png
+%%DATADIR%%/data/gui/editor19.png
+%%DATADIR%%/data/gui/editor2.png
+%%DATADIR%%/data/gui/editor20.png
+%%DATADIR%%/data/gui/editor21.png
+%%DATADIR%%/data/gui/editor22.png
+%%DATADIR%%/data/gui/editor23.png
+%%DATADIR%%/data/gui/editor24.png
+%%DATADIR%%/data/gui/editor25.png
+%%DATADIR%%/data/gui/editor26.png
+%%DATADIR%%/data/gui/editor27.png
+%%DATADIR%%/data/gui/editor28.png
+%%DATADIR%%/data/gui/editor29.png
+%%DATADIR%%/data/gui/editor3.png
+%%DATADIR%%/data/gui/editor30.png
+%%DATADIR%%/data/gui/editor31.png
+%%DATADIR%%/data/gui/editor32.png
+%%DATADIR%%/data/gui/editor33.png
+%%DATADIR%%/data/gui/editor4.png
+%%DATADIR%%/data/gui/editor5.png
+%%DATADIR%%/data/gui/editor6.png
+%%DATADIR%%/data/gui/editor7.png
+%%DATADIR%%/data/gui/editor8.png
+%%DATADIR%%/data/gui/editor9.png
+%%DATADIR%%/data/gui/yog0.png
+%%DATADIR%%/data/gui/yog1.png
+%%DATADIR%%/data/keyboard-gui.default.txt
+%%DATADIR%%/data/keyboard-mapedit.default.txt
+%%DATADIR%%/data/nicowar.default.txt
+%%DATADIR%%/data/nicowar.txt
+%%DATADIR%%/data/pal.txt
+%%DATADIR%%/data/ressources.txt
+%%DATADIR%%/data/texts.ar.txt
+%%DATADIR%%/data/texts.br.txt
+%%DATADIR%%/data/texts.ca.txt
+%%DATADIR%%/data/texts.cz.txt
+%%DATADIR%%/data/texts.de.txt
+%%DATADIR%%/data/texts.dk.txt
+%%DATADIR%%/data/texts.en.txt
+%%DATADIR%%/data/texts.es.txt
+%%DATADIR%%/data/texts.eu.txt
+%%DATADIR%%/data/texts.fr.txt
+%%DATADIR%%/data/texts.gr.txt
+%%DATADIR%%/data/texts.hu.txt
+%%DATADIR%%/data/texts.incomplete.txt
+%%DATADIR%%/data/texts.it.txt
+%%DATADIR%%/data/texts.keys.txt
+%%DATADIR%%/data/texts.list.txt
+%%DATADIR%%/data/texts.nl.txt
+%%DATADIR%%/data/texts.pl.txt
+%%DATADIR%%/data/texts.pt.txt
+%%DATADIR%%/data/texts.ro.txt
+%%DATADIR%%/data/texts.ru.txt
+%%DATADIR%%/data/texts.si.txt
+%%DATADIR%%/data/texts.sk.txt
+%%DATADIR%%/data/texts.sr.txt
+%%DATADIR%%/data/texts.sv.txt
+%%DATADIR%%/data/texts.tr.txt
+%%DATADIR%%/data/texts.zh-tw.txt
+%%DATADIR%%/data/units.txt
+%%DATADIR%%/data/unitsSkins.txt
+%%DATADIR%%/data/zik/a1.ogg
+%%DATADIR%%/data/zik/a2.ogg
+%%DATADIR%%/data/zik/a3.ogg
+%%DATADIR%%/data/zik/intro.ogg
+%%DATADIR%%/data/zik/menu.ogg
+%%DATADIR%%/maps/A_big_pond.map
+%%DATADIR%%/maps/Centerfolds_2.map
+%%DATADIR%%/maps/Easy_Three.map
+%%DATADIR%%/maps/FourSquares1.map
+%%DATADIR%%/maps/G2.map
+%%DATADIR%%/maps/Garden_3.map
+%%DATADIR%%/maps/Holiday_Island_2.map
+%%DATADIR%%/maps/Isles.map
+%%DATADIR%%/maps/Migration.map
+%%DATADIR%%/maps/Muka.map
+%%DATADIR%%/maps/One_on_One.map
+%%DATADIR%%/maps/Playground.map
+%%DATADIR%%/maps/Scarse_Supply.map
+%%DATADIR%%/maps/SmallForTwo.map
+%%DATADIR%%/maps/Tower_Defense_for_2.map
+%%DATADIR%%/maps/Triangle.map
+%%DATADIR%%/maps/WaterInTheDesert.map
+%%DATADIR%%/maps/Wild_River.map
+%%DATADIR%%/maps/a_new_try.map
+%%DATADIR%%/maps/newislands_green_blue.map
+%%DATADIR%%/maps/stone_bases.map
+%%DATADIR%%/maps/strange2.map
+%%DATADIR%%/maps/the_sand_square.map
+%%DATADIR%%/maps/weakness.map
+%%DATADIR%%/scripts/tutorial_part1.sgsl
+%%DATADIR%%/scripts/tutorial_part2.sgsl
+%%DATADIR%%/scripts/tutorial_part3.sgsl
+%%DATADIR%%/scripts/tutorial_part4.sgsl
+share/icons/hicolor/128x128/apps/glob2.png
+share/icons/hicolor/16x16/apps/glob2.png
+share/icons/hicolor/24x24/apps/glob2.png
+share/icons/hicolor/32x32/apps/glob2.png
+share/icons/hicolor/48x48/apps/glob2.png
+share/icons/hicolor/64x64/apps/glob2.png
+share/pixmaps/glob2.png
diff --git a/games/marsnomercy/Makefile b/games/marsnomercy/Makefile
new file mode 100644
index 000000000000..e495ee113738
--- /dev/null
+++ b/games/marsnomercy/Makefile
@@ -0,0 +1,55 @@
+# Created by: Jose Alonso Cardenas Marquez <acardenas@bsd.org.pe>
+# $FreeBSD$
+
+PORTNAME= marsnomercy
+PORTVERSION= 0.2.1
+PORTREVISION= 13
+CATEGORIES= games
+MASTER_SITES= SF/mars/mars/${PORTVERSION}
+DISTNAME= mars-${PORTVERSION}-src
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Turn-based strategy game setting on Mars
+
+LICENSE= GPLv2 # version unspecified actually
+
+LIB_DEPENDS= libpng.so:graphics/png
+
+USES= compiler gl scons:python2 sdl
+USE_GL= gl
+USE_SDL= sdl image ttf
+SCONS_ARGS= prefix=${PREFIX}
+
+CXXFLAGS+= ${CXXFLAGS_${CHOSEN_COMPILER_TYPE}}
+CXXFLAGS_clang= -Wno-c++11-narrowing
+SUB_FILES= mars-nomercy pkg-message
+WRKSRC= ${WRKDIR}/mars-${PORTVERSION}
+
+PLIST_FILES= bin/mars-nomercy \
+ libexec/mars
+PLIST_DIRS= %%DATADIR%%/img/units/mercenaries
+PORTDATA= *
+
+OPTIONS_DEFINE= DEBUG OPENGL
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MDEBUG}
+SCONS_ARGS+= debug=1
+.else
+SCONS_ARGS+= debug=0
+.endif
+
+.if ${PORT_OPTIONS:MOPENGL}
+SCONS_ARGS+= with_opengl=1
+.else
+SCONS_ARGS+= with_opengl=0
+.endif
+
+do-install:
+ ${INSTALL_SCRIPT} ${WRKDIR}/mars-nomercy ${STAGEDIR}${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKSRC}/mars ${STAGEDIR}${PREFIX}/libexec/mars
+ cd ${WRKSRC}/data && ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR}
+ @${RM} ${STAGEDIR}${DATADIR}/SConscript
+
+.include <bsd.port.mk>
diff --git a/games/marsnomercy/distinfo b/games/marsnomercy/distinfo
new file mode 100644
index 000000000000..0e0e54bca95e
--- /dev/null
+++ b/games/marsnomercy/distinfo
@@ -0,0 +1,2 @@
+SHA256 (mars-0.2.1-src.tar.gz) = 6c3f78a505f6b2989dd024ee3b1e707a38981ebe0177d6eca32b40e70ed16f49
+SIZE (mars-0.2.1-src.tar.gz) = 2728661
diff --git a/games/marsnomercy/files/mars-nomercy.in b/games/marsnomercy/files/mars-nomercy.in
new file mode 100644
index 000000000000..77318dc2d453
--- /dev/null
+++ b/games/marsnomercy/files/mars-nomercy.in
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ -d "~/.marsnomercy" ]; then
+ cd ~/.marsomercy || exit 1
+ exec %%PREFIX%%/libexec/mars "$@"
+else
+ cd %%DATADIR%% || exit 1
+ find * -type d -exec mkdir -p ~/.marsnomercy/data/{} \; || exit 1
+ find * -type f -exec ln -s %%DATADIR%%/{} ~/.marsnomercy/data/{} \; 2>/dev/null || exit 1
+ cd ~/.marsnomercy || exit 1
+ exec %%PREFIX%%/libexec/mars "$@"
+fi
diff --git a/games/marsnomercy/files/patch-SConstruct b/games/marsnomercy/files/patch-SConstruct
new file mode 100644
index 000000000000..a6286c75b53a
--- /dev/null
+++ b/games/marsnomercy/files/patch-SConstruct
@@ -0,0 +1,108 @@
+--- SConstruct.orig 2006-12-19 00:56:15 UTC
++++ SConstruct
+@@ -1,22 +1,22 @@
+ import sys, os
+
+-# create build environment and options
++# create build environment and variables
+ env = Environment()
+-opts = Options()
++opts = Variables()
+
+ # OPTION debug
+-opts.Add(BoolOption('debug', 'Set to yes (or 1) to build for debug', 'no'))
++opts.Add(BoolVariable('debug', 'Set to yes (or 1) to build for debug', 'no'))
+ # OPTION strip
+-opts.Add(BoolOption('strip', 'Set to no (or 0) to avoid stripping binaries', 'yes'))
++opts.Add(BoolVariable('strip', 'Set to no (or 0) to avoid stripping binaries', 'yes'))
+ # OPTION warning
+-opts.Add(BoolOption('warnings', 'Set to yes (or 1) to print all warnings', 'yes'))
++opts.Add(BoolVariable('warnings', 'Set to yes (or 1) to print all warnings', 'yes'))
+ # OPTION with_opengl
+-opts.Add(BoolOption('with_opengl', 'Set to no (or 0) if you do not want OpenGL support in the game', 'yes'))
++opts.Add(BoolVariable('with_opengl', 'Set to no (or 0) if you do not want OpenGL support in the game', 'yes'))
+ # OPTION root & prefix
+-opts.Add(PathOption('root', 'Path to the fakeroot directory', '/'))
+-opts.Add(PathOption('prefix', 'Path to prefix to default destinations', '/usr/local'))
+-# Adding options to the environment
+-env = Environment(options = opts)
++opts.Add(PathVariable('root', 'Path to the fakeroot directory', '/'))
++opts.Add(PathVariable('prefix', 'Path to prefix to default destinations', '/usr/local'))
++# Adding variables to the environment
++env = Environment(variables = opts)
+
+ if 'install' in sys.argv:
+ root = ARGUMENTS.get('root', '/')
+@@ -33,17 +33,17 @@ else:
+
+ # OPTION no_mingw
+ if env['PLATFORM'] == 'cygwin':
+- opts.Add(BoolOption('no_mingw', 'Set to yes (or 1) to build without mingw', 'no'))
+- env = Environment(options = opts)
++ opts.Add(BoolVariable('no_mingw', 'Set to yes (or 1) to build without mingw', 'no'))
++ env = Environment(variables = opts)
+
+ # PLATFORM mingw under cygwin
+ if env['PLATFORM'] == 'cygwin' and not int(env['no_mingw']):
+- # add mingw specific options
+- opts.AddOptions(
+- PathOption('mingw_cygdir', 'where your mingw installation is located under cygwin', '/mingw'),
+- PathOption('mingw_windir', 'where your mingw installation is located under cygwin', 'F:/Programmi/Dev-Cpp')
++ # add mingw specific variables
++ opts.AddVariables(
++ PathVariable('mingw_cygdir', 'where your mingw installation is located under cygwin', '/mingw'),
++ PathVariable('mingw_windir', 'where your mingw installation is located under cygwin', 'F:/Programmi/Dev-Cpp')
+ )
+- env = Environment(options = opts)
++ env = Environment(variables = opts)
+
+ mingw_cygdir = env['mingw_cygdir']
+ mingw_windir = env['mingw_windir']
+@@ -57,15 +57,21 @@ if env['PLATFORM'] == 'cygwin' and not i
+
+ # PLATFORM posix or pure cygwin
+ else:
++ # Section used for FreeBSD port
++ LOCALBASE = os.environ['LOCALBASE']
++ LOCALBASE = os.environ['LOCALBASE']
+ # determine compiler and linker flags for SDL
+- env.ParseConfig('sdl-config --cflags')
+- env.ParseConfig('sdl-config --libs')
++ SDL_CONFIG = os.environ['SDL_CONFIG']
++ env.ParseConfig(SDL_CONFIG + ' --cflags')
++ env.ParseConfig(SDL_CONFIG + ' --libs')
+ # add additional compiler flags
+- if not int(env['debug']):
+- env.Append(CXXFLAGS = ['-O2'])
+-
++ env.Replace(CC = os.environ['CC'])
++ env.Replace(CXX = os.environ['CXX'])
++ env.Replace(CPPPATH = [LOCALBASE + '/include',LOCALBASE+ '/include'])
++ env.Replace(LIBPATH = [LOCALBASE + '/lib',LOCALBASE+ '/lib'])
++ env.Append(CXXFLAGS = os.environ['CXXFLAGS'] + ' `' + SDL_CONFIG + ' --cflags`')
+
+-# generate help for options
++# generate help for variables
+ Help(opts.GenerateHelpText(env))
+
+ # build for debug
+@@ -92,16 +98,16 @@ if data_dir != '': # installation requir
+ if not env.GetOption('clean'):
+ print ":: Checking for libs"
+ conf = Configure(env)
+- if not conf.CheckLibWithHeader('SDL', 'SDL.h', 'c', 'SDL_Init(SDL_INIT_VIDEO);', autoadd = 0):
++ if not conf.CheckLibWithHeader('SDL', 'SDL/SDL.h', 'c', 'SDL_Init(SDL_INIT_VIDEO);', autoadd = 0):
+ print 'Did not find libSDL, exiting!'
+ Exit(1)
+ if not conf.CheckLibWithHeader('png', 'png.h', 'c', 'png_error(NULL, "test");'):
+ print 'Did not find libpng, exiting!'
+ Exit(1)
+- if not conf.CheckLibWithHeader('SDL_image', 'SDL_image.h', 'c', 'IMG_GetError();'):
++ if not conf.CheckLibWithHeader('SDL_image', 'SDL/SDL_image.h', 'c', 'IMG_GetError();'):
+ print 'Did not find libSDL_image, exiting!'
+ Exit(1)
+- if not conf.CheckLibWithHeader('SDL_ttf', 'SDL_ttf.h', 'c', 'TTF_Init();'):
++ if not conf.CheckLibWithHeader('SDL_ttf', 'SDL/SDL_ttf.h', 'c', 'TTF_Init();'):
+ print 'Did not find libSDL_ttf, exiting!'
+ Exit(1)
+ if int(env['with_opengl']):
diff --git a/games/marsnomercy/files/pkg-message.in b/games/marsnomercy/files/pkg-message.in
new file mode 100644
index 000000000000..d09c1cd95abc
--- /dev/null
+++ b/games/marsnomercy/files/pkg-message.in
@@ -0,0 +1,14 @@
+[
+{ type: install
+ message: <<EOM
+1) I renamed this port to marsnomercy (Mars Land of No Mercy), because exist a
+ port using mars name (cad/mars).
+
+2) Run mars:
+
+ # mars-nomercy
+
+3) Enjoy it ;)
+EOM
+}
+]
diff --git a/games/marsnomercy/pkg-descr b/games/marsnomercy/pkg-descr
new file mode 100644
index 000000000000..071384d6a487
--- /dev/null
+++ b/games/marsnomercy/pkg-descr
@@ -0,0 +1,21 @@
+Mars, Land of No Mercy is a turn-based strategy game setting on Mars during the
+early stages of human colonization.The player embodies the leader of a
+mercenary team, landed on Mars to take advantage of conqueror battles between
+the Worldwide Colonizer Corporations.
+
+The main purpose is to command his team trying to find them commissions,
+training and leading them in battle, while still being aware of financial and
+instrumental resources by administering them.The Mech is the fundamental craft
+used by mercenaries, but they won't lack of other kind of units, as well as
+troops.
+
+The game most remarkable point is the incredible liberty given to the player
+and therefore the great strategic side that derives. It is indeed up to the
+player to decide how to behave towards the one who recruited him, and the
+enemies of turn.
+
+Basically every action leads to a reaction, so it is strongly recommended to
+keep a good and consistent behavior to achieve confidence from Corporations,
+and avoid being excluded by them.
+
+WWW: http://mars.sourceforge.net/
diff --git a/games/netpanzer/Makefile b/games/netpanzer/Makefile
new file mode 100644
index 000000000000..7a0bf9b1a855
--- /dev/null
+++ b/games/netpanzer/Makefile
@@ -0,0 +1,53 @@
+# $FreeBSD$
+
+PORTNAME= netpanzer
+PORTVERSION= 0.8.7
+DISTVERSIONSUFFIX= -source
+CATEGORIES= games
+MASTER_SITES= http://www.netpanzer.info/Download/NetPanzer/Releases/${PORTVERSION}/
+
+MAINTAINER= madpilot@FreeBSD.org
+COMMENT= Real time, isometric view, tank multiplayer strategy game
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LDFLAGS+= -lpthreads
+
+USES= gnome scons:python2 sdl zip
+USE_SDL= sdl mixer image
+USE_GNOME= libxml2
+MAKE_ARGS+= datadir="${DATADIR}"
+NO_WRKSUBDIR= yes
+
+PLIST_FILES= bin/netpanzer \
+ share/applications/netpanzer.desktop \
+ share/pixmaps/netpanzer.png \
+ share/pixmaps/netpanzer.xpm
+
+PORTDOCS= *
+PORTDATA= *
+
+OPTIONS_DEFINE= DOCS
+
+post-configure:
+ ${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/SConstruct
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/netpanzer ${STAGEDIR}${PREFIX}/bin
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} "cache maps pics powerups scripts sound units wads" \
+ ${STAGEDIR}${DATADIR})
+ ${INSTALL_DATA} ${WRKSRC}/support/win32/netpanzer.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKSRC}/netpanzer.png ${WRKSRC}/support/icon/netpanzer.xpm \
+ ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} COPYING README ${STAGEDIR}${DOCSDIR})
+ (cd ${WRKSRC}/docs && ${INSTALL_DATA} code-notes.txt coding.txt old/serverhowto.html \
+ ${STAGEDIR}${DOCSDIR})
+
+do-fetch-svn:
+ svn export svn://svn.berlios.de/${PORTNAME}/tags/${PORTNAME}/${PORTVERSION} ${PORTNAME}-${PORTVERSION}
+ tar cjf ${PORTNAME}-${PORTVERSION}.tar.bz2 ${PORTNAME}-${PORTVERSION}
+
+.include <bsd.port.mk>
diff --git a/games/netpanzer/distinfo b/games/netpanzer/distinfo
new file mode 100644
index 000000000000..0b7f77bf3ba1
--- /dev/null
+++ b/games/netpanzer/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1516265645
+SHA256 (netpanzer-0.8.7-source.zip) = 90e2b78d43cc32fb3f6af027788162dc9d272941f9630b43fc34f203a55c86a7
+SIZE (netpanzer-0.8.7-source.zip) = 13466285
diff --git a/games/netpanzer/files/patch-SConstruct b/games/netpanzer/files/patch-SConstruct
new file mode 100644
index 000000000000..a4bf784e5ad8
--- /dev/null
+++ b/games/netpanzer/files/patch-SConstruct
@@ -0,0 +1,19 @@
+--- SConstruct.orig 2016-04-09 13:14:00 UTC
++++ SConstruct
+@@ -95,7 +95,7 @@ opts.AddVariables(
+ ('compilerprefix', 'sets the prefix for the cross linux compiler, example: i686-pc-linux-gnu-', ''),
+ )
+
+-env = Environment(ENV = os.environ, options = opts)
++env = Environment(ENV = os.environ, options = opts, CC = os.environ['CC'], CXX = os.environ['CXX'])
+ Help(opts.GenerateHelpText(env))
+
+ env.Append( CCFLAGS = [ '-DPACKAGE_VERSION=\\"' + NPVERSION + '\\"' ] )
+@@ -202,6 +202,7 @@ elif thisplatform == 'win32':
+ else:
+ networkenv.ParseConfig(env['sdlconfig'] + ' --cflags --libs')
+ env.ParseConfig(env['sdlconfig'] + ' --cflags --libs')
++ env.Append( _LIBFLAGS = [ '-L%%LOCALBASE%%/lib' ] )
+ # note: for some magic reason, now doesn't need to put the full path for
+ # SDL_mixer when using mingw crosscompilation
+ env.Append( LIBS = ['SDL_mixer' ] )
diff --git a/games/netpanzer/files/patch-src_Lib_Network_Address.hpp b/games/netpanzer/files/patch-src_Lib_Network_Address.hpp
new file mode 100644
index 000000000000..64e303d095ca
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_Network_Address.hpp
@@ -0,0 +1,11 @@
+--- src/Lib/Network/Address.hpp.orig 2016-04-09 13:14:00 UTC
++++ src/Lib/Network/Address.hpp
+@@ -62,7 +62,7 @@ class Address (public)
+ struct sockaddr * getSockaddr() const { return (struct sockaddr *)&ss; };
+ socklen_t getSockaddrLen() const
+ {
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(__FreeBSD__)
+ return sizeof(sockaddr_in);
+ #else
+ return ss_len;
diff --git a/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp b/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp
new file mode 100644
index 000000000000..e73e49b5f30d
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_Network_SocketBase.cpp
@@ -0,0 +1,11 @@
+--- src/Lib/Network/SocketBase.cpp.orig 2016-04-09 13:14:00 UTC
++++ src/Lib/Network/SocketBase.cpp
+@@ -147,7 +147,7 @@ SocketBase::bindSocketTo(const Address& toaddr) throw(
+ {
+ if ( state == CONFIGURED )
+ {
+- int res = bind(sockfd, toaddr.getSockaddr(), toaddr.getSockaddrLen());
++ int res = ::bind(sockfd, toaddr.getSockaddr(), toaddr.getSockaddrLen());
+ if(res == SOCKET_ERROR) {
+ lastError = GET_NET_ERROR();
+ doClose();
diff --git a/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp b/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp
new file mode 100644
index 000000000000..f3fd7b704651
--- /dev/null
+++ b/games/netpanzer/files/patch-src_Lib_optionmm_command__line.hpp
@@ -0,0 +1,17 @@
+--- src/Lib/optionmm/command_line.hpp.orig 2007-04-16 13:36:42 UTC
++++ src/Lib/optionmm/command_line.hpp
+@@ -212,7 +212,13 @@ struct toggle_value<bool>
+ {
+ x = !x;
+ }
+-#if defined(__GNUC__) && __GNUC__ >= 2
++
++#if defined(__clang__)
++ inline void operator()(std::__bit_reference<std::vector<bool> > x)
++ {
++ x.flip();
++ }
++#elif defined(__GNUC__) && __GNUC__ >= 2
+ inline void operator()(std::_Bit_reference x)
+ {
+ x.flip();
diff --git a/games/netpanzer/pkg-descr b/games/netpanzer/pkg-descr
new file mode 100644
index 000000000000..397b69683180
--- /dev/null
+++ b/games/netpanzer/pkg-descr
@@ -0,0 +1,8 @@
+netPanzer is an online multiplayer tactical warfare game designed
+for FAST ACTION combat. Gameplay concentrates on the core -- no
+resource management is needed. The game is based on quick tactical
+action and unit management in real-time. Battles progress quickly
+and constantly as destroyed players respawn with a set of new units.
+Players can join or leave multiplayer games at any time.
+
+WWW: http://www.netpanzer.org/
diff --git a/games/pingus/Makefile b/games/pingus/Makefile
new file mode 100644
index 000000000000..d9c1f593d9b3
--- /dev/null
+++ b/games/pingus/Makefile
@@ -0,0 +1,48 @@
+# Created by: Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= pingus
+PORTVERSION= 0.7.6
+PORTREVISION= 22
+CATEGORIES= games
+MASTER_SITES= https://mirror.amdmi3.ru/distfiles/
+
+MAINTAINER= amdmi3@FreeBSD.org
+COMMENT= Free Lemmings-like game
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= ${LOCALBASE}/include/boost/signals2.hpp:devel/boost-libs
+LIB_DEPENDS= libpng.so:graphics/png
+
+USES= compiler:c++11-lib gl iconv scons:python2 sdl tar:bzip2 xorg
+USE_GL= gl
+USE_SDL= sdl image mixer
+LIBS+= ${ICONV_LIB}
+MAKE_ARGS= LIBS="${LIBS}"
+
+PLIST_FILES= bin/${PORTNAME} \
+ share/pixmaps/${PORTNAME}.png
+PORTDATA= *
+
+DESKTOP_ENTRIES="Pingus" \
+ "" \
+ "${PORTNAME}" \
+ "${PORTNAME}" \
+ "Game;LogicGame;" \
+ false
+
+post-patch:
+ @${REINPLACE_CMD} -e '/g_path_manager.set_path("data")/ s|data|${DATADIR}|g' \
+ ${WRKSRC}/src/pingus/pingus_main.cpp
+ @${REINPLACE_CMD} -e '/CheckLib.*iconv/ d' ${WRKSRC}/SConscript
+
+do-install:
+ (cd ${WRKSRC}/data && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${DATADIR})
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${INSTALL_DATA} ${WRKSRC}/data/images/icons/pingus-icon.png \
+ ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME}.png
+
+.include <bsd.port.mk>
diff --git a/games/pingus/distinfo b/games/pingus/distinfo
new file mode 100644
index 000000000000..74b7bcfbbd9c
--- /dev/null
+++ b/games/pingus/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1324763207
+SHA256 (pingus-0.7.6.tar.bz2) = 759c1253075d1e72691bc1e770b24cdd51917041fd1857c1daf85b65a6686460
+SIZE (pingus-0.7.6.tar.bz2) = 12622268
+SHA256 (fef8cf6512fa.patch) = cb4788d014fd4c479d95203c442ffb65a8bdb4223219a3cc5e3ab09f9b3a4894
+SIZE (fef8cf6512fa.patch) = 12316
diff --git a/games/pingus/files/patch-SConscript b/games/pingus/files/patch-SConscript
new file mode 100644
index 000000000000..214f4d3ebb2f
--- /dev/null
+++ b/games/pingus/files/patch-SConscript
@@ -0,0 +1,13 @@
+Properly split multiple arguments passed via CXXFLAGS
+--- SConscript.orig 2011-12-24 21:46:47 UTC
++++ SConscript
+@@ -120,6 +120,9 @@ class Project:
+ 'CheckSDLLib': CheckSDLLib,
+ 'CheckIconv': CheckIconv,
+ })
++
++ self.env["CXXFLAGS"] = sum(map (lambda x: x.split(" "), self.env["CXXFLAGS"]), [])
++
+ self.fatal_error = ""
+ self.reports = ""
+
diff --git a/games/pingus/files/patch-boost-signals2 b/games/pingus/files/patch-boost-signals2
new file mode 100644
index 000000000000..e412ffbb2e73
--- /dev/null
+++ b/games/pingus/files/patch-boost-signals2
@@ -0,0 +1,380 @@
+From fef8cf6512fa4aa09e87643c22ef66de9ec7bb41 Mon Sep 17 00:00:00 2001
+From: Ingo Ruhnke <grumbel@gmail.com>
+Date: Sat, 26 Jul 2014 20:49:11 +0200
+Subject: [PATCH] Switched to boost::signals2
+
+---
+ SConscript | 5 ++---
+ src/editor/button.hpp | 4 ++--
+ src/editor/checkbox.hpp | 4 ++--
+ src/editor/combobox.hpp | 4 ++--
+ src/editor/file_list.hpp | 4 ++--
+ src/editor/inputbox.hpp | 6 +++---
+ src/editor/message_box.hpp | 2 +-
+ src/editor/object_selector.cpp | 4 ++--
+ src/editor/viewport.hpp | 4 ++--
+ src/pingus/components/check_box.hpp | 4 ++--
+ src/pingus/components/choice_box.hpp | 4 ++--
+ src/pingus/components/slider_box.hpp | 4 ++--
+ src/pingus/config_manager.hpp | 28 ++++++++++++++--------------
+ src/pingus/screens/option_menu.hpp | 4 ++--
+ 14 files changed, 40 insertions(+), 41 deletions(-)
+
+diff --git a/SConscript b/SConscript
+index 758567f51..c4d25a8a9 100644
+--- SConscript
++++ SConscript
+@@ -187,9 +187,8 @@ class Project:
+ 'src/engine/input/xinput/xinput_device.cpp'])
+
+ def configure_boost(self):
+- if not self.conf.CheckLibWithHeader('boost_signals', 'boost/signals.hpp', 'c++'):
+- if not self.conf.CheckLibWithHeader('boost_signals-mt', 'boost/signals.hpp', 'c++'):
+- self.fatal_error += " * library 'boost_signals' not found\n"
++ if not self.conf.CheckHeader('boost/signals2.hpp', '<>', 'c++'):
++ self.fatal_error += " * library 'boost_signals2' not found\n"
+
+ def configure_png(self):
+ if self.conf.CheckMyProgram('pkg-config'):
+diff --git a/src/editor/button.hpp b/src/editor/button.hpp
+index c85d7da9e..d89dfe669 100644
+--- src/editor/button.hpp
++++ src/editor/button.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_BUTTON_HPP
+ #define HEADER_PINGUS_EDITOR_BUTTON_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -48,7 +48,7 @@ public:
+ void enable() { enabled = true; }
+ void disable() { enabled = false; }
+
+- boost::signal<void()> on_click;
++ boost::signals2::signal<void()> on_click;
+
+ private:
+ Button (const Button&);
+diff --git a/src/editor/checkbox.hpp b/src/editor/checkbox.hpp
+index 7c3bc835f..66382d79b 100644
+--- src/editor/checkbox.hpp
++++ src/editor/checkbox.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_CHECKBOX_HPP
+ #define HEADER_PINGUS_EDITOR_CHECKBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -40,7 +40,7 @@ public:
+ bool is_checked() const { return checked; }
+ void on_primary_button_press(int x, int y);
+
+- boost::signal<void (bool)> on_change;
++ boost::signals2::signal<void (bool)> on_change;
+
+ private:
+ Checkbox (const Checkbox&);
+diff --git a/src/editor/combobox.hpp b/src/editor/combobox.hpp
+index 0ca742593..603556bd9 100644
+--- src/editor/combobox.hpp
++++ src/editor/combobox.hpp
+@@ -18,7 +18,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_COMBOBOX_HPP
+ #define HEADER_PINGUS_EDITOR_COMBOBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -88,7 +88,7 @@ public:
+
+ void update_layout() {}
+
+- boost::signal<void (const ComboItem&)> on_select;
++ boost::signals2::signal<void (const ComboItem&)> on_select;
+
+ private:
+ Combobox();
+diff --git a/src/editor/file_list.hpp b/src/editor/file_list.hpp
+index cc4bba2de..85efe6aa0 100644
+--- src/editor/file_list.hpp
++++ src/editor/file_list.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_FILE_LIST_HPP
+ #define HEADER_PINGUS_EDITOR_FILE_LIST_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -61,7 +61,7 @@ public:
+ bool has_more_next_pages();
+ bool has_more_prev_pages();
+
+- boost::signal<void (const System::DirectoryEntry&)> on_click;
++ boost::signals2::signal<void (const System::DirectoryEntry&)> on_click;
+
+ private:
+ int items_per_page();
+diff --git a/src/editor/inputbox.hpp b/src/editor/inputbox.hpp
+index cad9663ec..87321dbba 100644
+--- src/editor/inputbox.hpp
++++ src/editor/inputbox.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_INPUTBOX_HPP
+ #define HEADER_PINGUS_EDITOR_INPUTBOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -40,8 +40,8 @@ public:
+
+ void update_layout() {}
+
+- boost::signal<void (const std::string&)> on_change;
+- boost::signal<void (const std::string&)> on_enter;
++ boost::signals2::signal<void (const std::string&)> on_change;
++ boost::signals2::signal<void (const std::string&)> on_enter;
+
+ private:
+ Inputbox (const Inputbox&);
+diff --git a/src/editor/message_box.hpp b/src/editor/message_box.hpp
+index 385387a61..d885767cf 100644
+--- src/editor/message_box.hpp
++++ src/editor/message_box.hpp
+@@ -45,7 +45,7 @@ public:
+ void on_cancel_button();
+
+ public:
+- boost::signal<void()> on_ok;
++ boost::signals2::signal<void()> on_ok;
+
+ private:
+ MessageBox(const MessageBox&);
+diff --git a/src/editor/object_selector.cpp b/src/editor/object_selector.cpp
+index 28e306826..f3a36b5e8 100644
+--- src/editor/object_selector.cpp
++++ src/editor/object_selector.cpp
+@@ -16,7 +16,7 @@
+
+ #include "editor/object_selector.hpp"
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "editor/generic_level_obj.hpp"
+ #include "editor/gui_style.hpp"
+@@ -47,7 +47,7 @@ private:
+ std::string tooltip;
+
+ public:
+- boost::signal<void()> on_click;
++ boost::signals2::signal<void()> on_click;
+
+ public:
+ ObjectSelectorButton(ObjectSelectorList* object_list_,
+diff --git a/src/editor/viewport.hpp b/src/editor/viewport.hpp
+index 1ae9eff7c..18868254d 100644
+--- src/editor/viewport.hpp
++++ src/editor/viewport.hpp
+@@ -18,7 +18,7 @@
+ #ifndef HEADER_PINGUS_EDITOR_VIEWPORT_HPP
+ #define HEADER_PINGUS_EDITOR_VIEWPORT_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+ #include <set>
+
+ #include "editor/selection.hpp"
+@@ -148,7 +148,7 @@ public:
+
+ void clear_selection();
+
+- boost::signal<void (const Selection&)> selection_changed;
++ boost::signals2::signal<void (const Selection&)> selection_changed;
+ private:
+ Viewport();
+ Viewport (const Viewport&);
+diff --git a/src/pingus/components/check_box.hpp b/src/pingus/components/check_box.hpp
+index 00e23b764..5bef50f6b 100644
+--- src/pingus/components/check_box.hpp
++++ src/pingus/components/check_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_CHECK_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_CHECK_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/display/sprite.hpp"
+ #include "engine/gui/rect_component.hpp"
+@@ -39,7 +39,7 @@ public:
+
+ void set_state(bool v, bool send_signal);
+
+- boost::signal<void (bool)> on_change;
++ boost::signals2::signal<void (bool)> on_change;
+
+ private:
+ CheckBox (const CheckBox&);
+diff --git a/src/pingus/components/choice_box.hpp b/src/pingus/components/choice_box.hpp
+index 49d6e1948..ef51b6dd2 100644
+--- src/pingus/components/choice_box.hpp
++++ src/pingus/components/choice_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_CHOICE_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_CHOICE_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -36,7 +36,7 @@ public:
+ void add_choice(const std::string& str);
+ void set_current_choice(int choice);
+
+- boost::signal<void (std::string)> on_change;
++ boost::signals2::signal<void (std::string)> on_change;
+
+ private:
+ ChoiceBox (const ChoiceBox&);
+diff --git a/src/pingus/components/slider_box.hpp b/src/pingus/components/slider_box.hpp
+index ae4d92406..75118eac2 100644
+--- src/pingus/components/slider_box.hpp
++++ src/pingus/components/slider_box.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_COMPONENTS_SLIDER_BOX_HPP
+ #define HEADER_PINGUS_PINGUS_COMPONENTS_SLIDER_BOX_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "engine/gui/rect_component.hpp"
+
+@@ -39,7 +39,7 @@ public:
+
+ void set_value(int v);
+
+- boost::signal<void (int)> on_change;
++ boost::signals2::signal<void (int)> on_change;
+
+ private:
+ SliderBox (const SliderBox&);
+diff --git a/src/pingus/config_manager.hpp b/src/pingus/config_manager.hpp
+index b07b83e65..4cf08e046 100644
+--- src/pingus/config_manager.hpp
++++ src/pingus/config_manager.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_CONFIG_MANAGER_HPP
+ #define HEADER_PINGUS_PINGUS_CONFIG_MANAGER_HPP
+
+-#include <boost/signal.hpp>
++#include <boost/signals2.hpp>
+
+ #include "math/size.hpp"
+ #include "pingus/options.hpp"
+@@ -39,55 +39,55 @@ public:
+
+ void set_master_volume(int);
+ int get_master_volume() const;
+- boost::signal<void(int)> on_master_volume_change;
++ boost::signals2::signal<void(int)> on_master_volume_change;
+
+ void set_sound_volume(int);
+ int get_sound_volume() const;
+- boost::signal<void(int)> on_sound_volume_change;
++ boost::signals2::signal<void(int)> on_sound_volume_change;
+
+ void set_music_volume(int);
+ int get_music_volume() const;
+- boost::signal<void(int)> on_music_volume_change;
++ boost::signals2::signal<void(int)> on_music_volume_change;
+
+ void set_fullscreen_resolution(const Size& size);
+ Size get_fullscreen_resolution() const;
+- boost::signal<void(Size)> on_fullscreen_resolution_change;
++ boost::signals2::signal<void(Size)> on_fullscreen_resolution_change;
+
+ void set_fullscreen(bool);
+ bool get_fullscreen() const;
+- boost::signal<void(bool)> on_fullscreen_change;
++ boost::signals2::signal<void(bool)> on_fullscreen_change;
+
+ void set_renderer(FramebufferType type);
+ FramebufferType get_renderer() const;
+- boost::signal<void(FramebufferType)> on_renderer_change;
++ boost::signals2::signal<void(FramebufferType)> on_renderer_change;
+
+ void set_resizable(bool);
+ bool get_resizable() const;
+- boost::signal<void(bool)> on_resizable_change;
++ boost::signals2::signal<void(bool)> on_resizable_change;
+
+ void set_mouse_grab(bool);
+ bool get_mouse_grab() const;
+- boost::signal<void(bool)> on_mouse_grab_change;
++ boost::signals2::signal<void(bool)> on_mouse_grab_change;
+
+ void set_print_fps(bool);
+ bool get_print_fps() const;
+- boost::signal<void(bool)> on_print_fps_change;
++ boost::signals2::signal<void(bool)> on_print_fps_change;
+
+ void set_language(const tinygettext::Language&);
+ tinygettext::Language get_language() const;
+- boost::signal<void(const tinygettext::Language&)> on_language_change;
++ boost::signals2::signal<void(const tinygettext::Language&)> on_language_change;
+
+ void set_software_cursor(bool);
+ bool get_software_cursor() const;
+- boost::signal<void(bool)> on_software_cursor_change;
++ boost::signals2::signal<void(bool)> on_software_cursor_change;
+
+ void set_auto_scrolling(bool);
+ bool get_auto_scrolling() const;
+- boost::signal<void(bool)> on_auto_scrolling_change;
++ boost::signals2::signal<void(bool)> on_auto_scrolling_change;
+
+ void set_drag_drop_scrolling(bool);
+ bool get_drag_drop_scrolling() const;
+- boost::signal<void(bool)> on_drag_drop_scrolling_change;
++ boost::signals2::signal<void(bool)> on_drag_drop_scrolling_change;
+
+ private:
+ ConfigManager (const ConfigManager&);
+diff --git a/src/pingus/screens/option_menu.hpp b/src/pingus/screens/option_menu.hpp
+index 60b1578d2..154ef0f69 100644
+--- src/pingus/screens/option_menu.hpp
++++ src/pingus/screens/option_menu.hpp
+@@ -17,7 +17,7 @@
+ #ifndef HEADER_PINGUS_PINGUS_SCREENS_OPTION_MENU_HPP
+ #define HEADER_PINGUS_PINGUS_SCREENS_OPTION_MENU_HPP
+
+-#include <boost/signals.hpp>
++#include <boost/signals2.hpp>
+ #include <map>
+ #include <vector>
+
+@@ -66,7 +66,7 @@ private:
+ //Label* defaults_label;
+ //CheckBox* defaults_box;
+
+- typedef std::vector<boost::signals::connection> Connections;
++ typedef std::vector<boost::signals2::connection> Connections;
+ Connections connections;
+
+ tinygettext::Language m_language;
+--
+2.18.1
+
diff --git a/games/pingus/files/patch-src-lisp-getters.hpp b/games/pingus/files/patch-src-lisp-getters.hpp
new file mode 100644
index 000000000000..f600918f5631
--- /dev/null
+++ b/games/pingus/files/patch-src-lisp-getters.hpp
@@ -0,0 +1,11 @@
+--- src/lisp/getters.hpp.orig 2011-12-24 21:46:47 UTC
++++ src/lisp/getters.hpp
+@@ -30,7 +30,7 @@ static inline bool property_get(const Li
+ if(lisp->get_list_size() != 2)
+ return false;
+
+- const Lisp* el = lisp->get_list_elem(1);
++ const Lisp* el = lisp->get_list_elem(1).get();
+ return get(el, val);
+ }
+
diff --git a/games/pingus/files/patch-src__pingus__pingus_main.cpp b/games/pingus/files/patch-src__pingus__pingus_main.cpp
new file mode 100644
index 000000000000..397af2466e38
--- /dev/null
+++ b/games/pingus/files/patch-src__pingus__pingus_main.cpp
@@ -0,0 +1,11 @@
+--- src/pingus/pingus_main.cpp.orig 2011-12-24 21:46:47 UTC
++++ src/pingus/pingus_main.cpp
+@@ -465,7 +465,7 @@ PingusMain::init_path_finder()
+ void
+ PingusMain::print_greeting_message()
+ {
+- std::string greeting = "Welcome to Pingus "VERSION;
++ std::string greeting = "Welcome to Pingus " VERSION;
+ greeting += "!";
+ std::cout << greeting << std::endl;
+ for (unsigned int i = 0; i < greeting.length(); ++i)
diff --git a/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp b/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp
new file mode 100644
index 000000000000..2474af27c201
--- /dev/null
+++ b/games/pingus/files/patch-src__pingus__screens__pingus_menu.cpp
@@ -0,0 +1,11 @@
+--- src/pingus/screens/pingus_menu.cpp.orig 2011-12-24 21:46:47 UTC
++++ src/pingus/screens/pingus_menu.cpp
+@@ -153,7 +153,7 @@ PingusMenu::draw_background(DrawingConte
+ gc.get_height()/2 - 280));
+
+ gc.print_left(Fonts::pingus_small, Vector2i(gc.get_width()/2 - 400 + 25, gc.get_height()-140),
+- "Pingus "VERSION" - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
++ "Pingus " VERSION " - Copyright (C) 1998-2011 Ingo Ruhnke <grumbel@gmail.com>\n"
+ "See the file AUTHORS for a complete list of contributors.\n"
+ "Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n"
+ "welcome to redistribute it under certain conditions; see the file COPYING for details.\n");
diff --git a/games/pingus/files/patch-src__util__file_reader.hpp b/games/pingus/files/patch-src__util__file_reader.hpp
new file mode 100644
index 000000000000..c56f58917c3a
--- /dev/null
+++ b/games/pingus/files/patch-src__util__file_reader.hpp
@@ -0,0 +1,10 @@
+--- src/util/file_reader.hpp.orig 2011-12-24 21:46:47 UTC
++++ src/util/file_reader.hpp
+@@ -19,6 +19,7 @@
+
+ #include <memory>
+ #include <vector>
++#include <string>
+
+ class Size;
+ class Color;
diff --git a/games/pingus/files/patch-src_pingus_screens_demo__session.cpp b/games/pingus/files/patch-src_pingus_screens_demo__session.cpp
new file mode 100644
index 000000000000..8146968392f2
--- /dev/null
+++ b/games/pingus/files/patch-src_pingus_screens_demo__session.cpp
@@ -0,0 +1,10 @@
+--- src/pingus/screens/demo_session.cpp.orig 2018-11-02 16:05:42 UTC
++++ src/pingus/screens/demo_session.cpp
+@@ -17,6 +17,7 @@
+ #include "pingus/screens/demo_session.hpp"
+
+ #include <algorithm>
++#include <functional>
+ #include <iostream>
+
+ #include "engine/gui/gui_manager.hpp"
diff --git a/games/pingus/pkg-descr b/games/pingus/pkg-descr
new file mode 100644
index 000000000000..c8c426180f43
--- /dev/null
+++ b/games/pingus/pkg-descr
@@ -0,0 +1,5 @@
+Pingus is a free Lemmings-like game covered under the GNU GPL. It features
+currently 22 playable levels and runs under a wide variety of operating systems
+(FreeBSD, Linux, Windows, etc.)
+
+WWW: https://pingus.seul.org/
diff --git a/games/renpy/Makefile b/games/renpy/Makefile
new file mode 100644
index 000000000000..102a70a2429b
--- /dev/null
+++ b/games/renpy/Makefile
@@ -0,0 +1,109 @@
+# $FreeBSD$
+
+PORTNAME= renpy
+PORTVERSION= 7.3.5
+DISTVERSIONSUFFIX=-sdk
+CATEGORIES= games devel
+MASTER_SITES= https://www.renpy.org/dl/${PORTVERSION}/
+
+MAINTAINER= jbeich@FreeBSD.org
+COMMENT= Framework for developing visual-novel type games
+
+LICENSE= APACHE20 BSD3CLAUSE DejaVu LGPL21+ MIT OFL11 ZLIB
+LICENSE_COMB= multi
+LICENSE_NAME_DejaVu= Bitstream Vera and Arev fonts license
+LICENSE_FILE_DejaVu= ${WRKSRC}/renpy/common/DejaVuSans.txt
+LICENSE_PERMS_DejaVu= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+# Extend expiration if lang/python27 is also extended
+# https://github.com/renpy/renpy/issues/2003
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}game_sdl2>0:devel/py-game_sdl2@${PY_FLAVOR}
+LIB_DEPENDS= libfribidi.so:converters/fribidi \
+ libpng.so:graphics/png \
+ libavcodec.so:multimedia/ffmpeg \
+ libfreetype.so:print/freetype2
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}game_sdl2>=${PORTVERSION}:devel/py-game_sdl2@${PY_FLAVOR}
+
+# Upstream tends to reroll distfiles before moving under /release/
+PORTSCOUT= site:http://www.renpy.org/dl/release/
+
+USES= gl python:2.7 sdl shebangfix tar:bz2
+USE_GL= glew
+USE_PYTHON= autoplist distutils cython
+USE_SDL= sdl2
+EXCLUDE= gen 'module/*.py[co]' 'renpy/*.py[co]'
+EXTRACT_AFTER_ARGS=${EXCLUDE:S,^,--exclude ,}
+SHEBANG_FILES= renpy.py launcher/game/tkaskdir.py
+TARGET_ORDER_OVERRIDE=610:fix-shebang
+BUILD_WRKSRC= ${WRKSRC}/module
+INSTALL_WRKSRC= ${BUILD_WRKSRC}
+MAKE_ENV+= RENPY_DEPS_INSTALL="${LOCALBASE}" \
+ RENPY_CYTHON=cython-${PYTHON_VER}
+PORTDATA= gui launcher renpy renpy.py
+PORTDOCS= *
+PLIST_FILES= bin/${PORTNAME}
+
+DESKTOP_ENTRIES="Ren'Py" \
+ "" \
+ "${DATADIR}/launcher/game/images/logo32.png" \
+ "${PORTNAME} %f" \
+ "Development;Game;AdventureGame;" \
+ ""
+
+OPTIONS_DEFAULT=TKINTER DIST
+OPTIONS_DEFINE= DOCS DIST EXAMPLES TKINTER
+
+DIST_DESC= Distribution runtimes for Windows, OS X, Linux
+DIST_VARS= LICENSE+="ART20 PSFL" \
+ PORTDATA+="lib renpy.app renpy.exe renpy.sh"
+EXAMPLES_VARS= PORTDATA+="the_question tutorial"
+TKINTER_DESC= Install Tkinter to allow choosing Projects Directory
+TKINTER_RUN_DEPENDS=${PYTHON_PKGNAMEPREFIX}tkinter>0:x11-toolkits/py-tkinter@${PY_FLAVOR}
+
+. for lic in FREETYPE LIBJPEG LIBPNG MSVCR90
+DIST_VARS+= LICENSE+=${lic}
+LICENSE_NAME_${lic}= ${lic} license
+LICENSE_FILE_${lic}= ${WRKSRC}/LICENSE.txt
+LICENSE_PERMS_${lic}= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+. endfor
+
+post-extract:
+ @${FIND} ${WRKSRC}/lib ${WRKSRC}/renpy.app -type d -empty -delete
+
+post-patch:
+ @${REINPLACE_CMD} -e 's,/usr/bin/python,${PYTHON_CMD},' \
+ ${WRKSRC}/launcher/game/choose_directory.rpy
+# Avoid having to add -I/usr/include -L/usr/lib
+ @${REINPLACE_CMD} '/library("z")/d' ${BUILD_WRKSRC}/${PYSETUP}
+
+post-build:
+ @${PYTHON_CMD} -m compileall -d ${DATADIR} ${WRKSRC}
+ @${PYTHON_CMD} -O -m compileall -d ${DATADIR} ${WRKSRC}
+
+add-plist-post: add-empty-dirs
+add-empty-dirs:
+# Keep images directory in gui and templates, see renpy@d81ea29
+ ${FIND} ${WRKSRC} -type d -empty \
+ ! \( -name "saves" -or -name "pysdlsound" \) | \
+ ${SED} 's,^${WRKSRC},@dir ${DATADIR},' >>${TMPPLIST}
+
+post-install:
+ ${FIND} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR} -name \*.so \
+ -exec ${STRIP_CMD} {} +
+ ${LN} -fs ../${DATADIR_REL}/renpy.py \
+ ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} \
+ "${PORTDATA}" ${STAGEDIR}${DATADIR} \
+ "! -name *.orig ! -name *.bak \
+ ! -name saves ! -name log.txt")
+ ${CHMOD} +x ${STAGEDIR}${DATADIR}/renpy.py
+
+post-install-DOCS-on:
+ (cd ${WRKSRC}/doc && ${COPYTREE_SHARE} \
+ . ${STAGEDIR}${DOCSDIR} \
+ "! -name *.orig ! -name *.bak")
+
+.include <bsd.port.mk>
diff --git a/games/renpy/distinfo b/games/renpy/distinfo
new file mode 100644
index 000000000000..6d61d83c9702
--- /dev/null
+++ b/games/renpy/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1571355531
+SHA256 (renpy-7.3.5-sdk.tar.bz2) = dbbd087f2578d70dc1bc3912259f5794d563e3404068c96c15d7127853dec40d
+SIZE (renpy-7.3.5-sdk.tar.bz2) = 95049773
diff --git a/games/renpy/files/patch-issue869 b/games/renpy/files/patch-issue869
new file mode 100644
index 000000000000..4a4d0c4b7c53
--- /dev/null
+++ b/games/renpy/files/patch-issue869
@@ -0,0 +1,11 @@
+Restore shebang before ecd36ec.
+
+--- renpy.py.orig 2016-01-27 03:31:10 UTC
++++ renpy.py
+@@ -1,4 +1,5 @@
+-#!/usr/bin/env python #@PydevCodeAnalysisIgnore
++#!/usr/bin/env python
++#@PydevCodeAnalysisIgnore
+
+ # This file is part of Ren'Py. The license below applies to Ren'Py only.
+ # Games and other projects that use Ren'Py may use a different license.
diff --git a/games/renpy/files/patch-system-fribidi b/games/renpy/files/patch-system-fribidi
new file mode 100644
index 000000000000..0232db728876
--- /dev/null
+++ b/games/renpy/files/patch-system-fribidi
@@ -0,0 +1,57 @@
+Partially revert 4a9efc0cab7d as module/fribidi-src/ is missing from source archive.
+
+gen/_renpybidi.c:564:10: fatal error: 'fribidi.h' file not found
+#include "fribidi.h"
+ ^
+
+--- module/renpybidicore.c.orig 2018-07-11 04:11:19 UTC
++++ module/renpybidicore.c
+@@ -1,5 +1,5 @@
+ #include <Python.h>
+-#include <fribidi-src/lib/fribidi.h>
++#include <fribidi.h>
+ #include <stdlib.h>
+
+ #ifndef alloca
+--- module/setup.py.orig 2018-07-11 04:29:32 UTC
++++ module/setup.py
+@@ -92,6 +92,7 @@ has_avresample = library("avresample", optional=True)
+ has_swresample = library("swresample", optional=True)
+ has_swscale = library("swscale", optional=True)
+ library("freetype")
++has_fribidi = include("fribidi.h", directory="fribidi", optional=True) and library("fribidi", optional=True)
+ library("z")
+ has_libglew = library("GLEW", optional=True)
+ has_libglew32 = library("glew32", optional=True)
+@@ -105,6 +106,16 @@ else:
+ sdl = [ 'SDL2' ]
+ png = 'png'
+
++
++if has_fribidi and (not android) and (not ios):
++ try:
++ # Some versions of fribidi require glib, and it doesn't hurt to include it in
++ # our path.
++ glib_flags = subprocess.check_output(["pkg-config", "--cflags", "glib-2.0"])
++ setuplib.extra_compile_args.extend(glib_flags.split())
++ except:
++ pass
++
+ steam_sdk = os.environ.get("RENPY_STEAM_SDK", None)
+ steam_platform = os.environ.get("RENPY_STEAM_PLATFORM", "")
+
+@@ -134,11 +145,12 @@ renpybidicore.c
+ """.split()
+ cython(
+ "_renpybidi",
+- FRIBIDI_SOURCES,
+- includes=[
++ has_fribidi and [ i for i in FRIBIDI_SOURCES if 'fribidi-src' not in i ] or FRIBIDI_SOURCES,
++ includes=has_fribidi and [] or [
+ BASE + "/fribidi-src/",
+ BASE + "/fribidi-src/lib/",
+ ],
++ libs=has_fribidi and ['fribidi'] or [],
+ define_macros=[
+ ("FRIBIDI_ENTRY", ""),
+ ("HAVE_CONFIG_H", "1"),
diff --git a/games/renpy/pkg-descr b/games/renpy/pkg-descr
new file mode 100644
index 000000000000..cc760ec52918
--- /dev/null
+++ b/games/renpy/pkg-descr
@@ -0,0 +1,9 @@
+Ren'Py is a visual novel engine – used by thousands of creators from
+around the world – that helps you use words, images, and sounds to
+tell interactive stories that run on computers and mobile
+devices. These can be both visual novels and life simulation
+games. The easy to learn script language allows anyone to efficiently
+write large visual novels, while its Python scripting is enough for
+complex simulation games.
+
+WWW: https://www.renpy.org/
diff --git a/graphics/Makefile b/graphics/Makefile
index b0f4efcf81e5..ab0c5efc9595 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -280,6 +280,7 @@
SUBDIR += goocanvasmm2
SUBDIR += goom
SUBDIR += gource
+ SUBDIR += goxel
SUBDIR += gpaint
SUBDIR += gphoto2
SUBDIR += gpicview
@@ -855,6 +856,7 @@
SUBDIR += py-photocollage
SUBDIR += py-piexif
SUBDIR += py-pillow
+ SUBDIR += py-pillow6
SUBDIR += py-pivy
SUBDIR += py-plotly
SUBDIR += py-png
@@ -1012,6 +1014,7 @@
SUBDIR += silgraphite
SUBDIR += simage
SUBDIR += simpleviewer
+ SUBDIR += sk1libs
SUBDIR += skanlite
SUBDIR += spectacle
SUBDIR += spirv-tools
@@ -1053,6 +1056,7 @@
SUBDIR += tumble
SUBDIR += tweeny
SUBDIR += ufraw
+ SUBDIR += uniconvertor
SUBDIR += unpaper
SUBDIR += urho3d
SUBDIR += urt
diff --git a/graphics/goxel/Makefile b/graphics/goxel/Makefile
new file mode 100644
index 000000000000..ac6def1bdd4d
--- /dev/null
+++ b/graphics/goxel/Makefile
@@ -0,0 +1,45 @@
+# $FreeBSD$
+
+PORTNAME= goxel
+DISTVERSIONPREFIX= v
+DISTVERSION= 0.8.2
+PORTREVISION= 1
+CATEGORIES= graphics
+
+MAINTAINER= greg@unrelenting.technology
+COMMENT= Free and Open Source 3D Voxel Editor
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libargp.so:devel/argp-standalone \
+ libglfw.so:graphics/glfw \
+ libpng.so:graphics/png
+
+USES= compiler:c++11-lang pkgconfig scons:python2 gnome gl
+USE_GITHUB= yes
+GH_ACCOUNT= guillaumechereau
+USE_GNOME= cairo gtk30
+USE_GL= gl
+
+INSTALLS_ICONS= yes
+MAKE_ARGS= debug=0 werror=0
+DESKTOP_ENTRIES="Goxel" "${COMMENT}" "${PORTNAME}" \
+ "${PORTNAME}" "Graphics;3DGraphics;" false
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} != amd64 && ${ARCH} != i386
+post-patch:
+ ${REINPLACE_CMD} -e 's/-msse2 //g' ${WRKSRC}/SConstruct
+.endif
+
+do-install:
+ ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/
+.for SZ in 32 64 256
+ @${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/${SZ}x${SZ}/apps
+ ${INSTALL_DATA} ${WRKSRC}/osx/goxel/goxel/Assets.xcassets/AppIcon.appiconset/${SZ}.png \
+ ${STAGEDIR}${PREFIX}/share/icons/hicolor/${SZ}x${SZ}/apps/goxel.png
+.endfor
+
+.include <bsd.port.post.mk>
diff --git a/graphics/goxel/distinfo b/graphics/goxel/distinfo
new file mode 100644
index 000000000000..a23644b16088
--- /dev/null
+++ b/graphics/goxel/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1545486941
+SHA256 (guillaumechereau-goxel-v0.8.2_GH0.tar.gz) = 4f8297560e356cb69469e0a23bcb4e9c4e8549766a0466ffeaa0c9cfb7a04049
+SIZE (guillaumechereau-goxel-v0.8.2_GH0.tar.gz) = 3387515
diff --git a/graphics/goxel/files/patch-SConstruct b/graphics/goxel/files/patch-SConstruct
new file mode 100644
index 000000000000..3ee0c2f64df3
--- /dev/null
+++ b/graphics/goxel/files/patch-SConstruct
@@ -0,0 +1,35 @@
+--- SConstruct.orig 2018-12-22 14:00:12 UTC
++++ SConstruct
+@@ -28,15 +28,18 @@ clang = int(ARGUMENTS.get("clang", 0))
+ cycles = int(ARGUMENTS.get('cycles', 1))
+ sound = False
+
+-if os.environ.get('CC') == 'clang': clang = 1
++import subprocess
++if 'clang' in subprocess.check_output([os.environ.get('CC', 'cc'), '-v'],
++ stderr=subprocess.STDOUT):
++ clang = 1
++print 'clang', clang
+ if profile: debug = 0
+
+-env = Environment(ENV = os.environ)
++
++env = Environment(ENV = os.environ, CC = os.environ.get('CC', 'cc'),
++ CXX = os.environ.get('CXX', 'c++'))
+ conf = env.Configure()
+
+-if clang:
+- env.Replace(CC='clang', CXX='clang++')
+-
+ # Asan & Ubsan (need to come first).
+ # Cycles doesn't like libasan with clang, so we only use it on
+ # C code with clang.
+@@ -145,7 +148,7 @@ if cycles:
+ sources += glob.glob('ext_src/cycles/src/subd/*.cpp')
+
+ env.Append(CPPPATH=['ext_src/cycles/src'])
+- env.Append(CPPPATH=['ext_src/cycles/third_party/atomic'])
++ env.Prepend(CPPPATH=['ext_src/cycles/third_party/atomic'])
+ env.Append(CPPFLAGS=[
+ '-DCYCLES_STD_UNORDERED_MAP',
+ '-DCCL_NAMESPACE_BEGIN=namespace ccl {',
diff --git a/graphics/goxel/files/patch-ext__src_cycles_src_util_util__path.cpp b/graphics/goxel/files/patch-ext__src_cycles_src_util_util__path.cpp
new file mode 100644
index 000000000000..008ccd5b9909
--- /dev/null
+++ b/graphics/goxel/files/patch-ext__src_cycles_src_util_util__path.cpp
@@ -0,0 +1,13 @@
+--- ext_src/cycles/src/util/util_path.cpp.orig 2018-12-22 14:23:19 UTC
++++ ext_src/cycles/src/util/util_path.cpp
+@@ -38,6 +38,10 @@
+ # include <shlwapi.h>
+ #endif
+
++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
++#include <sys/sysctl.h>
++#endif
++
+ #include "util/util_map.h"
+ #include "util/util_windows.h"
+
diff --git a/graphics/goxel/pkg-descr b/graphics/goxel/pkg-descr
new file mode 100644
index 000000000000..915c619ae2e6
--- /dev/null
+++ b/graphics/goxel/pkg-descr
@@ -0,0 +1,3 @@
+A 3D program that lets you create voxel volumes, a bit similar to minecraft.
+
+WWW: https://guillaumechereau.github.io/goxel/
diff --git a/graphics/goxel/pkg-plist b/graphics/goxel/pkg-plist
new file mode 100644
index 000000000000..12fd45320092
--- /dev/null
+++ b/graphics/goxel/pkg-plist
@@ -0,0 +1,4 @@
+bin/goxel
+share/icons/hicolor/32x32/apps/goxel.png
+share/icons/hicolor/64x64/apps/goxel.png
+share/icons/hicolor/256x256/apps/goxel.png
diff --git a/graphics/py-pillow6/Makefile b/graphics/py-pillow6/Makefile
new file mode 100644
index 000000000000..af1b8e04cf0f
--- /dev/null
+++ b/graphics/py-pillow6/Makefile
@@ -0,0 +1,80 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= pillow
+PORTVERSION= 6.2.2
+CATEGORIES= graphics python
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+PKGNAMESUFFIX= 6
+
+MAINTAINER= koobs@FreeBSD.org
+COMMENT= Fork of the Python Imaging Library (PIL)
+
+LICENSE= PIL
+LICENSE_NAME= Standard PIL License
+LICENSE_FILE= ${WRKSRC}/LICENSE
+LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
+
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pytest>0:devel/py-pytest@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}pytest-runner>0:devel/py-pytest-runner@${PY_FLAVOR}
+
+USES= cpe python:2.7
+USE_GITHUB= yes
+USE_PYTHON= autoplist concurrent distutils
+
+GH_ACCOUNT= python-${PORTNAME}
+GH_PROJECT= ${PORTNAME:C/p/P/}
+
+OPTIONS_DEFINE= FREETYPE JPEG JPEG2000 LCMS OLE PNG TIFF TKINTER WEBP
+OPTIONS_DEFAULT= FREETYPE JPEG JPEG2000 LCMS OLE PNG TIFF TKINTER WEBP
+
+LCMS_DESC= Little Color Management System
+OLE_DESC= Microsoft OLE2 file format support
+TKINTER_DESC= Tkinter (Tcl/Tk) BitmapImage & PhotoImage support
+
+FREETYPE_LIB_DEPENDS= libfreetype.so:print/freetype2
+FREETYPE_VARS= PYDISTUTILS_BUILDARGS+=--enable-freetype
+FREETYPE_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-freetype
+
+JPEG_USES= jpeg
+JPEG_VARS= PYDISTUTILS_BUILDARGS+=--enable-jpeg
+JPEG_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-jpeg
+
+JPEG2000_LIB_DEPENDS= libopenjp2.so:graphics/openjpeg
+JPEG2000_VARS= PYDISTUTILS_BUILDARGS+=--enable-jpeg2000
+JPEG2000_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-jpeg2000
+
+LCMS_LIB_DEPENDS= liblcms2.so:graphics/lcms2
+LCMS_VARS= PYDISTUTILS_BUILDARGS+=--enable-lcms
+LCMS_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-lcms
+
+OLE_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}olefile>0:devel/py-olefile@${PY_FLAVOR}
+
+PNG_VARS= PYDISTUTILS_BUILDARGS+=--enable-zlib
+PNG_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-zlib
+
+TIFF_LIB_DEPENDS= libtiff.so:graphics/tiff
+TIFF_VARS= PYDISTUTILS_BUILDARGS+=--enable-tiff
+TIFF_VARS_OFF= PYDISTUTILS_BUILDARGS+=--disable-tiff
+
+TKINTER_USES= tk
+TKINTER_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}tkinter>0:x11-toolkits/py-tkinter@${PY_FLAVOR}
+TKINTER_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}tkinter>0:x11-toolkits/py-tkinter@${PY_FLAVOR}
+TKINTER_VARS= PYDISTUTILS_BUILDARGS+="--include-dirs=${TCL_INCLUDEDIR}:${TK_INCLUDEDIR}"
+
+WEBP_LIB_DEPENDS= libwebp.so:graphics/webp
+WEBP_VARS= PYDISTUTILS_BUILDARGS+="--enable-webp --enable-webpmux"
+WEBP_VARS_OFF= PYDISTUTILS_BUILDARGS+="--disable-webp --disable-webpmux"
+
+.include <bsd.port.pre.mk>
+
+PYDISTUTILS_BUILD_TARGET= build build_ext
+PYDISTUTILS_BUILDARGS+= saveopts
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/PIL/*.so
+
+do-test:
+ @cd ${WRKSRC} && ${PYTHON_CMD} ${PYDISTUTILS_SETUP} test
+
+.include <bsd.port.post.mk>
diff --git a/graphics/py-pillow6/distinfo b/graphics/py-pillow6/distinfo
new file mode 100644
index 000000000000..22f4c9a333ee
--- /dev/null
+++ b/graphics/py-pillow6/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1579047758
+SHA256 (python-pillow-Pillow-6.2.2_GH0.tar.gz) = cc4ec754ddcc98b7166a1afe062c6355c841776145f0f23bdd3bea1eaa41e2db
+SIZE (python-pillow-Pillow-6.2.2_GH0.tar.gz) = 37538464
diff --git a/graphics/py-pillow6/pkg-descr b/graphics/py-pillow6/pkg-descr
new file mode 100644
index 000000000000..0249c5723e14
--- /dev/null
+++ b/graphics/py-pillow6/pkg-descr
@@ -0,0 +1,5 @@
+Pillow is the "friendly" PIL fork. PIL is the Python Imaging Library. Pillow
+was started for and is currently maintained by the Plone community. But it is
+used by many other folks in the Python web community.
+
+WWW: https://python-pillow.org/
diff --git a/graphics/sk1libs/Makefile b/graphics/sk1libs/Makefile
new file mode 100644
index 000000000000..d11722781a50
--- /dev/null
+++ b/graphics/sk1libs/Makefile
@@ -0,0 +1,34 @@
+# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= sk1libs
+PORTVERSION= 0.9.1
+PORTREVISION= 2
+CATEGORIES= graphics python
+MASTER_SITES= https://downloads.sk1project.net/uniconvertor/v1.1.5/ \
+ https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/uniconvertor/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Set of python libraries for sK1 Project
+
+LICENSE= GPLv2+
+LICENSE_FILE= ${WRKSRC}/GNU_LGPL_v2
+
+LIB_DEPENDS= liblcms.so:graphics/lcms \
+ libfreetype.so:print/freetype2
+
+USES= jpeg python:2.7
+USE_PYTHON= distutils
+PYDISTUTILS_BUILD_TARGET=build_ext
+PYDISTUTILS_BUILDARGS= -L${LOCALBASE}/lib \
+ -I${LOCALBASE}/include:${LOCALBASE}/include/freetype2
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' ${WRKSRC}/src/utils/fs.py
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/sk1libs/ft2engine/*.so \
+ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/sk1libs/pycms/*.so \
+ ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/sk1libs/imaging/*.so
+
+.include <bsd.port.mk>
diff --git a/graphics/sk1libs/distinfo b/graphics/sk1libs/distinfo
new file mode 100644
index 000000000000..5344ce936be4
--- /dev/null
+++ b/graphics/sk1libs/distinfo
@@ -0,0 +1,2 @@
+SHA256 (sk1libs-0.9.1.tar.gz) = bb44520a5fab2998a8013a91874ff109f25bbd8e01bbddafe0b6e7db0631719a
+SIZE (sk1libs-0.9.1.tar.gz) = 1019443
diff --git a/graphics/sk1libs/files/patch-src-utils-fs.py b/graphics/sk1libs/files/patch-src-utils-fs.py
new file mode 100644
index 000000000000..5d24e96ed3da
--- /dev/null
+++ b/graphics/sk1libs/files/patch-src-utils-fs.py
@@ -0,0 +1,22 @@
+--- src/utils/fs.py.orig 2010-05-23 10:46:21 UTC
++++ src/utils/fs.py
+@@ -203,9 +203,11 @@ def get_system_fontdirs():
+ The function detects system font directories according to detected
+ system type.
+ """
++ if system.get_os_family()==system.FREEBSD:
++ return ['/usr/local/lib/X11/fonts', '/usr/local/share/fonts', os.path.join(gethome(),'.fonts')]
+ if system.get_os_family()==system.LINUX:
+ return ['/usr/share/fonts', os.path.join(gethome(),'.fonts')]
+- if system.get_os_family()==system.WINDOWS:
++ if system.get_os_family()==system.WINDOWS:
+ try:
+ import _winreg
+ except ImportError:
+@@ -311,4 +313,4 @@ def _test():
+ if __name__ == '__main__':
+ _test()
+
+-
+\ No newline at end of file
++
diff --git a/graphics/sk1libs/files/patch-src-utils-system.py b/graphics/sk1libs/files/patch-src-utils-system.py
new file mode 100644
index 000000000000..b9e5b1b63545
--- /dev/null
+++ b/graphics/sk1libs/files/patch-src-utils-system.py
@@ -0,0 +1,19 @@
+--- src/utils/system.py.orig 2010-03-08 00:15:33 UTC
++++ src/utils/system.py
+@@ -22,6 +22,7 @@ import platform, os, string, re, stat
+
+ WINDOWS = 'Windows'
+ LINUX = 'Linux'
++FREEBSD = 'FreeBSD'
+ MACOSX = 'Darwin'
+ GENERIC = 'generic'
+
+@@ -33,6 +34,8 @@ def get_os_family():
+ name = platform.system()
+ if name == LINUX:
+ return LINUX
++ elif name == FREEBSD:
++ return FREEBSD
+ elif name == WINDOWS:
+ return WINDOWS
+ elif name == MACOSX:
diff --git a/graphics/sk1libs/files/patch-src_imaging_libimagingft___imagingft.c b/graphics/sk1libs/files/patch-src_imaging_libimagingft___imagingft.c
new file mode 100644
index 000000000000..e6ca35f2ba20
--- /dev/null
+++ b/graphics/sk1libs/files/patch-src_imaging_libimagingft___imagingft.c
@@ -0,0 +1,11 @@
+--- src/imaging/libimagingft/_imagingft.c.orig 2009-11-01 00:44:12 UTC
++++ src/imaging/libimagingft/_imagingft.c
+@@ -70,7 +70,7 @@ struct {
+ const char* message;
+ } ft_errors[] =
+
+-#include <freetype/fterrors.h>
++#include FT_ERRORS_H
+
+ /* -------------------------------------------------------------------- */
+ /* font objects */
diff --git a/graphics/sk1libs/pkg-descr b/graphics/sk1libs/pkg-descr
new file mode 100644
index 000000000000..425625fe0680
--- /dev/null
+++ b/graphics/sk1libs/pkg-descr
@@ -0,0 +1,4 @@
+sk1libs is a set of python libs for sK1 Project. The package includes
+multiplatform non-GUI extensions which are usually native extensions.
+
+WWW: https://sk1project.net/
diff --git a/graphics/sk1libs/pkg-plist b/graphics/sk1libs/pkg-plist
new file mode 100644
index 000000000000..ad3b55b08749
--- /dev/null
+++ b/graphics/sk1libs/pkg-plist
@@ -0,0 +1,525 @@
+%%PYTHON_SITELIBDIR%%/sk1libs/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/aisaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/aisaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/aisaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/cgmsaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/cgmsaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/cgmsaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pdfgensaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pdfgensaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pdfgensaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pltsaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pltsaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pltsaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pssaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pssaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/pssaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sk1saver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sk1saver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sk1saver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sksaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sksaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/sksaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/svgsaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/svgsaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/svgsaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/wmfsaver.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/wmfsaver.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/export/wmfsaver.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/drawfile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/drawfile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/drawfile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/spritefile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/spritefile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/formats/spritefile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ailoader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ailoader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ailoader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/bziploader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/bziploader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/bziploader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ccxloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ccxloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/ccxloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrziploader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrziploader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cdrziploader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cgmloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cgmloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cgmloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cmxloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cmxloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/cmxloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/drawinput.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/drawinput.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/drawinput.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/dxfloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/dxfloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/dxfloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/gziploader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/gziploader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/gziploader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/pltloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/pltloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/pltloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/sk1loader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/sk1loader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/sk1loader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/skloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/skloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/skloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/stitchloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/stitchloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/stitchloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/svgloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/svgloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/svgloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/wmfloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/wmfloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/wmfloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/xfigloader.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/xfigloader.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/import/xfigloader.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/parsing/cdrparser.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/parsing/cdrparser.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/parsing/cdrparser.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/preview/cdrpreview.py
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/preview/cdrpreview.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/filters/preview/cdrpreview.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/fallback_fonts/Vera.ttf
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/fallback_fonts/VeraBI.ttf
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/fallback_fonts/VeraBd.ttf
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/fallback_fonts/VeraIt.ttf
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/fallback_fonts/readme.txt
+%%PYTHON_SITELIBDIR%%/sk1libs/ft2engine/ft2.so
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ArgImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ArgImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ArgImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BdfFontFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BdfFontFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BdfFontFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BmpImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BmpImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BmpImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BufrStubImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BufrStubImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/BufrStubImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ContainerIO.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ContainerIO.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ContainerIO.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/CurImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/CurImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/CurImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/DcxImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/DcxImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/DcxImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/EpsImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/EpsImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/EpsImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ExifTags.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ExifTags.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ExifTags.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FitsStubImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FitsStubImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FitsStubImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FliImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FliImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FliImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FontFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FontFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FontFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FpxImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FpxImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/FpxImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GbrImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GbrImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GbrImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GdImageFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GdImageFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GdImageFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GifImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GifImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GifImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpGradientFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpGradientFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpGradientFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpPaletteFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpPaletteFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GimpPaletteFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GribStubImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GribStubImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/GribStubImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Hdf5StubImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Hdf5StubImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Hdf5StubImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcnsImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcnsImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcnsImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcoImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcoImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IcoImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Image.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Image.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/Image.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageChops.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageChops.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageChops.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageCms.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageCms.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageCms.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageColor.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageColor.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageColor.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw2.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw2.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageDraw2.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageEnhance.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageEnhance.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageEnhance.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFileIO.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFileIO.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFileIO.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFilter.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFilter.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFilter.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFont.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFont.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageFont.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGL.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGL.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGL.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGrab.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGrab.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageGrab.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMath.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMath.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMath.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMode.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMode.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageMode.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageOps.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageOps.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageOps.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePalette.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePalette.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePalette.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePath.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePath.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImagePath.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageQt.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageQt.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageQt.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageSequence.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageSequence.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageSequence.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageShow.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageShow.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageShow.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageStat.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageStat.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageStat.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageTransform.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageTransform.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageTransform.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageWin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageWin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImageWin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImtImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImtImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/ImtImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IptcImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IptcImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/IptcImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/JpegImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/JpegImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/JpegImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/McIdasImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/McIdasImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/McIdasImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MicImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MicImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MicImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MpegImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MpegImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MpegImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MspImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MspImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/MspImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/OleFileIO.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/OleFileIO.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/OleFileIO.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PSDraw.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PSDraw.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PSDraw.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PaletteFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PaletteFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PaletteFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PalmImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PalmImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PalmImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcdImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcdImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcdImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcfFontFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcfFontFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcfFontFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcxImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcxImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PcxImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PdfImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PdfImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PdfImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PixarImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PixarImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PixarImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PngImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PngImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PngImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PpmImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PpmImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PpmImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PsdImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PsdImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/PsdImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SgiImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SgiImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SgiImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SpiderImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SpiderImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SpiderImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SunImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SunImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/SunImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TarIO.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TarIO.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TarIO.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TgaImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TgaImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TgaImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffTags.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffTags.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/TiffTags.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WalImageFile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WalImageFile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WalImageFile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WmfImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WmfImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/WmfImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XVThumbImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XVThumbImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XVThumbImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XbmImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XbmImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XbmImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XpmImagePlugin.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XpmImagePlugin.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/XpmImagePlugin.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/_imaging.so
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/_imagingcms.so
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/_imagingft.so
+%%PYTHON_SITELIBDIR%%/sk1libs/imaging/_imagingmath.so
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/PyFontify.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/PyFontify.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/PyFontify.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/abag.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/abag.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/abag.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/arciv.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/arciv.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/arciv.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/attrmap.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/attrmap.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/attrmap.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/boxstuff.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/boxstuff.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/boxstuff.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/codecharts.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/codecharts.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/codecharts.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/colors.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/colors.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/colors.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/corp.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/corp.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/corp.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/enums.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/enums.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/enums.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/extformat.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/extformat.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/extformat.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fontfinder.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fontfinder.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fontfinder.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fonts.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fonts.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/fonts.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/formatters.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/formatters.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/formatters.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/geomutils.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/geomutils.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/geomutils.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/logger.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/logger.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/logger.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/normalDate.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/normalDate.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/normalDate.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pagesizes.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pagesizes.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pagesizes.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pdfencrypt.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pdfencrypt.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pdfencrypt.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pygments2xpre.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pygments2xpre.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/pygments2xpre.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/randomtext.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/randomtext.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/randomtext.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rltempfile.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rltempfile.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rltempfile.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rparsexml.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rparsexml.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/rparsexml.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/sequencer.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/sequencer.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/sequencer.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/set_ops.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/set_ops.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/set_ops.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/styles.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/styles.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/styles.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/testutils.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/testutils.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/testutils.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/textsplit.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/textsplit.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/textsplit.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/units.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/units.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/units.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/utils.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/utils.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/utils.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/validators.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/validators.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/validators.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/xmllib.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/xmllib.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/xmllib.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/yaml.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/yaml.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/lib/yaml.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_can_cmap_data.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_can_cmap_data.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_can_cmap_data.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_cidfontdata.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_cidfontdata.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_cidfontdata.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_fontdata.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_fontdata.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/_fontdata.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/cidfonts.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/cidfonts.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/cidfonts.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfdoc.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfdoc.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfdoc.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfform.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfform.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfform.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfmetrics.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfmetrics.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfmetrics.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfpattern.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfpattern.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfpattern.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfutils.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfutils.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/pdfutils.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/rl_codecs.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/rl_codecs.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/rl_codecs.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/ttfonts.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/ttfonts.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfbase/ttfonts.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/canvas.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/canvas.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/canvas.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pathobject.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pathobject.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pathobject.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfgeom.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfgeom.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfgeom.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfimages.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfimages.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pdfimages.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pycanvas.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pycanvas.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/pycanvas.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/textobject.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/textobject.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/pdfgen/textobject.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/rl_config.py
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/rl_config.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/libpdf/rl_config.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/pycms/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/pycms/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/pycms/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/pycms/_pycms.so
+%%PYTHON_SITELIBDIR%%/sk1libs/pycms/profiles/GenericCMYK.icm
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/__init__.py
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/__init__.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/__init__.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/fs.py
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/fs.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/fs.pyo
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/system.py
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/system.pyc
+%%PYTHON_SITELIBDIR%%/sk1libs/utils/system.pyo
diff --git a/graphics/uniconvertor/Makefile b/graphics/uniconvertor/Makefile
new file mode 100644
index 000000000000..92d8cb263c0a
--- /dev/null
+++ b/graphics/uniconvertor/Makefile
@@ -0,0 +1,30 @@
+# Created by: Dmitry Marakasov <amdmi3@amdmi3.ru>
+# $FreeBSD$
+
+PORTNAME= uniconvertor
+PORTVERSION= 1.1.5
+CATEGORIES= graphics python
+MASTER_SITES= https://downloads.sk1project.net/uniconvertor/v1.1.5/ \
+ https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/uniconvertor/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Universal vector graphics translator
+
+LICENSE= LGPL20+ GPLv2+
+LICENSE_COMB= multi
+LICENSE_FILE_GPLv2+ = ${WRKSRC}/src/GNU_GPL_v2
+LICENSE_FILE_LGPL20+ = ${WRKSRC}/src/GNU_LGPL_v2
+
+# see https://github.com/sk1project/uniconvertor/issues/19 for py3 conversion
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+RUN_DEPENDS= ${PYTHON_SITELIBDIR}/sk1libs/__init__.py:graphics/sk1libs@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= distutils
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/uniconvertor/app/modules/*.so
+
+.include <bsd.port.mk>
diff --git a/graphics/uniconvertor/distinfo b/graphics/uniconvertor/distinfo
new file mode 100644
index 000000000000..6568d2f37952
--- /dev/null
+++ b/graphics/uniconvertor/distinfo
@@ -0,0 +1,2 @@
+SHA256 (uniconvertor-1.1.5.tar.gz) = c3a9ecb70779911470e01c6b1950b07fc2fe1880777a1e70e44251323f4d5882
+SIZE (uniconvertor-1.1.5.tar.gz) = 246998
diff --git a/graphics/uniconvertor/pkg-descr b/graphics/uniconvertor/pkg-descr
new file mode 100644
index 000000000000..289b1083e2a9
--- /dev/null
+++ b/graphics/uniconvertor/pkg-descr
@@ -0,0 +1,30 @@
+UniConvertor is a universal vector graphics translator. It uses sK1
+engine to convert one format to another.
+
+Development of the import/export modules for this program goes
+through different stages, quality and feature coverage are different
+among formats.
+
+Import filters:
+* CorelDRAW ver.7-X3,X4 (CDR/CDT/CCX/CDRX/CMX)
+* Adobe Illustrator up to 9 ver. (AI postscript based)
+* Postscript (PS)
+* Encapsulated Postscript (EPS)
+* Computer Graphics Metafile (CGM)
+* Windows Metafile (WMF)
+* XFIG
+* Scalable Vector Graphics (SVG)
+* Skencil/Sketch/sK1 (SK and SK1)
+* Acorn Draw (AFF)
+
+Export filters:
+* AI (Postscript based Adobe Illustrator 5.0 format)
+* SVG (Scalable Vector Graphics)
+* SK (Sketch/Skencil format)
+* SK1 (sK1 format)
+* CGM (Computer Graphics Metafile)
+* WMF (Windows Metafile)
+* PDF (Portable Document Format)
+* PS (PostScript)
+
+WWW: https://sk1project.org/
diff --git a/graphics/uniconvertor/pkg-plist b/graphics/uniconvertor/pkg-plist
new file mode 100644
index 000000000000..a216e2fa42f6
--- /dev/null
+++ b/graphics/uniconvertor/pkg-plist
@@ -0,0 +1,260 @@
+bin/uniconvertor
+%%PYTHON_SITELIBDIR%%/uniconvertor/COPYRIGHTS
+%%PYTHON_SITELIBDIR%%/uniconvertor/GNU_GPL_v2
+%%PYTHON_SITELIBDIR%%/uniconvertor/GNU_LGPL_v2
+%%PYTHON_SITELIBDIR%%/uniconvertor/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/arrow.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/arrow.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/arrow.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/base.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/base.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/base.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/bezier.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/bezier.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/bezier.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blend.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blend.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blend.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blendgroup.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blendgroup.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/blendgroup.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/clone.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/clone.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/clone.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/color.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/color.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/color.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/compound.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/compound.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/compound.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/curveop.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/curveop.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/curveop.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/dashes.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/dashes.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/dashes.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/document.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/document.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/document.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/ellipse.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/ellipse.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/ellipse.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/eps.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/eps.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/eps.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/external.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/external.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/external.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/font.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/font.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/font.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/gradient.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/gradient.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/gradient.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/graphics.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/graphics.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/graphics.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/group.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/group.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/group.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/guide.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/guide.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/guide.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/handle.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/handle.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/handle.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/image.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/image.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/image.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/layer.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/layer.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/layer.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/maskgroup.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/maskgroup.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/maskgroup.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pagelayout.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pagelayout.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pagelayout.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/papersize.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/papersize.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/papersize.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pattern.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pattern.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/pattern.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/plugobj.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/plugobj.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/plugobj.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/properties.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/properties.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/properties.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/psdevice.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/psdevice.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/psdevice.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/rectangle.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/rectangle.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/rectangle.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selection.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selection.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selection.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selinfo.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selinfo.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/selinfo.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/text.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/text.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Graphics/text.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/dscparser.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/dscparser.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/dscparser.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/encoding.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/encoding.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/encoding.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/psmisc.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/psmisc.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/psmisc.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/skcompleter.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/skcompleter.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/skcompleter.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/type1.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/type1.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/type1.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/units.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/units.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Lib/units.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/registry.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/registry.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/registry.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/script.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/script.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/script.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/wrapper.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/wrapper.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/Scripting/wrapper.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/VERSION
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/configurator.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/configurator.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/configurator.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/const.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/const.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/conf/const.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/connector.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/connector.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/connector.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/skexceptions.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/skexceptions.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/skexceptions.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undo.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undo.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undo.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undodict.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undodict.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/undodict.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/warn.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/warn.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/events/warn.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/load.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/load.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/load.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/loadres.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/loadres.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/io/loadres.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/colormanager.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/colormanager.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/managers/colormanager.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/modules/_sketch.so
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/modules/_type1.so
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/modules/pstokenize.so
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/modules/skread.so
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/modules/streamfilter.so
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_horizontal.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_horizontal.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_horizontal.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_vertical.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_vertical.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/abut_vertical.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/average_points.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/average_points.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/average_points.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_spiral.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_spiral.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_spiral.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star_outline.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star_outline.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_star_outline.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_text.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_text.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/create_text.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/export_raster.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/footprints.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/footprints.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/footprints.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/inspect_beziers.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/inspect_beziers.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/inspect_beziers.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/read_gimp_path.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/read_gimp_path.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/read_gimp_path.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/reload_image.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/reload_image.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/reload_image.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/save_selection.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/save_selection.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/save_selection.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_fill_color.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_fill_color.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_fill_color.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_line_color.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_line_color.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/select_same_line_color.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/simple_separation.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/simple_separation.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/simple_separation.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/spread.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/spread.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/spread.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/unit.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/unit.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/unit.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/usersguide.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/usersguide.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/scripts/usersguide.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/__init__.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/__init__.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/__init__.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/locale_utils.py
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/locale_utils.pyc
+%%PYTHON_SITELIBDIR%%/uniconvertor/app/utils/locale_utils.pyo
+%%PYTHON_SITELIBDIR%%/uniconvertor/share/fonts/descr.txt
+%%PYTHON_SITELIBDIR%%/uniconvertor/share/ps_templates/sk1-proc.ps
+%%PYTHON_SITELIBDIR%%/uniconvertor/share/ps_templates/sketch-proc.ps
diff --git a/lang/Makefile b/lang/Makefile
index 25654e7cccff..0e88d454b83a 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -144,6 +144,7 @@
SUBDIR += jimtcl
SUBDIR += jruby
SUBDIR += julia
+ SUBDIR += julia10
SUBDIR += jython
SUBDIR += kawa
SUBDIR += kf5-kross
@@ -274,6 +275,8 @@
SUBDIR += py-lupa
SUBDIR += py-qt5-qml
SUBDIR += py-textX
+ SUBDIR += pypy
+ SUBDIR += pypy3
SUBDIR += python
SUBDIR += python-doc-html
SUBDIR += python-doc-pdf-a4
@@ -333,6 +336,10 @@
SUBDIR += snobol4
SUBDIR += solidity
SUBDIR += spidermonkey17
+ SUBDIR += spidermonkey185
+ SUBDIR += spidermonkey24
+ SUBDIR += spidermonkey52
+ SUBDIR += spidermonkey60
SUBDIR += spidermonkey78
SUBDIR += spl
SUBDIR += squeak
@@ -348,6 +355,7 @@
SUBDIR += tcl87
SUBDIR += tclX
SUBDIR += tolua
+ SUBDIR += tolua++
SUBDIR += tuareg-mode.el
SUBDIR += twelf
SUBDIR += ucc
diff --git a/lang/julia10/Makefile b/lang/julia10/Makefile
new file mode 100644
index 000000000000..489a327ab018
--- /dev/null
+++ b/lang/julia10/Makefile
@@ -0,0 +1,188 @@
+# Created by: Iblis Lin <iblis@hs.ntnu.edu.tw>
+# $FreeBSD$
+
+PORTNAME= julia
+PORTVERSION= 1.0.4
+DISTVERSIONSUFFIX= -full
+PORTREVISION= 5
+CATEGORIES= lang math
+MASTER_SITES= https://github.com/JuliaLang/julia/releases/download/v${PORTVERSION}/
+PKGNAMESUFFIX= 10
+
+MAINTAINER= iblis@hs.ntnu.edu.tw
+COMMENT= Julia Language: A fresh approach to technical computing
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE.md
+
+ONLY_FOR_ARCHS= amd64 i386
+
+LIB_DEPENDS= libcurl.so:ftp/curl \
+ libgit2.so:devel/libgit2 \
+ libgmp.so:math/gmp \
+ libmbedtls.so:security/mbedtls \
+ libmpfr.so:math/mpfr \
+ libpcre2-8.so:devel/pcre2 \
+ libssh2.so:security/libssh2 \
+ libutf8proc.so:textproc/utf8proc
+EXTRACT_DEPENDS=gmake:devel/gmake
+BUILD_DEPENDS= patchelf:sysutils/patchelf \
+ pcre2-config:devel/pcre2 \
+ cmake:devel/cmake
+
+USES= gmake compiler:c++11-lib fortran python:2.7,build perl5 \
+ shebangfix
+USE_LDCONFIG= yes
+
+DESCR= ${.CURDIR}/../julia/pkg-descr
+
+SHEBANG_GLOB= *.sh
+
+WRKSRC= ${WRKDIR}/julia-${PORTVERSION}
+INSTALLDIR= julia/${PORTNAME}${PKGNAMESUFFIX}
+MANDIRS+= ${PREFIX}/${INSTALLDIR}/man
+
+ALL_TARGET= default
+INSTALL_TARGET= install
+TEST_TARGET= test
+
+PLIST_SUB= VERSION="${PORTVERSION:R}" \
+ JULIA="${INSTALLDIR}"
+
+CXXFLAGS+= -stdlib=libc++ -std=c++11
+MAKE_ARGS+= prefix=${PREFIX}/${INSTALLDIR} \
+ JCXXFLAGS="${CXXFLAGS}" \
+ FORCE_ASSERTIONS=${FORCE_ASSERTIONS} \
+ USE_GPL_LIBS=${USE_GPL_LIBS} \
+ USE_SYSTEM_CURL=1 \
+ USE_SYSTEM_GMP=1 \
+ USE_SYSTEM_LAPACK=1 \
+ USE_SYSTEM_LIBGIT2=1 \
+ USE_SYSTEM_LIBSSH2=1 \
+ USE_SYSTEM_LIBUV=0 \
+ USE_SYSTEM_MBEDTLS=1 \
+ USE_SYSTEM_MPFR=1 \
+ USE_SYSTEM_PATCHELF=1 \
+ USE_SYSTEM_PCRE=1 \
+ USE_SYSTEM_UTF8PROC=1 \
+ NO_GIT=1
+
+OPTIONS_DEFINE= DEBUG DOCS GPL_LIBS DESKTOP NATIVE
+OPTIONS_DEFAULT= OPENLIBM
+OPTIONS_GROUP= PRIVATE
+OPTIONS_GROUP_PRIVATE= OPENBLAS
+OPTIONS_SINGLE= LIBM
+OPTIONS_SINGLE_LIBM= SYSLIBM OPENLIBM
+OPTIONS_SUB= yes
+
+PRIVATE_DESC= Build self-shipped private depends
+LIBM_DESC= Math library implementation
+
+DEBUG_VARS= FORCE_ASSERTIONS=1 \
+ ALL_TARGET=all
+DEBUG_MAKE_ARGS= BUNDLE_DEBUG_LIBS=1
+
+DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${PKGNAMESUFFIX}
+PORTDOCS= html
+DOCS_VARS= INSTALL_TARGET+=install-docs
+
+GPL_LIBS_DESC= Build with GPL lib: SUITESPARSE
+GPL_LIBS_MAKE_ARGS= USE_SYSTEM_SUITESPARSE=0
+GPL_LIBS_VARS= USE_GPL_LIBS=1
+
+DESKTOP_DESC= Install icon, .desktop and appdata files
+DESKTOP_USES= gnome
+DESKTOP_VARS= INSTALL_TARGET+=install-desktop \
+ INSTALLS_ICONS=yes
+
+SYSLIBM_DESC= Build with system libm
+SYSLIBM_MAKE_ARGS= USE_SYSTEM_LIBM=1
+
+OPENLIBM_DESC= Build with OpenLibm (math/openlibm)
+OPENLIBM_MAKE_ARGS= USE_SYSTEM_OPENLIBM=1
+OPENLIBM_LIB_DEPENDS= libopenlibm.so:math/openlibm
+
+OPENBLAS_DESC= Private OpenBLAS v0.3.2\
+ (ports tree: v${:!${MAKE} -C ${PORTSDIR}/math/openblas -V PORTVERSION!})
+OPENBLAS_MAKE_ARGS= USE_SYSTEM_BLAS=0 OPENBLAS_DYNAMIC_ARCH=1
+OPENBLAS_MAKE_ARGS_OFF= USE_SYSTEM_BLAS=1
+OPENBLAS_LIB_DEPENDS_OFF= libopenblas.so:math/openblas
+
+.include <bsd.port.options.mk>
+
+NATIVE_DESC= Build with native CPU JIT tuning
+.if ${PORT_OPTIONS:MNATIVE}
+MAKE_ARGS+= JULIA_CPU_TARGET=native
+.else
+.if ${ARCH} == "amd64"
+MAKE_ARGS+= JULIA_CPU_TARGET=x86-64
+.elif ${ARCH} == "i386"
+MAKE_ARGS+= JULIA_CPU_TARGET=pentium4
+.else
+MAKE_ARGS+= JULIA_CPU_TARGET=generic
+.endif
+.endif # .if ${PORT_OPTIONS:MNATIVE}
+
+# OPENBLAS plist
+.if ${PORT_OPTIONS:MOPENBLAS}
+.if ${ARCH} == "amd64"
+PLIST_SUB+= OPENBLAS64="64_"
+.else
+PLIST_SUB+= OPENBLAS64=""
+.endif
+.endif # .if ${PORT_OPTIONS:MOPENBLAS}
+
+.if ${ARCH} == "i386"
+EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-ui_Makefile
+.endif
+
+post-extract:
+ ${MAKE_CMD} -C ${WRKSRC}/deps extract
+ ${MAKE_CMD} -C ${WRKSRC}/stdlib install
+
+post-patch:
+ echo "override TAGGED_RELEASE_BANNER=\"FreeBSD port lang/${PORTNAME}${PKGNAMESUFFIX} build\"" >> ${WRKSRC}/Make.user
+ # unset ARCH for auto-detection
+ # Julia build script uses the name x86_86/x86, which are different from ports framework
+ echo "ARCH=" >> ${WRKSRC}/Make.user
+
+post-patch-OPENBLAS-on:
+ ${CP} ${FILESDIR}/extra-patch-openblas-fix-arch.patch ${WRKSRC}/deps/patches/openblas-fix-arch.patch
+
+post-patch-OPENBLAS-off:
+ echo "LIBBLAS= -lopenblas -L${LOCALBASE}/lib" >> ${WRKSRC}/Make.user
+ echo "LIBBLASNAME=libopenblas" >> ${WRKSRC}/Make.user
+ echo 'LIBLAPACK= $$(LIBBLAS)' >> ${WRKSRC}/Make.user
+ echo 'LIBLAPACKNAME= $$(LIBBLASNAME)' >> ${WRKSRC}/Make.user
+
+post-configure-OPENBLAS-off:
+ ${CC} ${CFLAGS} -lopenblas ${LDFLAGS} -o ${WRKSRC}/check_openblas \
+ ${FILESDIR}/check_openblas.c
+ ${WRKSRC}/check_openblas && ( \
+ echo "USE_BLAS64=1" >> ${WRKSRC}/Make.user \
+ ) || ( \
+ echo "USE_BLAS64=0" >> ${WRKSRC}/Make.user \
+ )
+
+post-install:
+ ${RLN} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/bin/julia ${STAGEDIR}${PREFIX}/bin/${PORTNAME}${PKGNAMESUFFIX}
+ ${RLN} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/man/man1/julia.1 ${STAGEDIR}${PREFIX}/man/man1/${PORTNAME}${PKGNAMESUFFIX}.1
+
+ # clean up for Pkg3.jl
+.for file in .codecov.yml .travis.yml appveyor.yml bors.toml .gitignore source-extracted
+ ${RM} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/julia/stdlib/v${PORTVERSION:R}/Pkg/${file}
+ ${RM} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/julia/stdlib/v${PORTVERSION:R}/Pkg/ext/TOML/${file}
+.endfor
+
+post-install-DEBUG-on:
+ ${RLN} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/bin/julia-debug ${STAGEDIR}${PREFIX}/bin/${PORTNAME}${PKGNAMESUFFIX}-debug
+
+post-install-DOCS-on:
+ ${MV} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/doc/julia ${STAGEDIR}${DOCSDIR}
+ ${RMDIR} ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/doc
+
+post-install-DOCS-off:
+ # remove empty dir
+ ${RM} -r ${STAGEDIR}${PREFIX}/${INSTALLDIR}/share/doc
+
+.include <bsd.port.mk>
diff --git a/lang/julia10/distinfo b/lang/julia10/distinfo
new file mode 100644
index 000000000000..7f7181ced73d
--- /dev/null
+++ b/lang/julia10/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1559889707
+SHA256 (julia-1.0.4-full.tar.gz) = bbc5c88a4acfecd3b059a01680926c693b82cf3b41733719c384fb0b371ca581
+SIZE (julia-1.0.4-full.tar.gz) = 95865812
diff --git a/lang/julia10/files/check_openblas.c b/lang/julia10/files/check_openblas.c
new file mode 100644
index 000000000000..6218d3507c65
--- /dev/null
+++ b/lang/julia10/files/check_openblas.c
@@ -0,0 +1,10 @@
+#include <string.h>
+
+char* openblas_get_config(void);
+
+int main()
+{
+ if (strstr(openblas_get_config(), "USE64BITINT") == NULL)
+ return 1;
+ return 0;
+}
diff --git a/lang/julia10/files/extra-patch-openblas-fix-arch.patch b/lang/julia10/files/extra-patch-openblas-fix-arch.patch
new file mode 100644
index 000000000000..cc965ecbe18d
--- /dev/null
+++ b/lang/julia10/files/extra-patch-openblas-fix-arch.patch
@@ -0,0 +1,19 @@
+--- Makefile.system.orig 2019-02-06 00:50:04.658572000 +0800
++++ Makefile.system 2019-02-06 00:51:30.598745000 +0800
+@@ -9,6 +9,16 @@
+ TOPDIR = .
+ endif
+
++ifeq ($(ARCH), amd64)
++override ARCH=x86_64
++else ifeq ($(ARCH), powerpc64)
++override ARCH=power
++else ifeq ($(ARCH), i386)
++override ARCH=x86
++else ifeq ($(ARCH), aarch64)
++override ARCH=arm64
++endif
++
+ NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
+
+ # Default C compiler
diff --git a/lang/julia10/files/extra-patch-ui_Makefile b/lang/julia10/files/extra-patch-ui_Makefile
new file mode 100644
index 000000000000..2c3a834537dd
--- /dev/null
+++ b/lang/julia10/files/extra-patch-ui_Makefile
@@ -0,0 +1,11 @@
+--- ui/Makefile.orig 2016-09-20 02:54:22 UTC
++++ ui/Makefile
+@@ -14,7 +14,7 @@ SRCS := repl
+ HEADERS := $(addprefix $(JULIAHOME)/src/,julia.h julia_threads.h julia_internal.h options.h) \
+ $(BUILDDIR)/../src/julia_version.h $(wildcard $(JULIAHOME)/src/support/*.h) $(LIBUV_INC)/uv.h
+
+-FLAGS := -I$(BUILDROOT)/src -I$(JULIAHOME)/src -I$(JULIAHOME)/src/support -I$(build_includedir)
++FLAGS := -I$(BUILDROOT)/src -I$(JULIAHOME)/src -I$(JULIAHOME)/src/support -I$(build_includedir) -latomic
+ ifneq ($(USEMSVC), 1)
+ FLAGS += -Wall -Wno-strict-aliasing -fno-omit-frame-pointer -Wc++-compat
+ endif
diff --git a/lang/julia10/files/patch-Make.inc b/lang/julia10/files/patch-Make.inc
new file mode 100644
index 000000000000..1ac15fb8c97a
--- /dev/null
+++ b/lang/julia10/files/patch-Make.inc
@@ -0,0 +1,53 @@
+--- Make.inc.orig 2018-12-18 01:38:57 UTC
++++ Make.inc
+@@ -130,12 +130,7 @@ endif
+ # disable automatic Makefile rules
+ .SUFFIXES:
+
+-# find out if git repository is available
+-ifeq ($(shell [ -e $(JULIAHOME)/.git ] && echo true || echo "Warning: git information unavailable; versioning information limited" >&2), true)
+-NO_GIT := 0
+-else
+ NO_GIT := 1
+-endif
+
+ # Julia's Semantic Versioning system labels the three decimal places in a version number as
+ # the major, minor and patch versions. Typically the major version would be incremented
+@@ -185,7 +180,7 @@ libdir := $(prefix)/lib
+ libexecdir := $(prefix)/libexec
+ datarootdir := $(prefix)/share
+ docdir := $(datarootdir)/doc/julia
+-mandir := $(datarootdir)/man
++mandir := $(prefix)/man
+ man1dir := $(mandir)/man1
+ includedir := $(prefix)/include
+ sysconfdir := $(prefix)/etc
+@@ -198,7 +193,7 @@ build_depsbindir := $(build_prefix)/tools
+ build_libdir := $(build_prefix)/lib
+ build_libexecdir := $(build_prefix)/libexec
+ build_datarootdir := $(build_prefix)/share
+-build_mandir := $(build_datarootdir)/man
++build_mandir := $(build_prefix)/man
+ build_man1dir := $(build_mandir)/man1
+ build_includedir := $(build_prefix)/include
+ build_sysconfdir := $(build_prefix)/etc
+@@ -364,7 +359,7 @@ endif
+ ifeq ($(USEIFC), 1)
+ FC := ifort
+ else
+-FC := $(CROSS_COMPILE)gfortran
++FC ?= $(CROSS_COMPILE)gfortran
+ endif
+
+ STDLIBCPP_FLAG :=
+@@ -417,8 +412,8 @@ SHIPFLAGS := -O3 -ggdb2 -falign-functions
+ endif
+
+ ifeq ($(USECLANG),1)
+-CC := $(CROSS_COMPILE)clang
+-CXX := $(CROSS_COMPILE)clang++
++CC ?= $(CROSS_COMPILE)clang
++CXX ?= $(CROSS_COMPILE)clang++
+ JCFLAGS := -pipe $(fPIC) -fno-strict-aliasing -D_FILE_OFFSET_BITS=64
+ # AArch64 needs this flag to generate the .eh_frame used by libunwind
+ JCPPFLAGS := -fasynchronous-unwind-tables
diff --git a/lang/julia10/files/patch-Makefile b/lang/julia10/files/patch-Makefile
new file mode 100644
index 000000000000..e11bdb8eee7d
--- /dev/null
+++ b/lang/julia10/files/patch-Makefile
@@ -0,0 +1,122 @@
+--- Makefile.orig 2018-12-18 01:38:57 UTC
++++ Makefile
+@@ -264,24 +264,6 @@ endif
+ endif
+ endif
+
+-# On FreeBSD, /lib/libgcc_s.so.1 is incompatible with Fortran; to use Fortran on FreeBSD,
+-# we need to link to the libgcc_s that ships with the same GCC version used by libgfortran.
+-# To work around this, we copy the GCC libraries we need, namely libgfortran, libgcc_s,
+-# and libquadmath, into our build library directory, $(build_libdir). We also add them to
+-# JL_PRIVATE_LIBS-0 so that they know where they need to live at install time.
+-ifeq ($(OS),FreeBSD)
+-define std_so
+-julia-deps: | $$(build_libdir)/$(1).so
+-$$(build_libdir)/$(1).so: | $$(build_libdir)
+- $$(INSTALL_M) $$(GCCPATH)/$(1).so* $$(build_libdir)
+-JL_PRIVATE_LIBS-0 += $(1)
+-endef
+-
+-$(eval $(call std_so,libgfortran))
+-$(eval $(call std_so,libgcc_s))
+-$(eval $(call std_so,libquadmath))
+-endif # FreeBSD
+-
+ ifeq ($(OS),WINNT)
+ define std_dll
+ julia-deps: | $$(build_bindir)/lib$(1).dll $$(build_depsbindir)/lib$(1).dll
+@@ -328,8 +310,7 @@ JL_PRIVATE_LIBS-0 += libgfortran libgcc_s libquadmath
+ endif
+
+
+-install: $(build_depsbindir)/stringreplace $(BUILDROOT)/doc/_build/html/en/index.html
+- @$(MAKE) $(QUIET_MAKE) all
++install: $(build_depsbindir)/stringreplace
+ @for subdir in $(bindir) $(datarootdir)/julia/stdlib/$(VERSDIR) $(docdir) $(man1dir) $(includedir)/julia $(libdir) $(private_libdir) $(sysconfdir); do \
+ mkdir -p $(DESTDIR)$$subdir; \
+ done
+@@ -371,10 +352,6 @@ endif
+ fi \
+ done \
+ done
+- for suffix in $(JL_PRIVATE_LIBS-1) ; do \
+- lib=$(build_private_libdir)/$${suffix}.$(SHLIB_EXT); \
+- $(INSTALL_M) $$lib $(DESTDIR)$(private_libdir) ; \
+- done
+ endif
+
+ # Copy public headers
+@@ -389,8 +366,6 @@ endif
+ $(INSTALL_M) $(JULIAHOME)/contrib/build_sysimg.jl $(DESTDIR)$(datarootdir)/julia/
+ # Copy in all .jl sources as well
+ cp -R -L $(build_datarootdir)/julia $(DESTDIR)$(datarootdir)/
+- # Copy documentation
+- cp -R -L $(BUILDROOT)/doc/_build/html $(DESTDIR)$(docdir)/
+ # Remove various files which should not be installed
+ -rm -f $(DESTDIR)$(datarootdir)/julia/base/version_git.sh
+ -rm -f $(DESTDIR)$(datarootdir)/julia/test/Makefile
+@@ -400,16 +375,6 @@ endif
+ -rm -f $(DESTDIR)$(datarootdir)/julia/stdlib/$(VERSDIR)/*/build-checked
+ # Copy in beautiful new man page
+ $(INSTALL_F) $(build_man1dir)/julia.1 $(DESTDIR)$(man1dir)/
+- # Copy icon and .desktop file
+- mkdir -p $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/
+- $(INSTALL_F) $(JULIAHOME)/contrib/julia.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/
+- -touch -c $(DESTDIR)$(datarootdir)/icons/hicolor/
+- -gtk-update-icon-cache $(DESTDIR)$(datarootdir)/icons/hicolor/
+- mkdir -p $(DESTDIR)$(datarootdir)/applications/
+- $(INSTALL_F) $(JULIAHOME)/contrib/julia.desktop $(DESTDIR)$(datarootdir)/applications/
+- # Install appdata file
+- mkdir -p $(DESTDIR)$(datarootdir)/appdata/
+- $(INSTALL_F) $(JULIAHOME)/contrib/julia.appdata.xml $(DESTDIR)$(datarootdir)/appdata/
+
+ # Update RPATH entries and JL_SYSTEM_IMAGE_PATH if $(private_libdir_rel) != $(build_private_libdir_rel)
+ ifneq ($(private_libdir_rel),$(build_private_libdir_rel))
+@@ -420,7 +385,7 @@ ifeq ($(OS), Darwin)
+ done
+ else ifneq (,$(findstring $(OS),Linux FreeBSD))
+ for j in $(JL_TARGETS) ; do \
+- patchelf --set-rpath '$$ORIGIN/$(private_libdir_rel):$$ORIGIN/$(libdir_rel)' $(DESTDIR)$(bindir)/$$j; \
++ patchelf --set-rpath '$(GCCPATH):$$ORIGIN/$(private_libdir_rel):$$ORIGIN/$(libdir_rel)' $(DESTDIR)$(bindir)/$$j; \
+ done
+ endif
+
+@@ -431,22 +396,24 @@ ifeq ($(BUNDLE_DEBUG_LIBS),1)
+ endif
+
+ endif
+- # On FreeBSD, remove the build's libdir from each library's RPATH
+-ifeq ($(OS),FreeBSD)
+- $(JULIAHOME)/contrib/fixup-rpath.sh $(build_depsbindir)/patchelf $(DESTDIR)$(libdir) $(build_libdir)
+- $(JULIAHOME)/contrib/fixup-rpath.sh $(build_depsbindir)/patchelf $(DESTDIR)$(private_libdir) $(build_libdir)
+- $(JULIAHOME)/contrib/fixup-rpath.sh $(build_depsbindir)/patchelf $(DESTDIR)$(bindir) $(build_libdir)
+- # Set libgfortran's RPATH to ORIGIN instead of GCCPATH. It's only libgfortran that
+- # needs to be fixed here, as libgcc_s and libquadmath don't have RPATHs set. If we
+- # don't set libgfortran's RPATH, it won't be able to find its friends on systems
+- # that don't have the exact GCC port installed used for the build.
+- for lib in $(DESTDIR)$(private_libdir)/libgfortran*$(SHLIB_EXT)*; do \
+- $(build_depsbindir)/patchelf --set-rpath '$$ORIGIN' $$lib; \
+- done
+-endif
+-
+ mkdir -p $(DESTDIR)$(sysconfdir)
+ cp -R $(build_sysconfdir)/julia $(DESTDIR)$(sysconfdir)/
++
++install-docs:
++ # Copy documentation
++ cp -R -L $(BUILDROOT)/doc/_build/html $(DESTDIR)$(docdir)/
++
++install-desktop:
++ # Copy icon and .desktop file
++ mkdir -p $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/
++ $(INSTALL_F) $(JULIAHOME)/contrib/julia.svg $(DESTDIR)$(datarootdir)/icons/hicolor/scalable/apps/
++ -touch -c $(DESTDIR)$(datarootdir)/icons/hicolor/
++ -gtk-update-icon-cache $(DESTDIR)$(datarootdir)/icons/hicolor/
++ mkdir -p $(DESTDIR)$(datarootdir)/applications/
++ $(INSTALL_F) $(JULIAHOME)/contrib/julia.desktop $(DESTDIR)$(datarootdir)/applications/
++ # Install appdata file
++ mkdir -p $(DESTDIR)$(datarootdir)/appdata/
++ $(INSTALL_F) $(JULIAHOME)/contrib/julia.appdata.xml $(DESTDIR)$(datarootdir)/appdata/
+
+ distclean:
+ -rm -fr $(BUILDROOT)/julia-*.tar.gz $(BUILDROOT)/julia*.exe $(BUILDROOT)/julia-*.7z $(BUILDROOT)/julia-$(JULIA_COMMIT)
diff --git a/lang/julia10/files/patch-base_Makefile b/lang/julia10/files/patch-base_Makefile
new file mode 100644
index 000000000000..95a549c14f92
--- /dev/null
+++ b/lang/julia10/files/patch-base_Makefile
@@ -0,0 +1,11 @@
+--- base/Makefile.orig 2018-09-20 04:08:53 UTC
++++ base/Makefile
+@@ -109,7 +109,7 @@ ifneq ($(OS), WINNT)
+ # put a symlink in the private libdir.
+ # System package managers may want to install these links manually,
+ # but if not, this will try to create the proper symlink to the right minor version.
+-all: symlink_system_libraries
++all:
+ SYMLINK_SYSTEM_LIBRARIES :=
+
+ # if it's a symlink, pick up the symlink target instead, for one level of indirection
diff --git a/lang/julia10/files/patch-deps_blas.mk b/lang/julia10/files/patch-deps_blas.mk
new file mode 100644
index 000000000000..1d999807f366
--- /dev/null
+++ b/lang/julia10/files/patch-deps_blas.mk
@@ -0,0 +1,17 @@
+--- deps/blas.mk.orig 2018-08-07 16:34:08 UTC
++++ deps/blas.mk
+@@ -94,6 +94,14 @@ OPENBLAS_BUILD_OPTS += MAKE_NB_JOBS=0
+
+ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/source-extracted
+ perl -i -ple 's/^\s*(EXTRALIB\s*\+=\s*-lSystemStubs)\s*$$/# $$1/g' $(dir $<)/Makefile.system
++ cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \
++ patch -p1 -f < $(SRCDIR)/patches/openblas-fix-arch.patch
++ /usr/bin/sed -i.bak -e "s+(ARCH)+(AR)+" \
++ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/lapack-netlib/SRC/Makefile \
++ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/lapack-netlib/SRC/VARIANTS/Makefile \
++ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/lapack-netlib/TESTING/MATGEN/Makefile \
++ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/lapack-netlib/LAPACKE/src/Makefile \
++ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/lapack-netlib/LAPACKE/utils/Makefile
+ echo 1 > $@
+
+ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured
diff --git a/lang/julia10/files/patch-src_Makefile b/lang/julia10/files/patch-src_Makefile
new file mode 100644
index 000000000000..ecc60998c78b
--- /dev/null
+++ b/lang/julia10/files/patch-src_Makefile
@@ -0,0 +1,20 @@
+--- src/Makefile.orig 2018-12-18 01:38:57 UTC
++++ src/Makefile
+@@ -266,7 +266,7 @@ else
+ endif
+
+ $(build_shlibdir)/libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(DOBJS) $(BUILDDIR)/flisp/libflisp-debug.a $(BUILDDIR)/support/libsupport-debug.a $(LIBUV)
+- @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(DEBUGFLAGS) $(DOBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(DEBUG_LIBS) $(SONAME_DEBUG))
++ @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(DEBUGFLAGS) $(DOBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(DEBUG_LIBS) $(SONAME_DEBUG)) -lgcc_s
+ $(INSTALL_NAME_CMD)libjulia-debug.$(SHLIB_EXT) $@
+ ifneq ($(OS), WINNT)
+ @ln -sf libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT) $(build_shlibdir)/libjulia-debug.$(JL_MAJOR_SHLIB_EXT)
+@@ -281,7 +281,7 @@ $(BUILDDIR)/libjulia-debug.a: $(SRCDIR)/julia.expmap $
+ libjulia-debug: $(build_shlibdir)/libjulia-debug.$(JL_MAJOR_MINOR_SHLIB_EXT) $(PUBLIC_HEADER_TARGETS)
+
+ $(build_shlibdir)/libjulia.$(JL_MAJOR_MINOR_SHLIB_EXT): $(SRCDIR)/julia.expmap $(OBJS) $(BUILDDIR)/flisp/libflisp.a $(BUILDDIR)/support/libsupport.a $(LIBUV)
+- @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(SHIPFLAGS) $(OBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(RELEASE_LIBS) $(SONAME))
++ @$(call PRINT_LINK, $(CXXLD) $(CXXFLAGS) $(CXXLDFLAGS) $(SHIPFLAGS) $(OBJS) $(RPATH_LIB) -o $@ $(LDFLAGS) $(JLIBLDFLAGS) $(RELEASE_LIBS) $(SONAME)) -lgcc_s
+ $(INSTALL_NAME_CMD)libjulia.$(SHLIB_EXT) $@
+ ifneq ($(OS), WINNT)
+ @ln -sf libjulia.$(JL_MAJOR_MINOR_SHLIB_EXT) $(build_shlibdir)/libjulia.$(JL_MAJOR_SHLIB_EXT)
diff --git a/lang/julia10/pkg-message b/lang/julia10/pkg-message
new file mode 100644
index 000000000000..5ded02bedf6e
--- /dev/null
+++ b/lang/julia10/pkg-message
@@ -0,0 +1,9 @@
+[
+{ type: install
+ message: <<EOM
+ If you're looking for the other version of Julia,
+ there is a meta port lang/julia.
+ Please checkout "make -C /usr/ports/lang/julia config" as well.
+EOM
+}
+]
diff --git a/lang/julia10/pkg-plist b/lang/julia10/pkg-plist
new file mode 100644
index 000000000000..8bb7901b9159
--- /dev/null
+++ b/lang/julia10/pkg-plist
@@ -0,0 +1,817 @@
+bin/julia10
+%%JULIA%%/bin/julia
+%%DEBUG%%bin/julia10-debug
+%%DEBUG%%%%JULIA%%/bin/julia-debug
+%%JULIA%%/etc/julia/startup.jl
+%%JULIA%%/include/julia/END.h
+%%JULIA%%/include/julia/ENTRY.amd64.h
+%%JULIA%%/include/julia/ENTRY.i387.h
+%%JULIA%%/include/julia/MurmurHash3.h
+%%JULIA%%/include/julia/analyzer_annotations.h
+%%JULIA%%/include/julia/arraylist.h
+%%JULIA%%/include/julia/atomics.h
+%%JULIA%%/include/julia/bitvector.h
+%%JULIA%%/include/julia/dirpath.h
+%%JULIA%%/include/julia/dtypes.h
+%%JULIA%%/include/julia/hashing.h
+%%JULIA%%/include/julia/htable.h
+%%JULIA%%/include/julia/ios.h
+%%JULIA%%/include/julia/julia.h
+%%JULIA%%/include/julia/julia_assert.h
+%%JULIA%%/include/julia/julia_threads.h
+%%JULIA%%/include/julia/julia_version.h
+%%JULIA%%/include/julia/libsupport.h
+%%JULIA%%/include/julia/locks.h
+%%JULIA%%/include/julia/platform.h
+%%JULIA%%/include/julia/ptrhash.h
+%%JULIA%%/include/julia/strtod.h
+%%JULIA%%/include/julia/timefuncs.h
+%%JULIA%%/include/julia/tls.h
+%%JULIA%%/include/julia/tzfile.h
+%%JULIA%%/include/julia/utf8.h
+%%JULIA%%/include/julia/utils.h
+%%JULIA%%/include/julia/uv.h
+%%JULIA%%/include/julia/uv/bsd.h
+%%JULIA%%/include/julia/uv/errno.h
+%%JULIA%%/include/julia/uv/threadpool.h
+%%JULIA%%/include/julia/uv/unix.h
+%%JULIA%%/include/julia/uv/version.h
+%%JULIA%%/lib/julia/libLLVM-6.0.0.so
+%%JULIA%%/lib/julia/libLLVM-6.0.so
+%%JULIA%%/lib/julia/libLLVM.so
+%%JULIA%%/lib/julia/libccalltest.so
+%%JULIA%%/lib/julia/libdSFMT.so
+%%JULIA%%/lib/julia/sys.so
+%%DEBUG%%%%JULIA%%/lib/julia/sys-debug.so
+%%DEBUG%%%%JULIA%%/lib/libjulia-debug.so
+%%DEBUG%%%%JULIA%%/lib/libjulia-debug.so.1
+%%DEBUG%%%%JULIA%%/lib/libjulia-debug.so.%%VERSION%%
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libamd.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libcamd.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libccolamd.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libcholmod.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libcolamd.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libspqr.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libsuitesparse_wrapper.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libsuitesparseconfig.so
+%%GPL_LIBS%%%%JULIA%%/lib/julia/libumfpack.so
+%%OPENBLAS%%%%JULIA%%/lib/julia/libopenblas%%OPENBLAS64%%.so
+%%JULIA%%/lib/libjulia.so
+%%JULIA%%/lib/libjulia.so.1
+%%JULIA%%/lib/libjulia.so.%%VERSION%%
+man/man1/julia10.1.gz
+%%JULIA%%/man/man1/julia.1.gz
+%%DESKTOP%%%%JULIA%%/share/appdata/julia.appdata.xml
+%%DESKTOP%%%%JULIA%%/share/applications/julia.desktop
+%%DESKTOP%%%%JULIA%%/share/icons/hicolor/scalable/apps/julia.svg
+%%JULIA%%/share/julia/base.cache
+%%JULIA%%/share/julia/base/Enums.jl
+%%JULIA%%/share/julia/base/Makefile
+%%JULIA%%/share/julia/base/abstractarray.jl
+%%JULIA%%/share/julia/base/abstractarraymath.jl
+%%JULIA%%/share/julia/base/abstractdict.jl
+%%JULIA%%/share/julia/base/abstractset.jl
+%%JULIA%%/share/julia/base/accumulate.jl
+%%JULIA%%/share/julia/base/array.jl
+%%JULIA%%/share/julia/base/arraymath.jl
+%%JULIA%%/share/julia/base/arrayshow.jl
+%%JULIA%%/share/julia/base/asyncmap.jl
+%%JULIA%%/share/julia/base/atomics.jl
+%%JULIA%%/share/julia/base/bitarray.jl
+%%JULIA%%/share/julia/base/bitset.jl
+%%JULIA%%/share/julia/base/bool.jl
+%%JULIA%%/share/julia/base/boot.jl
+%%JULIA%%/share/julia/base/broadcast.jl
+%%JULIA%%/share/julia/base/build_h.jl
+%%JULIA%%/share/julia/base/c.jl
+%%JULIA%%/share/julia/base/cartesian.jl
+%%JULIA%%/share/julia/base/channels.jl
+%%JULIA%%/share/julia/base/char.jl
+%%JULIA%%/share/julia/base/checked.jl
+%%JULIA%%/share/julia/base/client.jl
+%%JULIA%%/share/julia/base/combinatorics.jl
+%%JULIA%%/share/julia/base/compiler/abstractinterpretation.jl
+%%JULIA%%/share/julia/base/compiler/bootstrap.jl
+%%JULIA%%/share/julia/base/compiler/compiler.jl
+%%JULIA%%/share/julia/base/compiler/inferenceresult.jl
+%%JULIA%%/share/julia/base/compiler/inferencestate.jl
+%%JULIA%%/share/julia/base/compiler/optimize.jl
+%%JULIA%%/share/julia/base/compiler/params.jl
+%%JULIA%%/share/julia/base/compiler/ssair/domtree.jl
+%%JULIA%%/share/julia/base/compiler/ssair/driver.jl
+%%JULIA%%/share/julia/base/compiler/ssair/inlining.jl
+%%JULIA%%/share/julia/base/compiler/ssair/ir.jl
+%%JULIA%%/share/julia/base/compiler/ssair/legacy.jl
+%%JULIA%%/share/julia/base/compiler/ssair/passes.jl
+%%JULIA%%/share/julia/base/compiler/ssair/queries.jl
+%%JULIA%%/share/julia/base/compiler/ssair/show.jl
+%%JULIA%%/share/julia/base/compiler/ssair/slot2ssa.jl
+%%JULIA%%/share/julia/base/compiler/ssair/verify.jl
+%%JULIA%%/share/julia/base/compiler/tfuncs.jl
+%%JULIA%%/share/julia/base/compiler/typeinfer.jl
+%%JULIA%%/share/julia/base/compiler/typelattice.jl
+%%JULIA%%/share/julia/base/compiler/typelimits.jl
+%%JULIA%%/share/julia/base/compiler/typeutils.jl
+%%JULIA%%/share/julia/base/compiler/utilities.jl
+%%JULIA%%/share/julia/base/compiler/validation.jl
+%%JULIA%%/share/julia/base/complex.jl
+%%JULIA%%/share/julia/base/coreio.jl
+%%JULIA%%/share/julia/base/ctypes.jl
+%%JULIA%%/share/julia/base/deepcopy.jl
+%%JULIA%%/share/julia/base/deprecated.jl
+%%JULIA%%/share/julia/base/dict.jl
+%%JULIA%%/share/julia/base/docs/Docs.jl
+%%JULIA%%/share/julia/base/docs/basedocs.jl
+%%JULIA%%/share/julia/base/docs/bindings.jl
+%%JULIA%%/share/julia/base/docs/core.jl
+%%JULIA%%/share/julia/base/docs/utils.jl
+%%JULIA%%/share/julia/base/download.jl
+%%JULIA%%/share/julia/base/env.jl
+%%JULIA%%/share/julia/base/errno_h.jl
+%%JULIA%%/share/julia/base/error.jl
+%%JULIA%%/share/julia/base/errorshow.jl
+%%JULIA%%/share/julia/base/essentials.jl
+%%JULIA%%/share/julia/base/event.jl
+%%JULIA%%/share/julia/base/exports.jl
+%%JULIA%%/share/julia/base/expr.jl
+%%JULIA%%/share/julia/base/fastmath.jl
+%%JULIA%%/share/julia/base/file.jl
+%%JULIA%%/share/julia/base/file_constants.jl
+%%JULIA%%/share/julia/base/filesystem.jl
+%%JULIA%%/share/julia/base/float.jl
+%%JULIA%%/share/julia/base/floatfuncs.jl
+%%JULIA%%/share/julia/base/gcutils.jl
+%%JULIA%%/share/julia/base/generator.jl
+%%JULIA%%/share/julia/base/gmp.jl
+%%JULIA%%/share/julia/base/grisu/bignum.jl
+%%JULIA%%/share/julia/base/grisu/bignums.jl
+%%JULIA%%/share/julia/base/grisu/fastfixed.jl
+%%JULIA%%/share/julia/base/grisu/fastprecision.jl
+%%JULIA%%/share/julia/base/grisu/fastshortest.jl
+%%JULIA%%/share/julia/base/grisu/float.jl
+%%JULIA%%/share/julia/base/grisu/grisu.jl
+%%JULIA%%/share/julia/base/hashing.jl
+%%JULIA%%/share/julia/base/hashing2.jl
+%%JULIA%%/share/julia/base/indices.jl
+%%JULIA%%/share/julia/base/initdefs.jl
+%%JULIA%%/share/julia/base/int.jl
+%%JULIA%%/share/julia/base/intfuncs.jl
+%%JULIA%%/share/julia/base/io.jl
+%%JULIA%%/share/julia/base/iobuffer.jl
+%%JULIA%%/share/julia/base/iostream.jl
+%%JULIA%%/share/julia/base/irrationals.jl
+%%JULIA%%/share/julia/base/iterators.jl
+%%JULIA%%/share/julia/base/libc.jl
+%%JULIA%%/share/julia/base/libuv.jl
+%%JULIA%%/share/julia/base/loading.jl
+%%JULIA%%/share/julia/base/lock.jl
+%%JULIA%%/share/julia/base/locks.jl
+%%JULIA%%/share/julia/base/logging.jl
+%%JULIA%%/share/julia/base/math.jl
+%%JULIA%%/share/julia/base/mathconstants.jl
+%%JULIA%%/share/julia/base/meta.jl
+%%JULIA%%/share/julia/base/methodshow.jl
+%%JULIA%%/share/julia/base/missing.jl
+%%JULIA%%/share/julia/base/mpfr.jl
+%%JULIA%%/share/julia/base/multidimensional.jl
+%%JULIA%%/share/julia/base/multimedia.jl
+%%JULIA%%/share/julia/base/multinverses.jl
+%%JULIA%%/share/julia/base/namedtuple.jl
+%%JULIA%%/share/julia/base/number.jl
+%%JULIA%%/share/julia/base/operators.jl
+%%JULIA%%/share/julia/base/options.jl
+%%JULIA%%/share/julia/base/ordering.jl
+%%JULIA%%/share/julia/base/osutils.jl
+%%JULIA%%/share/julia/base/pair.jl
+%%JULIA%%/share/julia/base/parse.jl
+%%JULIA%%/share/julia/base/path.jl
+%%JULIA%%/share/julia/base/pcre.jl
+%%JULIA%%/share/julia/base/pcre_h.jl
+%%JULIA%%/share/julia/base/permuteddimsarray.jl
+%%JULIA%%/share/julia/base/pointer.jl
+%%JULIA%%/share/julia/base/printf.jl
+%%JULIA%%/share/julia/base/process.jl
+%%JULIA%%/share/julia/base/promotion.jl
+%%JULIA%%/share/julia/base/range.jl
+%%JULIA%%/share/julia/base/rational.jl
+%%JULIA%%/share/julia/base/reduce.jl
+%%JULIA%%/share/julia/base/reducedim.jl
+%%JULIA%%/share/julia/base/reflection.jl
+%%JULIA%%/share/julia/base/refpointer.jl
+%%JULIA%%/share/julia/base/refvalue.jl
+%%JULIA%%/share/julia/base/regex.jl
+%%JULIA%%/share/julia/base/reinterpretarray.jl
+%%JULIA%%/share/julia/base/reshapedarray.jl
+%%JULIA%%/share/julia/base/rounding.jl
+%%JULIA%%/share/julia/base/secretbuffer.jl
+%%JULIA%%/share/julia/base/set.jl
+%%JULIA%%/share/julia/base/shell.jl
+%%JULIA%%/share/julia/base/show.jl
+%%JULIA%%/share/julia/base/simdloop.jl
+%%JULIA%%/share/julia/base/some.jl
+%%JULIA%%/share/julia/base/sort.jl
+%%JULIA%%/share/julia/base/special/cbrt.jl
+%%JULIA%%/share/julia/base/special/exp.jl
+%%JULIA%%/share/julia/base/special/exp10.jl
+%%JULIA%%/share/julia/base/special/hyperbolic.jl
+%%JULIA%%/share/julia/base/special/log.jl
+%%JULIA%%/share/julia/base/special/rem_pio2.jl
+%%JULIA%%/share/julia/base/special/trig.jl
+%%JULIA%%/share/julia/base/stacktraces.jl
+%%JULIA%%/share/julia/base/stat.jl
+%%JULIA%%/share/julia/base/stream.jl
+%%JULIA%%/share/julia/base/strings/basic.jl
+%%JULIA%%/share/julia/base/strings/io.jl
+%%JULIA%%/share/julia/base/strings/search.jl
+%%JULIA%%/share/julia/base/strings/string.jl
+%%JULIA%%/share/julia/base/strings/strings.jl
+%%JULIA%%/share/julia/base/strings/substring.jl
+%%JULIA%%/share/julia/base/strings/unicode.jl
+%%JULIA%%/share/julia/base/strings/util.jl
+%%JULIA%%/share/julia/base/subarray.jl
+%%JULIA%%/share/julia/base/summarysize.jl
+%%JULIA%%/share/julia/base/sysimg.jl
+%%JULIA%%/share/julia/base/sysinfo.jl
+%%JULIA%%/share/julia/base/task.jl
+%%JULIA%%/share/julia/base/threadcall.jl
+%%JULIA%%/share/julia/base/threadingconstructs.jl
+%%JULIA%%/share/julia/base/threads.jl
+%%JULIA%%/share/julia/base/traits.jl
+%%JULIA%%/share/julia/base/tuple.jl
+%%JULIA%%/share/julia/base/twiceprecision.jl
+%%JULIA%%/share/julia/base/util.jl
+%%JULIA%%/share/julia/base/uuid.jl
+%%JULIA%%/share/julia/base/uv_constants.jl
+%%JULIA%%/share/julia/base/version.jl
+%%JULIA%%/share/julia/base/version_git.jl
+%%JULIA%%/share/julia/base/views.jl
+%%JULIA%%/share/julia/base/weakkeydict.jl
+%%JULIA%%/share/julia/build_sysimg.jl
+%%JULIA%%/share/julia/julia-config.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/src/Base64.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/src/buffer.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/src/decode.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/src/encode.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Base64/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/CRC32c/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/CRC32c/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/CRC32c/src/CRC32c.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/CRC32c/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/Dates.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/accessors.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/adjusters.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/arithmetic.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/conversions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/deprecated.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/io.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/parse.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/periods.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/query.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/ranges.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/rounding.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/src/types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/accessors.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/adjusters.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/arithmetic.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/conversions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/io.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/periods.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/query.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/ranges.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/rounding.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/testgroups
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Dates/test/types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/DelimitedFiles/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/DelimitedFiles/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/DelimitedFiles/src/DelimitedFiles.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/DelimitedFiles/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/Distributed.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/cluster.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/clusterserialize.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/macros.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/managers.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/messages.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/pmap.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/precompile.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/process_messages.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/remotecall.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/src/workerpool.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/test/distributed_exec.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Distributed/test/topology.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/FileWatching/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/FileWatching/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/FileWatching/src/FileWatching.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/FileWatching/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Future/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Future/src/Future.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Future/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/src/InteractiveUtils.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/src/clipboard.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/src/codeview.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/src/editless.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/src/macros.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/InteractiveUtils/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/LibGit2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/blame.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/blob.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/callbacks.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/commit.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/config.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/consts.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/diff.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/error.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/gitcredential.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/index.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/merge.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/oid.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/rebase.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/reference.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/remote.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/repository.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/signature.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/status.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/strarray.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/tag.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/tree.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/utils.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/src/walker.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/invalid
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/invalid.pub
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/valid
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/valid-passphrase
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/valid-passphrase.pub
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/keys/valid.pub
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/libgit2-helpers.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/libgit2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/online.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LibGit2/test/testgroups
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Libdl/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Libdl/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Libdl/src/Libdl.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Libdl/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/LinearAlgebra.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/adjtrans.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/bidiag.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/bitarray.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/blas.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/bunchkaufman.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/cholesky.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/dense.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/deprecated.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/diagonal.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/eigen.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/exceptions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/factorization.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/generic.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/givens.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/hessenberg.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/lapack.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/ldlt.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/lq.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/lu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/matmul.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/qr.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/schur.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/special.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/structuredbroadcast.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/svd.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/symmetric.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/transpose.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/triangular.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/tridiag.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/src/uniformscaling.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/adjtrans.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/ambiguous_exec.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/bidiag.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/blas.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/bunchkaufman.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/cholesky.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/dense.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/diagonal.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/eigen.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/generic.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/givens.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/hessenberg.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/lapack.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/lq.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/lu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/matmul.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/pinv.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/qr.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/schur.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/special.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/structuredbroadcast.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/svd.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/symmetric.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/testgroups
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/testutils.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/triangular.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/trickyarithmetic.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/tridiag.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/LinearAlgebra/test/uniformscaling.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Logging/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Logging/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Logging/src/ConsoleLogger.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Logging/src/Logging.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Logging/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Common/Common.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Common/block.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Common/inline.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/GitHub/GitHub.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/GitHub/table.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/IPython/IPython.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Julia/Julia.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Julia/interp.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/Markdown.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/parse/config.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/parse/parse.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/parse/util.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/html.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/latex.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/plain.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/rich.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/rst.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/terminal/formatting.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/src/render/terminal/render.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Markdown/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Mmap/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Mmap/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Mmap/src/Mmap.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Mmap/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/CHANGELOG.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/Compat.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/LICENSE.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/README.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/generate.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/genstdlib.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/gitmeta.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/loadmeta.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/sha1map.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/stdlib.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/update.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/bin/utils.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/docs/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/docs/make.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/LICENSE.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/README.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/REQUIRE
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/src/TOML.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/src/parser.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/src/print.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/ext/TOML/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/API.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Display.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/GitTools.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/GraphType.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Operations.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Pkg.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Pkg2/Pkg2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Pkg2/reqs.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Pkg2/types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/PlatformEngines.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/REPLMode.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Resolve.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/Types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/generate.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/resolve/FieldValues.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/resolve/MaxSum.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/resolve/VersionWeights.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/src/versions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/NastyGenerator.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/api.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/pkg.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/project/good/pkg.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/repl.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/resolve.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/resolvedata1.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/RecursiveDep/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/RecursiveDep/src/RecursiveDep.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/RecursiveDep2/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/RecursiveDep2/src/RecursiveDep2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule/deps/build.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule/src/SubModule.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule2/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule2/deps/build.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule2/src/SubModule2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/SubModule2/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/deps/build.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/src/BigProject.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/LibFoo.jl/Manifest.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/LibFoo.jl/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/LibFoo.jl/src/LibFoo.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/LibFoo.jl/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/REQUIRE
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BigProject/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BuildProjectFixedDeps/Manifest.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BuildProjectFixedDeps/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BuildProjectFixedDeps/deps/build.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/BuildProjectFixedDeps/src/BuildProjectFixedDeps.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/PackageWithBuildSpecificTestDeps/src/PackageWithBuildSpecificTestDeps.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/PackageWithBuildSpecificTestDeps/test/REQUIRE
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/PackageWithBuildSpecificTestDeps/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/RequireDependency/REQUIRE
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/RequireDependency/src/RequireDependency.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithProject/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithProject/src/UnregisteredWithProject.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithProject/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithoutProject/deps/build.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithoutProject/src/UnregisteredWithoutProject.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/UnregisteredWithoutProject/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x1/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x1/src/x1.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x2/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x2/src/x2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x3/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x3/src/x3.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/test_packages/x3/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/testgroups
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Pkg/test/utils.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Printf/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Printf/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Printf/src/Printf.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Printf/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Profile/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Profile/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Profile/src/Profile.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Profile/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/LineEdit.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/REPL.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/REPLCompletions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/AbstractMenu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/LICENSE.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/MultiSelectMenu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/RadioMenu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/TerminalMenus.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/config.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/TerminalMenus/util.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/Terminals.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/docview.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/emoji_symbols.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/src/latex_symbols.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/FakeTerminals.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/TerminalMenus/multiselect_menu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/TerminalMenus/radio_menu.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/TerminalMenus/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/lineedit.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/repl.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/replcompletions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/REPL/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/DSFMT.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/RNGs.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/Random.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/generation.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/misc.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/src/normal.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Random/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/LICENSE.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/SHA.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/base_functions.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/common.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/constants.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/hmac.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/sha1.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/sha2.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/sha3.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/src/types.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/test/perf.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SHA/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Serialization/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Serialization/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Serialization/src/Serialization.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Serialization/src/precompile.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Serialization/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SharedArrays/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SharedArrays/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SharedArrays/src/SharedArrays.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SharedArrays/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/src/IPAddr.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/src/PipeServer.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/src/Sockets.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/src/addrinfo.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/test/nettest.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Sockets/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/SparseArrays.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/abstractsparse.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/deprecated.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/higherorderfns.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/linalg.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/sparsematrix.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/src/sparsevector.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/test/higherorderfns.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/test/sparse.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/test/sparsevector.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SparseArrays/test/testgroups
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Statistics/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Statistics/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Statistics/src/Statistics.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Statistics/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/SuiteSparse.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/cholmod.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/cholmod_h.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/deprecated.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/spqr.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/umfpack.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/src/umfpack_h.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/test/cholmod.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/test/spqr.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/SuiteSparse/test/umfpack.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Test/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Test/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Test/src/Test.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Test/src/logging.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Test/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/UUIDs/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/UUIDs/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/UUIDs/src/UUIDs.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/UUIDs/test/runtests.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Unicode/Project.toml
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Unicode/docs/src/index.md
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Unicode/src/Unicode.jl
+%%JULIA%%/share/julia/stdlib/v%%VERSION%%/Unicode/test/runtests.jl
+%%JULIA%%/share/julia/test/TestPkg/Manifest.toml
+%%JULIA%%/share/julia/test/TestPkg/Project.toml
+%%JULIA%%/share/julia/test/TestPkg/src/TestPkg.jl
+%%JULIA%%/share/julia/test/abstractarray.jl
+%%JULIA%%/share/julia/test/ambiguous.jl
+%%JULIA%%/share/julia/test/arrayops.jl
+%%JULIA%%/share/julia/test/asyncmap.jl
+%%JULIA%%/share/julia/test/backtrace.jl
+%%JULIA%%/share/julia/test/bigfloat.jl
+%%JULIA%%/share/julia/test/bigint.jl
+%%JULIA%%/share/julia/test/bitarray.jl
+%%JULIA%%/share/julia/test/bitset.jl
+%%JULIA%%/share/julia/test/boundscheck.jl
+%%JULIA%%/share/julia/test/boundscheck_exec.jl
+%%JULIA%%/share/julia/test/broadcast.jl
+%%JULIA%%/share/julia/test/cartesian.jl
+%%JULIA%%/share/julia/test/ccall.jl
+%%JULIA%%/share/julia/test/channels.jl
+%%JULIA%%/share/julia/test/char.jl
+%%JULIA%%/share/julia/test/checked.jl
+%%JULIA%%/share/julia/test/choosetests.jl
+%%JULIA%%/share/julia/test/cmdlineargs.jl
+%%JULIA%%/share/julia/test/codegen.jl
+%%JULIA%%/share/julia/test/combinatorics.jl
+%%JULIA%%/share/julia/test/compiler/compiler.jl
+%%JULIA%%/share/julia/test/compiler/irpasses.jl
+%%JULIA%%/share/julia/test/compiler/ssair.jl
+%%JULIA%%/share/julia/test/compiler/validation.jl
+%%JULIA%%/share/julia/test/complex.jl
+%%JULIA%%/share/julia/test/copy.jl
+%%JULIA%%/share/julia/test/core.jl
+%%JULIA%%/share/julia/test/depot/packages/Baz/81oLe/src/Baz.jl
+%%JULIA%%/share/julia/test/depot/packages/Foo/I05Qq/src/Foo.jl
+%%JULIA%%/share/julia/test/deprecation_exec.jl
+%%JULIA%%/share/julia/test/dict.jl
+%%JULIA%%/share/julia/test/docs.jl
+%%JULIA%%/share/julia/test/download.jl
+%%JULIA%%/share/julia/test/embedding/LocalModule.jl
+%%JULIA%%/share/julia/test/embedding/Makefile
+%%JULIA%%/share/julia/test/embedding/embedding-test.jl
+%%JULIA%%/share/julia/test/embedding/embedding.c
+%%JULIA%%/share/julia/test/enums.jl
+%%JULIA%%/share/julia/test/env.jl
+%%JULIA%%/share/julia/test/error.jl
+%%JULIA%%/share/julia/test/errorshow.jl
+%%JULIA%%/share/julia/test/euler.jl
+%%JULIA%%/share/julia/test/fastmath.jl
+%%JULIA%%/share/julia/test/file.jl
+%%JULIA%%/share/julia/test/float16.jl
+%%JULIA%%/share/julia/test/floatapprox.jl
+%%JULIA%%/share/julia/test/floatfuncs.jl
+%%JULIA%%/share/julia/test/functional.jl
+%%JULIA%%/share/julia/test/generic_map_tests.jl
+%%JULIA%%/share/julia/test/goto.jl
+%%JULIA%%/share/julia/test/grisu.jl
+%%JULIA%%/share/julia/test/hashing.jl
+%%JULIA%%/share/julia/test/inline.jl
+%%JULIA%%/share/julia/test/int.jl
+%%JULIA%%/share/julia/test/intfuncs.jl
+%%JULIA%%/share/julia/test/intrinsics.jl
+%%JULIA%%/share/julia/test/iobuffer.jl
+%%JULIA%%/share/julia/test/iostream.jl
+%%JULIA%%/share/julia/test/iterators.jl
+%%JULIA%%/share/julia/test/keywordargs.jl
+%%JULIA%%/share/julia/test/llvmcall.jl
+%%JULIA%%/share/julia/test/llvmcall2.jl
+%%JULIA%%/share/julia/test/llvmpasses/Makefile
+%%JULIA%%/share/julia/test/llvmpasses/alloc-opt.jl
+%%JULIA%%/share/julia/test/llvmpasses/alloc-opt2.jl
+%%JULIA%%/share/julia/test/llvmpasses/gcroots.ll
+%%JULIA%%/share/julia/test/llvmpasses/lit.cfg
+%%JULIA%%/share/julia/test/llvmpasses/lower-handlers.ll
+%%JULIA%%/share/julia/test/llvmpasses/muladd.ll
+%%JULIA%%/share/julia/test/llvmpasses/propagate-addrspace.ll
+%%JULIA%%/share/julia/test/llvmpasses/refinements.ll
+%%JULIA%%/share/julia/test/llvmpasses/returnstwicegc.ll
+%%JULIA%%/share/julia/test/llvmpasses/safepoint_stress.jl
+%%JULIA%%/share/julia/test/llvmpasses/simdloop.ll
+%%JULIA%%/share/julia/test/loading.jl
+%%JULIA%%/share/julia/test/logging.jl
+%%JULIA%%/share/julia/test/math.jl
+%%JULIA%%/share/julia/test/meta.jl
+%%JULIA%%/share/julia/test/misc.jl
+%%JULIA%%/share/julia/test/missing.jl
+%%JULIA%%/share/julia/test/mod2pi.jl
+%%JULIA%%/share/julia/test/mpfr.jl
+%%JULIA%%/share/julia/test/namedtuple.jl
+%%JULIA%%/share/julia/test/netload/memtest.jl
+%%JULIA%%/share/julia/test/numbers.jl
+%%JULIA%%/share/julia/test/offsetarray.jl
+%%JULIA%%/share/julia/test/operators.jl
+%%JULIA%%/share/julia/test/osutils.jl
+%%JULIA%%/share/julia/test/parse.jl
+%%JULIA%%/share/julia/test/path.jl
+%%JULIA%%/share/julia/test/precompile.jl
+%%JULIA%%/share/julia/test/project/Manifest.toml
+%%JULIA%%/share/julia/test/project/Project.toml
+%%JULIA%%/share/julia/test/project/deps/Bar/src/Bar.jl
+%%JULIA%%/share/julia/test/project/deps/Foo1/src/Foo.jl
+%%JULIA%%/share/julia/test/project/deps/Foo2.jl/src/Foo.jl
+%%JULIA%%/share/julia/test/project/deps/Qux.jl
+%%JULIA%%/share/julia/test/ranges.jl
+%%JULIA%%/share/julia/test/rational.jl
+%%JULIA%%/share/julia/test/read.jl
+%%JULIA%%/share/julia/test/reduce.jl
+%%JULIA%%/share/julia/test/reducedim.jl
+%%JULIA%%/share/julia/test/reflection.jl
+%%JULIA%%/share/julia/test/regex.jl
+%%JULIA%%/share/julia/test/reinterpretarray.jl
+%%JULIA%%/share/julia/test/rounding.jl
+%%JULIA%%/share/julia/test/runtests.jl
+%%JULIA%%/share/julia/test/secretbuffer.jl
+%%JULIA%%/share/julia/test/sets.jl
+%%JULIA%%/share/julia/test/show.jl
+%%JULIA%%/share/julia/test/simdloop.jl
+%%JULIA%%/share/julia/test/some.jl
+%%JULIA%%/share/julia/test/sorting.jl
+%%JULIA%%/share/julia/test/spawn.jl
+%%JULIA%%/share/julia/test/specificity.jl
+%%JULIA%%/share/julia/test/stacktraces.jl
+%%JULIA%%/share/julia/test/staged.jl
+%%JULIA%%/share/julia/test/stress.jl
+%%JULIA%%/share/julia/test/strings/basic.jl
+%%JULIA%%/share/julia/test/strings/io.jl
+%%JULIA%%/share/julia/test/strings/search.jl
+%%JULIA%%/share/julia/test/strings/types.jl
+%%JULIA%%/share/julia/test/strings/util.jl
+%%JULIA%%/share/julia/test/subarray.jl
+%%JULIA%%/share/julia/test/subtype.jl
+%%JULIA%%/share/julia/test/syntax.jl
+%%JULIA%%/share/julia/test/sysinfo.jl
+%%JULIA%%/share/julia/test/test_exec.jl
+%%JULIA%%/share/julia/test/test_sourcepath.jl
+%%JULIA%%/share/julia/test/testdefs.jl
+%%JULIA%%/share/julia/test/testenv.jl
+%%JULIA%%/share/julia/test/testhelpers/FakePTYs.jl
+%%JULIA%%/share/julia/test/testhelpers/Furlongs.jl
+%%JULIA%%/share/julia/test/testhelpers/MacroCalls.jl
+%%JULIA%%/share/julia/test/testhelpers/OffsetArrays.jl
+%%JULIA%%/share/julia/test/testhelpers/PhysQuantities.jl
+%%JULIA%%/share/julia/test/threads.jl
+%%JULIA%%/share/julia/test/triplequote.jl
+%%JULIA%%/share/julia/test/tuple.jl
+%%JULIA%%/share/julia/test/unicode/utf8.jl
+%%JULIA%%/share/julia/test/util/segfault.jl
+%%JULIA%%/share/julia/test/util/throw_error_exception.jl
+%%JULIA%%/share/julia/test/vecelement.jl
+%%JULIA%%/share/julia/test/version.jl
+%%JULIA%%/share/julia/test/worlds.jl
diff --git a/lang/pypy/Makefile b/lang/pypy/Makefile
new file mode 100644
index 000000000000..c7dfc0023779
--- /dev/null
+++ b/lang/pypy/Makefile
@@ -0,0 +1,170 @@
+# Created by: David Naylor <naylor.b.david@gmail.com>
+# $FreeBSD$
+
+PORTNAME?= pypy
+CATEGORIES= lang python
+MASTER_SITES= https://bitbucket.org/pypy/pypy/downloads/ http://buildbot.pypy.org/mirror/
+DISTNAME?= ${PORTNAME}2.7-v${DISTVERSION}-src
+
+MAINTAINER= python@FreeBSD.org
+COMMENT= Fast, compliant implementation of the Python language
+
+LICENSE= MIT PSFL
+LICENSE_COMB= multi
+LICENSE_FILE_MIT= ${WRKSRC}/LICENSE
+
+BROKEN_armv6= fails to package: pypy_objspace_std.c: Crash in JIT!
+BROKEN_armv7= fails to package: pypy_objspace_std.c: Crash in JIT!
+BROKEN_powerpc64= fails to compile: platcheck_109.c: fatal error: linux/auxvec.h: No such file or directory
+ONLY_FOR_ARCHS?= amd64 armv6 armv7 i386 powerpc64 powerpc64le
+ONLY_FOR_ARCHS_REASON?= PyPy JIT only supported on these architectures
+
+PATCH_SITES= https://foss.heptapod.net/pypy/pypy/-/commit/
+PATCHFILES+= 455e1f635110df4bdc2981a3a0abf02e3d4d21b2.diff:-p1
+
+LIB_DEPENDS= libexpat.so:textproc/expat2 \
+ libffi.so:devel/libffi
+TEST_DEPENDS= ${LOCALBASE}/${PYPY_DIR}/lib_pypy/_gdbm_cffi.${PYPY_CFFI_VER}.so:databases/pypy-gdbm \
+ ${LOCALBASE}/${PYPY_DIR}/lib_pypy/_sqlite3_cffi.${PYPY_CFFI_VER}.so:databases/pypy-sqlite3 \
+ ${LOCALBASE}/${PYPY_DIR}/lib_pypy/_tkinter/tklib_cffi.${PYPY_CFFI_VER}.so:x11-toolkits/pypy-tkinter
+
+USES= gettext-runtime gmake shebangfix ssl tar:bzip2
+USE_LDCONFIG= ${PREFIX}/${PYPY_DIR}/bin
+
+OPTIONS_SINGLE= TRANS
+OPTIONS_SINGLE_TRANS= PYTHON
+PYTHON_DESC= Use Python-2.7 to translate (slowest)
+PYPY_DESC= Use PyPy to translate (fastest, highest memory usage)
+PYPY_MINMEM_DESC= Use PyPy to translate (lowest memory usage)
+TRANS_DESC= Translation method
+LOCALBASE?= /usr/local
+.if exists(${LOCALBASE}/bin/pypy) || ${PORTNAME} != pypy
+OPTIONS_SINGLE_TRANS+= PYPY PYPY_MINMEM
+. if exists(${LOCALBASE}/bin/pypy)
+OPTIONS_DEFAULT= PYPY_MINMEM
+. else
+OPTIONS_DEFAULT= PYTHON
+. endif
+.else
+OPTIONS_SLAVE= PYTHON
+.endif
+
+ALL_TARGET= ${PORTNAME}-c
+BUILD_WRKSRC?= ${WRKDIR}/build/usession-release-pypy2.7-v${DISTVERSION}rc4-0/testing_1
+MAKE_ENV+= PYPY_LOCALBASE=${LOCALBASE} LDSHARED="${CC} -shared"
+PACKAGE_ARGS?= --without-gdbm --without-sqlite3 --without-tk
+LLD_UNSAFE= yes
+SHEBANG_FILES?= lib-python/2.7/plat-mac/appletrunner.py \
+ lib-python/2.7/plat-mac/bundlebuilder.py \
+ lib-python/2.7/keyword.py \
+ lib-python/2.7/test/regrtest.py \
+ lib-python/2.7/test/pystone.py \
+ lib-python/2.7/test/curses_tests.py \
+ lib-python/2.7/test/re_tests.py \
+ lib-python/2.7/test/crashers/recursive_call.py \
+ lib-python/2.7/UserString.py \
+ lib-python/2.7/pdb.py \
+ lib-python/2.7/mimify.py \
+ lib-python/2.7/pydoc.py \
+ lib-python/2.7/uu.py \
+ lib-python/2.7/trace.py \
+ lib-python/2.7/platform.py \
+ lib-python/2.7/profile.py \
+ lib-python/2.7/tabnanny.py \
+ lib-python/2.7/lib2to3/tests/pytree_idempotency.py \
+ lib-python/2.7/lib2to3/tests/data/false_encoding.py \
+ lib-python/2.7/lib2to3/tests/data/different_encoding.py \
+ lib-python/2.7/lib2to3/pgen2/token.py \
+ lib-python/2.7/encodings/rot_13.py \
+ lib-python/2.7/base64.py \
+ lib-python/2.7/webbrowser.py \
+ lib-python/2.7/idlelib/PyShell.py \
+ lib-python/2.7/cgi.py \
+ lib-python/2.7/symbol.py \
+ lib-python/2.7/cProfile.py \
+ lib-python/2.7/smtpd.py \
+ lib-python/2.7/quopri.py \
+ lib-python/2.7/timeit.py \
+ lib-python/2.7/smtplib.py \
+ lib_pypy/_cffi_ssl/tools/make_ssl_data.py
+
+python_OLD_CMD= ${LOCALBASE}/bin/python
+python_CMD= ${PREFIX}/bin/${PORTNAME}
+
+.if ${PORTNAME} != pypy
+PYPY_BUILD_DEPENDS= pypy:lang/pypy
+PYPY_MINMEM_BUILD_DEPENDS= pypy:lang/pypy
+.endif
+PYPY_VARS= PYTHON_CMD=${LOCALBASE}/bin/pypy
+PYPY_MINMEM_VARS= PYTHON_CMD="${SETENV} PYPY_GC_MAX_DELTA=200MB ${LOCALBASE}/bin/pypy --jit loop_longevity=300"
+PYTHON_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pycparser>=2.10:devel/py-pycparser@${PY_FLAVOR}
+PYTHON_USES= python:2.7,build
+
+DESCR= ${.CURDIR}/pkg-descr
+DISTINFO_FILE= ${.CURDIR}/distinfo
+MASTERDIR?= ${.CURDIR}
+PATCHDIR= ${.CURDIR}/files
+PLIST= ${.CURDIR}/pkg-plist
+
+.include "${MASTERDIR}/bsd.pypy.mk"
+.include <bsd.port.pre.mk>
+
+.if ${OPSYS} == FreeBSD && ${ARCH} != i386 && ${ARCH} != amd64
+PYPY_ARGS= --withoutmod-_vmprof
+.else
+LIB_DEPENDS+= libunwind.so:devel/libunwind
+.endif
+
+post-extract:
+ ${FIND} ${WRKSRC} -name '*.swn' -delete
+
+pre-build:
+ if [ ! -f ${BUILD_WRKSRC}/Makefile ]; then \
+ ${RM} -r ${WRKDIR}/build; \
+ ${MKDIR} ${WRKDIR}/build; \
+ (cd ${WRKSRC}/pypy/goal; \
+ ${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build \
+ ${PYTHON_CMD} ../../rpython/bin/rpython --source -Ojit targetpypystandalone.py ${PYPY_ARGS}); \
+ fi
+
+post-build:
+ ${CP} ${BUILD_WRKSRC}/${PORTNAME}-c ${BUILD_WRKSRC}/lib${PORTNAME}-c.so ${WRKSRC}/pypy/goal/
+
+do-install:
+ ${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build \
+ ${PYTHON_CMD} ${WRKSRC}/pypy/tool/release/package.py --builddir ${WRKDIR}/build --archive-name ${PYPY_DIR} \
+ ${PACKAGE_ARGS}
+ ${EXTRACT_CMD} -C ${STAGEDIR}${PREFIX} -xf ${WRKDIR}/build/${PYPY_DIR}.tar.bz2
+ ${LN} -fs ../${PYPY_DIR}/bin/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${FIND} ${STAGEDIR}${PREFIX}/${PYPY_DIR}/lib_pypy/ -name '*.so' | ${XARGS} ${STRIP_CMD}
+
+do-test:
+ # See https://bitbucket.org/pypy/buildbot/src/default/bot2/pypybuildbot/builds.py?at=default#builds.py-386
+ # add_translated_tests()
+ (cd ${WRKSRC}; \
+ ${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
+ ${WRKSRC}/pypy/goal/pypy-c testrunner/runner.py --root pypy --logfile=pytest-A.log \
+ --parallel-runs ${MAKE_JOBS_NUMBER} \
+ --config pypy/pytest-A.cfg --config pypy/pytest-A.py)
+.for dir in lib-python pypy/module/pypyjit/test
+ (cd ${WRKSRC}; \
+ ${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
+ ${WRKSRC}/pypy/goal/pypy-c pypy/test_all.py --basetemp ${WRKDIR}/build --pypy pypy/goal/pypy-c \
+ ${dir} )
+.endfor
+ (cd ${WRKSRC}/lib-python/2.7/test; \
+ ${SETENV} ${MAKE_ENV} TMPDIR=${WRKDIR}/build PYTHONPATH=${WRKSRC} \
+ ${WRKSRC}/pypy/goal/pypy-c regrtest.py -vvu all)
+
+pkg-plist: stage
+ ${TAR} -tf ${WRKDIR}/build/${PYPY_DIR}.tar.bz2 > ${WRKDIR}/.plist-files-gen
+ ${REINPLACE_CMD} -e 's|^${PYPY_DIR}|%%PYPY_DIR%%|g' \
+ -e 's|${PYPY_CFFI_VER}|%%PYPY_CFFI_VER%%|g' \
+ -e 's/\(.*\/__pycache__\)\/$$/@dir \1/g' \
+ -e '/\/$$/d' \
+ ${WRKDIR}/.plist-files-gen
+ ${ECHO} bin/${PORTNAME} > ${WRKDIR}/pkg-plist
+ ${SORT} ${WRKDIR}/.plist-files-gen | ${GREP} -v '\.orig' >> ${WRKDIR}/pkg-plist
+ ${CP} ${WRKDIR}/pkg-plist ${.CURDIR}/pkg-plist
+
+.include <bsd.port.post.mk>
diff --git a/lang/pypy/bsd.pypy.cffi.mk b/lang/pypy/bsd.pypy.cffi.mk
new file mode 100644
index 000000000000..ea45341db1bc
--- /dev/null
+++ b/lang/pypy/bsd.pypy.cffi.mk
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DISTFILES=
+
+BUILD_DEPENDS+= ${PYTHON_IMPL}:lang/${PYTHON_IMPL}
+RUN_DEPENDS+= ${PYTHON_IMPL}:lang/${PYTHON_IMPL}
+
+PLIST_FILES= ${PYPY_DIR}/lib_pypy/${CFFI_MODULE}_cffi.${PYPY_CFFI_VER}.so
+
+CFFI_MODULE?= _${PORTNAME}
+
+FLAVORS= pypy pypy3
+FLAVOR?= ${FLAVORS:[1]}
+
+PYTHON_IMPL= ${FLAVOR}
+PYTHON_PORTVERSION= ${DISTVERSION}
+PYTHON_PKGNAMEPREFIX= ${PYTHON_IMPL}-
+PYTHON_CMD= ${LOCALBASE}/bin/${PYTHON_IMPL}
+
+.include "${.CURDIR}/../../lang/pypy/bsd.pypy.mk"
+
+do-build:
+ ${CP} ${LOCALBASE}/${PYPY_DIR}/lib_pypy/${CFFI_MODULE}_build.py ${WRKDIR}/${PORTNAME}.py
+ (cd ${WRKDIR}; \
+ ${PYTHON_CMD} -c "from ${PORTNAME} import ${CFFI_NAME} as ffi; ffi.compile('${WRKDIR}');")
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/${PYPY_DIR}/lib_pypy/`dirname ${CFFI_MODULE}`/
+ ${INSTALL_LIB} ${WRKDIR}/${CFFI_MODULE}_cffi.${PYPY_CFFI_VER}.so ${STAGEDIR}${PREFIX}/${PYPY_DIR}/lib_pypy/`dirname ${CFFI_MODULE}`/
diff --git a/lang/pypy/bsd.pypy.mk b/lang/pypy/bsd.pypy.mk
new file mode 100644
index 000000000000..e97fcac8d550
--- /dev/null
+++ b/lang/pypy/bsd.pypy.mk
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+.if !defined(LICENSE)
+LICENSE= MIT PSFL
+LICENSE_COMB= multi
+.endif
+
+USES+= compiler:c11
+
+PYTHON_IMPL?= ${PORTNAME}
+PYPY_DIR= ${PYTHON_IMPL}-${DISTVERSION:C|([0-9])\.([0-9]+).*|\1.\2|}
+PLIST_SUB+= PYPY_DIR=${PYPY_DIR} PYPY_CFFI_VER=${PYPY_CFFI_VER}
+
+.if ${PYTHON_IMPL} == pypy
+DISTVERSION= 7.3.0
+PORTREVISION= 1
+PYPY_CFFI_VER= ${PYTHON_IMPL}-73
+.else # ${PYTHON_IMPL} == pypy3
+DISTVERSION= 7.3.0
+PORTREVISION= 1
+PYPY_CFFI_VER= ${PYTHON_IMPL}6-pp${DISTVERSION:S|.||:C|\..*||}-${OPSYS:tl}${OSREL:C|\..*||}
+.endif
diff --git a/lang/pypy/distinfo b/lang/pypy/distinfo
new file mode 100644
index 000000000000..bb36c197d045
--- /dev/null
+++ b/lang/pypy/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1598691588
+SHA256 (pypy2.7-v7.3.0-src.tar.bz2) = b0b25c7f8938ab0fedd8dedf26b9e73c490913b002b484c1b2f19d5844a518de
+SIZE (pypy2.7-v7.3.0-src.tar.bz2) = 20328540
+SHA256 (455e1f635110df4bdc2981a3a0abf02e3d4d21b2.diff) = a30ae90c887d595a4e1b77ba2ad4d45509c0d35a3a5ab052c4910a6aa373f99d
+SIZE (455e1f635110df4bdc2981a3a0abf02e3d4d21b2.diff) = 773
diff --git a/lang/pypy/files/patch-lib__pypy___curses__build.py b/lang/pypy/files/patch-lib__pypy___curses__build.py
new file mode 100644
index 000000000000..069996c66503
--- /dev/null
+++ b/lang/pypy/files/patch-lib__pypy___curses__build.py
@@ -0,0 +1,11 @@
+--- lib_pypy/_curses_build.py.orig 2020-03-25 12:13:59 UTC
++++ lib_pypy/_curses_build.py
+@@ -31,6 +31,8 @@ def find_curses_dir_and_name():
+ return base, 'ncursesw'
+ if os.path.exists(os.path.join(base, 'include', 'ncurses')):
+ return base, 'ncurses'
++ if os.path.exists(os.path.join(base, 'lib', 'libncursesw.so')):
++ return base, 'ncursesw'
+ return '', None
+
+ base, name = find_curses_dir_and_name()
diff --git a/lang/pypy/pkg-descr b/lang/pypy/pkg-descr
new file mode 100644
index 000000000000..e1c7244ba749
--- /dev/null
+++ b/lang/pypy/pkg-descr
@@ -0,0 +1,17 @@
+PyPy is a fast, compliant alternative implementation of the Python language
+(2.7.13). It has several advantages and distinct features:
+
+ - Speed: thanks to its Just-in-Time compiler, Python programs often run faster
+ on PyPy.
+ - Memory usage: large, memory-hungry Python programs might end up taking less
+ space than they do in CPython.
+ - Compatibility: PyPy is highly compatible with existing python code. It
+ supports ctypes and can run popular python libraries like
+ twisted and django.
+ - Sandboxing: PyPy provides the ability to run untrusted code in a fully
+ secure way.
+ - Stackless: PyPy can be configured to run in stackless mode, providing
+ micro-threads for massive concurrency.
+ - As well as other features.
+
+WWW: http://pypy.org
diff --git a/lang/pypy/pkg-message b/lang/pypy/pkg-message
new file mode 100644
index 000000000000..385ff3d041d0
--- /dev/null
+++ b/lang/pypy/pkg-message
@@ -0,0 +1,17 @@
+[
+{ type: install
+ message: <<EOM
+Note that some standard Python modules are provided as separate ports
+as they require additional dependencies. They are available as:
+
+gdbm databases/pypy-gdbm
+sqlite3 databases/pypy-sqlite3
+tkinter x11-toolkits/pypy-tkinter
+
+Note that PyPy does not implement the following module that would
+have been provided as a separate port:
+
+bsddb databases/pypy-bsddb
+EOM
+}
+]
diff --git a/lang/pypy/pkg-plist b/lang/pypy/pkg-plist
new file mode 100644
index 000000000000..0cf39454c1f2
--- /dev/null
+++ b/lang/pypy/pkg-plist
@@ -0,0 +1,2366 @@
+bin/pypy
+%%PYPY_DIR%%/LICENSE
+%%PYPY_DIR%%/README.rst
+%%PYPY_DIR%%/bin/libpypy-c.so
+%%PYPY_DIR%%/bin/pypy
+%%PYPY_DIR%%/include/PyPy.h
+%%PYPY_DIR%%/include/Python.h
+%%PYPY_DIR%%/include/README
+%%PYPY_DIR%%/include/_numpypy/numpy/__multiarray_api.h
+%%PYPY_DIR%%/include/_numpypy/numpy/arrayobject.h
+%%PYPY_DIR%%/include/_numpypy/numpy/ndarraytypes.h
+%%PYPY_DIR%%/include/_numpypy/numpy/npy_3kcompat.h
+%%PYPY_DIR%%/include/_numpypy/numpy/npy_common.h
+%%PYPY_DIR%%/include/_numpypy/numpy/old_defines.h
+%%PYPY_DIR%%/include/abstract.h
+%%PYPY_DIR%%/include/boolobject.h
+%%PYPY_DIR%%/include/bufferobject.h
+%%PYPY_DIR%%/include/bytearrayobject.h
+%%PYPY_DIR%%/include/bytesobject.h
+%%PYPY_DIR%%/include/cStringIO.h
+%%PYPY_DIR%%/include/ceval.h
+%%PYPY_DIR%%/include/code.h
+%%PYPY_DIR%%/include/compile.h
+%%PYPY_DIR%%/include/complexobject.h
+%%PYPY_DIR%%/include/cpyext_datetime.h
+%%PYPY_DIR%%/include/cpyext_descrobject.h
+%%PYPY_DIR%%/include/cpyext_memoryobject.h
+%%PYPY_DIR%%/include/cpyext_object.h
+%%PYPY_DIR%%/include/cpyext_unicodeobject.h
+%%PYPY_DIR%%/include/datetime.h
+%%PYPY_DIR%%/include/descrobject.h
+%%PYPY_DIR%%/include/dictobject.h
+%%PYPY_DIR%%/include/eval.h
+%%PYPY_DIR%%/include/fileobject.h
+%%PYPY_DIR%%/include/floatobject.h
+%%PYPY_DIR%%/include/frameobject.h
+%%PYPY_DIR%%/include/funcobject.h
+%%PYPY_DIR%%/include/import.h
+%%PYPY_DIR%%/include/intobject.h
+%%PYPY_DIR%%/include/listobject.h
+%%PYPY_DIR%%/include/longintrepr.h
+%%PYPY_DIR%%/include/longobject.h
+%%PYPY_DIR%%/include/marshal.h
+%%PYPY_DIR%%/include/memoryobject.h
+%%PYPY_DIR%%/include/methodobject.h
+%%PYPY_DIR%%/include/missing.h
+%%PYPY_DIR%%/include/modsupport.h
+%%PYPY_DIR%%/include/object.h
+%%PYPY_DIR%%/include/patchlevel.h
+%%PYPY_DIR%%/include/pycapsule.h
+%%PYPY_DIR%%/include/pycobject.h
+%%PYPY_DIR%%/include/pyconfig.h
+%%PYPY_DIR%%/include/pyerrors.h
+%%PYPY_DIR%%/include/pymath.h
+%%PYPY_DIR%%/include/pymem.h
+%%PYPY_DIR%%/include/pyport.h
+%%PYPY_DIR%%/include/pypy_decl.h
+%%PYPY_DIR%%/include/pypy_macros.h
+%%PYPY_DIR%%/include/pypy_marshal_decl.h
+%%PYPY_DIR%%/include/pypy_numpy.h
+%%PYPY_DIR%%/include/pypy_structmember_decl.h
+%%PYPY_DIR%%/include/pysignals.h
+%%PYPY_DIR%%/include/pystate.h
+%%PYPY_DIR%%/include/pythonrun.h
+%%PYPY_DIR%%/include/pythread.h
+%%PYPY_DIR%%/include/setobject.h
+%%PYPY_DIR%%/include/sliceobject.h
+%%PYPY_DIR%%/include/stringobject.h
+%%PYPY_DIR%%/include/structmember.h
+%%PYPY_DIR%%/include/structseq.h
+%%PYPY_DIR%%/include/sysmodule.h
+%%PYPY_DIR%%/include/traceback.h
+%%PYPY_DIR%%/include/tupleobject.h
+%%PYPY_DIR%%/include/unicodeobject.h
+%%PYPY_DIR%%/include/warnings.h
+%%PYPY_DIR%%/lib-python/2.7/BaseHTTPServer.py
+%%PYPY_DIR%%/lib-python/2.7/Bastion.py
+%%PYPY_DIR%%/lib-python/2.7/CGIHTTPServer.py
+%%PYPY_DIR%%/lib-python/2.7/ConfigParser.py
+%%PYPY_DIR%%/lib-python/2.7/Cookie.py
+%%PYPY_DIR%%/lib-python/2.7/DocXMLRPCServer.py
+%%PYPY_DIR%%/lib-python/2.7/HTMLParser.py
+%%PYPY_DIR%%/lib-python/2.7/MimeWriter.py
+%%PYPY_DIR%%/lib-python/2.7/Queue.py
+%%PYPY_DIR%%/lib-python/2.7/SimpleHTTPServer.py
+%%PYPY_DIR%%/lib-python/2.7/SimpleXMLRPCServer.py
+%%PYPY_DIR%%/lib-python/2.7/SocketServer.py
+%%PYPY_DIR%%/lib-python/2.7/StringIO.py
+%%PYPY_DIR%%/lib-python/2.7/UserDict.py
+%%PYPY_DIR%%/lib-python/2.7/UserList.py
+%%PYPY_DIR%%/lib-python/2.7/UserString.py
+%%PYPY_DIR%%/lib-python/2.7/_LWPCookieJar.py
+%%PYPY_DIR%%/lib-python/2.7/_MozillaCookieJar.py
+%%PYPY_DIR%%/lib-python/2.7/__future__.py
+%%PYPY_DIR%%/lib-python/2.7/__phello__.foo.py
+%%PYPY_DIR%%/lib-python/2.7/_abcoll.py
+%%PYPY_DIR%%/lib-python/2.7/_osx_support.py
+%%PYPY_DIR%%/lib-python/2.7/_pyio.py
+%%PYPY_DIR%%/lib-python/2.7/_strptime.py
+%%PYPY_DIR%%/lib-python/2.7/_threading_local.py
+%%PYPY_DIR%%/lib-python/2.7/_weakrefset.py
+%%PYPY_DIR%%/lib-python/2.7/abc.py
+%%PYPY_DIR%%/lib-python/2.7/aifc.py
+%%PYPY_DIR%%/lib-python/2.7/antigravity.py
+%%PYPY_DIR%%/lib-python/2.7/anydbm.py
+%%PYPY_DIR%%/lib-python/2.7/argparse.py
+%%PYPY_DIR%%/lib-python/2.7/ast.py
+%%PYPY_DIR%%/lib-python/2.7/asynchat.py
+%%PYPY_DIR%%/lib-python/2.7/asyncore.py
+%%PYPY_DIR%%/lib-python/2.7/atexit.py
+%%PYPY_DIR%%/lib-python/2.7/audiodev.py
+%%PYPY_DIR%%/lib-python/2.7/base64.py
+%%PYPY_DIR%%/lib-python/2.7/bdb.py
+%%PYPY_DIR%%/lib-python/2.7/binhex.py
+%%PYPY_DIR%%/lib-python/2.7/bisect.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/db.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/dbobj.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/dbrecio.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/dbshelve.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/dbtables.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/dbutils.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_all.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_associate.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_basics.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_compare.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_compat.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_cursor_pget_bug.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_db.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_dbenv.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_dbobj.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_dbshelve.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_dbtables.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_distributed_transactions.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_early_close.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_fileid.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_get_none.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_join.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_lock.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_misc.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_pickle.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_queue.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_recno.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_replication.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_sequence.py
+%%PYPY_DIR%%/lib-python/2.7/bsddb/test/test_thread.py
+%%PYPY_DIR%%/lib-python/2.7/cProfile.py
+%%PYPY_DIR%%/lib-python/2.7/calendar.py
+%%PYPY_DIR%%/lib-python/2.7/cgi.py
+%%PYPY_DIR%%/lib-python/2.7/cgitb.py
+%%PYPY_DIR%%/lib-python/2.7/chunk.py
+%%PYPY_DIR%%/lib-python/2.7/cmd.py
+%%PYPY_DIR%%/lib-python/2.7/code.py
+%%PYPY_DIR%%/lib-python/2.7/codecs.py
+%%PYPY_DIR%%/lib-python/2.7/codeop.py
+%%PYPY_DIR%%/lib-python/2.7/collections.py
+%%PYPY_DIR%%/lib-python/2.7/colorsys.py
+%%PYPY_DIR%%/lib-python/2.7/commands.py
+%%PYPY_DIR%%/lib-python/2.7/compileall.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/ast.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/consts.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/future.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/misc.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/pyassem.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/pycodegen.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/symbols.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/syntax.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/transformer.py
+%%PYPY_DIR%%/lib-python/2.7/compiler/visitor.py
+%%PYPY_DIR%%/lib-python/2.7/contextlib.py
+%%PYPY_DIR%%/lib-python/2.7/cookielib.py
+%%PYPY_DIR%%/lib-python/2.7/copy.py
+%%PYPY_DIR%%/lib-python/2.7/copy_reg.py
+%%PYPY_DIR%%/lib-python/2.7/csv.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/_endian.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/README.ctypes
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/dyld.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/dylib.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/fetch_macholib
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/fetch_macholib.bat
+%%PYPY_DIR%%/lib-python/2.7/ctypes/macholib/framework.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/runtests.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_anon.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_array_in_pointer.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_arrays.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_as_parameter.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_bitfields.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_buffers.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_byteswap.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_callbacks.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_cast.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_cfuncs.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_checkretval.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_delattr.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_errno.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_find.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_frombuffer.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_funcptr.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_functions.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_incomplete.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_init.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_internals.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_keeprefs.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_libc.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_loading.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_macholib.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_memfunctions.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_numbers.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_objects.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_parameters.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_pep3118.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_pickling.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_pointers.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_prototypes.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_python_api.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_random_things.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_refcounts.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_repr.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_returnfuncptrs.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_simplesubclasses.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_sizes.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_slicing.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_stringptr.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_strings.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_struct_fields.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_structures.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_unaligned_structures.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_unicode.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_values.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_varsize_struct.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_win32.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/test/test_wintypes.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/util.py
+%%PYPY_DIR%%/lib-python/2.7/ctypes/wintypes.py
+%%PYPY_DIR%%/lib-python/2.7/curses/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/curses/ascii.py
+%%PYPY_DIR%%/lib-python/2.7/curses/has_key.py
+%%PYPY_DIR%%/lib-python/2.7/curses/panel.py
+%%PYPY_DIR%%/lib-python/2.7/curses/textpad.py
+%%PYPY_DIR%%/lib-python/2.7/curses/wrapper.py
+%%PYPY_DIR%%/lib-python/2.7/dbhash.py
+%%PYPY_DIR%%/lib-python/2.7/decimal.py
+%%PYPY_DIR%%/lib-python/2.7/difflib.py
+%%PYPY_DIR%%/lib-python/2.7/dircache.py
+%%PYPY_DIR%%/lib-python/2.7/dis.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/README
+%%PYPY_DIR%%/lib-python/2.7/distutils/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/archive_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/bcppcompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/ccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/cmd.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/bdist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/bdist_dumb.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/bdist_msi.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/bdist_rpm.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/bdist_wininst.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/build.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/build_clib.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/build_ext.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/build_py.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/build_scripts.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/check.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/clean.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/command_template
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/config.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install_data.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install_egg_info.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install_headers.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install_lib.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/install_scripts.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/register.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/sdist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/upload.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/wininst-6.0.exe
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/wininst-7.1.exe
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/wininst-8.0.exe
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/wininst-9.0-amd64.exe
+%%PYPY_DIR%%/lib-python/2.7/distutils/command/wininst-9.0.exe
+%%PYPY_DIR%%/lib-python/2.7/distutils/config.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/core.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/cygwinccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/debug.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/dep_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/dir_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/dist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/emxccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/errors.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/extension.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/fancy_getopt.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/file_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/filelist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/log.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/msvc9compiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/msvccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/spawn.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/sysconfig.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/sysconfig_cpython.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/sysconfig_pypy.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/Setup.sample
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/setuptools_build_ext.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/setuptools_extension.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/support.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_archive_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_bdist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_bdist_dumb.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_bdist_msi.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_bdist_rpm.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_bdist_wininst.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_build.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_build_clib.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_build_ext.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_build_py.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_build_scripts.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_ccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_check.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_clean.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_cmd.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_config.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_config_cmd.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_core.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_dep_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_dir_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_dist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_file_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_filelist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_install.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_install_data.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_install_headers.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_install_lib.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_install_scripts.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_msvc9compiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_register.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_sdist.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_spawn.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_sysconfig.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_text_file.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_unixccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_upload.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_version.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/tests/test_versionpredicate.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/text_file.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/unixccompiler.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/util.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/version.py
+%%PYPY_DIR%%/lib-python/2.7/distutils/versionpredicate.py
+%%PYPY_DIR%%/lib-python/2.7/doctest.py
+%%PYPY_DIR%%/lib-python/2.7/dumbdbm.py
+%%PYPY_DIR%%/lib-python/2.7/dummy_thread.py
+%%PYPY_DIR%%/lib-python/2.7/dummy_threading.py
+%%PYPY_DIR%%/lib-python/2.7/email/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/email/_parseaddr.py
+%%PYPY_DIR%%/lib-python/2.7/email/base64mime.py
+%%PYPY_DIR%%/lib-python/2.7/email/charset.py
+%%PYPY_DIR%%/lib-python/2.7/email/encoders.py
+%%PYPY_DIR%%/lib-python/2.7/email/errors.py
+%%PYPY_DIR%%/lib-python/2.7/email/feedparser.py
+%%PYPY_DIR%%/lib-python/2.7/email/generator.py
+%%PYPY_DIR%%/lib-python/2.7/email/header.py
+%%PYPY_DIR%%/lib-python/2.7/email/iterators.py
+%%PYPY_DIR%%/lib-python/2.7/email/message.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/application.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/audio.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/base.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/image.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/message.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/multipart.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/nonmultipart.py
+%%PYPY_DIR%%/lib-python/2.7/email/mime/text.py
+%%PYPY_DIR%%/lib-python/2.7/email/parser.py
+%%PYPY_DIR%%/lib-python/2.7/email/quoprimime.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/PyBanner048.gif
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/audiotest.au
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_01.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_02.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_03.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_04.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_05.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_06.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_07.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_08.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_09.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_10.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_11.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_12.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_12a.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_13.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_14.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_15.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_16.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_17.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_18.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_19.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_20.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_21.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_22.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_23.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_24.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_25.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_26.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_27.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_28.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_29.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_30.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_31.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_32.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_33.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_34.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_35.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_36.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_37.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_38.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_39.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_40.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_41.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_42.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_43.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_44.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_45.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/data/msg_46.txt
+%%PYPY_DIR%%/lib-python/2.7/email/test/test_email.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/test_email_codecs.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/test_email_codecs_renamed.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/test_email_renamed.py
+%%PYPY_DIR%%/lib-python/2.7/email/test/test_email_torture.py
+%%PYPY_DIR%%/lib-python/2.7/email/utils.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/aliases.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/ascii.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/base64_codec.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/big5.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/big5hkscs.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/bz2_codec.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/charmap.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp037.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1006.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1026.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1140.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1250.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1251.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1252.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1253.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1254.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1255.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1256.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1257.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp1258.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp424.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp437.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp500.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp720.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp737.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp775.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp850.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp852.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp855.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp856.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp857.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp858.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp860.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp861.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp862.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp863.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp864.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp865.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp866.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp869.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp874.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp875.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp932.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp949.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/cp950.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/euc_jis_2004.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/euc_jisx0213.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/euc_jp.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/euc_kr.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/gb18030.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/gb2312.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/gbk.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/hex_codec.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/hp_roman8.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/hz.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/idna.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp_1.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp_2.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp_2004.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp_3.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_jp_ext.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso2022_kr.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_1.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_10.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_11.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_13.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_14.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_15.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_16.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_2.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_3.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_4.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_5.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_6.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_7.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_8.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/iso8859_9.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/johab.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/koi8_r.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/koi8_u.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/latin_1.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_arabic.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_centeuro.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_croatian.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_cyrillic.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_farsi.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_greek.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_iceland.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_latin2.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_roman.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_romanian.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mac_turkish.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/mbcs.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/palmos.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/ptcp154.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/punycode.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/quopri_codec.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/raw_unicode_escape.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/rot_13.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/shift_jis.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/shift_jis_2004.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/shift_jisx0213.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/string_escape.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/tis_620.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/undefined.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/unicode_escape.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/unicode_internal.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_16.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_16_be.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_16_le.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_32.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_32_be.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_32_le.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_7.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_8.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/utf_8_sig.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/uu_codec.py
+%%PYPY_DIR%%/lib-python/2.7/encodings/zlib_codec.py
+%%PYPY_DIR%%/lib-python/2.7/ensurepip/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/ensurepip/__main__.py
+%%PYPY_DIR%%/lib-python/2.7/ensurepip/_bundled/pip-19.2.3-py2.py3-none-any.whl
+%%PYPY_DIR%%/lib-python/2.7/ensurepip/_bundled/setuptools-41.2.0-py2.py3-none-any.whl
+%%PYPY_DIR%%/lib-python/2.7/ensurepip/_uninstall.py
+%%PYPY_DIR%%/lib-python/2.7/filecmp.py
+%%PYPY_DIR%%/lib-python/2.7/fileinput.py
+%%PYPY_DIR%%/lib-python/2.7/fnmatch.py
+%%PYPY_DIR%%/lib-python/2.7/formatter.py
+%%PYPY_DIR%%/lib-python/2.7/fpformat.py
+%%PYPY_DIR%%/lib-python/2.7/fractions.py
+%%PYPY_DIR%%/lib-python/2.7/ftplib.py
+%%PYPY_DIR%%/lib-python/2.7/functools.py
+%%PYPY_DIR%%/lib-python/2.7/genericpath.py
+%%PYPY_DIR%%/lib-python/2.7/getopt.py
+%%PYPY_DIR%%/lib-python/2.7/getpass.py
+%%PYPY_DIR%%/lib-python/2.7/gettext.py
+%%PYPY_DIR%%/lib-python/2.7/glob.py
+%%PYPY_DIR%%/lib-python/2.7/gzip.py
+%%PYPY_DIR%%/lib-python/2.7/hashlib.py
+%%PYPY_DIR%%/lib-python/2.7/heapq.py
+%%PYPY_DIR%%/lib-python/2.7/hmac.py
+%%PYPY_DIR%%/lib-python/2.7/hotshot/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/hotshot/log.py
+%%PYPY_DIR%%/lib-python/2.7/hotshot/stats.py
+%%PYPY_DIR%%/lib-python/2.7/hotshot/stones.py
+%%PYPY_DIR%%/lib-python/2.7/htmlentitydefs.py
+%%PYPY_DIR%%/lib-python/2.7/htmllib.py
+%%PYPY_DIR%%/lib-python/2.7/httplib.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/AutoComplete.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/AutoCompleteWindow.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/AutoExpand.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Bindings.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/CREDITS.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/CallTipWindow.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/CallTips.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ChangeLog
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ClassBrowser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/CodeContext.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ColorDelegator.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Debugger.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Delegator.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/EditorWindow.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/FileList.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/FormatParagraph.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/GrepDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/HISTORY.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/HyperParser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/IOBinding.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/folder.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle.icns
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle.ico
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_16.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_16.png
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_32.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_32.png
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_48.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/idle_48.png
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/minusnode.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/openfolder.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/plusnode.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/python.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Icons/tk.gif
+%%PYPY_DIR%%/lib-python/2.7/idlelib/IdleHistory.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/MultiCall.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/MultiStatusBar.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/NEWS.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ObjectBrowser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/OutputWindow.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ParenMatch.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/PathBrowser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/Percolator.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/PyParse.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/PyShell.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/README.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/RemoteDebugger.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/RemoteObjectBrowser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ReplaceDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/RstripExtension.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ScriptBinding.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ScrolledList.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/SearchDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/SearchDialogBase.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/SearchEngine.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/StackViewer.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/TODO.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ToolTip.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/TreeWidget.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/UndoDelegator.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/WidgetRedirector.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/WindowList.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/ZoomHeight.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/aboutDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/config-extensions.def
+%%PYPY_DIR%%/lib-python/2.7/idlelib/config-highlight.def
+%%PYPY_DIR%%/lib-python/2.7/idlelib/config-keys.def
+%%PYPY_DIR%%/lib-python/2.7/idlelib/config-main.def
+%%PYPY_DIR%%/lib-python/2.7/idlelib/configDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/configHandler.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/configHelpSourceEdit.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/configSectionNameDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/dynOptionMenuWidget.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/extend.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/help.html
+%%PYPY_DIR%%/lib-python/2.7/idlelib/help.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/help.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle.bat
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle.pyw
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/README.txt
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/htest.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/mock_idle.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/mock_tk.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_autocomplete.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_autoexpand.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_calltips.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_config_name.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_configdialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_delegator.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_editmenu.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_formatparagraph.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_grep.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_helpabout.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_hyperparser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_idlehistory.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_io.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_parenmatch.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_pathbrowser.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_rstrip.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_searchdialogbase.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_searchengine.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_text.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_textview.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_warning.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idle_test/test_widgetredir.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/idlever.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/keybindingDialog.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/macosxSupport.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/rpc.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/run.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/tabbedpages.py
+%%PYPY_DIR%%/lib-python/2.7/idlelib/textView.py
+%%PYPY_DIR%%/lib-python/2.7/ihooks.py
+%%PYPY_DIR%%/lib-python/2.7/imaplib.py
+%%PYPY_DIR%%/lib-python/2.7/imghdr.py
+%%PYPY_DIR%%/lib-python/2.7/importlib/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/imputil.py
+%%PYPY_DIR%%/lib-python/2.7/inspect.py
+%%PYPY_DIR%%/lib-python/2.7/io.py
+%%PYPY_DIR%%/lib-python/2.7/json/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/json/decoder.py
+%%PYPY_DIR%%/lib-python/2.7/json/encoder.py
+%%PYPY_DIR%%/lib-python/2.7/json/scanner.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_check_circular.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_decode.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_default.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_dump.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_encode_basestring_ascii.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_fail.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_float.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_indent.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_pass1.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_pass2.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_pass3.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_recursion.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_scanstring.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_separators.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_speedups.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_tool.py
+%%PYPY_DIR%%/lib-python/2.7/json/tests/test_unicode.py
+%%PYPY_DIR%%/lib-python/2.7/json/tool.py
+%%PYPY_DIR%%/lib-python/2.7/keyword.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Canvas.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Dialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/FileDialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/FixTk.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/ScrolledText.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/SimpleDialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Tix.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Tkconstants.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Tkdnd.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/Tkinter.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/README
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/runtktests.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_font.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_geometry_managers.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_images.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_loadtk.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_text.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_variables.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_tkinter/test_widgets.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/support.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/test_extensions.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/test_functions.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/test_style.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/test_ttk/test_widgets.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/test/widget_tests.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkColorChooser.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkCommonDialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkFileDialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkFont.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkMessageBox.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/tkSimpleDialog.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/ttk.py
+%%PYPY_DIR%%/lib-python/2.7/lib-tk/turtle.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/Grammar.txt
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/PatternGrammar.txt
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/__main__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/btm_matcher.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/btm_utils.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixer_base.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixer_util.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_apply.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_asserts.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_basestring.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_buffer.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_dict.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_except.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_exec.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_execfile.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_exitfunc.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_filter.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_funcattrs.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_future.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_getcwdu.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_has_key.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_idioms.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_import.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_imports.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_imports2.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_input.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_intern.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_isinstance.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_itertools.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_itertools_imports.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_long.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_map.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_metaclass.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_methodattrs.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_ne.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_next.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_nonzero.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_numliterals.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_operator.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_paren.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_print.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_raise.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_raw_input.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_reduce.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_renames.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_repr.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_set_literal.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_standarderror.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_sys_exc.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_throw.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_tuple_params.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_types.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_unicode.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_urllib.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_ws_comma.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_xrange.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_xreadlines.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/fixes/fix_zip.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/main.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/patcomp.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/conv.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/driver.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/grammar.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/literals.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/parse.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/pgen.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/token.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pgen2/tokenize.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pygram.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/pytree.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/refactor.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/README
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/bom.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/crlf.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/different_encoding.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/false_encoding.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/bad_order.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/fix_explicit.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/fix_first.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/fix_last.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/fix_parrot.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/myfixes/fix_preorder.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/no_fixer_cls.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/fixers/parrot_example.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/infinite_recursion.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/py2_test_grammar.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/data/py3_test_grammar.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/pytree_idempotency.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/support.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_all_fixers.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_fixers.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_main.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_parser.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_pytree.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_refactor.py
+%%PYPY_DIR%%/lib-python/2.7/lib2to3/tests/test_util.py
+%%PYPY_DIR%%/lib-python/2.7/linecache.py
+%%PYPY_DIR%%/lib-python/2.7/locale.py
+%%PYPY_DIR%%/lib-python/2.7/logging/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/logging/config.py
+%%PYPY_DIR%%/lib-python/2.7/logging/handlers.py
+%%PYPY_DIR%%/lib-python/2.7/macpath.py
+%%PYPY_DIR%%/lib-python/2.7/macurl2path.py
+%%PYPY_DIR%%/lib-python/2.7/mailbox.py
+%%PYPY_DIR%%/lib-python/2.7/mailcap.py
+%%PYPY_DIR%%/lib-python/2.7/markupbase.py
+%%PYPY_DIR%%/lib-python/2.7/md5.py
+%%PYPY_DIR%%/lib-python/2.7/mhlib.py
+%%PYPY_DIR%%/lib-python/2.7/mimetools.py
+%%PYPY_DIR%%/lib-python/2.7/mimetypes.py
+%%PYPY_DIR%%/lib-python/2.7/mimify.py
+%%PYPY_DIR%%/lib-python/2.7/modulefinder.py
+%%PYPY_DIR%%/lib-python/2.7/msilib/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/msilib/schema.py
+%%PYPY_DIR%%/lib-python/2.7/msilib/sequence.py
+%%PYPY_DIR%%/lib-python/2.7/msilib/text.py
+%%PYPY_DIR%%/lib-python/2.7/multifile.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/connection.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/dummy/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/dummy/connection.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/forking.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/heap.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/managers.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/pool.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/process.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/queues.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/reduction.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/sharedctypes.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/synchronize.py
+%%PYPY_DIR%%/lib-python/2.7/multiprocessing/util.py
+%%PYPY_DIR%%/lib-python/2.7/mutex.py
+%%PYPY_DIR%%/lib-python/2.7/netrc.py
+%%PYPY_DIR%%/lib-python/2.7/new.py
+%%PYPY_DIR%%/lib-python/2.7/nntplib.py
+%%PYPY_DIR%%/lib-python/2.7/ntpath.py
+%%PYPY_DIR%%/lib-python/2.7/nturl2path.py
+%%PYPY_DIR%%/lib-python/2.7/numbers.py
+%%PYPY_DIR%%/lib-python/2.7/opcode.py
+%%PYPY_DIR%%/lib-python/2.7/optparse.py
+%%PYPY_DIR%%/lib-python/2.7/os.py
+%%PYPY_DIR%%/lib-python/2.7/os2emxpath.py
+%%PYPY_DIR%%/lib-python/2.7/pdb.doc
+%%PYPY_DIR%%/lib-python/2.7/pdb.py
+%%PYPY_DIR%%/lib-python/2.7/pickle.py
+%%PYPY_DIR%%/lib-python/2.7/pickletools.py
+%%PYPY_DIR%%/lib-python/2.7/pipes.py
+%%PYPY_DIR%%/lib-python/2.7/pkgutil.py
+%%PYPY_DIR%%/lib-python/2.7/plat-aix3/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-aix3/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-aix4/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-aix4/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-atheos/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-atheos/TYPES.py
+%%PYPY_DIR%%/lib-python/2.7/plat-atheos/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-beos5/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-beos5/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-darwin/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-darwin/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd4/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd4/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd5/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd5/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd6/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd6/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd7/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd7/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd8/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-freebsd8/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-generic/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/AL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/CD.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/CL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/CL_old.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/DEVICE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/ERRNO.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/FILE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/FL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/GET.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/GL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/GLWS.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/IOCTL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/SV.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/WAIT.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/cddb.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/cdplayer.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/flp.doc
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/flp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/jpeg.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/panel.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/panelparser.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/readcd.doc
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/readcd.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-irix5/torgb.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/AL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/CD.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/CL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/DEVICE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/ERRNO.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/FILE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/FL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/GET.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/GL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/GLWS.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/IOCTL.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/SV.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/WAIT.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/cddb.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/cdplayer.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/flp.doc
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/flp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/jpeg.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/panel.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/panelparser.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/readcd.doc
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/readcd.py
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-irix6/torgb.py
+%%PYPY_DIR%%/lib-python/2.7/plat-linux2/CDROM.py
+%%PYPY_DIR%%/lib-python/2.7/plat-linux2/DLFCN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-linux2/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-linux2/TYPES.py
+%%PYPY_DIR%%/lib-python/2.7/plat-linux2/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Audio_mac.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/AE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/AH.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Alias.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Aliases.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/App.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Appearance.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/AppleEvents.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/AppleHelp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CF.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CG.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CarbonEvents.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CarbonEvt.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Cm.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Components.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/ControlAccessor.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Controls.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CoreFoundation.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/CoreGraphics.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Ctl.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Dialogs.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Dlg.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Drag.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Dragconst.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Events.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Evt.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/File.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Files.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Fm.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Folder.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Folders.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Fonts.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Help.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/IBCarbon.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/IBCarbonRuntime.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Icn.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Icons.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Launch.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/LaunchServices.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/List.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Lists.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/MacHelp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/MacTextEditor.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/MediaDescr.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Menu.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Menus.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Mlte.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/OSA.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/OSAconst.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/QDOffscreen.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Qd.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Qdoffs.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Qt.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/QuickDraw.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/QuickTime.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Res.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Resources.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Scrap.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Snd.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Sndihooks.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Sound.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/TE.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/TextEdit.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Win.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/Windows.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/Carbon/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/EasyDialogs.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/FrameWork.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/MiniAEFrame.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/PixMapWrapper.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/aepack.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/aetools.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/aetypes.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/applesingle.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/appletrawmain.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/appletrunner.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/argvemulator.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/bgenlocations.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/buildtools.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/bundlebuilder.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/cfmfile.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/dialogs.rsrc
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/errors.rsrc
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/findertools.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/gensuitemodule.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/ic.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/icopen.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/CodeWarrior/CodeWarrior_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/CodeWarrior/Metrowerks_Shell_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/CodeWarrior/Required.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/CodeWarrior/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/CodeWarrior/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/Microsoft_Internet_Explorer.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/Netscape_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/Required_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/URL_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/Web_Browser_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Explorer/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Containers_and_folders.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Enumerations.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Files.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Finder_Basics.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Finder_items.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Legacy_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Type_Definitions.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/Window_classes.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Finder/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/Mozilla_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/PowerPlant.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/Required_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/Standard_URL_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/Text.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/WorldWideWeb_suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Netscape/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/AppleScript_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Macintosh_Connectivity_Clas.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/QuickDraw_Graphics_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/QuickDraw_Graphics_Suppleme.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Required_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Table_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Text_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/Type_Names_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/StdSuites/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Disk_Folder_File_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Folder_Actions_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Hidden_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Login_Items_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Power_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Processes_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/System_Events_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/Text_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/SystemEvents/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Terminal/Standard_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Terminal/Terminal_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Terminal/Text_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/Terminal/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/_builtinSuites/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/lib-scriptpackages/_builtinSuites/builtin_Suite.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/macerrors.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/macostools.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/macresource.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/pimp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/terminalcommand.py
+%%PYPY_DIR%%/lib-python/2.7/plat-mac/videoreader.py
+%%PYPY_DIR%%/lib-python/2.7/plat-netbsd1/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-netbsd1/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-next3/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/SOCKET.py
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/_emx_link.py
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/grp.py
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/pwd.py
+%%PYPY_DIR%%/lib-python/2.7/plat-os2emx/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-riscos/riscosenviron.py
+%%PYPY_DIR%%/lib-python/2.7/plat-riscos/riscospath.py
+%%PYPY_DIR%%/lib-python/2.7/plat-riscos/rourl2path.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/CDIO.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/DLFCN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/STROPTS.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/SUNAUDIODEV.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/TYPES.py
+%%PYPY_DIR%%/lib-python/2.7/plat-sunos5/regen
+%%PYPY_DIR%%/lib-python/2.7/plat-unixware7/IN.py
+%%PYPY_DIR%%/lib-python/2.7/plat-unixware7/STROPTS.py
+%%PYPY_DIR%%/lib-python/2.7/plat-unixware7/regen
+%%PYPY_DIR%%/lib-python/2.7/platform.py
+%%PYPY_DIR%%/lib-python/2.7/plistlib.py
+%%PYPY_DIR%%/lib-python/2.7/popen2.py
+%%PYPY_DIR%%/lib-python/2.7/poplib.py
+%%PYPY_DIR%%/lib-python/2.7/posixfile.py
+%%PYPY_DIR%%/lib-python/2.7/posixpath.py
+%%PYPY_DIR%%/lib-python/2.7/pprint.py
+%%PYPY_DIR%%/lib-python/2.7/profile.py
+%%PYPY_DIR%%/lib-python/2.7/pstats.py
+%%PYPY_DIR%%/lib-python/2.7/pty.py
+%%PYPY_DIR%%/lib-python/2.7/py_compile.py
+%%PYPY_DIR%%/lib-python/2.7/pyclbr.py
+%%PYPY_DIR%%/lib-python/2.7/pydoc.py
+%%PYPY_DIR%%/lib-python/2.7/pydoc_data/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/pydoc_data/topics.py
+%%PYPY_DIR%%/lib-python/2.7/quopri.py
+%%PYPY_DIR%%/lib-python/2.7/random.py
+%%PYPY_DIR%%/lib-python/2.7/re.py
+%%PYPY_DIR%%/lib-python/2.7/repr.py
+%%PYPY_DIR%%/lib-python/2.7/rexec.py
+%%PYPY_DIR%%/lib-python/2.7/rfc822.py
+%%PYPY_DIR%%/lib-python/2.7/rlcompleter.py
+%%PYPY_DIR%%/lib-python/2.7/robotparser.py
+%%PYPY_DIR%%/lib-python/2.7/runpy.py
+%%PYPY_DIR%%/lib-python/2.7/sched.py
+%%PYPY_DIR%%/lib-python/2.7/sets.py
+%%PYPY_DIR%%/lib-python/2.7/sgmllib.py
+%%PYPY_DIR%%/lib-python/2.7/sha.py
+%%PYPY_DIR%%/lib-python/2.7/shelve.py
+%%PYPY_DIR%%/lib-python/2.7/shlex.py
+%%PYPY_DIR%%/lib-python/2.7/shutil.py
+%%PYPY_DIR%%/lib-python/2.7/site-packages/README
+%%PYPY_DIR%%/lib-python/2.7/site.py
+%%PYPY_DIR%%/lib-python/2.7/smtpd.py
+%%PYPY_DIR%%/lib-python/2.7/smtplib.py
+%%PYPY_DIR%%/lib-python/2.7/sndhdr.py
+%%PYPY_DIR%%/lib-python/2.7/socket.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/dbapi2.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/dump.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/dbapi.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/dump.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/factory.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/hooks.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/py25tests.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/regression.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/transactions.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/types.py
+%%PYPY_DIR%%/lib-python/2.7/sqlite3/test/userfunctions.py
+%%PYPY_DIR%%/lib-python/2.7/sre.py
+%%PYPY_DIR%%/lib-python/2.7/sre_compile.py
+%%PYPY_DIR%%/lib-python/2.7/sre_constants.py
+%%PYPY_DIR%%/lib-python/2.7/sre_parse.py
+%%PYPY_DIR%%/lib-python/2.7/ssl.py
+%%PYPY_DIR%%/lib-python/2.7/stat.py
+%%PYPY_DIR%%/lib-python/2.7/statvfs.py
+%%PYPY_DIR%%/lib-python/2.7/string.py
+%%PYPY_DIR%%/lib-python/2.7/stringold.py
+%%PYPY_DIR%%/lib-python/2.7/stringprep.py
+%%PYPY_DIR%%/lib-python/2.7/struct.py
+%%PYPY_DIR%%/lib-python/2.7/subprocess.py
+%%PYPY_DIR%%/lib-python/2.7/sunau.py
+%%PYPY_DIR%%/lib-python/2.7/sunaudio.py
+%%PYPY_DIR%%/lib-python/2.7/symbol.py
+%%PYPY_DIR%%/lib-python/2.7/symtable.py
+%%PYPY_DIR%%/lib-python/2.7/sysconfig.py
+%%PYPY_DIR%%/lib-python/2.7/tabnanny.py
+%%PYPY_DIR%%/lib-python/2.7/tarfile.py
+%%PYPY_DIR%%/lib-python/2.7/telnetlib.py
+%%PYPY_DIR%%/lib-python/2.7/tempfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/185test.db
+%%PYPY_DIR%%/lib-python/2.7/test/Sine-1000Hz-300ms.aif
+%%PYPY_DIR%%/lib-python/2.7/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/test/_mock_backport.py
+%%PYPY_DIR%%/lib-python/2.7/test/allsans.pem
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm16.aiff
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm16.au
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm16.wav
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm24.aiff
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm24.wav
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm32.aiff
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm32.au
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm32.wav
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm8.aiff
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm8.au
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-pcm8.wav
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-ulaw.aifc
+%%PYPY_DIR%%/lib-python/2.7/test/audiodata/pluck-ulaw.au
+%%PYPY_DIR%%/lib-python/2.7/test/audiotest.au
+%%PYPY_DIR%%/lib-python/2.7/test/audiotests.py
+%%PYPY_DIR%%/lib-python/2.7/test/autotest.py
+%%PYPY_DIR%%/lib-python/2.7/test/bad_coding.py
+%%PYPY_DIR%%/lib-python/2.7/test/bad_coding2.py
+%%PYPY_DIR%%/lib-python/2.7/test/bad_coding3.py
+%%PYPY_DIR%%/lib-python/2.7/test/badcert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/badkey.pem
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future3.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future4.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future5.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future6.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future7.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future8.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_future9.py
+%%PYPY_DIR%%/lib-python/2.7/test/badsyntax_nocaret.py
+%%PYPY_DIR%%/lib-python/2.7/test/capath/0e4015b9.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/4e1295a3.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/5ed36f99.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/6e88d7b8.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/99d0fa06.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/ce7b8643.0
+%%PYPY_DIR%%/lib-python/2.7/test/capath/efa5f9c3.0
+%%PYPY_DIR%%/lib-python/2.7/test/cfgparser.1
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/big5-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/big5.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/big5hkscs-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/big5hkscs.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/cp949-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/cp949.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_jisx0213-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_jisx0213.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_jp-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_jp.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_kr-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/euc_kr.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gb18030-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gb18030.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gb2312-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gb2312.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gbk-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/gbk.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/hz-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/hz.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/iso2022_jp-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/iso2022_jp.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/iso2022_kr-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/iso2022_kr.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/johab-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/johab.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/shift_jis-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/shift_jis.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/shift_jisx0213-utf8.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cjkencodings/shift_jisx0213.txt
+%%PYPY_DIR%%/lib-python/2.7/test/cmath_testcases.txt
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/README
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/bogus_code_obj.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/borrowed_ref_1.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/borrowed_ref_2.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/buffer_mutate.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/compiler_recursion.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/decref_before_assignment.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/gc_has_finalizer.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/gc_inspection.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/infinite_loop_re.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/loosing_mro_ref.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/mutation_inside_cyclegc.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/nasty_eq_vs_dict.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/recursion_limit_too_high.py
+%%PYPY_DIR%%/lib-python/2.7/test/crashers/recursive_call.py
+%%PYPY_DIR%%/lib-python/2.7/test/curses_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/data/README
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/abs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/add.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/and.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/base.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/clamp.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/class.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/compare.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/comparetotal.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/comparetotmag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/copy.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/copyabs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/copynegate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/copysign.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddAbs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddAdd.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddAnd.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddBase.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCanonical.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddClass.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCompare.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCompareSig.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCompareTotal.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCompareTotalMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCopy.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCopyAbs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCopyNegate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddCopySign.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddDivide.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddDivideInt.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddEncode.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddFMA.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddInvert.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddLogB.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMax.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMaxMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMin.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMinMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMinus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddMultiply.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddNextMinus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddNextPlus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddNextToward.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddOr.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddPlus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddQuantize.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddReduce.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddRemainder.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddRemainderNear.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddRotate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddSameQuantum.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddScaleB.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddShift.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddSubtract.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddToIntegral.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ddXor.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/decDouble.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/decQuad.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/decSingle.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/divide.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/divideint.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqAbs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqAdd.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqAnd.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqBase.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCanonical.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqClass.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCompare.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCompareSig.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCompareTotal.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCompareTotalMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCopy.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCopyAbs.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCopyNegate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqCopySign.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqDivide.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqDivideInt.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqEncode.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqFMA.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqInvert.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqLogB.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMax.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMaxMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMin.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMinMag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMinus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqMultiply.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqNextMinus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqNextPlus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqNextToward.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqOr.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqPlus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqQuantize.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqReduce.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqRemainder.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqRemainderNear.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqRotate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqSameQuantum.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqScaleB.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqShift.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqSubtract.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqToIntegral.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dqXor.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dsBase.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/dsEncode.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/exp.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/extra.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/fma.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/inexact.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/invert.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/ln.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/log10.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/logb.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/max.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/maxmag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/min.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/minmag.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/minus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/multiply.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/nextminus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/nextplus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/nexttoward.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/or.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/plus.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/power.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/powersqrt.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/quantize.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/randomBound32.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/randoms.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/reduce.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/remainder.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/remainderNear.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/rescale.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/rotate.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/rounding.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/samequantum.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/scaleb.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/shift.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/squareroot.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/subtract.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/testall.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/tointegral.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/tointegralx.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/decimaltestdata/xor.decTest
+%%PYPY_DIR%%/lib-python/2.7/test/dh1024.pem
+%%PYPY_DIR%%/lib-python/2.7/test/doctest_aliases.py
+%%PYPY_DIR%%/lib-python/2.7/test/double_const.py
+%%PYPY_DIR%%/lib-python/2.7/test/empty.vbs
+%%PYPY_DIR%%/lib-python/2.7/test/exception_hierarchy.txt
+%%PYPY_DIR%%/lib-python/2.7/test/floating_points.txt
+%%PYPY_DIR%%/lib-python/2.7/test/fork_wait.py
+%%PYPY_DIR%%/lib-python/2.7/test/formatfloat_testcases.txt
+%%PYPY_DIR%%/lib-python/2.7/test/gdb_sample.py
+%%PYPY_DIR%%/lib-python/2.7/test/greyrgb.uue
+%%PYPY_DIR%%/lib-python/2.7/test/ieee754.txt
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.bmp
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.gif
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.jpg
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.pbm
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.pgm
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.png
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.ppm
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.ras
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.sgi
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.tiff
+%%PYPY_DIR%%/lib-python/2.7/test/imghdrdata/python.xbm
+%%PYPY_DIR%%/lib-python/2.7/test/infinite_reload.py
+%%PYPY_DIR%%/lib-python/2.7/test/inspect_fodder.py
+%%PYPY_DIR%%/lib-python/2.7/test/inspect_fodder2.py
+%%PYPY_DIR%%/lib-python/2.7/test/keycert.passwd.pem
+%%PYPY_DIR%%/lib-python/2.7/test/keycert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/keycert2.pem
+%%PYPY_DIR%%/lib-python/2.7/test/keycert3.pem
+%%PYPY_DIR%%/lib-python/2.7/test/keycert4.pem
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/README.txt
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/test_ctypes.py
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/test_dictself.py
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/test_gestalt.py
+%%PYPY_DIR%%/lib-python/2.7/test/leakers/test_selftype.py
+%%PYPY_DIR%%/lib-python/2.7/test/list_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/lock_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/make_ssl_certs.py
+%%PYPY_DIR%%/lib-python/2.7/test/mapping_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/math_testcases.txt
+%%PYPY_DIR%%/lib-python/2.7/test/mp_fork_bomb.py
+%%PYPY_DIR%%/lib-python/2.7/test/nokia.pem
+%%PYPY_DIR%%/lib-python/2.7/test/nullbytecert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/nullcert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/outstanding_bugs.py
+%%PYPY_DIR%%/lib-python/2.7/test/pickletester.py
+%%PYPY_DIR%%/lib-python/2.7/test/profilee.py
+%%PYPY_DIR%%/lib-python/2.7/test/pycacert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/pyclbr_input.py
+%%PYPY_DIR%%/lib-python/2.7/test/pydoc_mod.py
+%%PYPY_DIR%%/lib-python/2.7/test/pydocfodder.py
+%%PYPY_DIR%%/lib-python/2.7/test/pystone.py
+%%PYPY_DIR%%/lib-python/2.7/test/randv2_32.pck
+%%PYPY_DIR%%/lib-python/2.7/test/randv2_64.pck
+%%PYPY_DIR%%/lib-python/2.7/test/randv3.pck
+%%PYPY_DIR%%/lib-python/2.7/test/re_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/regrtest.py
+%%PYPY_DIR%%/lib-python/2.7/test/relimport.py
+%%PYPY_DIR%%/lib-python/2.7/test/reperf.py
+%%PYPY_DIR%%/lib-python/2.7/test/revocation.crl
+%%PYPY_DIR%%/lib-python/2.7/test/sample_doctest.py
+%%PYPY_DIR%%/lib-python/2.7/test/sample_doctest_no_docstrings.py
+%%PYPY_DIR%%/lib-python/2.7/test/sample_doctest_no_doctests.py
+%%PYPY_DIR%%/lib-python/2.7/test/script_helper.py
+%%PYPY_DIR%%/lib-python/2.7/test/selfsigned_pythontestdotnet.pem
+%%PYPY_DIR%%/lib-python/2.7/test/seq_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/sgml_input.html
+%%PYPY_DIR%%/lib-python/2.7/test/sha256.pem
+%%PYPY_DIR%%/lib-python/2.7/test/sortperf.py
+%%PYPY_DIR%%/lib-python/2.7/test/ssl_cert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/ssl_key.passwd.pem
+%%PYPY_DIR%%/lib-python/2.7/test/ssl_key.pem
+%%PYPY_DIR%%/lib-python/2.7/test/ssl_servers.py
+%%PYPY_DIR%%/lib-python/2.7/test/ssltests.py
+%%PYPY_DIR%%/lib-python/2.7/test/string_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/subprocessdata/sigchild_ignore.py
+%%PYPY_DIR%%/lib-python/2.7/test/symlink_support.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_MimeWriter.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_SimpleHTTPServer.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_StringIO.py
+%%PYPY_DIR%%/lib-python/2.7/test/test___all__.py
+%%PYPY_DIR%%/lib-python/2.7/test/test___future__.py
+%%PYPY_DIR%%/lib-python/2.7/test/test__locale.py
+%%PYPY_DIR%%/lib-python/2.7/test/test__osx_support.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_abc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_abstract_numbers.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_aepack.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_aifc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_al.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_anydbm.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_applesingle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_argparse.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_array.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ascii_formatd.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ast.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_asynchat.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_asyncore.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_atexit.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_audioop.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_augassign.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_base64.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bastion.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bigaddrspace.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bigmem.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_binascii.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_binhex.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_binop.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bisect.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bool.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bsddb.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bsddb185.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bsddb3.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_buffer.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bufio.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_builtin.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bytes.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_bz2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_calendar.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_call.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_capi.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cd.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cfgparser.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cgi.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_charmapcodec.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_class.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cmath.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cmd.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cmd_line.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cmd_line_script.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_code.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codeccallbacks.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_cn.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_hk.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_iso2022.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_jp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_kr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecencodings_tw.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecmaps_cn.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecmaps_hk.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecmaps_jp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecmaps_kr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecmaps_tw.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codecs.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_codeop.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_coercion.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_collections.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_colorsys.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_commands.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_compare.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_compile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_compileall.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_compiler.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_complex.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_complex_args.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_contains.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_contextlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cookie.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cookielib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_copy.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_copy_reg.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cpickle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_cprofile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_crypt.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_csv.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ctypes.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_curses.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_datetime.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dbm.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_decimal.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_decorators.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_defaultdict.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_deque.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_descr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_descrtut.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dict.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dictcomps.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dictviews.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_difflib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_difflib_expect.html
+%%PYPY_DIR%%/lib-python/2.7/test/test_dircache.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dis.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_distutils.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest.txt
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest2.txt
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest3.txt
+%%PYPY_DIR%%/lib-python/2.7/test/test_doctest4.txt
+%%PYPY_DIR%%/lib-python/2.7/test/test_docxmlrpc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dumbdbm.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dummy_thread.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_dummy_threading.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_email.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_email_codecs.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_email_renamed.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ensurepip.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_enumerate.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_eof.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_epoll.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_errno.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_exception_variations.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_exceptions.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_extcall.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fcntl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_file.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_file2k.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_file_eintr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_filecmp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fileinput.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fileio.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_float.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fnmatch.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fork1.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_format.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fpformat.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_fractions.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_frozen.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ftplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_funcattrs.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_functools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future1.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future3.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future4.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future5.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_future_builtins.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gdb.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gdbm.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_generators.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_genericpath.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_genexps.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_getargs.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_getargs2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_getopt.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gettext.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_glob.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_global.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_grammar.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_grp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_gzip.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_hash.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_hashlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_heapq.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_hmac.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_hotshot.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_htmllib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_htmlparser.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_httplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_httpservers.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_idle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_imageop.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_imaplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_imgfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_imghdr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_imp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_import.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_importhooks.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_importlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_index.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_inspect.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_int.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_int_literal.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_io.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ioctl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_isinstance.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_iter.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_iterlen.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_itertools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_json.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_kqueue.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_largefile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_lib2to3.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_linecache.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_linuxaudiodev.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_list.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_locale.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_logging.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_long.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_long_future.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_longexp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_macos.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_macostools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_macpath.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_macurl2path.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mailbox.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_marshal.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_math.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_md5.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_memoryio.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_memoryview.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mhlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mimetools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mimetypes.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_minidom.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mmap.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_module.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_modulefinder.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_msilib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_multibytecodec.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_multibytecodec_support.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_multifile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_multiprocessing.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mutants.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_mutex.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_netrc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_new.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_nis.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_nntplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_normalization.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ntpath.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_old_mailbox.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_opcodes.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_openpty.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_operator.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_optparse.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ordered_dict.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_os.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ossaudiodev.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_parser.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pdb.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_peepholer.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pep247.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pep277.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pep352.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pickle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pickletools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pipes.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pkg.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pkgimport.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pkgutil.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_platform.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_plistlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_poll.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_popen.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_popen2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_poplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_posix.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_posixpath.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pow.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pprint.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_print.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_profile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_property.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pstats.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pty.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pwd.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_py3kwarn.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_py_compile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pyclbr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pydoc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_pyexpat.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_queue.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_quopri.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_random.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_re.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_readline.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_repr.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_resource.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_rfc822.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_richcmp.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_rlcompleter.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_robotparser.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_runpy.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sax.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_scope.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_scriptpackages.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_select.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_set.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_setcomps.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sets.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sgmllib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sha.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_shelve.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_shlex.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_shutil.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_signal.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_site.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_slice.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_smtplib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_smtpnet.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_socket.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_socketserver.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_softspace.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sort.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_source_encoding.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_spwd.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sqlite.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ssl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_startfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_stat.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_str.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_strftime.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_string.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_stringprep.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_strop.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_strptime.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_strtod.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_struct.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_structmembers.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_structseq.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_subprocess.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sunau.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sunaudiodev.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sundry.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_support.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_symtable.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_syntax.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sys.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sys_setprofile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sys_settrace.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_sysconfig.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tarfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tcl.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_telnetlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tempfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_textwrap.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_thread.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_threaded_import.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_threadedtempfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_threading.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_threading_local.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_threadsignals.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_time.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_timeit.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_timeout.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tk.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tokenize.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tools.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_trace.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_traceback.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_transformer.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ttk_guionly.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ttk_textonly.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_tuple.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_turtle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_typechecks.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_types.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_ucn.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unary.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_undocumented_details.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unicode.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unicode_file.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unicodedata.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unittest.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_univnewlines.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_univnewlines2k.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_unpack.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urllib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urllib2.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urllib2_localnet.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urllib2net.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urllibnet.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_urlparse.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_userdict.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_userlist.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_userstring.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_uu.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_uuid.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_wait3.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_wait4.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_warnings.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_wave.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_weakref.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_weakset.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_whichdb.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_winreg.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_winsound.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_with.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_wsgiref.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xdrlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xml_etree.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xml_etree_c.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xmllib.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xmlrpc.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xpickle.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_xrange.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_zipfile.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_zipfile64.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_zipimport.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_zipimport_support.py
+%%PYPY_DIR%%/lib-python/2.7/test/test_zlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/testall.py
+%%PYPY_DIR%%/lib-python/2.7/test/testcodec.py
+%%PYPY_DIR%%/lib-python/2.7/test/testimg.uue
+%%PYPY_DIR%%/lib-python/2.7/test/testimgr.uue
+%%PYPY_DIR%%/lib-python/2.7/test/testrgb.uue
+%%PYPY_DIR%%/lib-python/2.7/test/testtar.tar
+%%PYPY_DIR%%/lib-python/2.7/test/tf_inherit_check.py
+%%PYPY_DIR%%/lib-python/2.7/test/threaded_import_hangers.py
+%%PYPY_DIR%%/lib-python/2.7/test/time_hashlib.py
+%%PYPY_DIR%%/lib-python/2.7/test/tokenize_tests.txt
+%%PYPY_DIR%%/lib-python/2.7/test/tracedmodules/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/test/tracedmodules/testmod.py
+%%PYPY_DIR%%/lib-python/2.7/test/warning_tests.py
+%%PYPY_DIR%%/lib-python/2.7/test/win_console_handler.py
+%%PYPY_DIR%%/lib-python/2.7/test/wrongcert.pem
+%%PYPY_DIR%%/lib-python/2.7/test/xmltestdata/simple-ns.xml
+%%PYPY_DIR%%/lib-python/2.7/test/xmltestdata/simple.xml
+%%PYPY_DIR%%/lib-python/2.7/test/xmltestdata/test.xml
+%%PYPY_DIR%%/lib-python/2.7/test/xmltestdata/test.xml.out
+%%PYPY_DIR%%/lib-python/2.7/test/xmltests.py
+%%PYPY_DIR%%/lib-python/2.7/test/zipdir.zip
+%%PYPY_DIR%%/lib-python/2.7/textwrap.py
+%%PYPY_DIR%%/lib-python/2.7/this.py
+%%PYPY_DIR%%/lib-python/2.7/threading.py
+%%PYPY_DIR%%/lib-python/2.7/timeit.py
+%%PYPY_DIR%%/lib-python/2.7/toaiff.py
+%%PYPY_DIR%%/lib-python/2.7/token.py
+%%PYPY_DIR%%/lib-python/2.7/tokenize.py
+%%PYPY_DIR%%/lib-python/2.7/trace.py
+%%PYPY_DIR%%/lib-python/2.7/traceback.py
+%%PYPY_DIR%%/lib-python/2.7/tty.py
+%%PYPY_DIR%%/lib-python/2.7/types.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/__main__.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/case.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/loader.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/main.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/result.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/runner.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/signals.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/suite.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/dummy.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/support.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_assertions.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_break.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_case.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_discovery.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_functiontestcase.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_loader.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_program.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_result.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_runner.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_setups.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_skipping.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/test/test_suite.py
+%%PYPY_DIR%%/lib-python/2.7/unittest/util.py
+%%PYPY_DIR%%/lib-python/2.7/urllib.py
+%%PYPY_DIR%%/lib-python/2.7/urllib2.py
+%%PYPY_DIR%%/lib-python/2.7/urlparse.py
+%%PYPY_DIR%%/lib-python/2.7/user.py
+%%PYPY_DIR%%/lib-python/2.7/uu.py
+%%PYPY_DIR%%/lib-python/2.7/uuid.py
+%%PYPY_DIR%%/lib-python/2.7/warnings.py
+%%PYPY_DIR%%/lib-python/2.7/wave.py
+%%PYPY_DIR%%/lib-python/2.7/weakref.py
+%%PYPY_DIR%%/lib-python/2.7/webbrowser.py
+%%PYPY_DIR%%/lib-python/2.7/whichdb.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref.egg-info
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/handlers.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/headers.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/simple_server.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/util.py
+%%PYPY_DIR%%/lib-python/2.7/wsgiref/validate.py
+%%PYPY_DIR%%/lib-python/2.7/xdrlib.py
+%%PYPY_DIR%%/lib-python/2.7/xml/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/NodeFilter.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/domreg.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/expatbuilder.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/minicompat.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/minidom.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/pulldom.py
+%%PYPY_DIR%%/lib-python/2.7/xml/dom/xmlbuilder.py
+%%PYPY_DIR%%/lib-python/2.7/xml/etree/ElementInclude.py
+%%PYPY_DIR%%/lib-python/2.7/xml/etree/ElementPath.py
+%%PYPY_DIR%%/lib-python/2.7/xml/etree/ElementTree.py
+%%PYPY_DIR%%/lib-python/2.7/xml/etree/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/xml/etree/cElementTree.py
+%%PYPY_DIR%%/lib-python/2.7/xml/parsers/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/xml/parsers/expat.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/__init__.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/_exceptions.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/expatreader.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/handler.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/saxutils.py
+%%PYPY_DIR%%/lib-python/2.7/xml/sax/xmlreader.py
+%%PYPY_DIR%%/lib-python/2.7/xmllib.py
+%%PYPY_DIR%%/lib-python/2.7/xmlrpclib.py
+%%PYPY_DIR%%/lib-python/2.7/zipfile.py
+%%PYPY_DIR%%/lib_pypy/__init__.py
+%%PYPY_DIR%%/lib_pypy/_audioop_build.py
+%%PYPY_DIR%%/lib_pypy/_audioop_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/LICENSE
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/README.md
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_constant_time.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/constant_time.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/constant_time.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/padding.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/padding.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/aes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/bignum.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/bio.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/callbacks.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/conf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/cryptography.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/crypto.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ct.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ecdh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ecdsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/engine.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/err.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/evp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/fips.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/nid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/objects.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/opensslv.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/osrandom_engine.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pem.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pkcs12.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pkcs7.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pypy_win32_extra.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/rand.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/src/osrandom_engine.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/src/osrandom_engine.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509v3.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509_vfy.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/__about__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/exceptions.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/fernet.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/_oid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/interfaces.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/aead.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/backend.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ciphers.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/decode_asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ed25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ed448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/encode_asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/hashes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/poly1305.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x509.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/binding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/_conditional.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ed25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ed448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/x25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/x448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/aead.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/algorithms.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/modes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/constant_time.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/hashes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/concatkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/hkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/kbkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/pbkdf2.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/scrypt.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/x963kdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/keywrap.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/poly1305.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/pkcs12.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/ssh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/hotp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/totp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/certificate_transparency.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/extensions.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/general_name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/oid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/openssl/src/osrandom_engine.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/openssl/src/osrandom_engine.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/osx-roots.diff
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/certificate.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/errorcodes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/error.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/utility.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/win32_extra.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/tools/make_ssl_data.py
+%%PYPY_DIR%%/lib_pypy/_codecs_cn.py
+%%PYPY_DIR%%/lib_pypy/_codecs_hk.py
+%%PYPY_DIR%%/lib_pypy/_codecs_iso2022.py
+%%PYPY_DIR%%/lib_pypy/_codecs_jp.py
+%%PYPY_DIR%%/lib_pypy/_codecs_kr.py
+%%PYPY_DIR%%/lib_pypy/_codecs_tw.py
+%%PYPY_DIR%%/lib_pypy/_collections.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/__init__.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/array.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/basics.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/builtin.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/dll.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/dummy.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/function.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/keepalive.txt
+%%PYPY_DIR%%/lib_pypy/_ctypes/pointer.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/primitive.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/structure.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/union.py
+%%PYPY_DIR%%/lib_pypy/_ctypes_test.c
+%%PYPY_DIR%%/lib_pypy/_ctypes_test.py
+%%PYPY_DIR%%/lib_pypy/_curses.py
+%%PYPY_DIR%%/lib_pypy/_curses_build.py
+%%PYPY_DIR%%/lib_pypy/_curses_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_curses_panel.py
+%%PYPY_DIR%%/lib_pypy/_elementtree.py
+%%PYPY_DIR%%/lib_pypy/_ffi.py
+%%PYPY_DIR%%/lib_pypy/_functools.py
+%%PYPY_DIR%%/lib_pypy/_gdbm_build.py
+%%PYPY_DIR%%/lib_pypy/_hashlib/__init__.py
+%%PYPY_DIR%%/lib_pypy/_marshal.py
+%%PYPY_DIR%%/lib_pypy/_md5.py
+%%PYPY_DIR%%/lib_pypy/_pwdgrp_build.py
+%%PYPY_DIR%%/lib_pypy/_pwdgrp_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_pypy_interact.py
+%%PYPY_DIR%%/lib_pypy/_pypy_irc_topic.py
+%%PYPY_DIR%%/lib_pypy/_pypy_openssl.c
+%%PYPY_DIR%%/lib_pypy/_pypy_openssl.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_pypy_testcapi.py
+%%PYPY_DIR%%/lib_pypy/_pypy_wait.py
+%%PYPY_DIR%%/lib_pypy/_pypy_winbase_build.py
+%%PYPY_DIR%%/lib_pypy/_pypy_winbase_cffi.py
+%%PYPY_DIR%%/lib_pypy/_resource_build.py
+%%PYPY_DIR%%/lib_pypy/_resource_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_scproxy.py
+%%PYPY_DIR%%/lib_pypy/_sha.py
+%%PYPY_DIR%%/lib_pypy/_sha256.py
+%%PYPY_DIR%%/lib_pypy/_sha512.py
+%%PYPY_DIR%%/lib_pypy/_sqlite3.py
+%%PYPY_DIR%%/lib_pypy/_sqlite3_build.py
+%%PYPY_DIR%%/lib_pypy/_ssl_build.py
+%%PYPY_DIR%%/lib_pypy/_ssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_structseq.py
+%%PYPY_DIR%%/lib_pypy/_subprocess.py
+%%PYPY_DIR%%/lib_pypy/_sysconfigdata.py
+%%PYPY_DIR%%/lib_pypy/_syslog_build.py
+%%PYPY_DIR%%/lib_pypy/_syslog_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_testcapi.py
+%%PYPY_DIR%%/lib_pypy/_testcapimodule.c
+%%PYPY_DIR%%/lib_pypy/_tkinter/__init__.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/app.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/license.terms
+%%PYPY_DIR%%/lib_pypy/_tkinter/tclobj.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/tklib_build.py
+%%PYPY_DIR%%/lib_pypy/audioop.py
+%%PYPY_DIR%%/lib_pypy/cPickle.py
+%%PYPY_DIR%%/lib_pypy/cStringIO.py
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/PKG-INFO
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/SOURCES.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/dependency_links.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/entry_points.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/not-zip-safe
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/requires.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/top_level.txt
+%%PYPY_DIR%%/lib_pypy/cffi/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_cffi_errors.h
+%%PYPY_DIR%%/lib_pypy/cffi/_cffi_include.h
+%%PYPY_DIR%%/lib_pypy/cffi/_embedding.h
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/README
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_ast_gen.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_build_tables.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_c_ast.cfg
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ast_transforms.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_ast.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_generator.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_lexer.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_parser.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/lextab.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/LICENSE
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/cpp.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/ctokens.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/lex.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/yacc.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/ygen.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/plyparser.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/yacctab.py
+%%PYPY_DIR%%/lib_pypy/cffi/api.py
+%%PYPY_DIR%%/lib_pypy/cffi/backend_ctypes.py
+%%PYPY_DIR%%/lib_pypy/cffi/cffi_opcode.py
+%%PYPY_DIR%%/lib_pypy/cffi/commontypes.py
+%%PYPY_DIR%%/lib_pypy/cffi/cparser.py
+%%PYPY_DIR%%/lib_pypy/cffi/error.py
+%%PYPY_DIR%%/lib_pypy/cffi/ffiplatform.py
+%%PYPY_DIR%%/lib_pypy/cffi/gc_weakref.py
+%%PYPY_DIR%%/lib_pypy/cffi/lock.py
+%%PYPY_DIR%%/lib_pypy/cffi/model.py
+%%PYPY_DIR%%/lib_pypy/cffi/parse_c_type.h
+%%PYPY_DIR%%/lib_pypy/cffi/pkgconfig.py
+%%PYPY_DIR%%/lib_pypy/cffi/recompiler.py
+%%PYPY_DIR%%/lib_pypy/cffi/setuptools_ext.py
+%%PYPY_DIR%%/lib_pypy/cffi/testing/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/testing/udir.py
+%%PYPY_DIR%%/lib_pypy/cffi/vengine_cpy.py
+%%PYPY_DIR%%/lib_pypy/cffi/vengine_gen.py
+%%PYPY_DIR%%/lib_pypy/cffi/verifier.py
+%%PYPY_DIR%%/lib_pypy/crypt/__init__.py
+%%PYPY_DIR%%/lib_pypy/ctypes_config_cache/.empty
+%%PYPY_DIR%%/lib_pypy/ctypes_support.py
+%%PYPY_DIR%%/lib_pypy/datetime.py
+%%PYPY_DIR%%/lib_pypy/dbm.py
+%%PYPY_DIR%%/lib_pypy/future_builtins.py
+%%PYPY_DIR%%/lib_pypy/gdbm.py
+%%PYPY_DIR%%/lib_pypy/greenlet.egg-info
+%%PYPY_DIR%%/lib_pypy/greenlet.py
+%%PYPY_DIR%%/lib_pypy/grp.py
+%%PYPY_DIR%%/lib_pypy/identity_dict.py
+%%PYPY_DIR%%/lib_pypy/marshal.py
+%%PYPY_DIR%%/lib_pypy/msvcrt.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/__init__.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/cmdrepl.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/commands.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/completer.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/completing_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/copy_code.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/curses.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/fancy_termios.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/historical_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/input.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/keymap.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/keymaps.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/module_lister.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/pygame_console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/pygame_keymap.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/python_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/readline.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/simple_interact.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unicodedata_.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unix_console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unix_eventqueue.py
+%%PYPY_DIR%%/lib_pypy/readline.egg-info
+%%PYPY_DIR%%/lib_pypy/readline.py
+%%PYPY_DIR%%/lib_pypy/resource.py
+%%PYPY_DIR%%/lib_pypy/stackless.py
+%%PYPY_DIR%%/lib_pypy/syslog.py
+%%PYPY_DIR%%/lib_pypy/testcapi_long.h
+%%PYPY_DIR%%/lib_pypy/tputil.py
+%%PYPY_DIR%%/site-packages/README
diff --git a/lang/pypy3/Makefile b/lang/pypy3/Makefile
new file mode 100644
index 000000000000..fd93bd2fa0ba
--- /dev/null
+++ b/lang/pypy3/Makefile
@@ -0,0 +1,66 @@
+# Created by: David Naylor <dbn@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= pypy3
+DISTNAME= ${PORTNAME}.6-v${DISTVERSION}-src
+
+MASTERDIR= ${.CURDIR}/../pypy
+
+WRKSRC= ${WRKDIR}/${PORTNAME}.6-v${DISTVERSION:C/-.*//}-src
+BUILD_WRKSRC?= ${WRKDIR}/build/usession-release-${PORTNAME}.6-v${DISTVERSION:C/-.*//}rc4-0/testing_1
+
+SHEBANG_FILES= \
+ lib-python/3/base64.py \
+ lib-python/3/cProfile.py \
+ lib-python/3/cgi.py \
+ lib-python/3/encodings/rot_13.py \
+ lib-python/3/keyword.py \
+ lib-python/3/idlelib/pyshell.py \
+ lib-python/3/lib2to3/pgen2/token.py \
+ lib-python/3/lib2to3/tests/data/different_encoding.py \
+ lib-python/3/lib2to3/tests/data/false_encoding.py \
+ lib-python/3/lib2to3/tests/pytree_idempotency.py \
+ lib-python/3/pdb.py \
+ lib-python/3/platform.py \
+ lib-python/3/profile.py \
+ lib-python/3/pydoc.py \
+ lib-python/3/quopri.py \
+ lib-python/3/smtpd.py \
+ lib-python/3/smtplib.py \
+ lib-python/3/symbol.py \
+ lib-python/3/tabnanny.py \
+ lib-python/3/tarfile.py \
+ lib-python/3/test/bisect.py \
+ lib-python/3/test/crashers/recursive_call.py \
+ lib-python/3/test/curses_tests.py \
+ lib-python/3/test/pystone.py \
+ lib-python/3/test/re_tests.py \
+ lib-python/3/test/regrtest.py \
+ lib-python/3/timeit.py \
+ lib-python/3/trace.py \
+ lib-python/3/turtledemo/bytedesign.py \
+ lib-python/3/turtledemo/clock.py \
+ lib-python/3/turtledemo/forest.py \
+ lib-python/3/turtledemo/fractalcurves.py \
+ lib-python/3/turtledemo/lindenmayer.py \
+ lib-python/3/turtledemo/minimal_hanoi.py \
+ lib-python/3/turtledemo/paint.py \
+ lib-python/3/turtledemo/peace.py \
+ lib-python/3/turtledemo/penrose.py \
+ lib-python/3/turtledemo/planet_and_moon.py \
+ lib-python/3/turtledemo/tree.py \
+ lib-python/3/turtledemo/yinyang.py \
+ lib-python/3/uu.py \
+ lib-python/3/webbrowser.py \
+ lib_pypy/_cffi_ssl/tools/make_ssl_data.py
+
+PACKAGE_ARGS= --without-gdbm --without-sqlite3 --without-tk
+
+PYPY_CFFI_VER= ${PORTNAME}6-pp${DISTVERSION:C/.[^.]+$//:S/.//}-${ARCH}-${OPSYS:tl}${OSREL:C/\..*//}
+
+pre-install:
+ ${FIND} ${WRKSRC} -name '*.pyc' -delete
+ #${CHMOD} -R a-w ${WRKSRC}
+ #${CHMOD} -R u+w ${WRKSRC}/lib_pypy
+
+.include "${MASTERDIR}/Makefile"
diff --git a/lang/pypy3/distinfo b/lang/pypy3/distinfo
new file mode 100644
index 000000000000..49d44fc0e2f7
--- /dev/null
+++ b/lang/pypy3/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1598691597
+SHA256 (pypy3.6-v7.3.0-src.tar.bz2) = 48d12c15fbcbcf4a32882a883195e1f922997cde78e7a16d4342b9b521eefcfa
+SIZE (pypy3.6-v7.3.0-src.tar.bz2) = 21937786
+SHA256 (455e1f635110df4bdc2981a3a0abf02e3d4d21b2.diff) = a30ae90c887d595a4e1b77ba2ad4d45509c0d35a3a5ab052c4910a6aa373f99d
+SIZE (455e1f635110df4bdc2981a3a0abf02e3d4d21b2.diff) = 773
diff --git a/lang/pypy3/files/patch-lib__pypy___blake2___blake2__build.py b/lang/pypy3/files/patch-lib__pypy___blake2___blake2__build.py
new file mode 100644
index 000000000000..229ab90f736b
--- /dev/null
+++ b/lang/pypy3/files/patch-lib__pypy___blake2___blake2__build.py
@@ -0,0 +1,11 @@
+--- lib_pypy/_blake2/_blake2_build.py.orig 2020-03-27 16:01:26 UTC
++++ lib_pypy/_blake2/_blake2_build.py
+@@ -80,7 +80,7 @@ void* addressof_node_offset(blake_param *S) {
+ """
+
+
+-_libdir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'impl'))
++_libdir = 'impl'
+ if BLAKE2_USE_SSE:
+ sourcesB=[os.path.join(_libdir, 'blake2b.c'), ]
+ sourcesS=[os.path.join(_libdir, 'blake2s.c'), ]
diff --git a/lang/pypy3/files/patch-lib__pypy___curses__build.py b/lang/pypy3/files/patch-lib__pypy___curses__build.py
new file mode 100644
index 000000000000..069996c66503
--- /dev/null
+++ b/lang/pypy3/files/patch-lib__pypy___curses__build.py
@@ -0,0 +1,11 @@
+--- lib_pypy/_curses_build.py.orig 2020-03-25 12:13:59 UTC
++++ lib_pypy/_curses_build.py
+@@ -31,6 +31,8 @@ def find_curses_dir_and_name():
+ return base, 'ncursesw'
+ if os.path.exists(os.path.join(base, 'include', 'ncurses')):
+ return base, 'ncurses'
++ if os.path.exists(os.path.join(base, 'lib', 'libncursesw.so')):
++ return base, 'ncursesw'
+ return '', None
+
+ base, name = find_curses_dir_and_name()
diff --git a/lang/pypy3/pkg-descr b/lang/pypy3/pkg-descr
new file mode 100644
index 000000000000..58efab51cc69
--- /dev/null
+++ b/lang/pypy3/pkg-descr
@@ -0,0 +1,17 @@
+PyPy3 is a fast, compliant alternative implementation of the Python
+language (3.5.3). It has several advantages and distinct features:
+
+ - Speed: thanks to its Just-in-Time compiler, Python programs often run faster
+ on PyPy3.
+ - Memory usage: large, memory-hungry Python programs might end up taking less
+ space than they do in CPython.
+ - Compatibility: PyPy3 is highly compatible with existing python code. It
+ supports ctypes and can run popular python libraries like
+ twisted and django.
+ - Sandboxing: PyPy3 provides the ability to run untrusted code in a fully
+ secure way.
+ - Stackless: PyPy3 can be configured to run in stackless mode, providing
+ micro-threads for massive concurrency.
+ - As well as other features.
+
+WWW: http://pypy.org
diff --git a/lang/pypy3/pkg-plist b/lang/pypy3/pkg-plist
new file mode 100644
index 000000000000..896c30f23070
--- /dev/null
+++ b/lang/pypy3/pkg-plist
@@ -0,0 +1,2484 @@
+bin/pypy3
+%%PYPY_DIR%%/LICENSE
+%%PYPY_DIR%%/README.rst
+%%PYPY_DIR%%/bin/libpypy3-c.so
+%%PYPY_DIR%%/bin/pypy3
+%%PYPY_DIR%%/include/PyPy.h
+%%PYPY_DIR%%/include/Python.h
+%%PYPY_DIR%%/include/README
+%%PYPY_DIR%%/include/abstract.h
+%%PYPY_DIR%%/include/boolobject.h
+%%PYPY_DIR%%/include/bytearrayobject.h
+%%PYPY_DIR%%/include/bytesobject.h
+%%PYPY_DIR%%/include/cStringIO.h
+%%PYPY_DIR%%/include/ceval.h
+%%PYPY_DIR%%/include/code.h
+%%PYPY_DIR%%/include/compile.h
+%%PYPY_DIR%%/include/complexobject.h
+%%PYPY_DIR%%/include/cpyext_datetime.h
+%%PYPY_DIR%%/include/cpyext_descrobject.h
+%%PYPY_DIR%%/include/cpyext_genobject.h
+%%PYPY_DIR%%/include/cpyext_memoryobject.h
+%%PYPY_DIR%%/include/cpyext_moduleobject.h
+%%PYPY_DIR%%/include/cpyext_object.h
+%%PYPY_DIR%%/include/cpyext_unicodeobject.h
+%%PYPY_DIR%%/include/datetime.h
+%%PYPY_DIR%%/include/descrobject.h
+%%PYPY_DIR%%/include/dictobject.h
+%%PYPY_DIR%%/include/eval.h
+%%PYPY_DIR%%/include/fileobject.h
+%%PYPY_DIR%%/include/floatobject.h
+%%PYPY_DIR%%/include/frameobject.h
+%%PYPY_DIR%%/include/funcobject.h
+%%PYPY_DIR%%/include/genobject.h
+%%PYPY_DIR%%/include/import.h
+%%PYPY_DIR%%/include/listobject.h
+%%PYPY_DIR%%/include/longintrepr.h
+%%PYPY_DIR%%/include/longobject.h
+%%PYPY_DIR%%/include/marshal.h
+%%PYPY_DIR%%/include/memoryobject.h
+%%PYPY_DIR%%/include/methodobject.h
+%%PYPY_DIR%%/include/missing.h
+%%PYPY_DIR%%/include/modsupport.h
+%%PYPY_DIR%%/include/moduleobject.h
+%%PYPY_DIR%%/include/object.h
+%%PYPY_DIR%%/include/patchlevel.h
+%%PYPY_DIR%%/include/pycapsule.h
+%%PYPY_DIR%%/include/pyconfig.h
+%%PYPY_DIR%%/include/pyerrors.h
+%%PYPY_DIR%%/include/pylifecycle.h
+%%PYPY_DIR%%/include/pymacro.h
+%%PYPY_DIR%%/include/pymath.h
+%%PYPY_DIR%%/include/pymem.h
+%%PYPY_DIR%%/include/pyport.h
+%%PYPY_DIR%%/include/pypy_decl.h
+%%PYPY_DIR%%/include/pypy_macros.h
+%%PYPY_DIR%%/include/pypy_marshal_decl.h
+%%PYPY_DIR%%/include/pypy_structmember_decl.h
+%%PYPY_DIR%%/include/pysignals.h
+%%PYPY_DIR%%/include/pystate.h
+%%PYPY_DIR%%/include/pystrhex.h
+%%PYPY_DIR%%/include/pythonrun.h
+%%PYPY_DIR%%/include/pythread.h
+%%PYPY_DIR%%/include/pytime.h
+%%PYPY_DIR%%/include/setobject.h
+%%PYPY_DIR%%/include/sliceobject.h
+%%PYPY_DIR%%/include/structmember.h
+%%PYPY_DIR%%/include/structseq.h
+%%PYPY_DIR%%/include/sysmodule.h
+%%PYPY_DIR%%/include/traceback.h
+%%PYPY_DIR%%/include/tupleobject.h
+%%PYPY_DIR%%/include/typeslots.h
+%%PYPY_DIR%%/include/unicodeobject.h
+%%PYPY_DIR%%/include/warnings.h
+%%PYPY_DIR%%/lib-python/3/__future__.py
+%%PYPY_DIR%%/lib-python/3/__phello__.foo.py
+%%PYPY_DIR%%/lib-python/3/_bootlocale.py
+%%PYPY_DIR%%/lib-python/3/_collections_abc.py
+%%PYPY_DIR%%/lib-python/3/_compat_pickle.py
+%%PYPY_DIR%%/lib-python/3/_compression.py
+%%PYPY_DIR%%/lib-python/3/_dummy_thread.py
+%%PYPY_DIR%%/lib-python/3/_markupbase.py
+%%PYPY_DIR%%/lib-python/3/_osx_support.py
+%%PYPY_DIR%%/lib-python/3/_pydecimal.py
+%%PYPY_DIR%%/lib-python/3/_pyio.py
+%%PYPY_DIR%%/lib-python/3/_sitebuiltins.py
+%%PYPY_DIR%%/lib-python/3/_strptime.py
+%%PYPY_DIR%%/lib-python/3/_threading_local.py
+%%PYPY_DIR%%/lib-python/3/_weakrefset.py
+%%PYPY_DIR%%/lib-python/3/abc.py
+%%PYPY_DIR%%/lib-python/3/aifc.py
+%%PYPY_DIR%%/lib-python/3/antigravity.py
+%%PYPY_DIR%%/lib-python/3/argparse.py
+%%PYPY_DIR%%/lib-python/3/ast.py
+%%PYPY_DIR%%/lib-python/3/asynchat.py
+%%PYPY_DIR%%/lib-python/3/asyncio/__init__.py
+%%PYPY_DIR%%/lib-python/3/asyncio/base_events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/base_futures.py
+%%PYPY_DIR%%/lib-python/3/asyncio/base_subprocess.py
+%%PYPY_DIR%%/lib-python/3/asyncio/base_tasks.py
+%%PYPY_DIR%%/lib-python/3/asyncio/compat.py
+%%PYPY_DIR%%/lib-python/3/asyncio/constants.py
+%%PYPY_DIR%%/lib-python/3/asyncio/coroutines.py
+%%PYPY_DIR%%/lib-python/3/asyncio/events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/futures.py
+%%PYPY_DIR%%/lib-python/3/asyncio/locks.py
+%%PYPY_DIR%%/lib-python/3/asyncio/log.py
+%%PYPY_DIR%%/lib-python/3/asyncio/proactor_events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/protocols.py
+%%PYPY_DIR%%/lib-python/3/asyncio/queues.py
+%%PYPY_DIR%%/lib-python/3/asyncio/selector_events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/sslproto.py
+%%PYPY_DIR%%/lib-python/3/asyncio/streams.py
+%%PYPY_DIR%%/lib-python/3/asyncio/subprocess.py
+%%PYPY_DIR%%/lib-python/3/asyncio/tasks.py
+%%PYPY_DIR%%/lib-python/3/asyncio/test_utils.py
+%%PYPY_DIR%%/lib-python/3/asyncio/transports.py
+%%PYPY_DIR%%/lib-python/3/asyncio/unix_events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/windows_events.py
+%%PYPY_DIR%%/lib-python/3/asyncio/windows_utils.py
+%%PYPY_DIR%%/lib-python/3/asyncore.py
+%%PYPY_DIR%%/lib-python/3/base64.py
+%%PYPY_DIR%%/lib-python/3/bdb.py
+%%PYPY_DIR%%/lib-python/3/binhex.py
+%%PYPY_DIR%%/lib-python/3/bisect.py
+%%PYPY_DIR%%/lib-python/3/bz2.py
+%%PYPY_DIR%%/lib-python/3/cProfile.py
+%%PYPY_DIR%%/lib-python/3/calendar.py
+%%PYPY_DIR%%/lib-python/3/cgi.py
+%%PYPY_DIR%%/lib-python/3/cgitb.py
+%%PYPY_DIR%%/lib-python/3/chunk.py
+%%PYPY_DIR%%/lib-python/3/cmd.py
+%%PYPY_DIR%%/lib-python/3/code.py
+%%PYPY_DIR%%/lib-python/3/codecs.py
+%%PYPY_DIR%%/lib-python/3/codeop.py
+%%PYPY_DIR%%/lib-python/3/collections/__init__.py
+%%PYPY_DIR%%/lib-python/3/collections/abc.py
+%%PYPY_DIR%%/lib-python/3/colorsys.py
+%%PYPY_DIR%%/lib-python/3/compileall.py
+%%PYPY_DIR%%/lib-python/3/concurrent/__init__.py
+%%PYPY_DIR%%/lib-python/3/concurrent/futures/__init__.py
+%%PYPY_DIR%%/lib-python/3/concurrent/futures/_base.py
+%%PYPY_DIR%%/lib-python/3/concurrent/futures/process.py
+%%PYPY_DIR%%/lib-python/3/concurrent/futures/thread.py
+%%PYPY_DIR%%/lib-python/3/configparser.py
+%%PYPY_DIR%%/lib-python/3/contextlib.py
+%%PYPY_DIR%%/lib-python/3/copy.py
+%%PYPY_DIR%%/lib-python/3/copyreg.py
+%%PYPY_DIR%%/lib-python/3/crypt.py
+%%PYPY_DIR%%/lib-python/3/csv.py
+%%PYPY_DIR%%/lib-python/3/ctypes/__init__.py
+%%PYPY_DIR%%/lib-python/3/ctypes/_endian.py
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/README.ctypes
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/__init__.py
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/dyld.py
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/dylib.py
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/fetch_macholib
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/fetch_macholib.bat
+%%PYPY_DIR%%/lib-python/3/ctypes/macholib/framework.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/__init__.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/__main__.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_anon.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_array_in_pointer.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_arrays.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_as_parameter.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_bitfields.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_buffers.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_bytes.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_byteswap.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_callbacks.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_cast.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_cfuncs.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_checkretval.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_delattr.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_errno.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_find.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_frombuffer.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_funcptr.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_functions.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_incomplete.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_init.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_internals.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_keeprefs.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_libc.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_loading.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_macholib.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_memfunctions.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_numbers.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_objects.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_parameters.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_pep3118.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_pickling.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_pointers.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_prototypes.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_python_api.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_random_things.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_refcounts.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_repr.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_returnfuncptrs.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_simplesubclasses.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_sizes.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_slicing.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_stringptr.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_strings.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_struct_fields.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_structures.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_unaligned_structures.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_unicode.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_values.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_varsize_struct.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_win32.py
+%%PYPY_DIR%%/lib-python/3/ctypes/test/test_wintypes.py
+%%PYPY_DIR%%/lib-python/3/ctypes/util.py
+%%PYPY_DIR%%/lib-python/3/ctypes/wintypes.py
+%%PYPY_DIR%%/lib-python/3/curses/__init__.py
+%%PYPY_DIR%%/lib-python/3/curses/ascii.py
+%%PYPY_DIR%%/lib-python/3/curses/has_key.py
+%%PYPY_DIR%%/lib-python/3/curses/panel.py
+%%PYPY_DIR%%/lib-python/3/curses/textpad.py
+%%PYPY_DIR%%/lib-python/3/datetime.py
+%%PYPY_DIR%%/lib-python/3/dbm/__init__.py
+%%PYPY_DIR%%/lib-python/3/dbm/dumb.py
+%%PYPY_DIR%%/lib-python/3/dbm/gnu.py
+%%PYPY_DIR%%/lib-python/3/dbm/ndbm.py
+%%PYPY_DIR%%/lib-python/3/decimal.py
+%%PYPY_DIR%%/lib-python/3/difflib.py
+%%PYPY_DIR%%/lib-python/3/dis.py
+%%PYPY_DIR%%/lib-python/3/distutils/README
+%%PYPY_DIR%%/lib-python/3/distutils/__init__.py
+%%PYPY_DIR%%/lib-python/3/distutils/_msvccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/archive_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/bcppcompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/ccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/cmd.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/__init__.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/bdist.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/bdist_dumb.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/bdist_msi.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/bdist_rpm.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/bdist_wininst.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/build.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/build_clib.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/build_ext.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/build_py.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/build_scripts.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/check.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/clean.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/command_template
+%%PYPY_DIR%%/lib-python/3/distutils/command/config.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install_data.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install_egg_info.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install_headers.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install_lib.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/install_scripts.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/register.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/sdist.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/upload.py
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-10.0-amd64.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-10.0.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-14.0-amd64.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-14.0.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-6.0.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-7.1.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-8.0.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-9.0-amd64.exe
+%%PYPY_DIR%%/lib-python/3/distutils/command/wininst-9.0.exe
+%%PYPY_DIR%%/lib-python/3/distutils/config.py
+%%PYPY_DIR%%/lib-python/3/distutils/core.py
+%%PYPY_DIR%%/lib-python/3/distutils/cygwinccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/debug.py
+%%PYPY_DIR%%/lib-python/3/distutils/dep_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/dir_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/dist.py
+%%PYPY_DIR%%/lib-python/3/distutils/errors.py
+%%PYPY_DIR%%/lib-python/3/distutils/extension.py
+%%PYPY_DIR%%/lib-python/3/distutils/fancy_getopt.py
+%%PYPY_DIR%%/lib-python/3/distutils/file_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/filelist.py
+%%PYPY_DIR%%/lib-python/3/distutils/log.py
+%%PYPY_DIR%%/lib-python/3/distutils/msvc9compiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/msvccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/spawn.py
+%%PYPY_DIR%%/lib-python/3/distutils/sysconfig.py
+%%PYPY_DIR%%/lib-python/3/distutils/sysconfig_cpython.py
+%%PYPY_DIR%%/lib-python/3/distutils/sysconfig_pypy.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/Setup.sample
+%%PYPY_DIR%%/lib-python/3/distutils/tests/__init__.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/support.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_archive_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_bdist.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_bdist_dumb.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_bdist_msi.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_bdist_rpm.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_bdist_wininst.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_build.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_build_clib.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_build_ext.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_build_py.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_build_scripts.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_check.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_clean.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_cmd.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_config.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_config_cmd.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_core.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_cygwinccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_dep_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_dir_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_dist.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_extension.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_file_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_filelist.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_install.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_install_data.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_install_headers.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_install_lib.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_install_scripts.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_log.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_msvc9compiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_msvccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_register.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_sdist.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_spawn.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_sysconfig.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_text_file.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_unixccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_upload.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_util.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_version.py
+%%PYPY_DIR%%/lib-python/3/distutils/tests/test_versionpredicate.py
+%%PYPY_DIR%%/lib-python/3/distutils/text_file.py
+%%PYPY_DIR%%/lib-python/3/distutils/unixccompiler.py
+%%PYPY_DIR%%/lib-python/3/distutils/util.py
+%%PYPY_DIR%%/lib-python/3/distutils/version.py
+%%PYPY_DIR%%/lib-python/3/distutils/versionpredicate.py
+%%PYPY_DIR%%/lib-python/3/doctest.py
+%%PYPY_DIR%%/lib-python/3/dummy_threading.py
+%%PYPY_DIR%%/lib-python/3/email/__init__.py
+%%PYPY_DIR%%/lib-python/3/email/_encoded_words.py
+%%PYPY_DIR%%/lib-python/3/email/_header_value_parser.py
+%%PYPY_DIR%%/lib-python/3/email/_parseaddr.py
+%%PYPY_DIR%%/lib-python/3/email/_policybase.py
+%%PYPY_DIR%%/lib-python/3/email/architecture.rst
+%%PYPY_DIR%%/lib-python/3/email/base64mime.py
+%%PYPY_DIR%%/lib-python/3/email/charset.py
+%%PYPY_DIR%%/lib-python/3/email/contentmanager.py
+%%PYPY_DIR%%/lib-python/3/email/encoders.py
+%%PYPY_DIR%%/lib-python/3/email/errors.py
+%%PYPY_DIR%%/lib-python/3/email/feedparser.py
+%%PYPY_DIR%%/lib-python/3/email/generator.py
+%%PYPY_DIR%%/lib-python/3/email/header.py
+%%PYPY_DIR%%/lib-python/3/email/headerregistry.py
+%%PYPY_DIR%%/lib-python/3/email/iterators.py
+%%PYPY_DIR%%/lib-python/3/email/message.py
+%%PYPY_DIR%%/lib-python/3/email/mime/__init__.py
+%%PYPY_DIR%%/lib-python/3/email/mime/application.py
+%%PYPY_DIR%%/lib-python/3/email/mime/audio.py
+%%PYPY_DIR%%/lib-python/3/email/mime/base.py
+%%PYPY_DIR%%/lib-python/3/email/mime/image.py
+%%PYPY_DIR%%/lib-python/3/email/mime/message.py
+%%PYPY_DIR%%/lib-python/3/email/mime/multipart.py
+%%PYPY_DIR%%/lib-python/3/email/mime/nonmultipart.py
+%%PYPY_DIR%%/lib-python/3/email/mime/text.py
+%%PYPY_DIR%%/lib-python/3/email/parser.py
+%%PYPY_DIR%%/lib-python/3/email/policy.py
+%%PYPY_DIR%%/lib-python/3/email/quoprimime.py
+%%PYPY_DIR%%/lib-python/3/email/utils.py
+%%PYPY_DIR%%/lib-python/3/encodings/__init__.py
+%%PYPY_DIR%%/lib-python/3/encodings/aliases.py
+%%PYPY_DIR%%/lib-python/3/encodings/ascii.py
+%%PYPY_DIR%%/lib-python/3/encodings/base64_codec.py
+%%PYPY_DIR%%/lib-python/3/encodings/big5.py
+%%PYPY_DIR%%/lib-python/3/encodings/big5hkscs.py
+%%PYPY_DIR%%/lib-python/3/encodings/bz2_codec.py
+%%PYPY_DIR%%/lib-python/3/encodings/charmap.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp037.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1006.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1026.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1125.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1140.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1250.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1251.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1252.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1253.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1254.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1255.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1256.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1257.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp1258.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp273.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp424.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp437.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp500.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp65001.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp720.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp737.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp775.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp850.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp852.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp855.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp856.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp857.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp858.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp860.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp861.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp862.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp863.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp864.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp865.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp866.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp869.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp874.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp875.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp932.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp949.py
+%%PYPY_DIR%%/lib-python/3/encodings/cp950.py
+%%PYPY_DIR%%/lib-python/3/encodings/euc_jis_2004.py
+%%PYPY_DIR%%/lib-python/3/encodings/euc_jisx0213.py
+%%PYPY_DIR%%/lib-python/3/encodings/euc_jp.py
+%%PYPY_DIR%%/lib-python/3/encodings/euc_kr.py
+%%PYPY_DIR%%/lib-python/3/encodings/gb18030.py
+%%PYPY_DIR%%/lib-python/3/encodings/gb2312.py
+%%PYPY_DIR%%/lib-python/3/encodings/gbk.py
+%%PYPY_DIR%%/lib-python/3/encodings/hex_codec.py
+%%PYPY_DIR%%/lib-python/3/encodings/hp_roman8.py
+%%PYPY_DIR%%/lib-python/3/encodings/hz.py
+%%PYPY_DIR%%/lib-python/3/encodings/idna.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp_1.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp_2.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp_2004.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp_3.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_jp_ext.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso2022_kr.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_1.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_10.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_11.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_13.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_14.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_15.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_16.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_2.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_3.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_4.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_5.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_6.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_7.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_8.py
+%%PYPY_DIR%%/lib-python/3/encodings/iso8859_9.py
+%%PYPY_DIR%%/lib-python/3/encodings/johab.py
+%%PYPY_DIR%%/lib-python/3/encodings/koi8_r.py
+%%PYPY_DIR%%/lib-python/3/encodings/koi8_t.py
+%%PYPY_DIR%%/lib-python/3/encodings/koi8_u.py
+%%PYPY_DIR%%/lib-python/3/encodings/kz1048.py
+%%PYPY_DIR%%/lib-python/3/encodings/latin_1.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_arabic.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_centeuro.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_croatian.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_cyrillic.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_farsi.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_greek.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_iceland.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_latin2.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_roman.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_romanian.py
+%%PYPY_DIR%%/lib-python/3/encodings/mac_turkish.py
+%%PYPY_DIR%%/lib-python/3/encodings/mbcs.py
+%%PYPY_DIR%%/lib-python/3/encodings/oem.py
+%%PYPY_DIR%%/lib-python/3/encodings/palmos.py
+%%PYPY_DIR%%/lib-python/3/encodings/ptcp154.py
+%%PYPY_DIR%%/lib-python/3/encodings/punycode.py
+%%PYPY_DIR%%/lib-python/3/encodings/quopri_codec.py
+%%PYPY_DIR%%/lib-python/3/encodings/raw_unicode_escape.py
+%%PYPY_DIR%%/lib-python/3/encodings/rot_13.py
+%%PYPY_DIR%%/lib-python/3/encodings/shift_jis.py
+%%PYPY_DIR%%/lib-python/3/encodings/shift_jis_2004.py
+%%PYPY_DIR%%/lib-python/3/encodings/shift_jisx0213.py
+%%PYPY_DIR%%/lib-python/3/encodings/tis_620.py
+%%PYPY_DIR%%/lib-python/3/encodings/undefined.py
+%%PYPY_DIR%%/lib-python/3/encodings/unicode_escape.py
+%%PYPY_DIR%%/lib-python/3/encodings/unicode_internal.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_16.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_16_be.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_16_le.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_32.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_32_be.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_32_le.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_7.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_8.py
+%%PYPY_DIR%%/lib-python/3/encodings/utf_8_sig.py
+%%PYPY_DIR%%/lib-python/3/encodings/uu_codec.py
+%%PYPY_DIR%%/lib-python/3/encodings/zlib_codec.py
+%%PYPY_DIR%%/lib-python/3/ensurepip/__init__.py
+%%PYPY_DIR%%/lib-python/3/ensurepip/__main__.py
+%%PYPY_DIR%%/lib-python/3/ensurepip/_bundled/pip-19.2.3-py2.py3-none-any.whl
+%%PYPY_DIR%%/lib-python/3/ensurepip/_bundled/setuptools-41.2.0-py2.py3-none-any.whl
+%%PYPY_DIR%%/lib-python/3/ensurepip/_uninstall.py
+%%PYPY_DIR%%/lib-python/3/enum.py
+%%PYPY_DIR%%/lib-python/3/filecmp.py
+%%PYPY_DIR%%/lib-python/3/fileinput.py
+%%PYPY_DIR%%/lib-python/3/fnmatch.py
+%%PYPY_DIR%%/lib-python/3/formatter.py
+%%PYPY_DIR%%/lib-python/3/fractions.py
+%%PYPY_DIR%%/lib-python/3/ftplib.py
+%%PYPY_DIR%%/lib-python/3/functools.py
+%%PYPY_DIR%%/lib-python/3/genericpath.py
+%%PYPY_DIR%%/lib-python/3/getopt.py
+%%PYPY_DIR%%/lib-python/3/getpass.py
+%%PYPY_DIR%%/lib-python/3/gettext.py
+%%PYPY_DIR%%/lib-python/3/glob.py
+%%PYPY_DIR%%/lib-python/3/gzip.py
+%%PYPY_DIR%%/lib-python/3/hashlib.py
+%%PYPY_DIR%%/lib-python/3/heapq.py
+%%PYPY_DIR%%/lib-python/3/hmac.py
+%%PYPY_DIR%%/lib-python/3/html/__init__.py
+%%PYPY_DIR%%/lib-python/3/html/entities.py
+%%PYPY_DIR%%/lib-python/3/html/parser.py
+%%PYPY_DIR%%/lib-python/3/http/__init__.py
+%%PYPY_DIR%%/lib-python/3/http/client.py
+%%PYPY_DIR%%/lib-python/3/http/cookiejar.py
+%%PYPY_DIR%%/lib-python/3/http/cookies.py
+%%PYPY_DIR%%/lib-python/3/http/server.py
+%%PYPY_DIR%%/lib-python/3/idlelib/CREDITS.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/ChangeLog
+%%PYPY_DIR%%/lib-python/3/idlelib/HISTORY.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/folder.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle.icns
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle.ico
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_16.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_16.png
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_32.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_32.png
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_48.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/idle_48.png
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/minusnode.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/openfolder.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/plusnode.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/python.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/Icons/tk.gif
+%%PYPY_DIR%%/lib-python/3/idlelib/NEWS.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/NEWS2x.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/README.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/TODO.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/__init__.py
+%%PYPY_DIR%%/lib-python/3/idlelib/__main__.py
+%%PYPY_DIR%%/lib-python/3/idlelib/_pyclbr.py
+%%PYPY_DIR%%/lib-python/3/idlelib/autocomplete.py
+%%PYPY_DIR%%/lib-python/3/idlelib/autocomplete_w.py
+%%PYPY_DIR%%/lib-python/3/idlelib/autoexpand.py
+%%PYPY_DIR%%/lib-python/3/idlelib/browser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/calltip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/calltip_w.py
+%%PYPY_DIR%%/lib-python/3/idlelib/codecontext.py
+%%PYPY_DIR%%/lib-python/3/idlelib/colorizer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/config-extensions.def
+%%PYPY_DIR%%/lib-python/3/idlelib/config-highlight.def
+%%PYPY_DIR%%/lib-python/3/idlelib/config-keys.def
+%%PYPY_DIR%%/lib-python/3/idlelib/config-main.def
+%%PYPY_DIR%%/lib-python/3/idlelib/config.py
+%%PYPY_DIR%%/lib-python/3/idlelib/config_key.py
+%%PYPY_DIR%%/lib-python/3/idlelib/configdialog.py
+%%PYPY_DIR%%/lib-python/3/idlelib/debugger.py
+%%PYPY_DIR%%/lib-python/3/idlelib/debugger_r.py
+%%PYPY_DIR%%/lib-python/3/idlelib/debugobj.py
+%%PYPY_DIR%%/lib-python/3/idlelib/debugobj_r.py
+%%PYPY_DIR%%/lib-python/3/idlelib/delegator.py
+%%PYPY_DIR%%/lib-python/3/idlelib/dynoption.py
+%%PYPY_DIR%%/lib-python/3/idlelib/editor.py
+%%PYPY_DIR%%/lib-python/3/idlelib/extend.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/filelist.py
+%%PYPY_DIR%%/lib-python/3/idlelib/grep.py
+%%PYPY_DIR%%/lib-python/3/idlelib/help.html
+%%PYPY_DIR%%/lib-python/3/idlelib/help.py
+%%PYPY_DIR%%/lib-python/3/idlelib/help_about.py
+%%PYPY_DIR%%/lib-python/3/idlelib/history.py
+%%PYPY_DIR%%/lib-python/3/idlelib/hyperparser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle.bat
+%%PYPY_DIR%%/lib-python/3/idlelib/idle.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle.pyw
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/README.txt
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/__init__.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/htest.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/mock_idle.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/mock_tk.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/template.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_autocomplete.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_autocomplete_w.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_autoexpand.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_browser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_calltip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_calltip_w.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_codecontext.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_colorizer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_config.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_config_key.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_configdialog.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_debugger.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_debugger_r.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_debugobj.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_debugobj_r.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_delegator.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_editmenu.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_editor.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_filelist.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_grep.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_help.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_help_about.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_history.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_hyperparser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_iomenu.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_macosx.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_mainmenu.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_multicall.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_outwin.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_paragraph.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_parenmatch.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_pathbrowser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_percolator.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_pyparse.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_pyshell.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_query.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_redirector.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_replace.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_rpc.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_rstrip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_run.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_runscript.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_scrolledlist.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_search.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_searchbase.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_searchengine.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_squeezer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_stackviewer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_statusbar.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_text.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_textview.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_tooltip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_tree.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_undo.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_warning.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_window.py
+%%PYPY_DIR%%/lib-python/3/idlelib/idle_test/test_zoomheight.py
+%%PYPY_DIR%%/lib-python/3/idlelib/iomenu.py
+%%PYPY_DIR%%/lib-python/3/idlelib/macosx.py
+%%PYPY_DIR%%/lib-python/3/idlelib/mainmenu.py
+%%PYPY_DIR%%/lib-python/3/idlelib/multicall.py
+%%PYPY_DIR%%/lib-python/3/idlelib/outwin.py
+%%PYPY_DIR%%/lib-python/3/idlelib/paragraph.py
+%%PYPY_DIR%%/lib-python/3/idlelib/parenmatch.py
+%%PYPY_DIR%%/lib-python/3/idlelib/pathbrowser.py
+%%PYPY_DIR%%/lib-python/3/idlelib/percolator.py
+%%PYPY_DIR%%/lib-python/3/idlelib/pyparse.py
+%%PYPY_DIR%%/lib-python/3/idlelib/pyshell.py
+%%PYPY_DIR%%/lib-python/3/idlelib/query.py
+%%PYPY_DIR%%/lib-python/3/idlelib/redirector.py
+%%PYPY_DIR%%/lib-python/3/idlelib/replace.py
+%%PYPY_DIR%%/lib-python/3/idlelib/rpc.py
+%%PYPY_DIR%%/lib-python/3/idlelib/rstrip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/run.py
+%%PYPY_DIR%%/lib-python/3/idlelib/runscript.py
+%%PYPY_DIR%%/lib-python/3/idlelib/scrolledlist.py
+%%PYPY_DIR%%/lib-python/3/idlelib/search.py
+%%PYPY_DIR%%/lib-python/3/idlelib/searchbase.py
+%%PYPY_DIR%%/lib-python/3/idlelib/searchengine.py
+%%PYPY_DIR%%/lib-python/3/idlelib/squeezer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/stackviewer.py
+%%PYPY_DIR%%/lib-python/3/idlelib/statusbar.py
+%%PYPY_DIR%%/lib-python/3/idlelib/textview.py
+%%PYPY_DIR%%/lib-python/3/idlelib/tooltip.py
+%%PYPY_DIR%%/lib-python/3/idlelib/tree.py
+%%PYPY_DIR%%/lib-python/3/idlelib/undo.py
+%%PYPY_DIR%%/lib-python/3/idlelib/window.py
+%%PYPY_DIR%%/lib-python/3/idlelib/zoomheight.py
+%%PYPY_DIR%%/lib-python/3/idlelib/zzdummy.py
+%%PYPY_DIR%%/lib-python/3/imaplib.py
+%%PYPY_DIR%%/lib-python/3/imghdr.py
+%%PYPY_DIR%%/lib-python/3/imp.py
+%%PYPY_DIR%%/lib-python/3/importlib/__init__.py
+%%PYPY_DIR%%/lib-python/3/importlib/_bootstrap.py
+%%PYPY_DIR%%/lib-python/3/importlib/_bootstrap_external.py
+%%PYPY_DIR%%/lib-python/3/importlib/abc.py
+%%PYPY_DIR%%/lib-python/3/importlib/machinery.py
+%%PYPY_DIR%%/lib-python/3/importlib/util.py
+%%PYPY_DIR%%/lib-python/3/inspect.py
+%%PYPY_DIR%%/lib-python/3/io.py
+%%PYPY_DIR%%/lib-python/3/ipaddress.py
+%%PYPY_DIR%%/lib-python/3/json/__init__.py
+%%PYPY_DIR%%/lib-python/3/json/decoder.py
+%%PYPY_DIR%%/lib-python/3/json/encoder.py
+%%PYPY_DIR%%/lib-python/3/json/scanner.py
+%%PYPY_DIR%%/lib-python/3/json/tool.py
+%%PYPY_DIR%%/lib-python/3/keyword.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/Grammar.txt
+%%PYPY_DIR%%/lib-python/3/lib2to3/PatternGrammar.txt
+%%PYPY_DIR%%/lib-python/3/lib2to3/__init__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/__main__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/btm_matcher.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/btm_utils.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixer_base.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixer_util.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/__init__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_apply.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_asserts.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_basestring.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_buffer.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_dict.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_except.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_exec.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_execfile.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_exitfunc.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_filter.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_funcattrs.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_future.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_getcwdu.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_has_key.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_idioms.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_import.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_imports.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_imports2.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_input.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_intern.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_isinstance.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_itertools.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_itertools_imports.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_long.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_map.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_metaclass.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_methodattrs.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_ne.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_next.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_nonzero.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_numliterals.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_operator.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_paren.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_print.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_raise.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_raw_input.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_reduce.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_reload.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_renames.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_repr.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_set_literal.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_standarderror.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_sys_exc.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_throw.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_tuple_params.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_types.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_unicode.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_urllib.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_ws_comma.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_xrange.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_xreadlines.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/fixes/fix_zip.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/main.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/patcomp.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/__init__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/conv.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/driver.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/grammar.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/literals.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/parse.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/pgen.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/token.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pgen2/tokenize.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pygram.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/pytree.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/refactor.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/__init__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/__main__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/README
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/bom.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/crlf.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/different_encoding.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/false_encoding.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/bad_order.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/__init__.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/fix_explicit.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/fix_first.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/fix_last.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/fix_parrot.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/myfixes/fix_preorder.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/no_fixer_cls.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/fixers/parrot_example.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/infinite_recursion.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/py2_test_grammar.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/data/py3_test_grammar.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/pytree_idempotency.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/support.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_all_fixers.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_fixers.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_main.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_parser.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_pytree.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_refactor.py
+%%PYPY_DIR%%/lib-python/3/lib2to3/tests/test_util.py
+%%PYPY_DIR%%/lib-python/3/linecache.py
+%%PYPY_DIR%%/lib-python/3/locale.py
+%%PYPY_DIR%%/lib-python/3/logging/__init__.py
+%%PYPY_DIR%%/lib-python/3/logging/config.py
+%%PYPY_DIR%%/lib-python/3/logging/handlers.py
+%%PYPY_DIR%%/lib-python/3/lzma.py
+%%PYPY_DIR%%/lib-python/3/macpath.py
+%%PYPY_DIR%%/lib-python/3/macurl2path.py
+%%PYPY_DIR%%/lib-python/3/mailbox.py
+%%PYPY_DIR%%/lib-python/3/mailcap.py
+%%PYPY_DIR%%/lib-python/3/mimetypes.py
+%%PYPY_DIR%%/lib-python/3/modulefinder.py
+%%PYPY_DIR%%/lib-python/3/msilib/__init__.py
+%%PYPY_DIR%%/lib-python/3/msilib/schema.py
+%%PYPY_DIR%%/lib-python/3/msilib/sequence.py
+%%PYPY_DIR%%/lib-python/3/msilib/text.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/__init__.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/connection.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/context.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/dummy/__init__.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/dummy/connection.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/forkserver.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/heap.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/managers.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/pool.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/popen_fork.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/popen_forkserver.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/popen_spawn_posix.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/popen_spawn_win32.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/process.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/queues.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/reduction.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/resource_sharer.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/semaphore_tracker.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/sharedctypes.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/spawn.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/synchronize.py
+%%PYPY_DIR%%/lib-python/3/multiprocessing/util.py
+%%PYPY_DIR%%/lib-python/3/netrc.py
+%%PYPY_DIR%%/lib-python/3/nntplib.py
+%%PYPY_DIR%%/lib-python/3/ntpath.py
+%%PYPY_DIR%%/lib-python/3/nturl2path.py
+%%PYPY_DIR%%/lib-python/3/numbers.py
+%%PYPY_DIR%%/lib-python/3/opcode.py
+%%PYPY_DIR%%/lib-python/3/operator.py
+%%PYPY_DIR%%/lib-python/3/optparse.py
+%%PYPY_DIR%%/lib-python/3/os.py
+%%PYPY_DIR%%/lib-python/3/pathlib.py
+%%PYPY_DIR%%/lib-python/3/pdb.py
+%%PYPY_DIR%%/lib-python/3/pickle.py
+%%PYPY_DIR%%/lib-python/3/pickletools.py
+%%PYPY_DIR%%/lib-python/3/pipes.py
+%%PYPY_DIR%%/lib-python/3/pkgutil.py
+%%PYPY_DIR%%/lib-python/3/platform.py
+%%PYPY_DIR%%/lib-python/3/plistlib.py
+%%PYPY_DIR%%/lib-python/3/poplib.py
+%%PYPY_DIR%%/lib-python/3/posixpath.py
+%%PYPY_DIR%%/lib-python/3/pprint.py
+%%PYPY_DIR%%/lib-python/3/profile.py
+%%PYPY_DIR%%/lib-python/3/pstats.py
+%%PYPY_DIR%%/lib-python/3/pty.py
+%%PYPY_DIR%%/lib-python/3/py_compile.py
+%%PYPY_DIR%%/lib-python/3/pyclbr.py
+%%PYPY_DIR%%/lib-python/3/pydoc.py
+%%PYPY_DIR%%/lib-python/3/pydoc_data/__init__.py
+%%PYPY_DIR%%/lib-python/3/pydoc_data/_pydoc.css
+%%PYPY_DIR%%/lib-python/3/pydoc_data/topics.py
+%%PYPY_DIR%%/lib-python/3/queue.py
+%%PYPY_DIR%%/lib-python/3/quopri.py
+%%PYPY_DIR%%/lib-python/3/random.py
+%%PYPY_DIR%%/lib-python/3/re.py
+%%PYPY_DIR%%/lib-python/3/reprlib.py
+%%PYPY_DIR%%/lib-python/3/rlcompleter.py
+%%PYPY_DIR%%/lib-python/3/runpy.py
+%%PYPY_DIR%%/lib-python/3/sched.py
+%%PYPY_DIR%%/lib-python/3/secrets.py
+%%PYPY_DIR%%/lib-python/3/selectors.py
+%%PYPY_DIR%%/lib-python/3/shelve.py
+%%PYPY_DIR%%/lib-python/3/shlex.py
+%%PYPY_DIR%%/lib-python/3/shutil.py
+%%PYPY_DIR%%/lib-python/3/signal.py
+%%PYPY_DIR%%/lib-python/3/site-packages/README.txt
+%%PYPY_DIR%%/lib-python/3/site.py
+%%PYPY_DIR%%/lib-python/3/smtpd.py
+%%PYPY_DIR%%/lib-python/3/smtplib.py
+%%PYPY_DIR%%/lib-python/3/sndhdr.py
+%%PYPY_DIR%%/lib-python/3/socket.py
+%%PYPY_DIR%%/lib-python/3/socketserver.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/__init__.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/dbapi2.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/dump.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/__init__.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/dbapi.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/dump.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/factory.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/hooks.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/regression.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/transactions.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/types.py
+%%PYPY_DIR%%/lib-python/3/sqlite3/test/userfunctions.py
+%%PYPY_DIR%%/lib-python/3/sre_compile.py
+%%PYPY_DIR%%/lib-python/3/sre_constants.py
+%%PYPY_DIR%%/lib-python/3/sre_parse.py
+%%PYPY_DIR%%/lib-python/3/ssl.py
+%%PYPY_DIR%%/lib-python/3/stat.py
+%%PYPY_DIR%%/lib-python/3/statistics.py
+%%PYPY_DIR%%/lib-python/3/string.py
+%%PYPY_DIR%%/lib-python/3/stringprep.py
+%%PYPY_DIR%%/lib-python/3/struct.py
+%%PYPY_DIR%%/lib-python/3/subprocess.py
+%%PYPY_DIR%%/lib-python/3/sunau.py
+%%PYPY_DIR%%/lib-python/3/symbol.py
+%%PYPY_DIR%%/lib-python/3/symtable.py
+%%PYPY_DIR%%/lib-python/3/sysconfig.py
+%%PYPY_DIR%%/lib-python/3/tabnanny.py
+%%PYPY_DIR%%/lib-python/3/tarfile.py
+%%PYPY_DIR%%/lib-python/3/telnetlib.py
+%%PYPY_DIR%%/lib-python/3/tempfile.py
+%%PYPY_DIR%%/lib-python/3/test/Sine-1000Hz-300ms.aif
+%%PYPY_DIR%%/lib-python/3/test/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/_test_multiprocessing.py
+%%PYPY_DIR%%/lib-python/3/test/allsans.pem
+%%PYPY_DIR%%/lib-python/3/test/ann_module.py
+%%PYPY_DIR%%/lib-python/3/test/ann_module2.py
+%%PYPY_DIR%%/lib-python/3/test/ann_module3.py
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-alaw.aifc
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm16.aiff
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm16.au
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm16.wav
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm24.aiff
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm24.au
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm24.wav
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm32.aiff
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm32.au
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm32.wav
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm8.aiff
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm8.au
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-pcm8.wav
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-ulaw.aifc
+%%PYPY_DIR%%/lib-python/3/test/audiodata/pluck-ulaw.au
+%%PYPY_DIR%%/lib-python/3/test/audiotest.au
+%%PYPY_DIR%%/lib-python/3/test/audiotests.py
+%%PYPY_DIR%%/lib-python/3/test/autotest.py
+%%PYPY_DIR%%/lib-python/3/test/bad_coding.py
+%%PYPY_DIR%%/lib-python/3/test/bad_coding2.py
+%%PYPY_DIR%%/lib-python/3/test/badcert.pem
+%%PYPY_DIR%%/lib-python/3/test/badkey.pem
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_3131.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future10.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future3.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future4.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future5.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future6.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future7.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future8.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_future9.py
+%%PYPY_DIR%%/lib-python/3/test/badsyntax_pep3120.py
+%%PYPY_DIR%%/lib-python/3/test/bisect.py
+%%PYPY_DIR%%/lib-python/3/test/bytecode_helper.py
+%%PYPY_DIR%%/lib-python/3/test/capath/4e1295a3.0
+%%PYPY_DIR%%/lib-python/3/test/capath/5ed36f99.0
+%%PYPY_DIR%%/lib-python/3/test/capath/6e88d7b8.0
+%%PYPY_DIR%%/lib-python/3/test/capath/99d0fa06.0
+%%PYPY_DIR%%/lib-python/3/test/capath/b1930218.0
+%%PYPY_DIR%%/lib-python/3/test/capath/ceff1710.0
+%%PYPY_DIR%%/lib-python/3/test/cfgparser.1
+%%PYPY_DIR%%/lib-python/3/test/cfgparser.2
+%%PYPY_DIR%%/lib-python/3/test/cfgparser.3
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/big5-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/big5.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/big5hkscs-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/big5hkscs.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/cp949-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/cp949.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_jisx0213-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_jisx0213.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_jp-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_jp.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_kr-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/euc_kr.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gb18030-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gb18030.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gb2312-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gb2312.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gbk-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/gbk.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/hz-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/hz.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/iso2022_jp-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/iso2022_jp.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/iso2022_kr-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/iso2022_kr.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/johab-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/johab.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/shift_jis-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/shift_jis.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/shift_jisx0213-utf8.txt
+%%PYPY_DIR%%/lib-python/3/test/cjkencodings/shift_jisx0213.txt
+%%PYPY_DIR%%/lib-python/3/test/cmath_testcases.txt
+%%PYPY_DIR%%/lib-python/3/test/coding20731.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/README
+%%PYPY_DIR%%/lib-python/3/test/crashers/bogus_code_obj.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/gc_inspection.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/infinite_loop_re.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/mutation_inside_cyclegc.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/recursive_call.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/trace_at_recursion_limit.py
+%%PYPY_DIR%%/lib-python/3/test/crashers/underlying_dict.py
+%%PYPY_DIR%%/lib-python/3/test/curses_tests.py
+%%PYPY_DIR%%/lib-python/3/test/data/README
+%%PYPY_DIR%%/lib-python/3/test/datetimetester.py
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/abs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/add.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/and.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/base.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/clamp.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/class.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/compare.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/comparetotal.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/comparetotmag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/copy.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/copyabs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/copynegate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/copysign.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddAbs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddAdd.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddAnd.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddBase.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCanonical.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddClass.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCompare.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCompareSig.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCompareTotal.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCompareTotalMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCopy.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCopyAbs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCopyNegate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddCopySign.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddDivide.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddDivideInt.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddEncode.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddFMA.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddInvert.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddLogB.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMax.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMaxMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMin.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMinMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMinus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddMultiply.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddNextMinus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddNextPlus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddNextToward.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddOr.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddPlus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddQuantize.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddReduce.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddRemainder.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddRemainderNear.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddRotate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddSameQuantum.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddScaleB.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddShift.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddSubtract.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddToIntegral.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ddXor.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/decDouble.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/decQuad.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/decSingle.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/divide.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/divideint.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqAbs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqAdd.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqAnd.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqBase.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCanonical.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqClass.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCompare.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCompareSig.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCompareTotal.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCompareTotalMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCopy.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCopyAbs.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCopyNegate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqCopySign.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqDivide.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqDivideInt.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqEncode.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqFMA.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqInvert.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqLogB.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMax.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMaxMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMin.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMinMag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMinus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqMultiply.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqNextMinus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqNextPlus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqNextToward.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqOr.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqPlus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqQuantize.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqReduce.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqRemainder.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqRemainderNear.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqRotate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqSameQuantum.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqScaleB.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqShift.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqSubtract.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqToIntegral.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dqXor.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dsBase.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/dsEncode.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/exp.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/extra.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/fma.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/inexact.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/invert.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/ln.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/log10.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/logb.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/max.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/maxmag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/min.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/minmag.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/minus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/multiply.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/nextminus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/nextplus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/nexttoward.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/or.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/plus.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/power.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/powersqrt.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/quantize.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/randomBound32.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/randoms.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/reduce.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/remainder.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/remainderNear.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/rescale.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/rotate.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/rounding.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/samequantum.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/scaleb.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/shift.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/squareroot.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/subtract.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/testall.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/tointegral.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/tointegralx.decTest
+%%PYPY_DIR%%/lib-python/3/test/decimaltestdata/xor.decTest
+%%PYPY_DIR%%/lib-python/3/test/dis_module.py
+%%PYPY_DIR%%/lib-python/3/test/doctest_aliases.py
+%%PYPY_DIR%%/lib-python/3/test/double_const.py
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/assert_usable.d
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/assert_usable.stp
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/call_stack.d
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/call_stack.d.expected
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/call_stack.py
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/call_stack.stp
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/call_stack.stp.expected
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/gc.d
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/gc.d.expected
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/gc.py
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/gc.stp
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/gc.stp.expected
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/instance.py
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/line.d
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/line.d.expected
+%%PYPY_DIR%%/lib-python/3/test/dtracedata/line.py
+%%PYPY_DIR%%/lib-python/3/test/eintrdata/eintr_tester.py
+%%PYPY_DIR%%/lib-python/3/test/empty.vbs
+%%PYPY_DIR%%/lib-python/3/test/encoded_modules/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/encoded_modules/module_iso_8859_1.py
+%%PYPY_DIR%%/lib-python/3/test/encoded_modules/module_koi8_r.py
+%%PYPY_DIR%%/lib-python/3/test/exception_hierarchy.txt
+%%PYPY_DIR%%/lib-python/3/test/ffdh3072.pem
+%%PYPY_DIR%%/lib-python/3/test/final_a.py
+%%PYPY_DIR%%/lib-python/3/test/final_b.py
+%%PYPY_DIR%%/lib-python/3/test/floating_points.txt
+%%PYPY_DIR%%/lib-python/3/test/fork_wait.py
+%%PYPY_DIR%%/lib-python/3/test/formatfloat_testcases.txt
+%%PYPY_DIR%%/lib-python/3/test/future_test1.py
+%%PYPY_DIR%%/lib-python/3/test/future_test2.py
+%%PYPY_DIR%%/lib-python/3/test/gdb_sample.py
+%%PYPY_DIR%%/lib-python/3/test/ieee754.txt
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.bmp
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.exr
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.gif
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.jpg
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.pbm
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.pgm
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.png
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.ppm
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.ras
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.sgi
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.tiff
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.webp
+%%PYPY_DIR%%/lib-python/3/test/imghdrdata/python.xbm
+%%PYPY_DIR%%/lib-python/3/test/imp_dummy.py
+%%PYPY_DIR%%/lib-python/3/test/inspect_fodder.py
+%%PYPY_DIR%%/lib-python/3/test/inspect_fodder2.py
+%%PYPY_DIR%%/lib-python/3/test/keycert.passwd.pem
+%%PYPY_DIR%%/lib-python/3/test/keycert.pem
+%%PYPY_DIR%%/lib-python/3/test/keycert2.pem
+%%PYPY_DIR%%/lib-python/3/test/keycert3.pem
+%%PYPY_DIR%%/lib-python/3/test/keycert4.pem
+%%PYPY_DIR%%/lib-python/3/test/leakers/README.txt
+%%PYPY_DIR%%/lib-python/3/test/leakers/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/leakers/test_ctypes.py
+%%PYPY_DIR%%/lib-python/3/test/leakers/test_selftype.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/cmdline.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/main.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/refleak.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/runtest.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/runtest_mp.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/save_env.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/setup.py
+%%PYPY_DIR%%/lib-python/3/test/libregrtest/utils.py
+%%PYPY_DIR%%/lib-python/3/test/list_tests.py
+%%PYPY_DIR%%/lib-python/3/test/lock_tests.py
+%%PYPY_DIR%%/lib-python/3/test/mailcap.txt
+%%PYPY_DIR%%/lib-python/3/test/make_ssl_certs.py
+%%PYPY_DIR%%/lib-python/3/test/mapping_tests.py
+%%PYPY_DIR%%/lib-python/3/test/math_testcases.txt
+%%PYPY_DIR%%/lib-python/3/test/memory_watchdog.py
+%%PYPY_DIR%%/lib-python/3/test/mime.types
+%%PYPY_DIR%%/lib-python/3/test/mock_socket.py
+%%PYPY_DIR%%/lib-python/3/test/mod_generics_cache.py
+%%PYPY_DIR%%/lib-python/3/test/mp_fork_bomb.py
+%%PYPY_DIR%%/lib-python/3/test/mp_preload.py
+%%PYPY_DIR%%/lib-python/3/test/multibytecodec_support.py
+%%PYPY_DIR%%/lib-python/3/test/nokia.pem
+%%PYPY_DIR%%/lib-python/3/test/nullbytecert.pem
+%%PYPY_DIR%%/lib-python/3/test/nullcert.pem
+%%PYPY_DIR%%/lib-python/3/test/outstanding_bugs.py
+%%PYPY_DIR%%/lib-python/3/test/pickletester.py
+%%PYPY_DIR%%/lib-python/3/test/profilee.py
+%%PYPY_DIR%%/lib-python/3/test/pstats.pck
+%%PYPY_DIR%%/lib-python/3/test/pycacert.pem
+%%PYPY_DIR%%/lib-python/3/test/pycakey.pem
+%%PYPY_DIR%%/lib-python/3/test/pyclbr_input.py
+%%PYPY_DIR%%/lib-python/3/test/pydoc_mod.py
+%%PYPY_DIR%%/lib-python/3/test/pydocfodder.py
+%%PYPY_DIR%%/lib-python/3/test/pystone.py
+%%PYPY_DIR%%/lib-python/3/test/pythoninfo.py
+%%PYPY_DIR%%/lib-python/3/test/randv2_32.pck
+%%PYPY_DIR%%/lib-python/3/test/randv2_64.pck
+%%PYPY_DIR%%/lib-python/3/test/randv3.pck
+%%PYPY_DIR%%/lib-python/3/test/re_tests.py
+%%PYPY_DIR%%/lib-python/3/test/regrtest.py
+%%PYPY_DIR%%/lib-python/3/test/relimport.py
+%%PYPY_DIR%%/lib-python/3/test/reperf.py
+%%PYPY_DIR%%/lib-python/3/test/revocation.crl
+%%PYPY_DIR%%/lib-python/3/test/sample_doctest.py
+%%PYPY_DIR%%/lib-python/3/test/sample_doctest_no_docstrings.py
+%%PYPY_DIR%%/lib-python/3/test/sample_doctest_no_doctests.py
+%%PYPY_DIR%%/lib-python/3/test/selfsigned_pythontestdotnet.pem
+%%PYPY_DIR%%/lib-python/3/test/seq_tests.py
+%%PYPY_DIR%%/lib-python/3/test/sgml_input.html
+%%PYPY_DIR%%/lib-python/3/test/signalinterproctester.py
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/README
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.8svx
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.aifc
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.aiff
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.au
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.hcom
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.sndt
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.voc
+%%PYPY_DIR%%/lib-python/3/test/sndhdrdata/sndhdr.wav
+%%PYPY_DIR%%/lib-python/3/test/sortperf.py
+%%PYPY_DIR%%/lib-python/3/test/ssl_cert.pem
+%%PYPY_DIR%%/lib-python/3/test/ssl_key.passwd.pem
+%%PYPY_DIR%%/lib-python/3/test/ssl_key.pem
+%%PYPY_DIR%%/lib-python/3/test/ssl_servers.py
+%%PYPY_DIR%%/lib-python/3/test/ssltests.py
+%%PYPY_DIR%%/lib-python/3/test/string_tests.py
+%%PYPY_DIR%%/lib-python/3/test/subprocessdata/fd_status.py
+%%PYPY_DIR%%/lib-python/3/test/subprocessdata/input_reader.py
+%%PYPY_DIR%%/lib-python/3/test/subprocessdata/qcat.py
+%%PYPY_DIR%%/lib-python/3/test/subprocessdata/qgrep.py
+%%PYPY_DIR%%/lib-python/3/test/subprocessdata/sigchild_ignore.py
+%%PYPY_DIR%%/lib-python/3/test/support/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/support/script_helper.py
+%%PYPY_DIR%%/lib-python/3/test/support/testresult.py
+%%PYPY_DIR%%/lib-python/3/test/talos-2019-0758.pem
+%%PYPY_DIR%%/lib-python/3/test/test___all__.py
+%%PYPY_DIR%%/lib-python/3/test/test___future__.py
+%%PYPY_DIR%%/lib-python/3/test/test__locale.py
+%%PYPY_DIR%%/lib-python/3/test/test__opcode.py
+%%PYPY_DIR%%/lib-python/3/test/test__osx_support.py
+%%PYPY_DIR%%/lib-python/3/test/test_abc.py
+%%PYPY_DIR%%/lib-python/3/test/test_abstract_numbers.py
+%%PYPY_DIR%%/lib-python/3/test/test_aifc.py
+%%PYPY_DIR%%/lib-python/3/test/test_argparse.py
+%%PYPY_DIR%%/lib-python/3/test/test_array.py
+%%PYPY_DIR%%/lib-python/3/test/test_asdl_parser.py
+%%PYPY_DIR%%/lib-python/3/test/test_ast.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncgen.py
+%%PYPY_DIR%%/lib-python/3/test/test_asynchat.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/echo.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/echo2.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/echo3.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_base_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_futures.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_locks.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_pep492.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_proactor_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_queues.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_selector_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_sslproto.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_streams.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_subprocess.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_tasks.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_transports.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_unix_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_windows_events.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncio/test_windows_utils.py
+%%PYPY_DIR%%/lib-python/3/test/test_asyncore.py
+%%PYPY_DIR%%/lib-python/3/test/test_atexit.py
+%%PYPY_DIR%%/lib-python/3/test/test_audioop.py
+%%PYPY_DIR%%/lib-python/3/test/test_augassign.py
+%%PYPY_DIR%%/lib-python/3/test/test_base64.py
+%%PYPY_DIR%%/lib-python/3/test/test_baseexception.py
+%%PYPY_DIR%%/lib-python/3/test/test_bdb.py
+%%PYPY_DIR%%/lib-python/3/test/test_bigaddrspace.py
+%%PYPY_DIR%%/lib-python/3/test/test_bigmem.py
+%%PYPY_DIR%%/lib-python/3/test/test_binascii.py
+%%PYPY_DIR%%/lib-python/3/test/test_binhex.py
+%%PYPY_DIR%%/lib-python/3/test/test_binop.py
+%%PYPY_DIR%%/lib-python/3/test/test_bisect.py
+%%PYPY_DIR%%/lib-python/3/test/test_bool.py
+%%PYPY_DIR%%/lib-python/3/test/test_buffer.py
+%%PYPY_DIR%%/lib-python/3/test/test_bufio.py
+%%PYPY_DIR%%/lib-python/3/test/test_builtin.py
+%%PYPY_DIR%%/lib-python/3/test/test_bytes.py
+%%PYPY_DIR%%/lib-python/3/test/test_bz2.py
+%%PYPY_DIR%%/lib-python/3/test/test_calendar.py
+%%PYPY_DIR%%/lib-python/3/test/test_call.py
+%%PYPY_DIR%%/lib-python/3/test/test_capi.py
+%%PYPY_DIR%%/lib-python/3/test/test_cgi.py
+%%PYPY_DIR%%/lib-python/3/test/test_cgitb.py
+%%PYPY_DIR%%/lib-python/3/test/test_charmapcodec.py
+%%PYPY_DIR%%/lib-python/3/test/test_class.py
+%%PYPY_DIR%%/lib-python/3/test/test_cmath.py
+%%PYPY_DIR%%/lib-python/3/test/test_cmd.py
+%%PYPY_DIR%%/lib-python/3/test/test_cmd_line.py
+%%PYPY_DIR%%/lib-python/3/test/test_cmd_line_script.py
+%%PYPY_DIR%%/lib-python/3/test/test_code.py
+%%PYPY_DIR%%/lib-python/3/test/test_code_module.py
+%%PYPY_DIR%%/lib-python/3/test/test_codeccallbacks.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_cn.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_hk.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_iso2022.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_jp.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_kr.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecencodings_tw.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecmaps_cn.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecmaps_hk.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecmaps_jp.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecmaps_kr.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecmaps_tw.py
+%%PYPY_DIR%%/lib-python/3/test/test_codecs.py
+%%PYPY_DIR%%/lib-python/3/test/test_codeop.py
+%%PYPY_DIR%%/lib-python/3/test/test_collections.py
+%%PYPY_DIR%%/lib-python/3/test/test_colorsys.py
+%%PYPY_DIR%%/lib-python/3/test/test_compare.py
+%%PYPY_DIR%%/lib-python/3/test/test_compile.py
+%%PYPY_DIR%%/lib-python/3/test/test_compileall.py
+%%PYPY_DIR%%/lib-python/3/test/test_complex.py
+%%PYPY_DIR%%/lib-python/3/test/test_concurrent_futures.py
+%%PYPY_DIR%%/lib-python/3/test/test_configparser.py
+%%PYPY_DIR%%/lib-python/3/test/test_contains.py
+%%PYPY_DIR%%/lib-python/3/test/test_contextlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_copy.py
+%%PYPY_DIR%%/lib-python/3/test/test_copyreg.py
+%%PYPY_DIR%%/lib-python/3/test/test_coroutines.py
+%%PYPY_DIR%%/lib-python/3/test/test_cprofile.py
+%%PYPY_DIR%%/lib-python/3/test/test_crashers.py
+%%PYPY_DIR%%/lib-python/3/test/test_crypt.py
+%%PYPY_DIR%%/lib-python/3/test/test_csv.py
+%%PYPY_DIR%%/lib-python/3/test/test_ctypes.py
+%%PYPY_DIR%%/lib-python/3/test/test_curses.py
+%%PYPY_DIR%%/lib-python/3/test/test_datetime.py
+%%PYPY_DIR%%/lib-python/3/test/test_dbm.py
+%%PYPY_DIR%%/lib-python/3/test/test_dbm_dumb.py
+%%PYPY_DIR%%/lib-python/3/test/test_dbm_gnu.py
+%%PYPY_DIR%%/lib-python/3/test/test_dbm_ndbm.py
+%%PYPY_DIR%%/lib-python/3/test/test_decimal.py
+%%PYPY_DIR%%/lib-python/3/test/test_decorators.py
+%%PYPY_DIR%%/lib-python/3/test/test_defaultdict.py
+%%PYPY_DIR%%/lib-python/3/test/test_deque.py
+%%PYPY_DIR%%/lib-python/3/test/test_descr.py
+%%PYPY_DIR%%/lib-python/3/test/test_descrtut.py
+%%PYPY_DIR%%/lib-python/3/test/test_devpoll.py
+%%PYPY_DIR%%/lib-python/3/test/test_dict.py
+%%PYPY_DIR%%/lib-python/3/test/test_dict_version.py
+%%PYPY_DIR%%/lib-python/3/test/test_dictcomps.py
+%%PYPY_DIR%%/lib-python/3/test/test_dictviews.py
+%%PYPY_DIR%%/lib-python/3/test/test_difflib.py
+%%PYPY_DIR%%/lib-python/3/test/test_difflib_expect.html
+%%PYPY_DIR%%/lib-python/3/test/test_dis.py
+%%PYPY_DIR%%/lib-python/3/test/test_distutils.py
+%%PYPY_DIR%%/lib-python/3/test/test_doctest.py
+%%PYPY_DIR%%/lib-python/3/test/test_doctest.txt
+%%PYPY_DIR%%/lib-python/3/test/test_doctest2.py
+%%PYPY_DIR%%/lib-python/3/test/test_doctest2.txt
+%%PYPY_DIR%%/lib-python/3/test/test_doctest3.txt
+%%PYPY_DIR%%/lib-python/3/test/test_doctest4.txt
+%%PYPY_DIR%%/lib-python/3/test/test_docxmlrpc.py
+%%PYPY_DIR%%/lib-python/3/test/test_dtrace.py
+%%PYPY_DIR%%/lib-python/3/test/test_dummy_thread.py
+%%PYPY_DIR%%/lib-python/3/test/test_dummy_threading.py
+%%PYPY_DIR%%/lib-python/3/test/test_dynamic.py
+%%PYPY_DIR%%/lib-python/3/test/test_dynamicclassattribute.py
+%%PYPY_DIR%%/lib-python/3/test/test_eintr.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/PyBanner048.gif
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/audiotest.au
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_01.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_02.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_03.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_04.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_05.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_06.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_07.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_08.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_09.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_10.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_11.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_12.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_12a.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_13.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_14.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_15.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_16.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_17.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_18.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_19.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_20.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_21.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_22.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_23.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_24.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_25.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_26.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_27.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_28.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_29.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_30.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_31.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_32.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_33.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_34.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_35.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_36.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_37.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_38.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_39.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_40.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_41.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_42.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_43.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_44.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_45.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/data/msg_46.txt
+%%PYPY_DIR%%/lib-python/3/test/test_email/test__encoded_words.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test__header_value_parser.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_asian_codecs.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_contentmanager.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_defect_handling.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_email.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_generator.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_headerregistry.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_inversion.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_message.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_parser.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_pickleable.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_policy.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/test_utils.py
+%%PYPY_DIR%%/lib-python/3/test/test_email/torture_test.py
+%%PYPY_DIR%%/lib-python/3/test/test_ensurepip.py
+%%PYPY_DIR%%/lib-python/3/test/test_enum.py
+%%PYPY_DIR%%/lib-python/3/test/test_enumerate.py
+%%PYPY_DIR%%/lib-python/3/test/test_eof.py
+%%PYPY_DIR%%/lib-python/3/test/test_epoll.py
+%%PYPY_DIR%%/lib-python/3/test/test_errno.py
+%%PYPY_DIR%%/lib-python/3/test/test_exception_hierarchy.py
+%%PYPY_DIR%%/lib-python/3/test/test_exception_variations.py
+%%PYPY_DIR%%/lib-python/3/test/test_exceptions.py
+%%PYPY_DIR%%/lib-python/3/test/test_extcall.py
+%%PYPY_DIR%%/lib-python/3/test/test_faulthandler.py
+%%PYPY_DIR%%/lib-python/3/test/test_fcntl.py
+%%PYPY_DIR%%/lib-python/3/test/test_file.py
+%%PYPY_DIR%%/lib-python/3/test/test_file_eintr.py
+%%PYPY_DIR%%/lib-python/3/test/test_filecmp.py
+%%PYPY_DIR%%/lib-python/3/test/test_fileinput.py
+%%PYPY_DIR%%/lib-python/3/test/test_fileio.py
+%%PYPY_DIR%%/lib-python/3/test/test_finalization.py
+%%PYPY_DIR%%/lib-python/3/test/test_float.py
+%%PYPY_DIR%%/lib-python/3/test/test_flufl.py
+%%PYPY_DIR%%/lib-python/3/test/test_fnmatch.py
+%%PYPY_DIR%%/lib-python/3/test/test_fork1.py
+%%PYPY_DIR%%/lib-python/3/test/test_format.py
+%%PYPY_DIR%%/lib-python/3/test/test_fractions.py
+%%PYPY_DIR%%/lib-python/3/test/test_frame.py
+%%PYPY_DIR%%/lib-python/3/test/test_fstring.py
+%%PYPY_DIR%%/lib-python/3/test/test_ftplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_funcattrs.py
+%%PYPY_DIR%%/lib-python/3/test/test_functools.py
+%%PYPY_DIR%%/lib-python/3/test/test_future.py
+%%PYPY_DIR%%/lib-python/3/test/test_future3.py
+%%PYPY_DIR%%/lib-python/3/test/test_future4.py
+%%PYPY_DIR%%/lib-python/3/test/test_future5.py
+%%PYPY_DIR%%/lib-python/3/test/test_gc.py
+%%PYPY_DIR%%/lib-python/3/test/test_gdb.py
+%%PYPY_DIR%%/lib-python/3/test/test_generator_stop.py
+%%PYPY_DIR%%/lib-python/3/test/test_generators.py
+%%PYPY_DIR%%/lib-python/3/test/test_genericpath.py
+%%PYPY_DIR%%/lib-python/3/test/test_genexps.py
+%%PYPY_DIR%%/lib-python/3/test/test_getargs2.py
+%%PYPY_DIR%%/lib-python/3/test/test_getopt.py
+%%PYPY_DIR%%/lib-python/3/test/test_getpass.py
+%%PYPY_DIR%%/lib-python/3/test/test_gettext.py
+%%PYPY_DIR%%/lib-python/3/test/test_glob.py
+%%PYPY_DIR%%/lib-python/3/test/test_global.py
+%%PYPY_DIR%%/lib-python/3/test/test_grammar.py
+%%PYPY_DIR%%/lib-python/3/test/test_grp.py
+%%PYPY_DIR%%/lib-python/3/test/test_gzip.py
+%%PYPY_DIR%%/lib-python/3/test/test_hash.py
+%%PYPY_DIR%%/lib-python/3/test/test_hashlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_heapq.py
+%%PYPY_DIR%%/lib-python/3/test/test_hmac.py
+%%PYPY_DIR%%/lib-python/3/test/test_html.py
+%%PYPY_DIR%%/lib-python/3/test/test_htmlparser.py
+%%PYPY_DIR%%/lib-python/3/test/test_http_cookiejar.py
+%%PYPY_DIR%%/lib-python/3/test/test_http_cookies.py
+%%PYPY_DIR%%/lib-python/3/test/test_httplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_httpservers.py
+%%PYPY_DIR%%/lib-python/3/test/test_idle.py
+%%PYPY_DIR%%/lib-python/3/test/test_imaplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_imghdr.py
+%%PYPY_DIR%%/lib-python/3/test/test_imp.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/basic.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/basic2.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/indirect.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/rebinding.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/rebinding2.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/subpackage.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/subpkg/subpackage2.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/subpkg/util.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/circular_imports/util.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/package/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/package/submodule.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/package2/submodule1.py
+%%PYPY_DIR%%/lib-python/3/test/test_import/data/package2/submodule2.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/abc.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/builtin/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/builtin/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/builtin/test_finder.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/builtin/test_loader.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/test_case_sensitivity.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/test_finder.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/test_loader.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/extension/test_path_hook.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/frozen/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/frozen/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/frozen/test_finder.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/frozen/test_loader.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test___loader__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test___package__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_api.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_caching.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_fromlist.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_meta_path.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_packages.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_path.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/import_/test_relative_imports.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/both_portions/foo/one.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/both_portions/foo/two.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/missing_directory.zip
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test/empty
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/nested_portion1.zip
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo/one.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/portion1/foo/one.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/portion2/foo/two.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/project1/parent/child/one.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/project2/parent/child/two.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/project3/parent/child/three.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/namespace_pkgs/top_level_portion1.zip
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/test_case_sensitivity.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/test_file_loader.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/test_finder.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/test_path_hook.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/source/test_source_encoding.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_abc.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_api.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_lazy.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_locks.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_namespace_pkgs.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_spec.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_util.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/test_windows.py
+%%PYPY_DIR%%/lib-python/3/test/test_importlib/util.py
+%%PYPY_DIR%%/lib-python/3/test/test_index.py
+%%PYPY_DIR%%/lib-python/3/test/test_inspect.py
+%%PYPY_DIR%%/lib-python/3/test/test_int.py
+%%PYPY_DIR%%/lib-python/3/test/test_int_literal.py
+%%PYPY_DIR%%/lib-python/3/test/test_io.py
+%%PYPY_DIR%%/lib-python/3/test/test_ioctl.py
+%%PYPY_DIR%%/lib-python/3/test/test_ipaddress.py
+%%PYPY_DIR%%/lib-python/3/test/test_isinstance.py
+%%PYPY_DIR%%/lib-python/3/test/test_iter.py
+%%PYPY_DIR%%/lib-python/3/test/test_iterlen.py
+%%PYPY_DIR%%/lib-python/3/test/test_itertools.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_decode.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_default.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_dump.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_encode_basestring_ascii.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_enum.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_fail.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_float.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_indent.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_pass1.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_pass2.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_pass3.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_recursion.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_scanstring.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_separators.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_speedups.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_tool.py
+%%PYPY_DIR%%/lib-python/3/test/test_json/test_unicode.py
+%%PYPY_DIR%%/lib-python/3/test/test_keyword.py
+%%PYPY_DIR%%/lib-python/3/test/test_keywordonlyarg.py
+%%PYPY_DIR%%/lib-python/3/test/test_kqueue.py
+%%PYPY_DIR%%/lib-python/3/test/test_largefile.py
+%%PYPY_DIR%%/lib-python/3/test/test_lib2to3.py
+%%PYPY_DIR%%/lib-python/3/test/test_linecache.py
+%%PYPY_DIR%%/lib-python/3/test/test_list.py
+%%PYPY_DIR%%/lib-python/3/test/test_listcomps.py
+%%PYPY_DIR%%/lib-python/3/test/test_locale.py
+%%PYPY_DIR%%/lib-python/3/test/test_logging.py
+%%PYPY_DIR%%/lib-python/3/test/test_long.py
+%%PYPY_DIR%%/lib-python/3/test/test_longexp.py
+%%PYPY_DIR%%/lib-python/3/test/test_lzma.py
+%%PYPY_DIR%%/lib-python/3/test/test_macpath.py
+%%PYPY_DIR%%/lib-python/3/test/test_macurl2path.py
+%%PYPY_DIR%%/lib-python/3/test/test_mailbox.py
+%%PYPY_DIR%%/lib-python/3/test/test_mailcap.py
+%%PYPY_DIR%%/lib-python/3/test/test_marshal.py
+%%PYPY_DIR%%/lib-python/3/test/test_math.py
+%%PYPY_DIR%%/lib-python/3/test/test_memoryio.py
+%%PYPY_DIR%%/lib-python/3/test/test_memoryview.py
+%%PYPY_DIR%%/lib-python/3/test/test_metaclass.py
+%%PYPY_DIR%%/lib-python/3/test/test_mimetypes.py
+%%PYPY_DIR%%/lib-python/3/test/test_minidom.py
+%%PYPY_DIR%%/lib-python/3/test/test_mmap.py
+%%PYPY_DIR%%/lib-python/3/test/test_module.py
+%%PYPY_DIR%%/lib-python/3/test/test_modulefinder.py
+%%PYPY_DIR%%/lib-python/3/test/test_msilib.py
+%%PYPY_DIR%%/lib-python/3/test/test_multibytecodec.py
+%%PYPY_DIR%%/lib-python/3/test/test_multiprocessing_fork.py
+%%PYPY_DIR%%/lib-python/3/test/test_multiprocessing_forkserver.py
+%%PYPY_DIR%%/lib-python/3/test/test_multiprocessing_main_handling.py
+%%PYPY_DIR%%/lib-python/3/test/test_multiprocessing_spawn.py
+%%PYPY_DIR%%/lib-python/3/test/test_netrc.py
+%%PYPY_DIR%%/lib-python/3/test/test_nis.py
+%%PYPY_DIR%%/lib-python/3/test/test_nntplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_normalization.py
+%%PYPY_DIR%%/lib-python/3/test/test_ntpath.py
+%%PYPY_DIR%%/lib-python/3/test/test_numeric_tower.py
+%%PYPY_DIR%%/lib-python/3/test/test_opcodes.py
+%%PYPY_DIR%%/lib-python/3/test/test_openpty.py
+%%PYPY_DIR%%/lib-python/3/test/test_operator.py
+%%PYPY_DIR%%/lib-python/3/test/test_optparse.py
+%%PYPY_DIR%%/lib-python/3/test/test_ordered_dict.py
+%%PYPY_DIR%%/lib-python/3/test/test_os.py
+%%PYPY_DIR%%/lib-python/3/test/test_ossaudiodev.py
+%%PYPY_DIR%%/lib-python/3/test/test_osx_env.py
+%%PYPY_DIR%%/lib-python/3/test/test_parser.py
+%%PYPY_DIR%%/lib-python/3/test/test_pathlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_pdb.py
+%%PYPY_DIR%%/lib-python/3/test/test_peepholer.py
+%%PYPY_DIR%%/lib-python/3/test/test_pickle.py
+%%PYPY_DIR%%/lib-python/3/test/test_pickletools.py
+%%PYPY_DIR%%/lib-python/3/test/test_pipes.py
+%%PYPY_DIR%%/lib-python/3/test/test_pkg.py
+%%PYPY_DIR%%/lib-python/3/test/test_pkgimport.py
+%%PYPY_DIR%%/lib-python/3/test/test_pkgutil.py
+%%PYPY_DIR%%/lib-python/3/test/test_platform.py
+%%PYPY_DIR%%/lib-python/3/test/test_plistlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_poll.py
+%%PYPY_DIR%%/lib-python/3/test/test_popen.py
+%%PYPY_DIR%%/lib-python/3/test/test_poplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_posix.py
+%%PYPY_DIR%%/lib-python/3/test/test_posixpath.py
+%%PYPY_DIR%%/lib-python/3/test/test_pow.py
+%%PYPY_DIR%%/lib-python/3/test/test_pprint.py
+%%PYPY_DIR%%/lib-python/3/test/test_print.py
+%%PYPY_DIR%%/lib-python/3/test/test_profile.py
+%%PYPY_DIR%%/lib-python/3/test/test_property.py
+%%PYPY_DIR%%/lib-python/3/test/test_pstats.py
+%%PYPY_DIR%%/lib-python/3/test/test_pty.py
+%%PYPY_DIR%%/lib-python/3/test/test_pulldom.py
+%%PYPY_DIR%%/lib-python/3/test/test_pwd.py
+%%PYPY_DIR%%/lib-python/3/test/test_py_compile.py
+%%PYPY_DIR%%/lib-python/3/test/test_pyclbr.py
+%%PYPY_DIR%%/lib-python/3/test/test_pydoc.py
+%%PYPY_DIR%%/lib-python/3/test/test_pyexpat.py
+%%PYPY_DIR%%/lib-python/3/test/test_queue.py
+%%PYPY_DIR%%/lib-python/3/test/test_quopri.py
+%%PYPY_DIR%%/lib-python/3/test/test_raise.py
+%%PYPY_DIR%%/lib-python/3/test/test_random.py
+%%PYPY_DIR%%/lib-python/3/test/test_range.py
+%%PYPY_DIR%%/lib-python/3/test/test_re.py
+%%PYPY_DIR%%/lib-python/3/test/test_readline.py
+%%PYPY_DIR%%/lib-python/3/test/test_regrtest.py
+%%PYPY_DIR%%/lib-python/3/test/test_repl.py
+%%PYPY_DIR%%/lib-python/3/test/test_reprlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_resource.py
+%%PYPY_DIR%%/lib-python/3/test/test_richcmp.py
+%%PYPY_DIR%%/lib-python/3/test/test_rlcompleter.py
+%%PYPY_DIR%%/lib-python/3/test/test_robotparser.py
+%%PYPY_DIR%%/lib-python/3/test/test_runpy.py
+%%PYPY_DIR%%/lib-python/3/test/test_sax.py
+%%PYPY_DIR%%/lib-python/3/test/test_sched.py
+%%PYPY_DIR%%/lib-python/3/test/test_scope.py
+%%PYPY_DIR%%/lib-python/3/test/test_script_helper.py
+%%PYPY_DIR%%/lib-python/3/test/test_secrets.py
+%%PYPY_DIR%%/lib-python/3/test/test_select.py
+%%PYPY_DIR%%/lib-python/3/test/test_selectors.py
+%%PYPY_DIR%%/lib-python/3/test/test_set.py
+%%PYPY_DIR%%/lib-python/3/test/test_setcomps.py
+%%PYPY_DIR%%/lib-python/3/test/test_shelve.py
+%%PYPY_DIR%%/lib-python/3/test/test_shlex.py
+%%PYPY_DIR%%/lib-python/3/test/test_shutil.py
+%%PYPY_DIR%%/lib-python/3/test/test_signal.py
+%%PYPY_DIR%%/lib-python/3/test/test_site.py
+%%PYPY_DIR%%/lib-python/3/test/test_slice.py
+%%PYPY_DIR%%/lib-python/3/test/test_smtpd.py
+%%PYPY_DIR%%/lib-python/3/test/test_smtplib.py
+%%PYPY_DIR%%/lib-python/3/test/test_smtpnet.py
+%%PYPY_DIR%%/lib-python/3/test/test_sndhdr.py
+%%PYPY_DIR%%/lib-python/3/test/test_socket.py
+%%PYPY_DIR%%/lib-python/3/test/test_socketserver.py
+%%PYPY_DIR%%/lib-python/3/test/test_sort.py
+%%PYPY_DIR%%/lib-python/3/test/test_source_encoding.py
+%%PYPY_DIR%%/lib-python/3/test/test_spwd.py
+%%PYPY_DIR%%/lib-python/3/test/test_sqlite.py
+%%PYPY_DIR%%/lib-python/3/test/test_ssl.py
+%%PYPY_DIR%%/lib-python/3/test/test_startfile.py
+%%PYPY_DIR%%/lib-python/3/test/test_stat.py
+%%PYPY_DIR%%/lib-python/3/test/test_statistics.py
+%%PYPY_DIR%%/lib-python/3/test/test_strftime.py
+%%PYPY_DIR%%/lib-python/3/test/test_string.py
+%%PYPY_DIR%%/lib-python/3/test/test_string_literals.py
+%%PYPY_DIR%%/lib-python/3/test/test_stringprep.py
+%%PYPY_DIR%%/lib-python/3/test/test_strptime.py
+%%PYPY_DIR%%/lib-python/3/test/test_strtod.py
+%%PYPY_DIR%%/lib-python/3/test/test_struct.py
+%%PYPY_DIR%%/lib-python/3/test/test_structmembers.py
+%%PYPY_DIR%%/lib-python/3/test/test_structseq.py
+%%PYPY_DIR%%/lib-python/3/test/test_subclassinit.py
+%%PYPY_DIR%%/lib-python/3/test/test_subprocess.py
+%%PYPY_DIR%%/lib-python/3/test/test_sunau.py
+%%PYPY_DIR%%/lib-python/3/test/test_sundry.py
+%%PYPY_DIR%%/lib-python/3/test/test_super.py
+%%PYPY_DIR%%/lib-python/3/test/test_support.py
+%%PYPY_DIR%%/lib-python/3/test/test_symbol.py
+%%PYPY_DIR%%/lib-python/3/test/test_symtable.py
+%%PYPY_DIR%%/lib-python/3/test/test_syntax.py
+%%PYPY_DIR%%/lib-python/3/test/test_sys.py
+%%PYPY_DIR%%/lib-python/3/test/test_sys_setprofile.py
+%%PYPY_DIR%%/lib-python/3/test/test_sys_settrace.py
+%%PYPY_DIR%%/lib-python/3/test/test_sysconfig.py
+%%PYPY_DIR%%/lib-python/3/test/test_sysconfig_pypy.py
+%%PYPY_DIR%%/lib-python/3/test/test_syslog.py
+%%PYPY_DIR%%/lib-python/3/test/test_tarfile.py
+%%PYPY_DIR%%/lib-python/3/test/test_tcl.py
+%%PYPY_DIR%%/lib-python/3/test/test_telnetlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_tempfile.py
+%%PYPY_DIR%%/lib-python/3/test/test_textwrap.py
+%%PYPY_DIR%%/lib-python/3/test/test_thread.py
+%%PYPY_DIR%%/lib-python/3/test/test_threaded_import.py
+%%PYPY_DIR%%/lib-python/3/test/test_threadedtempfile.py
+%%PYPY_DIR%%/lib-python/3/test/test_threading.py
+%%PYPY_DIR%%/lib-python/3/test/test_threading_local.py
+%%PYPY_DIR%%/lib-python/3/test/test_threadsignals.py
+%%PYPY_DIR%%/lib-python/3/test/test_time.py
+%%PYPY_DIR%%/lib-python/3/test/test_timeit.py
+%%PYPY_DIR%%/lib-python/3/test/test_timeout.py
+%%PYPY_DIR%%/lib-python/3/test/test_tix.py
+%%PYPY_DIR%%/lib-python/3/test/test_tk.py
+%%PYPY_DIR%%/lib-python/3/test/test_tokenize.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_fixcid.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_gprof2html.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_i18n.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_md5sum.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_pdeps.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_pindent.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_reindent.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_sundry.py
+%%PYPY_DIR%%/lib-python/3/test/test_tools/test_unparse.py
+%%PYPY_DIR%%/lib-python/3/test/test_trace.py
+%%PYPY_DIR%%/lib-python/3/test/test_traceback.py
+%%PYPY_DIR%%/lib-python/3/test/test_tracemalloc.py
+%%PYPY_DIR%%/lib-python/3/test/test_ttk_guionly.py
+%%PYPY_DIR%%/lib-python/3/test/test_ttk_textonly.py
+%%PYPY_DIR%%/lib-python/3/test/test_tuple.py
+%%PYPY_DIR%%/lib-python/3/test/test_turtle.py
+%%PYPY_DIR%%/lib-python/3/test/test_typechecks.py
+%%PYPY_DIR%%/lib-python/3/test/test_types.py
+%%PYPY_DIR%%/lib-python/3/test/test_typing.py
+%%PYPY_DIR%%/lib-python/3/test/test_ucn.py
+%%PYPY_DIR%%/lib-python/3/test/test_unary.py
+%%PYPY_DIR%%/lib-python/3/test/test_unicode.py
+%%PYPY_DIR%%/lib-python/3/test/test_unicode_file.py
+%%PYPY_DIR%%/lib-python/3/test/test_unicode_file_functions.py
+%%PYPY_DIR%%/lib-python/3/test/test_unicode_identifiers.py
+%%PYPY_DIR%%/lib-python/3/test/test_unicodedata.py
+%%PYPY_DIR%%/lib-python/3/test/test_unittest.py
+%%PYPY_DIR%%/lib-python/3/test/test_univnewlines.py
+%%PYPY_DIR%%/lib-python/3/test/test_unpack.py
+%%PYPY_DIR%%/lib-python/3/test/test_unpack_ex.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllib.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllib2.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllib2_localnet.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllib2net.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllib_response.py
+%%PYPY_DIR%%/lib-python/3/test/test_urllibnet.py
+%%PYPY_DIR%%/lib-python/3/test/test_urlparse.py
+%%PYPY_DIR%%/lib-python/3/test/test_userdict.py
+%%PYPY_DIR%%/lib-python/3/test/test_userlist.py
+%%PYPY_DIR%%/lib-python/3/test/test_userstring.py
+%%PYPY_DIR%%/lib-python/3/test/test_utf8source.py
+%%PYPY_DIR%%/lib-python/3/test/test_uu.py
+%%PYPY_DIR%%/lib-python/3/test/test_uuid.py
+%%PYPY_DIR%%/lib-python/3/test/test_venv.py
+%%PYPY_DIR%%/lib-python/3/test/test_wait3.py
+%%PYPY_DIR%%/lib-python/3/test/test_wait4.py
+%%PYPY_DIR%%/lib-python/3/test/test_warnings/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/test_warnings/__main__.py
+%%PYPY_DIR%%/lib-python/3/test/test_warnings/data/import_warning.py
+%%PYPY_DIR%%/lib-python/3/test/test_warnings/data/stacklevel.py
+%%PYPY_DIR%%/lib-python/3/test/test_wave.py
+%%PYPY_DIR%%/lib-python/3/test/test_weakref.py
+%%PYPY_DIR%%/lib-python/3/test/test_weakset.py
+%%PYPY_DIR%%/lib-python/3/test/test_webbrowser.py
+%%PYPY_DIR%%/lib-python/3/test/test_winconsoleio.py
+%%PYPY_DIR%%/lib-python/3/test/test_winreg.py
+%%PYPY_DIR%%/lib-python/3/test/test_winsound.py
+%%PYPY_DIR%%/lib-python/3/test/test_with.py
+%%PYPY_DIR%%/lib-python/3/test/test_wsgiref.py
+%%PYPY_DIR%%/lib-python/3/test/test_xdrlib.py
+%%PYPY_DIR%%/lib-python/3/test/test_xml_dom_minicompat.py
+%%PYPY_DIR%%/lib-python/3/test/test_xml_etree.py
+%%PYPY_DIR%%/lib-python/3/test/test_xml_etree_c.py
+%%PYPY_DIR%%/lib-python/3/test/test_xmlrpc.py
+%%PYPY_DIR%%/lib-python/3/test/test_xmlrpc_net.py
+%%PYPY_DIR%%/lib-python/3/test/test_yield_from.py
+%%PYPY_DIR%%/lib-python/3/test/test_zipapp.py
+%%PYPY_DIR%%/lib-python/3/test/test_zipfile.py
+%%PYPY_DIR%%/lib-python/3/test/test_zipfile64.py
+%%PYPY_DIR%%/lib-python/3/test/test_zipimport.py
+%%PYPY_DIR%%/lib-python/3/test/test_zipimport_support.py
+%%PYPY_DIR%%/lib-python/3/test/test_zlib.py
+%%PYPY_DIR%%/lib-python/3/test/testcodec.py
+%%PYPY_DIR%%/lib-python/3/test/testtar.tar
+%%PYPY_DIR%%/lib-python/3/test/tf_inherit_check.py
+%%PYPY_DIR%%/lib-python/3/test/threaded_import_hangers.py
+%%PYPY_DIR%%/lib-python/3/test/time_hashlib.py
+%%PYPY_DIR%%/lib-python/3/test/tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
+%%PYPY_DIR%%/lib-python/3/test/tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
+%%PYPY_DIR%%/lib-python/3/test/tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
+%%PYPY_DIR%%/lib-python/3/test/tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
+%%PYPY_DIR%%/lib-python/3/test/tokenize_tests.txt
+%%PYPY_DIR%%/lib-python/3/test/tracedmodules/__init__.py
+%%PYPY_DIR%%/lib-python/3/test/tracedmodules/testmod.py
+%%PYPY_DIR%%/lib-python/3/test/win_console_handler.py
+%%PYPY_DIR%%/lib-python/3/test/xmltestdata/expat224_utf8_bug.xml
+%%PYPY_DIR%%/lib-python/3/test/xmltestdata/simple-ns.xml
+%%PYPY_DIR%%/lib-python/3/test/xmltestdata/simple.xml
+%%PYPY_DIR%%/lib-python/3/test/xmltestdata/test.xml
+%%PYPY_DIR%%/lib-python/3/test/xmltestdata/test.xml.out
+%%PYPY_DIR%%/lib-python/3/test/xmltests.py
+%%PYPY_DIR%%/lib-python/3/test/zip_cp437_header.zip
+%%PYPY_DIR%%/lib-python/3/test/zipdir.zip
+%%PYPY_DIR%%/lib-python/3/textwrap.py
+%%PYPY_DIR%%/lib-python/3/this.py
+%%PYPY_DIR%%/lib-python/3/threading.py
+%%PYPY_DIR%%/lib-python/3/timeit.py
+%%PYPY_DIR%%/lib-python/3/tkinter/__init__.py
+%%PYPY_DIR%%/lib-python/3/tkinter/__main__.py
+%%PYPY_DIR%%/lib-python/3/tkinter/colorchooser.py
+%%PYPY_DIR%%/lib-python/3/tkinter/commondialog.py
+%%PYPY_DIR%%/lib-python/3/tkinter/constants.py
+%%PYPY_DIR%%/lib-python/3/tkinter/dialog.py
+%%PYPY_DIR%%/lib-python/3/tkinter/dnd.py
+%%PYPY_DIR%%/lib-python/3/tkinter/filedialog.py
+%%PYPY_DIR%%/lib-python/3/tkinter/font.py
+%%PYPY_DIR%%/lib-python/3/tkinter/messagebox.py
+%%PYPY_DIR%%/lib-python/3/tkinter/scrolledtext.py
+%%PYPY_DIR%%/lib-python/3/tkinter/simpledialog.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/README
+%%PYPY_DIR%%/lib-python/3/tkinter/test/__init__.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/runtktests.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/support.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/__init__.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_font.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_geometry_managers.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_images.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_loadtk.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_misc.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_text.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_variables.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_tkinter/test_widgets.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_ttk/__init__.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_ttk/test_extensions.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_ttk/test_functions.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_ttk/test_style.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/test_ttk/test_widgets.py
+%%PYPY_DIR%%/lib-python/3/tkinter/test/widget_tests.py
+%%PYPY_DIR%%/lib-python/3/tkinter/tix.py
+%%PYPY_DIR%%/lib-python/3/tkinter/ttk.py
+%%PYPY_DIR%%/lib-python/3/token.py
+%%PYPY_DIR%%/lib-python/3/tokenize.py
+%%PYPY_DIR%%/lib-python/3/trace.py
+%%PYPY_DIR%%/lib-python/3/traceback.py
+%%PYPY_DIR%%/lib-python/3/tracemalloc.py
+%%PYPY_DIR%%/lib-python/3/tty.py
+%%PYPY_DIR%%/lib-python/3/turtle.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/__init__.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/__main__.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/bytedesign.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/chaos.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/clock.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/colormixer.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/forest.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/fractalcurves.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/lindenmayer.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/minimal_hanoi.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/nim.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/paint.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/peace.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/penrose.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/planet_and_moon.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/rosette.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/round_dance.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/sorting_animate.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/tree.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/turtle.cfg
+%%PYPY_DIR%%/lib-python/3/turtledemo/two_canvases.py
+%%PYPY_DIR%%/lib-python/3/turtledemo/yinyang.py
+%%PYPY_DIR%%/lib-python/3/types.py
+%%PYPY_DIR%%/lib-python/3/typing.py
+%%PYPY_DIR%%/lib-python/3/unittest/__init__.py
+%%PYPY_DIR%%/lib-python/3/unittest/__main__.py
+%%PYPY_DIR%%/lib-python/3/unittest/case.py
+%%PYPY_DIR%%/lib-python/3/unittest/loader.py
+%%PYPY_DIR%%/lib-python/3/unittest/main.py
+%%PYPY_DIR%%/lib-python/3/unittest/mock.py
+%%PYPY_DIR%%/lib-python/3/unittest/result.py
+%%PYPY_DIR%%/lib-python/3/unittest/runner.py
+%%PYPY_DIR%%/lib-python/3/unittest/signals.py
+%%PYPY_DIR%%/lib-python/3/unittest/suite.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/__init__.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/__main__.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/_test_warnings.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/dummy.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/support.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_assertions.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_break.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_case.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_discovery.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_functiontestcase.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_loader.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_program.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_result.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_runner.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_setups.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_skipping.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/test_suite.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/__init__.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/__main__.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/support.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testcallable.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testhelpers.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testmagicmethods.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testmock.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testpatch.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testsentinel.py
+%%PYPY_DIR%%/lib-python/3/unittest/test/testmock/testwith.py
+%%PYPY_DIR%%/lib-python/3/unittest/util.py
+%%PYPY_DIR%%/lib-python/3/urllib/__init__.py
+%%PYPY_DIR%%/lib-python/3/urllib/error.py
+%%PYPY_DIR%%/lib-python/3/urllib/parse.py
+%%PYPY_DIR%%/lib-python/3/urllib/request.py
+%%PYPY_DIR%%/lib-python/3/urllib/response.py
+%%PYPY_DIR%%/lib-python/3/urllib/robotparser.py
+%%PYPY_DIR%%/lib-python/3/uu.py
+%%PYPY_DIR%%/lib-python/3/uuid.py
+%%PYPY_DIR%%/lib-python/3/venv/__init__.py
+%%PYPY_DIR%%/lib-python/3/venv/__main__.py
+%%PYPY_DIR%%/lib-python/3/venv/scripts/common/activate
+%%PYPY_DIR%%/lib-python/3/venv/scripts/nt/Activate.ps1
+%%PYPY_DIR%%/lib-python/3/venv/scripts/nt/activate.bat
+%%PYPY_DIR%%/lib-python/3/venv/scripts/nt/deactivate.bat
+%%PYPY_DIR%%/lib-python/3/venv/scripts/posix/activate.csh
+%%PYPY_DIR%%/lib-python/3/venv/scripts/posix/activate.fish
+%%PYPY_DIR%%/lib-python/3/warnings.py
+%%PYPY_DIR%%/lib-python/3/wave.py
+%%PYPY_DIR%%/lib-python/3/weakref.py
+%%PYPY_DIR%%/lib-python/3/webbrowser.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/__init__.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/handlers.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/headers.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/simple_server.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/util.py
+%%PYPY_DIR%%/lib-python/3/wsgiref/validate.py
+%%PYPY_DIR%%/lib-python/3/xdrlib.py
+%%PYPY_DIR%%/lib-python/3/xml/__init__.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/NodeFilter.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/__init__.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/domreg.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/expatbuilder.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/minicompat.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/minidom.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/pulldom.py
+%%PYPY_DIR%%/lib-python/3/xml/dom/xmlbuilder.py
+%%PYPY_DIR%%/lib-python/3/xml/etree/ElementInclude.py
+%%PYPY_DIR%%/lib-python/3/xml/etree/ElementPath.py
+%%PYPY_DIR%%/lib-python/3/xml/etree/ElementTree.py
+%%PYPY_DIR%%/lib-python/3/xml/etree/__init__.py
+%%PYPY_DIR%%/lib-python/3/xml/etree/cElementTree.py
+%%PYPY_DIR%%/lib-python/3/xml/parsers/__init__.py
+%%PYPY_DIR%%/lib-python/3/xml/parsers/expat.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/__init__.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/_exceptions.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/expatreader.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/handler.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/saxutils.py
+%%PYPY_DIR%%/lib-python/3/xml/sax/xmlreader.py
+%%PYPY_DIR%%/lib-python/3/xmlrpc/__init__.py
+%%PYPY_DIR%%/lib-python/3/xmlrpc/client.py
+%%PYPY_DIR%%/lib-python/3/xmlrpc/server.py
+%%PYPY_DIR%%/lib-python/3/zipapp.py
+%%PYPY_DIR%%/lib-python/3/zipfile.py
+%%PYPY_DIR%%/lib_pypy/__init__.py
+%%PYPY_DIR%%/lib_pypy/_audioop_build.py
+%%PYPY_DIR%%/lib_pypy/_audioop_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_blake2/__init__.py
+%%PYPY_DIR%%/lib_pypy/_blake2/_blake2_build.py
+%%PYPY_DIR%%/lib_pypy/_blake2/_blake2b_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_blake2/_blake2s_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2-config.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2-impl.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2b-load-sse2.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2b-load-sse41.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2b-ref.c
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2b-round.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2b.c
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s-load-sse2.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s-load-sse41.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s-load-xop.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s-ref.c
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s-round.h
+%%PYPY_DIR%%/lib_pypy/_blake2/impl/blake2s.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/LICENSE
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/README.md
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_constant_time.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_openssl.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/build_padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/constant_time.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/constant_time.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/padding.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/hazmat_src/padding.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/aes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/bignum.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/bio.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/callbacks.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/conf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/crypto.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/cryptography.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ct.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ecdh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ecdsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/engine.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/err.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/evp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/fips.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/nid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/objects.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/opensslv.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/osrandom_engine.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pem.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pkcs12.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pkcs7.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/pypy_win32_extra.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/rand.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/src/osrandom_engine.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/src/osrandom_engine.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/ssl.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509_vfy.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/x509v3.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/certificate.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/error.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/errorcodes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/utility.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/win32_extra.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/__about__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/exceptions.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/fernet.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/_oid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/interfaces.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/aead.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/backend.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ciphers.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/decode_asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ed25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ed448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/encode_asn1.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/hashes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/poly1305.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/backends/openssl/x509.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/_conditional.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/bindings/openssl/binding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/dh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/dsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ec.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ed25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/ed448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/rsa.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/x25519.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/asymmetric/x448.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/aead.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/algorithms.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/ciphers/modes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/cmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/constant_time.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/hashes.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/hmac.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/concatkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/hkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/kbkdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/pbkdf2.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/scrypt.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/kdf/x963kdf.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/keywrap.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/padding.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/poly1305.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/pkcs12.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/serialization/ssh.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/hotp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/totp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/hazmat/primitives/twofactor/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/utils.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/__init__.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/base.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/certificate_transparency.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/extensions.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/general_name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/name.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/ocsp.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/cryptography/x509/oid.py
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/openssl/src/osrandom_engine.c
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/openssl/src/osrandom_engine.h
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/osx-roots.diff
+%%PYPY_DIR%%/lib_pypy/_cffi_ssl/tools/make_ssl_data.py
+%%PYPY_DIR%%/lib_pypy/_codecs_cn.py
+%%PYPY_DIR%%/lib_pypy/_codecs_hk.py
+%%PYPY_DIR%%/lib_pypy/_codecs_iso2022.py
+%%PYPY_DIR%%/lib_pypy/_codecs_jp.py
+%%PYPY_DIR%%/lib_pypy/_codecs_kr.py
+%%PYPY_DIR%%/lib_pypy/_codecs_tw.py
+%%PYPY_DIR%%/lib_pypy/_collections.py
+%%PYPY_DIR%%/lib_pypy/_crypt/__init__.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/__init__.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/array.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/basics.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/builtin.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/dll.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/dummy.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/function.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/keepalive.txt
+%%PYPY_DIR%%/lib_pypy/_ctypes/pointer.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/primitive.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/structure.py
+%%PYPY_DIR%%/lib_pypy/_ctypes/union.py
+%%PYPY_DIR%%/lib_pypy/_ctypes_test.c
+%%PYPY_DIR%%/lib_pypy/_ctypes_test.py
+%%PYPY_DIR%%/lib_pypy/_curses.py
+%%PYPY_DIR%%/lib_pypy/_curses_build.py
+%%PYPY_DIR%%/lib_pypy/_curses_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_curses_panel.py
+%%PYPY_DIR%%/lib_pypy/_dbm.py
+%%PYPY_DIR%%/lib_pypy/_decimal.py
+%%PYPY_DIR%%/lib_pypy/_decimal_build.py
+%%PYPY_DIR%%/lib_pypy/_decimal_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_ffi.py
+%%PYPY_DIR%%/lib_pypy/_functools.py
+%%PYPY_DIR%%/lib_pypy/_gdbm.py
+%%PYPY_DIR%%/lib_pypy/_gdbm_build.py
+%%PYPY_DIR%%/lib_pypy/_hashlib/__init__.py
+%%PYPY_DIR%%/lib_pypy/_libmpdec/basearith.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/basearith.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/bits.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/constants.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/constants.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/context.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/convolute.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/convolute.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/crt.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/crt.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/difradix2.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/difradix2.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/fnt.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/fnt.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/fourstep.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/fourstep.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/io.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/io.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/memory.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/memory.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/mpdecimal.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/mpdecimal.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/numbertheory.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/numbertheory.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/sixstep.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/sixstep.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/transpose.c
+%%PYPY_DIR%%/lib_pypy/_libmpdec/transpose.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/typearith.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/umodarith.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/vccompat.h
+%%PYPY_DIR%%/lib_pypy/_libmpdec/vcdiv64.asm
+%%PYPY_DIR%%/lib_pypy/_libmpdec/vcstdint.h
+%%PYPY_DIR%%/lib_pypy/_lzma.py
+%%PYPY_DIR%%/lib_pypy/_lzma_build.py
+%%PYPY_DIR%%/lib_pypy/_lzma_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_marshal.py
+%%PYPY_DIR%%/lib_pypy/_md5.py
+%%PYPY_DIR%%/lib_pypy/_overlapped.py
+%%PYPY_DIR%%/lib_pypy/_pwdgrp_build.py
+%%PYPY_DIR%%/lib_pypy/_pwdgrp_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_pypy_interact.py
+%%PYPY_DIR%%/lib_pypy/_pypy_irc_topic.py
+%%PYPY_DIR%%/lib_pypy/_pypy_openssl.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_pypy_openssl.c
+%%PYPY_DIR%%/lib_pypy/_pypy_testcapi.py
+%%PYPY_DIR%%/lib_pypy/_pypy_wait.py
+%%PYPY_DIR%%/lib_pypy/_pypy_winbase_build.py
+%%PYPY_DIR%%/lib_pypy/_pypy_winbase_cffi.py
+%%PYPY_DIR%%/lib_pypy/_resource_build.py
+%%PYPY_DIR%%/lib_pypy/_resource_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_scproxy.py
+%%PYPY_DIR%%/lib_pypy/_sha1.py
+%%PYPY_DIR%%/lib_pypy/_sha256.py
+%%PYPY_DIR%%/lib_pypy/_sha3/__init__.py
+%%PYPY_DIR%%/lib_pypy/_sha3/_sha3_build.py
+%%PYPY_DIR%%/lib_pypy/_sha3/_sha3_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakHash.c
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakHash.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-64.macros
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-SnP-opt32.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-SnP-opt64.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-SnP.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-inplace32BI.c
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-opt64-config.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-opt64.c
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakP-1600-unrolling.macros
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakSponge.c
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakSponge.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/KeccakSponge.inc
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/PlSnP-Fallback.inc
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/SnP-Relaned.h
+%%PYPY_DIR%%/lib_pypy/_sha3/kcp/align.h
+%%PYPY_DIR%%/lib_pypy/_sha512.py
+%%PYPY_DIR%%/lib_pypy/_sqlite3.py
+%%PYPY_DIR%%/lib_pypy/_sqlite3_build.py
+%%PYPY_DIR%%/lib_pypy/_ssl/__init__.py
+%%PYPY_DIR%%/lib_pypy/_ssl_build.py
+%%PYPY_DIR%%/lib_pypy/_structseq.py
+%%PYPY_DIR%%/lib_pypy/_sysconfigdata.py
+%%PYPY_DIR%%/lib_pypy/_syslog_build.py
+%%PYPY_DIR%%/lib_pypy/_syslog_cffi.%%PYPY_CFFI_VER%%.so
+%%PYPY_DIR%%/lib_pypy/_testcapi.py
+%%PYPY_DIR%%/lib_pypy/_testcapimodule.c
+%%PYPY_DIR%%/lib_pypy/_testmultiphase.c
+%%PYPY_DIR%%/lib_pypy/_testmultiphase.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/__init__.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/app.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/license.terms
+%%PYPY_DIR%%/lib_pypy/_tkinter/tclobj.py
+%%PYPY_DIR%%/lib_pypy/_tkinter/tklib_build.py
+%%PYPY_DIR%%/lib_pypy/_winapi.py
+%%PYPY_DIR%%/lib_pypy/audioop.py
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/PKG-INFO
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/SOURCES.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/dependency_links.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/entry_points.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/not-zip-safe
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/requires.txt
+%%PYPY_DIR%%/lib_pypy/cffi.egg-info/top_level.txt
+%%PYPY_DIR%%/lib_pypy/cffi/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_cffi_errors.h
+%%PYPY_DIR%%/lib_pypy/cffi/_cffi_include.h
+%%PYPY_DIR%%/lib_pypy/cffi/_embedding.h
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/README
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_ast_gen.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_build_tables.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/_c_ast.cfg
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ast_transforms.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_ast.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_generator.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_lexer.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/c_parser.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/lextab.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/LICENSE
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/cpp.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/ctokens.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/lex.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/yacc.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/ygen.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/plyparser.py
+%%PYPY_DIR%%/lib_pypy/cffi/_pycparser/yacctab.py
+%%PYPY_DIR%%/lib_pypy/cffi/api.py
+%%PYPY_DIR%%/lib_pypy/cffi/backend_ctypes.py
+%%PYPY_DIR%%/lib_pypy/cffi/cffi_opcode.py
+%%PYPY_DIR%%/lib_pypy/cffi/commontypes.py
+%%PYPY_DIR%%/lib_pypy/cffi/cparser.py
+%%PYPY_DIR%%/lib_pypy/cffi/error.py
+%%PYPY_DIR%%/lib_pypy/cffi/ffiplatform.py
+%%PYPY_DIR%%/lib_pypy/cffi/gc_weakref.py
+%%PYPY_DIR%%/lib_pypy/cffi/lock.py
+%%PYPY_DIR%%/lib_pypy/cffi/model.py
+%%PYPY_DIR%%/lib_pypy/cffi/parse_c_type.h
+%%PYPY_DIR%%/lib_pypy/cffi/pkgconfig.py
+%%PYPY_DIR%%/lib_pypy/cffi/recompiler.py
+%%PYPY_DIR%%/lib_pypy/cffi/setuptools_ext.py
+%%PYPY_DIR%%/lib_pypy/cffi/testing/__init__.py
+%%PYPY_DIR%%/lib_pypy/cffi/testing/udir.py
+%%PYPY_DIR%%/lib_pypy/cffi/vengine_cpy.py
+%%PYPY_DIR%%/lib_pypy/cffi/vengine_gen.py
+%%PYPY_DIR%%/lib_pypy/cffi/verifier.py
+%%PYPY_DIR%%/lib_pypy/ctypes_config_cache/.empty
+%%PYPY_DIR%%/lib_pypy/ctypes_support.py
+%%PYPY_DIR%%/lib_pypy/faulthandler.py
+%%PYPY_DIR%%/lib_pypy/future_builtins.py
+%%PYPY_DIR%%/lib_pypy/greenlet.egg-info
+%%PYPY_DIR%%/lib_pypy/greenlet.py
+%%PYPY_DIR%%/lib_pypy/grp.py
+%%PYPY_DIR%%/lib_pypy/identity_dict.py
+%%PYPY_DIR%%/lib_pypy/marshal.py
+%%PYPY_DIR%%/lib_pypy/msvcrt.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/__init__.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/_minimal_curses.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/cmdrepl.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/commands.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/completer.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/completing_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/copy_code.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/curses.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/fancy_termios.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/historical_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/input.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/keymap.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/keymaps.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/module_lister.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/pygame_console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/pygame_keymap.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/python_reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/reader.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/readline.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/simple_interact.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/trace.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unicodedata_.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unix_console.py
+%%PYPY_DIR%%/lib_pypy/pyrepl/unix_eventqueue.py
+%%PYPY_DIR%%/lib_pypy/readline.egg-info
+%%PYPY_DIR%%/lib_pypy/readline.py
+%%PYPY_DIR%%/lib_pypy/resource.py
+%%PYPY_DIR%%/lib_pypy/stackless.py
+%%PYPY_DIR%%/lib_pypy/syslog.py
+%%PYPY_DIR%%/lib_pypy/testcapi_long.h
+%%PYPY_DIR%%/lib_pypy/tputil.py
+%%PYPY_DIR%%/site-packages/README
+@dir %%PYPY_DIR%%/lib-python/3/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/collections/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/ctypes/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/curses/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/distutils/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/distutils/command/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/email/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/encodings/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/ensurepip/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/html/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/http/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/importlib/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/json/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/logging/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/urllib/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/xml/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/xml/etree/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/xml/parsers/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/xml/sax/__pycache__
+@dir %%PYPY_DIR%%/lib-python/3/xmlrpc/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_blake2/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_cffi_ssl/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_cffi_ssl/_cffi_src/openssl/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_cffi_ssl/_stdssl/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_ctypes/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_hashlib/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_sha3/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/_ssl/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/cffi/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/cffi/_pycparser/__pycache__
+@dir %%PYPY_DIR%%/lib_pypy/cffi/_pycparser/ply/__pycache__
diff --git a/lang/spidermonkey185/Makefile b/lang/spidermonkey185/Makefile
new file mode 100644
index 000000000000..263096f3e96d
--- /dev/null
+++ b/lang/spidermonkey185/Makefile
@@ -0,0 +1,127 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= spidermonkey185
+PORTVERSION= 1.8.5
+PORTREVISION= 5
+CATEGORIES= lang
+MASTER_SITES= MOZILLA/js
+DISTNAME= js185-1.0.0
+
+MAINTAINER= koobs@FreeBSD.org
+COMMENT= Standalone JavaScript (1.8.5) interpreter from Mozilla
+
+BUILD_DEPENDS= zip:archivers/zip \
+ autoconf-2.13:devel/autoconf213
+LIB_DEPENDS= libnspr4.so:devel/nspr
+
+USES= gmake pathfix perl5 pkgconfig python:2.7,build
+GNU_CONFIGURE= yes
+USE_LDCONFIG= yes
+USE_PERL5= build
+
+WRKSRC= ${WRKDIR}/js-${PORTVERSION}/js/src
+
+BROKEN_aarch64= Does not compile: error: cacheFlush support is missing on this platform
+BROKEN_mips64= Does not compile: error: const union jsval_layout has no member named word
+BROKEN_sparc64= Does not build: fails to link
+
+NOT_FOR_ARCHS= powerpc powerpc64
+NOT_FOR_ARCHS_REASON= PowerPC is not supported
+
+CONFIGURE_ARGS= --with-pthreads \
+ --with-system-nspr
+
+# This comes from bsd.gecko.mk, fixes linking issues on 9.0 and higher.
+post-configure:
+ ${ECHO_CMD} "fenv.h" >> ${WRKSRC}/config/system-headers
+ ${ECHO_CMD} "pthread_np.h" >> ${WRKSRC}/config/system-headers
+
+OPTIONS_DEFINE= DEBUG GCZEAL JEMALLOC METHODJIT OPTIMIZE READLINE \
+ THREADSAFE TRACEJIT UTF8 \
+
+OPTIONS_DEFAULT= METHODJIT OPTIMIZE READLINE THREADSAFE TRACEJIT
+
+GCZEAL_DESC= Enable Zealous garbage collecting
+JEMALLOC_DESC= Use jemalloc as memory allocator
+METHODJIT_DESC= Enable method JIT support
+OPTIMIZE_DESC= Enable compiler optimizations
+READLINE_DESC= Link js shell to system readline library
+THREADSAFE_DESC= Enable multiple thread support
+TRACEJIT_DESC= Enable tracing JIT support
+UTF8_DESC= Treat strings as UTF8 instead of ISO-8859-1
+
+DEBUG_CONFIGURE_ENABLE= debug
+DEBUG_CONFIGURE_ON= --enable-debug-sumbols
+GCZEAL_CONFIGURE_ENABLE= gczeal
+JEMALLOC_CONFIGURE_ENABLE= jemalloc
+METHODJIT_CONFIGURE_ENABLE= methodjit
+OPTIMIZE_CONFIGURE_ENABLE= optimize
+READLINE_CONFIGURE_ENABLE= readline
+READLINE_USES= readline
+THREADSAFE_CONFIGURE_ENABLE= threadsafe
+TRACEJIT_CONFIGURE_ENABLE= tracejit
+UTF8_CFLAGS= -DJS_C_STRINGS_ARE_UTF8
+
+.include <bsd.port.options.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET= x86_64-portbld-freebsd${OSREL}
+.endif
+
+.if ${ARCH} == "amd64"
+PLIST_SUB+= AMD64=""
+.else
+PLIST_SUB+= AMD64="@comment "
+.endif
+
+.if ${ARCH} == "i386"
+PLIST_SUB+= I386=""
+.else
+PLIST_SUB+= I386="@comment "
+.endif
+
+.if ${ARCH} == "arm"
+PLIST_SUB+= ARM=""
+.else
+PLIST_SUB+= ARM="@comment "
+.endif
+
+.if ${ARCH} == "mips"
+PLIST_SUB+= MIPS=""
+.else
+PLIST_SUB+= MIPS="@comment "
+.endif
+
+.if ${ARCH} == "powerpc" || ${ARCH} == "powerpc64"
+PLIST_SUB+= PPC=""
+.else
+PLIST_SUB+= PPC="@comment "
+.endif
+
+.if ${ARCH} == "sparc64"
+PLIST_SUB+= SPARC=""
+.else
+PLIST_SUB+= SPARC="@comment "
+.endif
+
+pre-configure:
+ (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13)
+
+do-test:
+ @${ECHO_MSG} -n "===> Running jstests.py: "
+ @cd ${WRKSRC} && ${SETENV} TZ=PST8PDT ${PYTHON_CMD} tests/jstests.py \
+ --no-progress --worker-count=${MAKE_JOBS_NUMBER} ./js
+.if ${PORT_OPTIONS:MMETHODJIT} || ${PORT_OPTIONS:MTRACEJIT}
+ @${ECHO_MSG} -n "===> Running jit_test.py: "
+ @cd ${WRKSRC} && ${SETENV} TZ=PST8PDT ${PYTHON_CMD} jit-test/jit_test.py \
+ --no-progress --jitflags=,m,j,mj,mjp,am,amj,amjp,amd ./js
+.endif
+
+post-install:
+ ${LN} -sf libmozjs185.so.1.0.0 ${STAGEDIR}${PREFIX}/lib/libmozjs185.so
+ ${LN} -sf libmozjs185.so.1.0.0 ${STAGEDIR}${PREFIX}/lib/libmozjs185.so.1
+ ${LN} -sf libmozjs185.so.1.0.0 ${STAGEDIR}${PREFIX}/lib/libmozjs185.so.1.0
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libmozjs185.so.1.0.0
+
+.include <bsd.port.mk>
diff --git a/lang/spidermonkey185/distinfo b/lang/spidermonkey185/distinfo
new file mode 100644
index 000000000000..ac820e9f43a3
--- /dev/null
+++ b/lang/spidermonkey185/distinfo
@@ -0,0 +1,2 @@
+SHA256 (js185-1.0.0.tar.gz) = 5d12f7e1f5b4a99436685d97b9b7b75f094d33580227aa998c406bbae6f2a687
+SIZE (js185-1.0.0.tar.gz) = 6164605
diff --git a/lang/spidermonkey185/files/patch-assembler_jit_ExecutableAllocator.h b/lang/spidermonkey185/files/patch-assembler_jit_ExecutableAllocator.h
new file mode 100644
index 000000000000..94770e435051
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-assembler_jit_ExecutableAllocator.h
@@ -0,0 +1,14 @@
+--- assembler/jit/ExecutableAllocator.h.orig 2016-09-07 UTC
++++ assembler/jit/ExecutableAllocator.h
+@@ -391,6 +391,11 @@ public:
+ {
+ CacheRangeFlush(code, size, CACHE_SYNC_ALL);
+ }
++#elif WTF_CPU_ARM_TRADITIONAL && WTF_PLATFORM_FREEBSD
++ static void cacheFlush(void* code, size_t size)
++ {
++ __clear_cache(code, reinterpret_cast<char*>(code) + size);
++ }
+ #else
+ #error "The cacheFlush support is missing on this platform."
+ #endif
diff --git a/lang/spidermonkey185/files/patch-assembler_wtf_Platform.h b/lang/spidermonkey185/files/patch-assembler_wtf_Platform.h
new file mode 100644
index 000000000000..9556c0f7e638
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-assembler_wtf_Platform.h
@@ -0,0 +1,18 @@
+--- ./assembler/wtf/Platform.h.orig 2016-09-07 UTC
++++ ./assembler/wtf/Platform.h
+@@ -213,6 +213,7 @@
+ #elif defined(__ARM_ARCH_6__) \
+ || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) \
++ || defined(__ARM_ARCH_6KZ__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6T2__) \
+@@ -243,6 +244,7 @@
+
+ #elif defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) \
++ || defined(__ARM_ARCH_6KZ__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6M__)
diff --git a/lang/spidermonkey185/files/patch-bug771281 b/lang/spidermonkey185/files/patch-bug771281
new file mode 100644
index 000000000000..1b59e5dfeafb
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-bug771281
@@ -0,0 +1,1839 @@
+diff -ruN src/shell/Makefile.in src.new/shell/Makefile.in
+--- shell/Makefile.in 2011-04-01 06:08:36.000000000 +1100
++++ shell/Makefile.in 2013-03-23 22:01:26.876752286 +1100
+@@ -47,7 +47,6 @@
+ PROGRAM = js$(BIN_SUFFIX)
+ CPPSRCS = \
+ js.cpp \
+- jsworkers.cpp \
+ $(NULL)
+
+ DEFINES += -DEXPORT_JS_API
+diff -ruN src/shell/js.cpp src.new/shell/js.cpp
+--- shell/js.cpp 2011-04-01 06:08:36.000000000 +1100
++++ shell/js.cpp 2013-03-23 22:02:46.436700725 +1100
+@@ -91,8 +91,6 @@
+ #endif /* JSDEBUGGER_C_UI */
+ #endif /* JSDEBUGGER */
+
+-#include "jsworkers.h"
+-
+ #include "jsinterpinlines.h"
+ #include "jsobjinlines.h"
+ #include "jsscriptinlines.h"
+@@ -194,10 +192,6 @@
+ JSBool gQuitting = JS_FALSE;
+ FILE *gErrFile = NULL;
+ FILE *gOutFile = NULL;
+-#ifdef JS_THREADSAFE
+-JSObject *gWorkers = NULL;
+-js::workers::ThreadPool *gWorkerThreadPool = NULL;
+-#endif
+
+ static JSBool reportWarnings = JS_TRUE;
+ static JSBool compileOnly = JS_FALSE;
+@@ -1315,10 +1309,6 @@
+ JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "/ i", &gExitCode);
+
+ gQuitting = JS_TRUE;
+-#ifdef JS_THREADSAFE
+- if (gWorkerThreadPool)
+- js::workers::terminateAll(JS_GetRuntime(cx), gWorkerThreadPool);
+-#endif
+ return JS_FALSE;
+ }
+
+@@ -4150,10 +4140,6 @@
+ gCanceled = true;
+ if (gExitCode == 0)
+ gExitCode = EXITCODE_TIMEOUT;
+-#ifdef JS_THREADSAFE
+- if (gWorkerThreadPool)
+- js::workers::terminateAll(rt, gWorkerThreadPool);
+-#endif
+ JS_TriggerAllOperationCallbacks(rt);
+
+ static const char msg[] = "Script runs for too long, terminating.\n";
+@@ -5681,29 +5667,8 @@
+ #endif /* JSDEBUGGER_C_UI */
+ #endif /* JSDEBUGGER */
+
+-#ifdef JS_THREADSAFE
+- class ShellWorkerHooks : public js::workers::WorkerHooks {
+- public:
+- JSObject *newGlobalObject(JSContext *cx) {
+- return NewGlobalObject(cx, NEW_COMPARTMENT);
+- }
+- };
+- ShellWorkerHooks hooks;
+- if (!JS_AddNamedObjectRoot(cx, &gWorkers, "Workers") ||
+- (gWorkerThreadPool = js::workers::init(cx, &hooks, glob, &gWorkers)) == NULL) {
+- return 1;
+- }
+-#endif
+-
+ int result = ProcessArgs(cx, glob, argv, argc);
+
+-#ifdef JS_THREADSAFE
+- js::workers::finish(cx, gWorkerThreadPool);
+- JS_RemoveObjectRoot(cx, &gWorkers);
+- if (result == 0)
+- result = gExitCode;
+-#endif
+-
+ #ifdef JSDEBUGGER
+ if (jsdc) {
+ #ifdef JSDEBUGGER_C_UI
+diff -ruN src/shell/jsworkers.cpp src.new/shell/jsworkers.cpp
+--- shell/jsworkers.cpp 2011-04-01 06:08:36.000000000 +1100
++++ shell/jsworkers.cpp 1970-01-01 10:00:00.000000000 +1000
+@@ -1,1280 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- * vim: set ts=8 sw=4 et tw=99:
+- *
+- * ***** BEGIN LICENSE BLOCK *****
+- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+- *
+- * The contents of this file are subject to the Mozilla Public License Version
+- * 1.1 (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- * http://www.mozilla.org/MPL/
+- *
+- * Software distributed under the License is distributed on an "AS IS" basis,
+- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+- * for the specific language governing rights and limitations under the
+- * License.
+- *
+- * The Original Code is JavaScript shell workers.
+- *
+- * The Initial Developer of the Original Code is
+- * Mozilla Corporation.
+- * Portions created by the Initial Developer are Copyright (C) 2010
+- * the Initial Developer. All Rights Reserved.
+- *
+- * Contributor(s):
+- * Jason Orendorff <jorendorff@mozilla.com>
+- *
+- * Alternatively, the contents of this file may be used under the terms of
+- * either of the GNU General Public License Version 2 or later (the "GPL"),
+- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+- * in which case the provisions of the GPL or the LGPL are applicable instead
+- * of those above. If you wish to allow use of your version of this file only
+- * under the terms of either the GPL or the LGPL, and not to allow others to
+- * use your version of this file under the terms of the MPL, indicate your
+- * decision by deleting the provisions above and replace them with the notice
+- * and other provisions required by the GPL or the LGPL. If you do not delete
+- * the provisions above, a recipient may use your version of this file under
+- * the terms of any one of the MPL, the GPL or the LGPL.
+- *
+- * ***** END LICENSE BLOCK ***** */
+-
+-#ifdef JS_THREADSAFE
+-
+-#include <algorithm>
+-#include <string.h>
+-#include "prthread.h"
+-#include "prlock.h"
+-#include "prcvar.h"
+-#include "jsapi.h"
+-#include "jscntxt.h"
+-#include "jshashtable.h"
+-#include "jsstdint.h"
+-#include "jslock.h"
+-#include "jsvector.h"
+-#include "jsworkers.h"
+-
+-extern size_t gMaxStackSize;
+-
+-/*
+- * JavaScript shell workers.
+- *
+- * == Object lifetime rules ==
+- *
+- * - The ThreadPool lasts from init() to finish().
+- *
+- * - The ThreadPool owns the MainQueue and the WorkerQueue. Those live from
+- * the time the first Worker is created until finish().
+- *
+- * - Each JS Worker object has the same lifetime as the corresponding C++
+- * Worker object. A Worker is live if (a) the Worker JSObject is still
+- * live; (b) the Worker has an incoming event pending or running; (c) it
+- * has sent an outgoing event to its parent that is still pending; or (d)
+- * it has any live child Workers.
+- *
+- * - finish() continues to wait for events until all threads are idle.
+- *
+- * Event objects, however, are basically C++-only. The JS Event objects are
+- * just plain old JSObjects. They don't keep anything alive.
+- *
+- * == Locking scheme ==
+- *
+- * When mixing mutexes and the JSAPI request model, there are two choices:
+- *
+- * - Always nest the mutexes in requests. Since threads in requests are not
+- * supposed to block, this means the mutexes must be only briefly held.
+- *
+- * - Never nest the mutexes in requests. Since this allows threads to race
+- * with the GC, trace() methods must go through the mutexes just like
+- * everyone else.
+- *
+- * This code uses the latter approach for all locks.
+- *
+- * In one case, a thread holding a Worker's mutex can acquire the mutex of one
+- * of its child Workers. See Worker::terminateSelf. (This can't deadlock because
+- * the parent-child relationship is a partial order.)
+- */
+-
+-namespace js {
+-namespace workers {
+-
+-template <class T, class AllocPolicy>
+-class Queue {
+- private:
+- typedef Vector<T, 4, AllocPolicy> Vec;
+- Vec v1;
+- Vec v2;
+- Vec *front;
+- Vec *back;
+-
+- // Queue is not copyable.
+- Queue(const Queue &);
+- Queue & operator=(const Queue &);
+-
+- public:
+- Queue() : front(&v1), back(&v2) {}
+- bool push(T t) { return back->append(t); }
+- bool empty() { return front->empty() && back->empty(); }
+-
+- T pop() {
+- if (front->empty()) {
+- std::reverse(back->begin(), back->end());
+- Vec *tmp = front;
+- front = back;
+- back = tmp;
+- }
+- T item = front->back();
+- front->popBack();
+- return item;
+- }
+-
+- void clear() {
+- v1.clear();
+- v2.clear();
+- }
+-
+- void trace(JSTracer *trc) {
+- for (T *p = v1.begin(); p != v1.end(); p++)
+- (*p)->trace(trc);
+- for (T *p = v2.begin(); p != v2.end(); p++)
+- (*p)->trace(trc);
+- }
+-};
+-
+-class Event;
+-class ThreadPool;
+-class Worker;
+-
+-class WorkerParent {
+- protected:
+- typedef HashSet<Worker *, DefaultHasher<Worker *>, SystemAllocPolicy> ChildSet;
+- ChildSet children;
+-
+- bool initWorkerParent() { return children.init(8); }
+-
+- public:
+- virtual JSLock *getLock() = 0;
+- virtual ThreadPool *getThreadPool() = 0;
+- virtual bool post(Event *item) = 0; // false on OOM or queue closed
+- virtual void trace(JSTracer *trc) = 0;
+-
+- bool addChild(Worker *w) {
+- AutoLock hold(getLock());
+- return children.put(w) != NULL;
+- }
+-
+- // This must be called only from GC or when all threads are shut down. It
+- // does not bother with locking.
+- void removeChild(Worker *w) {
+- ChildSet::Ptr p = children.lookup(w);
+- JS_ASSERT(p);
+- children.remove(p);
+- }
+-
+- void disposeChildren();
+-};
+-
+-template <class T>
+-class ThreadSafeQueue
+-{
+- protected:
+- Queue<T, SystemAllocPolicy> queue;
+- JSLock *lock;
+- PRCondVar *condvar;
+- bool closed;
+-
+- private:
+- Vector<T, 8, SystemAllocPolicy> busy;
+-
+- protected:
+- ThreadSafeQueue() : lock(NULL), condvar(NULL), closed(false) {}
+-
+- ~ThreadSafeQueue() {
+- if (condvar)
+- JS_DESTROY_CONDVAR(condvar);
+- if (lock)
+- JS_DESTROY_LOCK(lock);
+- }
+-
+- // Called by take() with the lock held.
+- virtual bool shouldStop() { return closed; }
+-
+- public:
+- bool initThreadSafeQueue() {
+- JS_ASSERT(!lock);
+- JS_ASSERT(!condvar);
+- return (lock = JS_NEW_LOCK()) && (condvar = JS_NEW_CONDVAR(lock));
+- }
+-
+- bool post(T t) {
+- AutoLock hold(lock);
+- if (closed)
+- return false;
+- if (queue.empty())
+- JS_NOTIFY_ALL_CONDVAR(condvar);
+- return queue.push(t);
+- }
+-
+- void close() {
+- AutoLock hold(lock);
+- closed = true;
+- queue.clear();
+- JS_NOTIFY_ALL_CONDVAR(condvar);
+- }
+-
+- // The caller must hold the lock.
+- bool take(T *t) {
+- while (queue.empty()) {
+- if (shouldStop())
+- return false;
+- JS_WAIT_CONDVAR(condvar, JS_NO_TIMEOUT);
+- }
+- *t = queue.pop();
+- busy.append(*t);
+- return true;
+- }
+-
+- // The caller must hold the lock.
+- void drop(T item) {
+- for (T *p = busy.begin(); p != busy.end(); p++) {
+- if (*p == item) {
+- *p = busy.back();
+- busy.popBack();
+- return;
+- }
+- }
+- JS_NOT_REACHED("removeBusy");
+- }
+-
+- bool lockedIsIdle() { return busy.empty() && queue.empty(); }
+-
+- bool isIdle() {
+- AutoLock hold(lock);
+- return lockedIsIdle();
+- }
+-
+- void wake() {
+- AutoLock hold(lock);
+- JS_NOTIFY_ALL_CONDVAR(condvar);
+- }
+-
+- void trace(JSTracer *trc) {
+- AutoLock hold(lock);
+- for (T *p = busy.begin(); p != busy.end(); p++)
+- (*p)->trace(trc);
+- queue.trace(trc);
+- }
+-};
+-
+-class MainQueue;
+-
+-class Event
+-{
+- protected:
+- virtual ~Event() { JS_ASSERT(!data); }
+-
+- WorkerParent *recipient;
+- Worker *child;
+- uint64 *data;
+- size_t nbytes;
+-
+- public:
+- enum Result { fail = JS_FALSE, ok = JS_TRUE, forwardToParent };
+-
+- virtual void destroy(JSContext *cx) {
+- JS_free(cx, data);
+-#ifdef DEBUG
+- data = NULL;
+-#endif
+- delete this;
+- }
+-
+- void setChildAndRecipient(Worker *aChild, WorkerParent *aRecipient) {
+- child = aChild;
+- recipient = aRecipient;
+- }
+-
+- bool deserializeData(JSContext *cx, jsval *vp) {
+- return !!JS_ReadStructuredClone(cx, data, nbytes, JS_STRUCTURED_CLONE_VERSION, vp,
+- NULL, NULL);
+- }
+-
+- virtual Result process(JSContext *cx) = 0;
+-
+- inline void trace(JSTracer *trc);
+-
+- template <class EventType>
+- static EventType *createEvent(JSContext *cx, WorkerParent *recipient, Worker *child,
+- jsval v)
+- {
+- uint64 *data;
+- size_t nbytes;
+- if (!JS_WriteStructuredClone(cx, v, &data, &nbytes, NULL, NULL))
+- return NULL;
+-
+- EventType *event = new EventType;
+- if (!event) {
+- JS_ReportOutOfMemory(cx);
+- return NULL;
+- }
+- event->recipient = recipient;
+- event->child = child;
+- event->data = data;
+- event->nbytes = nbytes;
+- return event;
+- }
+-
+- Result dispatch(JSContext *cx, JSObject *thisobj, const char *dataPropName,
+- const char *methodName, Result noHandler)
+- {
+- if (!data)
+- return fail;
+-
+- JSBool found;
+- if (!JS_HasProperty(cx, thisobj, methodName, &found))
+- return fail;
+- if (!found)
+- return noHandler;
+-
+- // Create event object.
+- jsval v;
+- if (!deserializeData(cx, &v))
+- return fail;
+- JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
+- if (!obj || !JS_DefineProperty(cx, obj, dataPropName, v, NULL, NULL, 0))
+- return fail;
+-
+- // Call event handler.
+- jsval argv[1] = { OBJECT_TO_JSVAL(obj) };
+- jsval rval = JSVAL_VOID;
+- return Result(JS_CallFunctionName(cx, thisobj, methodName, 1, argv, &rval));
+- }
+-};
+-
+-typedef ThreadSafeQueue<Event *> EventQueue;
+-
+-class MainQueue : public EventQueue, public WorkerParent
+-{
+- private:
+- ThreadPool *threadPool;
+-
+- public:
+- explicit MainQueue(ThreadPool *tp) : threadPool(tp) {}
+-
+- ~MainQueue() {
+- JS_ASSERT(queue.empty());
+- }
+-
+- bool init() { return initThreadSafeQueue() && initWorkerParent(); }
+-
+- void destroy(JSContext *cx) {
+- while (!queue.empty())
+- queue.pop()->destroy(cx);
+- delete this;
+- }
+-
+- virtual JSLock *getLock() { return lock; }
+- virtual ThreadPool *getThreadPool() { return threadPool; }
+-
+- protected:
+- virtual bool shouldStop();
+-
+- public:
+- virtual bool post(Event *event) { return EventQueue::post(event); }
+-
+- virtual void trace(JSTracer *trc);
+-
+- void traceChildren(JSTracer *trc) { EventQueue::trace(trc); }
+-
+- JSBool mainThreadWork(JSContext *cx, bool continueOnError) {
+- JSAutoSuspendRequest suspend(cx);
+- AutoLock hold(lock);
+-
+- Event *event;
+- while (take(&event)) {
+- JS_RELEASE_LOCK(lock);
+- Event::Result result;
+- {
+- JSAutoRequest req(cx);
+- result = event->process(cx);
+- if (result == Event::forwardToParent) {
+- // FIXME - pointlessly truncates the string to 8 bits
+- jsval data;
+- JSAutoByteString bytes;
+- if (event->deserializeData(cx, &data) &&
+- JSVAL_IS_STRING(data) &&
+- bytes.encode(cx, JSVAL_TO_STRING(data))) {
+- JS_ReportError(cx, "%s", bytes.ptr());
+- } else {
+- JS_ReportOutOfMemory(cx);
+- }
+- result = Event::fail;
+- }
+- if (result == Event::fail && continueOnError) {
+- if (JS_IsExceptionPending(cx) && !JS_ReportPendingException(cx))
+- JS_ClearPendingException(cx);
+- result = Event::ok;
+- }
+- }
+- JS_ACQUIRE_LOCK(lock);
+- drop(event);
+- event->destroy(cx);
+- if (result != Event::ok)
+- return false;
+- }
+- return true;
+- }
+-};
+-
+-/*
+- * A queue of workers.
+- *
+- * We keep a queue of workers with pending events, rather than a queue of
+- * events, so that two threads won't try to run a Worker at the same time.
+- */
+-class WorkerQueue : public ThreadSafeQueue<Worker *>
+-{
+- private:
+- MainQueue *main;
+-
+- public:
+- explicit WorkerQueue(MainQueue *main) : main(main) {}
+-
+- void work();
+-};
+-
+-/* The top-level object that owns everything else. */
+-class ThreadPool
+-{
+- private:
+- enum { threadCount = 6 };
+-
+- JSObject *obj;
+- WorkerHooks *hooks;
+- MainQueue *mq;
+- WorkerQueue *wq;
+- PRThread *threads[threadCount];
+- int32_t terminating;
+-
+- static JSClass jsClass;
+-
+- static void start(void* arg) {
+- ((WorkerQueue *) arg)->work();
+- }
+-
+- explicit ThreadPool(WorkerHooks *hooks) : hooks(hooks), mq(NULL), wq(NULL), terminating(0) {
+- for (int i = 0; i < threadCount; i++)
+- threads[i] = NULL;
+- }
+-
+- public:
+- ~ThreadPool() {
+- JS_ASSERT(!mq);
+- JS_ASSERT(!wq);
+- JS_ASSERT(!threads[0]);
+- }
+-
+- static ThreadPool *create(JSContext *cx, WorkerHooks *hooks) {
+- ThreadPool *tp = new ThreadPool(hooks);
+- if (!tp) {
+- JS_ReportOutOfMemory(cx);
+- return NULL;
+- }
+-
+- JSObject *obj = JS_NewObject(cx, &jsClass, NULL, NULL);
+- if (!obj || !JS_SetPrivate(cx, obj, tp)) {
+- delete tp;
+- return NULL;
+- }
+- tp->obj = obj;
+- return tp;
+- }
+-
+- JSObject *asObject() { return obj; }
+- WorkerHooks *getHooks() { return hooks; }
+- WorkerQueue *getWorkerQueue() { return wq; }
+- MainQueue *getMainQueue() { return mq; }
+- bool isTerminating() { return terminating != 0; }
+-
+- /*
+- * Main thread only. Requires request (to prevent GC, which could see the
+- * object in an inconsistent state).
+- */
+- bool start(JSContext *cx) {
+- JS_ASSERT(!mq && !wq);
+- mq = new MainQueue(this);
+- if (!mq || !mq->init()) {
+- mq->destroy(cx);
+- mq = NULL;
+- return false;
+- }
+- wq = new WorkerQueue(mq);
+- if (!wq || !wq->initThreadSafeQueue()) {
+- delete wq;
+- wq = NULL;
+- mq->destroy(cx);
+- mq = NULL;
+- return false;
+- }
+- JSAutoSuspendRequest suspend(cx);
+- bool ok = true;
+- for (int i = 0; i < threadCount; i++) {
+- threads[i] = PR_CreateThread(PR_USER_THREAD, start, wq, PR_PRIORITY_NORMAL,
+- PR_LOCAL_THREAD, PR_JOINABLE_THREAD, 0);
+- if (!threads[i]) {
+- shutdown(cx);
+- ok = false;
+- break;
+- }
+- }
+- return ok;
+- }
+-
+- void terminateAll(JSRuntime *rt) {
+- // See comment about JS_ATOMIC_SET in the implementation of
+- // JS_TriggerOperationCallback.
+- JS_ATOMIC_SET(&terminating, 1);
+- JS_TriggerAllOperationCallbacks(rt);
+- }
+-
+- /* This context is used only to free memory. */
+- void shutdown(JSContext *cx) {
+- wq->close();
+- for (int i = 0; i < threadCount; i++) {
+- if (threads[i]) {
+- PR_JoinThread(threads[i]);
+- threads[i] = NULL;
+- }
+- }
+-
+- delete wq;
+- wq = NULL;
+-
+- mq->disposeChildren();
+- mq->destroy(cx);
+- mq = NULL;
+- terminating = 0;
+- }
+-
+- private:
+- static void jsTraceThreadPool(JSTracer *trc, JSObject *obj) {
+- ThreadPool *tp = unwrap(trc->context, obj);
+- if (tp->mq) {
+- tp->mq->traceChildren(trc);
+- tp->wq->trace(trc);
+- }
+- }
+-
+-
+- static void jsFinalize(JSContext *cx, JSObject *obj) {
+- if (ThreadPool *tp = unwrap(cx, obj))
+- delete tp;
+- }
+-
+- public:
+- static ThreadPool *unwrap(JSContext *cx, JSObject *obj) {
+- JS_ASSERT(JS_GET_CLASS(cx, obj) == &jsClass);
+- return (ThreadPool *) JS_GetPrivate(cx, obj);
+- }
+-};
+-
+-/*
+- * A Worker is always in one of 4 states, except when it is being initialized
+- * or destroyed, or its lock is held:
+- * - idle (!terminated && current == NULL && events.empty())
+- * - enqueued (!terminated && current == NULL && !events.empty())
+- * - busy (!terminated && current != NULL)
+- * - terminated (terminated && current == NULL && events.empty())
+- *
+- * Separately, there is a terminateFlag that other threads can set
+- * asynchronously to tell the Worker to terminate.
+- */
+-class Worker : public WorkerParent
+-{
+- private:
+- ThreadPool *threadPool;
+- WorkerParent *parent;
+- JSObject *object; // Worker object exposed to parent
+- JSContext *context;
+- JSLock *lock;
+- Queue<Event *, SystemAllocPolicy> events; // owning pointers to pending events
+- Event *current;
+- bool terminated;
+- int32_t terminateFlag;
+-
+- static JSClass jsWorkerClass;
+-
+- Worker()
+- : threadPool(NULL), parent(NULL), object(NULL),
+- context(NULL), lock(NULL), current(NULL), terminated(false), terminateFlag(0) {}
+-
+- bool init(JSContext *parentcx, WorkerParent *parent, JSObject *obj) {
+- JS_ASSERT(!threadPool && !this->parent && !object && !lock);
+-
+- if (!initWorkerParent() || !parent->addChild(this))
+- return false;
+- threadPool = parent->getThreadPool();
+- this->parent = parent;
+- this->object = obj;
+- lock = JS_NEW_LOCK();
+- return lock &&
+- createContext(parentcx, parent) &&
+- JS_SetPrivate(parentcx, obj, this);
+- }
+-
+- bool createContext(JSContext *parentcx, WorkerParent *parent) {
+- JSRuntime *rt = JS_GetRuntime(parentcx);
+- context = JS_NewContext(rt, 8192);
+- if (!context)
+- return false;
+-
+- // The Worker has a strong reference to the global; see jsTraceWorker.
+- // JSOPTION_UNROOTED_GLOBAL ensures that when the worker becomes
+- // unreachable, it and its global object can be collected. Otherwise
+- // the cx->globalObject root would keep them both alive forever.
+- JS_SetOptions(context, JS_GetOptions(parentcx) | JSOPTION_UNROOTED_GLOBAL |
+- JSOPTION_DONT_REPORT_UNCAUGHT);
+- JS_SetVersion(context, JS_GetVersion(parentcx));
+- JS_SetContextPrivate(context, this);
+- JS_SetOperationCallback(context, jsOperationCallback);
+- JS_BeginRequest(context);
+-
+- JSObject *global = threadPool->getHooks()->newGlobalObject(context);
+- JSObject *post, *proto, *ctor;
+- if (!global)
+- goto bad;
+- JS_SetGlobalObject(context, global);
+-
+- // Because the Worker is completely isolated from the rest of the
+- // runtime, and because any pending events on a Worker keep the Worker
+- // alive, this postMessage function cannot be called after the Worker
+- // is collected. Therefore it's safe to stash a pointer (a weak
+- // reference) to the C++ Worker object in the reserved slot.
+- post = JS_GetFunctionObject(JS_DefineFunction(context, global, "postMessage",
+- (JSNative) jsPostMessageToParent, 1, 0));
+- if (!post || !JS_SetReservedSlot(context, post, 0, PRIVATE_TO_JSVAL(this)))
+- goto bad;
+-
+- proto = JS_InitClass(context, global, NULL, &jsWorkerClass, jsConstruct, 1,
+- NULL, jsMethods, NULL, NULL);
+- if (!proto)
+- goto bad;
+-
+- ctor = JS_GetConstructor(context, proto);
+- if (!ctor || !JS_SetReservedSlot(context, ctor, 0, PRIVATE_TO_JSVAL(this)))
+- goto bad;
+-
+- JS_EndRequest(context);
+- JS_ClearContextThread(context);
+- return true;
+-
+- bad:
+- JS_EndRequest(context);
+- JS_DestroyContext(context);
+- context = NULL;
+- return false;
+- }
+-
+- static void jsTraceWorker(JSTracer *trc, JSObject *obj) {
+- JS_ASSERT(JS_GET_CLASS(trc->context, obj) == &jsWorkerClass);
+- if (Worker *w = (Worker *) JS_GetPrivate(trc->context, obj)) {
+- w->parent->trace(trc);
+- w->events.trace(trc);
+- if (w->current)
+- w->current->trace(trc);
+- JS_CALL_OBJECT_TRACER(trc, JS_GetGlobalObject(w->context), "Worker global");
+- }
+- }
+-
+- static void jsFinalize(JSContext *cx, JSObject *obj) {
+- JS_ASSERT(JS_GET_CLASS(cx, obj) == &jsWorkerClass);
+- if (Worker *w = (Worker *) JS_GetPrivate(cx, obj))
+- delete w;
+- }
+-
+- static JSBool jsOperationCallback(JSContext *cx) {
+- Worker *w = (Worker *) JS_GetContextPrivate(cx);
+- JSAutoSuspendRequest suspend(cx); // avoid nesting w->lock in a request
+- return !w->checkTermination();
+- }
+-
+- static JSBool jsResolveGlobal(JSContext *cx, JSObject *obj, jsid id, uintN flags,
+- JSObject **objp)
+- {
+- JSBool resolved;
+-
+- if (!JS_ResolveStandardClass(cx, obj, id, &resolved))
+- return false;
+- if (resolved)
+- *objp = obj;
+-
+- return true;
+- }
+-
+- static JSBool jsPostMessageToParent(JSContext *cx, uintN argc, jsval *vp);
+- static JSBool jsPostMessageToChild(JSContext *cx, uintN argc, jsval *vp);
+- static JSBool jsTerminate(JSContext *cx, uintN argc, jsval *vp);
+-
+- bool checkTermination() {
+- AutoLock hold(lock);
+- return lockedCheckTermination();
+- }
+-
+- bool lockedCheckTermination() {
+- if (terminateFlag || threadPool->isTerminating()) {
+- terminateSelf();
+- terminateFlag = 0;
+- }
+- return terminated;
+- }
+-
+- // Caller must hold the lock.
+- void terminateSelf() {
+- terminated = true;
+- while (!events.empty())
+- events.pop()->destroy(context);
+-
+- // Tell the children to shut down too. An arbitrarily silly amount of
+- // processing could happen before the whole tree is terminated; but
+- // this way we don't have to worry about blowing the C stack.
+- for (ChildSet::Enum e(children); !e.empty(); e.popFront())
+- e.front()->setTerminateFlag(); // note: nesting locks here
+- }
+-
+- public:
+- ~Worker() {
+- if (parent)
+- parent->removeChild(this);
+- dispose();
+- }
+-
+- void dispose() {
+- JS_ASSERT(!current);
+- while (!events.empty())
+- events.pop()->destroy(context);
+- if (lock) {
+- JS_DESTROY_LOCK(lock);
+- lock = NULL;
+- }
+- if (context) {
+- JS_SetContextThread(context);
+- JS_DestroyContextNoGC(context);
+- context = NULL;
+- }
+- object = NULL;
+-
+- // Do not call parent->removeChild(). This is called either from
+- // ~Worker, which calls it for us; or from parent->disposeChildren or
+- // Worker::create, which require that it not be called.
+- parent = NULL;
+- disposeChildren();
+- }
+-
+- static Worker *create(JSContext *parentcx, WorkerParent *parent,
+- JSString *scriptName, JSObject *obj);
+-
+- JSObject *asObject() { return object; }
+-
+- JSObject *getGlobal() { return JS_GetGlobalObject(context); }
+-
+- WorkerParent *getParent() { return parent; }
+-
+- virtual JSLock *getLock() { return lock; }
+-
+- virtual ThreadPool *getThreadPool() { return threadPool; }
+-
+- bool post(Event *event) {
+- AutoLock hold(lock);
+- if (terminated)
+- return false;
+- if (!current && events.empty() && !threadPool->getWorkerQueue()->post(this))
+- return false;
+- return events.push(event);
+- }
+-
+- void setTerminateFlag() {
+- AutoLock hold(lock);
+- terminateFlag = true;
+- if (current)
+- JS_TriggerOperationCallback(context);
+- }
+-
+- void processOneEvent();
+-
+- /* Trace method to be called from C++. */
+- void trace(JSTracer *trc) {
+- // Just mark the JSObject. If we haven't already been marked,
+- // jsTraceWorker will be called, at which point we'll trace referents.
+- JS_CALL_OBJECT_TRACER(trc, object, "queued Worker");
+- }
+-
+- static bool getWorkerParentFromConstructor(JSContext *cx, JSObject *ctor, WorkerParent **p) {
+- jsval v;
+- if (!JS_GetReservedSlot(cx, ctor, 0, &v))
+- return false;
+- if (JSVAL_IS_VOID(v)) {
+- // This means ctor is the root Worker constructor (created in
+- // Worker::initWorkers as opposed to Worker::createContext, which sets up
+- // Worker sandboxes) and nothing is initialized yet.
+- if (!JS_GetReservedSlot(cx, ctor, 1, &v))
+- return false;
+- ThreadPool *threadPool = (ThreadPool *) JSVAL_TO_PRIVATE(v);
+- if (!threadPool->start(cx))
+- return false;
+- WorkerParent *parent = threadPool->getMainQueue();
+- if (!JS_SetReservedSlot(cx, ctor, 0, PRIVATE_TO_JSVAL(parent))) {
+- threadPool->shutdown(cx);
+- return false;
+- }
+- *p = parent;
+- return true;
+- }
+- *p = (WorkerParent *) JSVAL_TO_PRIVATE(v);
+- return true;
+- }
+-
+- static JSBool jsConstruct(JSContext *cx, uintN argc, jsval *vp) {
+- WorkerParent *parent;
+- if (!getWorkerParentFromConstructor(cx, JSVAL_TO_OBJECT(JS_CALLEE(cx, vp)), &parent))
+- return false;
+-
+-
+- JSString *scriptName = JS_ValueToString(cx, argc ? JS_ARGV(cx, vp)[0] : JSVAL_VOID);
+- if (!scriptName)
+- return false;
+-
+- JSObject *obj = JS_NewObject(cx, &jsWorkerClass, NULL, NULL);
+- if (!obj || !create(cx, parent, scriptName, obj))
+- return false;
+- JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
+- return true;
+- }
+-
+- static JSFunctionSpec jsMethods[3];
+- static JSFunctionSpec jsStaticMethod[2];
+-
+- static ThreadPool *initWorkers(JSContext *cx, WorkerHooks *hooks, JSObject *global,
+- JSObject **objp) {
+- // Create the ThreadPool object and its JSObject wrapper.
+- ThreadPool *threadPool = ThreadPool::create(cx, hooks);
+- if (!threadPool)
+- return NULL;
+-
+- // Root the ThreadPool JSObject early.
+- *objp = threadPool->asObject();
+-
+- // Create the Worker constructor.
+- JSObject *proto = JS_InitClass(cx, global, NULL, &jsWorkerClass,
+- jsConstruct, 1,
+- NULL, jsMethods, NULL, NULL);
+- if (!proto)
+- return NULL;
+-
+- // Stash a pointer to the ThreadPool in constructor reserved slot 1.
+- // It will be used later when lazily creating the MainQueue.
+- JSObject *ctor = JS_GetConstructor(cx, proto);
+- if (!JS_SetReservedSlot(cx, ctor, 1, PRIVATE_TO_JSVAL(threadPool)))
+- return NULL;
+-
+- return threadPool;
+- }
+-};
+-
+-class InitEvent : public Event
+-{
+- public:
+- static InitEvent *create(JSContext *cx, Worker *worker, JSString *scriptName) {
+- return createEvent<InitEvent>(cx, worker, worker, STRING_TO_JSVAL(scriptName));
+- }
+-
+- Result process(JSContext *cx) {
+- jsval s;
+- if (!deserializeData(cx, &s))
+- return fail;
+- JS_ASSERT(JSVAL_IS_STRING(s));
+- JSAutoByteString filename(cx, JSVAL_TO_STRING(s));
+- if (!filename)
+- return fail;
+-
+- JSObject *scriptObj = JS_CompileFile(cx, child->getGlobal(), filename.ptr());
+- if (!scriptObj)
+- return fail;
+-
+- AutoValueRooter rval(cx);
+- JSBool ok = JS_ExecuteScript(cx, child->getGlobal(), scriptObj, Jsvalify(rval.addr()));
+- return Result(ok);
+- }
+-};
+-
+-class DownMessageEvent : public Event
+-{
+- public:
+- static DownMessageEvent *create(JSContext *cx, Worker *child, jsval data) {
+- return createEvent<DownMessageEvent>(cx, child, child, data);
+- }
+-
+- Result process(JSContext *cx) {
+- return dispatch(cx, child->getGlobal(), "data", "onmessage", ok);
+- }
+-};
+-
+-class UpMessageEvent : public Event
+-{
+- public:
+- static UpMessageEvent *create(JSContext *cx, Worker *child, jsval data) {
+- return createEvent<UpMessageEvent>(cx, child->getParent(), child, data);
+- }
+-
+- Result process(JSContext *cx) {
+- return dispatch(cx, child->asObject(), "data", "onmessage", ok);
+- }
+-};
+-
+-class ErrorEvent : public Event
+-{
+- public:
+- static ErrorEvent *create(JSContext *cx, Worker *child) {
+- JSString *data = NULL;
+- jsval exc;
+- if (JS_GetPendingException(cx, &exc)) {
+- AutoValueRooter tvr(cx, Valueify(exc));
+- JS_ClearPendingException(cx);
+-
+- // Determine what error message to put in the error event.
+- // If exc.message is a string, use that; otherwise use String(exc).
+- // (This is a little different from what web workers do.)
+- if (JSVAL_IS_OBJECT(exc)) {
+- jsval msg;
+- if (!JS_GetProperty(cx, JSVAL_TO_OBJECT(exc), "message", &msg))
+- JS_ClearPendingException(cx);
+- else if (JSVAL_IS_STRING(msg))
+- data = JSVAL_TO_STRING(msg);
+- }
+- if (!data) {
+- data = JS_ValueToString(cx, exc);
+- if (!data)
+- return NULL;
+- }
+- }
+- return createEvent<ErrorEvent>(cx, child->getParent(), child,
+- data ? STRING_TO_JSVAL(data) : JSVAL_VOID);
+- }
+-
+- Result process(JSContext *cx) {
+- return dispatch(cx, child->asObject(), "message", "onerror", forwardToParent);
+- }
+-};
+-
+-} /* namespace workers */
+-} /* namespace js */
+-
+-using namespace js::workers;
+-
+-void
+-WorkerParent::disposeChildren()
+-{
+- for (ChildSet::Enum e(children); !e.empty(); e.popFront()) {
+- e.front()->dispose();
+- e.removeFront();
+- }
+-}
+-
+-bool
+-MainQueue::shouldStop()
+-{
+- // Note: This deliberately nests WorkerQueue::lock in MainQueue::lock.
+- // Releasing MainQueue::lock would risk a race -- isIdle() could return
+- // false, but the workers could become idle before we reacquire
+- // MainQueue::lock and go to sleep, and we would wait on the condvar
+- // forever.
+- return closed || threadPool->getWorkerQueue()->isIdle();
+-}
+-
+-void
+-MainQueue::trace(JSTracer *trc)
+-{
+- JS_CALL_OBJECT_TRACER(trc, threadPool->asObject(), "MainQueue");
+-}
+-
+-void
+-WorkerQueue::work() {
+- AutoLock hold(lock);
+-
+- Worker *w;
+- while (take(&w)) { // can block outside the mutex
+- JS_RELEASE_LOCK(lock);
+- w->processOneEvent(); // enters request on w->context
+- JS_ACQUIRE_LOCK(lock);
+- drop(w);
+-
+- if (lockedIsIdle()) {
+- JS_RELEASE_LOCK(lock);
+- main->wake();
+- JS_ACQUIRE_LOCK(lock);
+- }
+- }
+-}
+-
+-const bool mswin =
+-#ifdef XP_WIN
+- true
+-#else
+- false
+-#endif
+- ;
+-
+-template <class Ch> bool
+-IsAbsolute(const Ch *filename)
+-{
+- return filename[0] == '/' ||
+- (mswin && (filename[0] == '\\' || (filename[0] != '\0' && filename[1] == ':')));
+-}
+-
+-// Note: base is a filename, not a directory name.
+-static JSString *
+-ResolveRelativePath(JSContext *cx, const char *base, JSString *filename)
+-{
+- size_t fileLen = JS_GetStringLength(filename);
+- const jschar *fileChars = JS_GetStringCharsZ(cx, filename);
+- if (!fileChars)
+- return NULL;
+-
+- if (IsAbsolute(fileChars))
+- return filename;
+-
+- // Strip off the filename part of base.
+- size_t dirLen = -1;
+- for (size_t i = 0; base[i]; i++) {
+- if (base[i] == '/' || (mswin && base[i] == '\\'))
+- dirLen = i;
+- }
+-
+- // If base is relative and contains no directories, use filename unchanged.
+- if (!IsAbsolute(base) && dirLen == (size_t) -1)
+- return filename;
+-
+- // Otherwise return base[:dirLen + 1] + filename.
+- js::Vector<jschar, 0, js::ContextAllocPolicy> result(cx);
+- size_t nchars;
+- if (!JS_DecodeBytes(cx, base, dirLen + 1, NULL, &nchars))
+- return NULL;
+- if (!result.reserve(dirLen + 1 + fileLen)) {
+- JS_ReportOutOfMemory(cx);
+- return NULL;
+- }
+- JS_ALWAYS_TRUE(result.resize(dirLen + 1));
+- if (!JS_DecodeBytes(cx, base, dirLen + 1, result.begin(), &nchars))
+- return NULL;
+- JS_ALWAYS_TRUE(result.append(fileChars, fileLen));
+- return JS_NewUCStringCopyN(cx, result.begin(), result.length());
+-}
+-
+-Worker *
+-Worker::create(JSContext *parentcx, WorkerParent *parent, JSString *scriptName, JSObject *obj)
+-{
+- Worker *w = new Worker();
+- if (!w || !w->init(parentcx, parent, obj)) {
+- delete w;
+- return NULL;
+- }
+-
+- JSStackFrame *frame = JS_GetScriptedCaller(parentcx, NULL);
+- const char *base = JS_GetScriptFilename(parentcx, JS_GetFrameScript(parentcx, frame));
+- JSString *scriptPath = ResolveRelativePath(parentcx, base, scriptName);
+- if (!scriptPath)
+- return NULL;
+-
+- // Post an InitEvent to run the initialization script.
+- Event *event = InitEvent::create(parentcx, w, scriptPath);
+- if (!event)
+- return NULL;
+- if (!w->events.push(event) || !w->threadPool->getWorkerQueue()->post(w)) {
+- event->destroy(parentcx);
+- JS_ReportOutOfMemory(parentcx);
+- w->dispose();
+- return NULL;
+- }
+- return w;
+-}
+-
+-void
+-Worker::processOneEvent()
+-{
+- Event *event;
+- {
+- AutoLock hold1(lock);
+- if (lockedCheckTermination() || events.empty())
+- return;
+-
+- event = current = events.pop();
+- }
+-
+- JS_SetContextThread(context);
+- JS_SetNativeStackQuota(context, gMaxStackSize);
+-
+- Event::Result result;
+- {
+- JSAutoRequest req(context);
+- result = event->process(context);
+- }
+-
+- // Note: we have to leave the above request before calling parent->post or
+- // checkTermination, both of which acquire locks.
+- if (result == Event::forwardToParent) {
+- event->setChildAndRecipient(this, parent);
+- if (parent->post(event)) {
+- event = NULL; // to prevent it from being deleted below
+- } else {
+- JS_ReportOutOfMemory(context);
+- result = Event::fail;
+- }
+- }
+- if (result == Event::fail && !checkTermination()) {
+- JSAutoRequest req(context);
+- Event *err = ErrorEvent::create(context, this);
+- if (err && !parent->post(err)) {
+- JS_ReportOutOfMemory(context);
+- err->destroy(context);
+- err = NULL;
+- }
+- if (!err) {
+- // FIXME - out of memory, probably should panic
+- }
+- }
+-
+- if (event)
+- event->destroy(context);
+- JS_ClearContextThread(context);
+-
+- {
+- AutoLock hold2(lock);
+- current = NULL;
+- if (!lockedCheckTermination() && !events.empty()) {
+- // Re-enqueue this worker. OOM here effectively kills the worker.
+- if (!threadPool->getWorkerQueue()->post(this))
+- JS_ReportOutOfMemory(context);
+- }
+- }
+-}
+-
+-JSBool
+-Worker::jsPostMessageToParent(JSContext *cx, uintN argc, jsval *vp)
+-{
+- jsval workerval;
+- if (!JS_GetReservedSlot(cx, JSVAL_TO_OBJECT(JS_CALLEE(cx, vp)), 0, &workerval))
+- return false;
+- Worker *w = (Worker *) JSVAL_TO_PRIVATE(workerval);
+-
+- {
+- JSAutoSuspendRequest suspend(cx); // avoid nesting w->lock in a request
+- if (w->checkTermination())
+- return false;
+- }
+-
+- jsval data = argc > 0 ? JS_ARGV(cx, vp)[0] : JSVAL_VOID;
+- Event *event = UpMessageEvent::create(cx, w, data);
+- if (!event)
+- return false;
+- if (!w->parent->post(event)) {
+- event->destroy(cx);
+- JS_ReportOutOfMemory(cx);
+- return false;
+- }
+- JS_SET_RVAL(cx, vp, JSVAL_VOID);
+- return true;
+-}
+-
+-JSBool
+-Worker::jsPostMessageToChild(JSContext *cx, uintN argc, jsval *vp)
+-{
+- JSObject *workerobj = JS_THIS_OBJECT(cx, vp);
+- if (!workerobj)
+- return false;
+- Worker *w = (Worker *) JS_GetInstancePrivate(cx, workerobj, &jsWorkerClass, JS_ARGV(cx, vp));
+- if (!w) {
+- if (!JS_IsExceptionPending(cx))
+- JS_ReportError(cx, "Worker was shut down");
+- return false;
+- }
+-
+- jsval data = argc > 0 ? JS_ARGV(cx, vp)[0] : JSVAL_VOID;
+- Event *event = DownMessageEvent::create(cx, w, data);
+- if (!event)
+- return false;
+- if (!w->post(event)) {
+- JS_ReportOutOfMemory(cx);
+- return false;
+- }
+- JS_SET_RVAL(cx, vp, JSVAL_VOID);
+- return true;
+-}
+-
+-JSBool
+-Worker::jsTerminate(JSContext *cx, uintN argc, jsval *vp)
+-{
+- JS_SET_RVAL(cx, vp, JSVAL_VOID);
+-
+- JSObject *workerobj = JS_THIS_OBJECT(cx, vp);
+- if (!workerobj)
+- return false;
+- Worker *w = (Worker *) JS_GetInstancePrivate(cx, workerobj, &jsWorkerClass, JS_ARGV(cx, vp));
+- if (!w)
+- return !JS_IsExceptionPending(cx); // ok to terminate twice
+-
+- JSAutoSuspendRequest suspend(cx);
+- w->setTerminateFlag();
+- return true;
+-}
+-
+-void
+-Event::trace(JSTracer *trc)
+-{
+- if (recipient)
+- recipient->trace(trc);
+- if (child)
+- JS_CALL_OBJECT_TRACER(trc, child->asObject(), "worker");
+-}
+-
+-JSClass ThreadPool::jsClass = {
+- "ThreadPool", JSCLASS_HAS_PRIVATE | JSCLASS_MARK_IS_TRACE,
+- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
+- JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, jsFinalize,
+- NULL, NULL, NULL, NULL,
+- NULL, NULL, JS_CLASS_TRACE(jsTraceThreadPool), NULL
+-};
+-
+-JSClass Worker::jsWorkerClass = {
+- "Worker", JSCLASS_HAS_PRIVATE | JSCLASS_MARK_IS_TRACE,
+- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
+- JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, jsFinalize,
+- NULL, NULL, NULL, NULL,
+- NULL, NULL, JS_CLASS_TRACE(jsTraceWorker), NULL
+-};
+-
+-JSFunctionSpec Worker::jsMethods[3] = {
+- JS_FN("postMessage", Worker::jsPostMessageToChild, 1, 0),
+- JS_FN("terminate", Worker::jsTerminate, 0, 0),
+- JS_FS_END
+-};
+-
+-ThreadPool *
+-js::workers::init(JSContext *cx, WorkerHooks *hooks, JSObject *global, JSObject **rootp)
+-{
+- return Worker::initWorkers(cx, hooks, global, rootp);
+-}
+-
+-void
+-js::workers::terminateAll(JSRuntime *rt, ThreadPool *tp)
+-{
+- tp->terminateAll(rt);
+-}
+-
+-void
+-js::workers::finish(JSContext *cx, ThreadPool *tp)
+-{
+- if (MainQueue *mq = tp->getMainQueue()) {
+- JS_ALWAYS_TRUE(mq->mainThreadWork(cx, true));
+- tp->shutdown(cx);
+- }
+-}
+-
+-#endif /* JS_THREADSAFE */
+diff -ruN src/shell/jsworkers.h src.new/shell/jsworkers.h
+--- shell/jsworkers.h 2011-04-01 06:08:36.000000000 +1100
++++ shell/jsworkers.h 1970-01-01 10:00:00.000000000 +1000
+@@ -1,93 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- * vim: set ts=8 sw=4 et tw=99:
+- *
+- * ***** BEGIN LICENSE BLOCK *****
+- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+- *
+- * The contents of this file are subject to the Mozilla Public License Version
+- * 1.1 (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- * http://www.mozilla.org/MPL/
+- *
+- * Software distributed under the License is distributed on an "AS IS" basis,
+- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+- * for the specific language governing rights and limitations under the
+- * License.
+- *
+- * The Original Code is JavaScript shell workers.
+- *
+- * The Initial Developer of the Original Code is
+- * Mozilla Corporation.
+- * Portions created by the Initial Developer are Copyright (C) 2010
+- * the Initial Developer. All Rights Reserved.
+- *
+- * Contributor(s):
+- * Jason Orendorff <jorendorff@mozilla.com>
+- *
+- * Alternatively, the contents of this file may be used under the terms of
+- * either of the GNU General Public License Version 2 or later (the "GPL"),
+- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+- * in which case the provisions of the GPL or the LGPL are applicable instead
+- * of those above. If you wish to allow use of your version of this file only
+- * under the terms of either the GPL or the LGPL, and not to allow others to
+- * use your version of this file under the terms of the MPL, indicate your
+- * decision by deleting the provisions above and replace them with the notice
+- * and other provisions required by the GPL or the LGPL. If you do not delete
+- * the provisions above, a recipient may use your version of this file under
+- * the terms of any one of the MPL, the GPL or the LGPL.
+- *
+- * ***** END LICENSE BLOCK ***** */
+-
+-#ifndef jsworkers_h___
+-#define jsworkers_h___
+-
+-#ifdef JS_THREADSAFE
+-
+-#include "jsapi.h"
+-
+-/*
+- * Workers for the JS shell.
+- *
+- * Note: The real implementation of DOM Workers is in dom/src/threads.
+- */
+-namespace js {
+- namespace workers {
+- class ThreadPool;
+-
+- class WorkerHooks {
+- public:
+- virtual JSObject *newGlobalObject(JSContext *cx) = 0;
+- virtual ~WorkerHooks() {}
+- };
+-
+- /*
+- * Initialize workers. This defines the Worker constructor on global.
+- * Requires request. rootp must point to a GC root.
+- *
+- * On success, *rootp receives a pointer to an object, and init returns
+- * a non-null value. The caller must keep the object rooted and must
+- * pass it to js::workers::finish later.
+- */
+- ThreadPool *init(JSContext *cx, WorkerHooks *hooks, JSObject *global, JSObject **rootp);
+-
+- /* Asynchronously signal for all workers to terminate.
+- *
+- * Call this before calling finish() to shut down without waiting for
+- * all messages to be proceesed.
+- */
+- void terminateAll(JSRuntime *rt, ThreadPool *tp);
+-
+- /*
+- * Finish running any workers, shut down the thread pool, and free all
+- * resources associated with workers. The application must call this
+- * before shutting down the runtime, and not during GC.
+- *
+- * Requires request.
+- */
+- void finish(JSContext *cx, ThreadPool *tp);
+- }
+-}
+-
+-#endif /* JS_THREADSAFE */
+-
+-#endif /* jsworkers_h___ */
+diff -ruN src/tests/browser.js src.new/tests/browser.js
+--- tests/browser.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/browser.js 2013-03-23 22:03:56.716635673 +1100
+@@ -767,17 +767,6 @@
+ document.write(s);
+ }
+
+-var JSTest = {
+- waitForExplicitFinish: function () {
+- gDelayTestDriverEnd = true;
+- },
+-
+- testFinished: function () {
+- gDelayTestDriverEnd = false;
+- jsTestDriverEnd();
+- }
+-};
+-
+ function jsTestDriverEnd()
+ {
+ // gDelayTestDriverEnd is used to
+diff -ruN src/tests/js1_8_5/extensions/jstests.list src.new/tests/js1_8_5/extensions/jstests.list
+--- tests/js1_8_5/extensions/jstests.list 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/jstests.list 2013-03-23 22:29:16.973264001 +1100
+@@ -1,13 +1,6 @@
+ url-prefix ../../jsreftest.html?test=js1_8_5/extensions/
+ script typedarray.js
+ script typedarray-prototype.js
+-skip-if(!xulRuntime.shell) script worker-error.js # these tests sometimes hang in browser, bug 559954, bug 562333
+-skip-if(!xulRuntime.shell) script worker-error-propagation.js
+-skip-if(!xulRuntime.shell) script worker-fib.js
+-skip-if(!xulRuntime.shell) script worker-init.js
+-skip-if(!xulRuntime.shell) script worker-simple.js
+-skip-if(!xulRuntime.shell) script worker-terminate.js
+-skip-if(!xulRuntime.shell) script worker-timeout.js
+ script scripted-proxies.js
+ script array-length-protochange.js
+ script parseInt-octal.js
+diff -ruN src/tests/js1_8_5/extensions/worker-error-child.js src.new/tests/js1_8_5/extensions/worker-error-child.js
+--- tests/js1_8_5/extensions/worker-error-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-error-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,9 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-function onmessage(event) {
+- throw new Error("fail");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-error-propagation-child.js src.new/tests/js1_8_5/extensions/worker-error-propagation-child.js
+--- tests/js1_8_5/extensions/worker-error-propagation-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-error-propagation-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,16 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-function onmessage(event) {
+- var n = +event.data;
+- if (n == 0)
+- throw new Error("boom");
+- var w = new Worker(workerDir + "worker-error-propagation-child.js");
+- w.onmessage = function (event) { postMessage(event.data); };
+- // No w.onerror here. We are testing error propagation when it is absent.
+- w.postMessage(n - 1 + "");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-error-propagation.js src.new/tests/js1_8_5/extensions/worker-error-propagation.js
+--- tests/js1_8_5/extensions/worker-error-propagation.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-error-propagation.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,20 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+- var w = Worker(workerDir + "worker-error-propagation-child.js");
+- var errors = 0;
+- w.onmessage = function () { throw new Error("no reply expected"); };
+- w.onerror = function (event) {
+- reportCompare("string", typeof event.message, "typeof event.message");
+- JSTest.testFinished();
+- };
+- w.postMessage("5");
+-} else {
+- reportCompare(0, 0, " PASSED! Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-error.js src.new/tests/js1_8_5/extensions/worker-error.js
+--- tests/js1_8_5/extensions/worker-error.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-error.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,21 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+-
+- // The script throws new Error("fail") on first message.
+- var w = Worker(workerDir + "worker-error-child.js");
+- var a = [];
+- w.onerror = function (event) {
+- reportCompare("fail", event.message, "worker-error");
+- JSTest.testFinished();
+- };
+- w.postMessage("hello");
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-fib-child.js src.new/tests/js1_8_5/extensions/worker-fib-child.js
+--- tests/js1_8_5/extensions/worker-fib-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-fib-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,27 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-function onmessage(event) {
+- var a = event.data.split(/\t/);
+- var n = Number(a[0]);
+- var workerDir = a[1];
+-
+- if (n <= 1) {
+- postMessage("" + n);
+- } else {
+- var w1 = new Worker(workerDir + "worker-fib-child.js"),
+- w2 = new Worker(workerDir + "worker-fib-child.js");
+- var a = [];
+- w1.onmessage = w2.onmessage = function(event) {
+- a.push(+event.data);
+- if (a.length == 2)
+- postMessage(a[0] + a[1] + "");
+- };
+- w1.postMessage(n - 1 + "\t" + workerDir);
+- w2.postMessage(n - 2 + "\t" + workerDir);
+- }
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-fib.js src.new/tests/js1_8_5/extensions/worker-fib.js
+--- tests/js1_8_5/extensions/worker-fib.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-fib.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,18 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+- var w = Worker(workerDir + "worker-fib-child.js");
+- w.onmessage = function (event) {
+- reportCompare("55", event.data, "worker-fib");
+- JSTest.testFinished();
+- };
+- w.postMessage("10\t" + workerDir); // 0 1 1 2 3 5 8 13 21 34 55
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-init-child.js src.new/tests/js1_8_5/extensions/worker-init-child.js
+--- tests/js1_8_5/extensions/worker-init-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-init-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,8 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-postMessage('do your worst');
+-for (;;) ;
+diff -ruN src/tests/js1_8_5/extensions/worker-init.js src.new/tests/js1_8_5/extensions/worker-init.js
+--- tests/js1_8_5/extensions/worker-init.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-init.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,19 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+- // Messages sent during initialization are a corner case, but in any case
+- // they should be delivered (no waiting until initialization is complete).
+- var w = new Worker(workerDir + "worker-init-child.js"); // posts a message, then loops forever
+- w.onmessage = function (event) {
+- reportCompare(0, 0, "worker-init");
+- JSTest.testFinished();
+- };
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-simple-child.js src.new/tests/js1_8_5/extensions/worker-simple-child.js
+--- tests/js1_8_5/extensions/worker-simple-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-simple-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,8 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-onmessage = function (event) { postMessage(event.data); };
+diff -ruN src/tests/js1_8_5/extensions/worker-simple.js src.new/tests/js1_8_5/extensions/worker-simple.js
+--- tests/js1_8_5/extensions/worker-simple.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-simple.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,20 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+- var w = new Worker(workerDir + "worker-simple-child.js");
+- var a = [];
+- w.onmessage = function (event) {
+- a.push(event.data);
+- reportCompare(0, 0, "worker-simple");
+- JSTest.testFinished();
+- };
+- w.postMessage("hello");
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-terminate-child.js src.new/tests/js1_8_5/extensions/worker-terminate-child.js
+--- tests/js1_8_5/extensions/worker-terminate-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-terminate-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,13 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-onmessage = function (event) {
+- var workerDir = event.message;
+- var child = new Worker(workerDir + 'worker-terminate-iloop.js'); // loops forever
+- child.terminate();
+- postMessage("killed");
+-};
+diff -ruN src/tests/js1_8_5/extensions/worker-terminate-iloop.js src.new/tests/js1_8_5/extensions/worker-terminate-iloop.js
+--- tests/js1_8_5/extensions/worker-terminate-iloop.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-terminate-iloop.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,9 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-for (;;)
+- ;
+diff -ruN src/tests/js1_8_5/extensions/worker-terminate.js src.new/tests/js1_8_5/extensions/worker-terminate.js
+--- tests/js1_8_5/extensions/worker-terminate.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-terminate.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,37 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff <jorendorff@mozilla.com>
+- */
+-
+-if (typeof Worker != 'undefined') {
+- JSTest.waitForExplicitFinish();
+-
+- // This tests that a parent worker can terminate a child. We run the test
+- // several times serially. If terminate() doesn't work, the runaway Workers
+- // will soon outnumber the number of threads in the thread pool, and we
+- // will deadlock.
+- var i = 0;
+-
+- function next() {
+- if (++i == 10) {
+- reportCompare(0, 0, "worker-terminate");
+- JSTest.testFinished();
+- return;
+- }
+-
+- var w = new Worker(workerDir + "worker-terminate-child.js");
+- w.onmessage = function (event) {
+- reportCompare("killed", event.data, "killed runaway worker #" + i);
+- next();
+- };
+- w.onerror = function (event) {
+- reportCompare(0, 1, "Got error: " + event.message);
+- };
+- w.postMessage(workerDir);
+- }
+- next();
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers required.");
+-}
+diff -ruN src/tests/js1_8_5/extensions/worker-timeout-child.js src.new/tests/js1_8_5/extensions/worker-timeout-child.js
+--- tests/js1_8_5/extensions/worker-timeout-child.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-timeout-child.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,9 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff
+- */
+-
+-for (;;)
+- ;
+diff -ruN src/tests/js1_8_5/extensions/worker-timeout.js src.new/tests/js1_8_5/extensions/worker-timeout.js
+--- tests/js1_8_5/extensions/worker-timeout.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/js1_8_5/extensions/worker-timeout.js 1970-01-01 10:00:00.000000000 +1000
+@@ -1,18 +0,0 @@
+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*
+- * Any copyright is dedicated to the Public Domain.
+- * http://creativecommons.org/licenses/publicdomain/
+- * Contributor: Jason Orendorff
+- */
+-
+-if (typeof timeout == 'function' && typeof Worker != 'undefined') {
+- // We don't actually ever call JSTest.testFinished(); instead we
+- // time out and exit the shell with exit code 6.
+- JSTest.waitForExplicitFinish();
+- expectExitCode(6);
+- timeout(1.0);
+- for (var i = 0; i < 5; i++)
+- new Worker(workerDir + "worker-timeout-child.js"); // just loops forever
+-} else {
+- reportCompare(0, 0, "Test skipped. Shell workers and timeout required.");
+-}
+diff -ruN src/tests/shell.js src.new/tests/shell.js
+--- tests/shell.js 2011-04-01 06:08:36.000000000 +1100
++++ tests/shell.js 2013-03-23 22:07:41.387249919 +1100
+@@ -833,18 +833,6 @@
+ }
+ }
+
+-var JSTest = {
+- waitForExplicitFinish: function () {
+- gDelayTestDriverEnd = true;
+- },
+-
+- testFinished: function () {
+- gDelayTestDriverEnd = false;
+- jsTestDriverEnd();
+- quit();
+- }
+-};
+-
+ function jsTestDriverEnd()
+ {
+ // gDelayTestDriverEnd is used to
diff --git a/lang/spidermonkey185/files/patch-c++11 b/lang/spidermonkey185/files/patch-c++11
new file mode 100644
index 000000000000..95a68426f5de
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-c++11
@@ -0,0 +1,247 @@
+jsapi.cpp:3988:16: error: cannot initialize return object of type 'JSIdArray *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsarray.cpp:497:1: error: non-constant-expression cannot be narrowed from type 'intptr_t' (aka 'long') to 'uintptr_t' (aka 'unsigned long') in initializer list [-Wc++11-narrowing]
+JS_DEFINE_CALLINFO_3(extern, BOOL, js_EnsureDenseArrayCapacity, CONTEXT, OBJECT, INT32,
+^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+./jsbuiltins.h:350:5: note: expanded from macro 'JS_DEFINE_CALLINFO_3'
+ _JS_DEFINE_CALLINFO(linkage, op, \
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+./jsbuiltins.h:294:11: note: expanded from macro '_JS_DEFINE_CALLINFO'
+ { (intptr_t) &name, argtypes, nanojit::ABI_FASTCALL, isPure, storeAccSet _JS_CI_NAME(name) }; \
+ ^~~~~~~~~~~~~~~~
+jsfun.cpp:2054:16: error: cannot initialize return object of type 'JSString *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsfun.cpp:2660:20: error: cannot initialize return object of type 'const js::Shape *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsiter.cpp:428:20: error: cannot initialize return object of type 'JSObject *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsparse.cpp:3355:20: error: cannot initialize return object of type 'JSParseNode *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsstr.cpp:1737:24: error: cannot initialize return object of type 'const RegExpPair *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsstr.cpp:3403:16: error: cannot initialize return object of type 'JSObject *' with an rvalue of type 'JSIntn' (aka 'int')
+ return JS_FALSE;
+ ^~~~~~~~
+./jstypes.h:395:18: note: expanded from macro 'JS_FALSE'
+#define JS_FALSE (JSIntn)0
+ ^~~~~~~~~
+jstypedarray.cpp:1337:20: error: cannot initialize return object of type 'JSObject *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jstypedarray.cpp:1671:16: error: cannot initialize return object of type 'JSObject *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+jsxml.cpp:285:16: error: cannot initialize return object of type 'JSObject *' with an rvalue of type 'JSIntn' (aka 'int')
+ return JS_FALSE;
+ ^~~~~~~~
+jsxml.cpp:434:20: error: cannot initialize return object of type 'JSString *' with an rvalue of type 'JSIntn' (aka 'int')
+ return JS_FALSE;
+ ^~~~~~~~
+./jstypes.h:395:18: note: expanded from macro 'JS_FALSE'
+#define JS_FALSE (JSIntn)0
+ ^~~~~~~~~
+./methodjit/InvokeHelpers.cpp:731:16: error: cannot initialize return object of type 'void *' with an rvalue of type 'bool'
+ return false;
+ ^~~~~
+./nanojit/NativeX64.cpp:1902:59: error: constant expression evaluates to 9223372036854775808 which cannot be narrowed to type 'int64_t' (aka 'long') [-Wc++11-narrowing]
+ static const AVMPLUS_ALIGN16(int64_t) negateMask[] = {0x8000000000000000LL,0};
+ ^~~~~~~~~~~~~~~~~~~~
+./nanojit/NativeX64.cpp:1902:59: note: insert an explicit cast to silence this issue
+ static const AVMPLUS_ALIGN16(int64_t) negateMask[] = {0x8000000000000000LL,0};
+ ^~~~~~~~~~~~~~~~~~~~
+ static_cast<int64_t>( )
+./nanojit/RegAlloc.h:189:24: error: non-constant-expression cannot be narrowed from type 'int' to 'nanojit::Register' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
+ Register r = { (sizeof(RegisterMask) == 4) ? lsbSet32(mask) : lsbSet64(mask) };
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+./nanojit/RegAlloc.h:189:24: note: insert an explicit cast to silence this issue
+ Register r = { (sizeof(RegisterMask) == 4) ? lsbSet32(mask) : lsbSet64(mask) };
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ static_cast<Register>( )
+./nanojit/RegAlloc.h:197:24: error: non-constant-expression cannot be narrowed from type 'int' to 'nanojit::Register' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
+ Register r = { (sizeof(RegisterMask) == 4) ? msbSet32(mask) : msbSet64(mask) };
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+./nanojit/RegAlloc.h:197:24: note: insert an explicit cast to silence this issue
+ Register r = { (sizeof(RegisterMask) == 4) ? msbSet32(mask) : msbSet64(mask) };
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ static_cast<Register>( )
+
+--- jsapi.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsapi.cpp
+@@ -3985,7 +3985,7 @@ JS_Enumerate(JSContext *cx, JSObject *obj)
+ AutoIdVector props(cx);
+ JSIdArray *ida;
+ if (!GetPropertyNames(cx, obj, JSITER_OWNONLY, &props) || !VectorToIdArray(cx, props, &ida))
+- return false;
++ return NULL;
+ for (size_t n = 0; n < size_t(ida->length); ++n)
+ JS_ASSERT(js_CheckForStringIndex(ida->vector[n]) == ida->vector[n]);
+ return ida;
+--- jsbuiltins.h.orig 2011-03-31 19:08:36 UTC
++++ jsbuiltins.h
+@@ -284,14 +284,14 @@ struct ClosureVarInfo;
+ #define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, isPure, storeAccSet) \
+ _JS_TN_LINKAGE(linkage, crtype) name cargtypes; \
+ _JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
+- { (intptr_t) &name, argtypes, nanojit::ABI_CDECL, isPure, storeAccSet _JS_CI_NAME(name) };\
++ { (uintptr_t) &name, argtypes, nanojit::ABI_CDECL, isPure, storeAccSet _JS_CI_NAME(name) };\
+ JS_STATIC_ASSERT_IF(isPure, (storeAccSet) == nanojit::ACCSET_NONE);
+
+ #else
+ #define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, isPure, storeAccSet) \
+ _JS_TN_LINKAGE(linkage, crtype) FASTCALL name cargtypes; \
+ _JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
+- { (intptr_t) &name, argtypes, nanojit::ABI_FASTCALL, isPure, storeAccSet _JS_CI_NAME(name) }; \
++ { (uintptr_t) &name, argtypes, nanojit::ABI_FASTCALL, isPure, storeAccSet _JS_CI_NAME(name) }; \
+ JS_STATIC_ASSERT_IF(isPure, (storeAccSet) == nanojit::ACCSET_NONE);
+ #endif
+
+--- jsfun.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsfun.cpp
+@@ -2051,7 +2051,7 @@ fun_toStringHelper(JSContext *cx, JSObject *obj, uintN
+
+ JSString *str = JS_DecompileFunction(cx, fun, indent);
+ if (!str)
+- return false;
++ return NULL;
+
+ if (!indent)
+ cx->compartment->toSourceCache.put(fun, str);
+@@ -2657,7 +2657,7 @@ LookupInterpretedFunctionPrototype(JSContext *cx, JSOb
+ const Shape *shape = funobj->nativeLookup(id);
+ if (!shape) {
+ if (!ResolveInterpretedFunctionPrototype(cx, funobj))
+- return false;
++ return NULL;
+ shape = funobj->nativeLookup(id);
+ }
+ JS_ASSERT(!shape->configurable());
+--- jsiter.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsiter.cpp
+@@ -425,7 +425,7 @@ NewIteratorObject(JSContext *cx, uintN flags)
+ */
+ JSObject *obj = js_NewGCObject(cx, FINALIZE_OBJECT0);
+ if (!obj)
+- return false;
++ return NULL;
+ obj->init(cx, &js_IteratorClass, NULL, NULL, NULL, false);
+ obj->setMap(cx->compartment->emptyEnumeratorShape);
+ return obj;
+--- jsparse.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsparse.cpp
+@@ -3352,7 +3352,7 @@ Parser::functionDef(JSAtom *funAtom, FunctionType type
+ if (!outertc->inFunction() && bodyLevel && funAtom && !lambda && outertc->compiling()) {
+ JS_ASSERT(pn->pn_cookie.isFree());
+ if (!DefineGlobal(pn, outertc->asCodeGenerator(), funAtom))
+- return false;
++ return NULL;
+ }
+
+ pn->pn_blockid = outertc->blockid();
+--- jsstr.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsstr.cpp
+@@ -1734,7 +1734,7 @@ class RegExpGuard
+ if (flat) {
+ patstr = flattenPattern(cx, fm.patstr);
+ if (!patstr)
+- return false;
++ return NULL;
+ } else {
+ patstr = fm.patstr;
+ }
+@@ -3400,7 +3400,7 @@ js_InitStringClass(JSContext *cx, JSObject *obj)
+ UndefinedValue(), NULL, NULL,
+ JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED, 0, 0,
+ NULL)) {
+- return JS_FALSE;
++ return NULL;
+ }
+
+ return proto;
+--- jstypedarray.cpp.orig 2011-03-31 19:08:36 UTC
++++ jstypedarray.cpp
+@@ -1334,7 +1334,7 @@ class TypedArrayTemplate
+ if (size != 0 && count >= INT32_MAX / size) {
+ JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
+ JSMSG_NEED_DIET, "size and count");
+- return false;
++ return NULL;
+ }
+
+ int32 bytelen = size * count;
+@@ -1668,7 +1668,7 @@ TypedArrayConstruct(JSContext *cx, jsint atype, uintN
+
+ default:
+ JS_NOT_REACHED("shouldn't have gotten here");
+- return false;
++ return NULL;
+ }
+ }
+
+--- jsxml.cpp.orig 2011-03-31 19:08:36 UTC
++++ jsxml.cpp
+@@ -282,7 +282,7 @@ NewXMLNamespace(JSContext *cx, JSLinearString *prefix,
+
+ obj = NewBuiltinClassInstanceXML(cx, &js_NamespaceClass);
+ if (!obj)
+- return JS_FALSE;
++ return NULL;
+ JS_ASSERT(JSVAL_IS_VOID(obj->getNamePrefixVal()));
+ JS_ASSERT(JSVAL_IS_VOID(obj->getNameURIVal()));
+ JS_ASSERT(JSVAL_IS_VOID(obj->getNamespaceDeclared()));
+@@ -431,7 +431,7 @@ ConvertQNameToString(JSContext *cx, JSObject *obj)
+ size_t length = str->length();
+ jschar *chars = (jschar *) cx->malloc((length + 2) * sizeof(jschar));
+ if (!chars)
+- return JS_FALSE;
++ return NULL;
+ *chars = '@';
+ const jschar *strChars = str->getChars(cx);
+ if (!strChars) {
+--- methodjit/InvokeHelpers.cpp.orig 2011-03-31 19:08:36 UTC
++++ methodjit/InvokeHelpers.cpp
+@@ -728,7 +728,7 @@ AtSafePoint(JSContext *cx)
+ {
+ JSStackFrame *fp = cx->fp();
+ if (fp->hasImacropc())
+- return false;
++ return NULL;
+
+ JSScript *script = fp->script();
+ return script->maybeNativeCodeForPC(fp->isConstructing(), cx->regs->pc);
+--- nanojit/NativeX64.cpp.orig 2011-03-31 19:08:36 UTC
++++ nanojit/NativeX64.cpp
+@@ -1899,7 +1899,7 @@ namespace nanojit
+ }
+ }
+
+- static const AVMPLUS_ALIGN16(int64_t) negateMask[] = {0x8000000000000000LL,0};
++ static const AVMPLUS_ALIGN16(int64_t) negateMask[] = {(int64_t)0x8000000000000000LL,0};
+
+ void Assembler::asm_fneg(LIns *ins) {
+ Register rr, ra;
+--- nanojit/RegAlloc.h.orig 2011-03-31 19:08:36 UTC
++++ nanojit/RegAlloc.h
+@@ -186,7 +186,7 @@ namespace nanojit
+ inline Register lsReg(RegisterMask mask) {
+ // This is faster than it looks; we rely on the C++ optimizer
+ // to strip the dead branch and inline just one alternative.
+- Register r = { (sizeof(RegisterMask) == 4) ? lsbSet32(mask) : lsbSet64(mask) };
++ Register r = { (sizeof(RegisterMask) == 4) ? (Register)lsbSet32(mask) : (Register)lsbSet64(mask) };
+ return r;
+ }
+
+@@ -194,7 +194,7 @@ namespace nanojit
+ inline Register msReg(RegisterMask mask) {
+ // This is faster than it looks; we rely on the C++ optimizer
+ // to strip the dead branch and inline just one alternative.
+- Register r = { (sizeof(RegisterMask) == 4) ? msbSet32(mask) : msbSet64(mask) };
++ Register r = { (sizeof(RegisterMask) == 4) ? (Register)msbSet32(mask) : (Register)msbSet64(mask) };
+ return r;
+ }
+
diff --git a/lang/spidermonkey185/files/patch-configure.in b/lang/spidermonkey185/files/patch-configure.in
new file mode 100644
index 000000000000..c8910057a423
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-configure.in
@@ -0,0 +1,36 @@
+--- ./configure.in.orig 2011-04-01 06:08:36.000000000 +1100
++++ ./configure.in 2013-05-26 00:19:28.032315432 +1000
+@@ -3378,7 +3378,8 @@
+ rm -f conftest.{c,S}
+ ])
+ if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
+- "$ac_cv_have_visibility_class_bug" = "no"; then
++ "$ac_cv_have_visibility_class_bug" = "no" -a \
++ "$OS_ARCH" != "FreeBSD" ; then
+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers_js -include $(topsrcdir)/config/gcc_hidden.h'
+ WRAP_SYSTEM_INCLUDES=1
+ STL_FLAGS='-I$(DIST)/stl_wrappers'
+@@ -4656,6 +4657,9 @@ MOZ_ARG_HEADER(Individual module options
+
+ dnl Setup default CPU arch for arm target
+ case "$target_cpu" in
++ armv6*)
++ MOZ_ARM_ARCH=armv6
++ ;;
+ arm*)
+ MOZ_ARM_ARCH=armv7
+ ;;
+@@ -4716,6 +4720,13 @@ elif test "$MOZ_ARM_ARCH" = "armv7"; the
+ esac
+ else
+ case "$target_cpu" in
++ armv6*)
++ if test "$GNU_CC"; then
++ CFLAGS="$CFLAGS"
++ CXXFLAGS="$CXXFLAGS"
++ ASFLAGS="$ASFLAGS"
++ fi
++ ;;
+ arm*)
+ if test "$GNU_CC"; then
+ CFLAGS="$CFLAGS -march=armv5te -mthumb-interwork -msoft-float"
diff --git a/lang/spidermonkey185/files/patch-jsscript.h b/lang/spidermonkey185/files/patch-jsscript.h
new file mode 100644
index 000000000000..a642b31a8642
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-jsscript.h
@@ -0,0 +1,48 @@
+# HG changeset patch
+# User Ehsan Akhgari <ehsan@mozilla.com>
+# Date 1308340787 14400
+# Node ID c0e8643e8e60d1c98bff30c78e034f991f75c191
+# Parent 284ebc48b2cb8e35dc04482ede700e717d8d214f
+Bug 662962 - Silence the clang warnings issued because of alignment requirements increase when compiling jsscript.h; r=Waldo
+
+--- ./jsscript.h.orig 2011-04-01 06:08:36.000000000 +1100
++++ ./jsscript.h 2013-05-26 00:23:16.202260566 +1000
+@@ -496,32 +496,32 @@
+
+ JSObjectArray *objects() {
+ JS_ASSERT(isValidOffset(objectsOffset));
+- return (JSObjectArray *)((uint8 *) (this + 1) + objectsOffset);
++ return reinterpret_cast<JSObjectArray *>(uintptr_t(this + 1) + objectsOffset);
+ }
+
+ JSUpvarArray *upvars() {
+ JS_ASSERT(isValidOffset(upvarsOffset));
+- return (JSUpvarArray *) ((uint8 *) (this + 1) + upvarsOffset);
++ return reinterpret_cast<JSUpvarArray *>(uintptr_t(this + 1) + upvarsOffset);
+ }
+
+ JSObjectArray *regexps() {
+ JS_ASSERT(isValidOffset(regexpsOffset));
+- return (JSObjectArray *) ((uint8 *) (this + 1) + regexpsOffset);
++ return reinterpret_cast<JSObjectArray *>(uintptr_t(this + 1) + regexpsOffset);
+ }
+
+ JSTryNoteArray *trynotes() {
+ JS_ASSERT(isValidOffset(trynotesOffset));
+- return (JSTryNoteArray *) ((uint8 *) (this + 1) + trynotesOffset);
++ return reinterpret_cast<JSTryNoteArray *>(uintptr_t(this + 1) + trynotesOffset);
+ }
+
+ js::GlobalSlotArray *globals() {
+ JS_ASSERT(isValidOffset(globalsOffset));
+- return (js::GlobalSlotArray *) ((uint8 *) (this + 1) + globalsOffset);
++ return reinterpret_cast<js::GlobalSlotArray *>(uintptr_t(this + 1) + globalsOffset);
+ }
+
+ JSConstArray *consts() {
+ JS_ASSERT(isValidOffset(constOffset));
+- return (JSConstArray *) ((uint8 *) (this + 1) + constOffset);
++ return reinterpret_cast<JSConstArray *>(uintptr_t(this + 1) + constOffset);
+ }
+
+ JSAtom *getAtom(size_t index) {
diff --git a/lang/spidermonkey185/files/patch-jsstr.cpp b/lang/spidermonkey185/files/patch-jsstr.cpp
new file mode 100644
index 000000000000..13ab1ee9f3d4
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-jsstr.cpp
@@ -0,0 +1,36 @@
+# HG changeset patch
+# User Ehsan Akhgari <ehsan@mozilla.com>
+# Date 1308517488 14400
+# Node ID 284ebc48b2cb8e35dc04482ede700e717d8d214f
+# Parent cecc5adfc44068fb6f11b9baa78cb5fddc100b27
+Bug 662961 - Silence the clang warnings issued because of alignment requirements increase when compiling jsstr.cpp; r=Waldo
+
+--- ./jsstr.cpp.orig 2013-05-26 00:44:33.383765764 +1000
++++ ./jsstr.cpp 2013-05-26 00:46:35.842211859 +1000
+@@ -3147,7 +3147,7 @@
+ */
+ #define R(c) { \
+ BUILD_LENGTH_AND_FLAGS(1, JSString::FLAT | JSString::ATOMIZED), \
+- { (jschar *)(((char *)(unitStringTable + (c))) + \
++ { (jschar *)(uintptr_t(unitStringTable + (c)) + \
+ offsetof(JSString, inlineStorage)) }, \
+ { {(c), 0x00} } }
+
+@@ -3207,7 +3207,7 @@
+ */
+ #define R(c) { \
+ BUILD_LENGTH_AND_FLAGS(2, JSString::FLAT | JSString::ATOMIZED), \
+- { (jschar *)(((char *)(length2StringTable + (c))) + \
++ { (jschar *)(uintptr_t(length2StringTable + (c)) + \
+ offsetof(JSString, inlineStorage)) }, \
+ { {FROM_SMALL_CHAR((c) >> 6), FROM_SMALL_CHAR((c) & 0x3F), 0x00} } }
+
+@@ -3240,7 +3240,7 @@
+ */
+ #define R(c) { \
+ BUILD_LENGTH_AND_FLAGS(3, JSString::FLAT | JSString::ATOMIZED), \
+- { (jschar *)(((char *)(hundredStringTable + ((c) - 100))) + \
++ { (jschar *)(uintptr_t(hundredStringTable + ((c) - 100)) + \
+ offsetof(JSString, inlineStorage)) }, \
+ { {((c) / 100) + '0', ((c) / 10 % 10) + '0', ((c) % 10) + '0', 0x00} } }
+
diff --git a/lang/spidermonkey185/files/patch-nanojit_CodeAlloc.cpp b/lang/spidermonkey185/files/patch-nanojit_CodeAlloc.cpp
new file mode 100644
index 000000000000..52c65c0e9624
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-nanojit_CodeAlloc.cpp
@@ -0,0 +1,10 @@
+--- nanojit/CodeAlloc.cpp.orig 2016-09-07 UTC
++++ nanojit/CodeAlloc.cpp
+@@ -261,7 +261,6 @@ namespace nanojit
+ #endif
+
+ #if defined(AVMPLUS_UNIX) && defined(NANOJIT_ARM)
+-#include <asm/unistd.h>
+ extern "C" void __clear_cache(char *BEG, char *END);
+ #endif
+
diff --git a/lang/spidermonkey185/files/patch-nanojit_njcpudetect.h b/lang/spidermonkey185/files/patch-nanojit_njcpudetect.h
new file mode 100644
index 000000000000..4a26a07ab688
--- /dev/null
+++ b/lang/spidermonkey185/files/patch-nanojit_njcpudetect.h
@@ -0,0 +1,11 @@
+--- nanojit/njcpudetect.h.orig 2016-09-07 UTC
++++ nanojit/njcpudetect.h
+@@ -77,6 +77,8 @@
+ #elif defined(__ARM_ARCH_6__) || \
+ defined(__ARM_ARCH_6J__) || \
+ defined(__ARM_ARCH_6T2__) || \
++ defined(__ARM_ARCH_6K__) || \
++ defined(__ARM_ARCH_6KZ__) || \
+ defined(__ARM_ARCH_6Z__) || \
+ defined(__ARM_ARCH_6ZK__) || \
+ defined(__ARM_ARCH_6M__) || \
diff --git a/lang/spidermonkey185/pkg-descr b/lang/spidermonkey185/pkg-descr
new file mode 100644
index 000000000000..db4318240eed
--- /dev/null
+++ b/lang/spidermonkey185/pkg-descr
@@ -0,0 +1,3 @@
+Spidermonkey is the JavaScript interpreter from the Mozilla project.
+
+WWW: http://www.mozilla.org/js/spidermonkey/
diff --git a/lang/spidermonkey185/pkg-plist b/lang/spidermonkey185/pkg-plist
new file mode 100644
index 000000000000..f7735572dd26
--- /dev/null
+++ b/lang/spidermonkey185/pkg-plist
@@ -0,0 +1,106 @@
+bin/js-config
+include/js/Allocator.h
+include/js/Assembler.h
+include/js/CodeAlloc.h
+include/js/Containers.h
+include/js/Fragmento.h
+include/js/LIR.h
+include/js/LIRopcode.tbl
+include/js/Native.h
+include/js/NativeCommon.h
+%%ARM%%/include/js/NativeARM.h
+%%MIPS%%/include/js/NativeMIPS.h
+%%PPC%%/include/js/NativePPC.h
+%%SPARC%%/include/js/NativeSparc.h
+%%AMD64%%include/js/NativeX64.h
+%%I386%%include/js/Nativei386.h
+include/js/RegAlloc.h
+include/js/VMPI.h
+include/js/Writer.h
+include/js/avmplus.h
+include/js/js-config.h
+include/js/js.msg
+include/js/jsanalyze.h
+include/js/jsapi.h
+include/js/jsarena.h
+include/js/jsarray.h
+include/js/jsatom.h
+include/js/jsautocfg.h
+include/js/jsautokw.h
+include/js/jsbit.h
+include/js/jsbool.h
+include/js/jsbuiltins.h
+include/js/jscell.h
+include/js/jsclist.h
+include/js/jsclone.h
+include/js/jscntxt.h
+include/js/jscompartment.h
+include/js/jscompat.h
+include/js/jsdate.h
+include/js/jsdbgapi.h
+include/js/jsdhash.h
+include/js/jsdtoa.h
+include/js/jsemit.h
+include/js/jsfriendapi.h
+include/js/jsfun.h
+include/js/jsgc.h
+include/js/jsgcchunk.h
+include/js/jsgcstats.h
+include/js/jshash.h
+include/js/jshashtable.h
+include/js/jshotloop.h
+include/js/jsinterp.h
+include/js/jsinttypes.h
+include/js/jsiter.h
+include/js/jslock.h
+include/js/jslong.h
+include/js/jsmath.h
+include/js/jsobj.h
+include/js/jsobjinlines.h
+include/js/json.h
+include/js/jsopcode.h
+include/js/jsopcode.tbl
+include/js/jsopcodeinlines.h
+include/js/jsotypes.h
+include/js/jsparse.h
+include/js/jsperf.h
+include/js/jsprf.h
+include/js/jsprobes.h
+include/js/jspropertycache.h
+include/js/jspropertycacheinlines.h
+include/js/jspropertytree.h
+include/js/jsproto.tbl
+include/js/jsproxy.h
+include/js/jsprvtd.h
+include/js/jspubtd.h
+include/js/jsreflect.h
+include/js/jsregexp.h
+include/js/jsscan.h
+include/js/jsscope.h
+include/js/jsscript.h
+include/js/jsscriptinlines.h
+include/js/jsstaticcheck.h
+include/js/jsstdint.h
+include/js/jsstr.h
+include/js/jstl.h
+include/js/jstracer.h
+include/js/jstypedarray.h
+include/js/jstypes.h
+include/js/jsutil.h
+include/js/jsval.h
+include/js/jsvalue.h
+include/js/jsvector.h
+include/js/jsversion.h
+include/js/jswrapper.h
+include/js/jsxdrapi.h
+include/js/jsxml.h
+include/js/nanojit.h
+include/js/njconfig.h
+include/js/njcpudetect.h
+include/js/prmjtime.h
+lib/libmozjs185.so
+lib/libmozjs185-1.0.a
+lib/libmozjs185.so.1.0.0
+lib/libmozjs185.so.1.0
+lib/libmozjs185.so.1
+libdata/pkgconfig/mozjs185.pc
diff --git a/lang/spidermonkey24/Makefile b/lang/spidermonkey24/Makefile
new file mode 100644
index 000000000000..8472e48fe901
--- /dev/null
+++ b/lang/spidermonkey24/Makefile
@@ -0,0 +1,82 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= spidermonkey24
+PORTVERSION= 24.2.0
+PORTREVISION= 12
+CATEGORIES= lang
+MASTER_SITES= MOZILLA/js
+#http://people.mozilla.org/~sstangl/
+DISTNAME= mozjs-${PORTVERSION}
+
+MAINTAINER= kwm@FreeBSD.org
+COMMENT= Standalone JavaScript based from Mozilla 24-esr
+
+BUILD_DEPENDS= zip:archivers/zip
+LIB_DEPENDS= libnspr4.so:devel/nspr
+
+GNU_CONFIGURE= yes
+USES= compiler:c++11-lib gmake pathfix perl5 python:2.7,build \
+ readline tar:bzip2
+USE_PERL5= build
+USE_LDCONFIG= yes
+
+WRKSRC= ${WRKDIR}/mozjs-${PORTVERSION}/js/src
+
+CONFIGURE_ARGS= --with-pthreads \
+ --with-system-nspr
+
+OPTIONS_DEFINE= DEBUG GCZEAL JEMALLOC METHODJIT OPTIMIZE READLINE \
+ THREADSAFE TRACEJIT UTF8 DTRACE
+OPTIONS_DEFAULT= METHODJIT OPTIMIZE READLINE THREADSAFE TRACEJIT
+# ld(1) fails to link probes: Relocations in generic ELF (EM: 0)
+OPTIONS_EXCLUDE_aarch64= DTRACE
+# dt_modtext:opensolaris/lib/libdtrace/common/dt_link.c: arm not implemented
+OPTIONS_EXCLUDE_armv6= DTRACE
+OPTIONS_EXCLUDE_armv7= DTRACE
+OPTIONS_SUB= yes
+
+DEBUG_CONFIGURE_ENABLE= debug debug-symbols
+DTRACE_CONFIGURE_ENABLE=dtrace profiling
+DTRACE_LIBS= -lelf
+GCZEAL_DESC= Enable Zealous garbage collecting
+GCZEAL_CONFIGURE_ENABLE=gczeal
+JEMALLOC_DESC= Use jemalloc as memory allocator
+JEMALLOC_CONFIGURE_ENABLE= jemalloc
+METHODJIT_DESC= Enable method JIT support
+METHODJIT_CONFIGURE_ENABLE= methodjit
+OPTIMIZE_DESC= Enable compiler optimizations
+OPTIMIZE_CONFIGURE_ENABLE= optimize
+READLINE_DESC= Link js shell to system readline library
+READLINE_CONFIGURE_ENABLE= readline
+THREADSAFE_DESC= Enable multiple thread support
+THREADSAFE_CONFIGURE_ENABLE= threadsafe
+TRACEJIT_DESC= Enable tracing JIT support
+TRACEJIT_CONFIGURE_ENABLE= tracejit
+UTF8_DESC= Treat strings as UTF8 instead of ISO-8859-1
+UTF8_CFLAGS= -DJS_C_STRINGS_ARE_UTF8
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET= x86_64-portbld-freebsd${OSREL}
+.endif
+
+do-test:
+ @${ECHO_MSG} -n "===> Running jstests.py: "
+ @cd ${WRKSRC} && ${SETENV} TZ=PST8PDT ${PYTHON_CMD} tests/jstests.py \
+ --no-progress ./js24
+.if ${PORT_OPTIONS:MMETHODJIT} || ${PORT_OPTIONS:MTRACEJIT}
+ @${ECHO_MSG} -n "===> Running jit_test.py: "
+ @cd ${WRKSRC} && ${SETENV} TZ=PST8PDT ${PYTHON_CMD} jit-test/jit_test.py \
+ --no-progress --jitflags=,m,j,mj,mjp,am,amj,amjp,amd ./js24
+.endif
+
+post-install:
+ ${LN} -s libmozjs-24.so ${STAGEDIR}${PREFIX}/lib/libmozjs-24.so.1
+.if ! ${PORT_OPTIONS:MDTRACE}
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/js24
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libmozjs-24.*
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/lang/spidermonkey24/distinfo b/lang/spidermonkey24/distinfo
new file mode 100644
index 000000000000..c60b5a9174b7
--- /dev/null
+++ b/lang/spidermonkey24/distinfo
@@ -0,0 +1,2 @@
+SHA256 (mozjs-24.2.0.tar.bz2) = e62f3f331ddd90df1e238c09d61a505c516fe9fd8c5c95336611d191d18437d8
+SIZE (mozjs-24.2.0.tar.bz2) = 15624530
diff --git a/lang/spidermonkey24/files/patch-assembler_jit_ExecutableAllocator.h b/lang/spidermonkey24/files/patch-assembler_jit_ExecutableAllocator.h
new file mode 100644
index 000000000000..21c71cee6d1f
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-assembler_jit_ExecutableAllocator.h
@@ -0,0 +1,14 @@
+--- assembler/jit/ExecutableAllocator.h.orig 2013-10-29 20:40:26 UTC
++++ assembler/jit/ExecutableAllocator.h
+@@ -477,6 +477,11 @@ public:
+ {
+ sync_instruction_memory((caddr_t)code, size);
+ }
++#elif CPU(ARM_TRADITIONAL) && OS(FREEBSD) && COMPILER(CLANG)
++ static void cacheFlush(void* code, size_t size)
++ {
++ __clear_cache(code, reinterpret_cast<char*>(code) + size);
++ }
+ #endif
+
+ private:
diff --git a/lang/spidermonkey24/files/patch-assembler_wtf_Platform.h b/lang/spidermonkey24/files/patch-assembler_wtf_Platform.h
new file mode 100644
index 000000000000..033de00687d2
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-assembler_wtf_Platform.h
@@ -0,0 +1,18 @@
+--- assembler/wtf/Platform.h.orig 2016-12-23 16:20:31 UTC
++++ assembler/wtf/Platform.h
+@@ -269,6 +269,7 @@
+ #elif defined(__ARM_ARCH_6__) \
+ || defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) \
++ || defined(__ARM_ARCH_6KZ__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6T2__) \
+@@ -306,6 +307,7 @@
+
+ #elif defined(__ARM_ARCH_6J__) \
+ || defined(__ARM_ARCH_6K__) \
++ || defined(__ARM_ARCH_6KZ__) \
+ || defined(__ARM_ARCH_6Z__) \
+ || defined(__ARM_ARCH_6ZK__) \
+ || defined(__ARM_ARCH_6M__)
diff --git a/lang/spidermonkey24/files/patch-bug1012971 b/lang/spidermonkey24/files/patch-bug1012971
new file mode 100644
index 000000000000..10dae0ec9b0f
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-bug1012971
@@ -0,0 +1,32 @@
+commit ad6d8397a05a
+Author: Dan Gohman <sunfish@mozilla.com>
+Date: Thu May 22 11:15:06 2014 -0700
+
+ Bug 1012971 - SpiderMonkey: Fix various warnings. r=nbp
+---
+ js/public/RootingAPI.h | 4 +++-
+ js/src/configure.in | 1 +
+ js/src/jit/IonFrames.h | 17 ++++++++---------
+ js/src/jit/MIR.h | 12 +++++-------
+ js/src/jit/PerfSpewer.cpp | 12 ++++++------
+ js/src/jit/RegisterSets.h | 2 +-
+ js/src/jscntxt.h | 2 +-
+ js/src/jsgcinlines.h | 4 ++--
+ js/src/jsopcode.cpp | 2 +-
+ js/src/jsscript.cpp | 6 +++---
+ js/src/shell/js.cpp | 2 +-
+ js/src/vm/ArrayBufferObject.h | 16 ++++++++--------
+ js/src/vm/TypedArrayObject.cpp | 26 +++++++++++++-------------
+ 13 files changed, 53 insertions(+), 53 deletions(-)
+
+--- jsopcode.cpp.orig 2013-02-11 22:33:23 UTC
++++ jsopcode.cpp
+@@ -6067,7 +6067,7 @@ ExpressionDecompiler::write(JSString *s)
+ bool
+ ExpressionDecompiler::quote(JSString *s, uint32_t quote)
+ {
+- return QuoteString(&sprinter, s, quote) >= 0;
++ return QuoteString(&sprinter, s, quote) != NULL;
+ }
+
+ JSAtom *
diff --git a/lang/spidermonkey24/files/patch-bug1041795 b/lang/spidermonkey24/files/patch-bug1041795
new file mode 100644
index 000000000000..0f527f34f9ca
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-bug1041795
@@ -0,0 +1,35 @@
+diff --git js/src/config/rules.mk js/src/config/rules.mk
+index 4d67eda..783942f 100644
+--- config/rules.mk
++++ config/rules.mk
+@@ -858,7 +858,7 @@ ifdef DTRACE_PROBE_OBJ
+ ifndef DTRACE_LIB_DEPENDENT
+ NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS))
+ $(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS)
+- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
++ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
+ endif
+ endif
+ endif
+@@ -876,7 +876,7 @@ ifndef INCREMENTAL_LINKER
+ endif
+ ifdef DTRACE_LIB_DEPENDENT
+ ifndef XP_MACOSX
+- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
++ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
+ endif
+ $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
+ @$(RM) $(DTRACE_PROBE_OBJ)
+diff --git js/src/Makefile.in js/src/Makefile.in
+index 28ca5e8..96793d7 100644
+--- Makefile.in
++++ Makefile.in
+@@ -342,7 +342,7 @@ endif
+
+ ifdef HAVE_DTRACE
+ $(CURDIR)/javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
+- dtrace -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
++ dtrace -x nolibs -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
+ sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
+ -e '/const/!s/char \*/const char */g' \
+ javascript-trace.h.in > javascript-trace.h
diff --git a/lang/spidermonkey24/files/patch-bug1046224 b/lang/spidermonkey24/files/patch-bug1046224
new file mode 100644
index 000000000000..c7a3de4a60a4
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-bug1046224
@@ -0,0 +1,32 @@
+diff --git js/src/configure js/src/configure
+index 59d69c7..779a50f 100644
+--- configure
++++ configure
+@@ -10260,7 +10260,13 @@ cross_compiling=$ac_cv_prog_cc_cross
+ # Check whether --enable-dtrace or --disable-dtrace was given.
+ if test "${enable_dtrace+set}" = set; then
+ enableval="$enable_dtrace"
+- enable_dtrace="yes"
++ if test "$enableval" = "yes"; then
++ enable_dtrace="yes"
++ elif test "$enableval" = "no"; then
++ :
++ else
++ { echo "configure: error: Option, dtrace, does not take an argument ($enableval)." 1>&2; exit 1; }
++ fi
+ fi
+
+ if test "x$enable_dtrace" = "xyes"; then
+diff --git js/src/configure.in js/src/configure.in
+index 59d69c7..779a50f 100644
+--- configure.in
++++ configure.in
+@@ -2153,7 +2153,7 @@ dnl Quota support
+ MOZ_CHECK_HEADERS(sys/quota.h)
+ MOZ_CHECK_HEADERS(linux/quota.h)
+
+-AC_ARG_ENABLE(dtrace,
++MOZ_ARG_ENABLE_BOOL(dtrace,
+ [ --enable-dtrace build with dtrace support if available (default=no)],
+ [enable_dtrace="yes"],)
+ if test "x$enable_dtrace" = "xyes"; then
diff --git a/lang/spidermonkey24/files/patch-bug702179 b/lang/spidermonkey24/files/patch-bug702179
new file mode 100644
index 000000000000..959ceed753e7
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-bug702179
@@ -0,0 +1,23 @@
+diff --git js/src/Makefile.in js/src/Makefile.in
+index e28160a..28ca5e8 100644
+--- Makefile.in
++++ Makefile.in
+@@ -35,7 +35,6 @@ ifdef JS_SHARED_LIBRARY
+ FORCE_SHARED_LIB = 1
+ endif
+ FORCE_STATIC_LIB = 1
+-DIST_INSTALL = 1
+
+ ###############################################
+ # BEGIN include sources for low-level code shared with mfbt
+@@ -584,8 +584,8 @@ install:: $(EXPORTS_mozilla)
+ install:: $(SCRIPTS)
+ $(SYSINSTALL) $^ $(DESTDIR)$(bindir)
+
+-install:: $(REAL_LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY)
+-ifneq (,$(REAL_LIBRARY))
++install:: $(LIBRARY) $(SHARED_LIBRARY) $(IMPORT_LIBRARY)
++ifdef DIST_INSTALL
+ $(SYSINSTALL) $(REAL_LIBRARY) $(DESTDIR)$(libdir)
+ mv -f $(DESTDIR)$(libdir)/$(REAL_LIBRARY) $(subst $(STATIC_LIBRARY_NAME),$(LIBRARY_NAME),$(DESTDIR)$(libdir)/$(REAL_LIBRARY))
+ endif
diff --git a/lang/spidermonkey24/files/patch-bug894240 b/lang/spidermonkey24/files/patch-bug894240
new file mode 100644
index 000000000000..a805435382d0
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-bug894240
@@ -0,0 +1,20 @@
+commit 19a4ba5c90a9
+Author: Mike Hommey <mh+mozilla@glandium.org>
+Date: Wed Jul 17 16:16:55 2013 +0900
+
+ Bug 894240 - Fix pointer dereference in js::cli::OptionParser::extractValue. r=Waldo
+---
+ js/src/shell/jsoptparse.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- shell/jsoptparse.cpp.orig 2013-10-29 20:40:20 UTC
++++ shell/jsoptparse.cpp
+@@ -253,7 +253,7 @@ OptionParser::extractValue(size_t argc, char **argv, s
+ char *eq = strchr(argv[*i], '=');
+ if (eq) {
+ *value = eq + 1;
+- if (value[0] == '\0')
++ if (*value[0] == '\0')
+ return error("A value is required for option %.*s", eq - argv[*i], argv[*i]);
+ return Okay;
+ }
diff --git a/lang/spidermonkey24/files/patch-config_milestone.pl b/lang/spidermonkey24/files/patch-config_milestone.pl
new file mode 100644
index 000000000000..9c4c2f0fd68e
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-config_milestone.pl
@@ -0,0 +1,11 @@
+--- config/milestone.pl.orig 2013-11-19 19:42:43 UTC
++++ config/milestone.pl
+@@ -56,7 +56,7 @@ $MILESTONE_FILE = "$TOPSRCDIR/config/mi
+ #
+ my $milestone = Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
+
+-if (defined(@TEMPLATE_FILE)) {
++if (@TEMPLATE_FILE) {
+ my $TFILE;
+
+ foreach $TFILE (@TEMPLATE_FILE) {
diff --git a/lang/spidermonkey24/files/patch-jit_AsmJSSignalHandlers.cpp b/lang/spidermonkey24/files/patch-jit_AsmJSSignalHandlers.cpp
new file mode 100644
index 000000000000..eae20ed8fd1b
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-jit_AsmJSSignalHandlers.cpp
@@ -0,0 +1,67 @@
+https://hg.mozilla.org/mozilla-central/rev/07ce4364fbec
+
+--- jit/AsmJSSignalHandlers.cpp.orig 2013-10-29 21:40:19.000000000 +0100
++++ jit/AsmJSSignalHandlers.cpp 2015-01-25 11:23:43.104097667 +0100
+@@ -64,7 +64,6 @@
+ # endif
+ # define EIP_sig(p) ((p)->uc_mcontext.gregs[REG_EIP])
+ # define RIP_sig(p) ((p)->uc_mcontext.gregs[REG_RIP])
+-# define PC_sig(p) ((p)->uc_mcontext.arm_pc)
+ # define RAX_sig(p) ((p)->uc_mcontext.gregs[REG_RAX])
+ # define RCX_sig(p) ((p)->uc_mcontext.gregs[REG_RCX])
+ # define RDX_sig(p) ((p)->uc_mcontext.gregs[REG_RDX])
+@@ -80,7 +79,11 @@
+ # define R12_sig(p) ((p)->uc_mcontext.gregs[REG_R12])
+ # define R13_sig(p) ((p)->uc_mcontext.gregs[REG_R13])
+ # define R14_sig(p) ((p)->uc_mcontext.gregs[REG_R14])
+-# define R15_sig(p) ((p)->uc_mcontext.gregs[REG_R15])
++# if defined(__linux__) && defined(__arm__)
++# define R15_sig(p) ((p)->uc_mcontext.arm_pc)
++# else
++# define R15_sig(p) ((p)->uc_mcontext.gregs[REG_R15])
++# endif
+ #elif defined(__NetBSD__)
+ # define XMM_sig(p,i) (((struct fxsave64 *)(p)->uc_mcontext.__fpregs)->fx_xmm[i])
+ # define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP])
+@@ -124,7 +127,11 @@
+ # define R12_sig(p) ((p)->uc_mcontext.mc_r12)
+ # define R13_sig(p) ((p)->uc_mcontext.mc_r13)
+ # define R14_sig(p) ((p)->uc_mcontext.mc_r14)
+-# define R15_sig(p) ((p)->uc_mcontext.mc_r15)
++# if defined(__FreeBSD__) && defined(__arm__)
++# define R15_sig(p) ((p)->uc_mcontext.__gregs[_REG_R15])
++# else
++# define R15_sig(p) ((p)->uc_mcontext.mc_r15)
++# endif
+ #elif defined(XP_MACOSX)
+ // Mach requires special treatment.
+ #else
+@@ -325,20 +332,20 @@
+ # define CONTEXT ucontext_t
+ # endif
+
++#if defined(JS_CPU_X64)
++# define PC_sig(p) RIP_sig(p)
++#elif defined(JS_CPU_X86)
++# define PC_sig(p) EIP_sig(p)
++#elif defined(JS_CPU_ARM)
++# define PC_sig(p) R15_sig(p)
++#endif
++
+ # if !defined(XP_MACOSX)
+ static uint8_t **
+ ContextToPC(CONTEXT *context)
+ {
+-# if defined(JS_CPU_X64)
+- JS_STATIC_ASSERT(sizeof(RIP_sig(context)) == sizeof(void*));
+- return reinterpret_cast<uint8_t**>(&RIP_sig(context));
+-# elif defined(JS_CPU_X86)
+- JS_STATIC_ASSERT(sizeof(EIP_sig(context)) == sizeof(void*));
+- return reinterpret_cast<uint8_t**>(&EIP_sig(context));
+-# elif defined(JS_CPU_ARM)
+ JS_STATIC_ASSERT(sizeof(PC_sig(context)) == sizeof(void*));
+ return reinterpret_cast<uint8_t**>(&PC_sig(context));
+-# endif
+ }
+
+ # if defined(JS_CPU_X64)
diff --git a/lang/spidermonkey24/files/patch-jit_arm_Architecture-arm.cpp b/lang/spidermonkey24/files/patch-jit_arm_Architecture-arm.cpp
new file mode 100644
index 000000000000..57ce2f2f40ea
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-jit_arm_Architecture-arm.cpp
@@ -0,0 +1,11 @@
+--- jit/arm/Architecture-arm.cpp.orig 2013-10-29 20:40:20 UTC
++++ jit/arm/Architecture-arm.cpp
+@@ -15,7 +15,7 @@
+
+ // lame check for kernel version
+ // see bug 586550
+-#if !(defined(ANDROID) || defined(MOZ_B2G))
++#if !(defined(ANDROID) || defined(MOZ_B2G) || defined(__FreeBSD__))
+ #include <asm/hwcap.h>
+ #else
+ #define HWCAP_VFP (1<<0)
diff --git a/lang/spidermonkey24/files/patch-mfbt_Types.h b/lang/spidermonkey24/files/patch-mfbt_Types.h
new file mode 100644
index 000000000000..7cfdf5e60b67
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-mfbt_Types.h
@@ -0,0 +1,12 @@
+--- ../../mfbt/Types.h.orig 2013-10-29 20:40:19 UTC
++++ ../../mfbt/Types.h
+@@ -138,7 +138,9 @@
+ */
+ #if defined(__GNUC__) && defined(__cplusplus) && \
+ !defined(__GXX_EXPERIMENTAL_CXX0X__) && __cplusplus < 201103L
++# ifndef decltype
+ # define decltype __typeof__
++# endif
+ #endif
+
+ #endif /* mozilla_Types_h_ */
diff --git a/lang/spidermonkey24/files/patch-utils.h b/lang/spidermonkey24/files/patch-utils.h
new file mode 100644
index 000000000000..364eb20cd555
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-utils.h
@@ -0,0 +1,12 @@
+--- ../../mfbt/double-conversion/utils.h.orig 2016-01-04 09:48:39.700168000 +0000
++++ ../../mfbt/double-conversion/utils.h 2016-01-04 09:49:18.136290000 +0000
+@@ -58,7 +58,8 @@
+ defined(__mips__) || defined(__powerpc__) || \
+ defined(__sparc__) || defined(__sparc) || defined(__s390__) || \
+ defined(__SH4__) || defined(__alpha__) || \
+- defined(_MIPS_ARCH_MIPS32R2)
++ defined(_MIPS_ARCH_MIPS32R2) || \
++ defined(__AARCH64EL__)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
+ #if defined(_WIN32)
diff --git a/lang/spidermonkey24/files/patch-vm_NumericConversions.h b/lang/spidermonkey24/files/patch-vm_NumericConversions.h
new file mode 100644
index 000000000000..322ee644aafa
--- /dev/null
+++ b/lang/spidermonkey24/files/patch-vm_NumericConversions.h
@@ -0,0 +1,11 @@
+--- vm/NumericConversions.h.orig 2016-12-23 16:23:54 UTC
++++ vm/NumericConversions.h
+@@ -132,7 +132,7 @@ ToIntWidth(double d)
+ inline int32_t
+ ToInt32(double d)
+ {
+-#if defined (__arm__) && defined (__GNUC__)
++#if defined (__arm__) && defined (__GNUC__) && !defined(__clang__)
+ int32_t i;
+ uint32_t tmp0;
+ uint32_t tmp1;
diff --git a/lang/spidermonkey24/pkg-descr b/lang/spidermonkey24/pkg-descr
new file mode 100644
index 000000000000..db4318240eed
--- /dev/null
+++ b/lang/spidermonkey24/pkg-descr
@@ -0,0 +1,3 @@
+Spidermonkey is the JavaScript interpreter from the Mozilla project.
+
+WWW: http://www.mozilla.org/js/spidermonkey/
diff --git a/lang/spidermonkey24/pkg-plist b/lang/spidermonkey24/pkg-plist
new file mode 100644
index 000000000000..c5ecdeabb657
--- /dev/null
+++ b/lang/spidermonkey24/pkg-plist
@@ -0,0 +1,80 @@
+bin/js24
+bin/js24-config
+%%DTRACE%%include/mozjs-24/javascript-trace.h
+include/mozjs-24/js-config.h
+include/mozjs-24/js.msg
+include/mozjs-24/js/Anchor.h
+include/mozjs-24/js/CallArgs.h
+include/mozjs-24/js/CharacterEncoding.h
+include/mozjs-24/js/Date.h
+include/mozjs-24/js/GCAPI.h
+include/mozjs-24/js/HashTable.h
+include/mozjs-24/js/HeapAPI.h
+include/mozjs-24/js/LegacyIntTypes.h
+include/mozjs-24/js/MemoryMetrics.h
+include/mozjs-24/js/PropertyKey.h
+include/mozjs-24/js/RequiredDefines.h
+include/mozjs-24/js/RootingAPI.h
+include/mozjs-24/js/TemplateLib.h
+include/mozjs-24/js/Utility.h
+include/mozjs-24/js/Value.h
+include/mozjs-24/js/Vector.h
+include/mozjs-24/jsalloc.h
+include/mozjs-24/jsapi.h
+include/mozjs-24/jsclass.h
+include/mozjs-24/jsclist.h
+include/mozjs-24/jscpucfg.h
+include/mozjs-24/jsdbgapi.h
+include/mozjs-24/jsfriendapi.h
+include/mozjs-24/jslock.h
+include/mozjs-24/jsperf.h
+include/mozjs-24/jsprf.h
+include/mozjs-24/jsprototypes.h
+include/mozjs-24/jsproxy.h
+include/mozjs-24/jsprvtd.h
+include/mozjs-24/jspubtd.h
+include/mozjs-24/jstypes.h
+include/mozjs-24/jsutil.h
+include/mozjs-24/jsversion.h
+include/mozjs-24/jswrapper.h
+include/mozjs-24/mozilla/Assertions.h
+include/mozjs-24/mozilla/Atomics.h
+include/mozjs-24/mozilla/Attributes.h
+include/mozjs-24/mozilla/BloomFilter.h
+include/mozjs-24/mozilla/Casting.h
+include/mozjs-24/mozilla/Char16.h
+include/mozjs-24/mozilla/CheckedInt.h
+include/mozjs-24/mozilla/Compiler.h
+include/mozjs-24/mozilla/Constants.h
+include/mozjs-24/mozilla/DebugOnly.h
+include/mozjs-24/mozilla/Decimal.h
+include/mozjs-24/mozilla/Endian.h
+include/mozjs-24/mozilla/EnumSet.h
+include/mozjs-24/mozilla/FloatingPoint.h
+include/mozjs-24/mozilla/GuardObjects.h
+include/mozjs-24/mozilla/HashFunctions.h
+include/mozjs-24/mozilla/Likely.h
+include/mozjs-24/mozilla/LinkedList.h
+include/mozjs-24/mozilla/MSStdInt.h
+include/mozjs-24/mozilla/MathAlgorithms.h
+include/mozjs-24/mozilla/MemoryChecking.h
+include/mozjs-24/mozilla/NullPtr.h
+include/mozjs-24/mozilla/PodOperations.h
+include/mozjs-24/mozilla/Poison.h
+include/mozjs-24/mozilla/Range.h
+include/mozjs-24/mozilla/RangedPtr.h
+include/mozjs-24/mozilla/RefPtr.h
+include/mozjs-24/mozilla/SHA1.h
+include/mozjs-24/mozilla/Scoped.h
+include/mozjs-24/mozilla/SplayTree.h
+include/mozjs-24/mozilla/StandardInteger.h
+include/mozjs-24/mozilla/ThreadLocal.h
+include/mozjs-24/mozilla/TypeTraits.h
+include/mozjs-24/mozilla/TypedEnum.h
+include/mozjs-24/mozilla/Types.h
+include/mozjs-24/mozilla/Util.h
+include/mozjs-24/mozilla/WeakPtr.h
+@comment lib/libmozjs-24.a
+lib/libmozjs-24.so
+lib/libmozjs-24.so.1
+libdata/pkgconfig/mozjs-24.pc
diff --git a/lang/spidermonkey52/Makefile b/lang/spidermonkey52/Makefile
new file mode 100644
index 000000000000..9f5184078126
--- /dev/null
+++ b/lang/spidermonkey52/Makefile
@@ -0,0 +1,101 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= spidermonkey
+PORTVERSION= 52.9.0
+PORTREVISION= 9
+CATEGORIES= lang
+MASTER_SITES= MOZILLA/firefox/releases/${PORTVERSION}esr/source
+PKGNAMESUFFIX= ${SP_VER}
+DISTNAME= firefox-${PORTVERSION}esr.source
+
+MAINTAINER= kwm@FreeBSD.org
+COMMENT= Standalone JavaScript based from Mozilla 52-esr
+
+BUILD_DEPENDS= autoconf-2.13:devel/autoconf213
+LIB_DEPENDS= libnspr4.so:devel/nspr \
+ libffi.so:devel/libffi \
+ libicudata.so:devel/icu
+
+HAS_CONFIGURE= yes
+USES= compiler:c++14-lang gmake localbase pathfix pkgconfig \
+ python:2.7,build tar:xz
+# python:2.7,build readline tar:xz
+USE_LDCONFIG= yes
+SP_VER= 52
+
+WRKSRC= ${WRKDIR}/firefox-${PORTVERSION}esr/js/src
+PATCH_WRKSRC= ${WRKDIR}/firefox-${PORTVERSION}esr/
+INCLUDE= .cargo Makefile.in build* config* gradle* js memory nsprpub/config
+INCLUDE+= mfbt modules moz* python taskcluster testing
+EXTRACT_AFTER_ARGS+= ${INCLUDE:S|^|firefox-${PORTVERSION}esr/|}
+
+CONFIGURE_ARGS= --with-pthreads \
+ --prefix=${PREFIX:Q} \
+ --target=${CONFIGURE_TARGET} \
+ --with-intl-api \
+ --with-system-zlib \
+ --disable-gold \
+ --with-system-icu \
+ --with-system-nspr
+CONFIGURE_ENV= HOST_CC=${CC} HOST_CXX=${CXX}
+
+OPTIONS_DEFINE= DEBUG GCZEAL JEMALLOC OPTIMIZE READLINE UTF8 DTRACE
+OPTIONS_DEFAULT=METHODJIT OPTIMIZE READLINE
+OPTIONS_SUB= yes
+
+DEBUG_CONFIGURE_ENABLE= debug debug-symbols
+
+DTRACE_CONFIGURE_ENABLE=dtrace profiling
+DTRACE_LIBS= -lelf
+
+GCZEAL_DESC= Enable Zealous garbage collecting
+GCZEAL_CONFIGURE_ENABLE=gczeal
+
+JEMALLOC_DESC= Use jemalloc as memory allocator
+JEMALLOC_CONFIGURE_ENABLE= jemalloc
+
+OPTIMIZE_DESC= Enable compiler optimizations
+OPTIMIZE_CONFIGURE_ENABLE= optimize
+
+READLINE_DESC= Link js shell to the readline library
+READLINE_USES= readline
+READLINE_CONFIGURE_ENABLE= readline
+
+UTF8_DESC= Treat strings as UTF8 instead of ISO-8859-1
+UTF8_CFLAGS= -DJS_C_STRINGS_ARE_UTF8
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET=x86_64-portbld-freebsd${OSREL}
+.endif
+
+post-patch:
+# Skip some tests because bundled icu differs from system
+ @${RM} ${WRKSRC}/tests/Intl/Date/toLocaleDateString_timeZone.js \
+ ${WRKSRC}/tests/Intl/DateTimeFormat/format.js \
+ ${WRKSRC}/tests/Intl/DateTimeFormat/format_timeZone.js \
+ ${WRKSRC}/tests/Intl/NumberFormat/StringBuffer.js
+
+pre-configure:
+ cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13
+# The directory needs to exist, or configure freaks out:
+ @${MKDIR} ${WRKSRC:H:H}/intl/icu/source/common/unicode
+ ${LN} -s ${LOCALBASE}/include/unicode/uvernum.h \
+ ${WRKSRC:H:H}/intl/icu/source/common/unicode/
+
+regression-test: build
+ @${ECHO_MSG} -n "===> Running jstests.py: "
+ @cd ${WRKSRC} && ${SETENV} LANG=C TZ=PST8PDT ${PYTHON_CMD} tests/jstests.py \
+ -d -s --no-progress ./js/src/shell/js
+
+post-install:
+ ${RM} ${STAGEDIR}${PREFIX}/lib/libjs_static.ajs
+ ${LN} -fs libmozjs-${SP_VER}.so ${STAGEDIR}${PREFIX}/lib/libmozjs-${SP_VER}.so.1
+.if ! ${PORT_OPTIONS:MDTRACE}
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/js${SP_VER}
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libmozjs-${SP_VER}.*
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/lang/spidermonkey52/distinfo b/lang/spidermonkey52/distinfo
new file mode 100644
index 000000000000..f5894fb27147
--- /dev/null
+++ b/lang/spidermonkey52/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1531516294
+SHA256 (firefox-52.9.0esr.source.tar.xz) = c01d09658c53c1b3a496e353a24dad03b26b81d3b1d099abc26a06f81c199dd6
+SIZE (firefox-52.9.0esr.source.tar.xz) = 214087304
diff --git a/lang/spidermonkey52/files/patch-1426865 b/lang/spidermonkey52/files/patch-1426865
new file mode 100644
index 000000000000..7b922ff70fca
--- /dev/null
+++ b/lang/spidermonkey52/files/patch-1426865
@@ -0,0 +1,23 @@
+Proposed workaround/fix for:
+https://bugzilla.mozilla.org/show_bug.cgi?id=1426865
+
+diff --git a/js/public/TypeDecls.h b/js/public/TypeDecls.h
+index acb93f9..cbd4b04 100644
+--- js/public/TypeDecls.h
++++ js/public/TypeDecls.h
+@@ -22,6 +22,8 @@
+
+ #include "js-config.h"
+
++#pragma GCC visibility push(default)
++
+ struct JSContext;
+ class JSFunction;
+ class JSObject;
+@@ -76,4 +78,6 @@ typedef PersistentRooted<Value> PersistentRootedValue;
+
+ } // namespace JS
+
++#pragma GCC visibility pop
++
+ #endif /* js_TypeDecls_h */
diff --git a/lang/spidermonkey52/files/patch-build_autoconf_config.sub b/lang/spidermonkey52/files/patch-build_autoconf_config.sub
new file mode 100644
index 000000000000..4ef535334fa3
--- /dev/null
+++ b/lang/spidermonkey52/files/patch-build_autoconf_config.sub
@@ -0,0 +1,24 @@
+Support powerpcspe
+
+https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234023
+
+--- build/autoconf/config.sub.orig 2019-01-06 00:10:34.369158000 +0100
++++ build/autoconf/config.sub 2019-01-06 00:12:20.725890000 +0100
+@@ -300,7 +300,7 @@
+ | ns16k | ns32k \
+ | open8 | or1k | or1knd | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+- | powerpc | powerpc64 | powerpc64le | powerpcle \
++ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pyramid \
+ | riscv32 | riscv64 \
+ | rl78 | rx \
+@@ -427,7 +427,7 @@
+ | or1k*-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | powerpcspe-* \
+ | pyramid-* \
+ | riscv32-* | riscv64-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
diff --git a/lang/spidermonkey52/files/patch-disable-mozglue b/lang/spidermonkey52/files/patch-disable-mozglue
new file mode 100644
index 000000000000..66a1d3fd8df6
--- /dev/null
+++ b/lang/spidermonkey52/files/patch-disable-mozglue
@@ -0,0 +1,62 @@
+From 1dd00ba521afd812ba42d94be8772603d3590b43 Mon Sep 17 00:00:00 2001
+From: Till Schneidereit <till@tillschneidereit.net>
+Date: Thu, 1 Oct 2015 12:59:09 +0200
+Subject: [PATCH] Disable MOZ_GLUE_IN_PROGRAM in stand-alone builds on all
+ platforms
+
+Otherwise, build fails not being able to find HashBytes.
+
+Patch ported forward to mozjs52 by Philip Chimento
+<philip.chimento@gmail.com>.
+
+https://bugzilla.mozilla.org/show_bug.cgi?id=1176787
+---
+
+diff --git a/js/src/old-configure.in b/js/src/old-configure.in
+index 1c5c9e214..ff0617e31 100644
+--- js/src/old-configure.in
++++ js/src/old-configure.in
+@@ -1623,16 +1623,21 @@ dnl ========================================================
+ dnl = Enable jemalloc
+ dnl ========================================================
+
+-case "${OS_TARGET}" in
+-Android|WINNT|Darwin)
++dnl In stand-alone builds we always only want to link executables against mozglue.
++if test "$JS_STANDALONE"; then
+ MOZ_GLUE_IN_PROGRAM=
+- ;;
+-*)
+- dnl On !Android !Windows !OSX, we only want to link executables against mozglue
+- MOZ_GLUE_IN_PROGRAM=1
+- AC_DEFINE(MOZ_GLUE_IN_PROGRAM)
+- ;;
+-esac
++else
++ case "${OS_TARGET}" in
++ Android|WINNT|Darwin)
++ MOZ_GLUE_IN_PROGRAM=
++ ;;
++ *)
++ dnl On !Android !Windows !OSX, we only want to link executables against mozglue
++ MOZ_GLUE_IN_PROGRAM=1
++ AC_DEFINE(MOZ_GLUE_IN_PROGRAM)
++ ;;
++ esac
++fi
+
+ if test "$MOZ_MEMORY"; then
+ if test "x$MOZ_DEBUG" = "x1"; then
+diff --git a/mozglue/build/moz.build b/mozglue/build/moz.build
+index d28974778..e3be5a2b9 100644
+--- mozglue/build/moz.build
++++ mozglue/build/moz.build
+@@ -6,7 +6,7 @@
+
+ # Build mozglue as a shared lib on Windows, OSX and Android.
+ # If this is ever changed, update MOZ_SHARED_MOZGLUE in browser/installer/Makefile.in
+-if CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android'):
++if CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android') and not CONFIG['JS_STANDALONE']:
+ SharedLibrary('mozglue')
+ else:
+ Library('mozglue')
diff --git a/lang/spidermonkey52/files/patch-js_src_jsapi-tests_testPrintf.cpp b/lang/spidermonkey52/files/patch-js_src_jsapi-tests_testPrintf.cpp
new file mode 100644
index 000000000000..ba70738ef76b
--- /dev/null
+++ b/lang/spidermonkey52/files/patch-js_src_jsapi-tests_testPrintf.cpp
@@ -0,0 +1,10 @@
+--- js/src/jsapi-tests/testPrintf.cpp.orig 2019-07-29 07:46:30 UTC
++++ js/src/jsapi-tests/testPrintf.cpp
+@@ -55,7 +55,6 @@ BEGIN_TEST(testPrintf)
+ CHECK(print_one("27270", "%zu", (size_t) 27270));
+ CHECK(print_one("27270", "%" PRIuSIZE, (size_t) 27270));
+ CHECK(print_one("hello", "he%so", "ll"));
+- CHECK(print_one("(null)", "%s", zero()));
+ CHECK(print_one("0", "%p", (char *) 0));
+ CHECK(print_one("h", "%c", 'h'));
+ CHECK(print_one("1.500000", "%f", 1.5f));
diff --git a/lang/spidermonkey52/pkg-descr b/lang/spidermonkey52/pkg-descr
new file mode 100644
index 000000000000..2db0b2ca559f
--- /dev/null
+++ b/lang/spidermonkey52/pkg-descr
@@ -0,0 +1,3 @@
+Spidermonkey is the JavaScript interpreter from the Mozilla project.
+
+WWW: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey
diff --git a/lang/spidermonkey52/pkg-plist b/lang/spidermonkey52/pkg-plist
new file mode 100644
index 000000000000..322a6215686f
--- /dev/null
+++ b/lang/spidermonkey52/pkg-plist
@@ -0,0 +1,161 @@
+bin/js52
+bin/js52-config
+include/mozjs-52/fdlibm.h
+%%JEMALLOC%%include/mozjs-52/jemalloc_types.h
+include/mozjs-52/js-config.h
+include/mozjs-52/js.msg
+include/mozjs-52/js/CallArgs.h
+include/mozjs-52/js/CallNonGenericMethod.h
+include/mozjs-52/js/CharacterEncoding.h
+include/mozjs-52/js/Class.h
+include/mozjs-52/js/Conversions.h
+include/mozjs-52/js/Date.h
+include/mozjs-52/js/Debug.h
+include/mozjs-52/js/GCAPI.h
+include/mozjs-52/js/GCAnnotations.h
+include/mozjs-52/js/GCHashTable.h
+include/mozjs-52/js/GCPolicyAPI.h
+include/mozjs-52/js/GCVariant.h
+include/mozjs-52/js/GCVector.h
+include/mozjs-52/js/HashTable.h
+include/mozjs-52/js/HeapAPI.h
+include/mozjs-52/js/Id.h
+include/mozjs-52/js/Initialization.h
+include/mozjs-52/js/LegacyIntTypes.h
+include/mozjs-52/js/MemoryMetrics.h
+include/mozjs-52/js/Principals.h
+include/mozjs-52/js/ProfilingFrameIterator.h
+include/mozjs-52/js/ProfilingStack.h
+include/mozjs-52/js/Proxy.h
+include/mozjs-52/js/Realm.h
+include/mozjs-52/js/RequiredDefines.h
+include/mozjs-52/js/RootingAPI.h
+include/mozjs-52/js/SliceBudget.h
+include/mozjs-52/js/StructuredClone.h
+include/mozjs-52/js/SweepingAPI.h
+include/mozjs-52/js/TraceKind.h
+include/mozjs-52/js/TracingAPI.h
+include/mozjs-52/js/TrackedOptimizationInfo.h
+include/mozjs-52/js/TypeDecls.h
+include/mozjs-52/js/UbiNode.h
+include/mozjs-52/js/UbiNodeBreadthFirst.h
+include/mozjs-52/js/UbiNodeCensus.h
+include/mozjs-52/js/UbiNodeDominatorTree.h
+include/mozjs-52/js/UbiNodePostOrder.h
+include/mozjs-52/js/UbiNodeShortestPaths.h
+include/mozjs-52/js/UniquePtr.h
+include/mozjs-52/js/Utility.h
+include/mozjs-52/js/Value.h
+include/mozjs-52/js/Vector.h
+include/mozjs-52/js/WeakMapPtr.h
+include/mozjs-52/jsalloc.h
+include/mozjs-52/jsapi.h
+include/mozjs-52/jsbytecode.h
+include/mozjs-52/jsclist.h
+include/mozjs-52/jscpucfg.h
+include/mozjs-52/jsfriendapi.h
+include/mozjs-52/jsperf.h
+include/mozjs-52/jsprf.h
+include/mozjs-52/jsprototypes.h
+include/mozjs-52/jspubtd.h
+include/mozjs-52/jstypes.h
+include/mozjs-52/jsversion.h
+include/mozjs-52/jswrapper.h
+include/mozjs-52/mozilla/Alignment.h
+include/mozjs-52/mozilla/AllocPolicy.h
+include/mozjs-52/mozilla/AlreadyAddRefed.h
+include/mozjs-52/mozilla/Array.h
+include/mozjs-52/mozilla/ArrayUtils.h
+include/mozjs-52/mozilla/Assertions.h
+include/mozjs-52/mozilla/Atomics.h
+include/mozjs-52/mozilla/Attributes.h
+include/mozjs-52/mozilla/BinarySearch.h
+include/mozjs-52/mozilla/BloomFilter.h
+include/mozjs-52/mozilla/BufferList.h
+include/mozjs-52/mozilla/Casting.h
+include/mozjs-52/mozilla/ChaosMode.h
+include/mozjs-52/mozilla/Char16.h
+include/mozjs-52/mozilla/CheckedInt.h
+include/mozjs-52/mozilla/Compiler.h
+include/mozjs-52/mozilla/Compression.h
+include/mozjs-52/mozilla/DebugOnly.h
+include/mozjs-52/mozilla/Decimal.h
+include/mozjs-52/mozilla/EndianUtils.h
+include/mozjs-52/mozilla/EnumSet.h
+include/mozjs-52/mozilla/EnumTypeTraits.h
+include/mozjs-52/mozilla/EnumeratedArray.h
+include/mozjs-52/mozilla/EnumeratedRange.h
+include/mozjs-52/mozilla/FastBernoulliTrial.h
+include/mozjs-52/mozilla/FloatingPoint.h
+include/mozjs-52/mozilla/Function.h
+include/mozjs-52/mozilla/GuardObjects.h
+include/mozjs-52/mozilla/HashFunctions.h
+include/mozjs-52/mozilla/IndexSequence.h
+include/mozjs-52/mozilla/IntegerPrintfMacros.h
+include/mozjs-52/mozilla/IntegerRange.h
+include/mozjs-52/mozilla/IntegerTypeTraits.h
+include/mozjs-52/mozilla/JSONWriter.h
+include/mozjs-52/mozilla/Likely.h
+include/mozjs-52/mozilla/LinkedList.h
+include/mozjs-52/mozilla/MacroArgs.h
+include/mozjs-52/mozilla/MacroForEach.h
+include/mozjs-52/mozilla/MathAlgorithms.h
+include/mozjs-52/mozilla/Maybe.h
+include/mozjs-52/mozilla/MaybeOneOf.h
+include/mozjs-52/mozilla/MemoryChecking.h
+include/mozjs-52/mozilla/MemoryReporting.h
+include/mozjs-52/mozilla/Move.h
+include/mozjs-52/mozilla/NotNull.h
+include/mozjs-52/mozilla/NullPtr.h
+include/mozjs-52/mozilla/Opaque.h
+include/mozjs-52/mozilla/OperatorNewExtensions.h
+include/mozjs-52/mozilla/Pair.h
+include/mozjs-52/mozilla/PodOperations.h
+include/mozjs-52/mozilla/Poison.h
+include/mozjs-52/mozilla/Range.h
+include/mozjs-52/mozilla/RangedArray.h
+include/mozjs-52/mozilla/RangedPtr.h
+include/mozjs-52/mozilla/ReentrancyGuard.h
+include/mozjs-52/mozilla/RefCountType.h
+include/mozjs-52/mozilla/RefCounted.h
+include/mozjs-52/mozilla/RefPtr.h
+include/mozjs-52/mozilla/ReverseIterator.h
+include/mozjs-52/mozilla/RollingMean.h
+include/mozjs-52/mozilla/SHA1.h
+include/mozjs-52/mozilla/Saturate.h
+include/mozjs-52/mozilla/ScopeExit.h
+include/mozjs-52/mozilla/Scoped.h
+include/mozjs-52/mozilla/SegmentedVector.h
+include/mozjs-52/mozilla/SizePrintfMacros.h
+include/mozjs-52/mozilla/SplayTree.h
+include/mozjs-52/mozilla/Sprintf.h
+include/mozjs-52/mozilla/StackWalk.h
+include/mozjs-52/mozilla/StaticAnalysisFunctions.h
+include/mozjs-52/mozilla/TaggedAnonymousMemory.h
+include/mozjs-52/mozilla/TemplateLib.h
+include/mozjs-52/mozilla/TextUtils.h
+include/mozjs-52/mozilla/ThreadLocal.h
+include/mozjs-52/mozilla/TimeStamp.h
+include/mozjs-52/mozilla/ToString.h
+include/mozjs-52/mozilla/Tuple.h
+include/mozjs-52/mozilla/TypeTraits.h
+include/mozjs-52/mozilla/TypedEnumBits.h
+include/mozjs-52/mozilla/Types.h
+include/mozjs-52/mozilla/UniquePtr.h
+include/mozjs-52/mozilla/UniquePtrExtensions.h
+include/mozjs-52/mozilla/Unused.h
+include/mozjs-52/mozilla/Variant.h
+include/mozjs-52/mozilla/Vector.h
+include/mozjs-52/mozilla/WeakPtr.h
+include/mozjs-52/mozilla/XorShift128PlusRNG.h
+include/mozjs-52/mozilla/double-conversion.h
+include/mozjs-52/mozilla/fallible.h
+include/mozjs-52/mozilla/mozalloc.h
+include/mozjs-52/mozilla/mozalloc_abort.h
+include/mozjs-52/mozilla/mozalloc_oom.h
+include/mozjs-52/mozilla/utils.h
+%%JEMALLOC%%include/mozjs-52/mozmemory.h
+%%JEMALLOC%%include/mozjs-52/mozmemory_wrap.h
+lib/libmozjs-52.so
+lib/libmozjs-52.so.1
+libdata/pkgconfig/mozjs-52.pc
diff --git a/lang/spidermonkey60/Makefile b/lang/spidermonkey60/Makefile
new file mode 100644
index 000000000000..42fabbd7be7d
--- /dev/null
+++ b/lang/spidermonkey60/Makefile
@@ -0,0 +1,70 @@
+# $FreeBSD$
+
+PORTNAME= spidermonkey
+DISTVERSION= 60.9.0
+PORTREVISION= 5
+CATEGORIES= lang
+MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source
+PKGNAMESUFFIX= ${SP_VER}
+DISTNAME= firefox-${DISTVERSION}esr.source
+
+MAINTAINER= tcberner@FreeBSD.org
+COMMENT= Standalone JavaScript based from Mozilla 60-esr
+
+LICENSE= MPL20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Requires python2 to build
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= autoconf-2.13:devel/autoconf213
+LIB_DEPENDS= libnspr4.so:devel/nspr \
+ libffi.so:devel/libffi \
+ libicudata.so:devel/icu
+
+HAS_CONFIGURE= yes
+USES= compiler:c++14-lang gmake localbase pathfix pkgconfig \
+ python:2.7,build tar:xz
+USE_LDCONFIG= yes
+SP_VER= 60
+
+WRKSRC= ${WRKDIR}/firefox-${DISTVERSION}
+PATCH_WRKSRC= ${WRKDIR}/firefox-${DISTVERSION}/
+CONFIGURE_OUTSOURCE= yes
+CONFIGURE_SCRIPT= ../firefox-${DISTVERSION}/js/src/configure
+
+CONFIGURE_ARGS= --with-pthreads \
+ --prefix=${PREFIX:Q} \
+ --target=${CONFIGURE_TARGET} \
+ --with-intl-api \
+ --with-system-zlib \
+ --disable-gold \
+ --disable-debug \
+ --disable-debug-symbols \
+ --disable-jemalloc \
+ --with-system-icu \
+ --with-system-nspr \
+ --enable-shared-js \
+ --enable-optimize \
+ --enable-readline
+
+CONFIGURE_ENV= HOST_CC=${CC} HOST_CXX=${CXX}
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET=x86_64-portbld-freebsd${OSREL}
+.endif
+
+.if ${ARCH} == i386
+# ld: error: undefined symbol: __atomic_load
+USE_GCC= 9+
+.endif
+
+post-install:
+ ${RM} ${STAGEDIR}${PREFIX}/lib/libjs_static.ajs
+ ${LN} -fs libmozjs-${SP_VER}.so ${STAGEDIR}${PREFIX}/lib/libmozjs-${SP_VER}.so.1
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/js${SP_VER}
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libmozjs-${SP_VER}.*
+
+.include <bsd.port.post.mk>
diff --git a/lang/spidermonkey60/distinfo b/lang/spidermonkey60/distinfo
new file mode 100644
index 000000000000..d49620ac6d30
--- /dev/null
+++ b/lang/spidermonkey60/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1573931253
+SHA256 (firefox-60.9.0esr.source.tar.xz) = 9f453c8cc5669e46e38f977764d49a36295bf0d023619d9aac782e6bb3e8c53f
+SIZE (firefox-60.9.0esr.source.tar.xz) = 269089044
diff --git a/lang/spidermonkey60/files/patch-js_public_TypeDecls.h b/lang/spidermonkey60/files/patch-js_public_TypeDecls.h
new file mode 100644
index 000000000000..6872c648187c
--- /dev/null
+++ b/lang/spidermonkey60/files/patch-js_public_TypeDecls.h
@@ -0,0 +1,26 @@
+https://bugzilla.mozilla.org/show_bug.cgi?id=1426865
+
+Add "dumb" patch to fix undefined symbols when trying to build gjs against
+this spidermonkey version.
+
+This issue was fix in firefox and backported to esr 68.
+
+--- js/public/TypeDecls.h.orig 2019-09-01 13:09:17 UTC
++++ js/public/TypeDecls.h
+@@ -20,6 +20,8 @@
+ #include <stddef.h>
+ #include <stdint.h>
+
++#pragma GCC visibility push(default)
++
+ #include "js-config.h"
+
+ typedef uint8_t jsbytecode;
+@@ -89,5 +91,7 @@ typedef PersistentRooted<JS::Symbol*> PersistentRooted
+ typedef PersistentRooted<Value> PersistentRootedValue;
+
+ } // namespace JS
++
++#pragma GCC visibility pop
+
+ #endif /* js_TypeDecls_h */
diff --git a/lang/spidermonkey60/pkg-descr b/lang/spidermonkey60/pkg-descr
new file mode 100644
index 000000000000..2db0b2ca559f
--- /dev/null
+++ b/lang/spidermonkey60/pkg-descr
@@ -0,0 +1,3 @@
+Spidermonkey is the JavaScript interpreter from the Mozilla project.
+
+WWW: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey
diff --git a/lang/spidermonkey60/pkg-plist b/lang/spidermonkey60/pkg-plist
new file mode 100644
index 000000000000..f3b3076b878e
--- /dev/null
+++ b/lang/spidermonkey60/pkg-plist
@@ -0,0 +1,172 @@
+bin/js60
+bin/js60-config
+include/mozjs-60/double-conversion/double-conversion.h
+include/mozjs-60/double-conversion/utils.h
+include/mozjs-60/fdlibm.h
+include/mozjs-60/js-config.h
+include/mozjs-60/js.msg
+include/mozjs-60/js/AllocPolicy.h
+include/mozjs-60/js/CallArgs.h
+include/mozjs-60/js/CallNonGenericMethod.h
+include/mozjs-60/js/CharacterEncoding.h
+include/mozjs-60/js/Class.h
+include/mozjs-60/js/Conversions.h
+include/mozjs-60/js/Date.h
+include/mozjs-60/js/Debug.h
+include/mozjs-60/js/GCAPI.h
+include/mozjs-60/js/GCAnnotations.h
+include/mozjs-60/js/GCHashTable.h
+include/mozjs-60/js/GCPolicyAPI.h
+include/mozjs-60/js/GCVariant.h
+include/mozjs-60/js/GCVector.h
+include/mozjs-60/js/HashTable.h
+include/mozjs-60/js/HeapAPI.h
+include/mozjs-60/js/Id.h
+include/mozjs-60/js/Initialization.h
+include/mozjs-60/js/MemoryMetrics.h
+include/mozjs-60/js/Principals.h
+include/mozjs-60/js/Printf.h
+include/mozjs-60/js/ProfilingFrameIterator.h
+include/mozjs-60/js/ProfilingStack.h
+include/mozjs-60/js/ProtoKey.h
+include/mozjs-60/js/Proxy.h
+include/mozjs-60/js/Realm.h
+include/mozjs-60/js/RefCounted.h
+include/mozjs-60/js/RequiredDefines.h
+include/mozjs-60/js/Result.h
+include/mozjs-60/js/RootingAPI.h
+include/mozjs-60/js/SliceBudget.h
+include/mozjs-60/js/Stream.h
+include/mozjs-60/js/StructuredClone.h
+include/mozjs-60/js/SweepingAPI.h
+include/mozjs-60/js/TraceKind.h
+include/mozjs-60/js/TracingAPI.h
+include/mozjs-60/js/TrackedOptimizationInfo.h
+include/mozjs-60/js/TypeDecls.h
+include/mozjs-60/js/UbiNode.h
+include/mozjs-60/js/UbiNodeBreadthFirst.h
+include/mozjs-60/js/UbiNodeCensus.h
+include/mozjs-60/js/UbiNodeDominatorTree.h
+include/mozjs-60/js/UbiNodePostOrder.h
+include/mozjs-60/js/UbiNodeShortestPaths.h
+include/mozjs-60/js/UniquePtr.h
+include/mozjs-60/js/Utility.h
+include/mozjs-60/js/Value.h
+include/mozjs-60/js/Vector.h
+include/mozjs-60/js/WeakMapPtr.h
+include/mozjs-60/js/Wrapper.h
+include/mozjs-60/jsapi.h
+include/mozjs-60/jsfriendapi.h
+include/mozjs-60/jsperf.h
+include/mozjs-60/jspubtd.h
+include/mozjs-60/jstypes.h
+include/mozjs-60/malloc_decls.h
+include/mozjs-60/mozilla/Alignment.h
+include/mozjs-60/mozilla/AllocPolicy.h
+include/mozjs-60/mozilla/AlreadyAddRefed.h
+include/mozjs-60/mozilla/Array.h
+include/mozjs-60/mozilla/ArrayUtils.h
+include/mozjs-60/mozilla/Assertions.h
+include/mozjs-60/mozilla/Atomics.h
+include/mozjs-60/mozilla/Attributes.h
+include/mozjs-60/mozilla/AutoProfilerLabel.h
+include/mozjs-60/mozilla/BinarySearch.h
+include/mozjs-60/mozilla/BloomFilter.h
+include/mozjs-60/mozilla/BufferList.h
+include/mozjs-60/mozilla/Casting.h
+include/mozjs-60/mozilla/ChaosMode.h
+include/mozjs-60/mozilla/Char16.h
+include/mozjs-60/mozilla/CheckedInt.h
+include/mozjs-60/mozilla/Compiler.h
+include/mozjs-60/mozilla/Compression.h
+include/mozjs-60/mozilla/DebugOnly.h
+include/mozjs-60/mozilla/Decimal.h
+include/mozjs-60/mozilla/DefineEnum.h
+include/mozjs-60/mozilla/DoublyLinkedList.h
+include/mozjs-60/mozilla/EndianUtils.h
+include/mozjs-60/mozilla/EnumSet.h
+include/mozjs-60/mozilla/EnumTypeTraits.h
+include/mozjs-60/mozilla/EnumeratedArray.h
+include/mozjs-60/mozilla/EnumeratedRange.h
+include/mozjs-60/mozilla/FStream.h
+include/mozjs-60/mozilla/FastBernoulliTrial.h
+include/mozjs-60/mozilla/FloatingPoint.h
+include/mozjs-60/mozilla/GuardObjects.h
+include/mozjs-60/mozilla/HashFunctions.h
+include/mozjs-60/mozilla/IndexSequence.h
+include/mozjs-60/mozilla/IntegerPrintfMacros.h
+include/mozjs-60/mozilla/IntegerRange.h
+include/mozjs-60/mozilla/IntegerTypeTraits.h
+include/mozjs-60/mozilla/JSONWriter.h
+include/mozjs-60/mozilla/Likely.h
+include/mozjs-60/mozilla/LinkedList.h
+include/mozjs-60/mozilla/MacroArgs.h
+include/mozjs-60/mozilla/MacroForEach.h
+include/mozjs-60/mozilla/MathAlgorithms.h
+include/mozjs-60/mozilla/Maybe.h
+include/mozjs-60/mozilla/MaybeOneOf.h
+include/mozjs-60/mozilla/MemoryChecking.h
+include/mozjs-60/mozilla/MemoryReporting.h
+include/mozjs-60/mozilla/Move.h
+include/mozjs-60/mozilla/NotNull.h
+include/mozjs-60/mozilla/NullPtr.h
+include/mozjs-60/mozilla/Opaque.h
+include/mozjs-60/mozilla/OperatorNewExtensions.h
+include/mozjs-60/mozilla/Pair.h
+include/mozjs-60/mozilla/Path.h
+include/mozjs-60/mozilla/PlatformConditionVariable.h
+include/mozjs-60/mozilla/PlatformMutex.h
+include/mozjs-60/mozilla/PodOperations.h
+include/mozjs-60/mozilla/Poison.h
+include/mozjs-60/mozilla/Printf.h
+include/mozjs-60/mozilla/Range.h
+include/mozjs-60/mozilla/RangedArray.h
+include/mozjs-60/mozilla/RangedPtr.h
+include/mozjs-60/mozilla/ReentrancyGuard.h
+include/mozjs-60/mozilla/RefCountType.h
+include/mozjs-60/mozilla/RefCounted.h
+include/mozjs-60/mozilla/RefPtr.h
+include/mozjs-60/mozilla/Result.h
+include/mozjs-60/mozilla/ResultExtensions.h
+include/mozjs-60/mozilla/ReverseIterator.h
+include/mozjs-60/mozilla/RollingMean.h
+include/mozjs-60/mozilla/SHA1.h
+include/mozjs-60/mozilla/Saturate.h
+include/mozjs-60/mozilla/ScopeExit.h
+include/mozjs-60/mozilla/Scoped.h
+include/mozjs-60/mozilla/SegmentedVector.h
+include/mozjs-60/mozilla/SmallPointerArray.h
+include/mozjs-60/mozilla/Span.h
+include/mozjs-60/mozilla/SplayTree.h
+include/mozjs-60/mozilla/Sprintf.h
+include/mozjs-60/mozilla/StackWalk.h
+include/mozjs-60/mozilla/StaticAnalysisFunctions.h
+include/mozjs-60/mozilla/TaggedAnonymousMemory.h
+include/mozjs-60/mozilla/TemplateLib.h
+include/mozjs-60/mozilla/TextUtils.h
+include/mozjs-60/mozilla/ThreadLocal.h
+include/mozjs-60/mozilla/ThreadSafeWeakPtr.h
+include/mozjs-60/mozilla/TimeStamp.h
+include/mozjs-60/mozilla/ToString.h
+include/mozjs-60/mozilla/Tuple.h
+include/mozjs-60/mozilla/TypeTraits.h
+include/mozjs-60/mozilla/TypedEnumBits.h
+include/mozjs-60/mozilla/Types.h
+include/mozjs-60/mozilla/UniquePtr.h
+include/mozjs-60/mozilla/UniquePtrExtensions.h
+include/mozjs-60/mozilla/Unused.h
+include/mozjs-60/mozilla/Variant.h
+include/mozjs-60/mozilla/Vector.h
+include/mozjs-60/mozilla/WeakPtr.h
+include/mozjs-60/mozilla/WrappingOperations.h
+include/mozjs-60/mozilla/XorShift128PlusRNG.h
+include/mozjs-60/mozilla/fallible.h
+include/mozjs-60/mozilla/mozalloc.h
+include/mozjs-60/mozilla/mozalloc_abort.h
+include/mozjs-60/mozilla/mozalloc_oom.h
+include/mozjs-60/mozjemalloc_types.h
+include/mozjs-60/mozmemory.h
+include/mozjs-60/mozmemory_wrap.h
+lib/libmozjs-60.so
+lib/libmozjs-60.so.1
+libdata/pkgconfig/mozjs-60.pc
diff --git a/lang/tolua++/Makefile b/lang/tolua++/Makefile
new file mode 100644
index 000000000000..dbd520d8431c
--- /dev/null
+++ b/lang/tolua++/Makefile
@@ -0,0 +1,36 @@
+# Created by: aaron@FreeBSD.org
+# $FreeBSD$
+
+PORTNAME= tolua++
+PORTVERSION= 1.0.93
+PORTREVISION= 3
+CATEGORIES= lang devel
+MASTER_SITES= http://www.codenix.com/~tolua/ \
+ http://mirror.amdmi3.ru/distfiles/
+
+MAINTAINER= amdmi3@FreeBSD.org
+COMMENT= Extended version of tolua, a tool to integrate C/C++ code with Lua
+
+USES= scons:python2 lua:51 tar:bzip2
+MAKE_ARGS= prefix=${PREFIX} SONAME="libtolua++-${LUA_VER}.so"
+
+CCFLAGS+= -I${LUA_INCDIR}
+LDFLAGS+= -L${LUA_LIBDIR}
+
+TGT_BINDIR= ${PREFIX}/bin
+TGT_INCDIR= ${LUA_INCDIR:C/^${LOCALBASE}/${PREFIX}/}
+TGT_LIBDIR= ${LUA_LIBDIR:C/^${LOCALBASE}/${PREFIX}/}
+
+post-patch:
+ @${REINPLACE_CMD} -e "s|'lualib',||; s|lua|lua-${LUA_VER}|g" ${WRKSRC}/config_posix.py
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${TGT_BINDIR} ${STAGEDIR}${TGT_INCDIR} ${STAGEDIR}${TGT_LIBDIR}
+ ${INSTALL_PROGRAM} ${WRKSRC}/bin/tolua++ ${STAGEDIR}${TGT_BINDIR}
+ ${LN} -sf tolua++ ${STAGEDIR}${PREFIX}/bin/tolua++-${LUA_VER}
+ ${INSTALL_DATA} ${WRKSRC}/include/tolua++.h ${STAGEDIR}${TGT_INCDIR}
+ ${INSTALL_DATA} ${WRKSRC}/lib/libtolua++.a ${STAGEDIR}${TGT_LIBDIR}
+ ${INSTALL_LIB} ${WRKSRC}/lib/libtolua++.so ${STAGEDIR}${TGT_LIBDIR}
+ ${INSTALL_LIB} ${WRKSRC}/lib/libtolua++.so ${STAGEDIR}${PREFIX}/lib/libtolua++-${LUA_VER}.so
+
+.include <bsd.port.mk>
diff --git a/lang/tolua++/distinfo b/lang/tolua++/distinfo
new file mode 100644
index 000000000000..f018695077db
--- /dev/null
+++ b/lang/tolua++/distinfo
@@ -0,0 +1,2 @@
+SHA256 (tolua++-1.0.93.tar.bz2) = 90df1eeb8354941ca65663dcf28658b67d3aa41daa71133bdd20c35abb1bcaba
+SIZE (tolua++-1.0.93.tar.bz2) = 163956
diff --git a/lang/tolua++/files/patch-SConstruct b/lang/tolua++/files/patch-SConstruct
new file mode 100644
index 000000000000..f0856026d593
--- /dev/null
+++ b/lang/tolua++/files/patch-SConstruct
@@ -0,0 +1,41 @@
+--- SConstruct.orig 2008-04-21 00:05:35 UTC
++++ SConstruct
+@@ -7,21 +7,22 @@ if os.name == 'nt':
+
+ env = Environment(tools = tools)
+
+-options_file = None
++variables_file = None
+ if sys.platform == 'linux2':
+- options_file = "linux"
++ variables_file = "linux"
+
+ elif 'msvc' in env['TOOLS']:
+- options_file = "msvc"
++ variables_file = "msvc"
+ else:
+- options_file = "posix"
++ variables_file = "posix"
+
+-opts = Options(["config_"+options_file+".py", "custom.py", "custom_"+options_file+".py"], ARGUMENTS)
++opts = Variables(["config_"+variables_file+".py", "custom.py", "custom_"+variables_file+".py"], ARGUMENTS)
+ opts.Add('CC', 'The C compiler.')
+ opts.Add('CXX', 'The C++ compiler (for the tests)')
+ opts.Add('CCFLAGS', 'Flags for the compiler.', ['-O2', '-Wall'])
+ opts.Add('LINK', 'The linker.')
+ opts.Add('LINKFLAGS', 'Linker flags.', [])
++opts.Add('SONAME', 'Shared library name.')
+ opts.Add('no_cygwin', 'Use -mno-cygwin to build using the mingw compiler on cygwin', 0)
+ opts.Add('LIBS', 'libraries', [])
+ opts.Add('LIBPATH', 'library path', [])
+@@ -145,7 +146,9 @@ Files will be installed on <prefix>/bin,
+ ########### end of helper builders
+
+ env['CPPPATH'] = '#/include'
+-env['LIBPATH'] = ['#/lib'] + env['LIBPATH']
++env['LIBPATH'] = ['#/lib'] + env['LIBPATH'].split(" ")
++
++env.Append(SHLINKFLAGS=' -Wl,-soname='+env['SONAME'])
+
+ if env['no_cygwin']:
+
diff --git a/lang/tolua++/files/patch-src-lib-SCsub b/lang/tolua++/files/patch-src-lib-SCsub
new file mode 100644
index 000000000000..ffa68d40fa0b
--- /dev/null
+++ b/lang/tolua++/files/patch-src-lib-SCsub
@@ -0,0 +1,16 @@
+--- src/lib/SCsub.orig 2008-04-21 00:05:35 UTC
++++ src/lib/SCsub
+@@ -9,10 +9,7 @@ sources = [
+ 'tolua_to.c',
+ ]
+
+-env.lib_target_static = env.Library('#/lib/'+env['tolua_lib']+'_static', sources)
+-
+-if env['shared']:
+- env.lib_target = env.SharedLibrary('#lib/'+env['tolua_lib'], sources)
+-else:
+- env.lib_target = env.Library('#/lib/'+env['tolua_lib'], sources)
++env.lib_target_static = env.Library('#/lib/'+env['tolua_lib'], sources)
++env.lib_target = env.Library('#/lib/'+env['tolua_lib'], sources)
++env.lib_target += env.SharedLibrary('#/lib/'+env['tolua_lib'], sources)
+
diff --git a/lang/tolua++/files/patch-src-tests-SCsub b/lang/tolua++/files/patch-src-tests-SCsub
new file mode 100644
index 000000000000..446b0af4fd25
--- /dev/null
+++ b/lang/tolua++/files/patch-src-tests-SCsub
@@ -0,0 +1,9 @@
+--- src/tests/SCsub.orig 2006-04-10 09:45:44 UTC
++++ src/tests/SCsub
+@@ -1,5 +1,5 @@
+ Import('env')
+-env_tests = env.Copy()
++env_tests = env.Clone()
+
+ env_tests.LuaBinding('tclassbind.cpp', 'tclass.pkg', 'tclass', use_own=1, use_typeid=1)
+
diff --git a/lang/tolua++/pkg-descr b/lang/tolua++/pkg-descr
new file mode 100644
index 000000000000..019e555c8dc5
--- /dev/null
+++ b/lang/tolua++/pkg-descr
@@ -0,0 +1,16 @@
+tolua++ is an extended version of tolua, a tool to integrate C/C++ code
+with Lua. tolua++ includes new features oriented to c++ such as:
+
+* Support for std::string as a basic type (this can be turned off by a
+ command line option).
+* Support for class templates
+
+As well as other features and bugfixes.
+
+tolua is a tool that greatly simplifies the integration of C/C++ code with
+Lua. Based on a cleaned header file (or extracts from real header files),
+tolua automatically generates the binding code to access C/C++ features
+from Lua. Using Lua API and tag method facilities, tolua maps C/C++
+constants, external variables, functions, classes, and methods to Lua.
+
+WWW: http://www.codenix.com/~tolua/
diff --git a/lang/tolua++/pkg-plist b/lang/tolua++/pkg-plist
new file mode 100644
index 000000000000..781bed4f2a46
--- /dev/null
+++ b/lang/tolua++/pkg-plist
@@ -0,0 +1,6 @@
+bin/tolua++
+bin/tolua++-%%LUA_VER%%
+%%LUA_LIBDIR%%/libtolua++.a
+%%LUA_LIBDIR%%/libtolua++.so
+lib/libtolua++-%%LUA_VER%%.so
+%%LUA_INCDIR%%/tolua++.h
diff --git a/mail/Makefile b/mail/Makefile
index df27b3284b6e..69d8d7e2b004 100644
--- a/mail/Makefile
+++ b/mail/Makefile
@@ -134,6 +134,7 @@
SUBDIR += findmaildirs
SUBDIR += geary
SUBDIR += gensig
+ SUBDIR += getmail
SUBDIR += getmail6
SUBDIR += gmime2
SUBDIR += gmime2-sharp
diff --git a/mail/getmail/Makefile b/mail/getmail/Makefile
new file mode 100644
index 000000000000..7d4aef7c1629
--- /dev/null
+++ b/mail/getmail/Makefile
@@ -0,0 +1,43 @@
+# Created by: Yukihiro Nakai <nakai@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= getmail
+DISTVERSION= 5.15
+CATEGORIES= mail python
+MASTER_SITES= http://pyropus.ca/software/getmail/old-versions/
+
+MAINTAINER= jrm@FreeBSD.org
+COMMENT= POP3/IMAP4 mail retriever with Maildir and command delivery
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/docs/COPYING
+
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+CONFLICTS= py*-getmail6
+
+NO_ARCH= yes
+NO_BUILD= yes
+
+PORTDOCS= *.css *.html *.txt BUGS CHANGELOG README THANKS TODO
+PORTEXAMPLES= getmailrc-examples
+
+OPTIONS_DEFINE= DOCS EXAMPLES
+
+post-install:
+ @${CHMOD} -R 644 ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/getmailcore/*
+
+post-install-DOCS-on:
+ @${CP} ${WRKSRC}/README ${WRKSRC}/docs/
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${PORTDOCS:S,^,${WRKSRC}/docs/,} ${STAGEDIR}${DOCSDIR}
+
+post-install-EXAMPLES-on:
+ @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
+ ${INSTALL_DATA} ${WRKSRC}/docs/getmailrc-examples ${STAGEDIR}${EXAMPLESDIR}
+
+.include <bsd.port.mk>
diff --git a/mail/getmail/distinfo b/mail/getmail/distinfo
new file mode 100644
index 000000000000..6f2fcac01e68
--- /dev/null
+++ b/mail/getmail/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1608495568
+SHA256 (getmail-5.15.tar.gz) = d453805ffc3f8fe2586ee705733bd666777e53693125fdb149494d22bd14162a
+SIZE (getmail-5.15.tar.gz) = 199733
diff --git a/mail/getmail/files/patch-setup.py b/mail/getmail/files/patch-setup.py
new file mode 100644
index 000000000000..cded78cdebf4
--- /dev/null
+++ b/mail/getmail/files/patch-setup.py
@@ -0,0 +1,42 @@
+--- setup.py.orig 2009-01-08 21:55:25 UTC
++++ setup.py
+@@ -39,12 +39,11 @@ GETMAILDOCDIR = os.path.join(
+ datadir or prefix,
+ 'share',
+ 'doc',
+- 'getmail-%s' % __version__
++ 'getmail'
+ )
+
+ GETMAILMANDIR = os.path.join(
+ datadir or prefix,
+- 'share',
+ 'man',
+ 'man1'
+ )
+@@ -98,25 +97,6 @@ setup(
+ 'getmail_mbox'
+ ],
+ data_files=[
+- (GETMAILDOCDIR, [
+- './README',
+- './getmail.spec',
+- 'docs/BUGS',
+- 'docs/COPYING',
+- 'docs/CHANGELOG',
+- 'docs/TODO',
+- 'docs/THANKS',
+- 'docs/configuration.html',
+- 'docs/configuration.txt',
+- 'docs/documentation.html',
+- 'docs/documentation.txt',
+- 'docs/faq.html',
+- 'docs/faq.txt',
+- 'docs/getmaildocs.css',
+- 'docs/getmailrc-examples',
+- 'docs/troubleshooting.html',
+- 'docs/troubleshooting.txt',
+- ]),
+ (GETMAILMANDIR, [
+ 'docs/getmail.1',
+ 'docs/getmail_fetch.1',
diff --git a/mail/getmail/pkg-descr b/mail/getmail/pkg-descr
new file mode 100644
index 000000000000..b6035ba24cbc
--- /dev/null
+++ b/mail/getmail/pkg-descr
@@ -0,0 +1,20 @@
+A POP3 and IMAP4 mail retriever with reliable Maildir and command delivery.
+
+Summary of features:
+- Retrieve mail from an unlimited number of POP3/IMAP4 mailboxes and servers.
+- Support for POP3-over-SSL and IMAP-over-SSL, as well as SDPS
+ WARNING: even with SSL, "no certificate or key validation is done." so
+ that getmail does not detect or protect from man-in-the-middle attacks.
+- Support for multidrop or domain mailboxes.
+- Safe and reliable delivery to qmail-style Maildirs, as well as program
+ (pipe) delivery for use with arbitrary external MDAs. Includes an MDA
+ for mbox files that supports mboxrd format and fcntl-type flock locking.
+- Does not destroy information by rewriting mail headers.
+- Does not cause mail loops by doing SMTP injection, and therefore does
+ not require that you run an MTA (like qmail or sendmail) on your host.
+- Can remember which mail it has already retrieved, and can be set to
+ only download new messages.
+- Written in Python, and therefore easy to extend or customize.
+- Simple to install, configure, and use.
+
+WWW: http://pyropus.ca/software/getmail/
diff --git a/mail/getmail/pkg-message b/mail/getmail/pkg-message
new file mode 100644
index 000000000000..3c4d4878ffec
--- /dev/null
+++ b/mail/getmail/pkg-message
@@ -0,0 +1,14 @@
+[
+{ type: install
+ message: <<EOM
+The getmail rc file (configuration file) format has changed since
+version 3.x. If you are upgrading from version 3, you will need
+to write a new configuration file based on the contents of your old one.
+The new file format resembles the old in many ways.
+
+Each account you retrieve mail from will require a separate rc file,
+but getmail can operate with multiple rc files simultaneously
+if you wish to retrieve mail from multiple accounts.
+EOM
+}
+]
diff --git a/math/Makefile b/math/Makefile
index 7b2e9fa1e641..4061dc50c7f0 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -311,6 +311,7 @@
SUBDIR += graphthing
SUBDIR += gretl
SUBDIR += gri
+ SUBDIR += gringo
SUBDIR += grpn
SUBDIR += gsl
SUBDIR += half
diff --git a/math/gringo/Makefile b/math/gringo/Makefile
new file mode 100644
index 000000000000..408136b78ee1
--- /dev/null
+++ b/math/gringo/Makefile
@@ -0,0 +1,30 @@
+# Created by: Vsevolod Stakhov <vsevolod@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= gringo
+DISTVERSION= 4.5.4
+DISTVERSIONSUFFIX= -source
+PORTREVISION= 3
+CATEGORIES= math devel
+MASTER_SITES= SOURCEFORGE/potassco/${PORTNAME}/${PORTVERSION}
+
+MAINTAINER= vsevolod@FreeBSD.org
+COMMENT= Grounding algorithm based on semi-naive database evaluation
+
+LICENSE= GPLv3
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= re2c:devel/re2c
+
+USES= bison compiler:c++11-lib python:2.7 scons:python2
+MAKE_ARGS= ${MAKE_ENV}
+CXXFLAGS+= -std=c++11
+MAKE_ENV= WITH_LUA=no
+
+PLIST_FILES= bin/${PORTNAME} bin/clingo
+
+do-install:
+ ${INSTALL_PROGRAM} ${INSTALL_WRKSRC}/build/debug/${PORTNAME} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${INSTALL_PROGRAM} ${INSTALL_WRKSRC}/build/debug/clingo ${STAGEDIR}${PREFIX}/bin/clingo
+
+.include <bsd.port.mk>
diff --git a/math/gringo/distinfo b/math/gringo/distinfo
new file mode 100644
index 000000000000..ea7b46341f2b
--- /dev/null
+++ b/math/gringo/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1532665392
+SHA256 (gringo-4.5.4-source.tar.gz) = 81f8bbbb1b06236778028e5f1b8627ee38a712ec708724112fb08aecf9bc649a
+SIZE (gringo-4.5.4-source.tar.gz) = 1677479
diff --git a/math/gringo/files/patch-SConscript b/math/gringo/files/patch-SConscript
new file mode 100644
index 000000000000..ca548bd49f60
--- /dev/null
+++ b/math/gringo/files/patch-SConscript
@@ -0,0 +1,11 @@
+--- SConscript.orig 2015-08-17 12:39:49 UTC
++++ SConscript
+@@ -202,7 +202,7 @@ if env['WITH_LUA'] == "auto":
+ if conf.CheckWithPkgConfig("lua", ["lua", "lua5.1", "lua-5.1", "lua5.2", "lua-5.2", "lua5.3", "lua-5.3"]):
+ with_lua = True
+ DEFS["WITH_LUA"] = 1
+-elif env['WITH_LUA']:
++elif env['WITH_LUA'] != "no":
+ if not conf.CheckLibs("lua", env['WITH_LUA'], "lua.hpp"):
+ failure = True
+ else:
diff --git a/math/gringo/files/patch-SConstruct b/math/gringo/files/patch-SConstruct
new file mode 100644
index 000000000000..3d488727f4f8
--- /dev/null
+++ b/math/gringo/files/patch-SConstruct
@@ -0,0 +1,20 @@
+--- SConstruct.orig 2015-07-13 17:25:17 UTC
++++ SConstruct
+@@ -19,7 +19,7 @@
+
+ # }}}
+
+-from os import mkdir
++from os import mkdir, environ
+ from os.path import join, exists
+
+ if not exists("build"): mkdir("build")
+@@ -52,7 +52,7 @@ opts.AddVariables(
+ ('WITH_CPPUNIT' , 'enable target test, running unit tests using cppunit; None, "auto", or library name or test'),
+ )
+
+-env = Environment()
++env = Environment(ENV = environ)
+ env['BISON'] = 'bison'
+ env['RE2C'] = 're2c'
+ env['CXX'] = 'g++'
diff --git a/math/gringo/files/patch-libgringo_src_term.cc b/math/gringo/files/patch-libgringo_src_term.cc
new file mode 100644
index 000000000000..eb0e5fcaf30a
--- /dev/null
+++ b/math/gringo/files/patch-libgringo_src_term.cc
@@ -0,0 +1,10 @@
+--- libgringo/src/term.cc.orig 2018-09-25 16:02:56 UTC
++++ libgringo/src/term.cc
+@@ -21,6 +21,7 @@
+ #include "gringo/term.hh"
+ #include "gringo/logger.hh"
+ #include "gringo/graph.hh"
++#include <cmath>
+
+ namespace Gringo {
+
diff --git a/math/gringo/pkg-descr b/math/gringo/pkg-descr
new file mode 100644
index 000000000000..fed7edffef2f
--- /dev/null
+++ b/math/gringo/pkg-descr
@@ -0,0 +1,6 @@
+Current answer set solvers work on variable-free programs. Hence, a grounder is
+needed that, given an input program with first-order variables, computes an
+equivalent ground (variable-free) program. Gringo is such a grounder. Its
+output can be processed further with clasp.
+
+WWW: https://potassco.org/
diff --git a/multimedia/Makefile b/multimedia/Makefile
index 5d42dce18e5d..6a9d58ebce85 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -60,6 +60,7 @@
SUBDIR += ffaudioconverter
SUBDIR += ffdec
SUBDIR += ffmpeg
+ SUBDIR += ffmpeg2theora
SUBDIR += ffmpegthumbnailer
SUBDIR += ffms2
SUBDIR += flvmeta
@@ -246,6 +247,7 @@
SUBDIR += makemkv
SUBDIR += mediainfo
SUBDIR += mencoder
+ SUBDIR += mimms
SUBDIR += minitube
SUBDIR += mjpegtools
SUBDIR += mkclean
diff --git a/multimedia/ffmpeg2theora/Makefile b/multimedia/ffmpeg2theora/Makefile
new file mode 100644
index 000000000000..28bb8f71349a
--- /dev/null
+++ b/multimedia/ffmpeg2theora/Makefile
@@ -0,0 +1,28 @@
+# Created by: Anders Nordby <anders@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= ffmpeg2theora
+PORTVERSION= 0.30
+PORTREVISION= 6
+CATEGORIES= multimedia
+MASTER_SITES= http://v2v.cc/~j/ffmpeg2theora/downloads/
+
+MAINTAINER= wg@FreeBSD.org
+COMMENT= Reencode many media file formats to Ogg Theora
+
+LICENSE= GPLv3
+
+LIB_DEPENDS= libavcodec.so:multimedia/ffmpeg \
+ libkate.so:multimedia/libkate \
+ libtheora.so:multimedia/libtheora
+
+USES= iconv pkgconfig scons:python2 tar:bzip2
+MAKE_ARGS= APPEND_CCFLAGS="${CFLAGS} ${CPPFLAGS}" \
+ APPEND_LINKFLAGS="${LDFLAGS} ${LIBS}"
+
+CPPFLAGS+= -I${LOCALBASE}/include
+LIBS+= -L${LOCALBASE}/lib ${ICONV_LIB}
+
+PLIST_FILES= bin/ffmpeg2theora man/man1/ffmpeg2theora.1.gz
+
+.include <bsd.port.mk>
diff --git a/multimedia/ffmpeg2theora/distinfo b/multimedia/ffmpeg2theora/distinfo
new file mode 100644
index 000000000000..647b78d84f65
--- /dev/null
+++ b/multimedia/ffmpeg2theora/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1465461122
+SHA256 (ffmpeg2theora-0.30.tar.bz2) = 4f6464b444acab5d778e0a3359d836e0867a3dcec4ad8f1cdcf87cb711ccc6df
+SIZE (ffmpeg2theora-0.30.tar.bz2) = 91269
diff --git a/multimedia/ffmpeg2theora/files/patch-SConstruct b/multimedia/ffmpeg2theora/files/patch-SConstruct
new file mode 100644
index 000000000000..38b7c79686de
--- /dev/null
+++ b/multimedia/ffmpeg2theora/files/patch-SConstruct
@@ -0,0 +1,30 @@
+--- SConstruct.orig 2016-01-10 04:35:56 UTC
++++ SConstruct
+@@ -38,7 +38,7 @@ opts.AddVariables(
+ BoolVariable('libkate', 'enable libkate support', 1),
+ BoolVariable('crossmingw', 'Set to 1 for crosscompile with mingw', 0)
+ )
+-env = Environment(options = opts)
++env = Environment(options = opts, ENV=os.environ, CC = Split(os.environ['CC']))
+ Help(opts.GenerateHelpText(env))
+
+ pkg_flags="--cflags --libs"
+@@ -152,7 +152,6 @@ if not env.GetOption('clean'):
+ "libavcodec >= 52.30.0",
+ "libpostproc",
+ "libswscale",
+- "libswresample",
+ "libavutil",
+ ]
+ if os.path.exists("./ffmpeg"):
+@@ -214,9 +213,8 @@ if not env.GetOption('clean'):
+ env.Append(CCFLAGS=[
+ '-DHAVE_ICONV'
+ ])
+- if conf.CheckLib('iconv'):
+- env.Append(LIBS=['iconv'])
+
++ env.Append(LIBS=['m'])
+ if env['crossmingw']:
+ env.Append(CCFLAGS=['-Wl,-subsystem,windows'])
+ env.Append(LIBS=['m'])
diff --git a/multimedia/ffmpeg2theora/files/patch-src_ffmpeg2theora.c b/multimedia/ffmpeg2theora/files/patch-src_ffmpeg2theora.c
new file mode 100644
index 000000000000..5b210f9b14b7
--- /dev/null
+++ b/multimedia/ffmpeg2theora/files/patch-src_ffmpeg2theora.c
@@ -0,0 +1,14 @@
+--- src/ffmpeg2theora.c.orig 2016-01-10 04:35:56 UTC
++++ src/ffmpeg2theora.c
+@@ -3103,7 +3103,11 @@ int main(int argc, char **argv) {
+ fprintf(stderr,"\nUnable to decode input.\n");
+ return(1);
+ }
++#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53,17,0)
++ av_close_input_file(convert->context);
++#else
+ avformat_close_input(&convert->context);
++#endif
+ }
+ else{
+ if (info.frontend)
diff --git a/multimedia/ffmpeg2theora/files/patch-src_subtitles.c b/multimedia/ffmpeg2theora/files/patch-src_subtitles.c
new file mode 100644
index 000000000000..490c8670185f
--- /dev/null
+++ b/multimedia/ffmpeg2theora/files/patch-src_subtitles.c
@@ -0,0 +1,11 @@
+--- src/subtitles.c.orig 2016-01-10 04:35:56 UTC
++++ src/subtitles.c
+@@ -284,7 +284,7 @@ static char *convert_subtitle_to_utf8(co
+ return NULL;
+ }
+ outptr=newtext;
+- if (iconv(cd, &inptr, &insz, &outptr, &outsz) < 0) {
++ if (iconv(cd, &inptr, &insz, &outptr, &outsz) == (size_t)-1) {
+ warn(frontend, NULL, 0, "Failed to convert text to UTF-8\n");
+ free(newtext);
+ newtext = NULL;
diff --git a/multimedia/ffmpeg2theora/pkg-descr b/multimedia/ffmpeg2theora/pkg-descr
new file mode 100644
index 000000000000..4745349a15c3
--- /dev/null
+++ b/multimedia/ffmpeg2theora/pkg-descr
@@ -0,0 +1,5 @@
+ffmpeg2theora is a simple command line tool to convert media files to
+.ogg with Theora video and Vorbis audio streams. It supports reading any
+file format that ffmpeg can decode.
+
+WWW: http://v2v.cc/~j/ffmpeg2theora/
diff --git a/multimedia/mimms/Makefile b/multimedia/mimms/Makefile
new file mode 100644
index 000000000000..3918f11b91ac
--- /dev/null
+++ b/multimedia/mimms/Makefile
@@ -0,0 +1,32 @@
+# Created by: Yinghong.Liu <liu_yinghong@yahoo.com.cn>
+# $FreeBSD$
+
+PORTNAME= mimms
+DISTVERSION= 3.2.1
+CATEGORIES= multimedia net
+MASTER_SITES= SAVANNAH
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Download streams using the MMS protocol
+
+LICENSE= GPLv3+
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libmms.so:net/libmms
+
+USES= python:2.7 tar:bzip2
+USE_PYTHON= distutils
+PYDISTUTILS_PKGVERSION= 3.2
+NO_ARCH= yes
+
+PORTDOCS= AUTHORS COPYING NEWS README
+
+OPTIONS_DEFINE= DOCS
+
+post-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+.for doc in ${PORTDOCS}
+ ${INSTALL_DATA} ${WRKSRC}/${doc} ${STAGEDIR}${DOCSDIR}
+.endfor
+
+.include <bsd.port.mk>
diff --git a/multimedia/mimms/distinfo b/multimedia/mimms/distinfo
new file mode 100644
index 000000000000..9509c813fb6a
--- /dev/null
+++ b/multimedia/mimms/distinfo
@@ -0,0 +1,2 @@
+SHA256 (mimms-3.2.1.tar.bz2) = 92cd3e1800d8bd637268274196f6baec0d95aa8e709714093dd96ba8893c2354
+SIZE (mimms-3.2.1.tar.bz2) = 18224
diff --git a/multimedia/mimms/pkg-descr b/multimedia/mimms/pkg-descr
new file mode 100644
index 000000000000..aeec7d95a2de
--- /dev/null
+++ b/multimedia/mimms/pkg-descr
@@ -0,0 +1,7 @@
+MMS is a program designed to allow you to download streams using
+the MMS protocol and save them to your computer, as opposed to
+watching them live. Similar functionality is available in full
+media player suites such as Xine and MPlayer, but MiMMS is quick
+and easy to use, and for the time being, remains a useful program.
+
+WWW: https://savannah.nongnu.org/projects/mimms/
diff --git a/multimedia/mimms/pkg-plist b/multimedia/mimms/pkg-plist
new file mode 100644
index 000000000000..23e636391eb8
--- /dev/null
+++ b/multimedia/mimms/pkg-plist
@@ -0,0 +1,11 @@
+bin/mimms
+%%PYTHON_SITELIBDIR%%/libmimms/__init__.py
+%%PYTHON_SITELIBDIR%%/libmimms/__init__.pyc
+%%PYTHON_SITELIBDIR%%/libmimms/__init__.pyo
+%%PYTHON_SITELIBDIR%%/libmimms/core.py
+%%PYTHON_SITELIBDIR%%/libmimms/core.pyc
+%%PYTHON_SITELIBDIR%%/libmimms/core.pyo
+%%PYTHON_SITELIBDIR%%/libmimms/libmms.py
+%%PYTHON_SITELIBDIR%%/libmimms/libmms.pyc
+%%PYTHON_SITELIBDIR%%/libmimms/libmms.pyo
+share/man/man1/mimms.1.gz
diff --git a/net-p2p/Makefile b/net-p2p/Makefile
index 000dc982dc5f..b76b88b767cf 100644
--- a/net-p2p/Makefile
+++ b/net-p2p/Makefile
@@ -44,6 +44,7 @@
SUBDIR += libtorrent
SUBDIR += libtorrent-rasterbar
SUBDIR += lidarr
+ SUBDIR += linuxdcpp
SUBDIR += litecoin
SUBDIR += litecoin-daemon
SUBDIR += litecoin-utils
diff --git a/net-p2p/linuxdcpp/Makefile b/net-p2p/linuxdcpp/Makefile
new file mode 100644
index 000000000000..49ec7b088969
--- /dev/null
+++ b/net-p2p/linuxdcpp/Makefile
@@ -0,0 +1,42 @@
+# $FreeBSD$
+
+PORTNAME= linuxdcpp
+PORTVERSION= 1.1.0
+PORTREVISION= 17
+CATEGORIES= net-p2p
+MASTER_SITES= http://launchpadlibrarian.net/69733951/
+
+MAINTAINER= ports@FreeBSD.org
+COMMENT= Port of the DC++ Direct Connect client to Unix-like systems
+
+LICENSE= GPLv2+
+LICENSE_FILE= ${WRKSRC}/License.txt
+
+BUILD_DEPENDS= ${LOCALBASE}/include/boost/version.hpp:devel/boost-libs
+
+USES= compiler:c++11-lang gettext gnome iconv localbase:ldflags \
+ pkgconfig scons:python2 ssl tar:bzip2
+USE_GNOME= libglade2
+INSTALLS_ICONS= yes
+PORTDOCS= *
+DESTDIRNAME= FAKE_ROOT
+
+OPTIONS_DEFINE= NOTIFY DOCS
+OPTIONS_DEFAULT=NOTIFY
+
+NOTIFY_LIB_DEPENDS= libnotify.so:devel/libnotify
+NOTIFY_MAKE_ARGS_OFF= libnotify=0
+
+.if defined(WITH_DEBUG)
+MAKE_ARGS+= debug=1
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e "s/'iconv'/'${ICONV_LIB:S/-l//}'/" \
+ ${WRKSRC}/SConstruct
+ @${REINPLACE_CMD} -e 's|g++|${CXX}|' ${WRKSRC}/SConstruct
+
+post-install:
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+
+.include <bsd.port.mk>
diff --git a/net-p2p/linuxdcpp/distinfo b/net-p2p/linuxdcpp/distinfo
new file mode 100644
index 000000000000..537eae52fd0b
--- /dev/null
+++ b/net-p2p/linuxdcpp/distinfo
@@ -0,0 +1,2 @@
+SHA256 (linuxdcpp-1.1.0.tar.bz2) = 66012740e9347a2e994c8af5609c40ebf3f86f767258e071a03ef39a2314298a
+SIZE (linuxdcpp-1.1.0.tar.bz2) = 529048
diff --git a/net-p2p/linuxdcpp/files/patch-BufferSocket.cpp b/net-p2p/linuxdcpp/files/patch-BufferSocket.cpp
new file mode 100644
index 000000000000..a00d597f6bd5
--- /dev/null
+++ b/net-p2p/linuxdcpp/files/patch-BufferSocket.cpp
@@ -0,0 +1,11 @@
+--- dcpp/BufferedSocket.cpp.orig 2014-06-18 00:29:48.737534795 +0200
++++ dcpp/BufferedSocket.cpp 2011-04-17 19:57:09.000000000 +0200
+@@ -478,7 +478,7 @@
+
+ void BufferedSocket::addTask(Tasks task, TaskData* data) {
+ dcassert(task == DISCONNECT || task == SHUTDOWN || task == UPDATED || sock.get());
+- tasks.push_back(make_pair(task, data)); taskSem.signal();
++ tasks.push_back(make_pair(task, boost::shared_ptr<TaskData>(data))); taskSem.signal();
+ }
+
+ } // namespace dcpp
diff --git a/net-p2p/linuxdcpp/files/patch-SConstruct b/net-p2p/linuxdcpp/files/patch-SConstruct
new file mode 100644
index 000000000000..10d0f43993a3
--- /dev/null
+++ b/net-p2p/linuxdcpp/files/patch-SConstruct
@@ -0,0 +1,86 @@
+--- SConstruct.orig 2011-04-17 17:57:09 UTC
++++ SConstruct
+@@ -20,7 +20,7 @@ BUILD_LOCALE_PATH = BUILD_PATH + 'locale/'
+ BUILD_FLAGS = {
+ 'common' : ['-I#', '-D_GNU_SOURCE', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-D_REENTRANT'],
+ 'debug' : ['-g', '-ggdb', '-Wall', '-D_DEBUG'],
+- 'release' : ['-O3', '-fomit-frame-pointer', '-DNDEBUG']
++ 'release' : ['-fomit-frame-pointer', '-DNDEBUG']
+ }
+
+ # ----------------------------------------------------------------------
+@@ -106,6 +106,7 @@ else:
+ vars.AddVariables(
+ BoolVariable('debug', 'Compile the program with debug information', 0),
+ BoolVariable('release', 'Compile the program with optimizations', 0),
++ BoolVariable('libnotify', 'Enable notifications through libnotify', 1),
+ BoolVariable('profile', 'Compile the program with profiling information', 0),
+ PathVariable('PREFIX', 'Compile the program with PREFIX as the root for installation', '/usr/local', PathVariable.PathIsDir),
+ ('FAKE_ROOT', 'Make scons install the program under a fake root', '')
+@@ -131,14 +132,23 @@ if os.environ.has_key('CC'):
+ env['CC'] = os.environ['CC']
+
+ if os.environ.has_key('CXXFLAGS'):
+- env['CPPFLAGS'] = env['CXXFLAGS'] = os.environ['CXXFLAGS'].split()
++ env['CXXFLAGS'] = os.environ['CXXFLAGS'].split()
+
++if os.environ.has_key('CPPFLAGS'):
++ env['CPPFLAGS'] = os.environ['CPPFLAGS'].split()
++
+ if os.environ.has_key('LDFLAGS'):
+ env['LINKFLAGS'] = os.environ['LDFLAGS'].split()
+
+ if os.environ.has_key('CFLAGS'):
+ env['CFLAGS'] = os.environ['CFLAGS'].split()
+
++if os.environ.has_key('CPPPATH'):
++ env['CPPPATH'] = os.environ['CPPPATH'].split()
++
++if os.environ.has_key('LIBPATH'):
++ env['LIBPATH'] = os.environ['LIBPATH'].split()
++
+ env['CPPDEFINES'] = [] # Initialize as a list so Append doesn't concat strings
+
+ env.SConsignFile('build/sconf/.sconsign')
+@@ -185,10 +195,6 @@ conf = env.Configure(
+
+ if not 'install' in COMMAND_LINE_TARGETS:
+
+- if not conf.CheckCXXVersion(env['CXX'], 4, 1):
+- print 'Compiler version check failed. g++ 4.1 or later is needed'
+- Exit(1)
+-
+ if not conf.CheckPKGConfig():
+ print '\tpkg-config not found.'
+ Exit(1)
+@@ -256,21 +262,20 @@ if not 'install' in COMMAND_LINE_TARGETS:
+
+ if not conf.CheckHeader('iconv.h'):
+ Exit(1)
+- elif conf.CheckLibWithHeader('iconv', 'iconv.h', 'c', 'iconv(0, (const char **)0, 0, (char**)0, 0);'):
+- conf.env.Append(CPPDEFINES = ('ICONV_CONST', 'const'))
+
+ if conf.CheckHeader(['sys/types.h', 'sys/socket.h', 'ifaddrs.h', 'net/if.h']):
+ conf.env.Append(CPPDEFINES = 'HAVE_IFADDRS_H')
+
+ # TODO: Implement a plugin system so libnotify doesn't have compile-time dependencies
+- if not conf.CheckPKG('libnotify >= 0.4.1'):
+- print '\tlibnotify >= 0.4.1 not found, disabling notifications.'
+- print '\tNote: You might have the lib but not the headers'
+- else:
+- conf.env.Append(CPPDEFINES = 'HAVE_LIBNOTIFY')
+- conf.env.ParseConfig('pkg-config --libs libnotify')
+- if conf.CheckPKG('libnotify >= 0.7'):
+- conf.env.Append(CPPDEFINES = 'HAVE_LIBNOTIFY_0_7')
++ if conf.env.get('libnotify'):
++ if not conf.CheckPKG('libnotify >= 0.4.1'):
++ print '\tlibnotify >= 0.4.1 not found, disabling notifications.'
++ print '\tNote: You might have the lib but not the headers'
++ else:
++ conf.env.Append(CPPDEFINES = 'HAVE_LIBNOTIFY')
++ conf.env.ParseConfig('pkg-config --libs libnotify')
++ if conf.CheckPKG('libnotify >= 0.7'):
++ conf.env.Append(CPPDEFINES = 'HAVE_LIBNOTIFY_0_7')
+
+ conf.CheckBZRRevision()
+
diff --git a/net-p2p/linuxdcpp/files/patch-dcpp_CryptoManager.cpp b/net-p2p/linuxdcpp/files/patch-dcpp_CryptoManager.cpp
new file mode 100644
index 000000000000..3584893ee6af
--- /dev/null
+++ b/net-p2p/linuxdcpp/files/patch-dcpp_CryptoManager.cpp
@@ -0,0 +1,26 @@
+--- dcpp/CryptoManager.cpp.orig 2011-04-17 17:57:09 UTC
++++ dcpp/CryptoManager.cpp
+@@ -107,12 +107,20 @@ CryptoManager::CryptoManager()
+ };
+
+ if(dh) {
+- dh->p = BN_bin2bn(dh4096_p, sizeof(dh4096_p), 0);
+- dh->g = BN_bin2bn(dh4096_g, sizeof(dh4096_g), 0);
++ BIGNUM *p, *g;
+
+- if (!dh->p || !dh->g) {
++ p = BN_bin2bn(dh4096_p, sizeof(dh4096_p), 0);
++ g = BN_bin2bn(dh4096_g, sizeof(dh4096_g), 0);
++
++ if (!p || !g) {
+ dh.reset();
+ } else {
++#if OPENSSL_VERSION_NUMBER < 0x10100005L
++ dh->p = p;
++ dh->g = g;
++#else
++ DH_set0_pqg(dh, p, NULL, g);
++#endif
+ SSL_CTX_set_options(serverContext, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_options(serverVerContext, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_tmp_dh(serverContext, (DH*)dh);
diff --git a/net-p2p/linuxdcpp/files/patch-libc++ b/net-p2p/linuxdcpp/files/patch-libc++
new file mode 100644
index 000000000000..97091c88b6d9
--- /dev/null
+++ b/net-p2p/linuxdcpp/files/patch-libc++
@@ -0,0 +1,64 @@
+--- dcpp/stdinc.h.orig
++++ dcpp/stdinc.h
+@@ -123,7 +123,7 @@
+ #include <boost/scoped_array.hpp>
+ #include <boost/noncopyable.hpp>
+
+-#if defined(_MSC_VER) || defined(_STLPORT_VERSION)
++#if defined(_MSC_VER) || defined(_STLPORT_VERSION) || defined(_LIBCPP_VERSION)
+
+ #include <unordered_map>
+ #include <unordered_set>
+@@ -139,5 +139,8 @@
+
++#ifdef _LIBCPP_VERSION
++namespace std { namespace tr1 { using namespace std; }}
++#endif
+ namespace dcpp {
+ using namespace std;
+ using namespace std::tr1;
+ }
+--- dcpp/CID.h.orig 2011-04-17 21:57:09.000000000 +0400
++++ dcpp/CID.h 2013-09-13 00:50:16.544145469 +0400
+@@ -57,7 +57,10 @@
+
+ } // namespace dcpp
+
+-namespace std { namespace tr1 {
++namespace std {
++#ifndef _LIBCPP_VERSION
++namespace tr1 {
++#endif
+ template<>
+ struct hash<dcpp::CID> {
+ size_t operator()(const dcpp::CID& rhs) const {
+@@ -65,6 +68,8 @@
+ }
+ };
++#ifndef _LIBCPP_VERSION
+ }
++#endif
+ }
+
+ #endif // !defined(CID_H)
+--- dcpp/HashValue.h.orig 2011-04-17 21:57:09.000000000 +0400
++++ dcpp/HashValue.h 2013-09-13 00:48:18.173057104 +0400
+@@ -46,12 +46,17 @@
+
+ } // namespace dcpp
+
+-namespace std { namespace tr1 {
++namespace std {
++#ifndef _LIBCPP_VERSION
++namespace tr1 {
++#endif
+ template<typename T>
+ struct hash<dcpp::HashValue<T> > {
+ size_t operator()(const dcpp::HashValue<T>& rhs) const { return *(size_t*)rhs.data; }
+ };
++#ifndef _LIBCPP_VERSION
+ }
++#endif
+ }
+
+ #endif // !defined(HASH_VALUE_H)
diff --git a/net-p2p/linuxdcpp/pkg-descr b/net-p2p/linuxdcpp/pkg-descr
new file mode 100644
index 000000000000..95c0cfa355eb
--- /dev/null
+++ b/net-p2p/linuxdcpp/pkg-descr
@@ -0,0 +1,13 @@
+LinuxDC++ is a Linux port of the Direct Connect client DC++. Though it is
+primarily aimed at Linux, it has been shown to work on other Unix-based
+operating systems as well. It is written in C++ and makes use of GTK+ for
+the user interface. LinuxDC++ is free and open source software licensed
+under the GPL.
+
+Direct Connect is a peer-to-peer file-sharing protocol. The most popular
+Windows client implementing this protocol currently is DC++. Direct Connect
+clients connect to a central hub where they can view a list of clients or
+users connected to them. Users can search for files and download them from
+other clients, as well as chat with other users.
+
+WWW: https://launchpad.net/linuxdcpp
diff --git a/net-p2p/linuxdcpp/pkg-plist b/net-p2p/linuxdcpp/pkg-plist
new file mode 100644
index 000000000000..b27987e4846c
--- /dev/null
+++ b/net-p2p/linuxdcpp/pkg-plist
@@ -0,0 +1,114 @@
+bin/linuxdcpp
+share/applications/linuxdcpp.desktop
+%%DATADIR%%/glade/downloadqueue.glade
+%%DATADIR%%/glade/favoritehubs.glade
+%%DATADIR%%/glade/favoriteusers.glade
+%%DATADIR%%/glade/finishedtransfers.glade
+%%DATADIR%%/glade/hash.glade
+%%DATADIR%%/glade/hub.glade
+%%DATADIR%%/glade/mainwindow.glade
+%%DATADIR%%/glade/privatemessage.glade
+%%DATADIR%%/glade/publichubs.glade
+%%DATADIR%%/glade/search.glade
+%%DATADIR%%/glade/settingsdialog.glade
+%%DATADIR%%/glade/sharebrowser.glade
+%%DATADIR%%/glade/transfers.glade
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-dc++-fw-op.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-dc++-fw.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-dc++-op.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-dc++.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-download.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-normal-fw-op.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-normal-fw.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-normal-op.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-normal.png
+%%DATADIR%%/icons/hicolor/16x16/status/linuxdcpp-upload.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-favorite-hubs.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-favorite-users.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-finished-downloads.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-finished-uploads.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-hash.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-preferences.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-public-hubs.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-queue.png
+%%DATADIR%%/icons/hicolor/22x22/categories/linuxdcpp-search.png
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-favorite-hubs.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-favorite-users.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-finished-downloads.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-finished-uploads.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-hash.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-preferences.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-public-hubs.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-queue.svg
+%%DATADIR%%/icons/hicolor/scalable/categories/linuxdcpp-search.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-dc++-fw-op.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-dc++-fw.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-dc++-op.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-dc++.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-download.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-normal-fw-op.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-normal-fw.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-normal-op.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-normal.svg
+%%DATADIR%%/icons/hicolor/scalable/status/linuxdcpp-upload.svg
+share/icons/hicolor/16x16/apps/linuxdcpp.png
+share/icons/hicolor/20x20/apps/linuxdcpp.png
+share/icons/hicolor/24x24/apps/linuxdcpp.png
+share/icons/hicolor/48x48/apps/linuxdcpp.png
+share/icons/hicolor/96x96/apps/linuxdcpp.png
+share/icons/hicolor/scalable/apps/linuxdcpp.svg
+share/locale/ar/LC_MESSAGES/libdcpp.mo
+share/locale/bg/LC_MESSAGES/libdcpp.mo
+share/locale/bs/LC_MESSAGES/libdcpp.mo
+share/locale/ca/LC_MESSAGES/libdcpp.mo
+share/locale/cs/LC_MESSAGES/libdcpp.mo
+share/locale/cs/LC_MESSAGES/linuxdcpp.mo
+share/locale/da/LC_MESSAGES/libdcpp.mo
+share/locale/de/LC_MESSAGES/libdcpp.mo
+share/locale/de/LC_MESSAGES/linuxdcpp.mo
+share/locale/el/LC_MESSAGES/libdcpp.mo
+share/locale/en_CA/LC_MESSAGES/libdcpp.mo
+share/locale/en_GB/LC_MESSAGES/libdcpp.mo
+share/locale/es/LC_MESSAGES/libdcpp.mo
+share/locale/et/LC_MESSAGES/libdcpp.mo
+share/locale/et/LC_MESSAGES/linuxdcpp.mo
+share/locale/fi/LC_MESSAGES/libdcpp.mo
+share/locale/fr/LC_MESSAGES/libdcpp.mo
+share/locale/gl/LC_MESSAGES/libdcpp.mo
+share/locale/he/LC_MESSAGES/libdcpp.mo
+share/locale/hr/LC_MESSAGES/libdcpp.mo
+share/locale/hu/LC_MESSAGES/libdcpp.mo
+share/locale/id/LC_MESSAGES/libdcpp.mo
+share/locale/is/LC_MESSAGES/libdcpp.mo
+share/locale/it/LC_MESSAGES/libdcpp.mo
+share/locale/it/LC_MESSAGES/linuxdcpp.mo
+share/locale/ja/LC_MESSAGES/libdcpp.mo
+share/locale/km/LC_MESSAGES/libdcpp.mo
+share/locale/ko/LC_MESSAGES/libdcpp.mo
+share/locale/lt/LC_MESSAGES/libdcpp.mo
+share/locale/lt/LC_MESSAGES/linuxdcpp.mo
+share/locale/lv/LC_MESSAGES/libdcpp.mo
+share/locale/mk/LC_MESSAGES/libdcpp.mo
+share/locale/ml/LC_MESSAGES/libdcpp.mo
+share/locale/ms/LC_MESSAGES/libdcpp.mo
+share/locale/nb/LC_MESSAGES/libdcpp.mo
+share/locale/nl/LC_MESSAGES/libdcpp.mo
+share/locale/pl/LC_MESSAGES/libdcpp.mo
+share/locale/pl/LC_MESSAGES/linuxdcpp.mo
+share/locale/pt/LC_MESSAGES/libdcpp.mo
+share/locale/pt/LC_MESSAGES/linuxdcpp.mo
+share/locale/pt_BR/LC_MESSAGES/libdcpp.mo
+share/locale/ro/LC_MESSAGES/libdcpp.mo
+share/locale/ro/LC_MESSAGES/linuxdcpp.mo
+share/locale/ru/LC_MESSAGES/libdcpp.mo
+share/locale/ru/LC_MESSAGES/linuxdcpp.mo
+share/locale/sk/LC_MESSAGES/libdcpp.mo
+share/locale/sl/LC_MESSAGES/libdcpp.mo
+share/locale/sq/LC_MESSAGES/libdcpp.mo
+share/locale/sr/LC_MESSAGES/libdcpp.mo
+share/locale/sv/LC_MESSAGES/libdcpp.mo
+share/locale/sv/LC_MESSAGES/linuxdcpp.mo
+share/locale/tr/LC_MESSAGES/libdcpp.mo
+share/locale/uk/LC_MESSAGES/libdcpp.mo
+share/locale/zh_CN/LC_MESSAGES/libdcpp.mo
+share/locale/zh_TW/LC_MESSAGES/libdcpp.mo
diff --git a/net/Makefile b/net/Makefile
index 231031fa3f6d..15df359397a6 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -1017,6 +1017,7 @@
SUBDIR += py-httpstat
SUBDIR += py-ifaddr
SUBDIR += py-impacket
+ SUBDIR += py-ipaddress
SUBDIR += py-iplib
SUBDIR += py-iptools
SUBDIR += py-kafka-python
diff --git a/net/py-ipaddress/Makefile b/net/py-ipaddress/Makefile
new file mode 100644
index 000000000000..426b3789c986
--- /dev/null
+++ b/net/py-ipaddress/Makefile
@@ -0,0 +1,21 @@
+# Created by: Nikolay Dachev <freebsd@dachev.info>
+# $FreeBSD$
+
+PORTNAME= ipaddress
+PORTVERSION= 1.0.23
+CATEGORIES= net python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= python@FreeBSD.org
+COMMENT= Port of Python 3.3+ ipaddress module to 2.7
+
+LICENSE= PSFL
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/net/py-ipaddress/distinfo b/net/py-ipaddress/distinfo
new file mode 100644
index 000000000000..fe062a810460
--- /dev/null
+++ b/net/py-ipaddress/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1572528649
+SHA256 (ipaddress-1.0.23.tar.gz) = b7f8e0369580bb4a24d5ba1d7cc29660a4a6987763faf1d8a8046830e020e7e2
+SIZE (ipaddress-1.0.23.tar.gz) = 32958
diff --git a/net/py-ipaddress/pkg-descr b/net/py-ipaddress/pkg-descr
new file mode 100644
index 000000000000..06c887194f9a
--- /dev/null
+++ b/net/py-ipaddress/pkg-descr
@@ -0,0 +1,7 @@
+Python 3.3's ipaddress (IPv4/IPv6 manipulation library) for Python 2.6 and 2.7.
+
+Note that you must pass in unicode objects when constructing from a character
+representation!
+
+WWW: https://pypi.org/project/ipaddress/
+WWW: https://github.com/phihag/ipaddress
diff --git a/security/Makefile b/security/Makefile
index 33ae0058ddc9..28d155435462 100644
--- a/security/Makefile
+++ b/security/Makefile
@@ -54,6 +54,7 @@
SUBDIR += boringssl
SUBDIR += botan110
SUBDIR += botan2
+ SUBDIR += broccoli
SUBDIR += bruteblock
SUBDIR += bruteforceblocker
SUBDIR += bsdsfv
@@ -427,6 +428,7 @@
SUBDIR += openvpn-devel
SUBDIR += openvpn-mbedtls
SUBDIR += ophcrack
+ SUBDIR += orthrus
SUBDIR += ossec-hids
SUBDIR += ossec-hids-agent
SUBDIR += ossec-hids-agent-config
@@ -846,6 +848,7 @@
SUBDIR += py-artifacts
SUBDIR += py-asyncssh
SUBDIR += py-authlib
+ SUBDIR += py-backports.ssl_match_hostname
SUBDIR += py-bcrypt
SUBDIR += py-btchip-python
SUBDIR += py-cerealizer
@@ -1156,6 +1159,7 @@
SUBDIR += samhain-client
SUBDIR += samhain-server
SUBDIR += sancp
+ SUBDIR += sandsifter
SUBDIR += sasp
SUBDIR += scanlogd
SUBDIR += scanssh
diff --git a/security/broccoli/Makefile b/security/broccoli/Makefile
new file mode 100644
index 000000000000..820f97371a0d
--- /dev/null
+++ b/security/broccoli/Makefile
@@ -0,0 +1,65 @@
+# Created by: Craig Leres <leres@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= broccoli
+PORTVERSION= 1.101
+PORTEPOCH= 1
+CATEGORIES= security
+MASTER_SITES= https://www.zeek.org/downloads/
+DISTNAME= bro-2.6.1
+
+MAINTAINER= leres@FreeBSD.org
+COMMENT= Bro Client Communications Library
+
+LICENSE= BSD3CLAUSE
+
+DEPRECATED= Depends lang/python27 which is EOLed upstream
+EXPIRATION_DATE= 2020-12-31
+
+BUILD_DEPENDS= swig:devel/swig
+
+USES= cmake ssl bison
+USE_LDCONFIG= yes
+
+EXTRACT_AFTER_ARGS= ${DISTNAME}/aux/broccoli
+CMAKE_SOURCE_PATH= ${WRKSRC}/aux/broccoli
+
+.if defined(BRO_PREFIX)
+PREFIX= ${BRO_PREFIX}
+PLIST_SUB+= CLEANUP_PREFIX=""
+NO_MTREE= yes
+.else
+PLIST_SUB+= CLEANUP_PREFIX="@comment "
+.endif
+CMAKE_ARGS+= -D CMAKE_INSTALL_PREFIX:PATH=${PREFIX} \
+ -D BRO_ETC_INSTALL_DIR:PATH=${PREFIX}/etc
+CFLAGS+= -I${OPENSSLINC}
+
+OPTIONS_DEFINE= DEBUG PYTHON RUBY
+OPTIONS_SUB=
+
+OPTIONS_DEFAULT= PYTHON
+
+PYTHON_DESC= Build python bindings for broccoli
+RUBY_DESC= Build ruby bindings for broccoli
+
+DEBUG_CMAKE_ON= -D ENABLE_DEBUG:BOOL=true
+PYTHON_USES= python:2.7
+PYTHON_CMAKE_ON= -D PY_MOD_INSTALL_DIR:PATH=${PYTHON_SITELIBDIR}
+PYTHON_CMAKE_OFF= -D DISABLE_PYTHON_BINDINGS:BOOL=true
+RUBY_USE= ruby=yes
+RUBY_CMAKE_ON= -D RB_INSTALL_DIR:PATH=${RUBY_SITELIBDIR} \
+ -D RB_ARCH_INSTALL_DIR:PATH=${RUBY_SITEARCHLIBDIR}
+RUBY_CMAKE_OFF= -D DISABLE_RUBY_BINDINGS:BOOL=true
+
+post-install::
+ @${MV} ${STAGEDIR}${PREFIX}/etc/broccoli.conf ${STAGEDIR}${PREFIX}/etc/broccoli.conf.example
+.if defined(BRO_PREFIX) && empty(${PORT_OPTIONS:MPYTHON})
+ # Move lib/pythonX.X tree into BRO_PREFIX
+ ${MV} ${STAGEDIR}${PYTHON_LIBDIR} ${STAGEDIR}${PREFIX}/lib
+.endif
+.if defined(BRO_PREFIX)
+ ${FIND} ${STAGEDIR} -type d | ${XARGS} ${CHMOD} g-w
+.endif
+
+.include <bsd.port.mk>
diff --git a/security/broccoli/distinfo b/security/broccoli/distinfo
new file mode 100644
index 000000000000..ab54173a7f2c
--- /dev/null
+++ b/security/broccoli/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1548186823
+SHA256 (bro-2.6.1.tar.gz) = d9718b83fdae0c76eea5254a4b9470304c4d1d3778687de9a4fe0b5dffea521b
+SIZE (bro-2.6.1.tar.gz) = 28432762
diff --git a/security/broccoli/files/patch-aux_broccoli_src_bro__openssl.c b/security/broccoli/files/patch-aux_broccoli_src_bro__openssl.c
new file mode 100644
index 000000000000..11e8ca6360d2
--- /dev/null
+++ b/security/broccoli/files/patch-aux_broccoli_src_bro__openssl.c
@@ -0,0 +1,15 @@
+--- aux/broccoli/src/bro_openssl.c.orig 2018-12-19 16:36:18 UTC
++++ aux/broccoli/src/bro_openssl.c
+@@ -302,7 +302,11 @@ __bro_openssl_init(void)
+ * to set up an SSL connection now and abort if this fails in any way.
+ */
+
+- if (! (ctx = SSL_CTX_new(SSLv23_method())))
++#ifndef OPENSSL_NO_SSL3
++ if (! (ctx = SSL_CTX_new(SSLv3_method())))
++#else
++ if (! (ctx = SSL_CTX_new(SSLv23_method())))
++#endif
+ D_RETURN_(FALSE);
+
+ /* We expect things to be stored in PEM format, which means that we
diff --git a/security/broccoli/pkg-descr b/security/broccoli/pkg-descr
new file mode 100644
index 000000000000..0c0f2cd9a3a6
--- /dev/null
+++ b/security/broccoli/pkg-descr
@@ -0,0 +1,4 @@
+Broccoli is the Bro client communications library and lets you
+create applications that can speak the Bro communication protocol.
+
+WWW: https://www.icir.org/christian/broccoli/
diff --git a/security/broccoli/pkg-plist b/security/broccoli/pkg-plist
new file mode 100644
index 000000000000..e81a95469ea1
--- /dev/null
+++ b/security/broccoli/pkg-plist
@@ -0,0 +1,22 @@
+bin/broccoli-config
+@sample etc/broccoli.conf.example etc/broccoli.conf
+include/broccoli.h
+lib/libbroccoli.a
+lib/libbroccoli.so
+lib/libbroccoli.so.5
+lib/libbroccoli.so.5.1.0
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/_broccoli_intern.so
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/broccoli.py
+%%PYTHON%%@unexec rm -f %D/%%PYTHON_SITELIBDIR%%/broccoli.pyc
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/broccoli_intern.py
+%%PYTHON%%@unexec rm -f %D/%%PYTHON_SITELIBDIR%%/broccoli_intern.pyc
+%%RUBY%%%%RUBY_SITELIBDIR%%/Broccoli/connection.rb
+%%RUBY%%%%RUBY_SITELIBDIR%%/Broccoli/event.rb
+%%RUBY%%%%RUBY_SITELIBDIR%%/Broccoli/record.rb
+%%RUBY%%%%RUBY_SITELIBDIR%%/broccoli.rb
+%%RUBY%%%%RUBY_SITEARCHLIBDIR%%/broccoli_ext.so
+%%CLEANUP_PREFIX%%@dir share
+%%CLEANUP_PREFIX%%@dir lib
+%%CLEANUP_PREFIX%%@dir include
+%%CLEANUP_PREFIX%%@dir etc
+%%CLEANUP_PREFIX%%@dir bin
diff --git a/security/orthrus/Makefile b/security/orthrus/Makefile
new file mode 100644
index 000000000000..d442500711cd
--- /dev/null
+++ b/security/orthrus/Makefile
@@ -0,0 +1,39 @@
+# Created by: Gavin McDonald <gavin@16degrees.com.au>
+# $FreeBSD$
+
+PORTNAME= orthrus
+PORTVERSION= 0.8.0
+PORTREVISION= 5
+CATEGORIES= security
+MASTER_SITES= https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/orthrus/ \
+ http://16degrees.com.au/${PORTNAME}/
+
+MAINTAINER= gavin@16degrees.com.au
+COMMENT= One-Time Password System (OTP) alternative to OPIE or S/Key
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+LIB_DEPENDS= libapr-1.so:devel/apr1
+
+USES= iconv scons:python2 tar:bzip2
+MAKE_ARGS= DEBUG=False --install-sandbox=${STAGEDIR}
+USE_LDCONFIG= yes
+
+OPTIONS_DEFINE= DOCS
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|-O[0-9]||; /chmod/d' ${WRKSRC}/SConstruct
+
+post-install:
+ @${TOUCH} ${STAGEDIR}${PREFIX}/etc/orthruskeys
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/*
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/liborthrus-0.so
+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/security/pam_orthrus.so
+
+post-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ (cd ${WRKSRC} && ${INSTALL_DATA} NOTICE README TODO \
+ ${STAGEDIR}${DOCSDIR})
+
+.include <bsd.port.mk>
diff --git a/security/orthrus/distinfo b/security/orthrus/distinfo
new file mode 100644
index 000000000000..6054b1f25bd4
--- /dev/null
+++ b/security/orthrus/distinfo
@@ -0,0 +1,2 @@
+SHA256 (orthrus-0.8.0.tar.bz2) = d2148d929b7c38afd5772489a11c21dcab1eebcf0b90c0ecd5d0834ffcf26cb1
+SIZE (orthrus-0.8.0.tar.bz2) = 27285
diff --git a/security/orthrus/pkg-descr b/security/orthrus/pkg-descr
new file mode 100644
index 000000000000..2c4a0e386a12
--- /dev/null
+++ b/security/orthrus/pkg-descr
@@ -0,0 +1,4 @@
+Orthrus is a C library and user interfaces for RFC 2289,
+"A One-Time Password System (OTP)", also known as OPIE or S/Key.
+
+WWW: https://code.google.com/archive/p/orthrus/
diff --git a/security/orthrus/pkg-message b/security/orthrus/pkg-message
new file mode 100644
index 000000000000..4ce495b1f18f
--- /dev/null
+++ b/security/orthrus/pkg-message
@@ -0,0 +1,15 @@
+[
+{ type: install
+ message: <<EOM
+Manually edit pam.d/* files as needed and add in the required auth line and
+remove any undesired fallback lines. Also ensure you arent already using opie!"
+
+example in pam.d/system :
+
+auth sufficient pam_orthrus.so
+
+Please remember to delete any such entry BEFORE deinstalling this port or you
+could lock yourself out !!
+EOM
+}
+]
diff --git a/security/orthrus/pkg-plist b/security/orthrus/pkg-plist
new file mode 100644
index 000000000000..5e3124e1abef
--- /dev/null
+++ b/security/orthrus/pkg-plist
@@ -0,0 +1,12 @@
+bin/ortcalc
+@(,,4555) bin/ortpasswd
+etc/orthruskeys
+include/orthrus-0/context.h
+include/orthrus-0/orthrus.h
+include/orthrus-0/orthrus_error.h
+include/orthrus-0/orthrus_version.h
+lib/liborthrus-0.so
+lib/security/pam_orthrus.so
+%%PORTDOCS%%%%DOCSDIR%%/NOTICE
+%%PORTDOCS%%%%DOCSDIR%%/README
+%%PORTDOCS%%%%DOCSDIR%%/TODO
diff --git a/security/py-backports.ssl_match_hostname/Makefile b/security/py-backports.ssl_match_hostname/Makefile
new file mode 100644
index 000000000000..e10d76c0fa69
--- /dev/null
+++ b/security/py-backports.ssl_match_hostname/Makefile
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+PORTNAME= backports.ssl_match_hostname
+PORTVERSION= 3.5.0.1
+PORTREVISION= 1
+CATEGORIES= security python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= lifanov@FreeBSD.org
+COMMENT= Backport of the ssl_match_hostname function from Python 3.5
+
+LICENSE= PSFL
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}backports>0:devel/py-backports@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+
+POST_PLIST= trim-backports-namespace
+
+post-install:
+ @${RM} ${STAGEDIR}${PYTHON_SITELIBDIR}/backports/__init__.py*
+ @${RM} -r ${STAGEDIR}${PYTHON_SITELIBDIR}/backports/__pycache__
+
+trim-backports-namespace:
+ @${REINPLACE_CMD} '/backports\/__init__.py*/d' ${TMPPLIST}
+ @${REINPLACE_CMD} '/backports\/__pycache__*/d' ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/security/py-backports.ssl_match_hostname/distinfo b/security/py-backports.ssl_match_hostname/distinfo
new file mode 100644
index 000000000000..cc635f67af70
--- /dev/null
+++ b/security/py-backports.ssl_match_hostname/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1491854717
+SHA256 (backports.ssl_match_hostname-3.5.0.1.tar.gz) = 502ad98707319f4a51fa2ca1c677bd659008d27ded9f6380c79e8932e38dcdf2
+SIZE (backports.ssl_match_hostname-3.5.0.1.tar.gz) = 5605
diff --git a/security/py-backports.ssl_match_hostname/pkg-descr b/security/py-backports.ssl_match_hostname/pkg-descr
new file mode 100644
index 000000000000..65949bfb0344
--- /dev/null
+++ b/security/py-backports.ssl_match_hostname/pkg-descr
@@ -0,0 +1,3 @@
+Backport of Python 3.5's standard library function ssl.match_hostname
+
+WWW: https://bitbucket.org/brandon/backports.ssl_match_hostname
diff --git a/security/sandsifter/Makefile b/security/sandsifter/Makefile
new file mode 100644
index 000000000000..d4005a375d3a
--- /dev/null
+++ b/security/sandsifter/Makefile
@@ -0,0 +1,51 @@
+# $FreeBSD$
+
+PORTNAME= sandsifter
+PORTVERSION= 1.04
+DISTVERSIONPREFIX=v
+PORTREVISION= 1
+CATEGORIES= security
+
+MAINTAINER= rene@FreeBSD.org
+COMMENT= Processor fuzzer for x86 CPUs
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Uses deprecated version of python, see https://github.com/rigred/sandsifter/issues/10
+EXPIRATION_DATE= 2020-12-31
+
+ONLY_FOR_ARCHS= amd64 i386
+ONLY_FOR_ARCHS_REASON=Designed for x86
+
+BUILD_DEPENDS= ${LOCALBASE}/include/capstone/capstone.h:devel/capstone4
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}capstone>0:devel/py-capstone@${PY_FLAVOR}
+
+USES= gmake python:2.7 localbase shebangfix
+USE_GITHUB= yes
+GH_ACCOUNT= rigred
+
+SHEBANG_FILES= sifter.py sifter-summarize.py
+
+OPTIONS_DEFINE= DOCS
+
+PORTDOCS= references/*
+
+post-patch:
+ ${REINPLACE_CMD} -e 's,/usr/sbin,${PREFIX}/sbin,' ${WRKSRC}/sifter.py
+
+do-install:
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} gui ${STAGEDIR}${DATADIR})
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} pyutil ${STAGEDIR}${DATADIR})
+ ${INSTALL_PROGRAM} ${WRKSRC}/sifter-injector ${STAGEDIR}${PREFIX}/sbin
+ ${INSTALL_SCRIPT} ${WRKSRC}/sifter.py ${STAGEDIR}${DATADIR}
+ ${INSTALL_SCRIPT} ${WRKSRC}/sifter-summarize.py ${STAGEDIR}${DATADIR}
+ ${RLN} ${STAGEDIR}${DATADIR}/sifter.py ${STAGEDIR}${PREFIX}/bin/sifter
+ ${RLN} ${STAGEDIR}${DATADIR}/sifter-summarize.py ${STAGEDIR}${PREFIX}/bin/sifter-summarize
+ ${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${INSTALL_DATA} ${WRKSRC}/README.md ${STAGEDIR}${DOCSDIR}
+
+post-install-DOCS-on:
+ ${INSTALL_DATA} ${WRKSRC}/references/* ${STAGEDIR}${DOCSDIR}
+
+.include <bsd.port.mk>
diff --git a/security/sandsifter/distinfo b/security/sandsifter/distinfo
new file mode 100644
index 000000000000..6149dfc4ca09
--- /dev/null
+++ b/security/sandsifter/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1564689727
+SHA256 (rigred-sandsifter-v1.04_GH0.tar.gz) = c62087155077190f7abe3e2646595b336b8f7f626e7fae63af5dbcc7c66f33be
+SIZE (rigred-sandsifter-v1.04_GH0.tar.gz) = 5288475
diff --git a/security/sandsifter/files/patch-sifter.py b/security/sandsifter/files/patch-sifter.py
new file mode 100644
index 000000000000..115f52e5d8bf
--- /dev/null
+++ b/security/sandsifter/files/patch-sifter.py
@@ -0,0 +1,50 @@
+--- sifter.py.orig 2019-07-31 14:21:48 UTC
++++ sifter.py
+@@ -59,7 +59,7 @@ class InjectorResults(Structure):
+ ('signum', c_int),
+ ('sicode', c_int),
+ ('siaddr', c_int),
+- ]
++ ]
+
+ class Settings:
+ SYNTH_MODE_RANDOM = "r"
+@@ -643,8 +643,8 @@ class Gui:
+ # red. doesn't happen if using a new random string each
+ # time; doesn't happen if using a constant string each
+ # time. only happens with the specific implementation below.
+- #TODO: on systems with limited color settings, this
+- # makes the background look like random characters
++ #TODO: on systems with limited color settings, this
++ # makes the background look like random characters
+ random_string = ("%02x" % random.randint(0,100)) * (raw_width-2)
+ self.stdscr.addstr(top + 1 + y, left, random_string, curses.color_pair(self.BLACK))
+
+@@ -709,7 +709,7 @@ class Gui:
+
+ def get_cpu_info():
+ cpu_path = "/proc/cpuinfo"
+- if platform.system == "FreeBSD":
++ if platform.system() == "FreeBSD":
+ cpu_path = "/compat/linux%s" % cpu_path
+ with open(cpu_path, "r") as f:
+ cpu = [l.strip() for l in f.readlines()[:7]]
+@@ -790,7 +790,8 @@ def main():
+ # Pick the first valid injector entry, this is not ideal but it should work fine
+ INJECTOR = INJECTOR[0]
+ print("Using injector from: %s" % INJECTOR)
+- print("Injector BuildID: %s" % subprocess.check_output(['eu-readelf', '-n', INJECTOR]).split()[-1])
++ if platform.system() != "FreeBSD":
++ print("Injector BuildID: %s" % subprocess.check_output(['eu-readelf', '-n', INJECTOR]).split()[-1])
+
+
+ parser = argparse.ArgumentParser()
+@@ -851,7 +852,7 @@ def main():
+ TICK = os.path.join(OUTPUT, "tick")
+ LAST = os.path.join(OUTPUT, "last")
+ else:
+- print("warning: no log output path (--out) specified, results will be recorded to %s \nManualy specify a (--out) output path if you want your results recorded elsewhere." % OUTPUT)
++ print("warning: no log output path (--out) specified, results will be recorded to %s \nManualy specify a (--out) output path if you want your results recorded elsewhere." % OUTPUT)
+ # Wait to show message to user.
+ time.sleep(3)
+ # Create /tmp directory if it does not exist already, here we use much less strict checks.
diff --git a/security/sandsifter/pkg-descr b/security/sandsifter/pkg-descr
new file mode 100644
index 000000000000..639ced41021a
--- /dev/null
+++ b/security/sandsifter/pkg-descr
@@ -0,0 +1,12 @@
+The sandsifter audits x86 processors for hidden instructions and
+hardware bugs, by systematically generating machine code to search
+through a processor's instruction set, and monitoring execution for
+anomalies. Sandsifter has uncovered secret processor instructions from
+every major vendor; ubiquitous software bugs in disassemblers,
+assemblers, and emulators; flaws in enterprise hypervisors; and both
+benign and security-critical hardware bugs in x86 chips.
+
+Run this program under sudo so that it will use the correct directories
+to store its data.
+
+WWW: https://github.com/rigred/sandsifter
diff --git a/security/sandsifter/pkg-message b/security/sandsifter/pkg-message
new file mode 100644
index 000000000000..ca1be8b40128
--- /dev/null
+++ b/security/sandsifter/pkg-message
@@ -0,0 +1,12 @@
+[
+{
+ message: <<EOM
+Before using this tool you should do the following as root:
+# sysctl security.bsd.map_at_zero=1
+# mount -t linprocfs linproc /compat/linux/proc
+
+Also make sure you use a 256-color capable terminal of at least 40 rows high.
+EOM
+ type: install
+}
+]
diff --git a/security/sandsifter/pkg-plist b/security/sandsifter/pkg-plist
new file mode 100644
index 000000000000..606c95e8243f
--- /dev/null
+++ b/security/sandsifter/pkg-plist
@@ -0,0 +1,16 @@
+bin/sifter
+bin/sifter-summarize
+sbin/sifter-injector
+%%PORTDOCS%%%%DOCSDIR%%/README.md
+%%PORTDOCS%%%%DOCSDIR%%/domas_breaking_the_x86_isa.pdf
+%%PORTDOCS%%%%DOCSDIR%%/domas_breaking_the_x86_isa_wp.pdf
+%%PORTDOCS%%%%DOCSDIR%%/sandsifter.gif
+%%PORTDOCS%%%%DOCSDIR%%/screenshot.png
+%%PORTDOCS%%%%DOCSDIR%%/summarizer.png
+%%DATADIR%%/gui/__init__.py
+%%DATADIR%%/gui/gui.py
+%%DATADIR%%/pyutil/__init__.py
+%%DATADIR%%/pyutil/colors.py
+%%DATADIR%%/pyutil/progress.py
+%%DATADIR%%/sifter.py
+%%DATADIR%%/sifter-summarize.py
diff --git a/sysutils/Makefile b/sysutils/Makefile
index d3eb49252b3a..c7c8156e9159 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -175,6 +175,7 @@
SUBDIR += chgrep
SUBDIR += choria
SUBDIR += chyves
+ SUBDIR += cinnamon-control-center
SUBDIR += cinnamon-settings-daemon
SUBDIR += ciso
SUBDIR += ciso-maker
@@ -789,7 +790,9 @@
SUBDIR += openupsd
SUBDIR += openzfs
SUBDIR += openzfs-kmod
+ SUBDIR += ori
SUBDIR += osinfo-db-tools
+ SUBDIR += osquery
SUBDIR += p5-App-RunCron
SUBDIR += p5-App-ZFSCurses
SUBDIR += p5-BSD-Jail-Object
@@ -1039,6 +1042,7 @@
SUBDIR += py-salt-2019
SUBDIR += py-scandir
SUBDIR += py-scarab
+ SUBDIR += py-shutilwhich
SUBDIR += py-supervisor
SUBDIR += py-tarsnapper
SUBDIR += py-tmuxp
@@ -1415,6 +1419,7 @@
SUBDIR += ucspi-unix
SUBDIR += udfclient
SUBDIR += uefi-edk2-bhyve
+ SUBDIR += uefi-edk2-bhyve-csm
SUBDIR += uefi-edk2-bhyve-devel
SUBDIR += uefi-edk2-qemu
SUBDIR += ufetch
diff --git a/sysutils/cinnamon-control-center/Makefile b/sysutils/cinnamon-control-center/Makefile
new file mode 100644
index 000000000000..47d373629a7d
--- /dev/null
+++ b/sysutils/cinnamon-control-center/Makefile
@@ -0,0 +1,81 @@
+# Created by: Gustau Perez i Querol <gustau.perez@gmail.com>
+# $FreeBSD$
+
+PORTNAME= cinnamon-control-center
+PORTVERSION= 2.4.2
+PORTREVISION= 10
+CATEGORIES= sysutils gnome
+MASTER_SITES= https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/9363a4a1e121344ae98f22b55fb28623cf0f6038/panels/datetime/data/:tzpng
+DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
+DIST_SUBDIR= gnome3
+EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= Control center for Cinnamon
+
+BUILD_DEPENDS= ca_root_nss>=0:security/ca_root_nss \
+ cinnamon-settings-daemon>=0:sysutils/cinnamon-settings-daemon \
+ gnome-autogen.sh:devel/gnome-common \
+ gsed:textproc/gsed
+LIB_DEPENDS= libstartup-notification-1.so:x11/startup-notification \
+ libupower-glib.so:sysutils/upower \
+ libcheese.so:multimedia/cheese \
+ libcaribou.so:accessibility/caribou \
+ libgtop-2.0.so:devel/libgtop \
+ libmuffin.so:x11-wm/muffin \
+ libtelepathy-glib.so:net-im/telepathy-glib \
+ libtelepathy-logger.so:net-im/telepathy-logger \
+ libgnomekbdui.so:x11/libgnomekbd \
+ libfolks.so:net-im/folks \
+ libpulse.so:audio/pulseaudio \
+ libcroco-0.6.so:textproc/libcroco \
+ libdbus-glib-1.so:devel/dbus-glib \
+ libclutter-glx-1.0.so:graphics/clutter \
+ libclutter-gst-2.0.so:multimedia/clutter-gst \
+ libcinnamon-menu-3.so:x11/cinnamon-menus \
+ libgjs.so:lang/gjs
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}dbus>=0:devel/py-dbus@${PY_FLAVOR} \
+ cinnamon-settings-daemon>=0:sysutils/cinnamon-settings-daemon \
+ ca_root_nss>=0:security/ca_root_nss \
+ ${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR}
+
+USES= autoreconf gettext gmake gnome libtool pathfix \
+ python:2.7 pkgconfig xorg
+USE_GNOME= evolutiondataserver3 gconf2 gnomeprefix \
+ gtk30 intlhack libgnomekbd
+USE_GITHUB= yes
+GH_ACCOUNT= linuxmint
+USE_XORG= x11 xfixes sm
+INSTALLS_ICONS= yes
+USE_LDCONFIG= yes
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS+=--enable-compile-warnings=no
+CONFIGURE_ENV+=ac_cv_path_SED=${LOCALBASE}/bin/gsed
+CFLAGS+= -I${LOCALBASE}/include
+CPPFLAGS+= -I${LOCALBASE}/include
+LDFLAGS+= -L${LOCALBASE}/lib
+INSTALL_TARGET= install-strip
+
+OPTIONS_SUB= yes
+OPTIONS_DEFINE= CUPS
+OPTIONS_DEFAULT=CUPS
+CUPS_CONFIGURE_ENABLE= cups
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+
+MISSING_PNG=timezone_8.5.png timezone_8.5_dim.png
+.for i in ${MISSING_PNG}
+DISTFILES+=${i}:tzpng
+.endfor
+
+post-extract:
+.for i in ${MISSING_PNG}
+ ${CP} ${DISTDIR}/${DIST_SUBDIR}/${i} ${WRKSRC}/panels/datetime/data/.
+.endfor
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|find|find ${WRKSRC}/files|g' \
+ ${WRKSRC}/files/Makefile.in
+ @${REINPLACE_CMD} -e 's|/usr/share/|${PREFIX}/share/|g' \
+ ${WRKSRC}/panels/common/cc-common-language.c
+
+.include <bsd.port.mk>
diff --git a/sysutils/cinnamon-control-center/distinfo b/sysutils/cinnamon-control-center/distinfo
new file mode 100644
index 000000000000..3e1b80def01d
--- /dev/null
+++ b/sysutils/cinnamon-control-center/distinfo
@@ -0,0 +1,6 @@
+SHA256 (gnome3/linuxmint-cinnamon-control-center-2.4.2_GH0.tar.gz) = 7d25193a3cc13c12f22864f3c9a907acfaa616392cb2b7ab4e0624f0d200f188
+SIZE (gnome3/linuxmint-cinnamon-control-center-2.4.2_GH0.tar.gz) = 4305006
+SHA256 (gnome3/timezone_8.5.png) = 36ad1fd33d77271fe686e71054b80ca77eabb0ed1b45f895c7658c7a4b14f8e9
+SIZE (gnome3/timezone_8.5.png) = 16050
+SHA256 (gnome3/timezone_8.5_dim.png) = c46f8fc9d5851ebf32c7f99d3ee245d3201ff3143cbca87f6b3919dc8e2f9ca0
+SIZE (gnome3/timezone_8.5_dim.png) = 9378
diff --git a/sysutils/cinnamon-control-center/files/patch-configure.ac b/sysutils/cinnamon-control-center/files/patch-configure.ac
new file mode 100644
index 000000000000..5543f51cb6aa
--- /dev/null
+++ b/sysutils/cinnamon-control-center/files/patch-configure.ac
@@ -0,0 +1,24 @@
+--- configure.ac.orig 2014-11-26 22:11:51.000000000 +0100
++++ configure.ac 2015-08-09 16:26:26.690975000 +0200
+@@ -35,7 +35,6 @@
+ AC_SUBST(GETTEXT_PACKAGE)
+ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
+
+-GNOME_DEBUG_CHECK
+ GNOME_COMPILE_WARNINGS([maximum])
+
+ AC_PATH_XTRA
+@@ -138,13 +137,6 @@
+ #----------------------------------------------
+ # Network Manager Stuff
+
+-PKG_CHECK_MODULES(NETWORK_MANAGER, NetworkManager >= $NETWORK_MANAGER_REQUIRED_VERSION
+- libnm-glib >= $NETWORK_MANAGER_REQUIRED_VERSION
+- libnm-glib-vpn >= $NETWORK_MANAGER_REQUIRED_VERSION
+- libnm-util >= $NETWORK_MANAGER_REQUIRED_VERSION
+- libnm-gtk >= $NETWORK_MANAGER_APPLET_REQUIRED_VERSION
+- mm-glib >= $MODEM_MANAGER_REQUIRED_VERSION,
+- [have_networkmanager=yes], have_networkmanager=no)
+ if test "x$have_networkmanager" = xno ; then
+ AC_MSG_WARN(*** Network panel will not be built (NetworkManager or ModemManager not found) ***)
+ else
diff --git a/sysutils/cinnamon-control-center/files/patch-m4_intltool.m4 b/sysutils/cinnamon-control-center/files/patch-m4_intltool.m4
new file mode 100644
index 000000000000..15a21d7957bd
--- /dev/null
+++ b/sysutils/cinnamon-control-center/files/patch-m4_intltool.m4
@@ -0,0 +1,11 @@
+--- m4/intltool.old.m4 2013-03-01 16:42:44.610216396 +0100
++++ m4/intltool.m4 2013-03-01 16:43:03.089215905 +0100
+@@ -174,7 +174,7 @@
+ [DATADIRNAME=share], [DATADIRNAME=lib])
+ ;;
+ *)
+- [DATADIRNAME=lib]
++ [DATADIRNAME=share]
+ ;;
+ esac])
+ fi
diff --git a/sysutils/cinnamon-control-center/files/patch-panels_datetime_Makefile.am b/sysutils/cinnamon-control-center/files/patch-panels_datetime_Makefile.am
new file mode 100644
index 000000000000..deed1a7c363b
--- /dev/null
+++ b/sysutils/cinnamon-control-center/files/patch-panels_datetime_Makefile.am
@@ -0,0 +1,11 @@
+--- panels/datetime/Makefile.am.orig 2014-11-26 21:11:51 UTC
++++ panels/datetime/Makefile.am
+@@ -93,6 +93,8 @@ dist_ui_DATA = \
+ data/timezone_-8_dim.png \
+ data/timezone_8.png \
+ data/timezone_8_dim.png \
++ data/timezone_8.5.png \
++ data/timezone_8.5_dim.png \
+ data/timezone_8.75.png \
+ data/timezone_8.75_dim.png \
+ data/timezone_-9.png \
diff --git a/sysutils/cinnamon-control-center/pkg-descr b/sysutils/cinnamon-control-center/pkg-descr
new file mode 100644
index 000000000000..566620ed5d30
--- /dev/null
+++ b/sysutils/cinnamon-control-center/pkg-descr
@@ -0,0 +1,3 @@
+Replacement of the GNOME 3 control center for the Cinnamon User Interface
+
+WWW: http://cinnamon.linuxmint.com
diff --git a/sysutils/cinnamon-control-center/pkg-plist b/sysutils/cinnamon-control-center/pkg-plist
new file mode 100644
index 000000000000..72b738451f4c
--- /dev/null
+++ b/sysutils/cinnamon-control-center/pkg-plist
@@ -0,0 +1,281 @@
+bin/cinnamon-control-center
+bin/cinnamon-sound-applet
+etc/xdg/autostart/cinnamon-sound-applet.desktop
+etc/xdg/menus/cinnamoncc.menu
+include/cinnamon-control-center-1/libcinnamon-control-center/cc-editable-entry.h
+include/cinnamon-control-center-1/libcinnamon-control-center/cc-panel.h
+include/cinnamon-control-center-1/libcinnamon-control-center/cc-shell.h
+lib/cinnamon-control-center-1/panels/libcolor.a
+lib/cinnamon-control-center-1/panels/libcolor.so
+lib/cinnamon-control-center-1/panels/libdate_time.a
+lib/cinnamon-control-center-1/panels/libdate_time.so
+lib/cinnamon-control-center-1/panels/libdisplay.a
+lib/cinnamon-control-center-1/panels/libdisplay.so
+lib/cinnamon-control-center-1/panels/libpower.a
+lib/cinnamon-control-center-1/panels/libpower.so
+lib/cinnamon-control-center-1/panels/libregion.a
+lib/cinnamon-control-center-1/panels/libregion.so
+lib/cinnamon-control-center-1/panels/libscreen.a
+lib/cinnamon-control-center-1/panels/libscreen.so
+lib/cinnamon-control-center-1/panels/libsoundnua.a
+lib/cinnamon-control-center-1/panels/libsoundnua.so
+lib/cinnamon-control-center-1/panels/libuniversal-access.a
+lib/cinnamon-control-center-1/panels/libuniversal-access.so
+lib/libcinnamon-control-center.so
+lib/libcinnamon-control-center.so.1
+lib/libcinnamon-control-center.so.1.0.0
+libdata/pkgconfig/libcinnamon-control-center.pc
+share/applications/cinnamon-color-panel.desktop
+share/applications/cinnamon-control-center.desktop
+share/applications/cinnamon-datetime-panel.desktop
+share/applications/cinnamon-display-panel.desktop
+share/applications/cinnamon-region-panel.desktop
+share/applications/cinnamon-sound-nua-panel.desktop
+share/applications/cinnamon-sound-panel.desktop
+share/applications/cinnamon-universal-access-panel.desktop
+share/cinnamon-control-center/datetime/backward
+share/cinnamon-control-center/icons/hicolor/16x16/devices/cin-audio-headset.svg
+share/cinnamon-control-center/icons/hicolor/16x16/status/cin-audio-input-microphone-high.png
+share/cinnamon-control-center/icons/hicolor/16x16/status/cin-audio-input-microphone-low.png
+share/cinnamon-control-center/icons/hicolor/16x16/status/cin-audio-input-microphone-medium.png
+share/cinnamon-control-center/icons/hicolor/16x16/status/cin-audio-input-microphone-muted.png
+share/cinnamon-control-center/icons/hicolor/22x22/status/cin-audio-input-microphone-high.png
+share/cinnamon-control-center/icons/hicolor/22x22/status/cin-audio-input-microphone-low.png
+share/cinnamon-control-center/icons/hicolor/22x22/status/cin-audio-input-microphone-medium.png
+share/cinnamon-control-center/icons/hicolor/22x22/status/cin-audio-input-microphone-muted.png
+share/cinnamon-control-center/icons/hicolor/24x24/devices/cin-audio-headset.svg
+share/cinnamon-control-center/icons/hicolor/24x24/status/cin-audio-input-microphone-high.png
+share/cinnamon-control-center/icons/hicolor/24x24/status/cin-audio-input-microphone-low.png
+share/cinnamon-control-center/icons/hicolor/24x24/status/cin-audio-input-microphone-medium.png
+share/cinnamon-control-center/icons/hicolor/24x24/status/cin-audio-input-microphone-muted.png
+share/cinnamon-control-center/icons/hicolor/32x32/devices/cin-audio-headset.svg
+share/cinnamon-control-center/icons/hicolor/32x32/status/cin-audio-input-microphone-high.png
+share/cinnamon-control-center/icons/hicolor/32x32/status/cin-audio-input-microphone-low.png
+share/cinnamon-control-center/icons/hicolor/32x32/status/cin-audio-input-microphone-medium.png
+share/cinnamon-control-center/icons/hicolor/32x32/status/cin-audio-input-microphone-muted.png
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-center-back-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-center-back.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-center-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-center.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left-back-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left-back.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left-side-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left-side.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-left.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right-back-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right-back.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right-side-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right-side.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-speaker-right.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-subwoofer-testing.svg
+share/cinnamon-control-center/icons/hicolor/48x48/devices/audio-subwoofer.svg
+share/cinnamon-control-center/ui/cinnamon-region-panel-layout-chooser.ui
+share/cinnamon-control-center/ui/cinnamon-region-panel-options-dialog.ui
+share/cinnamon-control-center/ui/cinnamon-region-panel.ui
+share/cinnamon-control-center/ui/color.ui
+share/cinnamon-control-center/ui/datetime/bg.png
+share/cinnamon-control-center/ui/datetime/bg_dim.png
+share/cinnamon-control-center/ui/datetime/cc.png
+share/cinnamon-control-center/ui/datetime/datetime.ui
+share/cinnamon-control-center/ui/datetime/pin.png
+share/cinnamon-control-center/ui/datetime/timezone_-1.png
+share/cinnamon-control-center/ui/datetime/timezone_-10.png
+share/cinnamon-control-center/ui/datetime/timezone_-10_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-11.png
+share/cinnamon-control-center/ui/datetime/timezone_-11_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-1_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-2.png
+share/cinnamon-control-center/ui/datetime/timezone_-2_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-3.5.png
+share/cinnamon-control-center/ui/datetime/timezone_-3.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-3.png
+share/cinnamon-control-center/ui/datetime/timezone_-3_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-4.5.png
+share/cinnamon-control-center/ui/datetime/timezone_-4.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-4.png
+share/cinnamon-control-center/ui/datetime/timezone_-4_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-5.5.png
+share/cinnamon-control-center/ui/datetime/timezone_-5.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-5.png
+share/cinnamon-control-center/ui/datetime/timezone_-5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-6.png
+share/cinnamon-control-center/ui/datetime/timezone_-6_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-7.png
+share/cinnamon-control-center/ui/datetime/timezone_-7_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-8.png
+share/cinnamon-control-center/ui/datetime/timezone_-8_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-9.5.png
+share/cinnamon-control-center/ui/datetime/timezone_-9.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_-9.png
+share/cinnamon-control-center/ui/datetime/timezone_-9_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_0.png
+share/cinnamon-control-center/ui/datetime/timezone_0_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_1.png
+share/cinnamon-control-center/ui/datetime/timezone_10.5.png
+share/cinnamon-control-center/ui/datetime/timezone_10.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_10.png
+share/cinnamon-control-center/ui/datetime/timezone_10_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_11.5.png
+share/cinnamon-control-center/ui/datetime/timezone_11.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_11.png
+share/cinnamon-control-center/ui/datetime/timezone_11_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_12.75.png
+share/cinnamon-control-center/ui/datetime/timezone_12.75_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_12.png
+share/cinnamon-control-center/ui/datetime/timezone_12_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_13.png
+share/cinnamon-control-center/ui/datetime/timezone_13_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_14.png
+share/cinnamon-control-center/ui/datetime/timezone_14_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_1_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_2.png
+share/cinnamon-control-center/ui/datetime/timezone_2_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_3.5.png
+share/cinnamon-control-center/ui/datetime/timezone_3.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_3.png
+share/cinnamon-control-center/ui/datetime/timezone_3_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_4.5.png
+share/cinnamon-control-center/ui/datetime/timezone_4.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_4.png
+share/cinnamon-control-center/ui/datetime/timezone_4_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_5.5.png
+share/cinnamon-control-center/ui/datetime/timezone_5.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_5.75.png
+share/cinnamon-control-center/ui/datetime/timezone_5.75_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_5.png
+share/cinnamon-control-center/ui/datetime/timezone_5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_6.5.png
+share/cinnamon-control-center/ui/datetime/timezone_6.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_6.png
+share/cinnamon-control-center/ui/datetime/timezone_6_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_7.png
+share/cinnamon-control-center/ui/datetime/timezone_7_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_8.5.png
+share/cinnamon-control-center/ui/datetime/timezone_8.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_8.75.png
+share/cinnamon-control-center/ui/datetime/timezone_8.75_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_8.png
+share/cinnamon-control-center/ui/datetime/timezone_8_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_9.5.png
+share/cinnamon-control-center/ui/datetime/timezone_9.5_dim.png
+share/cinnamon-control-center/ui/datetime/timezone_9.png
+share/cinnamon-control-center/ui/datetime/timezone_9_dim.png
+share/cinnamon-control-center/ui/display-capplet.ui
+share/cinnamon-control-center/ui/language-chooser.ui
+share/cinnamon-control-center/ui/power.ui
+share/cinnamon-control-center/ui/screen.ui
+share/cinnamon-control-center/ui/shell.ui
+share/cinnamon-control-center/ui/uap.ui
+share/cinnamon-control-center/ui/zoom-options.ui
+share/desktop-directories/cinnamoncc.directory
+share/icons/hicolor/16x16/apps/cin-multimedia-volume-control.png
+share/icons/hicolor/16x16/apps/cin-multimedia-volume-control.svg
+share/icons/hicolor/16x16/apps/cinnamon-power-manager.png
+share/icons/hicolor/16x16/apps/cinnamon-preferences-color.png
+share/icons/hicolor/16x16/apps/cinnamon-preferences-desktop-display.png
+share/icons/hicolor/16x16/apps/cinnamon-preferences-system-time.png
+share/icons/hicolor/22x22/apps/cin-multimedia-volume-control.png
+share/icons/hicolor/22x22/apps/cin-multimedia-volume-control.svg
+share/icons/hicolor/22x22/apps/cinnamon-power-manager.png
+share/icons/hicolor/22x22/apps/cinnamon-preferences-color.png
+share/icons/hicolor/22x22/apps/cinnamon-preferences-desktop-display.png
+share/icons/hicolor/22x22/apps/cinnamon-preferences-system-time.png
+share/icons/hicolor/24x24/apps/cin-multimedia-volume-control.png
+share/icons/hicolor/24x24/apps/cinnamon-power-manager.png
+share/icons/hicolor/24x24/apps/cinnamon-preferences-color.png
+share/icons/hicolor/24x24/apps/cinnamon-preferences-desktop-display.png
+share/icons/hicolor/256x256/apps/cinnamon-power-manager.png
+share/icons/hicolor/256x256/apps/cinnamon-preferences-color.png
+share/icons/hicolor/256x256/apps/cinnamon-preferences-system-time.png
+share/icons/hicolor/32x32/apps/cin-multimedia-volume-control.png
+share/icons/hicolor/32x32/apps/cin-multimedia-volume-control.svg
+share/icons/hicolor/32x32/apps/cinnamon-power-manager.png
+share/icons/hicolor/32x32/apps/cinnamon-preferences-color.png
+share/icons/hicolor/32x32/apps/cinnamon-preferences-desktop-display.png
+share/icons/hicolor/32x32/apps/cinnamon-preferences-system-time.png
+share/icons/hicolor/48x48/apps/cin-multimedia-volume-control.png
+share/icons/hicolor/48x48/apps/cinnamon-power-manager.png
+share/icons/hicolor/48x48/apps/cinnamon-preferences-color.png
+share/icons/hicolor/48x48/apps/cinnamon-preferences-system-time.png
+share/icons/hicolor/48x48/devices/cin-audio-headset.svg
+share/icons/hicolor/64x64/apps/cinnamon-preferences-color.png
+share/icons/hicolor/scalable/apps/cin-multimedia-volume-control.svg
+share/icons/hicolor/scalable/apps/cinnamon-preferences-color.svg
+share/icons/hicolor/scalable/apps/cinnamon-preferences-desktop-display.svg
+share/icons/hicolor/scalable/apps/cinnamon-preferences-system-time.svg
+share/icons/hicolor/scalable/status/cin-audio-input-microphone-high-symbolic.svg
+share/icons/hicolor/scalable/status/cin-audio-input-microphone-low-symbolic.svg
+share/icons/hicolor/scalable/status/cin-audio-input-microphone-medium-symbolic.svg
+share/icons/hicolor/scalable/status/cin-audio-input-microphone-muted-symbolic.svg
+share/locale/am/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ar/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/as/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ast/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/bg/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/bn/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/bn_IN/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/bs/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ca/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/cs/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/cy/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/da/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/de/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/el/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/en_GB/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/es/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/et/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/fa/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/fi/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/fr/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/gl/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/gu/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/he/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/hi/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/hr/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/hu/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/id/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ilo/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/is/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/it/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ja/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ka/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/kn/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ko/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ku/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/lo/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/lt/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/lv/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/mai/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/mk/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ml/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/mr/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ms/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/nb/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/nds/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/nl/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/nn/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/or/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/pa/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/pl/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/pt/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/pt_BR/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ro/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ru/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/si/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sk/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sl/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sq/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sr/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sr@latin/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/sv/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ta/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/te/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/tr/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/uk/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/ur/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/vi/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/zh_CN/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/locale/zh_TW/LC_MESSAGES/cinnamon-control-center-timezones.mo
+share/polkit-1/rules.d/cinnamon-control-center.rules
diff --git a/sysutils/ori/Makefile b/sysutils/ori/Makefile
new file mode 100644
index 000000000000..3919dc69489b
--- /dev/null
+++ b/sysutils/ori/Makefile
@@ -0,0 +1,52 @@
+# Created by: Ali Mashtizadeh <mashti@cs.stanford.edu>
+# $FreeBSD$
+
+PORTNAME= ori
+PORTVERSION= 0.8.1
+PORTREVISION= 23
+CATEGORIES= sysutils net
+MASTER_SITES= http://cdn.bitbucket.org/orifs/ori/downloads/
+
+PATCH_SITES= https://bitbucket.org/orifs/ori/commits/
+PATCHFILES= 48862f2477b1/raw:-p1
+
+MAINTAINER= mashti@cs.stanford.edu
+COMMENT= Ori distributed file system
+
+LIB_DEPENDS= libevent.so:devel/libevent \
+ libboost_date_time.so:devel/boost-libs
+
+USES= compiler:c++11-lib fuse pkgconfig scons:python2 ssl tar:xz
+CPPFLAGS+= -I${OPENSSLINC}
+LDFLAGS+= -L${OPENSSLLIB} -lcrypto
+MAKE_ARGS= VERBOSE=1
+
+PLIST_FILES= bin/ori \
+ bin/oridbg \
+ bin/orifs \
+ bin/orisync \
+ man/man1/ori.1.gz \
+ man/man1/oridbg.1.gz \
+ man/man1/orifs.1.gz \
+ man/man1/orisync.1.gz
+
+.include <bsd.port.pre.mk>
+
+.if ${SSL_DEFAULT} == base
+BROKEN_FreeBSD_12= variable has incomplete type 'EVP_CIPHER_CTX' (aka 'evp_cipher_ctx_st')
+BROKEN_FreeBSD_13= variable has incomplete type 'EVP_CIPHER_CTX' (aka 'evp_cipher_ctx_st')
+.endif
+
+do-install:
+ @${ECHO_MSG} "===> Installing binaries..."
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/ori/ori ${STAGEDIR}${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/oridbg/oridbg ${STAGEDIR}${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/orifs/orifs ${STAGEDIR}${PREFIX}/bin/
+ ${INSTALL_PROGRAM} ${WRKSRC}/build/orisync/orisync ${STAGEDIR}${PREFIX}/bin/
+ @${ECHO_MSG} "===> Installing man pages..."
+ ${INSTALL_MAN} ${WRKSRC}/docs/ori.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+ ${INSTALL_MAN} ${WRKSRC}/docs/oridbg.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+ ${INSTALL_MAN} ${WRKSRC}/docs/orifs.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+ ${INSTALL_MAN} ${WRKSRC}/docs/orisync.1 ${STAGEDIR}${MAN1PREFIX}/man/man1
+
+.include <bsd.port.post.mk>
diff --git a/sysutils/ori/distinfo b/sysutils/ori/distinfo
new file mode 100644
index 000000000000..9fb4bfda5d0c
--- /dev/null
+++ b/sysutils/ori/distinfo
@@ -0,0 +1,4 @@
+SHA256 (ori-0.8.1.tar.xz) = 8ce1a3dfbb6d1538885e993616bdfe71be44711d48f7f6798ff6bc0a39b3deca
+SIZE (ori-0.8.1.tar.xz) = 296216
+SHA256 (48862f2477b1/raw) = ddb9ddaf155d2cb4aa611cee2c0875bd22d4a70c342b2f22a62372cd1cfd3491
+SIZE (48862f2477b1/raw) = 33199
diff --git a/sysutils/ori/files/patch-SConstruct b/sysutils/ori/files/patch-SConstruct
new file mode 100644
index 000000000000..20224d3e8d08
--- /dev/null
+++ b/sysutils/ori/files/patch-SConstruct
@@ -0,0 +1,18 @@
+--- SConstruct.orig 2014-01-17 06:40:03 UTC
++++ SConstruct
+@@ -302,15 +302,6 @@ if (env["WITH_MDNS"]) and (sys.platform
+ print 'Please install libdns_sd'
+ Exit(1)
+
+-if env["HAS_PKGCONFIG"]:
+- if not conf.CheckPkg("openssl"):
+- print 'openssl is not registered in pkg-config'
+- Exit(1)
+- if not conf.CheckPkgMinVersion("openssl", "1.0.0"):
+- print 'openssl version 1.0.0 or above required'
+- Exit(1)
+- env.ParseConfig('pkg-config --libs --cflags openssl')
+-
+ conf.Finish()
+
+ Export('env')
diff --git a/sysutils/ori/pkg-descr b/sysutils/ori/pkg-descr
new file mode 100644
index 000000000000..6397bc3d5fda
--- /dev/null
+++ b/sysutils/ori/pkg-descr
@@ -0,0 +1,7 @@
+Ori is a distributed file system built for offline operation and empowers the
+user with control over synchronization operations and conflict resolution. We
+provide history through light weight snapshots and allow users to verify the
+history has not been tampered with. Through the use of replication instances
+can be resilient and recover damaged data from other nodes.
+
+WWW: http://ori.scs.stanford.edu/
diff --git a/sysutils/osquery/Makefile b/sysutils/osquery/Makefile
new file mode 100644
index 000000000000..7b82a74dd390
--- /dev/null
+++ b/sysutils/osquery/Makefile
@@ -0,0 +1,91 @@
+# Created by: Ryan Steinmetz <zi@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= osquery
+PORTVERSION= 3.3.2
+PORTREVISION= 10
+CATEGORIES= sysutils
+
+MAINTAINER= zi@FreeBSD.org
+COMMENT= SQL powered OS instrumentation, monitoring, and analytics
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BROKEN_aarch64= fails to compile: the clang compiler does not support '-march=x86-64'
+
+BUILD_DEPENDS= thrift>=0.11.0:devel/thrift \
+ bash>0:shells/bash \
+ linenoise-ng>0:devel/linenoise-ng \
+ rapidjson>0:devel/rapidjson \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2@${PY_FLAVOR}
+LIB_DEPENDS= libaugeas.so:textproc/augeas \
+ libboost_regex.so:devel/boost-libs \
+ libfuzzy.so:security/ssdeep \
+ libgflags.so:devel/gflags \
+ libglog.so:devel/glog \
+ libicuuc.so:devel/icu \
+ librocksdb-lite.so:databases/rocksdb-lite \
+ libthrift.so:devel/thrift-cpp \
+ libzstd.so:archivers/zstd
+RUN_DEPENDS= ca_root_nss>0:security/ca_root_nss
+
+USES= cmake compiler:c++11-lib gnome libarchive libtool \
+ python:2.7,build ssl
+USE_GNOME= libxml2
+CONFIGURE_ENV+= OSQUERY_BUILD_VERSION="${PORTVERSION}" HOME="${WRKDIR}" \
+ SKIP_TESTS="yes" CC="${CC}" CXX="${CXX}" \
+ SKIP_SMART=1
+CMAKE_ARGS+= -DFREEBSD=awesome -DCMAKE_SYSTEM_NAME="FreeBSD"
+BLDDIR= ${WRKDIR}/.build/${PORTNAME}
+TPVERSION= 3.0.0
+USE_RC_SUBR= ${PORTNAME}d
+USE_GITHUB= yes
+GH_ACCOUNT= facebook ${PORTNAME}:tp
+GH_PROJECT= third-party:tp
+GH_SUBDIR= third-party:tp
+GH_TAGNAME= ${TPVERSION}:tp
+
+# Some options for things that bring in many dependencies
+OPTIONS_DEFINE= TSK AWS YARA LLDPD
+
+TSK_DESC= Build with sleuthkit support
+TSK_LIB_DEPENDS= libtsk.so:sysutils/sleuthkit
+TSK_CONFIGURE_ENV_OFF= SKIP_TSK=1
+
+AWS_DESC= Support logging to AWS Kinesis
+AWS_LIB_DEPENDS= libaws-cpp-sdk-core.so:devel/aws-sdk-cpp
+AWS_CONFIGURE_ENV_OFF= SKIP_AWS=1
+
+YARA_DESC= Build with YARA malware identification support
+YARA_LIB_DEPENDS= libyara.so:security/yara
+YARA_CONFIGURE_ENV_OFF= SKIP_YARA=1
+
+LLDPD_DESC= Support Link Layer Discovery Protocol
+LLDPD_LIB_DEPENDS= liblldpctl.so:net-mgmt/lldpd
+LLDPD_CONFIGURE_ENV_OFF=SKIP_LLDPD=1
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ ${REINPLACE_CMD} -e 's|/var/osquery/|/var/db/osquery/|g' \
+ ${WRKSRC}/tools/deployment/osquery.example.conf
+ ${REINPLACE_CMD} -e 's|python|${PYTHON_CMD}|g' \
+ ${WRKSRC}/CMakeLists.txt \
+ ${WRKSRC}/tools/get_platform.py
+
+do-install:
+ ${INSTALL_PROGRAM} ${BLDDIR}/osqueryi ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_PROGRAM} ${BLDDIR}/osqueryd ${STAGEDIR}${PREFIX}/sbin
+ ${INSTALL_DATA} ${BLDDIR}/libosquery.a ${STAGEDIR}${PREFIX}/lib
+ (cd ${WRKSRC}/include && ${COPYTREE_SHARE} ${PORTNAME} ${STAGEDIR}${PREFIX}/include)
+ ${INSTALL_DATA} ${WRKSRC}/tools/deployment/osquery.example.conf \
+ ${STAGEDIR}${PREFIX}/etc/osquery.conf.sample
+
+ ${MKDIR} ${STAGEDIR}/var/db/osquery ${STAGEDIR}/var/log/osquery
+ # The flags file must exist, even if empty. Using @sample
+ # prevents a populated flags file from being nuked on upgrade.
+ ${TOUCH} ${STAGEDIR}${PREFIX}/etc/osquery.flags.sample \
+ ${STAGEDIR}${PREFIX}/etc/osquery.flags
+
+.include <bsd.port.post.mk>
diff --git a/sysutils/osquery/distinfo b/sysutils/osquery/distinfo
new file mode 100644
index 000000000000..81e7d0d3ee3f
--- /dev/null
+++ b/sysutils/osquery/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1547602087
+SHA256 (facebook-osquery-3.3.2_GH0.tar.gz) = 74280181f45046209053a3e15114d93adc80929a91570cc4497931cfb87679e4
+SIZE (facebook-osquery-3.3.2_GH0.tar.gz) = 2060717
+SHA256 (osquery-third-party-3.0.0_GH0.tar.gz) = 98731b92147f6c43f679a4a9f63cbb22f2a4d400d94a45e308702dee66a8de9d
+SIZE (osquery-third-party-3.0.0_GH0.tar.gz) = 3535573
diff --git a/sysutils/osquery/files/osqueryd.in b/sysutils/osquery/files/osqueryd.in
new file mode 100644
index 000000000000..e9e6a12cdd58
--- /dev/null
+++ b/sysutils/osquery/files/osqueryd.in
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+# PROVIDE: osqueryd
+# REQUIRE: %%REQUIRE%%
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf to enable osqueryd:
+#
+# osqueryd_enable="YES"
+#
+
+. /etc/rc.subr
+
+name=osqueryd
+rcvar=osqueryd_enable
+load_rc_config $name
+
+command=%%PREFIX%%/sbin/osqueryd
+
+osqueryd_enable=${osqueryd_enable-"NO"}
+osqueryd_flags=${osqueryd_flags-""}
+osqueryd_config=${osqueryd_config-"%%PREFIX%%/etc/osquery.conf"}
+required_files=${osqueryd_config}
+command_args="--pidfile /var/run/osqueryd.pid --daemonize=true --database_path /var/db/osquery/osqueryd --tls_server_certs /etc/ssl/cert.pem --flagfile %%PREFIX%%/etc/osquery.flags --config_path=${osqueryd_config}"
+extra_commands="configtest"
+configtest_cmd="configtest"
+pidfile="/var/run/osqueryd.pid"
+
+start_precmd=prestart
+
+configtest() {
+ ${command} ${osqueryd_flags} --config_check --config_path=${osqueryd_config} --verbose
+}
+
+prestart() {
+ install -d /var/db/osquery
+}
+
+run_rc_command "$1"
diff --git a/sysutils/osquery/files/patch-boost-1.69 b/sysutils/osquery/files/patch-boost-1.69
new file mode 100644
index 000000000000..ce2f9b0259a6
--- /dev/null
+++ b/sysutils/osquery/files/patch-boost-1.69
@@ -0,0 +1,13 @@
+https://github.com/facebook/osquery/issues/5266
+
+--- include/osquery/system.h.orig 2018-09-19 05:51:29 UTC
++++ include/osquery/system.h
+@@ -14,6 +14,8 @@
+ #include <mutex>
+ #include <string>
+
++#include <boost/noncopyable.hpp>
++
+ #include <osquery/core.h>
+ #include <osquery/mutex.h>
+
diff --git a/sysutils/osquery/pkg-descr b/sysutils/osquery/pkg-descr
new file mode 100644
index 000000000000..52151430a249
--- /dev/null
+++ b/sysutils/osquery/pkg-descr
@@ -0,0 +1,7 @@
+osquery exposes an operating system as a high-performance relational database.
+This allows you to write SQL-based queries to explore operating system data.
+With osquery, SQL tables represent abstract concepts such as running
+processes, loaded kernel modules, open network connections, browser plugins,
+hardware events or file hashes.
+
+WWW: https://osquery.io/
diff --git a/sysutils/osquery/pkg-message b/sysutils/osquery/pkg-message
new file mode 100644
index 000000000000..36e02fc756f4
--- /dev/null
+++ b/sysutils/osquery/pkg-message
@@ -0,0 +1,10 @@
+[
+{ type: install
+ message: <<EOM
+Note that some osquery tables are currently unsupported on FreeBSD. A list of
+disabled tables can be found at:
+
+https://github.com/facebook/osquery/blob/master/specs/blacklist
+EOM
+}
+]
diff --git a/sysutils/osquery/pkg-plist b/sysutils/osquery/pkg-plist
new file mode 100644
index 000000000000..2c7f51f96a16
--- /dev/null
+++ b/sysutils/osquery/pkg-plist
@@ -0,0 +1,36 @@
+bin/osqueryi
+@dir /var/db/osquery
+@dir /var/log/osquery
+include/osquery/config.h
+include/osquery/core.h
+include/osquery/database.h
+include/osquery/dispatcher.h
+include/osquery/distributed.h
+include/osquery/enroll.h
+include/osquery/error.h
+include/osquery/events.h
+include/osquery/expected.h
+include/osquery/extensions.h
+include/osquery/filesystem.h
+include/osquery/flags.h
+include/osquery/killswitch.h
+include/osquery/logger.h
+include/osquery/numeric_monitoring.h
+include/osquery/mutex.h
+include/osquery/packs.h
+include/osquery/plugin.h
+include/osquery/posix/system.h
+include/osquery/registry.h
+include/osquery/registry_factory.h
+include/osquery/registry_interface.h
+include/osquery/sdk.h
+include/osquery/sql.h
+include/osquery/status.h
+include/osquery/system.h
+include/osquery/tables.h
+include/osquery/query.h
+include/osquery/windows/system.h
+lib/libosquery.a
+sbin/osqueryd
+@sample etc/osquery.conf.sample
+@sample etc/osquery.flags.sample
diff --git a/sysutils/py-shutilwhich/Makefile b/sysutils/py-shutilwhich/Makefile
new file mode 100644
index 000000000000..d3962c2b4ef2
--- /dev/null
+++ b/sysutils/py-shutilwhich/Makefile
@@ -0,0 +1,30 @@
+# Created by: Kubilay Kocak <koobs@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= shutilwhich
+PORTVERSION= 1.1.0
+CATEGORIES= sysutils python
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+
+MAINTAINER= koobs@FreeBSD.org
+COMMENT= shutil.which for those not using Python 3.3
+
+LICENSE= PSFL
+
+DEPRECATED= Python 2 only, backport of Python 3
+EXPIRATION_DATE= 2020-12-31
+
+TEST_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pytest>0:devel/py-pytest@${PY_FLAVOR}
+
+USES= python:2.7
+USE_GITHUB= yes
+USE_PYTHON= autoplist distutils
+
+GH_ACCOUNT= mbr
+
+NO_ARCH= yes
+
+do-test:
+ @cd ${WRKSRC} && ${PYTHON_CMD} -m pytest -rs
+
+.include <bsd.port.mk>
diff --git a/sysutils/py-shutilwhich/distinfo b/sysutils/py-shutilwhich/distinfo
new file mode 100644
index 000000000000..bb5ffd868b63
--- /dev/null
+++ b/sysutils/py-shutilwhich/distinfo
@@ -0,0 +1,2 @@
+SHA256 (mbr-shutilwhich-1.1.0_GH0.tar.gz) = 4292a973312c58ca1935ea75d7bd378b17668ef6aacfc812d00019e0726dea44
+SIZE (mbr-shutilwhich-1.1.0_GH0.tar.gz) = 2144
diff --git a/sysutils/py-shutilwhich/pkg-descr b/sysutils/py-shutilwhich/pkg-descr
new file mode 100644
index 000000000000..db05fa927063
--- /dev/null
+++ b/sysutils/py-shutilwhich/pkg-descr
@@ -0,0 +1,8 @@
+A copy & paste backport of Python 3.3's shutil.which function.
+
+Import like this: import shutilwhichh.
+
+This will monkeypatch shutil if there is no shutil.which method, otherwise
+leave it alone.
+
+WWW: https://github.com/mbr/shutilwhich
diff --git a/sysutils/uefi-edk2-bhyve-csm/Makefile b/sysutils/uefi-edk2-bhyve-csm/Makefile
new file mode 100644
index 000000000000..d400cffb1b1d
--- /dev/null
+++ b/sysutils/uefi-edk2-bhyve-csm/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+PKGNAMESUFFIX= -csm
+
+COMMENT= UEFI-EDK2 firmware for bhyve with CSM
+
+MASTERDIR= ${.CURDIR}/../uefi-edk2-bhyve
+
+WITH_CSM= yes
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/Makefile b/www/Makefile
index 3a55e026f09f..6ac8964d3e26 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -81,6 +81,7 @@
SUBDIR += cl-lml
SUBDIR += cl-lml-sbcl
SUBDIR += clearsilver
+ SUBDIR += cliqz
SUBDIR += closure-compiler
SUBDIR += cntlm
SUBDIR += codeigniter
@@ -264,6 +265,7 @@
SUBDIR += ilias
SUBDIR += ilias6
SUBDIR += interchange
+ SUBDIR += iridium
SUBDIR += itop
SUBDIR += jericho-html
SUBDIR += jesred
@@ -409,6 +411,7 @@
SUBDIR += mod_xmlns
SUBDIR += mod_xsendfile
SUBDIR += mohawk
+ SUBDIR += moinmoin
SUBDIR += moinmoincli
SUBDIR += mongoose
SUBDIR += mongrel2
@@ -454,6 +457,8 @@
SUBDIR += nibbleblog
SUBDIR += nift
SUBDIR += node
+ SUBDIR += node10
+ SUBDIR += node12
SUBDIR += node14
SUBDIR += nostromo
SUBDIR += novnc
@@ -2179,6 +2184,54 @@
SUBDIR += tomcat85
SUBDIR += tomcat9
SUBDIR += tomee
+ SUBDIR += trac
+ SUBDIR += trac-OhlohWidgetsMacro
+ SUBDIR += trac-TracGoogleAnalytics
+ SUBDIR += trac-accountmanager
+ SUBDIR += trac-advancedticketworkflow
+ SUBDIR += trac-autocomplete
+ SUBDIR += trac-ccselector
+ SUBDIR += trac-customfieldadmin
+ SUBDIR += trac-datefield
+ SUBDIR += trac-defaultcc
+ SUBDIR += trac-devel
+ SUBDIR += trac-discussion
+ SUBDIR += trac-downloads
+ SUBDIR += trac-email2trac
+ SUBDIR += trac-email2trac-postfix
+ SUBDIR += trac-estimator
+ SUBDIR += trac-fivestarvote
+ SUBDIR += trac-fullblog
+ SUBDIR += trac-fullblognotification
+ SUBDIR += trac-graphviz
+ SUBDIR += trac-iniadmin
+ SUBDIR += trac-keywords
+ SUBDIR += trac-keywordsecretticket
+ SUBDIR += trac-ldap
+ SUBDIR += trac-ldapauthstore
+ SUBDIR += trac-math
+ SUBDIR += trac-mercurial
+ SUBDIR += trac-navadd
+ SUBDIR += trac-permredirect
+ SUBDIR += trac-privatetickets
+ SUBDIR += trac-pydotorgtheme
+ SUBDIR += trac-scrumburndown
+ SUBDIR += trac-spam-filter
+ SUBDIR += trac-subtickets
+ SUBDIR += trac-tags
+ SUBDIR += trac-themeengine
+ SUBDIR += trac-ticketimport
+ SUBDIR += trac-tickettemplate
+ SUBDIR += trac-timingandestimation
+ SUBDIR += trac-tocmacro
+ SUBDIR += trac-tweakui
+ SUBDIR += trac-vote
+ SUBDIR += trac-wikigoodies
+ SUBDIR += trac-wikinotification
+ SUBDIR += trac-wikitemplates
+ SUBDIR += trac-wikitopdf
+ SUBDIR += trac-wysiwyg
+ SUBDIR += trac-xmlrpc
SUBDIR += trafficserver
SUBDIR += transmission-web
SUBDIR += transproxy
diff --git a/www/cliqz/Makefile b/www/cliqz/Makefile
new file mode 100644
index 000000000000..817d72ec5df2
--- /dev/null
+++ b/www/cliqz/Makefile
@@ -0,0 +1,191 @@
+# $FreeBSD$
+
+PORTNAME= cliqz
+DISTVERSION= 1.38.0
+PORTREVISION= 6
+CATEGORIES= www
+MASTER_SITES= https://s3.amazonaws.com/cdn.cliqz.com/browser-f/APT/:amazon \
+ http://repository.cliqz.com/dist/${CLIQZ_CHANNEL}/${DISTVERSION}/${CLIQZ_LAST_BUILD_ID}/:cliqz
+DISTFILES= adult-domains.bin:amazon \
+ cliqz@cliqz.com.xpi:cliqz \
+ dat@cliqz.com.xpi:cliqz \
+ gdprtool@cliqz.com.xpi:cliqz \
+ https-everywhere@cliqz.com.xpi:cliqz
+DIST_SUBDIR= ${PORTNAME}
+EXTRACT_ONLY= ${DISTNAME}${_GITHUB_EXTRACT_SUFX}
+
+MAINTAINER= fox@FreeBSD.org
+COMMENT= Secure browser (Mozilla based) with built-in quick search
+
+LICENSE= MPL20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+DEPRECATED= Uses deprecated version of python
+EXPIRATION_DATE= 2020-12-31
+
+FETCH_DEPENDS= ca_root_nss>=0:security/ca_root_nss
+LIB_DEPENDS= libdbus-1.so:devel/dbus \
+ libdbus-glib-1.so:devel/dbus-glib \
+ libfontconfig.so:x11-fonts/fontconfig \
+ libfreetype.so:print/freetype2 \
+ libgraphite2.so:graphics/graphite2 \
+ libharfbuzz.so:print/harfbuzz \
+ libnspr4.so:devel/nspr \
+ libnssutil3.so:security/nss \
+ libplc4.so:devel/nspr \
+ libplds4.so:devel/nspr \
+ libvpx.so:multimedia/libvpx
+
+BUILD_DEPENDS= ${LOCALBASE}/libdata/pkgconfig/xt.pc:x11-toolkits/libXt \
+ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
+ py${PYTHON3_DEFAULT:S/.//}-sqlite3>0:databases/py-sqlite3@py${PYTHON3_DEFAULT:S/.//} \
+ ${RUST_DEFAULT}>=1.41:lang/${RUST_DEFAULT} \
+ autoconf-2.13:devel/autoconf213 \
+ bash:shells/bash \
+ graphite2>=1.3.14:graphics/graphite2 \
+ harfbuzz>=2.6.8:print/harfbuzz \
+ icu>=67.1,1:devel/icu \
+ libevent>=2.1.8:devel/libevent \
+ libvorbis>=1.3.6,3:audio/libvorbis \
+ libvpx>=1.8.2:multimedia/libvpx \
+ ${LOCALBASE}/bin/python${PYTHON3_DEFAULT}:lang/python${PYTHON3_DEFAULT:S/.//g} \
+ llvm${LLVM_DEFAULT}>=0:devel/llvm${LLVM_DEFAULT} \
+ nasm:devel/nasm \
+ node:www/node \
+ nspr>=4.25:devel/nspr \
+ nss>=3.54:security/nss \
+ png>=1.6.35:graphics/png \
+ rust-cbindgen>=0.14.1:devel/rust-cbindgen \
+ sqlite3>=3.30.1:databases/sqlite3 \
+ v4l_compat>0:multimedia/v4l_compat \
+ yasm:devel/yasm \
+ zip:archivers/zip
+
+USES= compiler:c++17-lang desktop-file-utils gmake gnome pkgconfig \
+ python:2.7,build shebangfix tar:xz xorg
+
+USE_GNOME= cairo gdkpixbuf2 gtk20 gtk30
+
+USE_XORG= x11 xcb xcomposite xcursor xdamage xext xfixes xi xrender xt
+
+USE_GITHUB= yes
+GH_ACCOUNT= cliqz-oss
+GH_PROJECT= browser-f
+
+USE_LDCONFIG= yes
+
+bash_OLD_CMD= "/bin/bash"
+bash_CMD= ${LOCALBASE}/bin/bash
+SHEBANG_FILES= magic_build_and_package.sh
+
+CLIQZ_CHANNEL= release
+# If the DISTVERSION is updated, make sure to update the last build id from
+# fetch -qo - https://repository.cliqz.com/dist/${CLIQZ_CHANNEL}/${DISTVERSION}/lastbuildid
+CLIQZ_LAST_BUILD_ID= 20200721193739
+CLIQZ_ICON= ${PORTNAME}.png
+CLIQZ_ICON_SRC= ${WRKSRC}/mozilla-release/browser/branding/${PORTNAME}/default48.png
+MOZ_DESKTOP= ${WRKSRC}/mozilla-release/toolkit/mozapps/installer/linux/rpm/mozilla.desktop
+CLIQZ_DESKTOP= ${WRKSRC}/mozilla-release/toolkit/mozapps/installer/linux/rpm/cliqz.desktop
+
+MAKE_ENV+= CQZ_BUILD_ID=${CLIQZ_LAST_BUILD_ID} \
+ CQZ_RELEASE_CHANNEL=${CLIQZ_CHANNEL} \
+ LLVM_CONFIG=llvm-config${LLVM_DEFAULT} \
+ LLVM_OBJDUMP=${LOCALBASE}/llvm${LLVM_DEFAULT}/bin/llvm-objdump \
+ PYTHON3="${LOCALBASE}/bin/python${PYTHON3_DEFAULT}" \
+ RUSTFLAGS=${RUSTFLAGS} \
+ MOZBUILD_STATE_PATH=${WRKDIR}
+BINARY_ALIAS+= python3=python${PYTHON3_DEFAULT}
+
+# Configure args passed into mach build system
+MOZ_CONFIGURE_ARGS+= "--disable-crashreporter" \
+ "--disable-debug" \
+ "--disable-debug-symbols" \
+ "--disable-tests" \
+ "--disable-updater" \
+ "--with-system-libvpx" \
+ "--libclang-path=${LOCALBASE}/llvm${LLVM_DEFAULT}/lib"
+
+.include "${.CURDIR}/Makefile.options"
+
+.include <bsd.port.pre.mk>
+
+# Adjust -C target-cpu if -march/-mcpu is set by bsd.cpu.mk
+.if ${ARCH} == amd64 || ${ARCH} == i386
+RUSTFLAGS+= ${CFLAGS:M-march=*:S/-march=/-C target-cpu=/}
+.else
+RUSTFLAGS+= ${CFLAGS:M-mcpu=*:S/-mcpu=/-C target-cpu=/}
+.endif
+
+.if ${ARCH:Maarch64} || ${MACHINE_CPU:Msse2}
+MOZ_CONFIGURE_ARGS+= "--enable-rust-simd"
+.else
+MOZ_CONFIGURE_ARGS+= "--disable-rust-simd"
+.endif
+
+# Require newer Clang than what's in base system unless user opted out
+.if ${CC} == cc && ${CXX} == c++ && exists(/usr/lib/libc++.so)
+CPP= ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT}
+CC= ${LOCALBASE}/bin/clang${LLVM_DEFAULT}
+CXX= ${LOCALBASE}/bin/clang++${LLVM_DEFAULT}
+# XXX avoid warnings
+USES:= ${USES:Ncompiler\:*}
+.endif
+
+post-extract:
+ ${CP} ${DISTDIR}/${DIST_SUBDIR}/adult-domains.bin \
+ ${WRKSRC}/mozilla-release/browser/adult-domains.bin
+ ${MKDIR} ${WRKSRC}/obj/dist/bin/browser/features
+ ${CP} ${DISTDIR}/${DIST_SUBDIR}/cliqz@cliqz.com.xpi \
+ ${DISTDIR}/${DIST_SUBDIR}/https-everywhere@cliqz.com.xpi \
+ ${DISTDIR}/${DIST_SUBDIR}/gdprtool@cliqz.com.xpi \
+ ${WRKSRC}/obj/dist/bin/browser/features
+
+post-patch:
+ @${CP} ${MOZ_DESKTOP} ${CLIQZ_DESKTOP}
+ @${REINPLACE_CMD} -e 's/@MOZ_APP_DISPLAYNAME@/Cliqz Internet/g' \
+ -e 's/@MOZ_APP_NAME@/${PORTNAME}/g' \
+ -e '/Icon=${PORTNAME}/ s/${PORTNAME}/${CLIQZ_ICON}/' \
+ -e '/StartupWMClass/d' \
+ ${CLIQZ_DESKTOP}
+.for MOZ_CONFIGURE_ARG in ${MOZ_CONFIGURE_ARGS}
+ @${ECHO_CMD} "ac_add_options" ${MOZ_CONFIGURE_ARG} >> \
+ ${WRKSRC}/mozilla-release/browser/config/cliqz.mozconfig;
+.endfor
+# This prevents linker exhausting memory in i386 builds
+.if ${ARCH} == "i386"
+ @${ECHO_CMD} 'export LDFLAGS="-Wl,--no-keep-memory -Wl,--as-needed"' >> \
+ ${WRKSRC}/mozilla-release/browser/config/cliqz.mozconfig
+.endif
+# Disable vendor checksums like lang/rust
+ @${REINPLACE_CMD} 's,"files":{[^}]*},"files":{},' \
+ ${WRKSRC}/mozilla-release/third_party/rust/*/.cargo-checksum.json
+
+pre-configure-script:
+ # Check that the running kernel has COMPAT_FREEBSD11 required by lang/rust post-ino64
+ @${SETENV} CC="${CC}" OPSYS="${OPSYS}" OSVERSION="${OSVERSION}" WRKDIR="${WRKDIR}" \
+ ${SH} ${SCRIPTSDIR}/rust-compat11-canary.sh
+
+do-build:
+ (cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ./magic_build_and_package.sh)
+
+do-install:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}
+ (cd ${WRKSRC}/obj/dist/${PORTNAME} && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/lib/${PORTNAME})
+ # Check if the wayland lib was generated, this happens if
+ # x11-toolkits/gtk30 has WAYLAND option enabled.
+ @if [ -f ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/libmozwayland.so ]; then \
+ ${REINPLACE_CMD} -e 's|%%WAYLAND%%||' ${TMPPLIST}; \
+ else \
+ ${REINPLACE_CMD} -e 's|%%WAYLAND%%|@comment |' ${TMPPLIST}; \
+ fi
+ @${CHMOD} 755 ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/${PORTNAME}-bin
+ @${CHMOD} 755 ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/${PORTNAME}
+
+post-install:
+ ${RLN} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/${PORTNAME}-bin ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
+ ${INSTALL_DATA} ${CLIQZ_DESKTOP} ${STAGEDIR}${PREFIX}/share/applications/
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps
+ @${CP} ${CLIQZ_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${CLIQZ_ICON}
+
+.include <bsd.port.post.mk>
diff --git a/www/cliqz/Makefile.options b/www/cliqz/Makefile.options
new file mode 100644
index 000000000000..1cebd99df62f
--- /dev/null
+++ b/www/cliqz/Makefile.options
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+# Audio server options
+OPTIONS_MULTI= AUDIO
+OPTIONS_MULTI_AUDIO= JACK PULSEAUDIO SNDIO
+OPTIONS_DEFAULT= JACK PULSEAUDIO SNDIO
+AUDIO_DESC= Choose your audio options
+
+JACK_BUILD_DEPENDS= ${LOCALBASE}/include/jack/jack.h:audio/jack
+JACK_VARS= MOZ_CONFIGURE_ARGS+="--enable-jack"
+
+PULSEAUDIO_BUILD_DEPENDS= ${LOCALBASE}/include/pulse/pulseaudio.h:audio/pulseaudio
+PULSEAUDIO_VARS= MOZ_CONFIGURE_ARGS+="--enable-pulseaudio"
+PULSEAUDIO_VARS_OFF= MOZ_CONFIGURE_ARGS+="--disable-pulseaudio"
+
+SNDIO_BUILD_DEPENDS+= ${LOCALBASE}/include/sndio.h:audio/sndio
+SNDIO_LIB_DEPENDS+= libsndio.so:audio/sndio
+
+post-patch-SNDIO-on:
+ @${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \
+ ${WRKSRC}/mozilla-release/media/libcubeb/src/moz.build \
+ ${WRKSRC}/mozilla-release/toolkit/library/moz.build
+ @${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \
+ ${WRKSRC}/mozilla-release/media/libcubeb/gtest/moz.build
diff --git a/www/cliqz/distinfo b/www/cliqz/distinfo
new file mode 100644
index 000000000000..3a97ea070851
--- /dev/null
+++ b/www/cliqz/distinfo
@@ -0,0 +1,13 @@
+TIMESTAMP = 1595505538
+SHA256 (cliqz/adult-domains.bin) = f726171965328f60e2cc2a50311883e76c21b3359f2596d10be76cc33abdda88
+SIZE (cliqz/adult-domains.bin) = 528392
+SHA256 (cliqz/cliqz@cliqz.com.xpi) = 3f8a580169881c090813b2cc5cac35c7e9fdcbc1af42b576851e617b5eedbb18
+SIZE (cliqz/cliqz@cliqz.com.xpi) = 4107644
+SHA256 (cliqz/dat@cliqz.com.xpi) = 83dac73bd4ab16271330eb87ed5e3b088ddd69707ceb121d8ee730d07ddc9d87
+SIZE (cliqz/dat@cliqz.com.xpi) = 988736
+SHA256 (cliqz/gdprtool@cliqz.com.xpi) = 7d59af6529b0756e5a89cf150f781a81a1cc1284eab2de00a6a89432f65a711d
+SIZE (cliqz/gdprtool@cliqz.com.xpi) = 219684
+SHA256 (cliqz/https-everywhere@cliqz.com.xpi) = d1b7590c9541741aa0d1fada383fece7b48348f477a3f7b606e043021a42bdbb
+SIZE (cliqz/https-everywhere@cliqz.com.xpi) = 2058305
+SHA256 (cliqz/cliqz-oss-browser-f-1.38.0_GH0.tar.gz) = d9e8ecaa99f753828ae63ab83b27a3b3cb4e6d6d51ca0a9f6ed246d2391f23bd
+SIZE (cliqz/cliqz-oss-browser-f-1.38.0_GH0.tar.gz) = 519049842
diff --git a/www/cliqz/files/patch-addon-search b/www/cliqz/files/patch-addon-search
new file mode 100644
index 000000000000..928c52c0aad8
--- /dev/null
+++ b/www/cliqz/files/patch-addon-search
@@ -0,0 +1,56 @@
+https://github.com/mozilla/addons/issues/708
+https://github.com/mozilla/addons-frontend/issues/4610
+
+Taken from www/firefox
+
+diff --git browser/app/profile/firefox.js browser/app/profile/firefox.js
+index 75c2c5e435e35..4d8c09c02759b 100644
+--- mozilla-release/browser/app/profile/firefox.js.orig 2020-07-17 14:00:07 UTC
++++ mozilla-release/browser/app/profile/firefox.js
+@@ -37,7 +37,7 @@ pref("extensions.webextOptionalPermissionPrompts", tru
+ // Preferences for AMO integration
+ pref("extensions.getAddons.cache.enabled", true);
+ pref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%");
+-pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
++pref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=Linux&appver=%VERSION%");
+ pref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/");
+ pref("extensions.getAddons.langpacks.url", "https://services.addons.mozilla.org/api/v3/addons/language-tools/?app=firefox&type=language&appversion=%VERSION%");
+ pref("extensions.getAddons.discovery.api_url", "https://services.addons.mozilla.org/api/v4/discovery/?lang=%LOCALE%&edition=%DISTRIBUTION%");
+@@ -172,8 +172,8 @@ pref("app.update.staging.enabled", true);
+ // .. etc ..
+ //
+ pref("extensions.update.enabled", true);
+-pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
+-pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
++pref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
++pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=Linux&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
+ #if MOZ_UPDATE_CHANNEL == beta
+ // CLIQZ-SPECIAL: force addons update in every 30 min on beta
+ pref("extensions.update.interval", 1800);
+
+diff --git toolkit/mozapps/extensions/internal/AddonRepository.jsm toolkit/mozapps/extensions/internal/AddonRepository.jsm
+index f70fd8d7e3bd8..81e8cd7764fdf 100644
+--- mozilla-release/toolkit/mozapps/extensions/internal/AddonRepository.jsm
++++ mozilla-release/toolkit/mozapps/extensions/internal/AddonRepository.jsm
+@@ -602,7 +602,7 @@ var AddonRepository = {
+ addon.version = String(aEntry.current_version.version);
+ if (Array.isArray(aEntry.current_version.files)) {
+ for (let file of aEntry.current_version.files) {
+- if (file.platform == "all" || file.platform == PLATFORM) {
++ if (file.platform == "all" || file.platform == "linux" || file.platform == PLATFORM) {
+ if (file.url) {
+ addon.sourceURI = NetUtil.newURI(file.url);
+ }
+diff --git toolkit/mozapps/extensions/internal/XPIDatabase.jsm toolkit/mozapps/extensions/internal/XPIDatabase.jsm
+index f70fd8d7e3bd8..81e8cd7764fdf 100644
+--- mozilla-release/toolkit/mozapps/extensions/internal/XPIDatabase.jsm
++++ mozilla-release/toolkit/mozapps/extensions/internal/XPIDatabase.jsm
+@@ -355,7 +355,7 @@ class AddonInternal {
+ // Something is causing errors in here
+ try {
+ for (let platform of this.targetPlatforms) {
+- if (platform.os == Services.appinfo.OS) {
++ if (platform.os == "Linux" || platform.os == Services.appinfo.OS) {
+ if (platform.abi) {
+ needsABI = true;
+ if (platform.abi === abi)
diff --git a/www/cliqz/files/patch-bug1288587 b/www/cliqz/files/patch-bug1288587
new file mode 100644
index 000000000000..941946bc8899
--- /dev/null
+++ b/www/cliqz/files/patch-bug1288587
@@ -0,0 +1,39 @@
+Taken from www/firefox
+
+diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
+index 855214a..1e91d51 100644
+--- mozilla-release/build/moz.configure/init.configure
++++ mozilla-release/build/moz.configure/init.configure
+@@ -251,6 +251,7 @@ option(env='PYTHON3', nargs=1, help='Python 3 interpre
+ @imports(_from='mozbuild.pythonutil', _import='find_python3_executable')
+ @imports(_from='mozbuild.pythonutil', _import='python_executable_version')
+ @imports(_from='six', _import='ensure_text')
++@imports(_from='__builtin__', _import='KeyError')
+ def virtualenv_python3(env_python, build_env, mozconfig, help):
+ # Avoid re-executing python when running configure --help.
+ if help:
+@@ -283,6 +284,12 @@ def virtualenv_python3(env_python, build_env, mozconfi
+ python = mozconfig['vars']['added']['PYTHON3']
+ elif 'PYTHON3' in mozconfig['vars']['modified']:
+ python = mozconfig['vars']['modified']['PYTHON3'][1]
++ for i in ('env', 'vars'):
++ for j in ('added', 'modified'):
++ try:
++ del mozconfig[i][j]['PYTHON3']
++ except KeyError:
++ pass
+
+ log.debug("python3: executable from configuration: %r" % python)
+
+@@ -365,7 +372,10 @@ def virtualenv_python3(env_python, build_env, mozconfi
+ sys.executable, manager.python_path))
+ log.info('Re-executing in the virtualenv')
+ if env_python:
+- del os.environ['PYTHON3']
++ try:
++ del os.environ['PYTHON3']
++ except KeyError:
++ pass
+ # Homebrew on macOS will change Python's sys.executable to a custom
+ # value which messes with mach's virtualenv handling code. Override
+ # Homebrew's changes with the correct sys.executable value.
diff --git a/www/cliqz/files/patch-bug1550891 b/www/cliqz/files/patch-bug1550891
new file mode 100644
index 000000000000..7a5b0741ced2
--- /dev/null
+++ b/www/cliqz/files/patch-bug1550891
@@ -0,0 +1,89 @@
+commit 965eb33c5e86
+Author: Greg V <greg@unrelenting.technology>
+Date: Wed Jan 8 15:06:00 2020 -0800
+
+ Bug 1550891 - re-add SHM_ANON support in IPC shared memory, freezing via capabilities
+---
+ config/system-headers.mozbuild | 1 +
+ ipc/chromium/src/base/shared_memory_posix.cc | 20 +++++++++++++++++---
+ 2 files changed, 18 insertions(+), 3 deletions(-)
+
+diff --git config/system-headers.mozbuild config/system-headers.mozbuild
+index 88afca1070f86..beff3e2542c9f 100644
+--- mozilla-release/config/system-headers.mozbuild
++++ mozilla-release/config/system-headers.mozbuild
+@@ -816,6 +816,7 @@ system_headers = [
+ 'sys/bitypes.h',
+ 'sys/byteorder.h',
+ 'syscall.h',
++ 'sys/capsicum.h',
+ 'sys/cdefs.h',
+ 'sys/cfgodm.h',
+ 'sys/elf.h',
+diff --git ipc/chromium/src/base/shared_memory_posix.cc ipc/chromium/src/base/shared_memory_posix.cc
+index 0be9cce0b4bed..89e67483e4c16 100644
+--- mozilla-release/ipc/chromium/src/base/shared_memory_posix.cc
++++ mozilla-release/ipc/chromium/src/base/shared_memory_posix.cc
+@@ -16,6 +16,10 @@
+ # include <linux/ashmem.h>
+ #endif
+
++#ifdef __FreeBSD__
++# include <sys/capsicum.h>
++#endif
++
+ #include "base/eintr_wrapper.h"
+ #include "base/logging.h"
+ #include "base/string_util.h"
+@@ -148,7 +152,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) {
+ }
+ }
+
+-#elif !defined(ANDROID)
++#elif !defined(ANDROID) && !defined(__FreeBSD__)
+ static int SafeShmOpen(bool freezeable, const char* name, int oflag, int mode) {
+ return shm_open(name, oflag, mode);
+ }
+@@ -160,7 +164,7 @@ static int SafeShmUnlink(bool freezeable, const char* name) {
+
+ // static
+ bool SharedMemory::AppendPosixShmPrefix(std::string* str, pid_t pid) {
+-#if defined(ANDROID)
++#if defined(ANDROID) || defined(__FreeBSD__)
+ return false;
+ #else
+ *str += '/';
+@@ -186,7 +190,7 @@ bool SharedMemory::AppendPosixShmPrefix(std::string* str, pid_t pid) {
+ // enough for this.
+ StringAppendF(str, "org.mozilla.ipc.%d.", static_cast<int>(pid));
+ return true;
+-#endif // !ANDROID
++#endif // !ANDROID && !__FreeBSD__
+ }
+
+ bool SharedMemory::CreateInternal(size_t size, bool freezeable) {
+@@ -212,6 +216,9 @@ bool SharedMemory::CreateInternal(size_t size, bool freezeable) {
+ return false;
+ }
+ needs_truncate = false;
++#elif defined(__FreeBSD__)
++ // FreeBSD supports anonymous shm_open
++ fd.reset(shm_open(SHM_ANON, O_RDWR, 0600));
+ #else
+ // Generic Unix: shm_open + shm_unlink
+ do {
+@@ -277,6 +284,14 @@ bool SharedMemory::ReadOnlyCopy(SharedMemory* ro_out) {
+ return false;
+ }
+ ro_file = mapped_file_;
++#elif defined(__FreeBSD__)
++ cap_rights_t rights;
++ cap_rights_init(&rights, CAP_MMAP_R);
++ if (cap_rights_limit(mapped_file_, &rights) != 0) {
++ CHROMIUM_LOG(WARNING) << "failed to freeze shm: " << strerror(errno);
++ return false;
++ }
++ ro_file = mapped_file_;
+ #else
+ DCHECK(frozen_file_ >= 0);
+ DCHECK(mapped_file_ >= 0);
diff --git a/www/cliqz/files/patch-bug1618914 b/www/cliqz/files/patch-bug1618914
new file mode 100644
index 000000000000..42f909514118
--- /dev/null
+++ b/www/cliqz/files/patch-bug1618914
@@ -0,0 +1,43 @@
+[Wayland] Fall back to ftruncate if posix_fallocate isn't supported by filesystem.
+
+Taken from www/firefox
+
+diff --git widget/gtk/WindowSurfaceWayland.cpp widget/gtk/WindowSurfaceWayland.cpp
+index 9a73326399bd5..9e42a7f1c5d18 100644
+--- mozilla-release/widget/gtk/WindowSurfaceWayland.cpp
++++ mozilla-release/widget/gtk/WindowSurfaceWayland.cpp
+@@ -222,20 +222,21 @@ static int WaylandAllocateShmMemory(int aSize) {
+ #ifdef HAVE_POSIX_FALLOCATE
+ do {
+ ret = posix_fallocate(fd, 0, aSize);
+ } while (ret == EINTR);
+- if (ret != 0) {
++ if (ret == 0) {
++ return fd;
++ } else if (ret != ENODEV && ret != EINVAL && ret != EOPNOTSUPP) {
+ close(fd);
+ MOZ_CRASH("posix_fallocate() fails to allocate shm memory");
+ }
+-#else
++#endif
+ do {
+ ret = ftruncate(fd, aSize);
+ } while (ret < 0 && errno == EINTR);
+ if (ret < 0) {
+ close(fd);
+ MOZ_CRASH("ftruncate() fails to allocate shm memory");
+ }
+-#endif
+
+ return fd;
+ }
+@@ -265,8 +266,8 @@ bool WaylandShmPool::Resize(int aSize) {
+ #ifdef HAVE_POSIX_FALLOCATE
+ do {
+ errno = posix_fallocate(mShmPoolFd, 0, aSize);
+ } while (errno == EINTR);
+- if (errno != 0) return false;
++ if (errno != 0 && errno != ENODEV && errno != EINVAL && errno != EOPNOTSUPP) return false;
+ #endif
+
+ wl_shm_pool_resize(mShmPool, aSize);
diff --git a/www/cliqz/files/patch-bug1628567 b/www/cliqz/files/patch-bug1628567
new file mode 100644
index 000000000000..3c83b73aefa3
--- /dev/null
+++ b/www/cliqz/files/patch-bug1628567
@@ -0,0 +1,34 @@
+Don't pass --target when CC/CXX contains clang
+
+--- mozilla-release/third_party/rust/cc/src/lib.rs.orig 2020-04-10 00:57:23 UTC
++++ mozilla-release/third_party/rust/cc/src/lib.rs
+@@ -2344,28 +2344,7 @@ impl Tool {
+ }
+
+ fn with_features(path: PathBuf, clang_driver: Option<&str>, cuda: bool) -> Self {
+- // Try to detect family of the tool from its name, falling back to Gnu.
+- let family = if let Some(fname) = path.file_name().and_then(|p| p.to_str()) {
+- if fname.contains("clang-cl") {
+- ToolFamily::Msvc { clang_cl: true }
+- } else if fname.contains("cl")
+- && !fname.contains("cloudabi")
+- && !fname.contains("uclibc")
+- && !fname.contains("clang")
+- {
+- ToolFamily::Msvc { clang_cl: false }
+- } else if fname.contains("clang") {
+- match clang_driver {
+- Some("cl") => ToolFamily::Msvc { clang_cl: true },
+- _ => ToolFamily::Clang,
+- }
+- } else {
+- ToolFamily::Gnu
+- }
+- } else {
+- ToolFamily::Gnu
+- };
+-
++ let family = ToolFamily::Gnu;
+ Tool {
+ path: path,
+ cc_wrapper_path: None,
diff --git a/www/cliqz/files/patch-bug1640982 b/www/cliqz/files/patch-bug1640982
new file mode 100644
index 000000000000..9a8d8e6e5700
--- /dev/null
+++ b/www/cliqz/files/patch-bug1640982
@@ -0,0 +1,17 @@
+Unbreak build with Rust 1.45.0
+
+error: options `-C embed-bitcode=no` and `-C lto` are incompatible
+
+Taken from www/firefox
+
+--- mozilla-release/config/makefiles/rust.mk.orig 2020-05-12 09:36:22 UTC
++++ mozilla-release/config/makefiles/rust.mk
+@@ -61,7 +61,7 @@ ifndef MOZ_DEBUG_RUST
+ # Enable link-time optimization for release builds, but not when linking
+ # gkrust_gtest.
+ ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
+-cargo_rustc_flags += -Clto
++cargo_rustc_flags +=
+ endif
+ endif
+ endif
diff --git a/www/cliqz/files/patch-bug1663715 b/www/cliqz/files/patch-bug1663715
new file mode 100644
index 000000000000..2b61a3f3682a
--- /dev/null
+++ b/www/cliqz/files/patch-bug1663715
@@ -0,0 +1,31087 @@
+From 63678ae69e03325d65255d29f1af4a6ea3dd354a Mon Sep 17 00:00:00 2001
+From: Thomas Deutschmann <whissi@gentoo.org>
+Date: Sat, 10 Oct 2020 16:07:49 +0200
+Subject: [PATCH 36/38] bmo#1643201: Cherry-pick some servo changes to
+ derive_common
+
+Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7
+Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
+---
+ servo/components/derive_common/cg.rs | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/servo/components/derive_common/cg.rs b/servo/components/derive_common/cg.rs
+index 55a75398c7..c51c0d7750 100644
+--- mozilla-release/servo/components/derive_common/cg.rs
++++ mozilla-release/servo/components/derive_common/cg.rs
+@@ -7,7 +7,7 @@ use proc_macro2::{Span, TokenStream};
+ use quote::TokenStreamExt;
+ use syn::{self, AngleBracketedGenericArguments, Binding, DeriveInput, Field};
+ use syn::{GenericArgument, GenericParam, Ident, Path};
+-use syn::{PathArguments, PathSegment, QSelf, Type, TypeArray};
++use syn::{PathArguments, PathSegment, QSelf, Type, TypeArray, TypeGroup};
+ use syn::{TypeParam, TypeParen, TypePath, TypeSlice, TypeTuple};
+ use syn::{Variant, WherePredicate};
+ use synstructure::{self, BindStyle, BindingInfo, VariantAst, VariantInfo};
+@@ -208,6 +208,10 @@ where
+ elem: Box::new(map_type_params(&inner.elem, params, f)),
+ ..inner.clone()
+ }),
++ Type::Group(ref inner) => Type::from(TypeGroup {
++ elem: Box::new(map_type_params(&inner.elem, params, f)),
++ ..inner.clone()
++ }),
+ ref ty => panic!("type {:?} cannot be mapped yet", ty),
+ }
+ }
+--
+2.28.0
+
+From 23f22e9de6cc2236d58cc03997a1040e62c532e1 Mon Sep 17 00:00:00 2001
+From: Thomas Deutschmann <whissi@gentoo.org>
+Date: Sat, 10 Oct 2020 16:09:04 +0200
+Subject: [PATCH 37/38] bmo#1653339: Teach style_derive's map_type_params about
+ mapping self correctly
+
+Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7
+Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
+---
+ servo/components/derive_common/cg.rs | 30 +++++++++++--------
+ .../style_derive/to_computed_value.rs | 4 ++-
+ 2 files changed, 21 insertions(+), 13 deletions(-)
+
+diff --git a/servo/components/derive_common/cg.rs b/servo/components/derive_common/cg.rs
+index c51c0d7750..8abfd87149 100644
+--- mozilla-release/servo/components/derive_common/cg.rs
++++ mozilla-release/servo/components/derive_common/cg.rs
+@@ -154,19 +154,19 @@ pub fn fmap_trait_output(input: &DeriveInput, trait_path: &Path, trait_output: &
+ segment.into()
+ }
+
+-pub fn map_type_params<F>(ty: &Type, params: &[&TypeParam], f: &mut F) -> Type
++pub fn map_type_params<F>(ty: &Type, params: &[&TypeParam], self_type: &Path, f: &mut F) -> Type
+ where
+ F: FnMut(&Ident) -> Type,
+ {
+ match *ty {
+ Type::Slice(ref inner) => Type::from(TypeSlice {
+- elem: Box::new(map_type_params(&inner.elem, params, f)),
++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)),
+ ..inner.clone()
+ }),
+ Type::Array(ref inner) => {
+ //ref ty, ref expr) => {
+ Type::from(TypeArray {
+- elem: Box::new(map_type_params(&inner.elem, params, f)),
++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)),
+ ..inner.clone()
+ })
+ },
+@@ -175,7 +175,7 @@ where
+ elems: inner
+ .elems
+ .iter()
+- .map(|ty| map_type_params(&ty, params, f))
++ .map(|ty| map_type_params(&ty, params, self_type, f))
+ .collect(),
+ ..inner.clone()
+ }),
+@@ -187,10 +187,16 @@ where
+ if params.iter().any(|ref param| &param.ident == ident) {
+ return f(ident);
+ }
++ if ident == "Self" {
++ return Type::from(TypePath {
++ qself: None,
++ path: self_type.clone(),
++ });
++ }
+ }
+ Type::from(TypePath {
+ qself: None,
+- path: map_type_params_in_path(path, params, f),
++ path: map_type_params_in_path(path, params, self_type, f),
+ })
+ },
+ Type::Path(TypePath {
+@@ -198,25 +204,25 @@ where
+ ref path,
+ }) => Type::from(TypePath {
+ qself: qself.as_ref().map(|qself| QSelf {
+- ty: Box::new(map_type_params(&qself.ty, params, f)),
++ ty: Box::new(map_type_params(&qself.ty, params, self_type, f)),
+ position: qself.position,
+ ..qself.clone()
+ }),
+- path: map_type_params_in_path(path, params, f),
++ path: map_type_params_in_path(path, params, self_type, f),
+ }),
+ Type::Paren(ref inner) => Type::from(TypeParen {
+- elem: Box::new(map_type_params(&inner.elem, params, f)),
++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)),
+ ..inner.clone()
+ }),
+ Type::Group(ref inner) => Type::from(TypeGroup {
+- elem: Box::new(map_type_params(&inner.elem, params, f)),
++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)),
+ ..inner.clone()
+ }),
+ ref ty => panic!("type {:?} cannot be mapped yet", ty),
+ }
+ }
+
+-fn map_type_params_in_path<F>(path: &Path, params: &[&TypeParam], f: &mut F) -> Path
++fn map_type_params_in_path<F>(path: &Path, params: &[&TypeParam], self_type: &Path, f: &mut F) -> Path
+ where
+ F: FnMut(&Ident) -> Type,
+ {
+@@ -236,11 +242,11 @@ where
+ .map(|arg| match arg {
+ ty @ &GenericArgument::Lifetime(_) => ty.clone(),
+ &GenericArgument::Type(ref data) => {
+- GenericArgument::Type(map_type_params(data, params, f))
++ GenericArgument::Type(map_type_params(data, params, self_type, f))
+ },
+ &GenericArgument::Binding(ref data) => {
+ GenericArgument::Binding(Binding {
+- ty: map_type_params(&data.ty, params, f),
++ ty: map_type_params(&data.ty, params, self_type, f),
+ ..data.clone()
+ })
+ },
+diff --git a/servo/components/style_derive/to_computed_value.rs b/servo/components/style_derive/to_computed_value.rs
+index fe6bddb7ed..1dc422e2dd 100644
+--- mozilla-release/servo/components/style_derive/to_computed_value.rs
++++ mozilla-release/servo/components/style_derive/to_computed_value.rs
+@@ -47,12 +47,15 @@ pub fn derive_to_value(
+ cg::add_predicate(&mut where_clause, parse_quote!(#param: #trait_path));
+ }
+
++ let computed_value_type = cg::fmap_trait_output(&input, &trait_path, &output_type_name);
++
+ let mut add_field_bound = |binding: &BindingInfo| {
+ let ty = &binding.ast().ty;
+
+ let output_type = cg::map_type_params(
+ ty,
+ &params,
++ &computed_value_type,
+ &mut |ident| parse_quote!(<#ident as #trait_path>::#output_type_name),
+ );
+
+@@ -142,7 +145,6 @@ pub fn derive_to_value(
+
+ input.generics.where_clause = where_clause;
+ let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
+- let computed_value_type = cg::fmap_trait_output(&input, &trait_path, &output_type_name);
+
+ let impl_ = trait_impl(from_body, to_body);
+
+--
+2.28.0
+
+From 300e01e71c9dc536d499d80563968c5fc7f7e34a Mon Sep 17 00:00:00 2001
+From: Thomas Deutschmann <whissi@gentoo.org>
+Date: Sat, 10 Oct 2020 16:10:20 +0200
+Subject: [PATCH 38/38] bmo#1663715: Update syn and proc-macro2 so that Firefox
+ can build on Rust nightly again
+
+Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7
+Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
+---
+ Cargo.lock | 8 +-
+ .../rust/lucet-wasi/.cargo-checksum.json | 2 +-
+ .../rust/packed_simd/.cargo-checksum.json | 2 +-
+ .../rust/proc-macro2/.cargo-checksum.json | 2 +-
+ third_party/rust/proc-macro2/Cargo.toml | 15 +-
+ third_party/rust/proc-macro2/README.md | 2 +-
+ third_party/rust/proc-macro2/build.rs | 20 +
+ third_party/rust/proc-macro2/src/detection.rs | 67 +
+ third_party/rust/proc-macro2/src/fallback.rs | 1010 ++----
+ third_party/rust/proc-macro2/src/lib.rs | 225 +-
+ third_party/rust/proc-macro2/src/marker.rs | 18 +
+ third_party/rust/proc-macro2/src/parse.rs | 849 +++++
+ third_party/rust/proc-macro2/src/strnom.rs | 391 ---
+ third_party/rust/proc-macro2/src/wrapper.rs | 258 +-
+ .../rust/proc-macro2/tests/comments.rs | 103 +
+ third_party/rust/proc-macro2/tests/marker.rs | 33 +
+ third_party/rust/proc-macro2/tests/test.rs | 240 +-
+ .../rust/proc-macro2/tests/test_fmt.rs | 26 +
+ .../spirv-cross-internal/.cargo-checksum.json | 2 +-
+ third_party/rust/syn/.cargo-checksum.json | 2 +-
+ third_party/rust/syn/Cargo.toml | 35 +-
+ third_party/rust/syn/README.md | 16 +-
+ third_party/rust/syn/benches/file.rs | 7 +
+ third_party/rust/syn/benches/rust.rs | 45 +-
+ third_party/rust/syn/build.rs | 38 +-
+ third_party/rust/syn/src/attr.rs | 126 +-
+ third_party/rust/syn/src/buffer.rs | 56 +-
+ third_party/rust/syn/src/custom_keyword.rs | 12 +-
+ .../rust/syn/src/custom_punctuation.rs | 50 +-
+ third_party/rust/syn/src/data.rs | 96 +-
+ third_party/rust/syn/src/derive.rs | 10 +-
+ third_party/rust/syn/src/discouraged.rs | 27 +-
+ third_party/rust/syn/src/error.rs | 33 +-
+ third_party/rust/syn/src/expr.rs | 826 +++--
+ third_party/rust/syn/src/ext.rs | 12 +-
+ third_party/rust/syn/src/file.rs | 4 +-
+ third_party/rust/syn/src/gen/clone.rs | 2051 ++++++++++++
+ third_party/rust/syn/src/gen/debug.rs | 2857 +++++++++++++++++
+ third_party/rust/syn/src/gen/eq.rs | 1930 +++++++++++
+ third_party/rust/syn/src/gen/fold.rs | 287 +-
+ third_party/rust/syn/src/gen/hash.rs | 2691 ++++++++++++++++
+ third_party/rust/syn/src/gen/visit.rs | 19 +-
+ third_party/rust/syn/src/gen/visit_mut.rs | 19 +-
+ third_party/rust/syn/src/generics.rs | 255 +-
+ third_party/rust/syn/src/item.rs | 1515 +++++----
+ third_party/rust/syn/src/keyword.rs | 0
+ third_party/rust/syn/src/lib.rs | 109 +-
+ third_party/rust/syn/src/lifetime.rs | 13 +-
+ third_party/rust/syn/src/lit.rs | 581 ++--
+ third_party/rust/syn/src/mac.rs | 55 +-
+ third_party/rust/syn/src/macros.rs | 61 +-
+ third_party/rust/syn/src/op.rs | 6 +-
+ third_party/rust/syn/src/parse.rs | 211 +-
+ third_party/rust/syn/src/parse_macro_input.rs | 32 +-
+ third_party/rust/syn/src/parse_quote.rs | 15 +-
+ third_party/rust/syn/src/pat.rs | 313 +-
+ third_party/rust/syn/src/path.rs | 33 +-
+ third_party/rust/syn/src/punctuated.rs | 123 +-
+ third_party/rust/syn/src/reserved.rs | 42 +
+ third_party/rust/syn/src/spanned.rs | 4 +-
+ third_party/rust/syn/src/stmt.rs | 141 +-
+ third_party/rust/syn/src/token.rs | 99 +-
+ third_party/rust/syn/src/tt.rs | 6 +-
+ third_party/rust/syn/src/ty.rs | 364 ++-
+ third_party/rust/syn/src/verbatim.rs | 15 +
+ third_party/rust/syn/src/whitespace.rs | 65 +
+ third_party/rust/syn/tests/clone.sh | 16 -
+ third_party/rust/syn/tests/common/eq.rs | 247 +-
+ third_party/rust/syn/tests/common/mod.rs | 13 +
+ third_party/rust/syn/tests/common/parse.rs | 24 +-
+ third_party/rust/syn/tests/debug/gen.rs | 50 +-
+ third_party/rust/syn/tests/debug/mod.rs | 17 +-
+ third_party/rust/syn/tests/features/error.rs | 1 -
+ third_party/rust/syn/tests/features/mod.rs | 22 -
+ third_party/rust/syn/tests/macros/mod.rs | 8 +-
+ third_party/rust/syn/tests/repo/mod.rs | 137 +-
+ third_party/rust/syn/tests/repo/progress.rs | 37 +
+ third_party/rust/syn/tests/test_asyncness.rs | 38 +-
+ third_party/rust/syn/tests/test_attribute.rs | 452 +--
+ .../rust/syn/tests/test_derive_input.rs | 1321 ++++----
+ third_party/rust/syn/tests/test_expr.rs | 314 +-
+ third_party/rust/syn/tests/test_generics.rs | 371 ++-
+ third_party/rust/syn/tests/test_grouping.rs | 53 +-
+ third_party/rust/syn/tests/test_ident.rs | 5 -
+ third_party/rust/syn/tests/test_item.rs | 45 +
+ third_party/rust/syn/tests/test_iterators.rs | 7 +-
+ third_party/rust/syn/tests/test_lit.rs | 75 +-
+ third_party/rust/syn/tests/test_meta.rs | 498 ++-
+ .../rust/syn/tests/test_parse_buffer.rs | 41 +-
+ .../rust/syn/tests/test_parse_stream.rs | 12 +
+ third_party/rust/syn/tests/test_pat.rs | 27 +-
+ third_party/rust/syn/tests/test_path.rs | 52 +
+ third_party/rust/syn/tests/test_precedence.rs | 196 +-
+ third_party/rust/syn/tests/test_receiver.rs | 127 +
+ third_party/rust/syn/tests/test_round_trip.rs | 41 +-
+ third_party/rust/syn/tests/test_shebang.rs | 59 +
+ .../rust/syn/tests/test_should_parse.rs | 4 -
+ third_party/rust/syn/tests/test_size.rs | 2 -
+ third_party/rust/syn/tests/test_stmt.rs | 44 +
+ .../rust/syn/tests/test_token_trees.rs | 12 +-
+ third_party/rust/syn/tests/test_ty.rs | 53 +
+ third_party/rust/syn/tests/test_visibility.rs | 145 +
+ third_party/rust/syn/tests/zzz_stable.rs | 4 +-
+ 103 files changed, 17319 insertions(+), 5831 deletions(-)
+ create mode 100644 third_party/rust/proc-macro2/src/detection.rs
+ create mode 100644 third_party/rust/proc-macro2/src/marker.rs
+ create mode 100644 third_party/rust/proc-macro2/src/parse.rs
+ delete mode 100644 third_party/rust/proc-macro2/src/strnom.rs
+ create mode 100644 third_party/rust/proc-macro2/tests/comments.rs
+ create mode 100644 third_party/rust/proc-macro2/tests/test_fmt.rs
+ create mode 100644 third_party/rust/syn/src/gen/clone.rs
+ create mode 100644 third_party/rust/syn/src/gen/debug.rs
+ create mode 100644 third_party/rust/syn/src/gen/eq.rs
+ create mode 100644 third_party/rust/syn/src/gen/hash.rs
+ delete mode 100644 third_party/rust/syn/src/keyword.rs
+ create mode 100644 third_party/rust/syn/src/reserved.rs
+ create mode 100644 third_party/rust/syn/src/verbatim.rs
+ create mode 100644 third_party/rust/syn/src/whitespace.rs
+ delete mode 100755 third_party/rust/syn/tests/clone.sh
+ delete mode 100644 third_party/rust/syn/tests/features/error.rs
+ delete mode 100644 third_party/rust/syn/tests/features/mod.rs
+ create mode 100644 third_party/rust/syn/tests/repo/progress.rs
+ create mode 100644 third_party/rust/syn/tests/test_item.rs
+ create mode 100644 third_party/rust/syn/tests/test_parse_stream.rs
+ create mode 100644 third_party/rust/syn/tests/test_path.rs
+ create mode 100644 third_party/rust/syn/tests/test_receiver.rs
+ create mode 100644 third_party/rust/syn/tests/test_shebang.rs
+ create mode 100644 third_party/rust/syn/tests/test_stmt.rs
+ create mode 100644 third_party/rust/syn/tests/test_ty.rs
+ create mode 100644 third_party/rust/syn/tests/test_visibility.rs
+
+diff --git a/Cargo.lock b/Cargo.lock
+index 19117e8368..d5fe0f6457 100644
+--- mozilla-release/Cargo.lock
++++ mozilla-release/Cargo.lock
+@@ -3717,9 +3717,9 @@ dependencies = [
+
+ [[package]]
+ name = "proc-macro2"
+-version = "1.0.5"
++version = "1.0.24"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"
++checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+ dependencies = [
+ "unicode-xid",
+ ]
+@@ -4647,9 +4647,9 @@ dependencies = [
+
+ [[package]]
+ name = "syn"
+-version = "1.0.5"
++version = "1.0.40"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
++checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"
+ dependencies = [
+ "proc-macro2",
+ "quote",
+diff --git a/third_party/rust/lucet-wasi/.cargo-checksum.json b/third_party/rust/lucet-wasi/.cargo-checksum.json
+index 229fc9978c..2c8c0a3c22 100644
+--- mozilla-release/third_party/rust/lucet-wasi/.cargo-checksum.json
++++ mozilla-release/third_party/rust/lucet-wasi/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/.gitignore":"44575cf5b28512d75644bf54a517dcef304ff809fd511747621b4d64f19aac66","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null}
+\ No newline at end of file
++{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json
+index 01afcc1efd..c727a10006 100644
+--- mozilla-release/third_party/rust/packed_simd/.cargo-checksum.json
++++ mozilla-release/third_party/rust/packed_simd/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
+\ No newline at end of file
++{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/proc-macro2/.cargo-checksum.json b/third_party/rust/proc-macro2/.cargo-checksum.json
+index eeef4120af..e7849f2896 100644
+--- mozilla-release/third_party/rust/proc-macro2/.cargo-checksum.json
++++ mozilla-release/third_party/rust/proc-macro2/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"e2c1fc6ed317eeef8462fcd192f6b6389e1d84f0d7afeac78f12c23903deddf8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"362a2156f7645528061b6e8487a2eb0f32f1693012ed82ee57afa05c039bba0d","build.rs":"0cc6e2cb919ddbff59cf1d810283939f97a59f0037540c0f2ee3453237635ff8","src/fallback.rs":"5c6379a90735e27abcc40253b223158c6b1e5784f3850bc423335363e87ef038","src/lib.rs":"ae5251296ad3fcd8b600919a993fec0afd8b56da3e11fef6bc7265b273129936","src/strnom.rs":"37f7791f73f123817ad5403af1d4e2a0714be27401729a2d451bc80b1f26bac9","src/wrapper.rs":"81372e910604217a625aa71c47d43e65f4e008456eae93ac39325c9abf10701a","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"c2652e3ae1dfcb94d2e6313b29712c5dcbd0fe62026913e67bb7cebd7560aade","tests/test.rs":"8c427be9cba1fa8d4a16647e53e3545e5863e29e2c0b311c93c9dd1399abf6a1"},"package":"90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"302d447d62c8d091d6241cf62bdad607c0d4ed8ff9f43d9b254c9d99c253ee8e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"e1f9d4fc22cff2c049f166a403b41458632a94357890d31cf0e3ad83807fb430","build.rs":"a71283fbc495095eebbbf46753df3fe2c19505c745b508dea157f65796b64dd7","src/detection.rs":"9d25d896889e65330858f2d6f6223c1b98cd1dad189813ad4161ff189fbda2b8","src/fallback.rs":"b114e013695260f6066395c8712cea112ec2a386010397a80f15a60f8b986444","src/lib.rs":"7f528764a958587f007f0c2a330a6a414bae2c8e73d5ed9fb64ff1b42b1805b1","src/marker.rs":"87fce2d0357f5b7998b6d9dfb064f4a0cbc9dabb19e33d4b514a446243ebe2e8","src/parse.rs":"1d2253eacbd40eb3a2a933be2adcee356af922bdb48cc89ff266252a41fd98a1","src/wrapper.rs":"f52646ce1705c1f6265516f30d4c43297b5f529dd31fb91f4c806be89d5a4122","tests/comments.rs":"ea6cbe6f4c8852e6a0612893c7d4f2c144a2e6a134a6c3db641a320cbfc3c800","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"652db9f25c69ffc65baa60cdca8f195aa2e254d4de0a9ddc85de4dc2470544b6","tests/test.rs":"5f30a704eeb2b9198b57f416d622da72d25cb9bf8d8b12e6d0e90aa2cb0e43fc","tests/test_fmt.rs":"745dfdc41d09c5308c221395eb43f2041f0a1413d2927a813bc2ad4554438fe2"},"package":"1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"}
+\ No newline at end of file
+diff --git a/third_party/rust/proc-macro2/Cargo.toml b/third_party/rust/proc-macro2/Cargo.toml
+index 95d653633d..22150c516a 100644
+--- mozilla-release/third_party/rust/proc-macro2/Cargo.toml
++++ mozilla-release/third_party/rust/proc-macro2/Cargo.toml
+@@ -13,21 +13,22 @@
+ [package]
+ edition = "2018"
+ name = "proc-macro2"
+-version = "1.0.5"
+-authors = ["Alex Crichton <alex@alexcrichton.com>"]
+-description = "A stable implementation of the upcoming new `proc_macro` API. Comes with an\noption, off by default, to also reimplement itself in terms of the upstream\nunstable API.\n"
+-homepage = "https://github.com/alexcrichton/proc-macro2"
++version = "1.0.24"
++authors = ["Alex Crichton <alex@alexcrichton.com>", "David Tolnay <dtolnay@gmail.com>"]
++description = "A substitute implementation of the compiler's `proc_macro` API to decouple\ntoken-based libraries from the procedural macro use case.\n"
+ documentation = "https://docs.rs/proc-macro2"
+ readme = "README.md"
+ keywords = ["macros"]
++categories = ["development-tools::procedural-macro-helpers"]
+ license = "MIT OR Apache-2.0"
+ repository = "https://github.com/alexcrichton/proc-macro2"
+ [package.metadata.docs.rs]
+ rustc-args = ["--cfg", "procmacro2_semver_exempt"]
+ rustdoc-args = ["--cfg", "procmacro2_semver_exempt"]
++targets = ["x86_64-unknown-linux-gnu"]
+
+-[lib]
+-name = "proc_macro2"
++[package.metadata.playground]
++features = ["span-locations"]
+ [dependencies.unicode-xid]
+ version = "0.2"
+ [dev-dependencies.quote]
+@@ -39,5 +40,3 @@ default = ["proc-macro"]
+ nightly = []
+ proc-macro = []
+ span-locations = []
+-[badges.travis-ci]
+-repository = "alexcrichton/proc-macro2"
+diff --git a/third_party/rust/proc-macro2/README.md b/third_party/rust/proc-macro2/README.md
+index 19b0c3b5f8..3d05e871a7 100644
+--- mozilla-release/third_party/rust/proc-macro2/README.md
++++ mozilla-release/third_party/rust/proc-macro2/README.md
+@@ -1,6 +1,6 @@
+ # proc-macro2
+
+-[![Build Status](https://api.travis-ci.com/alexcrichton/proc-macro2.svg?branch=master)](https://travis-ci.com/alexcrichton/proc-macro2)
++[![Build Status](https://img.shields.io/github/workflow/status/alexcrichton/proc-macro2/build%20and%20test)](https://github.com/alexcrichton/proc-macro2/actions)
+ [![Latest Version](https://img.shields.io/crates/v/proc-macro2.svg)](https://crates.io/crates/proc-macro2)
+ [![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/proc-macro2)
+
+diff --git a/third_party/rust/proc-macro2/build.rs b/third_party/rust/proc-macro2/build.rs
+index deb9b92719..b247d874f6 100644
+--- mozilla-release/third_party/rust/proc-macro2/build.rs
++++ mozilla-release/third_party/rust/proc-macro2/build.rs
+@@ -14,6 +14,10 @@
+ // procmacro2_semver_exempt surface area is implemented by using the
+ // nightly-only proc_macro API.
+ //
++// "hygiene"
++// Enable Span::mixed_site() and non-dummy behavior of Span::resolved_at
++// and Span::located_at. Enabled on Rust 1.45+.
++//
+ // "proc_macro_span"
+ // Enable non-dummy behavior of Span::start and Span::end methods which
+ // requires an unstable compiler feature. Enabled when building with
+@@ -57,6 +61,22 @@ fn main() {
+ println!("cargo:rustc-cfg=span_locations");
+ }
+
++ if version.minor < 32 {
++ println!("cargo:rustc-cfg=no_libprocmacro_unwind_safe");
++ }
++
++ if version.minor < 39 {
++ println!("cargo:rustc-cfg=no_bind_by_move_pattern_guard");
++ }
++
++ if version.minor >= 44 {
++ println!("cargo:rustc-cfg=lexerror_display");
++ }
++
++ if version.minor >= 45 {
++ println!("cargo:rustc-cfg=hygiene");
++ }
++
+ let target = env::var("TARGET").unwrap();
+ if !enable_use_proc_macro(&target) {
+ return;
+diff --git a/third_party/rust/proc-macro2/src/detection.rs b/third_party/rust/proc-macro2/src/detection.rs
+new file mode 100644
+index 0000000000..c597bc99c6
+--- /dev/null
++++ mozilla-release/third_party/rust/proc-macro2/src/detection.rs
+@@ -0,0 +1,67 @@
++use std::panic::{self, PanicInfo};
++use std::sync::atomic::*;
++use std::sync::Once;
++
++static WORKS: AtomicUsize = AtomicUsize::new(0);
++static INIT: Once = Once::new();
++
++pub(crate) fn inside_proc_macro() -> bool {
++ match WORKS.load(Ordering::SeqCst) {
++ 1 => return false,
++ 2 => return true,
++ _ => {}
++ }
++
++ INIT.call_once(initialize);
++ inside_proc_macro()
++}
++
++pub(crate) fn force_fallback() {
++ WORKS.store(1, Ordering::SeqCst);
++}
++
++pub(crate) fn unforce_fallback() {
++ initialize();
++}
++
++// Swap in a null panic hook to avoid printing "thread panicked" to stderr,
++// then use catch_unwind to determine whether the compiler's proc_macro is
++// working. When proc-macro2 is used from outside of a procedural macro all
++// of the proc_macro crate's APIs currently panic.
++//
++// The Once is to prevent the possibility of this ordering:
++//
++// thread 1 calls take_hook, gets the user's original hook
++// thread 1 calls set_hook with the null hook
++// thread 2 calls take_hook, thinks null hook is the original hook
++// thread 2 calls set_hook with the null hook
++// thread 1 calls set_hook with the actual original hook
++// thread 2 calls set_hook with what it thinks is the original hook
++//
++// in which the user's hook has been lost.
++//
++// There is still a race condition where a panic in a different thread can
++// happen during the interval that the user's original panic hook is
++// unregistered such that their hook is incorrectly not called. This is
++// sufficiently unlikely and less bad than printing panic messages to stderr
++// on correct use of this crate. Maybe there is a libstd feature request
++// here. For now, if a user needs to guarantee that this failure mode does
++// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from
++// the main thread before launching any other threads.
++fn initialize() {
++ type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static;
++
++ let null_hook: Box<PanicHook> = Box::new(|_panic_info| { /* ignore */ });
++ let sanity_check = &*null_hook as *const PanicHook;
++ let original_hook = panic::take_hook();
++ panic::set_hook(null_hook);
++
++ let works = panic::catch_unwind(proc_macro::Span::call_site).is_ok();
++ WORKS.store(works as usize + 1, Ordering::SeqCst);
++
++ let hopefully_null_hook = panic::take_hook();
++ panic::set_hook(original_hook);
++ if sanity_check != &*hopefully_null_hook {
++ panic!("observed race condition in proc_macro2::inside_proc_macro");
++ }
++}
+diff --git a/third_party/rust/proc-macro2/src/fallback.rs b/third_party/rust/proc-macro2/src/fallback.rs
+index fe582b3b5f..8900c5ff0f 100644
+--- mozilla-release/third_party/rust/proc-macro2/src/fallback.rs
++++ mozilla-release/third_party/rust/proc-macro2/src/fallback.rs
+@@ -1,27 +1,41 @@
++use crate::parse::{token_stream, Cursor};
++use crate::{Delimiter, Spacing, TokenTree};
+ #[cfg(span_locations)]
+ use std::cell::RefCell;
+ #[cfg(span_locations)]
+ use std::cmp;
+-use std::fmt;
+-use std::iter;
++use std::fmt::{self, Debug, Display};
++use std::iter::FromIterator;
++use std::mem;
+ use std::ops::RangeBounds;
+ #[cfg(procmacro2_semver_exempt)]
+ use std::path::Path;
+ use std::path::PathBuf;
+ use std::str::FromStr;
+ use std::vec;
+-
+-use crate::strnom::{block_comment, skip_whitespace, whitespace, word_break, Cursor, PResult};
+-use crate::{Delimiter, Punct, Spacing, TokenTree};
+ use unicode_xid::UnicodeXID;
+
++/// Force use of proc-macro2's fallback implementation of the API for now, even
++/// if the compiler's implementation is available.
++pub fn force() {
++ #[cfg(wrap_proc_macro)]
++ crate::detection::force_fallback();
++}
++
++/// Resume using the compiler's implementation of the proc macro API if it is
++/// available.
++pub fn unforce() {
++ #[cfg(wrap_proc_macro)]
++ crate::detection::unforce_fallback();
++}
++
+ #[derive(Clone)]
+-pub struct TokenStream {
+- inner: Vec<TokenTree>,
++pub(crate) struct TokenStream {
++ pub(crate) inner: Vec<TokenTree>,
+ }
+
+ #[derive(Debug)]
+-pub struct LexError;
++pub(crate) struct LexError;
+
+ impl TokenStream {
+ pub fn new() -> TokenStream {
+@@ -31,6 +45,72 @@ impl TokenStream {
+ pub fn is_empty(&self) -> bool {
+ self.inner.len() == 0
+ }
++
++ fn take_inner(&mut self) -> Vec<TokenTree> {
++ mem::replace(&mut self.inner, Vec::new())
++ }
++
++ fn push_token(&mut self, token: TokenTree) {
++ // https://github.com/alexcrichton/proc-macro2/issues/235
++ match token {
++ #[cfg(not(no_bind_by_move_pattern_guard))]
++ TokenTree::Literal(crate::Literal {
++ #[cfg(wrap_proc_macro)]
++ inner: crate::imp::Literal::Fallback(literal),
++ #[cfg(not(wrap_proc_macro))]
++ inner: literal,
++ ..
++ }) if literal.text.starts_with('-') => {
++ push_negative_literal(self, literal);
++ }
++ #[cfg(no_bind_by_move_pattern_guard)]
++ TokenTree::Literal(crate::Literal {
++ #[cfg(wrap_proc_macro)]
++ inner: crate::imp::Literal::Fallback(literal),
++ #[cfg(not(wrap_proc_macro))]
++ inner: literal,
++ ..
++ }) => {
++ if literal.text.starts_with('-') {
++ push_negative_literal(self, literal);
++ } else {
++ self.inner
++ .push(TokenTree::Literal(crate::Literal::_new_stable(literal)));
++ }
++ }
++ _ => self.inner.push(token),
++ }
++
++ #[cold]
++ fn push_negative_literal(stream: &mut TokenStream, mut literal: Literal) {
++ literal.text.remove(0);
++ let mut punct = crate::Punct::new('-', Spacing::Alone);
++ punct.set_span(crate::Span::_new_stable(literal.span));
++ stream.inner.push(TokenTree::Punct(punct));
++ stream
++ .inner
++ .push(TokenTree::Literal(crate::Literal::_new_stable(literal)));
++ }
++ }
++}
++
++// Nonrecursive to prevent stack overflow.
++impl Drop for TokenStream {
++ fn drop(&mut self) {
++ while let Some(token) = self.inner.pop() {
++ let group = match token {
++ TokenTree::Group(group) => group.inner,
++ _ => continue,
++ };
++ #[cfg(wrap_proc_macro)]
++ let group = match group {
++ crate::imp::Group::Fallback(group) => group,
++ _ => continue,
++ };
++ let mut group = group;
++ self.inner.extend(group.stream.take_inner());
++ }
++ }
+ }
+
+ #[cfg(span_locations)]
+@@ -59,20 +139,22 @@ impl FromStr for TokenStream {
+ // Create a dummy file & add it to the source map
+ let cursor = get_cursor(src);
+
+- match token_stream(cursor) {
+- Ok((input, output)) => {
+- if skip_whitespace(input).len() != 0 {
+- Err(LexError)
+- } else {
+- Ok(output)
+- }
+- }
+- Err(LexError) => Err(LexError),
++ let (rest, tokens) = token_stream(cursor)?;
++ if rest.is_empty() {
++ Ok(tokens)
++ } else {
++ Err(LexError)
+ }
+ }
+ }
+
+-impl fmt::Display for TokenStream {
++impl Display for LexError {
++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
++ f.write_str("cannot parse string into token stream")
++ }
++}
++
++impl Display for TokenStream {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let mut joint = false;
+ for (i, tt) in self.inner.iter().enumerate() {
+@@ -80,37 +162,22 @@ impl fmt::Display for TokenStream {
+ write!(f, " ")?;
+ }
+ joint = false;
+- match *tt {
+- TokenTree::Group(ref tt) => {
+- let (start, end) = match tt.delimiter() {
+- Delimiter::Parenthesis => ("(", ")"),
+- Delimiter::Brace => ("{", "}"),
+- Delimiter::Bracket => ("[", "]"),
+- Delimiter::None => ("", ""),
+- };
+- if tt.stream().into_iter().next().is_none() {
+- write!(f, "{} {}", start, end)?
+- } else {
+- write!(f, "{} {} {}", start, tt.stream(), end)?
+- }
+- }
+- TokenTree::Ident(ref tt) => write!(f, "{}", tt)?,
+- TokenTree::Punct(ref tt) => {
+- write!(f, "{}", tt.as_char())?;
+- match tt.spacing() {
+- Spacing::Alone => {}
+- Spacing::Joint => joint = true,
+- }
++ match tt {
++ TokenTree::Group(tt) => Display::fmt(tt, f),
++ TokenTree::Ident(tt) => Display::fmt(tt, f),
++ TokenTree::Punct(tt) => {
++ joint = tt.spacing() == Spacing::Joint;
++ Display::fmt(tt, f)
+ }
+- TokenTree::Literal(ref tt) => write!(f, "{}", tt)?,
+- }
++ TokenTree::Literal(tt) => Display::fmt(tt, f),
++ }?
+ }
+
+ Ok(())
+ }
+ }
+
+-impl fmt::Debug for TokenStream {
++impl Debug for TokenStream {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.write_str("TokenStream ")?;
+ f.debug_list().entries(self.clone()).finish()
+@@ -139,28 +206,26 @@ impl From<TokenStream> for proc_macro::TokenStream {
+
+ impl From<TokenTree> for TokenStream {
+ fn from(tree: TokenTree) -> TokenStream {
+- TokenStream { inner: vec![tree] }
++ let mut stream = TokenStream::new();
++ stream.push_token(tree);
++ stream
+ }
+ }
+
+-impl iter::FromIterator<TokenTree> for TokenStream {
+- fn from_iter<I: IntoIterator<Item = TokenTree>>(streams: I) -> Self {
+- let mut v = Vec::new();
+-
+- for token in streams.into_iter() {
+- v.push(token);
+- }
+-
+- TokenStream { inner: v }
++impl FromIterator<TokenTree> for TokenStream {
++ fn from_iter<I: IntoIterator<Item = TokenTree>>(tokens: I) -> Self {
++ let mut stream = TokenStream::new();
++ stream.extend(tokens);
++ stream
+ }
+ }
+
+-impl iter::FromIterator<TokenStream> for TokenStream {
++impl FromIterator<TokenStream> for TokenStream {
+ fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self {
+ let mut v = Vec::new();
+
+- for stream in streams.into_iter() {
+- v.extend(stream.inner);
++ for mut stream in streams {
++ v.extend(stream.take_inner());
+ }
+
+ TokenStream { inner: v }
+@@ -168,31 +233,30 @@ impl iter::FromIterator<TokenStream> for TokenStream {
+ }
+
+ impl Extend<TokenTree> for TokenStream {
+- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) {
+- self.inner.extend(streams);
++ fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, tokens: I) {
++ tokens.into_iter().for_each(|token| self.push_token(token));
+ }
+ }
+
+ impl Extend<TokenStream> for TokenStream {
+ fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
+- self.inner
+- .extend(streams.into_iter().flat_map(|stream| stream));
++ self.inner.extend(streams.into_iter().flatten());
+ }
+ }
+
+-pub type TokenTreeIter = vec::IntoIter<TokenTree>;
++pub(crate) type TokenTreeIter = vec::IntoIter<TokenTree>;
+
+ impl IntoIterator for TokenStream {
+ type Item = TokenTree;
+ type IntoIter = TokenTreeIter;
+
+- fn into_iter(self) -> TokenTreeIter {
+- self.inner.into_iter()
++ fn into_iter(mut self) -> TokenTreeIter {
++ self.take_inner().into_iter()
+ }
+ }
+
+ #[derive(Clone, PartialEq, Eq)]
+-pub struct SourceFile {
++pub(crate) struct SourceFile {
+ path: PathBuf,
+ }
+
+@@ -208,7 +272,7 @@ impl SourceFile {
+ }
+ }
+
+-impl fmt::Debug for SourceFile {
++impl Debug for SourceFile {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("SourceFile")
+ .field("path", &self.path())
+@@ -218,7 +282,7 @@ impl fmt::Debug for SourceFile {
+ }
+
+ #[derive(Clone, Copy, Debug, PartialEq, Eq)]
+-pub struct LineColumn {
++pub(crate) struct LineColumn {
+ pub line: usize,
+ pub column: usize,
+ }
+@@ -228,23 +292,11 @@ thread_local! {
+ static SOURCE_MAP: RefCell<SourceMap> = RefCell::new(SourceMap {
+ // NOTE: We start with a single dummy file which all call_site() and
+ // def_site() spans reference.
+- files: vec![{
++ files: vec![FileInfo {
+ #[cfg(procmacro2_semver_exempt)]
+- {
+- FileInfo {
+- name: "<unspecified>".to_owned(),
+- span: Span { lo: 0, hi: 0 },
+- lines: vec![0],
+- }
+- }
+-
+- #[cfg(not(procmacro2_semver_exempt))]
+- {
+- FileInfo {
+- span: Span { lo: 0, hi: 0 },
+- lines: vec![0],
+- }
+- }
++ name: "<unspecified>".to_owned(),
++ span: Span { lo: 0, hi: 0 },
++ lines: vec![0],
+ }],
+ });
+ }
+@@ -282,16 +334,21 @@ impl FileInfo {
+ }
+ }
+
+-/// Computesthe offsets of each line in the given source string.
++/// Computes the offsets of each line in the given source string
++/// and the total number of characters
+ #[cfg(span_locations)]
+-fn lines_offsets(s: &str) -> Vec<usize> {
++fn lines_offsets(s: &str) -> (usize, Vec<usize>) {
+ let mut lines = vec![0];
+- let mut prev = 0;
+- while let Some(len) = s[prev..].find('\n') {
+- prev += len + 1;
+- lines.push(prev);
++ let mut total = 0;
++
++ for ch in s.chars() {
++ total += 1;
++ if ch == '\n' {
++ lines.push(total);
++ }
+ }
+- lines
++
++ (total, lines)
+ }
+
+ #[cfg(span_locations)]
+@@ -310,23 +367,22 @@ impl SourceMap {
+ }
+
+ fn add_file(&mut self, name: &str, src: &str) -> Span {
+- let lines = lines_offsets(src);
++ let (len, lines) = lines_offsets(src);
+ let lo = self.next_start_pos();
+ // XXX(nika): Shouild we bother doing a checked cast or checked add here?
+ let span = Span {
+ lo,
+- hi: lo + (src.len() as u32),
++ hi: lo + (len as u32),
+ };
+
+- #[cfg(procmacro2_semver_exempt)]
+ self.files.push(FileInfo {
++ #[cfg(procmacro2_semver_exempt)]
+ name: name.to_owned(),
+ span,
+ lines,
+ });
+
+ #[cfg(not(procmacro2_semver_exempt))]
+- self.files.push(FileInfo { span, lines });
+ let _ = name;
+
+ span
+@@ -343,11 +399,11 @@ impl SourceMap {
+ }
+
+ #[derive(Clone, Copy, PartialEq, Eq)]
+-pub struct Span {
++pub(crate) struct Span {
+ #[cfg(span_locations)]
+- lo: u32,
++ pub(crate) lo: u32,
+ #[cfg(span_locations)]
+- hi: u32,
++ pub(crate) hi: u32,
+ }
+
+ impl Span {
+@@ -361,12 +417,16 @@ impl Span {
+ Span { lo: 0, hi: 0 }
+ }
+
++ #[cfg(hygiene)]
++ pub fn mixed_site() -> Span {
++ Span::call_site()
++ }
++
+ #[cfg(procmacro2_semver_exempt)]
+ pub fn def_site() -> Span {
+ Span::call_site()
+ }
+
+- #[cfg(procmacro2_semver_exempt)]
+ pub fn resolved_at(&self, _other: Span) -> Span {
+ // Stable spans consist only of line/column information, so
+ // `resolved_at` and `located_at` only select which span the
+@@ -374,7 +434,6 @@ impl Span {
+ *self
+ }
+
+- #[cfg(procmacro2_semver_exempt)]
+ pub fn located_at(&self, other: Span) -> Span {
+ other
+ }
+@@ -427,26 +486,59 @@ impl Span {
+ })
+ })
+ }
++
++ #[cfg(not(span_locations))]
++ fn first_byte(self) -> Self {
++ self
++ }
++
++ #[cfg(span_locations)]
++ fn first_byte(self) -> Self {
++ Span {
++ lo: self.lo,
++ hi: cmp::min(self.lo.saturating_add(1), self.hi),
++ }
++ }
++
++ #[cfg(not(span_locations))]
++ fn last_byte(self) -> Self {
++ self
++ }
++
++ #[cfg(span_locations)]
++ fn last_byte(self) -> Self {
++ Span {
++ lo: cmp::max(self.hi.saturating_sub(1), self.lo),
++ hi: self.hi,
++ }
++ }
+ }
+
+-impl fmt::Debug for Span {
++impl Debug for Span {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- #[cfg(procmacro2_semver_exempt)]
++ #[cfg(span_locations)]
+ return write!(f, "bytes({}..{})", self.lo, self.hi);
+
+- #[cfg(not(procmacro2_semver_exempt))]
++ #[cfg(not(span_locations))]
+ write!(f, "Span")
+ }
+ }
+
+-pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
+- if cfg!(procmacro2_semver_exempt) {
++pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
++ #[cfg(span_locations)]
++ {
++ if span.lo == 0 && span.hi == 0 {
++ return;
++ }
++ }
++
++ if cfg!(span_locations) {
+ debug.field("span", &span);
+ }
+ }
+
+ #[derive(Clone)]
+-pub struct Group {
++pub(crate) struct Group {
+ delimiter: Delimiter,
+ stream: TokenStream,
+ span: Span,
+@@ -474,11 +566,11 @@ impl Group {
+ }
+
+ pub fn span_open(&self) -> Span {
+- self.span
++ self.span.first_byte()
+ }
+
+ pub fn span_close(&self) -> Span {
+- self.span
++ self.span.last_byte()
+ }
+
+ pub fn set_span(&mut self, span: Span) {
+@@ -486,36 +578,45 @@ impl Group {
+ }
+ }
+
+-impl fmt::Display for Group {
++impl Display for Group {
++ // We attempt to match libproc_macro's formatting.
++ // Empty parens: ()
++ // Nonempty parens: (...)
++ // Empty brackets: []
++ // Nonempty brackets: [...]
++ // Empty braces: { }
++ // Nonempty braces: { ... }
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- let (left, right) = match self.delimiter {
++ let (open, close) = match self.delimiter {
+ Delimiter::Parenthesis => ("(", ")"),
+- Delimiter::Brace => ("{", "}"),
++ Delimiter::Brace => ("{ ", "}"),
+ Delimiter::Bracket => ("[", "]"),
+ Delimiter::None => ("", ""),
+ };
+
+- f.write_str(left)?;
+- self.stream.fmt(f)?;
+- f.write_str(right)?;
++ f.write_str(open)?;
++ Display::fmt(&self.stream, f)?;
++ if self.delimiter == Delimiter::Brace && !self.stream.inner.is_empty() {
++ f.write_str(" ")?;
++ }
++ f.write_str(close)?;
+
+ Ok(())
+ }
+ }
+
+-impl fmt::Debug for Group {
++impl Debug for Group {
+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+ let mut debug = fmt.debug_struct("Group");
+ debug.field("delimiter", &self.delimiter);
+ debug.field("stream", &self.stream);
+- #[cfg(procmacro2_semver_exempt)]
+- debug.field("span", &self.span);
++ debug_span_field_if_nontrivial(&mut debug, self.span);
+ debug.finish()
+ }
+ }
+
+ #[derive(Clone)]
+-pub struct Ident {
++pub(crate) struct Ident {
+ sym: String,
+ span: Span,
+ raw: bool,
+@@ -549,16 +650,14 @@ impl Ident {
+ }
+ }
+
+-#[inline]
+-fn is_ident_start(c: char) -> bool {
++pub(crate) fn is_ident_start(c: char) -> bool {
+ ('a' <= c && c <= 'z')
+ || ('A' <= c && c <= 'Z')
+ || c == '_'
+ || (c > '\x7f' && UnicodeXID::is_xid_start(c))
+ }
+
+-#[inline]
+-fn is_ident_continue(c: char) -> bool {
++pub(crate) fn is_ident_continue(c: char) -> bool {
+ ('a' <= c && c <= 'z')
+ || ('A' <= c && c <= 'Z')
+ || c == '_'
+@@ -615,18 +714,18 @@ where
+ }
+ }
+
+-impl fmt::Display for Ident {
++impl Display for Ident {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ if self.raw {
+- "r#".fmt(f)?;
++ f.write_str("r#")?;
+ }
+- self.sym.fmt(f)
++ Display::fmt(&self.sym, f)
+ }
+ }
+
+-impl fmt::Debug for Ident {
++impl Debug for Ident {
+ // Ident(proc_macro), Ident(r#union)
+- #[cfg(not(procmacro2_semver_exempt))]
++ #[cfg(not(span_locations))]
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let mut debug = f.debug_tuple("Ident");
+ debug.field(&format_args!("{}", self));
+@@ -637,17 +736,17 @@ impl fmt::Debug for Ident {
+ // sym: proc_macro,
+ // span: bytes(128..138)
+ // }
+- #[cfg(procmacro2_semver_exempt)]
++ #[cfg(span_locations)]
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let mut debug = f.debug_struct("Ident");
+ debug.field("sym", &format_args!("{}", self));
+- debug.field("span", &self.span);
++ debug_span_field_if_nontrivial(&mut debug, self.span);
+ debug.finish()
+ }
+ }
+
+ #[derive(Clone)]
+-pub struct Literal {
++pub(crate) struct Literal {
+ text: String,
+ span: Span,
+ }
+@@ -669,7 +768,7 @@ macro_rules! unsuffixed_numbers {
+ }
+
+ impl Literal {
+- fn _new(text: String) -> Literal {
++ pub(crate) fn _new(text: String) -> Literal {
+ Literal {
+ text,
+ span: Span::call_site(),
+@@ -711,7 +810,7 @@ impl Literal {
+
+ pub fn f32_unsuffixed(f: f32) -> Literal {
+ let mut s = f.to_string();
+- if !s.contains(".") {
++ if !s.contains('.') {
+ s.push_str(".0");
+ }
+ Literal::_new(s)
+@@ -719,7 +818,7 @@ impl Literal {
+
+ pub fn f64_unsuffixed(f: f64) -> Literal {
+ let mut s = f.to_string();
+- if !s.contains(".") {
++ if !s.contains('.') {
+ s.push_str(".0");
+ }
+ Literal::_new(s)
+@@ -730,10 +829,10 @@ impl Literal {
+ text.push('"');
+ for c in t.chars() {
+ if c == '\'' {
+- // escape_default turns this into "\'" which is unnecessary.
++ // escape_debug turns this into "\'" which is unnecessary.
+ text.push(c);
+ } else {
+- text.extend(c.escape_default());
++ text.extend(c.escape_debug());
+ }
+ }
+ text.push('"');
+@@ -744,10 +843,10 @@ impl Literal {
+ let mut text = String::new();
+ text.push('\'');
+ if t == '"' {
+- // escape_default turns this into '\"' which is unnecessary.
++ // escape_debug turns this into '\"' which is unnecessary.
+ text.push(t);
+ } else {
+- text.extend(t.escape_default());
++ text.extend(t.escape_debug());
+ }
+ text.push('\'');
+ Literal::_new(text)
+@@ -756,6 +855,7 @@ impl Literal {
+ pub fn byte_string(bytes: &[u8]) -> Literal {
+ let mut escaped = "b\"".to_string();
+ for b in bytes {
++ #[allow(clippy::match_overlapping_arm)]
+ match *b {
+ b'\0' => escaped.push_str(r"\0"),
+ b'\t' => escaped.push_str(r"\t"),
+@@ -784,651 +884,17 @@ impl Literal {
+ }
+ }
+
+-impl fmt::Display for Literal {
++impl Display for Literal {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.text.fmt(f)
++ Display::fmt(&self.text, f)
+ }
+ }
+
+-impl fmt::Debug for Literal {
++impl Debug for Literal {
+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+ let mut debug = fmt.debug_struct("Literal");
+ debug.field("lit", &format_args!("{}", self.text));
+- #[cfg(procmacro2_semver_exempt)]
+- debug.field("span", &self.span);
++ debug_span_field_if_nontrivial(&mut debug, self.span);
+ debug.finish()
+ }
+ }
+-
+-fn token_stream(mut input: Cursor) -> PResult<TokenStream> {
+- let mut trees = Vec::new();
+- loop {
+- let input_no_ws = skip_whitespace(input);
+- if input_no_ws.rest.len() == 0 {
+- break;
+- }
+- if let Ok((a, tokens)) = doc_comment(input_no_ws) {
+- input = a;
+- trees.extend(tokens);
+- continue;
+- }
+-
+- let (a, tt) = match token_tree(input_no_ws) {
+- Ok(p) => p,
+- Err(_) => break,
+- };
+- trees.push(tt);
+- input = a;
+- }
+- Ok((input, TokenStream { inner: trees }))
+-}
+-
+-#[cfg(not(span_locations))]
+-fn spanned<'a, T>(
+- input: Cursor<'a>,
+- f: fn(Cursor<'a>) -> PResult<'a, T>,
+-) -> PResult<'a, (T, crate::Span)> {
+- let (a, b) = f(skip_whitespace(input))?;
+- Ok((a, ((b, crate::Span::_new_stable(Span::call_site())))))
+-}
+-
+-#[cfg(span_locations)]
+-fn spanned<'a, T>(
+- input: Cursor<'a>,
+- f: fn(Cursor<'a>) -> PResult<'a, T>,
+-) -> PResult<'a, (T, crate::Span)> {
+- let input = skip_whitespace(input);
+- let lo = input.off;
+- let (a, b) = f(input)?;
+- let hi = a.off;
+- let span = crate::Span::_new_stable(Span { lo, hi });
+- Ok((a, (b, span)))
+-}
+-
+-fn token_tree(input: Cursor) -> PResult<TokenTree> {
+- let (rest, (mut tt, span)) = spanned(input, token_kind)?;
+- tt.set_span(span);
+- Ok((rest, tt))
+-}
+-
+-named!(token_kind -> TokenTree, alt!(
+- map!(group, |g| TokenTree::Group(crate::Group::_new_stable(g)))
+- |
+- map!(literal, |l| TokenTree::Literal(crate::Literal::_new_stable(l))) // must be before symbol
+- |
+- map!(op, TokenTree::Punct)
+- |
+- symbol_leading_ws
+-));
+-
+-named!(group -> Group, alt!(
+- delimited!(
+- punct!("("),
+- token_stream,
+- punct!(")")
+- ) => { |ts| Group::new(Delimiter::Parenthesis, ts) }
+- |
+- delimited!(
+- punct!("["),
+- token_stream,
+- punct!("]")
+- ) => { |ts| Group::new(Delimiter::Bracket, ts) }
+- |
+- delimited!(
+- punct!("{"),
+- token_stream,
+- punct!("}")
+- ) => { |ts| Group::new(Delimiter::Brace, ts) }
+-));
+-
+-fn symbol_leading_ws(input: Cursor) -> PResult<TokenTree> {
+- symbol(skip_whitespace(input))
+-}
+-
+-fn symbol(input: Cursor) -> PResult<TokenTree> {
+- let raw = input.starts_with("r#");
+- let rest = input.advance((raw as usize) << 1);
+-
+- let (rest, sym) = symbol_not_raw(rest)?;
+-
+- if !raw {
+- let ident = crate::Ident::new(sym, crate::Span::call_site());
+- return Ok((rest, ident.into()));
+- }
+-
+- if sym == "_" {
+- return Err(LexError);
+- }
+-
+- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site());
+- Ok((rest, ident.into()))
+-}
+-
+-fn symbol_not_raw(input: Cursor) -> PResult<&str> {
+- let mut chars = input.char_indices();
+-
+- match chars.next() {
+- Some((_, ch)) if is_ident_start(ch) => {}
+- _ => return Err(LexError),
+- }
+-
+- let mut end = input.len();
+- for (i, ch) in chars {
+- if !is_ident_continue(ch) {
+- end = i;
+- break;
+- }
+- }
+-
+- Ok((input.advance(end), &input.rest[..end]))
+-}
+-
+-fn literal(input: Cursor) -> PResult<Literal> {
+- let input_no_ws = skip_whitespace(input);
+-
+- match literal_nocapture(input_no_ws) {
+- Ok((a, ())) => {
+- let start = input.len() - input_no_ws.len();
+- let len = input_no_ws.len() - a.len();
+- let end = start + len;
+- Ok((a, Literal::_new(input.rest[start..end].to_string())))
+- }
+- Err(LexError) => Err(LexError),
+- }
+-}
+-
+-named!(literal_nocapture -> (), alt!(
+- string
+- |
+- byte_string
+- |
+- byte
+- |
+- character
+- |
+- float
+- |
+- int
+-));
+-
+-named!(string -> (), alt!(
+- quoted_string
+- |
+- preceded!(
+- punct!("r"),
+- raw_string
+- ) => { |_| () }
+-));
+-
+-named!(quoted_string -> (), do_parse!(
+- punct!("\"") >>
+- cooked_string >>
+- tag!("\"") >>
+- option!(symbol_not_raw) >>
+- (())
+-));
+-
+-fn cooked_string(input: Cursor) -> PResult<()> {
+- let mut chars = input.char_indices().peekable();
+- while let Some((byte_offset, ch)) = chars.next() {
+- match ch {
+- '"' => {
+- return Ok((input.advance(byte_offset), ()));
+- }
+- '\r' => {
+- if let Some((_, '\n')) = chars.next() {
+- // ...
+- } else {
+- break;
+- }
+- }
+- '\\' => match chars.next() {
+- Some((_, 'x')) => {
+- if !backslash_x_char(&mut chars) {
+- break;
+- }
+- }
+- Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\'))
+- | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {}
+- Some((_, 'u')) => {
+- if !backslash_u(&mut chars) {
+- break;
+- }
+- }
+- Some((_, '\n')) | Some((_, '\r')) => {
+- while let Some(&(_, ch)) = chars.peek() {
+- if ch.is_whitespace() {
+- chars.next();
+- } else {
+- break;
+- }
+- }
+- }
+- _ => break,
+- },
+- _ch => {}
+- }
+- }
+- Err(LexError)
+-}
+-
+-named!(byte_string -> (), alt!(
+- delimited!(
+- punct!("b\""),
+- cooked_byte_string,
+- tag!("\"")
+- ) => { |_| () }
+- |
+- preceded!(
+- punct!("br"),
+- raw_string
+- ) => { |_| () }
+-));
+-
+-fn cooked_byte_string(mut input: Cursor) -> PResult<()> {
+- let mut bytes = input.bytes().enumerate();
+- 'outer: while let Some((offset, b)) = bytes.next() {
+- match b {
+- b'"' => {
+- return Ok((input.advance(offset), ()));
+- }
+- b'\r' => {
+- if let Some((_, b'\n')) = bytes.next() {
+- // ...
+- } else {
+- break;
+- }
+- }
+- b'\\' => match bytes.next() {
+- Some((_, b'x')) => {
+- if !backslash_x_byte(&mut bytes) {
+- break;
+- }
+- }
+- Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\'))
+- | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {}
+- Some((newline, b'\n')) | Some((newline, b'\r')) => {
+- let rest = input.advance(newline + 1);
+- for (offset, ch) in rest.char_indices() {
+- if !ch.is_whitespace() {
+- input = rest.advance(offset);
+- bytes = input.bytes().enumerate();
+- continue 'outer;
+- }
+- }
+- break;
+- }
+- _ => break,
+- },
+- b if b < 0x80 => {}
+- _ => break,
+- }
+- }
+- Err(LexError)
+-}
+-
+-fn raw_string(input: Cursor) -> PResult<()> {
+- let mut chars = input.char_indices();
+- let mut n = 0;
+- while let Some((byte_offset, ch)) = chars.next() {
+- match ch {
+- '"' => {
+- n = byte_offset;
+- break;
+- }
+- '#' => {}
+- _ => return Err(LexError),
+- }
+- }
+- for (byte_offset, ch) in chars {
+- match ch {
+- '"' if input.advance(byte_offset + 1).starts_with(&input.rest[..n]) => {
+- let rest = input.advance(byte_offset + 1 + n);
+- return Ok((rest, ()));
+- }
+- '\r' => {}
+- _ => {}
+- }
+- }
+- Err(LexError)
+-}
+-
+-named!(byte -> (), do_parse!(
+- punct!("b") >>
+- tag!("'") >>
+- cooked_byte >>
+- tag!("'") >>
+- (())
+-));
+-
+-fn cooked_byte(input: Cursor) -> PResult<()> {
+- let mut bytes = input.bytes().enumerate();
+- let ok = match bytes.next().map(|(_, b)| b) {
+- Some(b'\\') => match bytes.next().map(|(_, b)| b) {
+- Some(b'x') => backslash_x_byte(&mut bytes),
+- Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'')
+- | Some(b'"') => true,
+- _ => false,
+- },
+- b => b.is_some(),
+- };
+- if ok {
+- match bytes.next() {
+- Some((offset, _)) => {
+- if input.chars().as_str().is_char_boundary(offset) {
+- Ok((input.advance(offset), ()))
+- } else {
+- Err(LexError)
+- }
+- }
+- None => Ok((input.advance(input.len()), ())),
+- }
+- } else {
+- Err(LexError)
+- }
+-}
+-
+-named!(character -> (), do_parse!(
+- punct!("'") >>
+- cooked_char >>
+- tag!("'") >>
+- (())
+-));
+-
+-fn cooked_char(input: Cursor) -> PResult<()> {
+- let mut chars = input.char_indices();
+- let ok = match chars.next().map(|(_, ch)| ch) {
+- Some('\\') => match chars.next().map(|(_, ch)| ch) {
+- Some('x') => backslash_x_char(&mut chars),
+- Some('u') => backslash_u(&mut chars),
+- Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => {
+- true
+- }
+- _ => false,
+- },
+- ch => ch.is_some(),
+- };
+- if ok {
+- match chars.next() {
+- Some((idx, _)) => Ok((input.advance(idx), ())),
+- None => Ok((input.advance(input.len()), ())),
+- }
+- } else {
+- Err(LexError)
+- }
+-}
+-
+-macro_rules! next_ch {
+- ($chars:ident @ $pat:pat $(| $rest:pat)*) => {
+- match $chars.next() {
+- Some((_, ch)) => match ch {
+- $pat $(| $rest)* => ch,
+- _ => return false,
+- },
+- None => return false
+- }
+- };
+-}
+-
+-fn backslash_x_char<I>(chars: &mut I) -> bool
+-where
+- I: Iterator<Item = (usize, char)>,
+-{
+- next_ch!(chars @ '0'..='7');
+- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
+- true
+-}
+-
+-fn backslash_x_byte<I>(chars: &mut I) -> bool
+-where
+- I: Iterator<Item = (usize, u8)>,
+-{
+- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
+- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
+- true
+-}
+-
+-fn backslash_u<I>(chars: &mut I) -> bool
+-where
+- I: Iterator<Item = (usize, char)>,
+-{
+- next_ch!(chars @ '{');
+- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
+- loop {
+- let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}');
+- if c == '}' {
+- return true;
+- }
+- }
+-}
+-
+-fn float(input: Cursor) -> PResult<()> {
+- let (mut rest, ()) = float_digits(input)?;
+- if let Some(ch) = rest.chars().next() {
+- if is_ident_start(ch) {
+- rest = symbol_not_raw(rest)?.0;
+- }
+- }
+- word_break(rest)
+-}
+-
+-fn float_digits(input: Cursor) -> PResult<()> {
+- let mut chars = input.chars().peekable();
+- match chars.next() {
+- Some(ch) if ch >= '0' && ch <= '9' => {}
+- _ => return Err(LexError),
+- }
+-
+- let mut len = 1;
+- let mut has_dot = false;
+- let mut has_exp = false;
+- while let Some(&ch) = chars.peek() {
+- match ch {
+- '0'..='9' | '_' => {
+- chars.next();
+- len += 1;
+- }
+- '.' => {
+- if has_dot {
+- break;
+- }
+- chars.next();
+- if chars
+- .peek()
+- .map(|&ch| ch == '.' || is_ident_start(ch))
+- .unwrap_or(false)
+- {
+- return Err(LexError);
+- }
+- len += 1;
+- has_dot = true;
+- }
+- 'e' | 'E' => {
+- chars.next();
+- len += 1;
+- has_exp = true;
+- break;
+- }
+- _ => break,
+- }
+- }
+-
+- let rest = input.advance(len);
+- if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) {
+- return Err(LexError);
+- }
+-
+- if has_exp {
+- let mut has_exp_value = false;
+- while let Some(&ch) = chars.peek() {
+- match ch {
+- '+' | '-' => {
+- if has_exp_value {
+- break;
+- }
+- chars.next();
+- len += 1;
+- }
+- '0'..='9' => {
+- chars.next();
+- len += 1;
+- has_exp_value = true;
+- }
+- '_' => {
+- chars.next();
+- len += 1;
+- }
+- _ => break,
+- }
+- }
+- if !has_exp_value {
+- return Err(LexError);
+- }
+- }
+-
+- Ok((input.advance(len), ()))
+-}
+-
+-fn int(input: Cursor) -> PResult<()> {
+- let (mut rest, ()) = digits(input)?;
+- if let Some(ch) = rest.chars().next() {
+- if is_ident_start(ch) {
+- rest = symbol_not_raw(rest)?.0;
+- }
+- }
+- word_break(rest)
+-}
+-
+-fn digits(mut input: Cursor) -> PResult<()> {
+- let base = if input.starts_with("0x") {
+- input = input.advance(2);
+- 16
+- } else if input.starts_with("0o") {
+- input = input.advance(2);
+- 8
+- } else if input.starts_with("0b") {
+- input = input.advance(2);
+- 2
+- } else {
+- 10
+- };
+-
+- let mut len = 0;
+- let mut empty = true;
+- for b in input.bytes() {
+- let digit = match b {
+- b'0'..=b'9' => (b - b'0') as u64,
+- b'a'..=b'f' => 10 + (b - b'a') as u64,
+- b'A'..=b'F' => 10 + (b - b'A') as u64,
+- b'_' => {
+- if empty && base == 10 {
+- return Err(LexError);
+- }
+- len += 1;
+- continue;
+- }
+- _ => break,
+- };
+- if digit >= base {
+- return Err(LexError);
+- }
+- len += 1;
+- empty = false;
+- }
+- if empty {
+- Err(LexError)
+- } else {
+- Ok((input.advance(len), ()))
+- }
+-}
+-
+-fn op(input: Cursor) -> PResult<Punct> {
+- let input = skip_whitespace(input);
+- match op_char(input) {
+- Ok((rest, '\'')) => {
+- symbol(rest)?;
+- Ok((rest, Punct::new('\'', Spacing::Joint)))
+- }
+- Ok((rest, ch)) => {
+- let kind = match op_char(rest) {
+- Ok(_) => Spacing::Joint,
+- Err(LexError) => Spacing::Alone,
+- };
+- Ok((rest, Punct::new(ch, kind)))
+- }
+- Err(LexError) => Err(LexError),
+- }
+-}
+-
+-fn op_char(input: Cursor) -> PResult<char> {
+- if input.starts_with("//") || input.starts_with("/*") {
+- // Do not accept `/` of a comment as an op.
+- return Err(LexError);
+- }
+-
+- let mut chars = input.chars();
+- let first = match chars.next() {
+- Some(ch) => ch,
+- None => {
+- return Err(LexError);
+- }
+- };
+- let recognized = "~!@#$%^&*-=+|;:,<.>/?'";
+- if recognized.contains(first) {
+- Ok((input.advance(first.len_utf8()), first))
+- } else {
+- Err(LexError)
+- }
+-}
+-
+-fn doc_comment(input: Cursor) -> PResult<Vec<TokenTree>> {
+- let mut trees = Vec::new();
+- let (rest, ((comment, inner), span)) = spanned(input, doc_comment_contents)?;
+- trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone)));
+- if inner {
+- trees.push(Punct::new('!', Spacing::Alone).into());
+- }
+- let mut stream = vec![
+- TokenTree::Ident(crate::Ident::new("doc", span)),
+- TokenTree::Punct(Punct::new('=', Spacing::Alone)),
+- TokenTree::Literal(crate::Literal::string(comment)),
+- ];
+- for tt in stream.iter_mut() {
+- tt.set_span(span);
+- }
+- let group = Group::new(Delimiter::Bracket, stream.into_iter().collect());
+- trees.push(crate::Group::_new_stable(group).into());
+- for tt in trees.iter_mut() {
+- tt.set_span(span);
+- }
+- Ok((rest, trees))
+-}
+-
+-named!(doc_comment_contents -> (&str, bool), alt!(
+- do_parse!(
+- punct!("//!") >>
+- s: take_until_newline_or_eof!() >>
+- ((s, true))
+- )
+- |
+- do_parse!(
+- option!(whitespace) >>
+- peek!(tag!("/*!")) >>
+- s: block_comment >>
+- ((s, true))
+- )
+- |
+- do_parse!(
+- punct!("///") >>
+- not!(tag!("/")) >>
+- s: take_until_newline_or_eof!() >>
+- ((s, false))
+- )
+- |
+- do_parse!(
+- option!(whitespace) >>
+- peek!(tuple!(tag!("/**"), not!(tag!("*")))) >>
+- s: block_comment >>
+- ((s, false))
+- )
+-));
+diff --git a/third_party/rust/proc-macro2/src/lib.rs b/third_party/rust/proc-macro2/src/lib.rs
+index a08be3e815..c20fb50d4a 100644
+--- mozilla-release/third_party/rust/proc-macro2/src/lib.rs
++++ mozilla-release/third_party/rust/proc-macro2/src/lib.rs
+@@ -78,27 +78,24 @@
+ //! a different thread.
+
+ // Proc-macro2 types in rustdoc of other crates get linked to here.
+-#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.5")]
++#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.24")]
+ #![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))]
+ #![cfg_attr(super_unstable, feature(proc_macro_raw_ident, proc_macro_def_site))]
++#![allow(clippy::needless_doctest_main)]
+
+ #[cfg(use_proc_macro)]
+ extern crate proc_macro;
+
+-use std::cmp::Ordering;
+-use std::fmt;
+-use std::hash::{Hash, Hasher};
+-use std::iter::FromIterator;
+-use std::marker;
+-use std::ops::RangeBounds;
+-#[cfg(procmacro2_semver_exempt)]
+-use std::path::PathBuf;
+-use std::rc::Rc;
+-use std::str::FromStr;
++mod marker;
++mod parse;
++
++#[cfg(wrap_proc_macro)]
++mod detection;
+
+-#[macro_use]
+-mod strnom;
+-mod fallback;
++// Public for proc_macro2::fallback::force() and unforce(), but those are quite
++// a niche use case so we omit it from rustdoc.
++#[doc(hidden)]
++pub mod fallback;
+
+ #[cfg(not(wrap_proc_macro))]
+ use crate::fallback as imp;
+@@ -106,6 +103,17 @@ use crate::fallback as imp;
+ #[cfg(wrap_proc_macro)]
+ mod imp;
+
++use crate::marker::Marker;
++use std::cmp::Ordering;
++use std::error::Error;
++use std::fmt::{self, Debug, Display};
++use std::hash::{Hash, Hasher};
++use std::iter::FromIterator;
++use std::ops::RangeBounds;
++#[cfg(procmacro2_semver_exempt)]
++use std::path::PathBuf;
++use std::str::FromStr;
++
+ /// An abstract stream of tokens, or more concretely a sequence of token trees.
+ ///
+ /// This type provides interfaces for iterating over token trees and for
+@@ -116,27 +124,27 @@ mod imp;
+ #[derive(Clone)]
+ pub struct TokenStream {
+ inner: imp::TokenStream,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ /// Error returned from `TokenStream::from_str`.
+ pub struct LexError {
+ inner: imp::LexError,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ impl TokenStream {
+ fn _new(inner: imp::TokenStream) -> TokenStream {
+ TokenStream {
+ inner,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+ fn _new_stable(inner: fallback::TokenStream) -> TokenStream {
+ TokenStream {
+ inner: inner.into(),
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+@@ -173,7 +181,7 @@ impl FromStr for TokenStream {
+ fn from_str(src: &str) -> Result<TokenStream, LexError> {
+ let e = src.parse().map_err(|e| LexError {
+ inner: e,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ })?;
+ Ok(TokenStream::_new(e))
+ }
+@@ -228,25 +236,33 @@ impl FromIterator<TokenStream> for TokenStream {
+ /// convertible back into the same token stream (modulo spans), except for
+ /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative
+ /// numeric literals.
+-impl fmt::Display for TokenStream {
++impl Display for TokenStream {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Display::fmt(&self.inner, f)
+ }
+ }
+
+ /// Prints token in a form convenient for debugging.
+-impl fmt::Debug for TokenStream {
++impl Debug for TokenStream {
++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
++ Debug::fmt(&self.inner, f)
++ }
++}
++
++impl Debug for LexError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+-impl fmt::Debug for LexError {
++impl Display for LexError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Display::fmt(&self.inner, f)
+ }
+ }
+
++impl Error for LexError {}
++
+ /// The source file of a given `Span`.
+ ///
+ /// This type is semver exempt and not exposed by default.
+@@ -254,7 +270,7 @@ impl fmt::Debug for LexError {
+ #[derive(Clone, PartialEq, Eq)]
+ pub struct SourceFile {
+ inner: imp::SourceFile,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ #[cfg(procmacro2_semver_exempt)]
+@@ -262,7 +278,7 @@ impl SourceFile {
+ fn _new(inner: imp::SourceFile) -> Self {
+ SourceFile {
+ inner,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+@@ -291,9 +307,9 @@ impl SourceFile {
+ }
+
+ #[cfg(procmacro2_semver_exempt)]
+-impl fmt::Debug for SourceFile {
++impl Debug for SourceFile {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+@@ -311,25 +327,41 @@ pub struct LineColumn {
+ pub column: usize,
+ }
+
++#[cfg(span_locations)]
++impl Ord for LineColumn {
++ fn cmp(&self, other: &Self) -> Ordering {
++ self.line
++ .cmp(&other.line)
++ .then(self.column.cmp(&other.column))
++ }
++}
++
++#[cfg(span_locations)]
++impl PartialOrd for LineColumn {
++ fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
++ Some(self.cmp(other))
++ }
++}
++
+ /// A region of source code, along with macro expansion information.
+ #[derive(Copy, Clone)]
+ pub struct Span {
+ inner: imp::Span,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ impl Span {
+ fn _new(inner: imp::Span) -> Span {
+ Span {
+ inner,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+ fn _new_stable(inner: fallback::Span) -> Span {
+ Span {
+ inner: inner.into(),
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+@@ -342,6 +374,16 @@ impl Span {
+ Span::_new(imp::Span::call_site())
+ }
+
++ /// The span located at the invocation of the procedural macro, but with
++ /// local variables, labels, and `$crate` resolved at the definition site
++ /// of the macro. This is the same hygiene behavior as `macro_rules`.
++ ///
++ /// This function requires Rust 1.45 or later.
++ #[cfg(hygiene)]
++ pub fn mixed_site() -> Span {
++ Span::_new(imp::Span::mixed_site())
++ }
++
+ /// A span that resolves at the macro definition site.
+ ///
+ /// This method is semver exempt and not exposed by default.
+@@ -352,18 +394,12 @@ impl Span {
+
+ /// Creates a new span with the same line/column information as `self` but
+ /// that resolves symbols as though it were at `other`.
+- ///
+- /// This method is semver exempt and not exposed by default.
+- #[cfg(procmacro2_semver_exempt)]
+ pub fn resolved_at(&self, other: Span) -> Span {
+ Span::_new(self.inner.resolved_at(other.inner))
+ }
+
+ /// Creates a new span with the same name resolution behavior as `self` but
+ /// with the line/column information of `other`.
+- ///
+- /// This method is semver exempt and not exposed by default.
+- #[cfg(procmacro2_semver_exempt)]
+ pub fn located_at(&self, other: Span) -> Span {
+ Span::_new(self.inner.located_at(other.inner))
+ }
+@@ -439,9 +475,9 @@ impl Span {
+ }
+
+ /// Prints a span in a form convenient for debugging.
+-impl fmt::Debug for Span {
++impl Debug for Span {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+@@ -462,11 +498,11 @@ impl TokenTree {
+ /// Returns the span of this tree, delegating to the `span` method of
+ /// the contained token or a delimited stream.
+ pub fn span(&self) -> Span {
+- match *self {
+- TokenTree::Group(ref t) => t.span(),
+- TokenTree::Ident(ref t) => t.span(),
+- TokenTree::Punct(ref t) => t.span(),
+- TokenTree::Literal(ref t) => t.span(),
++ match self {
++ TokenTree::Group(t) => t.span(),
++ TokenTree::Ident(t) => t.span(),
++ TokenTree::Punct(t) => t.span(),
++ TokenTree::Literal(t) => t.span(),
+ }
+ }
+
+@@ -476,11 +512,11 @@ impl TokenTree {
+ /// the span of each of the internal tokens, this will simply delegate to
+ /// the `set_span` method of each variant.
+ pub fn set_span(&mut self, span: Span) {
+- match *self {
+- TokenTree::Group(ref mut t) => t.set_span(span),
+- TokenTree::Ident(ref mut t) => t.set_span(span),
+- TokenTree::Punct(ref mut t) => t.set_span(span),
+- TokenTree::Literal(ref mut t) => t.set_span(span),
++ match self {
++ TokenTree::Group(t) => t.set_span(span),
++ TokenTree::Ident(t) => t.set_span(span),
++ TokenTree::Punct(t) => t.set_span(span),
++ TokenTree::Literal(t) => t.set_span(span),
+ }
+ }
+ }
+@@ -513,32 +549,32 @@ impl From<Literal> for TokenTree {
+ /// convertible back into the same token tree (modulo spans), except for
+ /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative
+ /// numeric literals.
+-impl fmt::Display for TokenTree {
++impl Display for TokenTree {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- match *self {
+- TokenTree::Group(ref t) => t.fmt(f),
+- TokenTree::Ident(ref t) => t.fmt(f),
+- TokenTree::Punct(ref t) => t.fmt(f),
+- TokenTree::Literal(ref t) => t.fmt(f),
++ match self {
++ TokenTree::Group(t) => Display::fmt(t, f),
++ TokenTree::Ident(t) => Display::fmt(t, f),
++ TokenTree::Punct(t) => Display::fmt(t, f),
++ TokenTree::Literal(t) => Display::fmt(t, f),
+ }
+ }
+ }
+
+ /// Prints token tree in a form convenient for debugging.
+-impl fmt::Debug for TokenTree {
++impl Debug for TokenTree {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Each of these has the name in the struct type in the derived debug,
+ // so don't bother with an extra layer of indirection
+- match *self {
+- TokenTree::Group(ref t) => t.fmt(f),
+- TokenTree::Ident(ref t) => {
++ match self {
++ TokenTree::Group(t) => Debug::fmt(t, f),
++ TokenTree::Ident(t) => {
+ let mut debug = f.debug_struct("Ident");
+ debug.field("sym", &format_args!("{}", t));
+ imp::debug_span_field_if_nontrivial(&mut debug, t.span().inner);
+ debug.finish()
+ }
+- TokenTree::Punct(ref t) => t.fmt(f),
+- TokenTree::Literal(ref t) => t.fmt(f),
++ TokenTree::Punct(t) => Debug::fmt(t, f),
++ TokenTree::Literal(t) => Debug::fmt(t, f),
+ }
+ }
+ }
+@@ -651,15 +687,15 @@ impl Group {
+ /// Prints the group as a string that should be losslessly convertible back
+ /// into the same group (modulo spans), except for possibly `TokenTree::Group`s
+ /// with `Delimiter::None` delimiters.
+-impl fmt::Display for Group {
++impl Display for Group {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- fmt::Display::fmt(&self.inner, formatter)
++ Display::fmt(&self.inner, formatter)
+ }
+ }
+
+-impl fmt::Debug for Group {
++impl Debug for Group {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- fmt::Debug::fmt(&self.inner, formatter)
++ Debug::fmt(&self.inner, formatter)
+ }
+ }
+
+@@ -669,7 +705,7 @@ impl fmt::Debug for Group {
+ /// `Punct` with different forms of `Spacing` returned.
+ #[derive(Clone)]
+ pub struct Punct {
+- op: char,
++ ch: char,
+ spacing: Spacing,
+ span: Span,
+ }
+@@ -695,9 +731,9 @@ impl Punct {
+ ///
+ /// The returned `Punct` will have the default span of `Span::call_site()`
+ /// which can be further configured with the `set_span` method below.
+- pub fn new(op: char, spacing: Spacing) -> Punct {
++ pub fn new(ch: char, spacing: Spacing) -> Punct {
+ Punct {
+- op,
++ ch,
+ spacing,
+ span: Span::call_site(),
+ }
+@@ -705,7 +741,7 @@ impl Punct {
+
+ /// Returns the value of this punctuation character as `char`.
+ pub fn as_char(&self) -> char {
+- self.op
++ self.ch
+ }
+
+ /// Returns the spacing of this punctuation character, indicating whether
+@@ -730,16 +766,16 @@ impl Punct {
+
+ /// Prints the punctuation character as a string that should be losslessly
+ /// convertible back into the same character.
+-impl fmt::Display for Punct {
++impl Display for Punct {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.op.fmt(f)
++ Display::fmt(&self.ch, f)
+ }
+ }
+
+-impl fmt::Debug for Punct {
++impl Debug for Punct {
+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+ let mut debug = fmt.debug_struct("Punct");
+- debug.field("op", &self.op);
++ debug.field("char", &self.ch);
+ debug.field("spacing", &self.spacing);
+ imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner);
+ debug.finish()
+@@ -813,14 +849,14 @@ impl fmt::Debug for Punct {
+ #[derive(Clone)]
+ pub struct Ident {
+ inner: imp::Ident,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ impl Ident {
+ fn _new(inner: imp::Ident) -> Ident {
+ Ident {
+ inner,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+@@ -920,15 +956,15 @@ impl Hash for Ident {
+
+ /// Prints the identifier as a string that should be losslessly convertible back
+ /// into the same identifier.
+-impl fmt::Display for Ident {
++impl Display for Ident {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Display::fmt(&self.inner, f)
+ }
+ }
+
+-impl fmt::Debug for Ident {
++impl Debug for Ident {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+@@ -941,7 +977,7 @@ impl fmt::Debug for Ident {
+ #[derive(Clone)]
+ pub struct Literal {
+ inner: imp::Literal,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ macro_rules! suffixed_int_literals {
+@@ -988,14 +1024,14 @@ impl Literal {
+ fn _new(inner: imp::Literal) -> Literal {
+ Literal {
+ inner,
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+ fn _new_stable(inner: fallback::Literal) -> Literal {
+ Literal {
+ inner: inner.into(),
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+
+@@ -1140,26 +1176,25 @@ impl Literal {
+ }
+ }
+
+-impl fmt::Debug for Literal {
++impl Debug for Literal {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+-impl fmt::Display for Literal {
++impl Display for Literal {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Display::fmt(&self.inner, f)
+ }
+ }
+
+ /// Public implementation details for the `TokenStream` type, such as iterators.
+ pub mod token_stream {
+- use std::fmt;
+- use std::marker;
+- use std::rc::Rc;
++ use crate::marker::Marker;
++ use crate::{imp, TokenTree};
++ use std::fmt::{self, Debug};
+
+ pub use crate::TokenStream;
+- use crate::{imp, TokenTree};
+
+ /// An iterator over `TokenStream`'s `TokenTree`s.
+ ///
+@@ -1168,7 +1203,7 @@ pub mod token_stream {
+ #[derive(Clone)]
+ pub struct IntoIter {
+ inner: imp::TokenTreeIter,
+- _marker: marker::PhantomData<Rc<()>>,
++ _marker: Marker,
+ }
+
+ impl Iterator for IntoIter {
+@@ -1179,9 +1214,9 @@ pub mod token_stream {
+ }
+ }
+
+- impl fmt::Debug for IntoIter {
++ impl Debug for IntoIter {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.inner.fmt(f)
++ Debug::fmt(&self.inner, f)
+ }
+ }
+
+@@ -1192,7 +1227,7 @@ pub mod token_stream {
+ fn into_iter(self) -> IntoIter {
+ IntoIter {
+ inner: self.inner.into_iter(),
+- _marker: marker::PhantomData,
++ _marker: Marker,
+ }
+ }
+ }
+diff --git a/third_party/rust/proc-macro2/src/marker.rs b/third_party/rust/proc-macro2/src/marker.rs
+new file mode 100644
+index 0000000000..58729baf4a
+--- /dev/null
++++ mozilla-release/third_party/rust/proc-macro2/src/marker.rs
+@@ -0,0 +1,18 @@
++use std::marker::PhantomData;
++use std::panic::{RefUnwindSafe, UnwindSafe};
++use std::rc::Rc;
++
++// Zero sized marker with the correct set of autotrait impls we want all proc
++// macro types to have.
++pub(crate) type Marker = PhantomData<ProcMacroAutoTraits>;
++
++pub(crate) use self::value::*;
++
++mod value {
++ pub(crate) use std::marker::PhantomData as Marker;
++}
++
++pub(crate) struct ProcMacroAutoTraits(Rc<()>);
++
++impl UnwindSafe for ProcMacroAutoTraits {}
++impl RefUnwindSafe for ProcMacroAutoTraits {}
+diff --git a/third_party/rust/proc-macro2/src/parse.rs b/third_party/rust/proc-macro2/src/parse.rs
+new file mode 100644
+index 0000000000..365fe0484d
+--- /dev/null
++++ mozilla-release/third_party/rust/proc-macro2/src/parse.rs
+@@ -0,0 +1,849 @@
++use crate::fallback::{
++ is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream,
++};
++use crate::{Delimiter, Punct, Spacing, TokenTree};
++use std::char;
++use std::str::{Bytes, CharIndices, Chars};
++
++#[derive(Copy, Clone, Eq, PartialEq)]
++pub(crate) struct Cursor<'a> {
++ pub rest: &'a str,
++ #[cfg(span_locations)]
++ pub off: u32,
++}
++
++impl<'a> Cursor<'a> {
++ fn advance(&self, bytes: usize) -> Cursor<'a> {
++ let (_front, rest) = self.rest.split_at(bytes);
++ Cursor {
++ rest,
++ #[cfg(span_locations)]
++ off: self.off + _front.chars().count() as u32,
++ }
++ }
++
++ fn starts_with(&self, s: &str) -> bool {
++ self.rest.starts_with(s)
++ }
++
++ pub(crate) fn is_empty(&self) -> bool {
++ self.rest.is_empty()
++ }
++
++ fn len(&self) -> usize {
++ self.rest.len()
++ }
++
++ fn as_bytes(&self) -> &'a [u8] {
++ self.rest.as_bytes()
++ }
++
++ fn bytes(&self) -> Bytes<'a> {
++ self.rest.bytes()
++ }
++
++ fn chars(&self) -> Chars<'a> {
++ self.rest.chars()
++ }
++
++ fn char_indices(&self) -> CharIndices<'a> {
++ self.rest.char_indices()
++ }
++
++ fn parse(&self, tag: &str) -> Result<Cursor<'a>, LexError> {
++ if self.starts_with(tag) {
++ Ok(self.advance(tag.len()))
++ } else {
++ Err(LexError)
++ }
++ }
++}
++
++type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>;
++
++fn skip_whitespace(input: Cursor) -> Cursor {
++ let mut s = input;
++
++ while !s.is_empty() {
++ let byte = s.as_bytes()[0];
++ if byte == b'/' {
++ if s.starts_with("//")
++ && (!s.starts_with("///") || s.starts_with("////"))
++ && !s.starts_with("//!")
++ {
++ let (cursor, _) = take_until_newline_or_eof(s);
++ s = cursor;
++ continue;
++ } else if s.starts_with("/**/") {
++ s = s.advance(4);
++ continue;
++ } else if s.starts_with("/*")
++ && (!s.starts_with("/**") || s.starts_with("/***"))
++ && !s.starts_with("/*!")
++ {
++ match block_comment(s) {
++ Ok((rest, _)) => {
++ s = rest;
++ continue;
++ }
++ Err(LexError) => return s,
++ }
++ }
++ }
++ match byte {
++ b' ' | 0x09..=0x0d => {
++ s = s.advance(1);
++ continue;
++ }
++ b if b <= 0x7f => {}
++ _ => {
++ let ch = s.chars().next().unwrap();
++ if is_whitespace(ch) {
++ s = s.advance(ch.len_utf8());
++ continue;
++ }
++ }
++ }
++ return s;
++ }
++ s
++}
++
++fn block_comment(input: Cursor) -> PResult<&str> {
++ if !input.starts_with("/*") {
++ return Err(LexError);
++ }
++
++ let mut depth = 0;
++ let bytes = input.as_bytes();
++ let mut i = 0;
++ let upper = bytes.len() - 1;
++
++ while i < upper {
++ if bytes[i] == b'/' && bytes[i + 1] == b'*' {
++ depth += 1;
++ i += 1; // eat '*'
++ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' {
++ depth -= 1;
++ if depth == 0 {
++ return Ok((input.advance(i + 2), &input.rest[..i + 2]));
++ }
++ i += 1; // eat '/'
++ }
++ i += 1;
++ }
++
++ Err(LexError)
++}
++
++fn is_whitespace(ch: char) -> bool {
++ // Rust treats left-to-right mark and right-to-left mark as whitespace
++ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}'
++}
++
++fn word_break(input: Cursor) -> Result<Cursor, LexError> {
++ match input.chars().next() {
++ Some(ch) if is_ident_continue(ch) => Err(LexError),
++ Some(_) | None => Ok(input),
++ }
++}
++
++pub(crate) fn token_stream(mut input: Cursor) -> PResult<TokenStream> {
++ let mut trees = Vec::new();
++ let mut stack = Vec::new();
++
++ loop {
++ input = skip_whitespace(input);
++
++ if let Ok((rest, tt)) = doc_comment(input) {
++ trees.extend(tt);
++ input = rest;
++ continue;
++ }
++
++ #[cfg(span_locations)]
++ let lo = input.off;
++
++ let first = match input.bytes().next() {
++ Some(first) => first,
++ None => break,
++ };
++
++ if let Some(open_delimiter) = match first {
++ b'(' => Some(Delimiter::Parenthesis),
++ b'[' => Some(Delimiter::Bracket),
++ b'{' => Some(Delimiter::Brace),
++ _ => None,
++ } {
++ input = input.advance(1);
++ let frame = (open_delimiter, trees);
++ #[cfg(span_locations)]
++ let frame = (lo, frame);
++ stack.push(frame);
++ trees = Vec::new();
++ } else if let Some(close_delimiter) = match first {
++ b')' => Some(Delimiter::Parenthesis),
++ b']' => Some(Delimiter::Bracket),
++ b'}' => Some(Delimiter::Brace),
++ _ => None,
++ } {
++ input = input.advance(1);
++ let frame = stack.pop().ok_or(LexError)?;
++ #[cfg(span_locations)]
++ let (lo, frame) = frame;
++ let (open_delimiter, outer) = frame;
++ if open_delimiter != close_delimiter {
++ return Err(LexError);
++ }
++ let mut g = Group::new(open_delimiter, TokenStream { inner: trees });
++ g.set_span(Span {
++ #[cfg(span_locations)]
++ lo,
++ #[cfg(span_locations)]
++ hi: input.off,
++ });
++ trees = outer;
++ trees.push(TokenTree::Group(crate::Group::_new_stable(g)));
++ } else {
++ let (rest, mut tt) = leaf_token(input)?;
++ tt.set_span(crate::Span::_new_stable(Span {
++ #[cfg(span_locations)]
++ lo,
++ #[cfg(span_locations)]
++ hi: rest.off,
++ }));
++ trees.push(tt);
++ input = rest;
++ }
++ }
++
++ if stack.is_empty() {
++ Ok((input, TokenStream { inner: trees }))
++ } else {
++ Err(LexError)
++ }
++}
++
++fn leaf_token(input: Cursor) -> PResult<TokenTree> {
++ if let Ok((input, l)) = literal(input) {
++ // must be parsed before ident
++ Ok((input, TokenTree::Literal(crate::Literal::_new_stable(l))))
++ } else if let Ok((input, p)) = punct(input) {
++ Ok((input, TokenTree::Punct(p)))
++ } else if let Ok((input, i)) = ident(input) {
++ Ok((input, TokenTree::Ident(i)))
++ } else {
++ Err(LexError)
++ }
++}
++
++fn ident(input: Cursor) -> PResult<crate::Ident> {
++ if ["r\"", "r#\"", "r##", "b\"", "b\'", "br\"", "br#"]
++ .iter()
++ .any(|prefix| input.starts_with(prefix))
++ {
++ Err(LexError)
++ } else {
++ ident_any(input)
++ }
++}
++
++fn ident_any(input: Cursor) -> PResult<crate::Ident> {
++ let raw = input.starts_with("r#");
++ let rest = input.advance((raw as usize) << 1);
++
++ let (rest, sym) = ident_not_raw(rest)?;
++
++ if !raw {
++ let ident = crate::Ident::new(sym, crate::Span::call_site());
++ return Ok((rest, ident));
++ }
++
++ if sym == "_" {
++ return Err(LexError);
++ }
++
++ let ident = crate::Ident::_new_raw(sym, crate::Span::call_site());
++ Ok((rest, ident))
++}
++
++fn ident_not_raw(input: Cursor) -> PResult<&str> {
++ let mut chars = input.char_indices();
++
++ match chars.next() {
++ Some((_, ch)) if is_ident_start(ch) => {}
++ _ => return Err(LexError),
++ }
++
++ let mut end = input.len();
++ for (i, ch) in chars {
++ if !is_ident_continue(ch) {
++ end = i;
++ break;
++ }
++ }
++
++ Ok((input.advance(end), &input.rest[..end]))
++}
++
++fn literal(input: Cursor) -> PResult<Literal> {
++ match literal_nocapture(input) {
++ Ok(a) => {
++ let end = input.len() - a.len();
++ Ok((a, Literal::_new(input.rest[..end].to_string())))
++ }
++ Err(LexError) => Err(LexError),
++ }
++}
++
++fn literal_nocapture(input: Cursor) -> Result<Cursor, LexError> {
++ if let Ok(ok) = string(input) {
++ Ok(ok)
++ } else if let Ok(ok) = byte_string(input) {
++ Ok(ok)
++ } else if let Ok(ok) = byte(input) {
++ Ok(ok)
++ } else if let Ok(ok) = character(input) {
++ Ok(ok)
++ } else if let Ok(ok) = float(input) {
++ Ok(ok)
++ } else if let Ok(ok) = int(input) {
++ Ok(ok)
++ } else {
++ Err(LexError)
++ }
++}
++
++fn literal_suffix(input: Cursor) -> Cursor {
++ match ident_not_raw(input) {
++ Ok((input, _)) => input,
++ Err(LexError) => input,
++ }
++}
++
++fn string(input: Cursor) -> Result<Cursor, LexError> {
++ if let Ok(input) = input.parse("\"") {
++ cooked_string(input)
++ } else if let Ok(input) = input.parse("r") {
++ raw_string(input)
++ } else {
++ Err(LexError)
++ }
++}
++
++fn cooked_string(input: Cursor) -> Result<Cursor, LexError> {
++ let mut chars = input.char_indices().peekable();
++
++ while let Some((i, ch)) = chars.next() {
++ match ch {
++ '"' => {
++ let input = input.advance(i + 1);
++ return Ok(literal_suffix(input));
++ }
++ '\r' => match chars.next() {
++ Some((_, '\n')) => {}
++ _ => break,
++ },
++ '\\' => match chars.next() {
++ Some((_, 'x')) => {
++ if !backslash_x_char(&mut chars) {
++ break;
++ }
++ }
++ Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\'))
++ | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {}
++ Some((_, 'u')) => {
++ if !backslash_u(&mut chars) {
++ break;
++ }
++ }
++ Some((_, ch @ '\n')) | Some((_, ch @ '\r')) => {
++ let mut last = ch;
++ loop {
++ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') {
++ return Err(LexError);
++ }
++ match chars.peek() {
++ Some((_, ch)) if ch.is_whitespace() => {
++ last = *ch;
++ chars.next();
++ }
++ _ => break,
++ }
++ }
++ }
++ _ => break,
++ },
++ _ch => {}
++ }
++ }
++ Err(LexError)
++}
++
++fn byte_string(input: Cursor) -> Result<Cursor, LexError> {
++ if let Ok(input) = input.parse("b\"") {
++ cooked_byte_string(input)
++ } else if let Ok(input) = input.parse("br") {
++ raw_string(input)
++ } else {
++ Err(LexError)
++ }
++}
++
++fn cooked_byte_string(mut input: Cursor) -> Result<Cursor, LexError> {
++ let mut bytes = input.bytes().enumerate();
++ while let Some((offset, b)) = bytes.next() {
++ match b {
++ b'"' => {
++ let input = input.advance(offset + 1);
++ return Ok(literal_suffix(input));
++ }
++ b'\r' => match bytes.next() {
++ Some((_, b'\n')) => {}
++ _ => break,
++ },
++ b'\\' => match bytes.next() {
++ Some((_, b'x')) => {
++ if !backslash_x_byte(&mut bytes) {
++ break;
++ }
++ }
++ Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\'))
++ | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {}
++ Some((newline, b @ b'\n')) | Some((newline, b @ b'\r')) => {
++ let mut last = b as char;
++ let rest = input.advance(newline + 1);
++ let mut chars = rest.char_indices();
++ loop {
++ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') {
++ return Err(LexError);
++ }
++ match chars.next() {
++ Some((_, ch)) if ch.is_whitespace() => last = ch,
++ Some((offset, _)) => {
++ input = rest.advance(offset);
++ bytes = input.bytes().enumerate();
++ break;
++ }
++ None => return Err(LexError),
++ }
++ }
++ }
++ _ => break,
++ },
++ b if b < 0x80 => {}
++ _ => break,
++ }
++ }
++ Err(LexError)
++}
++
++fn raw_string(input: Cursor) -> Result<Cursor, LexError> {
++ let mut chars = input.char_indices();
++ let mut n = 0;
++ while let Some((i, ch)) = chars.next() {
++ match ch {
++ '"' => {
++ n = i;
++ break;
++ }
++ '#' => {}
++ _ => return Err(LexError),
++ }
++ }
++ while let Some((i, ch)) = chars.next() {
++ match ch {
++ '"' if input.rest[i + 1..].starts_with(&input.rest[..n]) => {
++ let rest = input.advance(i + 1 + n);
++ return Ok(literal_suffix(rest));
++ }
++ '\r' => match chars.next() {
++ Some((_, '\n')) => {}
++ _ => break,
++ },
++ _ => {}
++ }
++ }
++ Err(LexError)
++}
++
++fn byte(input: Cursor) -> Result<Cursor, LexError> {
++ let input = input.parse("b'")?;
++ let mut bytes = input.bytes().enumerate();
++ let ok = match bytes.next().map(|(_, b)| b) {
++ Some(b'\\') => match bytes.next().map(|(_, b)| b) {
++ Some(b'x') => backslash_x_byte(&mut bytes),
++ Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'')
++ | Some(b'"') => true,
++ _ => false,
++ },
++ b => b.is_some(),
++ };
++ if !ok {
++ return Err(LexError);
++ }
++ let (offset, _) = bytes.next().ok_or(LexError)?;
++ if !input.chars().as_str().is_char_boundary(offset) {
++ return Err(LexError);
++ }
++ let input = input.advance(offset).parse("'")?;
++ Ok(literal_suffix(input))
++}
++
++fn character(input: Cursor) -> Result<Cursor, LexError> {
++ let input = input.parse("'")?;
++ let mut chars = input.char_indices();
++ let ok = match chars.next().map(|(_, ch)| ch) {
++ Some('\\') => match chars.next().map(|(_, ch)| ch) {
++ Some('x') => backslash_x_char(&mut chars),
++ Some('u') => backslash_u(&mut chars),
++ Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => {
++ true
++ }
++ _ => false,
++ },
++ ch => ch.is_some(),
++ };
++ if !ok {
++ return Err(LexError);
++ }
++ let (idx, _) = chars.next().ok_or(LexError)?;
++ let input = input.advance(idx).parse("'")?;
++ Ok(literal_suffix(input))
++}
++
++macro_rules! next_ch {
++ ($chars:ident @ $pat:pat $(| $rest:pat)*) => {
++ match $chars.next() {
++ Some((_, ch)) => match ch {
++ $pat $(| $rest)* => ch,
++ _ => return false,
++ },
++ None => return false,
++ }
++ };
++}
++
++fn backslash_x_char<I>(chars: &mut I) -> bool
++where
++ I: Iterator<Item = (usize, char)>,
++{
++ next_ch!(chars @ '0'..='7');
++ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
++ true
++}
++
++fn backslash_x_byte<I>(chars: &mut I) -> bool
++where
++ I: Iterator<Item = (usize, u8)>,
++{
++ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
++ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
++ true
++}
++
++fn backslash_u<I>(chars: &mut I) -> bool
++where
++ I: Iterator<Item = (usize, char)>,
++{
++ next_ch!(chars @ '{');
++ let mut value = 0;
++ let mut len = 0;
++ while let Some((_, ch)) = chars.next() {
++ let digit = match ch {
++ '0'..='9' => ch as u8 - b'0',
++ 'a'..='f' => 10 + ch as u8 - b'a',
++ 'A'..='F' => 10 + ch as u8 - b'A',
++ '_' if len > 0 => continue,
++ '}' if len > 0 => return char::from_u32(value).is_some(),
++ _ => return false,
++ };
++ if len == 6 {
++ return false;
++ }
++ value *= 0x10;
++ value += u32::from(digit);
++ len += 1;
++ }
++ false
++}
++
++fn float(input: Cursor) -> Result<Cursor, LexError> {
++ let mut rest = float_digits(input)?;
++ if let Some(ch) = rest.chars().next() {
++ if is_ident_start(ch) {
++ rest = ident_not_raw(rest)?.0;
++ }
++ }
++ word_break(rest)
++}
++
++fn float_digits(input: Cursor) -> Result<Cursor, LexError> {
++ let mut chars = input.chars().peekable();
++ match chars.next() {
++ Some(ch) if ch >= '0' && ch <= '9' => {}
++ _ => return Err(LexError),
++ }
++
++ let mut len = 1;
++ let mut has_dot = false;
++ let mut has_exp = false;
++ while let Some(&ch) = chars.peek() {
++ match ch {
++ '0'..='9' | '_' => {
++ chars.next();
++ len += 1;
++ }
++ '.' => {
++ if has_dot {
++ break;
++ }
++ chars.next();
++ if chars
++ .peek()
++ .map(|&ch| ch == '.' || is_ident_start(ch))
++ .unwrap_or(false)
++ {
++ return Err(LexError);
++ }
++ len += 1;
++ has_dot = true;
++ }
++ 'e' | 'E' => {
++ chars.next();
++ len += 1;
++ has_exp = true;
++ break;
++ }
++ _ => break,
++ }
++ }
++
++ if !(has_dot || has_exp) {
++ return Err(LexError);
++ }
++
++ if has_exp {
++ let token_before_exp = if has_dot {
++ Ok(input.advance(len - 1))
++ } else {
++ Err(LexError)
++ };
++ let mut has_sign = false;
++ let mut has_exp_value = false;
++ while let Some(&ch) = chars.peek() {
++ match ch {
++ '+' | '-' => {
++ if has_exp_value {
++ break;
++ }
++ if has_sign {
++ return token_before_exp;
++ }
++ chars.next();
++ len += 1;
++ has_sign = true;
++ }
++ '0'..='9' => {
++ chars.next();
++ len += 1;
++ has_exp_value = true;
++ }
++ '_' => {
++ chars.next();
++ len += 1;
++ }
++ _ => break,
++ }
++ }
++ if !has_exp_value {
++ return token_before_exp;
++ }
++ }
++
++ Ok(input.advance(len))
++}
++
++fn int(input: Cursor) -> Result<Cursor, LexError> {
++ let mut rest = digits(input)?;
++ if let Some(ch) = rest.chars().next() {
++ if is_ident_start(ch) {
++ rest = ident_not_raw(rest)?.0;
++ }
++ }
++ word_break(rest)
++}
++
++fn digits(mut input: Cursor) -> Result<Cursor, LexError> {
++ let base = if input.starts_with("0x") {
++ input = input.advance(2);
++ 16
++ } else if input.starts_with("0o") {
++ input = input.advance(2);
++ 8
++ } else if input.starts_with("0b") {
++ input = input.advance(2);
++ 2
++ } else {
++ 10
++ };
++
++ let mut len = 0;
++ let mut empty = true;
++ for b in input.bytes() {
++ match b {
++ b'0'..=b'9' => {
++ let digit = (b - b'0') as u64;
++ if digit >= base {
++ return Err(LexError);
++ }
++ }
++ b'a'..=b'f' => {
++ let digit = 10 + (b - b'a') as u64;
++ if digit >= base {
++ break;
++ }
++ }
++ b'A'..=b'F' => {
++ let digit = 10 + (b - b'A') as u64;
++ if digit >= base {
++ break;
++ }
++ }
++ b'_' => {
++ if empty && base == 10 {
++ return Err(LexError);
++ }
++ len += 1;
++ continue;
++ }
++ _ => break,
++ };
++ len += 1;
++ empty = false;
++ }
++ if empty {
++ Err(LexError)
++ } else {
++ Ok(input.advance(len))
++ }
++}
++
++fn punct(input: Cursor) -> PResult<Punct> {
++ match punct_char(input) {
++ Ok((rest, '\'')) => {
++ if ident_any(rest)?.0.starts_with("'") {
++ Err(LexError)
++ } else {
++ Ok((rest, Punct::new('\'', Spacing::Joint)))
++ }
++ }
++ Ok((rest, ch)) => {
++ let kind = match punct_char(rest) {
++ Ok(_) => Spacing::Joint,
++ Err(LexError) => Spacing::Alone,
++ };
++ Ok((rest, Punct::new(ch, kind)))
++ }
++ Err(LexError) => Err(LexError),
++ }
++}
++
++fn punct_char(input: Cursor) -> PResult<char> {
++ if input.starts_with("//") || input.starts_with("/*") {
++ // Do not accept `/` of a comment as a punct.
++ return Err(LexError);
++ }
++
++ let mut chars = input.chars();
++ let first = match chars.next() {
++ Some(ch) => ch,
++ None => {
++ return Err(LexError);
++ }
++ };
++ let recognized = "~!@#$%^&*-=+|;:,<.>/?'";
++ if recognized.contains(first) {
++ Ok((input.advance(first.len_utf8()), first))
++ } else {
++ Err(LexError)
++ }
++}
++
++fn doc_comment(input: Cursor) -> PResult<Vec<TokenTree>> {
++ #[cfg(span_locations)]
++ let lo = input.off;
++ let (rest, (comment, inner)) = doc_comment_contents(input)?;
++ let span = crate::Span::_new_stable(Span {
++ #[cfg(span_locations)]
++ lo,
++ #[cfg(span_locations)]
++ hi: rest.off,
++ });
++
++ let mut scan_for_bare_cr = comment;
++ while let Some(cr) = scan_for_bare_cr.find('\r') {
++ let rest = &scan_for_bare_cr[cr + 1..];
++ if !rest.starts_with('\n') {
++ return Err(LexError);
++ }
++ scan_for_bare_cr = rest;
++ }
++
++ let mut trees = Vec::new();
++ trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone)));
++ if inner {
++ trees.push(Punct::new('!', Spacing::Alone).into());
++ }
++ let mut stream = vec![
++ TokenTree::Ident(crate::Ident::new("doc", span)),
++ TokenTree::Punct(Punct::new('=', Spacing::Alone)),
++ TokenTree::Literal(crate::Literal::string(comment)),
++ ];
++ for tt in stream.iter_mut() {
++ tt.set_span(span);
++ }
++ let group = Group::new(Delimiter::Bracket, stream.into_iter().collect());
++ trees.push(crate::Group::_new_stable(group).into());
++ for tt in trees.iter_mut() {
++ tt.set_span(span);
++ }
++ Ok((rest, trees))
++}
++
++fn doc_comment_contents(input: Cursor) -> PResult<(&str, bool)> {
++ if input.starts_with("//!") {
++ let input = input.advance(3);
++ let (input, s) = take_until_newline_or_eof(input);
++ Ok((input, (s, true)))
++ } else if input.starts_with("/*!") {
++ let (input, s) = block_comment(input)?;
++ Ok((input, (&s[3..s.len() - 2], true)))
++ } else if input.starts_with("///") {
++ let input = input.advance(3);
++ if input.starts_with("/") {
++ return Err(LexError);
++ }
++ let (input, s) = take_until_newline_or_eof(input);
++ Ok((input, (s, false)))
++ } else if input.starts_with("/**") && !input.rest[3..].starts_with('*') {
++ let (input, s) = block_comment(input)?;
++ Ok((input, (&s[3..s.len() - 2], false)))
++ } else {
++ Err(LexError)
++ }
++}
++
++fn take_until_newline_or_eof(input: Cursor) -> (Cursor, &str) {
++ let chars = input.char_indices();
++
++ for (i, ch) in chars {
++ if ch == '\n' {
++ return (input.advance(i), &input.rest[..i]);
++ } else if ch == '\r' && input.rest[i + 1..].starts_with('\n') {
++ return (input.advance(i + 1), &input.rest[..i]);
++ }
++ }
++
++ (input.advance(input.len()), input.rest)
++}
+diff --git a/third_party/rust/proc-macro2/src/strnom.rs b/third_party/rust/proc-macro2/src/strnom.rs
+deleted file mode 100644
+index eb7d0b8a8e..0000000000
+--- mozilla-release/third_party/rust/proc-macro2/src/strnom.rs
++++ mozilla-release//dev/null
+@@ -1,391 +0,0 @@
+-//! Adapted from [`nom`](https://github.com/Geal/nom).
+-
+-use crate::fallback::LexError;
+-use std::str::{Bytes, CharIndices, Chars};
+-use unicode_xid::UnicodeXID;
+-
+-#[derive(Copy, Clone, Eq, PartialEq)]
+-pub struct Cursor<'a> {
+- pub rest: &'a str,
+- #[cfg(span_locations)]
+- pub off: u32,
+-}
+-
+-impl<'a> Cursor<'a> {
+- #[cfg(not(span_locations))]
+- pub fn advance(&self, amt: usize) -> Cursor<'a> {
+- Cursor {
+- rest: &self.rest[amt..],
+- }
+- }
+- #[cfg(span_locations)]
+- pub fn advance(&self, amt: usize) -> Cursor<'a> {
+- Cursor {
+- rest: &self.rest[amt..],
+- off: self.off + (amt as u32),
+- }
+- }
+-
+- pub fn find(&self, p: char) -> Option<usize> {
+- self.rest.find(p)
+- }
+-
+- pub fn starts_with(&self, s: &str) -> bool {
+- self.rest.starts_with(s)
+- }
+-
+- pub fn is_empty(&self) -> bool {
+- self.rest.is_empty()
+- }
+-
+- pub fn len(&self) -> usize {
+- self.rest.len()
+- }
+-
+- pub fn as_bytes(&self) -> &'a [u8] {
+- self.rest.as_bytes()
+- }
+-
+- pub fn bytes(&self) -> Bytes<'a> {
+- self.rest.bytes()
+- }
+-
+- pub fn chars(&self) -> Chars<'a> {
+- self.rest.chars()
+- }
+-
+- pub fn char_indices(&self) -> CharIndices<'a> {
+- self.rest.char_indices()
+- }
+-}
+-
+-pub type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>;
+-
+-pub fn whitespace(input: Cursor) -> PResult<()> {
+- if input.is_empty() {
+- return Err(LexError);
+- }
+-
+- let bytes = input.as_bytes();
+- let mut i = 0;
+- while i < bytes.len() {
+- let s = input.advance(i);
+- if bytes[i] == b'/' {
+- if s.starts_with("//")
+- && (!s.starts_with("///") || s.starts_with("////"))
+- && !s.starts_with("//!")
+- {
+- if let Some(len) = s.find('\n') {
+- i += len + 1;
+- continue;
+- }
+- break;
+- } else if s.starts_with("/**/") {
+- i += 4;
+- continue;
+- } else if s.starts_with("/*")
+- && (!s.starts_with("/**") || s.starts_with("/***"))
+- && !s.starts_with("/*!")
+- {
+- let (_, com) = block_comment(s)?;
+- i += com.len();
+- continue;
+- }
+- }
+- match bytes[i] {
+- b' ' | 0x09..=0x0d => {
+- i += 1;
+- continue;
+- }
+- b if b <= 0x7f => {}
+- _ => {
+- let ch = s.chars().next().unwrap();
+- if is_whitespace(ch) {
+- i += ch.len_utf8();
+- continue;
+- }
+- }
+- }
+- return if i > 0 { Ok((s, ())) } else { Err(LexError) };
+- }
+- Ok((input.advance(input.len()), ()))
+-}
+-
+-pub fn block_comment(input: Cursor) -> PResult<&str> {
+- if !input.starts_with("/*") {
+- return Err(LexError);
+- }
+-
+- let mut depth = 0;
+- let bytes = input.as_bytes();
+- let mut i = 0;
+- let upper = bytes.len() - 1;
+- while i < upper {
+- if bytes[i] == b'/' && bytes[i + 1] == b'*' {
+- depth += 1;
+- i += 1; // eat '*'
+- } else if bytes[i] == b'*' && bytes[i + 1] == b'/' {
+- depth -= 1;
+- if depth == 0 {
+- return Ok((input.advance(i + 2), &input.rest[..i + 2]));
+- }
+- i += 1; // eat '/'
+- }
+- i += 1;
+- }
+- Err(LexError)
+-}
+-
+-pub fn skip_whitespace(input: Cursor) -> Cursor {
+- match whitespace(input) {
+- Ok((rest, _)) => rest,
+- Err(LexError) => input,
+- }
+-}
+-
+-fn is_whitespace(ch: char) -> bool {
+- // Rust treats left-to-right mark and right-to-left mark as whitespace
+- ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}'
+-}
+-
+-pub fn word_break(input: Cursor) -> PResult<()> {
+- match input.chars().next() {
+- Some(ch) if UnicodeXID::is_xid_continue(ch) => Err(LexError),
+- Some(_) | None => Ok((input, ())),
+- }
+-}
+-
+-macro_rules! named {
+- ($name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => {
+- fn $name<'a>(i: Cursor<'a>) -> $crate::strnom::PResult<'a, $o> {
+- $submac!(i, $($args)*)
+- }
+- };
+-}
+-
+-macro_rules! alt {
+- ($i:expr, $e:ident | $($rest:tt)*) => {
+- alt!($i, call!($e) | $($rest)*)
+- };
+-
+- ($i:expr, $subrule:ident!( $($args:tt)*) | $($rest:tt)*) => {
+- match $subrule!($i, $($args)*) {
+- res @ Ok(_) => res,
+- _ => alt!($i, $($rest)*)
+- }
+- };
+-
+- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => {
+- match $subrule!($i, $($args)*) {
+- Ok((i, o)) => Ok((i, $gen(o))),
+- Err(LexError) => alt!($i, $($rest)*)
+- }
+- };
+-
+- ($i:expr, $e:ident => { $gen:expr } | $($rest:tt)*) => {
+- alt!($i, call!($e) => { $gen } | $($rest)*)
+- };
+-
+- ($i:expr, $e:ident => { $gen:expr }) => {
+- alt!($i, call!($e) => { $gen })
+- };
+-
+- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => {
+- match $subrule!($i, $($args)*) {
+- Ok((i, o)) => Ok((i, $gen(o))),
+- Err(LexError) => Err(LexError),
+- }
+- };
+-
+- ($i:expr, $e:ident) => {
+- alt!($i, call!($e))
+- };
+-
+- ($i:expr, $subrule:ident!( $($args:tt)*)) => {
+- $subrule!($i, $($args)*)
+- };
+-}
+-
+-macro_rules! do_parse {
+- ($i:expr, ( $($rest:expr),* )) => {
+- Ok(($i, ( $($rest),* )))
+- };
+-
+- ($i:expr, $e:ident >> $($rest:tt)*) => {
+- do_parse!($i, call!($e) >> $($rest)*)
+- };
+-
+- ($i:expr, $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, _)) => do_parse!(i, $($rest)*),
+- }
+- };
+-
+- ($i:expr, $field:ident : $e:ident >> $($rest:tt)*) => {
+- do_parse!($i, $field: call!($e) >> $($rest)*)
+- };
+-
+- ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, o)) => {
+- let $field = o;
+- do_parse!(i, $($rest)*)
+- },
+- }
+- };
+-}
+-
+-macro_rules! peek {
+- ($i:expr, $submac:ident!( $($args:tt)* )) => {
+- match $submac!($i, $($args)*) {
+- Ok((_, o)) => Ok(($i, o)),
+- Err(LexError) => Err(LexError),
+- }
+- };
+-}
+-
+-macro_rules! call {
+- ($i:expr, $fun:expr $(, $args:expr)*) => {
+- $fun($i $(, $args)*)
+- };
+-}
+-
+-macro_rules! option {
+- ($i:expr, $f:expr) => {
+- match $f($i) {
+- Ok((i, o)) => Ok((i, Some(o))),
+- Err(LexError) => Ok(($i, None)),
+- }
+- };
+-}
+-
+-macro_rules! take_until_newline_or_eof {
+- ($i:expr,) => {{
+- if $i.len() == 0 {
+- Ok(($i, ""))
+- } else {
+- match $i.find('\n') {
+- Some(i) => Ok(($i.advance(i), &$i.rest[..i])),
+- None => Ok(($i.advance($i.len()), &$i.rest[..$i.len()])),
+- }
+- }
+- }};
+-}
+-
+-macro_rules! tuple {
+- ($i:expr, $($rest:tt)*) => {
+- tuple_parser!($i, (), $($rest)*)
+- };
+-}
+-
+-/// Do not use directly. Use `tuple!`.
+-macro_rules! tuple_parser {
+- ($i:expr, ($($parsed:tt),*), $e:ident, $($rest:tt)*) => {
+- tuple_parser!($i, ($($parsed),*), call!($e), $($rest)*)
+- };
+-
+- ($i:expr, (), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, o)) => tuple_parser!(i, (o), $($rest)*),
+- }
+- };
+-
+- ($i:expr, ($($parsed:tt)*), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, o)) => tuple_parser!(i, ($($parsed)* , o), $($rest)*),
+- }
+- };
+-
+- ($i:expr, ($($parsed:tt),*), $e:ident) => {
+- tuple_parser!($i, ($($parsed),*), call!($e))
+- };
+-
+- ($i:expr, (), $submac:ident!( $($args:tt)* )) => {
+- $submac!($i, $($args)*)
+- };
+-
+- ($i:expr, ($($parsed:expr),*), $submac:ident!( $($args:tt)* )) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, o)) => Ok((i, ($($parsed),*, o)))
+- }
+- };
+-
+- ($i:expr, ($($parsed:expr),*)) => {
+- Ok(($i, ($($parsed),*)))
+- };
+-}
+-
+-macro_rules! not {
+- ($i:expr, $submac:ident!( $($args:tt)* )) => {
+- match $submac!($i, $($args)*) {
+- Ok((_, _)) => Err(LexError),
+- Err(LexError) => Ok(($i, ())),
+- }
+- };
+-}
+-
+-macro_rules! tag {
+- ($i:expr, $tag:expr) => {
+- if $i.starts_with($tag) {
+- Ok(($i.advance($tag.len()), &$i.rest[..$tag.len()]))
+- } else {
+- Err(LexError)
+- }
+- };
+-}
+-
+-macro_rules! punct {
+- ($i:expr, $punct:expr) => {
+- $crate::strnom::punct($i, $punct)
+- };
+-}
+-
+-/// Do not use directly. Use `punct!`.
+-pub fn punct<'a>(input: Cursor<'a>, token: &'static str) -> PResult<'a, &'a str> {
+- let input = skip_whitespace(input);
+- if input.starts_with(token) {
+- Ok((input.advance(token.len()), token))
+- } else {
+- Err(LexError)
+- }
+-}
+-
+-macro_rules! preceded {
+- ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => {
+- match tuple!($i, $submac!($($args)*), $submac2!($($args2)*)) {
+- Ok((remaining, (_, o))) => Ok((remaining, o)),
+- Err(LexError) => Err(LexError),
+- }
+- };
+-
+- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => {
+- preceded!($i, $submac!($($args)*), call!($g))
+- };
+-}
+-
+-macro_rules! delimited {
+- ($i:expr, $submac:ident!( $($args:tt)* ), $($rest:tt)+) => {
+- match tuple_parser!($i, (), $submac!($($args)*), $($rest)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i1, (_, o, _))) => Ok((i1, o))
+- }
+- };
+-}
+-
+-macro_rules! map {
+- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => {
+- match $submac!($i, $($args)*) {
+- Err(LexError) => Err(LexError),
+- Ok((i, o)) => Ok((i, call!(o, $g)))
+- }
+- };
+-
+- ($i:expr, $f:expr, $g:expr) => {
+- map!($i, call!($f), $g)
+- };
+-}
+diff --git a/third_party/rust/proc-macro2/src/wrapper.rs b/third_party/rust/proc-macro2/src/wrapper.rs
+index 552b9381cf..3df044af17 100644
+--- mozilla-release/third_party/rust/proc-macro2/src/wrapper.rs
++++ mozilla-release/third_party/rust/proc-macro2/src/wrapper.rs
+@@ -1,15 +1,15 @@
+-use std::fmt;
+-use std::iter;
++use crate::detection::inside_proc_macro;
++use crate::{fallback, Delimiter, Punct, Spacing, TokenTree};
++use std::fmt::{self, Debug, Display};
++use std::iter::FromIterator;
+ use std::ops::RangeBounds;
+-use std::panic::{self, PanicInfo};
++use std::panic;
+ #[cfg(super_unstable)]
+ use std::path::PathBuf;
+ use std::str::FromStr;
+
+-use crate::{fallback, Delimiter, Punct, Spacing, TokenTree};
+-
+ #[derive(Clone)]
+-pub enum TokenStream {
++pub(crate) enum TokenStream {
+ Compiler(DeferredTokenStream),
+ Fallback(fallback::TokenStream),
+ }
+@@ -19,73 +19,16 @@ pub enum TokenStream {
+ // we hold on to the appended tokens and do proc_macro::TokenStream::extend as
+ // late as possible to batch together consecutive uses of the Extend impl.
+ #[derive(Clone)]
+-pub struct DeferredTokenStream {
++pub(crate) struct DeferredTokenStream {
+ stream: proc_macro::TokenStream,
+ extra: Vec<proc_macro::TokenTree>,
+ }
+
+-pub enum LexError {
++pub(crate) enum LexError {
+ Compiler(proc_macro::LexError),
+ Fallback(fallback::LexError),
+ }
+
+-fn nightly_works() -> bool {
+- use std::sync::atomic::*;
+- use std::sync::Once;
+-
+- static WORKS: AtomicUsize = AtomicUsize::new(0);
+- static INIT: Once = Once::new();
+-
+- match WORKS.load(Ordering::SeqCst) {
+- 1 => return false,
+- 2 => return true,
+- _ => {}
+- }
+-
+- // Swap in a null panic hook to avoid printing "thread panicked" to stderr,
+- // then use catch_unwind to determine whether the compiler's proc_macro is
+- // working. When proc-macro2 is used from outside of a procedural macro all
+- // of the proc_macro crate's APIs currently panic.
+- //
+- // The Once is to prevent the possibility of this ordering:
+- //
+- // thread 1 calls take_hook, gets the user's original hook
+- // thread 1 calls set_hook with the null hook
+- // thread 2 calls take_hook, thinks null hook is the original hook
+- // thread 2 calls set_hook with the null hook
+- // thread 1 calls set_hook with the actual original hook
+- // thread 2 calls set_hook with what it thinks is the original hook
+- //
+- // in which the user's hook has been lost.
+- //
+- // There is still a race condition where a panic in a different thread can
+- // happen during the interval that the user's original panic hook is
+- // unregistered such that their hook is incorrectly not called. This is
+- // sufficiently unlikely and less bad than printing panic messages to stderr
+- // on correct use of this crate. Maybe there is a libstd feature request
+- // here. For now, if a user needs to guarantee that this failure mode does
+- // not occur, they need to call e.g. `proc_macro2::Span::call_site()` from
+- // the main thread before launching any other threads.
+- INIT.call_once(|| {
+- type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static;
+-
+- let null_hook: Box<PanicHook> = Box::new(|_panic_info| { /* ignore */ });
+- let sanity_check = &*null_hook as *const PanicHook;
+- let original_hook = panic::take_hook();
+- panic::set_hook(null_hook);
+-
+- let works = panic::catch_unwind(|| proc_macro::Span::call_site()).is_ok();
+- WORKS.store(works as usize + 1, Ordering::SeqCst);
+-
+- let hopefully_null_hook = panic::take_hook();
+- panic::set_hook(original_hook);
+- if sanity_check != &*hopefully_null_hook {
+- panic!("observed race condition in proc_macro2::nightly_works");
+- }
+- });
+- nightly_works()
+-}
+-
+ fn mismatch() -> ! {
+ panic!("stable/nightly mismatch")
+ }
+@@ -103,7 +46,12 @@ impl DeferredTokenStream {
+ }
+
+ fn evaluate_now(&mut self) {
+- self.stream.extend(self.extra.drain(..));
++ // If-check provides a fast short circuit for the common case of `extra`
++ // being empty, which saves a round trip over the proc macro bridge.
++ // Improves macro expansion time in winrt by 6% in debug mode.
++ if !self.extra.is_empty() {
++ self.stream.extend(self.extra.drain(..));
++ }
+ }
+
+ fn into_token_stream(mut self) -> proc_macro::TokenStream {
+@@ -114,7 +62,7 @@ impl DeferredTokenStream {
+
+ impl TokenStream {
+ pub fn new() -> TokenStream {
+- if nightly_works() {
++ if inside_proc_macro() {
+ TokenStream::Compiler(DeferredTokenStream::new(proc_macro::TokenStream::new()))
+ } else {
+ TokenStream::Fallback(fallback::TokenStream::new())
+@@ -147,9 +95,9 @@ impl FromStr for TokenStream {
+ type Err = LexError;
+
+ fn from_str(src: &str) -> Result<TokenStream, LexError> {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Ok(TokenStream::Compiler(DeferredTokenStream::new(
+- src.parse()?,
++ proc_macro_parse(src)?,
+ )))
+ } else {
+ Ok(TokenStream::Fallback(src.parse()?))
+@@ -157,11 +105,17 @@ impl FromStr for TokenStream {
+ }
+ }
+
+-impl fmt::Display for TokenStream {
++// Work around https://github.com/rust-lang/rust/issues/58736.
++fn proc_macro_parse(src: &str) -> Result<proc_macro::TokenStream, LexError> {
++ panic::catch_unwind(|| src.parse().map_err(LexError::Compiler))
++ .unwrap_or(Err(LexError::Fallback(fallback::LexError)))
++}
++
++impl Display for TokenStream {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f),
+- TokenStream::Fallback(tts) => tts.fmt(f),
++ TokenStream::Compiler(tts) => Display::fmt(&tts.clone().into_token_stream(), f),
++ TokenStream::Fallback(tts) => Display::fmt(tts, f),
+ }
+ }
+ }
+@@ -187,7 +141,7 @@ impl From<fallback::TokenStream> for TokenStream {
+ }
+ }
+
+-// Assumes nightly_works().
++// Assumes inside_proc_macro().
+ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree {
+ match token {
+ TokenTree::Group(tt) => tt.inner.unwrap_nightly().into(),
+@@ -196,9 +150,9 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree {
+ Spacing::Joint => proc_macro::Spacing::Joint,
+ Spacing::Alone => proc_macro::Spacing::Alone,
+ };
+- let mut op = proc_macro::Punct::new(tt.as_char(), spacing);
+- op.set_span(tt.span().inner.unwrap_nightly());
+- op.into()
++ let mut punct = proc_macro::Punct::new(tt.as_char(), spacing);
++ punct.set_span(tt.span().inner.unwrap_nightly());
++ punct.into()
+ }
+ TokenTree::Ident(tt) => tt.inner.unwrap_nightly().into(),
+ TokenTree::Literal(tt) => tt.inner.unwrap_nightly().into(),
+@@ -207,7 +161,7 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree {
+
+ impl From<TokenTree> for TokenStream {
+ fn from(token: TokenTree) -> TokenStream {
+- if nightly_works() {
++ if inside_proc_macro() {
+ TokenStream::Compiler(DeferredTokenStream::new(into_compiler_token(token).into()))
+ } else {
+ TokenStream::Fallback(token.into())
+@@ -215,9 +169,9 @@ impl From<TokenTree> for TokenStream {
+ }
+ }
+
+-impl iter::FromIterator<TokenTree> for TokenStream {
++impl FromIterator<TokenTree> for TokenStream {
+ fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self {
+- if nightly_works() {
++ if inside_proc_macro() {
+ TokenStream::Compiler(DeferredTokenStream::new(
+ trees.into_iter().map(into_compiler_token).collect(),
+ ))
+@@ -227,7 +181,7 @@ impl iter::FromIterator<TokenTree> for TokenStream {
+ }
+ }
+
+-impl iter::FromIterator<TokenStream> for TokenStream {
++impl FromIterator<TokenStream> for TokenStream {
+ fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self {
+ let mut streams = streams.into_iter();
+ match streams.next() {
+@@ -252,14 +206,15 @@ impl iter::FromIterator<TokenStream> for TokenStream {
+ }
+
+ impl Extend<TokenTree> for TokenStream {
+- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) {
++ fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, stream: I) {
+ match self {
+ TokenStream::Compiler(tts) => {
+ // Here is the reason for DeferredTokenStream.
+- tts.extra
+- .extend(streams.into_iter().map(into_compiler_token));
++ for token in stream {
++ tts.extra.push(into_compiler_token(token));
++ }
+ }
+- TokenStream::Fallback(tts) => tts.extend(streams),
++ TokenStream::Fallback(tts) => tts.extend(stream),
+ }
+ }
+ }
+@@ -270,20 +225,20 @@ impl Extend<TokenStream> for TokenStream {
+ TokenStream::Compiler(tts) => {
+ tts.evaluate_now();
+ tts.stream
+- .extend(streams.into_iter().map(|stream| stream.unwrap_nightly()));
++ .extend(streams.into_iter().map(TokenStream::unwrap_nightly));
+ }
+ TokenStream::Fallback(tts) => {
+- tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable()));
++ tts.extend(streams.into_iter().map(TokenStream::unwrap_stable));
+ }
+ }
+ }
+ }
+
+-impl fmt::Debug for TokenStream {
++impl Debug for TokenStream {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f),
+- TokenStream::Fallback(tts) => tts.fmt(f),
++ TokenStream::Compiler(tts) => Debug::fmt(&tts.clone().into_token_stream(), f),
++ TokenStream::Fallback(tts) => Debug::fmt(tts, f),
+ }
+ }
+ }
+@@ -300,17 +255,29 @@ impl From<fallback::LexError> for LexError {
+ }
+ }
+
+-impl fmt::Debug for LexError {
++impl Debug for LexError {
++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ LexError::Compiler(e) => Debug::fmt(e, f),
++ LexError::Fallback(e) => Debug::fmt(e, f),
++ }
++ }
++}
++
++impl Display for LexError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- LexError::Compiler(e) => e.fmt(f),
+- LexError::Fallback(e) => e.fmt(f),
++ #[cfg(lexerror_display)]
++ LexError::Compiler(e) => Display::fmt(e, f),
++ #[cfg(not(lexerror_display))]
++ LexError::Compiler(_e) => Display::fmt(&fallback::LexError, f),
++ LexError::Fallback(e) => Display::fmt(e, f),
+ }
+ }
+ }
+
+ #[derive(Clone)]
+-pub enum TokenTreeIter {
++pub(crate) enum TokenTreeIter {
+ Compiler(proc_macro::token_stream::IntoIter),
+ Fallback(fallback::TokenTreeIter),
+ }
+@@ -361,7 +328,7 @@ impl Iterator for TokenTreeIter {
+ }
+ }
+
+-impl fmt::Debug for TokenTreeIter {
++impl Debug for TokenTreeIter {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ f.debug_struct("TokenTreeIter").finish()
+ }
+@@ -369,7 +336,7 @@ impl fmt::Debug for TokenTreeIter {
+
+ #[derive(Clone, PartialEq, Eq)]
+ #[cfg(super_unstable)]
+-pub enum SourceFile {
++pub(crate) enum SourceFile {
+ Compiler(proc_macro::SourceFile),
+ Fallback(fallback::SourceFile),
+ }
+@@ -397,58 +364,77 @@ impl SourceFile {
+ }
+
+ #[cfg(super_unstable)]
+-impl fmt::Debug for SourceFile {
++impl Debug for SourceFile {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- SourceFile::Compiler(a) => a.fmt(f),
+- SourceFile::Fallback(a) => a.fmt(f),
++ SourceFile::Compiler(a) => Debug::fmt(a, f),
++ SourceFile::Fallback(a) => Debug::fmt(a, f),
+ }
+ }
+ }
+
+ #[cfg(any(super_unstable, feature = "span-locations"))]
+-pub struct LineColumn {
++pub(crate) struct LineColumn {
+ pub line: usize,
+ pub column: usize,
+ }
+
+ #[derive(Copy, Clone)]
+-pub enum Span {
++pub(crate) enum Span {
+ Compiler(proc_macro::Span),
+ Fallback(fallback::Span),
+ }
+
+ impl Span {
+ pub fn call_site() -> Span {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Span::Compiler(proc_macro::Span::call_site())
+ } else {
+ Span::Fallback(fallback::Span::call_site())
+ }
+ }
+
++ #[cfg(hygiene)]
++ pub fn mixed_site() -> Span {
++ if inside_proc_macro() {
++ Span::Compiler(proc_macro::Span::mixed_site())
++ } else {
++ Span::Fallback(fallback::Span::mixed_site())
++ }
++ }
++
+ #[cfg(super_unstable)]
+ pub fn def_site() -> Span {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Span::Compiler(proc_macro::Span::def_site())
+ } else {
+ Span::Fallback(fallback::Span::def_site())
+ }
+ }
+
+- #[cfg(super_unstable)]
+ pub fn resolved_at(&self, other: Span) -> Span {
+ match (self, other) {
++ #[cfg(hygiene)]
+ (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.resolved_at(b)),
++
++ // Name resolution affects semantics, but location is only cosmetic
++ #[cfg(not(hygiene))]
++ (Span::Compiler(_), Span::Compiler(_)) => other,
++
+ (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.resolved_at(b)),
+ _ => mismatch(),
+ }
+ }
+
+- #[cfg(super_unstable)]
+ pub fn located_at(&self, other: Span) -> Span {
+ match (self, other) {
++ #[cfg(hygiene)]
+ (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.located_at(b)),
++
++ // Name resolution affects semantics, but location is only cosmetic
++ #[cfg(not(hygiene))]
++ (Span::Compiler(_), Span::Compiler(_)) => *self,
++
+ (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.located_at(b)),
+ _ => mismatch(),
+ }
+@@ -542,16 +528,16 @@ impl From<fallback::Span> for Span {
+ }
+ }
+
+-impl fmt::Debug for Span {
++impl Debug for Span {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Span::Compiler(s) => s.fmt(f),
+- Span::Fallback(s) => s.fmt(f),
++ Span::Compiler(s) => Debug::fmt(s, f),
++ Span::Fallback(s) => Debug::fmt(s, f),
+ }
+ }
+ }
+
+-pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
++pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) {
+ match span {
+ Span::Compiler(s) => {
+ debug.field("span", &s);
+@@ -561,7 +547,7 @@ pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span)
+ }
+
+ #[derive(Clone)]
+-pub enum Group {
++pub(crate) enum Group {
+ Compiler(proc_macro::Group),
+ Fallback(fallback::Group),
+ }
+@@ -652,26 +638,26 @@ impl From<fallback::Group> for Group {
+ }
+ }
+
+-impl fmt::Display for Group {
++impl Display for Group {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Group::Compiler(group) => group.fmt(formatter),
+- Group::Fallback(group) => group.fmt(formatter),
++ Group::Compiler(group) => Display::fmt(group, formatter),
++ Group::Fallback(group) => Display::fmt(group, formatter),
+ }
+ }
+ }
+
+-impl fmt::Debug for Group {
++impl Debug for Group {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Group::Compiler(group) => group.fmt(formatter),
+- Group::Fallback(group) => group.fmt(formatter),
++ Group::Compiler(group) => Debug::fmt(group, formatter),
++ Group::Fallback(group) => Debug::fmt(group, formatter),
+ }
+ }
+ }
+
+ #[derive(Clone)]
+-pub enum Ident {
++pub(crate) enum Ident {
+ Compiler(proc_macro::Ident),
+ Fallback(fallback::Ident),
+ }
+@@ -747,26 +733,26 @@ where
+ }
+ }
+
+-impl fmt::Display for Ident {
++impl Display for Ident {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Ident::Compiler(t) => t.fmt(f),
+- Ident::Fallback(t) => t.fmt(f),
++ Ident::Compiler(t) => Display::fmt(t, f),
++ Ident::Fallback(t) => Display::fmt(t, f),
+ }
+ }
+ }
+
+-impl fmt::Debug for Ident {
++impl Debug for Ident {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Ident::Compiler(t) => t.fmt(f),
+- Ident::Fallback(t) => t.fmt(f),
++ Ident::Compiler(t) => Debug::fmt(t, f),
++ Ident::Fallback(t) => Debug::fmt(t, f),
+ }
+ }
+ }
+
+ #[derive(Clone)]
+-pub enum Literal {
++pub(crate) enum Literal {
+ Compiler(proc_macro::Literal),
+ Fallback(fallback::Literal),
+ }
+@@ -774,7 +760,7 @@ pub enum Literal {
+ macro_rules! suffixed_numbers {
+ ($($name:ident => $kind:ident,)*) => ($(
+ pub fn $name(n: $kind) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::$name(n))
+ } else {
+ Literal::Fallback(fallback::Literal::$name(n))
+@@ -786,7 +772,7 @@ macro_rules! suffixed_numbers {
+ macro_rules! unsuffixed_integers {
+ ($($name:ident => $kind:ident,)*) => ($(
+ pub fn $name(n: $kind) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::$name(n))
+ } else {
+ Literal::Fallback(fallback::Literal::$name(n))
+@@ -830,7 +816,7 @@ impl Literal {
+ }
+
+ pub fn f32_unsuffixed(f: f32) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::f32_unsuffixed(f))
+ } else {
+ Literal::Fallback(fallback::Literal::f32_unsuffixed(f))
+@@ -838,7 +824,7 @@ impl Literal {
+ }
+
+ pub fn f64_unsuffixed(f: f64) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::f64_unsuffixed(f))
+ } else {
+ Literal::Fallback(fallback::Literal::f64_unsuffixed(f))
+@@ -846,7 +832,7 @@ impl Literal {
+ }
+
+ pub fn string(t: &str) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::string(t))
+ } else {
+ Literal::Fallback(fallback::Literal::string(t))
+@@ -854,7 +840,7 @@ impl Literal {
+ }
+
+ pub fn character(t: char) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::character(t))
+ } else {
+ Literal::Fallback(fallback::Literal::character(t))
+@@ -862,7 +848,7 @@ impl Literal {
+ }
+
+ pub fn byte_string(bytes: &[u8]) -> Literal {
+- if nightly_works() {
++ if inside_proc_macro() {
+ Literal::Compiler(proc_macro::Literal::byte_string(bytes))
+ } else {
+ Literal::Fallback(fallback::Literal::byte_string(bytes))
+@@ -908,20 +894,20 @@ impl From<fallback::Literal> for Literal {
+ }
+ }
+
+-impl fmt::Display for Literal {
++impl Display for Literal {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Literal::Compiler(t) => t.fmt(f),
+- Literal::Fallback(t) => t.fmt(f),
++ Literal::Compiler(t) => Display::fmt(t, f),
++ Literal::Fallback(t) => Display::fmt(t, f),
+ }
+ }
+ }
+
+-impl fmt::Debug for Literal {
++impl Debug for Literal {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match self {
+- Literal::Compiler(t) => t.fmt(f),
+- Literal::Fallback(t) => t.fmt(f),
++ Literal::Compiler(t) => Debug::fmt(t, f),
++ Literal::Fallback(t) => Debug::fmt(t, f),
+ }
+ }
+ }
+diff --git a/third_party/rust/proc-macro2/tests/comments.rs b/third_party/rust/proc-macro2/tests/comments.rs
+new file mode 100644
+index 0000000000..708cccb880
+--- /dev/null
++++ mozilla-release/third_party/rust/proc-macro2/tests/comments.rs
+@@ -0,0 +1,103 @@
++use proc_macro2::{Delimiter, Literal, Spacing, TokenStream, TokenTree};
++
++// #[doc = "..."] -> "..."
++fn lit_of_outer_doc_comment(tokens: TokenStream) -> Literal {
++ lit_of_doc_comment(tokens, false)
++}
++
++// #![doc = "..."] -> "..."
++fn lit_of_inner_doc_comment(tokens: TokenStream) -> Literal {
++ lit_of_doc_comment(tokens, true)
++}
++
++fn lit_of_doc_comment(tokens: TokenStream, inner: bool) -> Literal {
++ let mut iter = tokens.clone().into_iter();
++ match iter.next().unwrap() {
++ TokenTree::Punct(punct) => {
++ assert_eq!(punct.as_char(), '#');
++ assert_eq!(punct.spacing(), Spacing::Alone);
++ }
++ _ => panic!("wrong token {:?}", tokens),
++ }
++ if inner {
++ match iter.next().unwrap() {
++ TokenTree::Punct(punct) => {
++ assert_eq!(punct.as_char(), '!');
++ assert_eq!(punct.spacing(), Spacing::Alone);
++ }
++ _ => panic!("wrong token {:?}", tokens),
++ }
++ }
++ iter = match iter.next().unwrap() {
++ TokenTree::Group(group) => {
++ assert_eq!(group.delimiter(), Delimiter::Bracket);
++ assert!(iter.next().is_none(), "unexpected token {:?}", tokens);
++ group.stream().into_iter()
++ }
++ _ => panic!("wrong token {:?}", tokens),
++ };
++ match iter.next().unwrap() {
++ TokenTree::Ident(ident) => assert_eq!(ident.to_string(), "doc"),
++ _ => panic!("wrong token {:?}", tokens),
++ }
++ match iter.next().unwrap() {
++ TokenTree::Punct(punct) => {
++ assert_eq!(punct.as_char(), '=');
++ assert_eq!(punct.spacing(), Spacing::Alone);
++ }
++ _ => panic!("wrong token {:?}", tokens),
++ }
++ match iter.next().unwrap() {
++ TokenTree::Literal(literal) => {
++ assert!(iter.next().is_none(), "unexpected token {:?}", tokens);
++ literal
++ }
++ _ => panic!("wrong token {:?}", tokens),
++ }
++}
++
++#[test]
++fn closed_immediately() {
++ let stream = "/**/".parse::<TokenStream>().unwrap();
++ let tokens = stream.into_iter().collect::<Vec<_>>();
++ assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
++}
++
++#[test]
++fn incomplete() {
++ assert!("/*/".parse::<TokenStream>().is_err());
++}
++
++#[test]
++fn lit() {
++ let stream = "/// doc".parse::<TokenStream>().unwrap();
++ let lit = lit_of_outer_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\" doc\"");
++
++ let stream = "//! doc".parse::<TokenStream>().unwrap();
++ let lit = lit_of_inner_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\" doc\"");
++
++ let stream = "/** doc */".parse::<TokenStream>().unwrap();
++ let lit = lit_of_outer_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\" doc \"");
++
++ let stream = "/*! doc */".parse::<TokenStream>().unwrap();
++ let lit = lit_of_inner_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\" doc \"");
++}
++
++#[test]
++fn carriage_return() {
++ let stream = "///\r\n".parse::<TokenStream>().unwrap();
++ let lit = lit_of_outer_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\"\"");
++
++ let stream = "/**\r\n*/".parse::<TokenStream>().unwrap();
++ let lit = lit_of_outer_doc_comment(stream);
++ assert_eq!(lit.to_string(), "\"\\r\\n\"");
++
++ "///\r".parse::<TokenStream>().unwrap_err();
++ "///\r \n".parse::<TokenStream>().unwrap_err();
++ "/**\r \n*/".parse::<TokenStream>().unwrap_err();
++}
+diff --git a/third_party/rust/proc-macro2/tests/marker.rs b/third_party/rust/proc-macro2/tests/marker.rs
+index 7af2539c1a..70e57677cd 100644
+--- mozilla-release/third_party/rust/proc-macro2/tests/marker.rs
++++ mozilla-release/third_party/rust/proc-macro2/tests/marker.rs
+@@ -57,3 +57,36 @@ mod semver_exempt {
+
+ assert_impl!(SourceFile is not Send or Sync);
+ }
++
++#[cfg(not(no_libprocmacro_unwind_safe))]
++mod unwind_safe {
++ use super::*;
++ use std::panic::{RefUnwindSafe, UnwindSafe};
++
++ macro_rules! assert_unwind_safe {
++ ($($types:ident)*) => {
++ $(
++ assert_impl!($types is UnwindSafe and RefUnwindSafe);
++ )*
++ };
++ }
++
++ assert_unwind_safe! {
++ Delimiter
++ Group
++ Ident
++ LexError
++ Literal
++ Punct
++ Spacing
++ Span
++ TokenStream
++ TokenTree
++ }
++
++ #[cfg(procmacro2_semver_exempt)]
++ assert_unwind_safe! {
++ LineColumn
++ SourceFile
++ }
++}
+diff --git a/third_party/rust/proc-macro2/tests/test.rs b/third_party/rust/proc-macro2/tests/test.rs
+index 7528388138..1e9f633944 100644
+--- mozilla-release/third_party/rust/proc-macro2/tests/test.rs
++++ mozilla-release/third_party/rust/proc-macro2/tests/test.rs
+@@ -1,7 +1,6 @@
++use proc_macro2::{Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};
+ use std::str::{self, FromStr};
+
+-use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree};
+-
+ #[test]
+ fn idents() {
+ assert_eq!(
+@@ -84,6 +83,11 @@ fn literal_string() {
+ assert_eq!(Literal::string("didn't").to_string(), "\"didn't\"");
+ }
+
++#[test]
++fn literal_raw_string() {
++ "r\"\r\n\"".parse::<TokenStream>().unwrap();
++}
++
+ #[test]
+ fn literal_character() {
+ assert_eq!(Literal::character('x').to_string(), "'x'");
+@@ -110,6 +114,37 @@ fn literal_suffix() {
+ assert_eq!(token_count("1._0"), 3);
+ assert_eq!(token_count("1._m"), 3);
+ assert_eq!(token_count("\"\"s"), 1);
++ assert_eq!(token_count("r\"\"r"), 1);
++ assert_eq!(token_count("b\"\"b"), 1);
++ assert_eq!(token_count("br\"\"br"), 1);
++ assert_eq!(token_count("r#\"\"#r"), 1);
++ assert_eq!(token_count("'c'c"), 1);
++ assert_eq!(token_count("b'b'b"), 1);
++ assert_eq!(token_count("0E"), 1);
++ assert_eq!(token_count("0o0A"), 1);
++ assert_eq!(token_count("0E--0"), 4);
++ assert_eq!(token_count("0.0ECMA"), 1);
++}
++
++#[test]
++fn literal_iter_negative() {
++ let negative_literal = Literal::i32_suffixed(-3);
++ let tokens = TokenStream::from(TokenTree::Literal(negative_literal));
++ let mut iter = tokens.into_iter();
++ match iter.next().unwrap() {
++ TokenTree::Punct(punct) => {
++ assert_eq!(punct.as_char(), '-');
++ assert_eq!(punct.spacing(), Spacing::Alone);
++ }
++ unexpected => panic!("unexpected token {:?}", unexpected),
++ }
++ match iter.next().unwrap() {
++ TokenTree::Literal(literal) => {
++ assert_eq!(literal.to_string(), "3i32");
++ }
++ unexpected => panic!("unexpected token {:?}", unexpected),
++ }
++ assert!(iter.next().is_none());
+ }
+
+ #[test]
+@@ -161,41 +196,21 @@ fn fail() {
+ fail("' static");
+ fail("r#1");
+ fail("r#_");
++ fail("\"\\u{0000000}\""); // overlong unicode escape (rust allows at most 6 hex digits)
++ fail("\"\\u{999999}\""); // outside of valid range of char
++ fail("\"\\u{_0}\""); // leading underscore
++ fail("\"\\u{}\""); // empty
++ fail("b\"\r\""); // bare carriage return in byte string
++ fail("r\"\r\""); // bare carriage return in raw string
++ fail("\"\\\r \""); // backslash carriage return
++ fail("'aa'aa");
++ fail("br##\"\"#");
++ fail("\"\\\n\u{85}\r\"");
+ }
+
+ #[cfg(span_locations)]
+ #[test]
+ fn span_test() {
+- use proc_macro2::TokenTree;
+-
+- fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) {
+- let ts = p.parse::<TokenStream>().unwrap();
+- check_spans_internal(ts, &mut lines);
+- }
+-
+- fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) {
+- for i in ts {
+- if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() {
+- *lines = rest;
+-
+- let start = i.span().start();
+- assert_eq!(start.line, sline, "sline did not match for {}", i);
+- assert_eq!(start.column, scol, "scol did not match for {}", i);
+-
+- let end = i.span().end();
+- assert_eq!(end.line, eline, "eline did not match for {}", i);
+- assert_eq!(end.column, ecol, "ecol did not match for {}", i);
+-
+- match i {
+- TokenTree::Group(ref g) => {
+- check_spans_internal(g.stream().clone(), lines);
+- }
+- _ => {}
+- }
+- }
+- }
+- }
+-
+ check_spans(
+ "\
+ /// This is a document comment
+@@ -274,53 +289,11 @@ fn span_join() {
+ #[test]
+ fn no_panic() {
+ let s = str::from_utf8(b"b\'\xc2\x86 \x00\x00\x00^\"").unwrap();
+- assert!(s.parse::<proc_macro2::TokenStream>().is_err());
++ assert!(s.parse::<TokenStream>().is_err());
+ }
+
+ #[test]
+-fn tricky_doc_comment() {
+- let stream = "/**/".parse::<proc_macro2::TokenStream>().unwrap();
+- let tokens = stream.into_iter().collect::<Vec<_>>();
+- assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
+-
+- let stream = "/// doc".parse::<proc_macro2::TokenStream>().unwrap();
+- let tokens = stream.into_iter().collect::<Vec<_>>();
+- assert!(tokens.len() == 2, "not length 2 -- {:?}", tokens);
+- match tokens[0] {
+- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '#'),
+- _ => panic!("wrong token {:?}", tokens[0]),
+- }
+- let mut tokens = match tokens[1] {
+- proc_macro2::TokenTree::Group(ref tt) => {
+- assert_eq!(tt.delimiter(), proc_macro2::Delimiter::Bracket);
+- tt.stream().into_iter()
+- }
+- _ => panic!("wrong token {:?}", tokens[0]),
+- };
+-
+- match tokens.next().unwrap() {
+- proc_macro2::TokenTree::Ident(ref tt) => assert_eq!(tt.to_string(), "doc"),
+- t => panic!("wrong token {:?}", t),
+- }
+- match tokens.next().unwrap() {
+- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '='),
+- t => panic!("wrong token {:?}", t),
+- }
+- match tokens.next().unwrap() {
+- proc_macro2::TokenTree::Literal(ref tt) => {
+- assert_eq!(tt.to_string(), "\" doc\"");
+- }
+- t => panic!("wrong token {:?}", t),
+- }
+- assert!(tokens.next().is_none());
+-
+- let stream = "//! doc".parse::<proc_macro2::TokenStream>().unwrap();
+- let tokens = stream.into_iter().collect::<Vec<_>>();
+- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens);
+-}
+-
+-#[test]
+-fn op_before_comment() {
++fn punct_before_comment() {
+ let mut tts = TokenStream::from_str("~// comment").unwrap().into_iter();
+ match tts.next().unwrap() {
+ TokenTree::Punct(tt) => {
+@@ -331,6 +304,22 @@ fn op_before_comment() {
+ }
+ }
+
++#[test]
++fn joint_last_token() {
++ // This test verifies that we match the behavior of libproc_macro *not* in
++ // the range nightly-2020-09-06 through nightly-2020-09-10, in which this
++ // behavior was temporarily broken.
++ // See https://github.com/rust-lang/rust/issues/76399
++
++ let joint_punct = Punct::new(':', Spacing::Joint);
++ let stream = TokenStream::from(TokenTree::Punct(joint_punct));
++ let punct = match stream.into_iter().next().unwrap() {
++ TokenTree::Punct(punct) => punct,
++ _ => unreachable!(),
++ };
++ assert_eq!(punct.spacing(), Spacing::Joint);
++}
++
+ #[test]
+ fn raw_identifier() {
+ let mut tts = TokenStream::from_str("r#dyn").unwrap().into_iter();
+@@ -345,11 +334,11 @@ fn raw_identifier() {
+ fn test_debug_ident() {
+ let ident = Ident::new("proc_macro", Span::call_site());
+
+- #[cfg(not(procmacro2_semver_exempt))]
++ #[cfg(not(span_locations))]
+ let expected = "Ident(proc_macro)";
+
+- #[cfg(procmacro2_semver_exempt)]
+- let expected = "Ident { sym: proc_macro, span: bytes(0..0) }";
++ #[cfg(span_locations)]
++ let expected = "Ident { sym: proc_macro }";
+
+ assert_eq!(expected, format!("{:?}", ident));
+ }
+@@ -358,7 +347,7 @@ fn test_debug_ident() {
+ fn test_debug_tokenstream() {
+ let tts = TokenStream::from_str("[a + 1]").unwrap();
+
+- #[cfg(not(procmacro2_semver_exempt))]
++ #[cfg(not(span_locations))]
+ let expected = "\
+ TokenStream [
+ Group {
+@@ -368,7 +357,7 @@ TokenStream [
+ sym: a,
+ },
+ Punct {
+- op: '+',
++ char: '+',
+ spacing: Alone,
+ },
+ Literal {
+@@ -379,7 +368,7 @@ TokenStream [
+ ]\
+ ";
+
+- #[cfg(not(procmacro2_semver_exempt))]
++ #[cfg(not(span_locations))]
+ let expected_before_trailing_commas = "\
+ TokenStream [
+ Group {
+@@ -389,7 +378,7 @@ TokenStream [
+ sym: a
+ },
+ Punct {
+- op: '+',
++ char: '+',
+ spacing: Alone
+ },
+ Literal {
+@@ -400,7 +389,7 @@ TokenStream [
+ ]\
+ ";
+
+- #[cfg(procmacro2_semver_exempt)]
++ #[cfg(span_locations)]
+ let expected = "\
+ TokenStream [
+ Group {
+@@ -411,7 +400,7 @@ TokenStream [
+ span: bytes(2..3),
+ },
+ Punct {
+- op: '+',
++ char: '+',
+ spacing: Alone,
+ span: bytes(4..5),
+ },
+@@ -425,7 +414,7 @@ TokenStream [
+ ]\
+ ";
+
+- #[cfg(procmacro2_semver_exempt)]
++ #[cfg(span_locations)]
+ let expected_before_trailing_commas = "\
+ TokenStream [
+ Group {
+@@ -436,7 +425,7 @@ TokenStream [
+ span: bytes(2..3)
+ },
+ Punct {
+- op: '+',
++ char: '+',
+ spacing: Alone,
+ span: bytes(4..5)
+ },
+@@ -464,3 +453,80 @@ fn default_tokenstream_is_empty() {
+
+ assert!(default_token_stream.is_empty());
+ }
++
++#[test]
++fn tuple_indexing() {
++ // This behavior may change depending on https://github.com/rust-lang/rust/pull/71322
++ let mut tokens = "tuple.0.0".parse::<TokenStream>().unwrap().into_iter();
++ assert_eq!("tuple", tokens.next().unwrap().to_string());
++ assert_eq!(".", tokens.next().unwrap().to_string());
++ assert_eq!("0.0", tokens.next().unwrap().to_string());
++ assert!(tokens.next().is_none());
++}
++
++#[cfg(span_locations)]
++#[test]
++fn non_ascii_tokens() {
++ check_spans("// abc", &[]);
++ check_spans("// ábc", &[]);
++ check_spans("// abc x", &[]);
++ check_spans("// ábc x", &[]);
++ check_spans("/* abc */ x", &[(1, 10, 1, 11)]);
++ check_spans("/* ábc */ x", &[(1, 10, 1, 11)]);
++ check_spans("/* ab\nc */ x", &[(2, 5, 2, 6)]);
++ check_spans("/* áb\nc */ x", &[(2, 5, 2, 6)]);
++ check_spans("/*** abc */ x", &[(1, 12, 1, 13)]);
++ check_spans("/*** ábc */ x", &[(1, 12, 1, 13)]);
++ check_spans(r#""abc""#, &[(1, 0, 1, 5)]);
++ check_spans(r#""ábc""#, &[(1, 0, 1, 5)]);
++ check_spans(r###"r#"abc"#"###, &[(1, 0, 1, 8)]);
++ check_spans(r###"r#"ábc"#"###, &[(1, 0, 1, 8)]);
++ check_spans("r#\"a\nc\"#", &[(1, 0, 2, 3)]);
++ check_spans("r#\"á\nc\"#", &[(1, 0, 2, 3)]);
++ check_spans("'a'", &[(1, 0, 1, 3)]);
++ check_spans("'á'", &[(1, 0, 1, 3)]);
++ check_spans("//! abc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
++ check_spans("//! ábc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
++ check_spans("//! abc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
++ check_spans("//! ábc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
++ check_spans("/*! abc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]);
++ check_spans("/*! ábc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]);
++ check_spans("/*! a\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]);
++ check_spans("/*! á\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]);
++ check_spans("abc", &[(1, 0, 1, 3)]);
++ check_spans("ábc", &[(1, 0, 1, 3)]);
++ check_spans("ábć", &[(1, 0, 1, 3)]);
++ check_spans("abc// foo", &[(1, 0, 1, 3)]);
++ check_spans("ábc// foo", &[(1, 0, 1, 3)]);
++ check_spans("ábć// foo", &[(1, 0, 1, 3)]);
++ check_spans("b\"a\\\n c\"", &[(1, 0, 2, 3)]);
++ check_spans("b\"a\\\n\u{00a0}c\"", &[(1, 0, 2, 3)]);
++}
++
++#[cfg(span_locations)]
++fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) {
++ let ts = p.parse::<TokenStream>().unwrap();
++ check_spans_internal(ts, &mut lines);
++ assert!(lines.is_empty(), "leftover ranges: {:?}", lines);
++}
++
++#[cfg(span_locations)]
++fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) {
++ for i in ts {
++ if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() {
++ *lines = rest;
++
++ let start = i.span().start();
++ assert_eq!(start.line, sline, "sline did not match for {}", i);
++ assert_eq!(start.column, scol, "scol did not match for {}", i);
++
++ let end = i.span().end();
++ assert_eq!(end.line, eline, "eline did not match for {}", i);
++ assert_eq!(end.column, ecol, "ecol did not match for {}", i);
++
++ if let TokenTree::Group(g) = i {
++ check_spans_internal(g.stream().clone(), lines);
++ }
++ }
++ }
++}
+diff --git a/third_party/rust/proc-macro2/tests/test_fmt.rs b/third_party/rust/proc-macro2/tests/test_fmt.rs
+new file mode 100644
+index 0000000000..99a0aee5c8
+--- /dev/null
++++ mozilla-release/third_party/rust/proc-macro2/tests/test_fmt.rs
+@@ -0,0 +1,26 @@
++use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
++use std::iter::{self, FromIterator};
++
++#[test]
++fn test_fmt_group() {
++ let ident = Ident::new("x", Span::call_site());
++ let inner = TokenStream::from_iter(iter::once(TokenTree::Ident(ident)));
++ let parens_empty = Group::new(Delimiter::Parenthesis, TokenStream::new());
++ let parens_nonempty = Group::new(Delimiter::Parenthesis, inner.clone());
++ let brackets_empty = Group::new(Delimiter::Bracket, TokenStream::new());
++ let brackets_nonempty = Group::new(Delimiter::Bracket, inner.clone());
++ let braces_empty = Group::new(Delimiter::Brace, TokenStream::new());
++ let braces_nonempty = Group::new(Delimiter::Brace, inner.clone());
++ let none_empty = Group::new(Delimiter::None, TokenStream::new());
++ let none_nonempty = Group::new(Delimiter::None, inner.clone());
++
++ // Matches libproc_macro.
++ assert_eq!("()", parens_empty.to_string());
++ assert_eq!("(x)", parens_nonempty.to_string());
++ assert_eq!("[]", brackets_empty.to_string());
++ assert_eq!("[x]", brackets_nonempty.to_string());
++ assert_eq!("{ }", braces_empty.to_string());
++ assert_eq!("{ x }", braces_nonempty.to_string());
++ assert_eq!("", none_empty.to_string());
++ assert_eq!("x", none_nonempty.to_string());
++}
+diff --git a/third_party/rust/spirv-cross-internal/.cargo-checksum.json b/third_party/rust/spirv-cross-internal/.cargo-checksum.json
+index 3c732d6d0e..014aa640e1 100644
+--- mozilla-release/third_party/rust/spirv-cross-internal/.cargo-checksum.json
++++ mozilla-release/third_party/rust/spirv-cross-internal/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.gitignore":"7f23cc92ddb5e1f584447e98d3e8ab6543fc182f1543f0f6ec29856f9250cdd6","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null}
+\ No newline at end of file
++{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/syn/.cargo-checksum.json b/third_party/rust/syn/.cargo-checksum.json
+index 77939d8fc6..704f2ed200 100644
+--- mozilla-release/third_party/rust/syn/.cargo-checksum.json
++++ mozilla-release/third_party/rust/syn/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"484d29864d333a361652fa4e24e1dcfab9efa47705ffd8c106d802eb03b78da7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"ca605417b6db8c995458f8407afaad6c177aedcc2274004283600f5638fa1b0c","benches/file.rs":"b45211cc4a0296a77aac2b4de16dbc6b5cb66adfb5afac00a77bccea87f43968","benches/rust.rs":"9cc0f62e944f1583d05c43a395a1556731501cf5976ef67a081f4f6387f883ba","build.rs":"7423ab199728d55c7d64c44b7c6729cfd93bd8273366a77707353003e27565d7","src/attr.rs":"cf81add298f0e75c35a9980a59bc3c2fd3fe933635830d1591374eeb2487c225","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"2a432c11a3da67a21d46c2272bf9ce60a0bb20893b5750027bbd8ca3e843ab35","src/custom_keyword.rs":"589e46ec1be9a04d6de12c0b8cadf87cc1c05606ed46ddea62e9869cbca4a191","src/custom_punctuation.rs":"2ba2e294e15a0fce7ede3686c42b2891797079a724dd1193b66e7d305624c891","src/data.rs":"cc9b250d084e444782d3ff5e63c1ba387cbde8f7f2e977eab9846d920b4b8c3f","src/derive.rs":"c18878f14be5d5ab11fd7dda2d2ff1ff75c9662daf11eed033de62e4d0670a89","src/discouraged.rs":"50e10915695c4d14f64a78e20ecbef90a2cd53a7c26ee3426a2524a8ee5c9cbf","src/error.rs":"2c17a402f83ed5ae4ad96e753216771bef620235c2ff1ccc23f4bbafc7266fe1","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"871d8eeb43cef02ef88de3bea7477b79b4eabc096a0899dde0e5750edf482f49","src/ext.rs":"b97ed549490b9248b5b5df31b3d5b08ba8791e23e6c5d3a1157a0363eb683ff3","src/file.rs":"3cc2bf5c709238d515a557f721f231c8c725b196400de051f945b549299d38a7","src/gen/fold.rs":"10b3ae33d0ce410d6bbe8b93be9d5f9e856c7dc8212133cc46b703f97d548190","src/gen/visit.rs":"e0f5798552d186024696b7bfc7219d4ff53b0e45f735a83e77cbb6b6578c5fa4","src/gen/visit_mut.rs":"9f7dda83907969971dba84d545aaa563b0728e54db97ffab5050fdf43a79c731","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d845d7a828863123a5187fd0fe59c9dae3636f63bad302bd035792eed3dcb1ba","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"213f2f58c65ee1aa222f111bc9b1be681f8fb069caed04ca56586839979318d0","src/keyword.rs":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","src/lib.rs":"24778e9f15e8025e75aca114c712716ada586b471adb3b3b69278f4d39b8a21b","src/lifetime.rs":"905359708f772ec858954badde69ee016d29e6eeba1dd205b268445b1aff6f3a","src/lit.rs":"5bb0bddb94cbd256e50e92dc091a0baa09f1be40a77058b897507f3b17191e5d","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"6b468244cc07e3f2f10419f833d9e2ed23edbcd6dc34cf21c5947633699db964","src/macros.rs":"0d8c3bab47539aa2d00bec64e92c901ea2c9c0af74c868051c0905b82650f970","src/op.rs":"93cd44770bb110deadf807a01d9a666efe644b6e3010f4b51cae77ee7438cfbb","src/parse.rs":"5017123c249ebc65866af113a0ad671814b9873f47568180e6539a305eb0317d","src/parse_macro_input.rs":"f799aadb7216c2d333b579f48ed2fedfe07b5e96f004b25b569649ffbaa958d2","src/parse_quote.rs":"81575bf60b18b0d8624d7025a5bcc8dcd6633ad70c454dee2a06e4c391700b6c","src/pat.rs":"db0f2263b9813de1f4e3e3e0396fe0080b1e11c8090c6b4fb6fca3cfbe22bc96","src/path.rs":"32e685ac7fd2d4b9989802de8f326a8d47fa710f86ec3e45fd9d3ff8fdfe97ef","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"384e7b317b26f24118eb4b0c39e949ee9f4f3e700a4c80e462342c83b2cc3282","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"adddb6acae14a0fa340df302b932c31e34b259706ce56fd82ab597ec424500e1","src/stmt.rs":"fbccf2b4da7980fe6ea8d99457d291577c0f225b370c1dd97da41abf2a18fcf7","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"761d8d1793560eb2b631c36ddfdbb14ac65178405f095453aa0e75e8816bdbb9","src/tt.rs":"1e32ae216d14d895ff621bf32bc611f138aa00108b0090be2cbaa0affebe8e2a","src/ty.rs":"ce052e0079b65b66bea4e9502d2ff2c90ad4b867904bf7eb892eb60aa3ef219a","tests/clone.sh":"961243d42540d9992090efbbd5478b7aa395671db64a6c28cdadb6edc610ebdf","tests/common/eq.rs":"a42d339808fd32dd4bfd440c254add8c56d5e2cde3a6bf0c88621b618ce5eaa7","tests/common/mod.rs":"20a3300016351fa210a193fbb0db059ef5125fa7909585ded64790004d4977ed","tests/common/parse.rs":"17ba6d1e74aaa3f8096c6d379d803221f12d95cca69927be047d6ddf8367647f","tests/debug/gen.rs":"57bd5cf585e0b86ad00f29f09ff3db3390c4a756d503514a9b28407500dcea3c","tests/debug/mod.rs":"462d6fe34ee75c3ca1207d4db2ff3bdee5b430b9f9ca632e5671d1588d3f76b3","tests/features/error.rs":"e0581a2869cbd237c2bc18a0a85272296e1577bb5f7317a67fa85e28e04eea6f","tests/features/mod.rs":"66a2605ec54ede29208da350f2bed536dfa763b58408d64d3fca3b13de64b64f","tests/macros/mod.rs":"3f2d758c0ba76b93f54b0c1fc22ad50edff8ef42629ba4d47ac7d7f823da8359","tests/repo/mod.rs":"e851a68972c9194a9a8d7b68538b16ed79ae81cba55e1a2ce210d1b759fb1a21","tests/test_asyncness.rs":"b6c46118b036e6807d24eb0e1779244b4fca23dac0d8031e9843b3edec484ce8","tests/test_attribute.rs":"2d8f18a98c989d3f7adaaeb1aeebd4f8413365ace63feecb37cb3f9db9db4d8f","tests/test_derive_input.rs":"477d80f914c54b526f8ff229788dc0e7798d118f6dcfa348f4c99755edb347b9","tests/test_expr.rs":"f35ca80566849a36e6ba6403d9663519eff37e4224360c468fedff8b561a643e","tests/test_generics.rs":"83a5dc07f5c5701c12625399262f7120b66f01a742523f3eda28da2cf2c87eb3","tests/test_grouping.rs":"aadd75215addd9e5a8fa2f9472117d4cb80f1e8b84e07f4c0845675c9014164f","tests/test_ident.rs":"236c239dd66f543f084f44ff747d7bc3962cf11a019a279777fe972f6e17aa4c","tests/test_iterators.rs":"718938da14778dcba06324d36a99d9317c9d45d81a34c6a44c47e1fa38085e9f","tests/test_lit.rs":"7dff2661a5ac586d6ed2fe27501cb8ff62f4cf3f6c91f596bff6057c67ad7857","tests/test_meta.rs":"8444dee084882243b107dfc8a6aac27f9382f9774162d1ac8ed8ec30d60c048e","tests/test_parse_buffer.rs":"b244bb4bc41ff06d21f239e60a3d663fdec5aa4af33f2a354afef36d34f0aefc","tests/test_pat.rs":"41776b878efae9b8e340f21ffe6296e921cf309f618482efd98609c33e32c28b","tests/test_precedence.rs":"71f3ea52cda8b40166bb7416fb98774e6a653542497b521f8e183e283dcf579d","tests/test_round_trip.rs":"e0de37f45fa223b488d25a41beab185eb92abb7bf765a9f13fe5d870ff31f5f1","tests/test_should_parse.rs":"4da4e25ee2baa7e75135c375042a7f958de136c5698dab03f99ff7a774dcd463","tests/test_size.rs":"970150b9d49ef91ab4c8f8c6a59b83f9a68a02acb779f0280733a5efaec6487a","tests/test_token_trees.rs":"a07ea657bf03b9c667c821b2db2af49b176ca737e3e01217a73cca78b7f11380","tests/zzz_stable.rs":"961d4940a926db4ca523d834b060c62de988e6a8e01c9f5efaa7bb4c86745b47"},"package":"66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"28ddb678a5ccac4423435384c8b7116f804e896eabc5aae9d5c2bc666aaebbb4","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"03f3b53cf858536a0883aa5b5882ee61dcd0f1e71c0930c9106fcfa1d6aad2df","benches/file.rs":"b4724fc7c0f48b8f488e2632a1064f6c0bf16ded3969680fc3f4a2369536269b","benches/rust.rs":"ea6291ef2d2a83d94a3312fe179d48259f8ec0b04c961993ddd181d0a4ab740e","build.rs":"aeca2312f05aec658eaa66980a0ef3d578837db107a55702b39419ea0422eb4a","src/attr.rs":"7d79482634d6544eb4a4825405407b53660d0f5f8b929f7e1671e005b9d92038","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"cf2a4b3bdc247b80c85ff5625a1dfb7a5f517fd835f6e1518a7b924990e4c293","src/custom_keyword.rs":"9627467063e41776315a6a14b2aaea3875592d8e0ebd2dc6df1fc2f12c06f146","src/custom_punctuation.rs":"b00e7bee96eb473507527e39db65e74e71592dc06421d2cfe45ed899c17d4847","src/data.rs":"7aec9a745cd53ec95688afa353f6efb9576e7fc0143757b51d28bc3d900b1d2a","src/derive.rs":"fa71866df6e383673dd3329f455a9f953585b83f9739050be3bf1f8c6d526b96","src/discouraged.rs":"a1f3d85e20dedf50b1b7b4571d970a3a6e9b2de4afde7dd0c986fe240df2ba46","src/error.rs":"c3005b50e3132026250c5356d0d391bf96db8087f0f5f744de98e360d8a20a3e","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"54455fd20041996653ca5379b03cdf3c2fc1b3dd2e1149b5bc6b1dd492545d55","src/ext.rs":"870086d9021e6a6fcefa2f00cd91b55c4b74dcee8f0f6a07e76d96fb44707d61","src/file.rs":"75167ebc77e7870122078eabde1b872c337142d4b0962c20cedffcaaa2a5b7c6","src/gen/clone.rs":"0845c1bf8624c3f235cd247b4eb748e7e16b4c240097cb0ff16751f688c079ae","src/gen/debug.rs":"d24fe37f4ce1dd74f2dc54136e893782d3c4d0908323c036c97599551a56960c","src/gen/eq.rs":"1e6ef09b17ca7f36861ef23ce2a6991b231ed5f087f046469b5f23da40f5b419","src/gen/fold.rs":"3f59e59ed8ad2ab5dd347bfbe41bbc785c2aabd8ae902087a584a6daed597182","src/gen/hash.rs":"e5b2a52587173076777233a9e57e2b3c8e0dd6d6f41d16fa7c9fde68b05c2bfc","src/gen/visit.rs":"23008c170d4dd3975232876a0a654921d9b6af57372cb9fcc133ca740588d666","src/gen/visit_mut.rs":"42886c3ee02ded72d9c3eec006e20431eaee0c6b90ddefc1a36ec7bf50c6a24a","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d1c175284ca21e777ef0414c28383929b170ccb00aaf7a929eb18d3b05e18da8","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"c9ad9881e8cda8ee3f157f0c7602fc53d08a7e3288b9afc388c393689eac5aea","src/lib.rs":"558ad13779233b27bebc4b2fc8025eb1c7e57b32130dc1dd911391e27b427500","src/lifetime.rs":"f390fe06692fc51fbf3eb490bb9f795da70e4452f51c5b0df3bbaa899084ddf1","src/lit.rs":"9fab84e38756b092fbb055dcdf01e31d42d916c49e3eaae8c9019043b0ee4301","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"e5cecea397fd01a44958162781d8d94343fe2a1b9b9754a5666c3d2ab4d7ef64","src/macros.rs":"2ce05b553f14da4ee550bb681cb0733b7186ad94719cd36f96d53e15fd02cf2b","src/op.rs":"449514e146deab0ab020bc6f764544c294dbc780941c9802bf60cf1b2839d550","src/parse.rs":"bde888c98ee259f2a73489a693515ed4875432b0d79486ac83aea19f441992a3","src/parse_macro_input.rs":"653a020f023cac0eccbc1fcc34aa7bf80567b43e5475deab4ad3e487a5363201","src/parse_quote.rs":"642f21e5fa54df4b7c373fb158289ee1005d49e1a49b1d194df5438faee71c46","src/pat.rs":"1473b258162cc822f1ee0c0869f521053ed345a140c39ed83b9b4dfb6f9f2aca","src/path.rs":"f119f0c2af12fabd360eac9a2312e0f6e6c28c633c9671bde6ef0bece7c5ba3c","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"212f5a601d6c2eb8b8fa679be1167b455b595bee964d2775b0101ebb16c3eaa5","src/reserved.rs":"3625eb2a64589a4992ab79a1674e9679f465bea613ab139a671df5337e88cee6","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"7d77714d585e6f42397091ffb3a799fd7b20c05c5442c737683c429ea7d409a5","src/stmt.rs":"3917fbc897f80efe838267833c55650ff8d636cb49a6d1084e28eff65d0e3ccd","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"a1ca6298bf6592cb80cbab1db4eac2fa4e3fa56729bb807bfb0f08ab0f229ca5","src/tt.rs":"1cc9e200624288322f800f32e3d6e2e53da946467bb312dd40a52c02cdcc4730","src/ty.rs":"cb167cbb16240c59a31b44adec175172caaf75ffef9a0bb168584b51bf105795","src/verbatim.rs":"802a97df997432f18cac6e6200ff6ea29fb2474986005e0fcdbc2b65197f87f7","src/whitespace.rs":"e63dd0aa3d34029f17766a8b09c1a6e4479e36c552c8b7023d710a399333aace","tests/common/eq.rs":"4b190a3833bdfd20a4cb1e3dff25a698751dec71d6f30249cf09426e061a4fb1","tests/common/mod.rs":"25ef6d7daa09bad3198a0e9e91b2812425f92db7c585c1e34a03a84d7362ccd8","tests/common/parse.rs":"8b7ba32f4988c30758c108536c4877dc5a039a237bf9b0687220ef2295797bbd","tests/debug/gen.rs":"d6e2abf2a7bb58a7895a60c2f094a98a4f85c9189d02011d0dcef6ef053f26e3","tests/debug/mod.rs":"868763d0ef1609a3ad5e05e9f1bfa0f813e91e7e9a36653414a188bb2fdaa425","tests/macros/mod.rs":"c0eafa4e3845fc08f6efe6021bac37822c0ac325eb7b51194a5f35236f648d92","tests/repo/mod.rs":"9e316b88d57ae213e81950c35e45443078ec90e702798353bc3528cb8a2810b6","tests/repo/progress.rs":"c08d0314a7f3ecf760d471f27da3cd2a500aeb9f1c8331bffb2aa648f9fabf3f","tests/test_asyncness.rs":"cff01db49d28ab23b0b258bc6c0a5cc4071be4fe7248eef344a5d79d2fb649b7","tests/test_attribute.rs":"0ffd99384e1a52ae17d9fed5c4053e411e8f9018decef07ffa621d1faa7329d8","tests/test_derive_input.rs":"610444351e3bf99366976bbf1da109c334a70ac9500caef366bcf9b68819829f","tests/test_expr.rs":"0ee83f6f6de950018c043efcc3e85776b4227dae3068309998a8d9709f2fc66c","tests/test_generics.rs":"9d713f90a79d6145efc89fb6f946029ca03486c632219950889da39940152ba0","tests/test_grouping.rs":"46c27baec4daaaf1e891892f0b0515ea8a44619071c7d0cc9192580916f1569f","tests/test_ident.rs":"9eb53d1e21edf23e7c9e14dc74dcc2b2538e9221e19dbcc0a44e3acc2e90f3f6","tests/test_item.rs":"461ed0c8648afffcea3217f52c9a88298182b4d39d73a11803b1281d99c98c25","tests/test_iterators.rs":"53ed6078d37550bd6765d2411e3660be401aef8a31a407350cc064a7d08c7c33","tests/test_lit.rs":"2a46c5f2f2ad1dcbb7e9b0cd11b55861c5ff818c2c4c51351d07e2daa7c74674","tests/test_meta.rs":"1fc98af3279cadc3d8db3c7e8d4d7f9e9dbd4d17548cf6a2f6f4536ed65367f6","tests/test_parse_buffer.rs":"8bbe2d24ca8a3788f72c6908fc96c26d546f11c69687bf8d72727f851d5e2d27","tests/test_parse_stream.rs":"2f449a2c41a3dee6fd14bee24e1666a453cb808eda17332fd91afd127fcdd2a6","tests/test_pat.rs":"2cb331fe404496d51e7cc7e283ae13c519a2265ca82e1c88e113296f860c2cba","tests/test_path.rs":"fcd5591e639fc787acc9763d828a811c8114525c9341282eefda8f331e082a51","tests/test_precedence.rs":"8d03656741b01e577d7501ce24332d1a4febec3e31a043e47c61062b8c527ed2","tests/test_receiver.rs":"084eca59984b9a18651da52f2c4407355da3de1335916a12477652999e2d01cc","tests/test_round_trip.rs":"ba01bf4ec04cd2d6f9e4800c343563925ae960c5f16752dc0797fda4451b6cc2","tests/test_shebang.rs":"f5772cadad5b56e3112cb16308b779f92bce1c3a48091fc9933deb2276a69331","tests/test_should_parse.rs":"1d3535698a446e2755bfc360676bdb161841a1f454cdef6e7556c6d06a95c89d","tests/test_size.rs":"5fae772bab66809d6708232f35cfb4a287882486763b0f763feec2ad79fbb68b","tests/test_stmt.rs":"17e4355843ee2982b51faba2721a18966f8c2b9422e16b052a123b8ee8b80752","tests/test_token_trees.rs":"43e56a701817e3c3bfd0cae54a457dd7a38ccb3ca19da41e2b995fdf20e6ed18","tests/test_ty.rs":"5b7c0bfc4963d41920dd0b39fdea419e34f00409ba86ad4211d6c3c7e8bbe1c0","tests/test_visibility.rs":"3f958e2b3b5908005e756a80eea326a91eac97cc4ab60599bebde8d4b942d65c","tests/zzz_stable.rs":"2a862e59cb446235ed99aec0e6ada8e16d3ecc30229b29d825b7c0bbc2602989"},"package":"963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"}
+\ No newline at end of file
+diff --git a/third_party/rust/syn/Cargo.toml b/third_party/rust/syn/Cargo.toml
+index 7a5c962f06..20277fc461 100644
+--- mozilla-release/third_party/rust/syn/Cargo.toml
++++ mozilla-release/third_party/rust/syn/Cargo.toml
+@@ -13,7 +13,7 @@
+ [package]
+ edition = "2018"
+ name = "syn"
+-version = "1.0.5"
++version = "1.0.40"
+ authors = ["David Tolnay <dtolnay@gmail.com>"]
+ include = ["/benches/**", "/build.rs", "/Cargo.toml", "/LICENSE-APACHE", "/LICENSE-MIT", "/README.md", "/src/**", "/tests/**"]
+ description = "Parser for Rust source code"
+@@ -24,25 +24,21 @@ license = "MIT OR Apache-2.0"
+ repository = "https://github.com/dtolnay/syn"
+ [package.metadata.docs.rs]
+ all-features = true
++targets = ["x86_64-unknown-linux-gnu"]
+
+ [package.metadata.playground]
+-all-features = true
+-
+-[lib]
+-name = "syn"
++features = ["full", "visit", "visit-mut", "fold", "extra-traits"]
+
+ [[bench]]
+ name = "rust"
+ harness = false
+ required-features = ["full", "parsing"]
+-edition = "2018"
+
+ [[bench]]
+ name = "file"
+ required-features = ["full", "parsing"]
+-edition = "2018"
+ [dependencies.proc-macro2]
+-version = "1.0"
++version = "1.0.13"
+ default-features = false
+
+ [dependencies.quote]
+@@ -52,18 +48,34 @@ default-features = false
+
+ [dependencies.unicode-xid]
+ version = "0.2"
++[dev-dependencies.anyhow]
++version = "1.0"
++
++[dev-dependencies.flate2]
++version = "1.0"
++
+ [dev-dependencies.insta]
+-version = "0.9"
++version = "0.16"
+
+ [dev-dependencies.rayon]
+ version = "1.0"
+
+ [dev-dependencies.ref-cast]
+-version = "0.2"
++version = "1.0"
+
+ [dev-dependencies.regex]
+ version = "1.0"
+
++[dev-dependencies.reqwest]
++version = "0.10"
++features = ["blocking"]
++
++[dev-dependencies.syn-test-suite]
++version = "0"
++
++[dev-dependencies.tar]
++version = "0.4"
++
+ [dev-dependencies.termcolor]
+ version = "1.0"
+
+@@ -80,7 +92,6 @@ full = []
+ parsing = []
+ printing = ["quote"]
+ proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"]
++test = ["syn-test-suite/all-features"]
+ visit = []
+ visit-mut = []
+-[badges.travis-ci]
+-repository = "dtolnay/syn"
+diff --git a/third_party/rust/syn/README.md b/third_party/rust/syn/README.md
+index 29a7f32a46..12b5f45b3d 100644
+--- mozilla-release/third_party/rust/syn/README.md
++++ mozilla-release/third_party/rust/syn/README.md
+@@ -1,10 +1,10 @@
+ Parser for Rust source code
+ ===========================
+
+-[![Build Status](https://api.travis-ci.org/dtolnay/syn.svg?branch=master)](https://travis-ci.org/dtolnay/syn)
+-[![Latest Version](https://img.shields.io/crates/v/syn.svg)](https://crates.io/crates/syn)
+-[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/syn/1.0/syn/)
+-[![Rustc Version 1.31+](https://img.shields.io/badge/rustc-1.31+-lightgray.svg)](https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html)
++[<img alt="github" src="https://img.shields.io/badge/github-dtolnay/syn-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/dtolnay/syn)
++[<img alt="crates.io" src="https://img.shields.io/crates/v/syn.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/syn)
++[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-syn-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" height="20">](https://docs.rs/syn)
++[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/syn/CI/master?style=for-the-badge" height="20">](https://github.com/dtolnay/syn/actions?query=branch%3Amaster)
+
+ Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree
+ of Rust source code.
+@@ -46,10 +46,6 @@ contains some APIs that may be useful more generally.
+ [`syn::DeriveInput`]: https://docs.rs/syn/1.0/syn/struct.DeriveInput.html
+ [parser functions]: https://docs.rs/syn/1.0/syn/parse/index.html
+
+-If you get stuck with anything involving procedural macros in Rust I am happy to
+-provide help even if the issue is not related to Syn. Please file a ticket in
+-this repo.
+-
+ *Version requirement: Syn supports rustc 1.31 and up.*
+
+ [*Release notes*](https://github.com/dtolnay/syn/releases)
+@@ -88,8 +84,6 @@ proc-macro = true
+ ```
+
+ ```rust
+-extern crate proc_macro;
+-
+ use proc_macro::TokenStream;
+ use quote::quote;
+ use syn::{parse_macro_input, DeriveInput};
+@@ -271,7 +265,7 @@ points, which are required by the language to use `proc_macro::TokenStream`.
+ The proc-macro2 crate will automatically detect and use the compiler's data
+ structures when a procedural macro is active.
+
+-[proc-macro2]: https://docs.rs/proc-macro2/1.0.0/proc_macro2/
++[proc-macro2]: https://docs.rs/proc-macro2/1.0/proc_macro2/
+
+ <br>
+
+diff --git a/third_party/rust/syn/benches/file.rs b/third_party/rust/syn/benches/file.rs
+index 08ecd90960..58ab8df297 100644
+--- mozilla-release/third_party/rust/syn/benches/file.rs
++++ mozilla-release/third_party/rust/syn/benches/file.rs
+@@ -1,9 +1,16 @@
+ // $ cargo bench --features full --bench file
+
+ #![feature(rustc_private, test)]
++#![recursion_limit = "1024"]
+
+ extern crate test;
+
++#[macro_use]
++#[path = "../tests/macros/mod.rs"]
++mod macros;
++
++#[path = "../tests/common/mod.rs"]
++mod common;
+ #[path = "../tests/repo/mod.rs"]
+ pub mod repo;
+
+diff --git a/third_party/rust/syn/benches/rust.rs b/third_party/rust/syn/benches/rust.rs
+index e3d9cd29ba..50e1a7f601 100644
+--- mozilla-release/third_party/rust/syn/benches/rust.rs
++++ mozilla-release/third_party/rust/syn/benches/rust.rs
+@@ -4,7 +4,14 @@
+ // $ RUSTFLAGS='--cfg syn_only' cargo build --release --features full --bench rust
+
+ #![cfg_attr(not(syn_only), feature(rustc_private))]
++#![recursion_limit = "1024"]
+
++#[macro_use]
++#[path = "../tests/macros/mod.rs"]
++mod macros;
++
++#[path = "../tests/common/mod.rs"]
++mod common;
+ #[path = "../tests/repo/mod.rs"]
+ mod repo;
+
+@@ -28,31 +35,35 @@ mod syn_parse {
+ }
+
+ #[cfg(not(syn_only))]
+-mod libsyntax_parse {
++mod librustc_parse {
+ extern crate rustc_data_structures;
+- extern crate syntax;
+- extern crate syntax_pos;
++ extern crate rustc_errors;
++ extern crate rustc_parse;
++ extern crate rustc_session;
++ extern crate rustc_span;
+
+ use rustc_data_structures::sync::Lrc;
+- use syntax::edition::Edition;
+- use syntax::errors::{emitter::Emitter, DiagnosticBuilder, Handler};
+- use syntax::parse::ParseSess;
+- use syntax::source_map::{FilePathMapping, SourceMap};
+- use syntax_pos::FileName;
++ use rustc_errors::{emitter::Emitter, Diagnostic, Handler};
++ use rustc_session::parse::ParseSess;
++ use rustc_span::source_map::{FilePathMapping, SourceMap};
++ use rustc_span::{edition::Edition, FileName};
+
+ pub fn bench(content: &str) -> Result<(), ()> {
+ struct SilentEmitter;
+
+ impl Emitter for SilentEmitter {
+- fn emit_diagnostic(&mut self, _db: &DiagnosticBuilder) {}
++ fn emit_diagnostic(&mut self, _diag: &Diagnostic) {}
++ fn source_map(&self) -> Option<&Lrc<SourceMap>> {
++ None
++ }
+ }
+
+- syntax::with_globals(Edition::Edition2018, || {
++ rustc_span::with_session_globals(Edition::Edition2018, || {
+ let cm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
+ let emitter = Box::new(SilentEmitter);
+ let handler = Handler::with_emitter(false, None, emitter);
+ let sess = ParseSess::with_span_handler(handler, cm);
+- if let Err(mut diagnostic) = syntax::parse::parse_crate_from_source_str(
++ if let Err(mut diagnostic) = rustc_parse::parse_crate_from_source_str(
+ FileName::Custom("bench".to_owned()),
+ content.to_owned(),
+ &sess,
+@@ -104,11 +115,11 @@ fn main() {
+ repo::clone_rust();
+
+ macro_rules! testcases {
+- ($($(#[$cfg:meta])* $name:path,)*) => {
++ ($($(#[$cfg:meta])* $name:ident,)*) => {
+ vec![
+ $(
+ $(#[$cfg])*
+- (stringify!($name), $name as fn(&str) -> Result<(), ()>),
++ (stringify!($name), $name::bench as fn(&str) -> Result<(), ()>),
+ )*
+ ]
+ };
+@@ -128,12 +139,12 @@ fn main() {
+
+ for (name, f) in testcases!(
+ #[cfg(not(syn_only))]
+- read_from_disk::bench,
++ read_from_disk,
+ #[cfg(not(syn_only))]
+- tokenstream_parse::bench,
+- syn_parse::bench,
++ tokenstream_parse,
++ syn_parse,
+ #[cfg(not(syn_only))]
+- libsyntax_parse::bench,
++ librustc_parse,
+ ) {
+ eprint!("{:20}", format!("{}:", name));
+ let elapsed = exec(f);
+diff --git a/third_party/rust/syn/build.rs b/third_party/rust/syn/build.rs
+index c0f9ed3406..cf7681c3f9 100644
+--- mozilla-release/third_party/rust/syn/build.rs
++++ mozilla-release/third_party/rust/syn/build.rs
+@@ -1,6 +1,6 @@
+ use std::env;
+ use std::process::Command;
+-use std::str::{self, FromStr};
++use std::str;
+
+ // The rustc-cfg strings below are *not* public API. Please let us know by
+ // opening a GitHub issue if your build environment requires some way to enable
+@@ -26,38 +26,14 @@ struct Compiler {
+ }
+
+ fn rustc_version() -> Option<Compiler> {
+- let rustc = match env::var_os("RUSTC") {
+- Some(rustc) => rustc,
+- None => return None,
+- };
+-
+- let output = match Command::new(rustc).arg("--version").output() {
+- Ok(output) => output,
+- Err(_) => return None,
+- };
+-
+- let version = match str::from_utf8(&output.stdout) {
+- Ok(version) => version,
+- Err(_) => return None,
+- };
+-
++ let rustc = env::var_os("RUSTC")?;
++ let output = Command::new(rustc).arg("--version").output().ok()?;
++ let version = str::from_utf8(&output.stdout).ok()?;
+ let mut pieces = version.split('.');
+ if pieces.next() != Some("rustc 1") {
+ return None;
+ }
+-
+- let next = match pieces.next() {
+- Some(next) => next,
+- None => return None,
+- };
+-
+- let minor = match u32::from_str(next) {
+- Ok(minor) => minor,
+- Err(_) => return None,
+- };
+-
+- Some(Compiler {
+- minor: minor,
+- nightly: version.contains("nightly"),
+- })
++ let minor = pieces.next()?.parse().ok()?;
++ let nightly = version.contains("nightly");
++ Some(Compiler { minor, nightly })
+ }
+diff --git a/third_party/rust/syn/src/attr.rs b/third_party/rust/syn/src/attr.rs
+index 34009deabc..fa4f1cb2a3 100644
+--- mozilla-release/third_party/rust/syn/src/attr.rs
++++ mozilla-release/third_party/rust/syn/src/attr.rs
+@@ -9,15 +9,11 @@ use proc_macro2::TokenStream;
+ use crate::parse::{Parse, ParseBuffer, ParseStream, Parser, Result};
+ #[cfg(feature = "parsing")]
+ use crate::punctuated::Pair;
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
+-#[cfg(feature = "extra-traits")]
+-use std::hash::{Hash, Hasher};
+
+ ast_struct! {
+ /// An attribute like `#[repr(transparent)]`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// <br>
+@@ -111,7 +107,46 @@ ast_struct! {
+ ///
+ /// [`parse_meta()`]: Attribute::parse_meta
+ /// [`parse_args()`]: Attribute::parse_args
+- pub struct Attribute #manual_extra_traits {
++ ///
++ /// <p><br></p>
++ ///
++ /// # Doc comments
++ ///
++ /// The compiler transforms doc comments, such as `/// comment` and `/*!
++ /// comment */`, into attributes before macros are expanded. Each comment is
++ /// expanded into an attribute of the form `#[doc = r"comment"]`.
++ ///
++ /// As an example, the following `mod` items are expanded identically:
++ ///
++ /// ```
++ /// # use syn::{ItemMod, parse_quote};
++ /// let doc: ItemMod = parse_quote! {
++ /// /// Single line doc comments
++ /// /// We write so many!
++ /// /**
++ /// * Multi-line comments...
++ /// * May span many lines
++ /// */
++ /// mod example {
++ /// //! Of course, they can be inner too
++ /// /*! And fit in a single line */
++ /// }
++ /// };
++ /// let attr: ItemMod = parse_quote! {
++ /// #[doc = r" Single line doc comments"]
++ /// #[doc = r" We write so many!"]
++ /// #[doc = r"
++ /// * Multi-line comments...
++ /// * May span many lines
++ /// "]
++ /// mod example {
++ /// #![doc = r" Of course, they can be inner too"]
++ /// #![doc = r" And fit in a single line "]
++ /// }
++ /// };
++ /// assert_eq!(doc, attr);
++ /// ```
++ pub struct Attribute {
+ pub pound_token: Token![#],
+ pub style: AttrStyle,
+ pub bracket_token: token::Bracket,
+@@ -120,39 +155,11 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Attribute {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Attribute {
+- fn eq(&self, other: &Self) -> bool {
+- self.style == other.style
+- && self.pound_token == other.pound_token
+- && self.bracket_token == other.bracket_token
+- && self.path == other.path
+- && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Attribute {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- self.style.hash(state);
+- self.pound_token.hash(state);
+- self.bracket_token.hash(state);
+- self.path.hash(state);
+- TokenStreamHelper(&self.tokens).hash(state);
+- }
+-}
+-
+ impl Attribute {
+ /// Parses the content of the attribute, consisting of the path and tokens,
+ /// as a [`Meta`] if possible.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_meta(&self) -> Result<Meta> {
+@@ -199,7 +206,7 @@ impl Attribute {
+ /// ^^^^^^^^^ what gets parsed
+ /// ```
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_args<T: Parse>(&self) -> Result<T> {
+@@ -208,7 +215,7 @@ impl Attribute {
+
+ /// Parse the arguments to the attribute using the given parser.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_args_with<F: Parser>(&self, parser: F) -> Result<F::Output> {
+@@ -221,7 +228,7 @@ impl Attribute {
+
+ /// Parses zero or more outer attributes from the stream.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_outer(input: ParseStream) -> Result<Vec<Self>> {
+@@ -234,7 +241,7 @@ impl Attribute {
+
+ /// Parses zero or more inner attributes from the stream.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_inner(input: ParseStream) -> Result<Vec<Self>> {
+@@ -247,7 +254,7 @@ impl Attribute {
+ }
+
+ #[cfg(feature = "parsing")]
+-fn error_expected_args(attr: &Attribute) -> Error {
++fn expected_parentheses(attr: &Attribute) -> String {
+ let style = match attr.style {
+ AttrStyle::Outer => "#",
+ AttrStyle::Inner(_) => "#!",
+@@ -261,19 +268,23 @@ fn error_expected_args(attr: &Attribute) -> Error {
+ path += &segment.ident.to_string();
+ }
+
+- let msg = format!("expected attribute arguments: {}[{}(...)]", style, path);
+-
+- #[cfg(feature = "printing")]
+- return Error::new_spanned(attr, msg);
+-
+- #[cfg(not(feature = "printing"))]
+- return Error::new(attr.bracket_token.span, msg);
++ format!("{}[{}(...)]", style, path)
+ }
+
+ #[cfg(feature = "parsing")]
+ fn enter_args<'a>(attr: &Attribute, input: ParseStream<'a>) -> Result<ParseBuffer<'a>> {
+ if input.is_empty() {
+- return Err(error_expected_args(attr));
++ let expected = expected_parentheses(attr);
++ let msg = format!("expected attribute arguments in parentheses: {}", expected);
++ return Err(crate::error::new2(
++ attr.pound_token.span,
++ attr.bracket_token.span,
++ msg,
++ ));
++ } else if input.peek(Token![=]) {
++ let expected = expected_parentheses(attr);
++ let msg = format!("expected parentheses: {}", expected);
++ return Err(input.error(msg));
+ };
+
+ let content;
+@@ -298,7 +309,7 @@ ast_enum! {
+ /// Distinguishes between attributes that decorate an item and attributes
+ /// that are contained within an item.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Outer attributes
+@@ -312,7 +323,6 @@ ast_enum! {
+ /// - `#![feature(proc_macro)]`
+ /// - `//! # Example`
+ /// - `/*! Please file an issue */`
+- #[cfg_attr(feature = "clone-impls", derive(Copy))]
+ pub enum AttrStyle {
+ Outer,
+ Inner(Token![!]),
+@@ -322,7 +332,7 @@ ast_enum! {
+ ast_enum_of_structs! {
+ /// Content of a compile-time structured attribute.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// ## Path
+@@ -360,7 +370,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A structured list within an attribute, like `derive(Copy, Clone)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct MetaList {
+ pub path: Path,
+@@ -372,7 +382,7 @@ ast_struct! {
+ ast_struct! {
+ /// A name-value pair within an attribute, like `feature = "nightly"`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct MetaNameValue {
+ pub path: Path,
+@@ -398,7 +408,7 @@ impl Meta {
+ ast_enum_of_structs! {
+ /// Element of a compile-time attribute list.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum NestedMeta {
+ /// A structured meta item, like the `Copy` in `#[derive(Copy)]` which
+@@ -429,8 +439,8 @@ ast_enum_of_structs! {
+ /// as type `AttributeArgs`.
+ ///
+ /// ```
+-/// extern crate proc_macro;
+-///
++/// # extern crate proc_macro;
++/// #
+ /// use proc_macro::TokenStream;
+ /// use syn::{parse_macro_input, AttributeArgs, ItemFn};
+ ///
+@@ -464,7 +474,7 @@ where
+ fn is_outer(attr: &&Attribute) -> bool {
+ match attr.style {
+ AttrStyle::Outer => true,
+- _ => false,
++ AttrStyle::Inner(_) => false,
+ }
+ }
+ self.into_iter().filter(is_outer)
+@@ -474,7 +484,7 @@ where
+ fn is_inner(attr: &&Attribute) -> bool {
+ match attr.style {
+ AttrStyle::Inner(_) => true,
+- _ => false,
++ AttrStyle::Outer => false,
+ }
+ }
+ self.into_iter().filter(is_inner)
+diff --git a/third_party/rust/syn/src/buffer.rs b/third_party/rust/syn/src/buffer.rs
+index 551a5ac816..a461cc49ea 100644
+--- mozilla-release/third_party/rust/syn/src/buffer.rs
++++ mozilla-release/third_party/rust/syn/src/buffer.rs
+@@ -1,7 +1,7 @@
+ //! A stably addressed token buffer supporting efficient traversal based on a
+ //! cheaply copyable cursor.
+ //!
+-//! *This module is available if Syn is built with the `"parsing"` feature.*
++//! *This module is available only if Syn is built with the `"parsing"` feature.*
+
+ // This module is heavily commented as it contains most of the unsafe code in
+ // Syn, and caution should be used when editing it. The public-facing interface
+@@ -36,7 +36,7 @@ enum Entry {
+ /// `TokenStream` which requires a deep copy in order to traverse more than
+ /// once.
+ ///
+-/// *This type is available if Syn is built with the `"parsing"` feature.*
++/// *This type is available only if Syn is built with the `"parsing"` feature.*
+ pub struct TokenBuffer {
+ // NOTE: Do not derive clone on this - there are raw pointers inside which
+ // will be messed up. Moving the `TokenBuffer` itself is safe as the actual
+@@ -98,7 +98,7 @@ impl TokenBuffer {
+ /// Creates a `TokenBuffer` containing all the tokens from the input
+ /// `TokenStream`.
+ ///
+- /// *This method is available if Syn is built with both the `"parsing"` and
++ /// *This method is available only if Syn is built with both the `"parsing"` and
+ /// `"proc-macro"` features.*
+ #[cfg(all(
+ not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))),
+@@ -133,8 +133,7 @@ impl TokenBuffer {
+ /// Two cursors are equal if they have the same location in the same input
+ /// stream, and have the same scope.
+ ///
+-/// *This type is available if Syn is built with the `"parsing"` feature.*
+-#[derive(Copy, Clone, Eq, PartialEq)]
++/// *This type is available only if Syn is built with the `"parsing"` feature.*
+ pub struct Cursor<'a> {
+ // The current entry which the `Cursor` is pointing at.
+ ptr: *const Entry,
+@@ -201,13 +200,13 @@ impl<'a> Cursor<'a> {
+ Cursor::create(self.ptr.offset(1), self.scope)
+ }
+
+- /// If the cursor is looking at a `None`-delimited group, move it to look at
+- /// the first token inside instead. If the group is empty, this will move
++ /// While the cursor is looking at a `None`-delimited group, move it to look
++ /// at the first token inside instead. If the group is empty, this will move
+ /// the cursor past the `None`-delimited group.
+ ///
+ /// WARNING: This mutates its argument.
+ fn ignore_none(&mut self) {
+- if let Entry::Group(group, buf) = self.entry() {
++ while let Entry::Group(group, buf) = self.entry() {
+ if group.delimiter() == Delimiter::None {
+ // NOTE: We call `Cursor::create` here to make sure that
+ // situations where we should immediately exit the span after
+@@ -215,13 +214,14 @@ impl<'a> Cursor<'a> {
+ unsafe {
+ *self = Cursor::create(&buf.data[0], self.scope);
+ }
++ } else {
++ break;
+ }
+ }
+ }
+
+ /// Checks whether the cursor is currently pointing at the end of its valid
+ /// scope.
+- #[inline]
+ pub fn eof(self) -> bool {
+ // We're at eof if we're at the end of our scope.
+ self.ptr == self.scope
+@@ -342,6 +342,44 @@ impl<'a> Cursor<'a> {
+ Entry::End(..) => Span::call_site(),
+ }
+ }
++
++ /// Skip over the next token without cloning it. Returns `None` if this
++ /// cursor points to eof.
++ ///
++ /// This method treats `'lifetimes` as a single token.
++ pub(crate) fn skip(self) -> Option<Cursor<'a>> {
++ match self.entry() {
++ Entry::End(..) => None,
++
++ // Treat lifetimes as a single tt for the purposes of 'skip'.
++ Entry::Punct(op) if op.as_char() == '\'' && op.spacing() == Spacing::Joint => {
++ let next = unsafe { self.bump() };
++ match next.entry() {
++ Entry::Ident(_) => Some(unsafe { next.bump() }),
++ _ => Some(next),
++ }
++ }
++ _ => Some(unsafe { self.bump() }),
++ }
++ }
++}
++
++impl<'a> Copy for Cursor<'a> {}
++
++impl<'a> Clone for Cursor<'a> {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++
++impl<'a> Eq for Cursor<'a> {}
++
++impl<'a> PartialEq for Cursor<'a> {
++ fn eq(&self, other: &Self) -> bool {
++ let Cursor { ptr, scope, marker } = self;
++ let _ = marker;
++ *ptr == other.ptr && *scope == other.scope
++ }
+ }
+
+ pub(crate) fn same_scope(a: Cursor, b: Cursor) -> bool {
+diff --git a/third_party/rust/syn/src/custom_keyword.rs b/third_party/rust/syn/src/custom_keyword.rs
+index 200e8478ef..a33044a564 100644
+--- mozilla-release/third_party/rust/syn/src/custom_keyword.rs
++++ mozilla-release/third_party/rust/syn/src/custom_keyword.rs
+@@ -86,7 +86,7 @@
+ /// }
+ /// }
+ /// ```
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! custom_keyword {
+ ($ident:ident) => {
+ #[allow(non_camel_case_types)]
+@@ -95,7 +95,7 @@ macro_rules! custom_keyword {
+ }
+
+ #[doc(hidden)]
+- #[allow(non_snake_case)]
++ #[allow(dead_code, non_snake_case)]
+ pub fn $ident<__S: $crate::export::IntoSpans<[$crate::export::Span; 1]>>(
+ span: __S,
+ ) -> $ident {
+@@ -112,10 +112,10 @@ macro_rules! custom_keyword {
+ }
+ }
+
+- impl_parse_for_custom_keyword!($ident);
+- impl_to_tokens_for_custom_keyword!($ident);
+- impl_clone_for_custom_keyword!($ident);
+- impl_extra_traits_for_custom_keyword!($ident);
++ $crate::impl_parse_for_custom_keyword!($ident);
++ $crate::impl_to_tokens_for_custom_keyword!($ident);
++ $crate::impl_clone_for_custom_keyword!($ident);
++ $crate::impl_extra_traits_for_custom_keyword!($ident);
+ };
+ }
+
+diff --git a/third_party/rust/syn/src/custom_punctuation.rs b/third_party/rust/syn/src/custom_punctuation.rs
+index 29fa448bd8..70dff42851 100644
+--- mozilla-release/third_party/rust/syn/src/custom_punctuation.rs
++++ mozilla-release/third_party/rust/syn/src/custom_punctuation.rs
+@@ -74,19 +74,19 @@
+ /// let _: PathSegments = syn::parse_str(input).unwrap();
+ /// }
+ /// ```
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! custom_punctuation {
+ ($ident:ident, $($tt:tt)+) => {
+ pub struct $ident {
+- pub spans: custom_punctuation_repr!($($tt)+),
++ pub spans: $crate::custom_punctuation_repr!($($tt)+),
+ }
+
+ #[doc(hidden)]
+- #[allow(non_snake_case)]
+- pub fn $ident<__S: $crate::export::IntoSpans<custom_punctuation_repr!($($tt)+)>>(
++ #[allow(dead_code, non_snake_case)]
++ pub fn $ident<__S: $crate::export::IntoSpans<$crate::custom_punctuation_repr!($($tt)+)>>(
+ spans: __S,
+ ) -> $ident {
+- let _validate_len = 0 $(+ custom_punctuation_len!(strict, $tt))*;
++ let _validate_len = 0 $(+ $crate::custom_punctuation_len!(strict, $tt))*;
+ $ident {
+ spans: $crate::export::IntoSpans::into_spans(spans)
+ }
+@@ -98,33 +98,33 @@ macro_rules! custom_punctuation {
+ }
+ }
+
+- impl_parse_for_custom_punctuation!($ident, $($tt)+);
+- impl_to_tokens_for_custom_punctuation!($ident, $($tt)+);
+- impl_clone_for_custom_punctuation!($ident, $($tt)+);
+- impl_extra_traits_for_custom_punctuation!($ident, $($tt)+);
++ $crate::impl_parse_for_custom_punctuation!($ident, $($tt)+);
++ $crate::impl_to_tokens_for_custom_punctuation!($ident, $($tt)+);
++ $crate::impl_clone_for_custom_punctuation!($ident, $($tt)+);
++ $crate::impl_extra_traits_for_custom_punctuation!($ident, $($tt)+);
+ };
+ }
+
+ // Not public API.
+ #[cfg(feature = "parsing")]
+ #[doc(hidden)]
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! impl_parse_for_custom_punctuation {
+ ($ident:ident, $($tt:tt)+) => {
+ impl $crate::token::CustomToken for $ident {
+ fn peek(cursor: $crate::buffer::Cursor) -> bool {
+- $crate::token::parsing::peek_punct(cursor, stringify_punct!($($tt)+))
++ $crate::token::parsing::peek_punct(cursor, $crate::stringify_punct!($($tt)+))
+ }
+
+ fn display() -> &'static $crate::export::str {
+- custom_punctuation_concat!("`", stringify_punct!($($tt)+), "`")
++ concat!("`", $crate::stringify_punct!($($tt)+), "`")
+ }
+ }
+
+ impl $crate::parse::Parse for $ident {
+ fn parse(input: $crate::parse::ParseStream) -> $crate::parse::Result<$ident> {
+- let spans: custom_punctuation_repr!($($tt)+) =
+- $crate::token::parsing::punct(input, stringify_punct!($($tt)+))?;
++ let spans: $crate::custom_punctuation_repr!($($tt)+) =
++ $crate::token::parsing::punct(input, $crate::stringify_punct!($($tt)+))?;
+ Ok($ident(spans))
+ }
+ }
+@@ -142,12 +142,12 @@ macro_rules! impl_parse_for_custom_punctuation {
+ // Not public API.
+ #[cfg(feature = "printing")]
+ #[doc(hidden)]
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! impl_to_tokens_for_custom_punctuation {
+ ($ident:ident, $($tt:tt)+) => {
+ impl $crate::export::ToTokens for $ident {
+ fn to_tokens(&self, tokens: &mut $crate::export::TokenStream2) {
+- $crate::token::printing::punct(stringify_punct!($($tt)+), &self.spans, tokens)
++ $crate::token::printing::punct($crate::stringify_punct!($($tt)+), &self.spans, tokens)
+ }
+ }
+ };
+@@ -221,16 +221,16 @@ macro_rules! impl_extra_traits_for_custom_punctuation {
+
+ // Not public API.
+ #[doc(hidden)]
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! custom_punctuation_repr {
+ ($($tt:tt)+) => {
+- [$crate::export::Span; 0 $(+ custom_punctuation_len!(lenient, $tt))+]
++ [$crate::export::Span; 0 $(+ $crate::custom_punctuation_len!(lenient, $tt))+]
+ };
+ }
+
+ // Not public API.
+ #[doc(hidden)]
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ #[rustfmt::skip]
+ macro_rules! custom_punctuation_len {
+ ($mode:ident, +) => { 1 };
+@@ -279,7 +279,7 @@ macro_rules! custom_punctuation_len {
+ ($mode:ident, -=) => { 2 };
+ ($mode:ident, ~) => { 1 };
+ (lenient, $tt:tt) => { 0 };
+- (strict, $tt:tt) => {{ custom_punctuation_unexpected!($tt); 0 }};
++ (strict, $tt:tt) => {{ $crate::custom_punctuation_unexpected!($tt); 0 }};
+ }
+
+ // Not public API.
+@@ -297,13 +297,3 @@ macro_rules! stringify_punct {
+ concat!($(stringify!($tt)),+)
+ };
+ }
+-
+-// Not public API.
+-// Without this, local_inner_macros breaks when looking for concat!
+-#[doc(hidden)]
+-#[macro_export]
+-macro_rules! custom_punctuation_concat {
+- ($($tt:tt)*) => {
+- concat!($($tt)*)
+- };
+-}
+diff --git a/third_party/rust/syn/src/data.rs b/third_party/rust/syn/src/data.rs
+index be43679874..b217b8ca6f 100644
+--- mozilla-release/third_party/rust/syn/src/data.rs
++++ mozilla-release/third_party/rust/syn/src/data.rs
+@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated;
+ ast_struct! {
+ /// An enum variant.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Variant {
+ /// Attributes tagged on the variant.
+@@ -24,7 +24,7 @@ ast_struct! {
+ ast_enum_of_structs! {
+ /// Data stored within an enum variant or struct.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Syntax tree enum
+@@ -52,7 +52,7 @@ ast_struct! {
+ /// Named fields of a struct or struct variant such as `Point { x: f64,
+ /// y: f64 }`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct FieldsNamed {
+ pub brace_token: token::Brace,
+@@ -63,7 +63,7 @@ ast_struct! {
+ ast_struct! {
+ /// Unnamed fields of a tuple struct or tuple variant such as `Some(T)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct FieldsUnnamed {
+ pub paren_token: token::Paren,
+@@ -93,6 +93,24 @@ impl Fields {
+ Fields::Unnamed(f) => f.unnamed.iter_mut(),
+ }
+ }
++
++ /// Returns the number of fields.
++ pub fn len(&self) -> usize {
++ match self {
++ Fields::Unit => 0,
++ Fields::Named(f) => f.named.len(),
++ Fields::Unnamed(f) => f.unnamed.len(),
++ }
++ }
++
++ /// Returns `true` if there are zero fields.
++ pub fn is_empty(&self) -> bool {
++ match self {
++ Fields::Unit => true,
++ Fields::Named(f) => f.named.is_empty(),
++ Fields::Unnamed(f) => f.unnamed.is_empty(),
++ }
++ }
+ }
+
+ impl IntoIterator for Fields {
+@@ -129,7 +147,7 @@ impl<'a> IntoIterator for &'a mut Fields {
+ ast_struct! {
+ /// A field of a struct or enum variant.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Field {
+ /// Attributes tagged on the field.
+@@ -154,7 +172,7 @@ ast_enum_of_structs! {
+ /// The visibility level of an item: inherited or `pub` or
+ /// `pub(restricted)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Syntax tree enum
+@@ -184,7 +202,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A public visibility level: `pub`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct VisPublic {
+ pub pub_token: Token![pub],
+@@ -194,7 +212,7 @@ ast_struct! {
+ ast_struct! {
+ /// A crate-level visibility: `crate`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct VisCrate {
+ pub crate_token: Token![crate],
+@@ -205,7 +223,7 @@ ast_struct! {
+ /// A visibility level restricted to some path: `pub(self)` or
+ /// `pub(super)` or `pub(crate)` or `pub(in some::module)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct VisRestricted {
+ pub pub_token: Token![pub],
+@@ -220,12 +238,15 @@ pub mod parsing {
+ use super::*;
+
+ use crate::ext::IdentExt;
++ use crate::parse::discouraged::Speculative;
+ use crate::parse::{Parse, ParseStream, Result};
+
+ impl Parse for Variant {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let attrs = input.call(Attribute::parse_outer)?;
++ let _visibility: Visibility = input.parse()?;
+ Ok(Variant {
+- attrs: input.call(Attribute::parse_outer)?,
++ attrs,
+ ident: input.parse()?,
+ fields: {
+ if input.peek(token::Brace) {
+@@ -295,6 +316,17 @@ pub mod parsing {
+
+ impl Parse for Visibility {
+ fn parse(input: ParseStream) -> Result<Self> {
++ // Recognize an empty None-delimited group, as produced by a $:vis
++ // matcher that matched no tokens.
++ if input.peek(token::Group) {
++ let ahead = input.fork();
++ let group = crate::group::parse_group(&ahead)?;
++ if group.content.is_empty() {
++ input.advance_to(&ahead);
++ return Ok(Visibility::Inherited);
++ }
++ }
++
+ if input.peek(Token![pub]) {
+ Self::parse_pub(input)
+ } else if input.peek(Token![crate]) {
+@@ -310,27 +342,39 @@ pub mod parsing {
+ let pub_token = input.parse::<Token![pub]>()?;
+
+ if input.peek(token::Paren) {
+- // TODO: optimize using advance_to
+ let ahead = input.fork();
+- let mut content;
+- parenthesized!(content in ahead);
+
++ let content;
++ let paren_token = parenthesized!(content in ahead);
+ if content.peek(Token![crate])
+ || content.peek(Token![self])
+ || content.peek(Token![super])
+ {
+- return Ok(Visibility::Restricted(VisRestricted {
+- pub_token,
+- paren_token: parenthesized!(content in input),
+- in_token: None,
+- path: Box::new(Path::from(content.call(Ident::parse_any)?)),
+- }));
++ let path = content.call(Ident::parse_any)?;
++
++ // Ensure there are no additional tokens within `content`.
++ // Without explicitly checking, we may misinterpret a tuple
++ // field as a restricted visibility, causing a parse error.
++ // e.g. `pub (crate::A, crate::B)` (Issue #720).
++ if content.is_empty() {
++ input.advance_to(&ahead);
++ return Ok(Visibility::Restricted(VisRestricted {
++ pub_token,
++ paren_token,
++ in_token: None,
++ path: Box::new(Path::from(path)),
++ }));
++ }
+ } else if content.peek(Token![in]) {
++ let in_token: Token![in] = content.parse()?;
++ let path = content.call(Path::parse_mod_style)?;
++
++ input.advance_to(&ahead);
+ return Ok(Visibility::Restricted(VisRestricted {
+ pub_token,
+- paren_token: parenthesized!(content in input),
+- in_token: Some(content.parse()?),
+- path: Box::new(content.call(Path::parse_mod_style)?),
++ paren_token,
++ in_token: Some(in_token),
++ path: Box::new(path),
+ }));
+ }
+ }
+@@ -347,6 +391,14 @@ pub mod parsing {
+ }))
+ }
+ }
++
++ #[cfg(feature = "full")]
++ pub(crate) fn is_some(&self) -> bool {
++ match self {
++ Visibility::Inherited => false,
++ _ => true,
++ }
++ }
+ }
+ }
+
+diff --git a/third_party/rust/syn/src/derive.rs b/third_party/rust/syn/src/derive.rs
+index 8cb9cf7b6d..3fa9d89a93 100644
+--- mozilla-release/third_party/rust/syn/src/derive.rs
++++ mozilla-release/third_party/rust/syn/src/derive.rs
+@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated;
+ ast_struct! {
+ /// Data structure sent to a `proc_macro_derive` macro.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` feature.*
++ /// *This type is available only if Syn is built with the `"derive"` feature.*
+ pub struct DeriveInput {
+ /// Attributes tagged on the whole struct or enum.
+ pub attrs: Vec<Attribute>,
+@@ -26,7 +26,7 @@ ast_struct! {
+ ast_enum_of_structs! {
+ /// The storage of a struct, enum or union data structure.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` feature.*
++ /// *This type is available only if Syn is built with the `"derive"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -53,7 +53,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A struct input to a `proc_macro_derive` macro.
+ ///
+- /// *This type is available if Syn is built with the `"derive"`
++ /// *This type is available only if Syn is built with the `"derive"`
+ /// feature.*
+ pub struct DataStruct {
+ pub struct_token: Token![struct],
+@@ -65,7 +65,7 @@ ast_struct! {
+ ast_struct! {
+ /// An enum input to a `proc_macro_derive` macro.
+ ///
+- /// *This type is available if Syn is built with the `"derive"`
++ /// *This type is available only if Syn is built with the `"derive"`
+ /// feature.*
+ pub struct DataEnum {
+ pub enum_token: Token![enum],
+@@ -77,7 +77,7 @@ ast_struct! {
+ ast_struct! {
+ /// An untagged union input to a `proc_macro_derive` macro.
+ ///
+- /// *This type is available if Syn is built with the `"derive"`
++ /// *This type is available only if Syn is built with the `"derive"`
+ /// feature.*
+ pub struct DataUnion {
+ pub union_token: Token![union],
+diff --git a/third_party/rust/syn/src/discouraged.rs b/third_party/rust/syn/src/discouraged.rs
+index 4d9ff93728..76c9fce6f8 100644
+--- mozilla-release/third_party/rust/syn/src/discouraged.rs
++++ mozilla-release/third_party/rust/syn/src/discouraged.rs
+@@ -16,7 +16,7 @@ pub trait Speculative {
+ /// syntax of the form `A* B*` for arbitrary syntax `A` and `B`. The problem
+ /// is that when the fork fails to parse an `A`, it's impossible to tell
+ /// whether that was because of a syntax error and the user meant to provide
+- /// an `A`, or that the `A`s are finished and its time to start parsing
++ /// an `A`, or that the `A`s are finished and it's time to start parsing
+ /// `B`s. Use with care.
+ ///
+ /// Also note that if `A` is a subset of `B`, `A* B*` can be parsed by
+@@ -72,7 +72,6 @@ pub trait Speculative {
+ /// || input.peek(Token![self])
+ /// || input.peek(Token![Self])
+ /// || input.peek(Token![crate])
+- /// || input.peek(Token![extern])
+ /// {
+ /// let ident = input.call(Ident::parse_any)?;
+ /// return Ok(PathSegment::from(ident));
+@@ -164,6 +163,30 @@ impl<'a> Speculative for ParseBuffer<'a> {
+ panic!("Fork was not derived from the advancing parse stream");
+ }
+
++ let (self_unexp, self_sp) = inner_unexpected(self);
++ let (fork_unexp, fork_sp) = inner_unexpected(fork);
++ if !Rc::ptr_eq(&self_unexp, &fork_unexp) {
++ match (fork_sp, self_sp) {
++ // Unexpected set on the fork, but not on `self`, copy it over.
++ (Some(span), None) => {
++ self_unexp.set(Unexpected::Some(span));
++ }
++ // Unexpected unset. Use chain to propagate errors from fork.
++ (None, None) => {
++ fork_unexp.set(Unexpected::Chain(self_unexp));
++
++ // Ensure toplevel 'unexpected' tokens from the fork don't
++ // bubble up the chain by replacing the root `unexpected`
++ // pointer, only 'unexpected' tokens from existing group
++ // parsers should bubble.
++ fork.unexpected
++ .set(Some(Rc::new(Cell::new(Unexpected::None))));
++ }
++ // Unexpected has been set on `self`. No changes needed.
++ (_, Some(_)) => {}
++ }
++ }
++
+ // See comment on `cell` in the struct definition.
+ self.cell
+ .set(unsafe { mem::transmute::<Cursor, Cursor<'static>>(fork.cursor()) })
+diff --git a/third_party/rust/syn/src/error.rs b/third_party/rust/syn/src/error.rs
+index 146d652299..dba34f9254 100644
+--- mozilla-release/third_party/rust/syn/src/error.rs
++++ mozilla-release/third_party/rust/syn/src/error.rs
+@@ -1,4 +1,3 @@
+-use std;
+ use std::fmt::{self, Debug, Display};
+ use std::iter::FromIterator;
+ use std::slice;
+@@ -32,8 +31,8 @@ pub type Result<T> = std::result::Result<T, Error>;
+ /// conversion to `compile_error!` automatically.
+ ///
+ /// ```
+-/// extern crate proc_macro;
+-///
++/// # extern crate proc_macro;
++/// #
+ /// use proc_macro::TokenStream;
+ /// use syn::{parse_macro_input, AttributeArgs, ItemFn};
+ ///
+@@ -82,7 +81,6 @@ pub type Result<T> = std::result::Result<T, Error>;
+ /// # }
+ /// # }
+ /// ```
+-#[derive(Clone)]
+ pub struct Error {
+ messages: Vec<ErrorMessage>,
+ }
+@@ -250,6 +248,17 @@ pub fn new_at<T: Display>(scope: Span, cursor: Cursor, message: T) -> Error {
+ }
+ }
+
++#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))]
++pub fn new2<T: Display>(start: Span, end: Span, message: T) -> Error {
++ Error {
++ messages: vec![ErrorMessage {
++ start_span: ThreadBound::new(start),
++ end_span: ThreadBound::new(end),
++ message: message.to_string(),
++ }],
++ }
++}
++
+ impl Debug for Error {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ if self.messages.len() == 1 {
+@@ -278,6 +287,14 @@ impl Display for Error {
+ }
+ }
+
++impl Clone for Error {
++ fn clone(&self) -> Self {
++ Error {
++ messages: self.messages.clone(),
++ }
++ }
++}
++
+ impl Clone for ErrorMessage {
+ fn clone(&self) -> Self {
+ let start = self
+@@ -355,3 +372,11 @@ impl<'a> Iterator for Iter<'a> {
+ })
+ }
+ }
++
++impl Extend<Error> for Error {
++ fn extend<T: IntoIterator<Item = Error>>(&mut self, iter: T) {
++ for err in iter {
++ self.combine(err);
++ }
++ }
++}
+diff --git a/third_party/rust/syn/src/expr.rs b/third_party/rust/syn/src/expr.rs
+index 2874a463aa..2fe0e0b5d8 100644
+--- mozilla-release/third_party/rust/syn/src/expr.rs
++++ mozilla-release/third_party/rust/syn/src/expr.rs
+@@ -1,18 +1,21 @@
+ use super::*;
+ use crate::punctuated::Punctuated;
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
++#[cfg(feature = "full")]
++use crate::reserved::Reserved;
+ use proc_macro2::{Span, TokenStream};
+-#[cfg(feature = "extra-traits")]
++#[cfg(feature = "printing")]
++use quote::IdentFragment;
++#[cfg(feature = "printing")]
++use std::fmt::{self, Display};
+ use std::hash::{Hash, Hasher};
+-#[cfg(all(feature = "parsing", feature = "full"))]
++#[cfg(feature = "parsing")]
+ use std::mem;
+
+ ast_enum_of_structs! {
+ /// A Rust expression.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
+- /// feature.*
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
++ /// feature, but most of the variants are not available unless "full" is enabled.*
+ ///
+ /// # Syntax tree enums
+ ///
+@@ -83,7 +86,7 @@ ast_enum_of_structs! {
+ /// A sign that you may not be choosing the right variable names is if you
+ /// see names getting repeated in your code, like accessing
+ /// `receiver.receiver` or `pat.pat` or `cond.cond`.
+- pub enum Expr #manual_extra_traits {
++ pub enum Expr {
+ /// A slice literal expression: `[a, b, c, d]`.
+ Array(ExprArray),
+
+@@ -228,7 +231,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A slice literal expression: `[a, b, c, d]`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprArray #full {
+ pub attrs: Vec<Attribute>,
+ pub bracket_token: token::Bracket,
+@@ -239,7 +242,7 @@ ast_struct! {
+ ast_struct! {
+ /// An assignment expression: `a = compute()`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprAssign #full {
+ pub attrs: Vec<Attribute>,
+ pub left: Box<Expr>,
+@@ -251,7 +254,7 @@ ast_struct! {
+ ast_struct! {
+ /// A compound assignment expression: `counter += 1`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprAssignOp #full {
+ pub attrs: Vec<Attribute>,
+ pub left: Box<Expr>,
+@@ -263,7 +266,7 @@ ast_struct! {
+ ast_struct! {
+ /// An async block: `async { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprAsync #full {
+ pub attrs: Vec<Attribute>,
+ pub async_token: Token![async],
+@@ -275,7 +278,7 @@ ast_struct! {
+ ast_struct! {
+ /// An await expression: `fut.await`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprAwait #full {
+ pub attrs: Vec<Attribute>,
+ pub base: Box<Expr>,
+@@ -287,7 +290,7 @@ ast_struct! {
+ ast_struct! {
+ /// A binary operation: `a + b`, `a * b`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprBinary {
+ pub attrs: Vec<Attribute>,
+@@ -300,7 +303,7 @@ ast_struct! {
+ ast_struct! {
+ /// A blocked scope: `{ ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprBlock #full {
+ pub attrs: Vec<Attribute>,
+ pub label: Option<Label>,
+@@ -311,7 +314,7 @@ ast_struct! {
+ ast_struct! {
+ /// A box expression: `box f`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprBox #full {
+ pub attrs: Vec<Attribute>,
+ pub box_token: Token![box],
+@@ -323,7 +326,7 @@ ast_struct! {
+ /// A `break`, with an optional label to break and an optional
+ /// expression.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprBreak #full {
+ pub attrs: Vec<Attribute>,
+ pub break_token: Token![break],
+@@ -335,7 +338,7 @@ ast_struct! {
+ ast_struct! {
+ /// A function call expression: `invoke(a, b)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprCall {
+ pub attrs: Vec<Attribute>,
+@@ -348,7 +351,7 @@ ast_struct! {
+ ast_struct! {
+ /// A cast expression: `foo as f64`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprCast {
+ pub attrs: Vec<Attribute>,
+@@ -361,7 +364,7 @@ ast_struct! {
+ ast_struct! {
+ /// A closure expression: `|a, b| a + b`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprClosure #full {
+ pub attrs: Vec<Attribute>,
+ pub asyncness: Option<Token![async]>,
+@@ -378,7 +381,7 @@ ast_struct! {
+ ast_struct! {
+ /// A `continue`, with an optional label.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprContinue #full {
+ pub attrs: Vec<Attribute>,
+ pub continue_token: Token![continue],
+@@ -390,7 +393,7 @@ ast_struct! {
+ /// Access of a named struct field (`obj.k`) or unnamed tuple struct
+ /// field (`obj.0`).
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprField {
+ pub attrs: Vec<Attribute>,
+ pub base: Box<Expr>,
+@@ -402,7 +405,7 @@ ast_struct! {
+ ast_struct! {
+ /// A for loop: `for pat in expr { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprForLoop #full {
+ pub attrs: Vec<Attribute>,
+ pub label: Option<Label>,
+@@ -421,7 +424,7 @@ ast_struct! {
+ /// of expressions and is related to `None`-delimited spans in a
+ /// `TokenStream`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprGroup #full {
+ pub attrs: Vec<Attribute>,
+ pub group_token: token::Group,
+@@ -436,7 +439,7 @@ ast_struct! {
+ /// The `else` branch expression may only be an `If` or `Block`
+ /// expression, not any of the other types of expression.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprIf #full {
+ pub attrs: Vec<Attribute>,
+ pub if_token: Token![if],
+@@ -449,7 +452,7 @@ ast_struct! {
+ ast_struct! {
+ /// A square bracketed indexing expression: `vector[2]`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprIndex {
+ pub attrs: Vec<Attribute>,
+@@ -462,7 +465,7 @@ ast_struct! {
+ ast_struct! {
+ /// A `let` guard: `let Some(x) = opt`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprLet #full {
+ pub attrs: Vec<Attribute>,
+ pub let_token: Token![let],
+@@ -475,7 +478,7 @@ ast_struct! {
+ ast_struct! {
+ /// A literal in place of an expression: `1`, `"foo"`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprLit {
+ pub attrs: Vec<Attribute>,
+@@ -486,7 +489,7 @@ ast_struct! {
+ ast_struct! {
+ /// Conditionless loop: `loop { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprLoop #full {
+ pub attrs: Vec<Attribute>,
+ pub label: Option<Label>,
+@@ -498,7 +501,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro invocation expression: `format!("{}", q)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprMacro #full {
+ pub attrs: Vec<Attribute>,
+ pub mac: Macro,
+@@ -508,7 +511,7 @@ ast_struct! {
+ ast_struct! {
+ /// A `match` expression: `match n { Some(n) => {}, None => {} }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprMatch #full {
+ pub attrs: Vec<Attribute>,
+ pub match_token: Token![match],
+@@ -521,7 +524,7 @@ ast_struct! {
+ ast_struct! {
+ /// A method call expression: `x.foo::<T>(a, b)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprMethodCall #full {
+ pub attrs: Vec<Attribute>,
+ pub receiver: Box<Expr>,
+@@ -536,7 +539,7 @@ ast_struct! {
+ ast_struct! {
+ /// A parenthesized expression: `(a + b)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprParen {
+ pub attrs: Vec<Attribute>,
+ pub paren_token: token::Paren,
+@@ -550,7 +553,7 @@ ast_struct! {
+ ///
+ /// A plain identifier like `x` is a path of length 1.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprPath {
+ pub attrs: Vec<Attribute>,
+@@ -562,7 +565,7 @@ ast_struct! {
+ ast_struct! {
+ /// A range expression: `1..2`, `1..`, `..2`, `1..=2`, `..=2`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprRange #full {
+ pub attrs: Vec<Attribute>,
+ pub from: Option<Box<Expr>>,
+@@ -574,7 +577,7 @@ ast_struct! {
+ ast_struct! {
+ /// A referencing operation: `&a` or `&mut a`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprReference #full {
+ pub attrs: Vec<Attribute>,
+ pub and_token: Token![&],
+@@ -587,7 +590,7 @@ ast_struct! {
+ ast_struct! {
+ /// An array literal constructed from one repeated element: `[0u8; N]`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprRepeat #full {
+ pub attrs: Vec<Attribute>,
+ pub bracket_token: token::Bracket,
+@@ -600,7 +603,7 @@ ast_struct! {
+ ast_struct! {
+ /// A `return`, with an optional value to be returned.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprReturn #full {
+ pub attrs: Vec<Attribute>,
+ pub return_token: Token![return],
+@@ -614,7 +617,7 @@ ast_struct! {
+ /// The `rest` provides the value of the remaining fields as in `S { a:
+ /// 1, b: 1, ..rest }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprStruct #full {
+ pub attrs: Vec<Attribute>,
+ pub path: Path,
+@@ -628,7 +631,7 @@ ast_struct! {
+ ast_struct! {
+ /// A try-expression: `expr?`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprTry #full {
+ pub attrs: Vec<Attribute>,
+ pub expr: Box<Expr>,
+@@ -639,7 +642,7 @@ ast_struct! {
+ ast_struct! {
+ /// A try block: `try { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprTryBlock #full {
+ pub attrs: Vec<Attribute>,
+ pub try_token: Token![try],
+@@ -650,7 +653,7 @@ ast_struct! {
+ ast_struct! {
+ /// A tuple expression: `(a, b, c, d)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprTuple #full {
+ pub attrs: Vec<Attribute>,
+ pub paren_token: token::Paren,
+@@ -661,7 +664,7 @@ ast_struct! {
+ ast_struct! {
+ /// A type ascription expression: `foo: f64`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprType #full {
+ pub attrs: Vec<Attribute>,
+ pub expr: Box<Expr>,
+@@ -673,7 +676,7 @@ ast_struct! {
+ ast_struct! {
+ /// A unary operation: `!x`, `*x`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ExprUnary {
+ pub attrs: Vec<Attribute>,
+@@ -685,7 +688,7 @@ ast_struct! {
+ ast_struct! {
+ /// An unsafe block: `unsafe { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprUnsafe #full {
+ pub attrs: Vec<Attribute>,
+ pub unsafe_token: Token![unsafe],
+@@ -696,7 +699,7 @@ ast_struct! {
+ ast_struct! {
+ /// A while loop: `while expr { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprWhile #full {
+ pub attrs: Vec<Attribute>,
+ pub label: Option<Label>,
+@@ -709,7 +712,7 @@ ast_struct! {
+ ast_struct! {
+ /// A yield expression: `yield expr`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ExprYield #full {
+ pub attrs: Vec<Attribute>,
+ pub yield_token: Token![yield],
+@@ -717,232 +720,6 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Expr {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Expr {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (Expr::Array(this), Expr::Array(other)) => this == other,
+- (Expr::Assign(this), Expr::Assign(other)) => this == other,
+- (Expr::AssignOp(this), Expr::AssignOp(other)) => this == other,
+- (Expr::Async(this), Expr::Async(other)) => this == other,
+- (Expr::Await(this), Expr::Await(other)) => this == other,
+- (Expr::Binary(this), Expr::Binary(other)) => this == other,
+- (Expr::Block(this), Expr::Block(other)) => this == other,
+- (Expr::Box(this), Expr::Box(other)) => this == other,
+- (Expr::Break(this), Expr::Break(other)) => this == other,
+- (Expr::Call(this), Expr::Call(other)) => this == other,
+- (Expr::Cast(this), Expr::Cast(other)) => this == other,
+- (Expr::Closure(this), Expr::Closure(other)) => this == other,
+- (Expr::Continue(this), Expr::Continue(other)) => this == other,
+- (Expr::Field(this), Expr::Field(other)) => this == other,
+- (Expr::ForLoop(this), Expr::ForLoop(other)) => this == other,
+- (Expr::Group(this), Expr::Group(other)) => this == other,
+- (Expr::If(this), Expr::If(other)) => this == other,
+- (Expr::Index(this), Expr::Index(other)) => this == other,
+- (Expr::Let(this), Expr::Let(other)) => this == other,
+- (Expr::Lit(this), Expr::Lit(other)) => this == other,
+- (Expr::Loop(this), Expr::Loop(other)) => this == other,
+- (Expr::Macro(this), Expr::Macro(other)) => this == other,
+- (Expr::Match(this), Expr::Match(other)) => this == other,
+- (Expr::MethodCall(this), Expr::MethodCall(other)) => this == other,
+- (Expr::Paren(this), Expr::Paren(other)) => this == other,
+- (Expr::Path(this), Expr::Path(other)) => this == other,
+- (Expr::Range(this), Expr::Range(other)) => this == other,
+- (Expr::Reference(this), Expr::Reference(other)) => this == other,
+- (Expr::Repeat(this), Expr::Repeat(other)) => this == other,
+- (Expr::Return(this), Expr::Return(other)) => this == other,
+- (Expr::Struct(this), Expr::Struct(other)) => this == other,
+- (Expr::Try(this), Expr::Try(other)) => this == other,
+- (Expr::TryBlock(this), Expr::TryBlock(other)) => this == other,
+- (Expr::Tuple(this), Expr::Tuple(other)) => this == other,
+- (Expr::Type(this), Expr::Type(other)) => this == other,
+- (Expr::Unary(this), Expr::Unary(other)) => this == other,
+- (Expr::Unsafe(this), Expr::Unsafe(other)) => this == other,
+- (Expr::Verbatim(this), Expr::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- (Expr::While(this), Expr::While(other)) => this == other,
+- (Expr::Yield(this), Expr::Yield(other)) => this == other,
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Expr {
+- fn hash<H>(&self, hash: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- Expr::Array(expr) => {
+- hash.write_u8(0);
+- expr.hash(hash);
+- }
+- Expr::Assign(expr) => {
+- hash.write_u8(1);
+- expr.hash(hash);
+- }
+- Expr::AssignOp(expr) => {
+- hash.write_u8(2);
+- expr.hash(hash);
+- }
+- Expr::Async(expr) => {
+- hash.write_u8(3);
+- expr.hash(hash);
+- }
+- Expr::Await(expr) => {
+- hash.write_u8(4);
+- expr.hash(hash);
+- }
+- Expr::Binary(expr) => {
+- hash.write_u8(5);
+- expr.hash(hash);
+- }
+- Expr::Block(expr) => {
+- hash.write_u8(6);
+- expr.hash(hash);
+- }
+- Expr::Box(expr) => {
+- hash.write_u8(7);
+- expr.hash(hash);
+- }
+- Expr::Break(expr) => {
+- hash.write_u8(8);
+- expr.hash(hash);
+- }
+- Expr::Call(expr) => {
+- hash.write_u8(9);
+- expr.hash(hash);
+- }
+- Expr::Cast(expr) => {
+- hash.write_u8(10);
+- expr.hash(hash);
+- }
+- Expr::Closure(expr) => {
+- hash.write_u8(11);
+- expr.hash(hash);
+- }
+- Expr::Continue(expr) => {
+- hash.write_u8(12);
+- expr.hash(hash);
+- }
+- Expr::Field(expr) => {
+- hash.write_u8(13);
+- expr.hash(hash);
+- }
+- Expr::ForLoop(expr) => {
+- hash.write_u8(14);
+- expr.hash(hash);
+- }
+- Expr::Group(expr) => {
+- hash.write_u8(15);
+- expr.hash(hash);
+- }
+- Expr::If(expr) => {
+- hash.write_u8(16);
+- expr.hash(hash);
+- }
+- Expr::Index(expr) => {
+- hash.write_u8(17);
+- expr.hash(hash);
+- }
+- Expr::Let(expr) => {
+- hash.write_u8(18);
+- expr.hash(hash);
+- }
+- Expr::Lit(expr) => {
+- hash.write_u8(19);
+- expr.hash(hash);
+- }
+- Expr::Loop(expr) => {
+- hash.write_u8(20);
+- expr.hash(hash);
+- }
+- Expr::Macro(expr) => {
+- hash.write_u8(21);
+- expr.hash(hash);
+- }
+- Expr::Match(expr) => {
+- hash.write_u8(22);
+- expr.hash(hash);
+- }
+- Expr::MethodCall(expr) => {
+- hash.write_u8(23);
+- expr.hash(hash);
+- }
+- Expr::Paren(expr) => {
+- hash.write_u8(24);
+- expr.hash(hash);
+- }
+- Expr::Path(expr) => {
+- hash.write_u8(25);
+- expr.hash(hash);
+- }
+- Expr::Range(expr) => {
+- hash.write_u8(26);
+- expr.hash(hash);
+- }
+- Expr::Reference(expr) => {
+- hash.write_u8(27);
+- expr.hash(hash);
+- }
+- Expr::Repeat(expr) => {
+- hash.write_u8(28);
+- expr.hash(hash);
+- }
+- Expr::Return(expr) => {
+- hash.write_u8(29);
+- expr.hash(hash);
+- }
+- Expr::Struct(expr) => {
+- hash.write_u8(30);
+- expr.hash(hash);
+- }
+- Expr::Try(expr) => {
+- hash.write_u8(31);
+- expr.hash(hash);
+- }
+- Expr::TryBlock(expr) => {
+- hash.write_u8(32);
+- expr.hash(hash);
+- }
+- Expr::Tuple(expr) => {
+- hash.write_u8(33);
+- expr.hash(hash);
+- }
+- Expr::Type(expr) => {
+- hash.write_u8(34);
+- expr.hash(hash);
+- }
+- Expr::Unary(expr) => {
+- hash.write_u8(35);
+- expr.hash(hash);
+- }
+- Expr::Unsafe(expr) => {
+- hash.write_u8(36);
+- expr.hash(hash);
+- }
+- Expr::Verbatim(expr) => {
+- hash.write_u8(37);
+- TokenStreamHelper(expr).hash(hash);
+- }
+- Expr::While(expr) => {
+- hash.write_u8(38);
+- expr.hash(hash);
+- }
+- Expr::Yield(expr) => {
+- hash.write_u8(39);
+- expr.hash(hash);
+- }
+- Expr::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ impl Expr {
+ #[cfg(all(feature = "parsing", feature = "full"))]
+ pub(crate) fn replace_attrs(&mut self, new: Vec<Attribute>) -> Vec<Attribute> {
+@@ -996,7 +773,7 @@ ast_enum! {
+ /// A struct or tuple struct field accessed in a struct literal or field
+ /// expression.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum Member {
+ /// A named field like `self.x`.
+@@ -1006,12 +783,50 @@ ast_enum! {
+ }
+ }
+
++impl Eq for Member {}
++
++impl PartialEq for Member {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Member::Named(this), Member::Named(other)) => this == other,
++ (Member::Unnamed(this), Member::Unnamed(other)) => this == other,
++ _ => false,
++ }
++ }
++}
++
++impl Hash for Member {
++ fn hash<H: Hasher>(&self, state: &mut H) {
++ match self {
++ Member::Named(m) => m.hash(state),
++ Member::Unnamed(m) => m.hash(state),
++ }
++ }
++}
++
++#[cfg(feature = "printing")]
++impl IdentFragment for Member {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Member::Named(m) => Display::fmt(m, formatter),
++ Member::Unnamed(m) => Display::fmt(&m.index, formatter),
++ }
++ }
++
++ fn span(&self) -> Option<Span> {
++ match self {
++ Member::Named(m) => Some(m.span()),
++ Member::Unnamed(m) => Some(m.span),
++ }
++ }
++}
++
+ ast_struct! {
+ /// The index of an unnamed tuple struct field.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- pub struct Index #manual_extra_traits {
++ pub struct Index {
+ pub index: u32,
+ pub span: Span,
+ }
+@@ -1027,28 +842,28 @@ impl From<usize> for Index {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+ impl Eq for Index {}
+
+-#[cfg(feature = "extra-traits")]
+ impl PartialEq for Index {
+ fn eq(&self, other: &Self) -> bool {
+ self.index == other.index
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+ impl Hash for Index {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+ self.index.hash(state);
+ }
+ }
+
+-#[cfg(feature = "full")]
+-ast_struct! {
+- #[derive(Default)]
+- pub struct Reserved {
+- private: (),
++#[cfg(feature = "printing")]
++impl IdentFragment for Index {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ Display::fmt(&self.index, formatter)
++ }
++
++ fn span(&self) -> Option<Span> {
++ Some(self.span)
+ }
+ }
+
+@@ -1057,7 +872,7 @@ ast_struct! {
+ /// The `::<>` explicit type parameters passed to a method call:
+ /// `parse::<u64>()`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct MethodTurbofish {
+ pub colon2_token: Token![::],
+ pub lt_token: Token![<],
+@@ -1070,7 +885,7 @@ ast_struct! {
+ ast_enum! {
+ /// An individual generic argument to a method, like `T`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub enum GenericMethodArgument {
+ /// A type argument.
+ Type(Type),
+@@ -1086,7 +901,7 @@ ast_enum! {
+ ast_struct! {
+ /// A field-value pair in a struct literal.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct FieldValue {
+ /// Attributes tagged on the field.
+ pub attrs: Vec<Attribute>,
+@@ -1107,7 +922,7 @@ ast_struct! {
+ ast_struct! {
+ /// A lifetime labeling a `for`, `while`, or `loop`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Label {
+ pub name: Lifetime,
+ pub colon_token: Token![:],
+@@ -1134,7 +949,7 @@ ast_struct! {
+ /// # }
+ /// ```
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Arm {
+ pub attrs: Vec<Attribute>,
+ pub pat: Pat,
+@@ -1149,8 +964,7 @@ ast_struct! {
+ ast_enum! {
+ /// Limit types of a range, inclusive or exclusive.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
+- #[cfg_attr(feature = "clone-impls", derive(Copy))]
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub enum RangeLimits {
+ /// Inclusive at the beginning, exclusive at the end.
+ HalfOpen(Token![..]),
+@@ -1162,7 +976,7 @@ ast_enum! {
+ #[cfg(any(feature = "parsing", feature = "printing"))]
+ #[cfg(feature = "full")]
+ pub(crate) fn requires_terminator(expr: &Expr) -> bool {
+- // see https://github.com/rust-lang/rust/blob/eb8f2586e/src/libsyntax/parse/classify.rs#L17-L37
++ // see https://github.com/rust-lang/rust/blob/2679c38fc/src/librustc_ast/util/classify.rs#L7-L25
+ match *expr {
+ Expr::Unsafe(..)
+ | Expr::Block(..)
+@@ -1183,16 +997,17 @@ pub(crate) mod parsing {
+
+ use crate::parse::{Parse, ParseStream, Result};
+ use crate::path;
++ use std::cmp::Ordering;
++
++ crate::custom_keyword!(raw);
+
+ // When we're parsing expressions which occur before blocks, like in an if
+ // statement's condition, we cannot parse a struct literal.
+ //
+ // Struct literals are ambiguous in certain positions
+ // https://github.com/rust-lang/rfcs/pull/92
+- #[derive(Copy, Clone)]
+ pub struct AllowStruct(bool);
+
+- #[derive(Copy, Clone, PartialEq, PartialOrd)]
+ enum Precedence {
+ Any,
+ Assign,
+@@ -1246,9 +1061,121 @@ pub(crate) mod parsing {
+ }
+ }
+
+- #[cfg(feature = "full")]
+- fn expr_no_struct(input: ParseStream) -> Result<Expr> {
+- ambiguous_expr(input, AllowStruct(false))
++ impl Expr {
++ /// An alternative to the primary `Expr::parse` parser (from the
++ /// [`Parse`] trait) for ambiguous syntactic positions in which a
++ /// trailing brace should not be taken as part of the expression.
++ ///
++ /// Rust grammar has an ambiguity where braces sometimes turn a path
++ /// expression into a struct initialization and sometimes do not. In the
++ /// following code, the expression `S {}` is one expression. Presumably
++ /// there is an empty struct `struct S {}` defined somewhere which it is
++ /// instantiating.
++ ///
++ /// ```
++ /// # struct S;
++ /// # impl std::ops::Deref for S {
++ /// # type Target = bool;
++ /// # fn deref(&self) -> &Self::Target {
++ /// # &true
++ /// # }
++ /// # }
++ /// let _ = *S {};
++ ///
++ /// // parsed by rustc as: `*(S {})`
++ /// ```
++ ///
++ /// We would want to parse the above using `Expr::parse` after the `=`
++ /// token.
++ ///
++ /// But in the following, `S {}` is *not* a struct init expression.
++ ///
++ /// ```
++ /// # const S: &bool = &true;
++ /// if *S {} {}
++ ///
++ /// // parsed by rustc as:
++ /// //
++ /// // if (*S) {
++ /// // /* empty block */
++ /// // }
++ /// // {
++ /// // /* another empty block */
++ /// // }
++ /// ```
++ ///
++ /// For that reason we would want to parse if-conditions using
++ /// `Expr::parse_without_eager_brace` after the `if` token. Same for
++ /// similar syntactic positions such as the condition expr after a
++ /// `while` token or the expr at the top of a `match`.
++ ///
++ /// The Rust grammar's choices around which way this ambiguity is
++ /// resolved at various syntactic positions is fairly arbitrary. Really
++ /// either parse behavior could work in most positions, and language
++ /// designers just decide each case based on which is more likely to be
++ /// what the programmer had in mind most of the time.
++ ///
++ /// ```
++ /// # struct S;
++ /// # fn doc() -> S {
++ /// if return S {} {}
++ /// # unreachable!()
++ /// # }
++ ///
++ /// // parsed by rustc as:
++ /// //
++ /// // if (return (S {})) {
++ /// // }
++ /// //
++ /// // but could equally well have been this other arbitrary choice:
++ /// //
++ /// // if (return S) {
++ /// // }
++ /// // {}
++ /// ```
++ ///
++ /// Note the grammar ambiguity on trailing braces is distinct from
++ /// precedence and is not captured by assigning a precedence level to
++ /// the braced struct init expr in relation to other operators. This can
++ /// be illustrated by `return 0..S {}` vs `match 0..S {}`. The former
++ /// parses as `return (0..(S {}))` implying tighter precedence for
++ /// struct init than `..`, while the latter parses as `match (0..S) {}`
++ /// implying tighter precedence for `..` than struct init, a
++ /// contradiction.
++ #[cfg(feature = "full")]
++ pub fn parse_without_eager_brace(input: ParseStream) -> Result<Expr> {
++ ambiguous_expr(input, AllowStruct(false))
++ }
++ }
++
++ impl Copy for AllowStruct {}
++
++ impl Clone for AllowStruct {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
++
++ impl Copy for Precedence {}
++
++ impl Clone for Precedence {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
++
++ impl PartialEq for Precedence {
++ fn eq(&self, other: &Self) -> bool {
++ *self as u8 == *other as u8
++ }
++ }
++
++ impl PartialOrd for Precedence {
++ fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
++ let this = *self as u8;
++ let other = *other as u8;
++ Some(this.cmp(&other))
++ }
+ }
+
+ #[cfg(feature = "full")]
+@@ -1430,56 +1357,84 @@ pub(crate) mod parsing {
+ parse_expr(input, lhs, allow_struct, Precedence::Any)
+ }
+
++ #[cfg(feature = "full")]
++ fn expr_attrs(input: ParseStream) -> Result<Vec<Attribute>> {
++ let mut attrs = Vec::new();
++ loop {
++ if input.peek(token::Group) {
++ let ahead = input.fork();
++ let group = crate::group::parse_group(&ahead)?;
++ if !group.content.peek(Token![#]) || group.content.peek2(Token![!]) {
++ break;
++ }
++ let attr = group.content.call(attr::parsing::single_parse_outer)?;
++ if !group.content.is_empty() {
++ break;
++ }
++ attrs.push(attr);
++ } else if input.peek(Token![#]) {
++ attrs.push(input.call(attr::parsing::single_parse_outer)?);
++ } else {
++ break;
++ }
++ }
++ Ok(attrs)
++ }
++
+ // <UnOp> <trailer>
+ // & <trailer>
+ // &mut <trailer>
+ // box <trailer>
+ #[cfg(feature = "full")]
+ fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
+- // TODO: optimize using advance_to
+- let ahead = input.fork();
+- ahead.call(Attribute::parse_outer)?;
+- if ahead.peek(Token![&])
+- || ahead.peek(Token![box])
+- || ahead.peek(Token![*])
+- || ahead.peek(Token![!])
+- || ahead.peek(Token![-])
+- {
+- let attrs = input.call(Attribute::parse_outer)?;
+- if input.peek(Token![&]) {
++ let begin = input.fork();
++ let attrs = input.call(expr_attrs)?;
++ if input.peek(Token![&]) {
++ let and_token: Token![&] = input.parse()?;
++ let raw: Option<raw> =
++ if input.peek(raw) && (input.peek2(Token![mut]) || input.peek2(Token![const])) {
++ Some(input.parse()?)
++ } else {
++ None
++ };
++ let mutability: Option<Token![mut]> = input.parse()?;
++ if raw.is_some() && mutability.is_none() {
++ input.parse::<Token![const]>()?;
++ }
++ let expr = Box::new(unary_expr(input, allow_struct)?);
++ if raw.is_some() {
++ Ok(Expr::Verbatim(verbatim::between(begin, input)))
++ } else {
+ Ok(Expr::Reference(ExprReference {
+ attrs,
+- and_token: input.parse()?,
++ and_token,
+ raw: Reserved::default(),
+- mutability: input.parse()?,
+- expr: Box::new(unary_expr(input, allow_struct)?),
+- }))
+- } else if input.peek(Token![box]) {
+- Ok(Expr::Box(ExprBox {
+- attrs,
+- box_token: input.parse()?,
+- expr: Box::new(unary_expr(input, allow_struct)?),
+- }))
+- } else {
+- Ok(Expr::Unary(ExprUnary {
+- attrs,
+- op: input.parse()?,
+- expr: Box::new(unary_expr(input, allow_struct)?),
++ mutability,
++ expr,
+ }))
+ }
++ } else if input.peek(Token![box]) {
++ Ok(Expr::Box(ExprBox {
++ attrs,
++ box_token: input.parse()?,
++ expr: Box::new(unary_expr(input, allow_struct)?),
++ }))
++ } else if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) {
++ Ok(Expr::Unary(ExprUnary {
++ attrs,
++ op: input.parse()?,
++ expr: Box::new(unary_expr(input, allow_struct)?),
++ }))
+ } else {
+- trailer_expr(input, allow_struct)
++ trailer_expr(attrs, input, allow_struct)
+ }
+ }
+
+ #[cfg(not(feature = "full"))]
+ fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
+- // TODO: optimize using advance_to
+- let ahead = input.fork();
+- ahead.call(Attribute::parse_outer)?;
+- if ahead.peek(Token![*]) || ahead.peek(Token![!]) || ahead.peek(Token![-]) {
++ if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) {
+ Ok(Expr::Unary(ExprUnary {
+- attrs: input.call(Attribute::parse_outer)?,
++ attrs: Vec::new(),
+ op: input.parse()?,
+ expr: Box::new(unary_expr(input, allow_struct)?),
+ }))
+@@ -1495,13 +1450,11 @@ pub(crate) mod parsing {
+ // <atom> [ <expr> ] ...
+ // <atom> ? ...
+ #[cfg(feature = "full")]
+- fn trailer_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
+- if input.peek(token::Group) {
+- return input.call(expr_group).map(Expr::Group);
+- }
+-
+- let outer_attrs = input.call(Attribute::parse_outer)?;
+-
++ fn trailer_expr(
++ outer_attrs: Vec<Attribute>,
++ input: ParseStream,
++ allow_struct: AllowStruct,
++ ) -> Result<Expr> {
+ let atom = atom_expr(input, allow_struct)?;
+ let mut e = trailer_helper(input, atom)?;
+
+@@ -1523,18 +1476,26 @@ pub(crate) mod parsing {
+ args: content.parse_terminated(Expr::parse)?,
+ });
+ } else if input.peek(Token![.]) && !input.peek(Token![..]) {
+- let dot_token: Token![.] = input.parse()?;
++ let mut dot_token: Token![.] = input.parse()?;
+
+- if input.peek(token::Await) {
++ let await_token: Option<token::Await> = input.parse()?;
++ if let Some(await_token) = await_token {
+ e = Expr::Await(ExprAwait {
+ attrs: Vec::new(),
+ base: Box::new(e),
+ dot_token,
+- await_token: input.parse()?,
++ await_token,
+ });
+ continue;
+ }
+
++ let float_token: Option<LitFloat> = input.parse()?;
++ if let Some(float_token) = float_token {
++ if multi_index(&mut e, &mut dot_token, float_token)? {
++ continue;
++ }
++ }
++
+ let member: Member = input.parse()?;
+ let turbofish = if member.is_named() && input.peek(Token![::]) {
+ Some(MethodTurbofish {
+@@ -1620,10 +1581,17 @@ pub(crate) mod parsing {
+ });
+ } else if input.peek(Token![.]) && !input.peek(Token![..]) && !input.peek2(token::Await)
+ {
++ let mut dot_token: Token![.] = input.parse()?;
++ let float_token: Option<LitFloat> = input.parse()?;
++ if let Some(float_token) = float_token {
++ if multi_index(&mut e, &mut dot_token, float_token)? {
++ continue;
++ }
++ }
+ e = Expr::Field(ExprField {
+ attrs: Vec::new(),
+ base: Box::new(e),
+- dot_token: input.parse()?,
++ dot_token,
+ member: input.parse()?,
+ });
+ } else if input.peek(token::Bracket) {
+@@ -1646,7 +1614,11 @@ pub(crate) mod parsing {
+ // interactions, as they are fully contained.
+ #[cfg(feature = "full")]
+ fn atom_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
+- if input.peek(token::Group) {
++ if input.peek(token::Group)
++ && !input.peek2(Token![::])
++ && !input.peek2(Token![!])
++ && !input.peek2(token::Brace)
++ {
+ input.call(expr_group).map(Expr::Group)
+ } else if input.peek(Lit) {
+ input.parse().map(Expr::Lit)
+@@ -1668,7 +1640,6 @@ pub(crate) mod parsing {
+ || input.peek(Token![self])
+ || input.peek(Token![Self])
+ || input.peek(Token![super])
+- || input.peek(Token![extern])
+ || input.peek(Token![crate])
+ {
+ path_or_macro_or_struct(input, allow_struct)
+@@ -1740,7 +1711,6 @@ pub(crate) mod parsing {
+ || input.peek(Token![self])
+ || input.peek(Token![Self])
+ || input.peek(Token![super])
+- || input.peek(Token![extern])
+ || input.peek(Token![crate])
+ {
+ input.parse().map(Expr::Path)
+@@ -1878,7 +1848,7 @@ pub(crate) mod parsing {
+
+ #[cfg(feature = "full")]
+ pub(crate) fn expr_early(input: ParseStream) -> Result<Expr> {
+- let mut attrs = input.call(Attribute::parse_outer)?;
++ let mut attrs = input.call(expr_attrs)?;
+ let mut expr = if input.peek(Token![if]) {
+ Expr::If(input.parse()?)
+ } else if input.peek(Token![while]) {
+@@ -1905,7 +1875,7 @@ pub(crate) mod parsing {
+ return parse_expr(input, expr, allow_struct, Precedence::Any);
+ };
+
+- if input.peek(Token![.]) || input.peek(Token![?]) {
++ if input.peek(Token![.]) && !input.peek(Token![..]) || input.peek(Token![?]) {
+ expr = trailer_helper(input, expr)?;
+
+ attrs.extend(expr.replace_attrs(Vec::new()));
+@@ -1951,7 +1921,16 @@ pub(crate) mod parsing {
+
+ #[cfg(feature = "full")]
+ fn generic_method_argument(input: ParseStream) -> Result<GenericMethodArgument> {
+- // TODO parse const generics as well
++ if input.peek(Lit) {
++ let lit = input.parse()?;
++ return Ok(GenericMethodArgument::Const(Expr::Lit(lit)));
++ }
++
++ if input.peek(token::Brace) {
++ let block = input.call(expr::parsing::expr_block)?;
++ return Ok(GenericMethodArgument::Const(Expr::Block(block)));
++ }
++
+ input.parse().map(GenericMethodArgument::Type)
+ }
+
+@@ -1960,44 +1939,20 @@ pub(crate) mod parsing {
+ Ok(ExprLet {
+ attrs: Vec::new(),
+ let_token: input.parse()?,
+- pat: {
+- let leading_vert: Option<Token![|]> = input.parse()?;
+- let pat: Pat = input.parse()?;
+- if leading_vert.is_some()
+- || input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=])
+- {
+- let mut cases = Punctuated::new();
+- cases.push_value(pat);
+- while input.peek(Token![|])
+- && !input.peek(Token![||])
+- && !input.peek(Token![|=])
+- {
+- let punct = input.parse()?;
+- cases.push_punct(punct);
+- let pat: Pat = input.parse()?;
+- cases.push_value(pat);
+- }
+- Pat::Or(PatOr {
+- attrs: Vec::new(),
+- leading_vert,
+- cases,
+- })
+- } else {
+- pat
+- }
+- },
++ pat: pat::parsing::multi_pat_with_leading_vert(input)?,
+ eq_token: input.parse()?,
+- expr: Box::new(input.call(expr_no_struct)?),
++ expr: Box::new(input.call(Expr::parse_without_eager_brace)?),
+ })
+ }
+
+ #[cfg(feature = "full")]
+ impl Parse for ExprIf {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let attrs = input.call(Attribute::parse_outer)?;
+ Ok(ExprIf {
+- attrs: Vec::new(),
++ attrs,
+ if_token: input.parse()?,
+- cond: Box::new(input.call(expr_no_struct)?),
++ cond: Box::new(input.call(Expr::parse_without_eager_brace)?),
+ then_branch: input.parse()?,
+ else_branch: {
+ if input.peek(Token![else]) {
+@@ -2033,29 +1988,14 @@ pub(crate) mod parsing {
+ #[cfg(feature = "full")]
+ impl Parse for ExprForLoop {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
+ let label: Option<Label> = input.parse()?;
+ let for_token: Token![for] = input.parse()?;
+
+- let leading_vert: Option<Token![|]> = input.parse()?;
+- let mut pat: Pat = input.parse()?;
+- if leading_vert.is_some() || input.peek(Token![|]) {
+- let mut cases = Punctuated::new();
+- cases.push_value(pat);
+- while input.peek(Token![|]) {
+- let punct = input.parse()?;
+- cases.push_punct(punct);
+- let pat: Pat = input.parse()?;
+- cases.push_value(pat);
+- }
+- pat = Pat::Or(PatOr {
+- attrs: Vec::new(),
+- leading_vert,
+- cases,
+- });
+- }
++ let pat = pat::parsing::multi_pat_with_leading_vert(input)?;
+
+ let in_token: Token![in] = input.parse()?;
+- let expr: Expr = input.call(expr_no_struct)?;
++ let expr: Expr = input.call(Expr::parse_without_eager_brace)?;
+
+ let content;
+ let brace_token = braced!(content in input);
+@@ -2063,7 +2003,7 @@ pub(crate) mod parsing {
+ let stmts = content.call(Block::parse_within)?;
+
+ Ok(ExprForLoop {
+- attrs: inner_attrs,
++ attrs: private::attrs(outer_attrs, inner_attrs),
+ label,
+ for_token,
+ pat,
+@@ -2077,6 +2017,7 @@ pub(crate) mod parsing {
+ #[cfg(feature = "full")]
+ impl Parse for ExprLoop {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
+ let label: Option<Label> = input.parse()?;
+ let loop_token: Token![loop] = input.parse()?;
+
+@@ -2086,7 +2027,7 @@ pub(crate) mod parsing {
+ let stmts = content.call(Block::parse_within)?;
+
+ Ok(ExprLoop {
+- attrs: inner_attrs,
++ attrs: private::attrs(outer_attrs, inner_attrs),
+ label,
+ loop_token,
+ body: Block { brace_token, stmts },
+@@ -2097,8 +2038,9 @@ pub(crate) mod parsing {
+ #[cfg(feature = "full")]
+ impl Parse for ExprMatch {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
+ let match_token: Token![match] = input.parse()?;
+- let expr = expr_no_struct(input)?;
++ let expr = Expr::parse_without_eager_brace(input)?;
+
+ let content;
+ let brace_token = braced!(content in input);
+@@ -2110,7 +2052,7 @@ pub(crate) mod parsing {
+ }
+
+ Ok(ExprMatch {
+- attrs: inner_attrs,
++ attrs: private::attrs(outer_attrs, inner_attrs),
+ match_token,
+ expr: Box::new(expr),
+ brace_token,
+@@ -2305,9 +2247,10 @@ pub(crate) mod parsing {
+ #[cfg(feature = "full")]
+ impl Parse for ExprWhile {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
+ let label: Option<Label> = input.parse()?;
+ let while_token: Token![while] = input.parse()?;
+- let cond = expr_no_struct(input)?;
++ let cond = Expr::parse_without_eager_brace(input)?;
+
+ let content;
+ let brace_token = braced!(content in input);
+@@ -2315,7 +2258,7 @@ pub(crate) mod parsing {
+ let stmts = content.call(Block::parse_within)?;
+
+ Ok(ExprWhile {
+- attrs: inner_attrs,
++ attrs: private::attrs(outer_attrs, inner_attrs),
+ label,
+ while_token,
+ cond: Box::new(cond),
+@@ -2399,6 +2342,7 @@ pub(crate) mod parsing {
+ #[cfg(feature = "full")]
+ impl Parse for FieldValue {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let attrs = input.call(Attribute::parse_outer)?;
+ let member: Member = input.parse()?;
+ let (colon_token, value) = if input.peek(Token![:]) || !member.is_named() {
+ let colon_token: Token![:] = input.parse()?;
+@@ -2416,7 +2360,7 @@ pub(crate) mod parsing {
+ };
+
+ Ok(FieldValue {
+- attrs: Vec::new(),
++ attrs,
+ member,
+ colon_token,
+ expr: value,
+@@ -2433,46 +2377,36 @@ pub(crate) mod parsing {
+ let content;
+ let brace_token = braced!(content in input);
+ let inner_attrs = content.call(Attribute::parse_inner)?;
++ let attrs = private::attrs(outer_attrs, inner_attrs);
+
+ let mut fields = Punctuated::new();
+- loop {
+- let attrs = content.call(Attribute::parse_outer)?;
+- // TODO: optimize using advance_to
+- if content.fork().parse::<Member>().is_err() {
+- if attrs.is_empty() {
+- break;
+- } else {
+- return Err(content.error("expected struct field"));
+- }
++ while !content.is_empty() {
++ if content.peek(Token![..]) {
++ return Ok(ExprStruct {
++ attrs,
++ brace_token,
++ path,
++ fields,
++ dot2_token: Some(content.parse()?),
++ rest: Some(Box::new(content.parse()?)),
++ });
+ }
+
+- fields.push(FieldValue {
+- attrs,
+- ..content.parse()?
+- });
+-
+- if !content.peek(Token![,]) {
++ fields.push(content.parse()?);
++ if content.is_empty() {
+ break;
+ }
+ let punct: Token![,] = content.parse()?;
+ fields.push_punct(punct);
+ }
+
+- let (dot2_token, rest) = if fields.empty_or_trailing() && content.peek(Token![..]) {
+- let dot2_token: Token![..] = content.parse()?;
+- let rest: Expr = content.parse()?;
+- (Some(dot2_token), Some(Box::new(rest)))
+- } else {
+- (None, None)
+- };
+-
+ Ok(ExprStruct {
+- attrs: private::attrs(outer_attrs, inner_attrs),
++ attrs,
+ brace_token,
+ path,
+ fields,
+- dot2_token,
+- rest,
++ dot2_token: None,
++ rest: None,
+ })
+ }
+
+@@ -2577,27 +2511,7 @@ pub(crate) mod parsing {
+ let requires_comma;
+ Ok(Arm {
+ attrs: input.call(Attribute::parse_outer)?,
+- pat: {
+- let leading_vert: Option<Token![|]> = input.parse()?;
+- let pat: Pat = input.parse()?;
+- if leading_vert.is_some() || input.peek(Token![|]) {
+- let mut cases = Punctuated::new();
+- cases.push_value(pat);
+- while input.peek(Token![|]) {
+- let punct = input.parse()?;
+- cases.push_punct(punct);
+- let pat: Pat = input.parse()?;
+- cases.push_value(pat);
+- }
+- Pat::Or(PatOr {
+- attrs: Vec::new(),
+- leading_vert,
+- cases,
+- })
+- } else {
+- pat
+- }
+- },
++ pat: pat::parsing::multi_pat_with_leading_vert(input)?,
+ guard: {
+ if input.peek(Token![if]) {
+ let if_token: Token![if] = input.parse()?;
+@@ -2641,6 +2555,26 @@ pub(crate) mod parsing {
+ }
+ }
+
++ fn multi_index(e: &mut Expr, dot_token: &mut Token![.], float: LitFloat) -> Result<bool> {
++ let mut float_repr = float.to_string();
++ let trailing_dot = float_repr.ends_with('.');
++ if trailing_dot {
++ float_repr.truncate(float_repr.len() - 1);
++ }
++ for part in float_repr.split('.') {
++ let index = crate::parse_str(part).map_err(|err| Error::new(float.span(), err))?;
++ let base = mem::replace(e, Expr::__Nonexhaustive);
++ *e = Expr::Field(ExprField {
++ attrs: Vec::new(),
++ base: Box::new(base),
++ dot_token: Token![.](dot_token.span),
++ member: Member::Unnamed(index),
++ });
++ *dot_token = Token![.](float.span());
++ }
++ Ok(!trailing_dot)
++ }
++
+ #[cfg(feature = "full")]
+ impl Member {
+ fn is_named(&self) -> bool {
+diff --git a/third_party/rust/syn/src/ext.rs b/third_party/rust/syn/src/ext.rs
+index d09577a27a..4f9bc145d9 100644
+--- mozilla-release/third_party/rust/syn/src/ext.rs
++++ mozilla-release/third_party/rust/syn/src/ext.rs
+@@ -1,6 +1,6 @@
+ //! Extension traits to provide parsing methods on foreign types.
+ //!
+-//! *This module is available if Syn is built with the `"parsing"` feature.*
++//! *This module is available only if Syn is built with the `"parsing"` feature.*
+
+ use proc_macro2::Ident;
+
+@@ -16,7 +16,7 @@ use crate::token::CustomToken;
+ /// This trait is sealed and cannot be implemented for types outside of Syn. It
+ /// is implemented only for `proc_macro2::Ident`.
+ ///
+-/// *This trait is available if Syn is built with the `"parsing"` feature.*
++/// *This trait is available only if Syn is built with the `"parsing"` feature.*
+ pub trait IdentExt: Sized + private::Sealed {
+ /// Parses any identifier including keywords.
+ ///
+@@ -129,7 +129,13 @@ mod private {
+
+ impl Sealed for Ident {}
+
+- #[derive(Copy, Clone)]
+ pub struct PeekFn;
+ pub struct IdentAny;
++
++ impl Copy for PeekFn {}
++ impl Clone for PeekFn {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
+ }
+diff --git a/third_party/rust/syn/src/file.rs b/third_party/rust/syn/src/file.rs
+index 88c02fe832..c8fab63cd9 100644
+--- mozilla-release/third_party/rust/syn/src/file.rs
++++ mozilla-release/third_party/rust/syn/src/file.rs
+@@ -3,7 +3,7 @@ use super::*;
+ ast_struct! {
+ /// A complete file of Rust source code.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Example
+ ///
+@@ -37,6 +37,8 @@ ast_struct! {
+ /// file.read_to_string(&mut src).expect("Unable to read file");
+ ///
+ /// let syntax = syn::parse_file(&src).expect("Unable to parse file");
++ ///
++ /// // Debug impl is available if Syn is built with "extra-traits" feature.
+ /// println!("{:#?}", syntax);
+ /// }
+ /// ```
+diff --git a/third_party/rust/syn/src/gen/clone.rs b/third_party/rust/syn/src/gen/clone.rs
+new file mode 100644
+index 0000000000..bea3887013
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/gen/clone.rs
+@@ -0,0 +1,2051 @@
++// This file is @generated by syn-internal-codegen.
++// It is not intended for manual editing.
++
++#![allow(clippy::clone_on_copy, clippy::expl_impl_clone_on_copy)]
++use crate::*;
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Abi {
++ fn clone(&self) -> Self {
++ Abi {
++ extern_token: self.extern_token.clone(),
++ name: self.name.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for AngleBracketedGenericArguments {
++ fn clone(&self) -> Self {
++ AngleBracketedGenericArguments {
++ colon2_token: self.colon2_token.clone(),
++ lt_token: self.lt_token.clone(),
++ args: self.args.clone(),
++ gt_token: self.gt_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Arm {
++ fn clone(&self) -> Self {
++ Arm {
++ attrs: self.attrs.clone(),
++ pat: self.pat.clone(),
++ guard: self.guard.clone(),
++ fat_arrow_token: self.fat_arrow_token.clone(),
++ body: self.body.clone(),
++ comma: self.comma.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Copy for AttrStyle {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for AttrStyle {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Attribute {
++ fn clone(&self) -> Self {
++ Attribute {
++ pound_token: self.pound_token.clone(),
++ style: self.style.clone(),
++ bracket_token: self.bracket_token.clone(),
++ path: self.path.clone(),
++ tokens: self.tokens.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for BareFnArg {
++ fn clone(&self) -> Self {
++ BareFnArg {
++ attrs: self.attrs.clone(),
++ name: self.name.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Copy for BinOp {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for BinOp {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Binding {
++ fn clone(&self) -> Self {
++ Binding {
++ ident: self.ident.clone(),
++ eq_token: self.eq_token.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Block {
++ fn clone(&self) -> Self {
++ Block {
++ brace_token: self.brace_token.clone(),
++ stmts: self.stmts.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for BoundLifetimes {
++ fn clone(&self) -> Self {
++ BoundLifetimes {
++ for_token: self.for_token.clone(),
++ lt_token: self.lt_token.clone(),
++ lifetimes: self.lifetimes.clone(),
++ gt_token: self.gt_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ConstParam {
++ fn clone(&self) -> Self {
++ ConstParam {
++ attrs: self.attrs.clone(),
++ const_token: self.const_token.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ eq_token: self.eq_token.clone(),
++ default: self.default.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Constraint {
++ fn clone(&self) -> Self {
++ Constraint {
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Clone for Data {
++ fn clone(&self) -> Self {
++ match self {
++ Data::Struct(v0) => Data::Struct(v0.clone()),
++ Data::Enum(v0) => Data::Enum(v0.clone()),
++ Data::Union(v0) => Data::Union(v0.clone()),
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Clone for DataEnum {
++ fn clone(&self) -> Self {
++ DataEnum {
++ enum_token: self.enum_token.clone(),
++ brace_token: self.brace_token.clone(),
++ variants: self.variants.clone(),
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Clone for DataStruct {
++ fn clone(&self) -> Self {
++ DataStruct {
++ struct_token: self.struct_token.clone(),
++ fields: self.fields.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Clone for DataUnion {
++ fn clone(&self) -> Self {
++ DataUnion {
++ union_token: self.union_token.clone(),
++ fields: self.fields.clone(),
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Clone for DeriveInput {
++ fn clone(&self) -> Self {
++ DeriveInput {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ data: self.data.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Expr {
++ fn clone(&self) -> Self {
++ match self {
++ #[cfg(feature = "full")]
++ Expr::Array(v0) => Expr::Array(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Assign(v0) => Expr::Assign(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::AssignOp(v0) => Expr::AssignOp(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Async(v0) => Expr::Async(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Await(v0) => Expr::Await(v0.clone()),
++ Expr::Binary(v0) => Expr::Binary(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Block(v0) => Expr::Block(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Box(v0) => Expr::Box(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Break(v0) => Expr::Break(v0.clone()),
++ Expr::Call(v0) => Expr::Call(v0.clone()),
++ Expr::Cast(v0) => Expr::Cast(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Closure(v0) => Expr::Closure(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Continue(v0) => Expr::Continue(v0.clone()),
++ Expr::Field(v0) => Expr::Field(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::ForLoop(v0) => Expr::ForLoop(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Group(v0) => Expr::Group(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::If(v0) => Expr::If(v0.clone()),
++ Expr::Index(v0) => Expr::Index(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Let(v0) => Expr::Let(v0.clone()),
++ Expr::Lit(v0) => Expr::Lit(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Loop(v0) => Expr::Loop(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Macro(v0) => Expr::Macro(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Match(v0) => Expr::Match(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::MethodCall(v0) => Expr::MethodCall(v0.clone()),
++ Expr::Paren(v0) => Expr::Paren(v0.clone()),
++ Expr::Path(v0) => Expr::Path(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Range(v0) => Expr::Range(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Reference(v0) => Expr::Reference(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Repeat(v0) => Expr::Repeat(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Return(v0) => Expr::Return(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Struct(v0) => Expr::Struct(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Try(v0) => Expr::Try(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::TryBlock(v0) => Expr::TryBlock(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Tuple(v0) => Expr::Tuple(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Type(v0) => Expr::Type(v0.clone()),
++ Expr::Unary(v0) => Expr::Unary(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Unsafe(v0) => Expr::Unsafe(v0.clone()),
++ Expr::Verbatim(v0) => Expr::Verbatim(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::While(v0) => Expr::While(v0.clone()),
++ #[cfg(feature = "full")]
++ Expr::Yield(v0) => Expr::Yield(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprArray {
++ fn clone(&self) -> Self {
++ ExprArray {
++ attrs: self.attrs.clone(),
++ bracket_token: self.bracket_token.clone(),
++ elems: self.elems.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprAssign {
++ fn clone(&self) -> Self {
++ ExprAssign {
++ attrs: self.attrs.clone(),
++ left: self.left.clone(),
++ eq_token: self.eq_token.clone(),
++ right: self.right.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprAssignOp {
++ fn clone(&self) -> Self {
++ ExprAssignOp {
++ attrs: self.attrs.clone(),
++ left: self.left.clone(),
++ op: self.op.clone(),
++ right: self.right.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprAsync {
++ fn clone(&self) -> Self {
++ ExprAsync {
++ attrs: self.attrs.clone(),
++ async_token: self.async_token.clone(),
++ capture: self.capture.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprAwait {
++ fn clone(&self) -> Self {
++ ExprAwait {
++ attrs: self.attrs.clone(),
++ base: self.base.clone(),
++ dot_token: self.dot_token.clone(),
++ await_token: self.await_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprBinary {
++ fn clone(&self) -> Self {
++ ExprBinary {
++ attrs: self.attrs.clone(),
++ left: self.left.clone(),
++ op: self.op.clone(),
++ right: self.right.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprBlock {
++ fn clone(&self) -> Self {
++ ExprBlock {
++ attrs: self.attrs.clone(),
++ label: self.label.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprBox {
++ fn clone(&self) -> Self {
++ ExprBox {
++ attrs: self.attrs.clone(),
++ box_token: self.box_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprBreak {
++ fn clone(&self) -> Self {
++ ExprBreak {
++ attrs: self.attrs.clone(),
++ break_token: self.break_token.clone(),
++ label: self.label.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprCall {
++ fn clone(&self) -> Self {
++ ExprCall {
++ attrs: self.attrs.clone(),
++ func: self.func.clone(),
++ paren_token: self.paren_token.clone(),
++ args: self.args.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprCast {
++ fn clone(&self) -> Self {
++ ExprCast {
++ attrs: self.attrs.clone(),
++ expr: self.expr.clone(),
++ as_token: self.as_token.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprClosure {
++ fn clone(&self) -> Self {
++ ExprClosure {
++ attrs: self.attrs.clone(),
++ asyncness: self.asyncness.clone(),
++ movability: self.movability.clone(),
++ capture: self.capture.clone(),
++ or1_token: self.or1_token.clone(),
++ inputs: self.inputs.clone(),
++ or2_token: self.or2_token.clone(),
++ output: self.output.clone(),
++ body: self.body.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprContinue {
++ fn clone(&self) -> Self {
++ ExprContinue {
++ attrs: self.attrs.clone(),
++ continue_token: self.continue_token.clone(),
++ label: self.label.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprField {
++ fn clone(&self) -> Self {
++ ExprField {
++ attrs: self.attrs.clone(),
++ base: self.base.clone(),
++ dot_token: self.dot_token.clone(),
++ member: self.member.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprForLoop {
++ fn clone(&self) -> Self {
++ ExprForLoop {
++ attrs: self.attrs.clone(),
++ label: self.label.clone(),
++ for_token: self.for_token.clone(),
++ pat: self.pat.clone(),
++ in_token: self.in_token.clone(),
++ expr: self.expr.clone(),
++ body: self.body.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprGroup {
++ fn clone(&self) -> Self {
++ ExprGroup {
++ attrs: self.attrs.clone(),
++ group_token: self.group_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprIf {
++ fn clone(&self) -> Self {
++ ExprIf {
++ attrs: self.attrs.clone(),
++ if_token: self.if_token.clone(),
++ cond: self.cond.clone(),
++ then_branch: self.then_branch.clone(),
++ else_branch: self.else_branch.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprIndex {
++ fn clone(&self) -> Self {
++ ExprIndex {
++ attrs: self.attrs.clone(),
++ expr: self.expr.clone(),
++ bracket_token: self.bracket_token.clone(),
++ index: self.index.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprLet {
++ fn clone(&self) -> Self {
++ ExprLet {
++ attrs: self.attrs.clone(),
++ let_token: self.let_token.clone(),
++ pat: self.pat.clone(),
++ eq_token: self.eq_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprLit {
++ fn clone(&self) -> Self {
++ ExprLit {
++ attrs: self.attrs.clone(),
++ lit: self.lit.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprLoop {
++ fn clone(&self) -> Self {
++ ExprLoop {
++ attrs: self.attrs.clone(),
++ label: self.label.clone(),
++ loop_token: self.loop_token.clone(),
++ body: self.body.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprMacro {
++ fn clone(&self) -> Self {
++ ExprMacro {
++ attrs: self.attrs.clone(),
++ mac: self.mac.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprMatch {
++ fn clone(&self) -> Self {
++ ExprMatch {
++ attrs: self.attrs.clone(),
++ match_token: self.match_token.clone(),
++ expr: self.expr.clone(),
++ brace_token: self.brace_token.clone(),
++ arms: self.arms.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprMethodCall {
++ fn clone(&self) -> Self {
++ ExprMethodCall {
++ attrs: self.attrs.clone(),
++ receiver: self.receiver.clone(),
++ dot_token: self.dot_token.clone(),
++ method: self.method.clone(),
++ turbofish: self.turbofish.clone(),
++ paren_token: self.paren_token.clone(),
++ args: self.args.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprParen {
++ fn clone(&self) -> Self {
++ ExprParen {
++ attrs: self.attrs.clone(),
++ paren_token: self.paren_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprPath {
++ fn clone(&self) -> Self {
++ ExprPath {
++ attrs: self.attrs.clone(),
++ qself: self.qself.clone(),
++ path: self.path.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprRange {
++ fn clone(&self) -> Self {
++ ExprRange {
++ attrs: self.attrs.clone(),
++ from: self.from.clone(),
++ limits: self.limits.clone(),
++ to: self.to.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprReference {
++ fn clone(&self) -> Self {
++ ExprReference {
++ attrs: self.attrs.clone(),
++ and_token: self.and_token.clone(),
++ raw: self.raw.clone(),
++ mutability: self.mutability.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprRepeat {
++ fn clone(&self) -> Self {
++ ExprRepeat {
++ attrs: self.attrs.clone(),
++ bracket_token: self.bracket_token.clone(),
++ expr: self.expr.clone(),
++ semi_token: self.semi_token.clone(),
++ len: self.len.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprReturn {
++ fn clone(&self) -> Self {
++ ExprReturn {
++ attrs: self.attrs.clone(),
++ return_token: self.return_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprStruct {
++ fn clone(&self) -> Self {
++ ExprStruct {
++ attrs: self.attrs.clone(),
++ path: self.path.clone(),
++ brace_token: self.brace_token.clone(),
++ fields: self.fields.clone(),
++ dot2_token: self.dot2_token.clone(),
++ rest: self.rest.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprTry {
++ fn clone(&self) -> Self {
++ ExprTry {
++ attrs: self.attrs.clone(),
++ expr: self.expr.clone(),
++ question_token: self.question_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprTryBlock {
++ fn clone(&self) -> Self {
++ ExprTryBlock {
++ attrs: self.attrs.clone(),
++ try_token: self.try_token.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprTuple {
++ fn clone(&self) -> Self {
++ ExprTuple {
++ attrs: self.attrs.clone(),
++ paren_token: self.paren_token.clone(),
++ elems: self.elems.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprType {
++ fn clone(&self) -> Self {
++ ExprType {
++ attrs: self.attrs.clone(),
++ expr: self.expr.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ExprUnary {
++ fn clone(&self) -> Self {
++ ExprUnary {
++ attrs: self.attrs.clone(),
++ op: self.op.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprUnsafe {
++ fn clone(&self) -> Self {
++ ExprUnsafe {
++ attrs: self.attrs.clone(),
++ unsafe_token: self.unsafe_token.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprWhile {
++ fn clone(&self) -> Self {
++ ExprWhile {
++ attrs: self.attrs.clone(),
++ label: self.label.clone(),
++ while_token: self.while_token.clone(),
++ cond: self.cond.clone(),
++ body: self.body.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ExprYield {
++ fn clone(&self) -> Self {
++ ExprYield {
++ attrs: self.attrs.clone(),
++ yield_token: self.yield_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Field {
++ fn clone(&self) -> Self {
++ Field {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for FieldPat {
++ fn clone(&self) -> Self {
++ FieldPat {
++ attrs: self.attrs.clone(),
++ member: self.member.clone(),
++ colon_token: self.colon_token.clone(),
++ pat: self.pat.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for FieldValue {
++ fn clone(&self) -> Self {
++ FieldValue {
++ attrs: self.attrs.clone(),
++ member: self.member.clone(),
++ colon_token: self.colon_token.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Fields {
++ fn clone(&self) -> Self {
++ match self {
++ Fields::Named(v0) => Fields::Named(v0.clone()),
++ Fields::Unnamed(v0) => Fields::Unnamed(v0.clone()),
++ Fields::Unit => Fields::Unit,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for FieldsNamed {
++ fn clone(&self) -> Self {
++ FieldsNamed {
++ brace_token: self.brace_token.clone(),
++ named: self.named.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for FieldsUnnamed {
++ fn clone(&self) -> Self {
++ FieldsUnnamed {
++ paren_token: self.paren_token.clone(),
++ unnamed: self.unnamed.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for File {
++ fn clone(&self) -> Self {
++ File {
++ shebang: self.shebang.clone(),
++ attrs: self.attrs.clone(),
++ items: self.items.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for FnArg {
++ fn clone(&self) -> Self {
++ match self {
++ FnArg::Receiver(v0) => FnArg::Receiver(v0.clone()),
++ FnArg::Typed(v0) => FnArg::Typed(v0.clone()),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ForeignItem {
++ fn clone(&self) -> Self {
++ match self {
++ ForeignItem::Fn(v0) => ForeignItem::Fn(v0.clone()),
++ ForeignItem::Static(v0) => ForeignItem::Static(v0.clone()),
++ ForeignItem::Type(v0) => ForeignItem::Type(v0.clone()),
++ ForeignItem::Macro(v0) => ForeignItem::Macro(v0.clone()),
++ ForeignItem::Verbatim(v0) => ForeignItem::Verbatim(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ForeignItemFn {
++ fn clone(&self) -> Self {
++ ForeignItemFn {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ sig: self.sig.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ForeignItemMacro {
++ fn clone(&self) -> Self {
++ ForeignItemMacro {
++ attrs: self.attrs.clone(),
++ mac: self.mac.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ForeignItemStatic {
++ fn clone(&self) -> Self {
++ ForeignItemStatic {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ static_token: self.static_token.clone(),
++ mutability: self.mutability.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ForeignItemType {
++ fn clone(&self) -> Self {
++ ForeignItemType {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ type_token: self.type_token.clone(),
++ ident: self.ident.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for GenericArgument {
++ fn clone(&self) -> Self {
++ match self {
++ GenericArgument::Lifetime(v0) => GenericArgument::Lifetime(v0.clone()),
++ GenericArgument::Type(v0) => GenericArgument::Type(v0.clone()),
++ GenericArgument::Binding(v0) => GenericArgument::Binding(v0.clone()),
++ GenericArgument::Constraint(v0) => GenericArgument::Constraint(v0.clone()),
++ GenericArgument::Const(v0) => GenericArgument::Const(v0.clone()),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for GenericMethodArgument {
++ fn clone(&self) -> Self {
++ match self {
++ GenericMethodArgument::Type(v0) => GenericMethodArgument::Type(v0.clone()),
++ GenericMethodArgument::Const(v0) => GenericMethodArgument::Const(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for GenericParam {
++ fn clone(&self) -> Self {
++ match self {
++ GenericParam::Type(v0) => GenericParam::Type(v0.clone()),
++ GenericParam::Lifetime(v0) => GenericParam::Lifetime(v0.clone()),
++ GenericParam::Const(v0) => GenericParam::Const(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Generics {
++ fn clone(&self) -> Self {
++ Generics {
++ lt_token: self.lt_token.clone(),
++ params: self.params.clone(),
++ gt_token: self.gt_token.clone(),
++ where_clause: self.where_clause.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ImplItem {
++ fn clone(&self) -> Self {
++ match self {
++ ImplItem::Const(v0) => ImplItem::Const(v0.clone()),
++ ImplItem::Method(v0) => ImplItem::Method(v0.clone()),
++ ImplItem::Type(v0) => ImplItem::Type(v0.clone()),
++ ImplItem::Macro(v0) => ImplItem::Macro(v0.clone()),
++ ImplItem::Verbatim(v0) => ImplItem::Verbatim(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ImplItemConst {
++ fn clone(&self) -> Self {
++ ImplItemConst {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ defaultness: self.defaultness.clone(),
++ const_token: self.const_token.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ eq_token: self.eq_token.clone(),
++ expr: self.expr.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ImplItemMacro {
++ fn clone(&self) -> Self {
++ ImplItemMacro {
++ attrs: self.attrs.clone(),
++ mac: self.mac.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ImplItemMethod {
++ fn clone(&self) -> Self {
++ ImplItemMethod {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ defaultness: self.defaultness.clone(),
++ sig: self.sig.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ImplItemType {
++ fn clone(&self) -> Self {
++ ImplItemType {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ defaultness: self.defaultness.clone(),
++ type_token: self.type_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ eq_token: self.eq_token.clone(),
++ ty: self.ty.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Index {
++ fn clone(&self) -> Self {
++ Index {
++ index: self.index.clone(),
++ span: self.span.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Item {
++ fn clone(&self) -> Self {
++ match self {
++ Item::Const(v0) => Item::Const(v0.clone()),
++ Item::Enum(v0) => Item::Enum(v0.clone()),
++ Item::ExternCrate(v0) => Item::ExternCrate(v0.clone()),
++ Item::Fn(v0) => Item::Fn(v0.clone()),
++ Item::ForeignMod(v0) => Item::ForeignMod(v0.clone()),
++ Item::Impl(v0) => Item::Impl(v0.clone()),
++ Item::Macro(v0) => Item::Macro(v0.clone()),
++ Item::Macro2(v0) => Item::Macro2(v0.clone()),
++ Item::Mod(v0) => Item::Mod(v0.clone()),
++ Item::Static(v0) => Item::Static(v0.clone()),
++ Item::Struct(v0) => Item::Struct(v0.clone()),
++ Item::Trait(v0) => Item::Trait(v0.clone()),
++ Item::TraitAlias(v0) => Item::TraitAlias(v0.clone()),
++ Item::Type(v0) => Item::Type(v0.clone()),
++ Item::Union(v0) => Item::Union(v0.clone()),
++ Item::Use(v0) => Item::Use(v0.clone()),
++ Item::Verbatim(v0) => Item::Verbatim(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemConst {
++ fn clone(&self) -> Self {
++ ItemConst {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ const_token: self.const_token.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ eq_token: self.eq_token.clone(),
++ expr: self.expr.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemEnum {
++ fn clone(&self) -> Self {
++ ItemEnum {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ enum_token: self.enum_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ brace_token: self.brace_token.clone(),
++ variants: self.variants.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemExternCrate {
++ fn clone(&self) -> Self {
++ ItemExternCrate {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ extern_token: self.extern_token.clone(),
++ crate_token: self.crate_token.clone(),
++ ident: self.ident.clone(),
++ rename: self.rename.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemFn {
++ fn clone(&self) -> Self {
++ ItemFn {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ sig: self.sig.clone(),
++ block: self.block.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemForeignMod {
++ fn clone(&self) -> Self {
++ ItemForeignMod {
++ attrs: self.attrs.clone(),
++ abi: self.abi.clone(),
++ brace_token: self.brace_token.clone(),
++ items: self.items.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemImpl {
++ fn clone(&self) -> Self {
++ ItemImpl {
++ attrs: self.attrs.clone(),
++ defaultness: self.defaultness.clone(),
++ unsafety: self.unsafety.clone(),
++ impl_token: self.impl_token.clone(),
++ generics: self.generics.clone(),
++ trait_: self.trait_.clone(),
++ self_ty: self.self_ty.clone(),
++ brace_token: self.brace_token.clone(),
++ items: self.items.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemMacro {
++ fn clone(&self) -> Self {
++ ItemMacro {
++ attrs: self.attrs.clone(),
++ ident: self.ident.clone(),
++ mac: self.mac.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemMacro2 {
++ fn clone(&self) -> Self {
++ ItemMacro2 {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ macro_token: self.macro_token.clone(),
++ ident: self.ident.clone(),
++ rules: self.rules.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemMod {
++ fn clone(&self) -> Self {
++ ItemMod {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ mod_token: self.mod_token.clone(),
++ ident: self.ident.clone(),
++ content: self.content.clone(),
++ semi: self.semi.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemStatic {
++ fn clone(&self) -> Self {
++ ItemStatic {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ static_token: self.static_token.clone(),
++ mutability: self.mutability.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ eq_token: self.eq_token.clone(),
++ expr: self.expr.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemStruct {
++ fn clone(&self) -> Self {
++ ItemStruct {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ struct_token: self.struct_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ fields: self.fields.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemTrait {
++ fn clone(&self) -> Self {
++ ItemTrait {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ unsafety: self.unsafety.clone(),
++ auto_token: self.auto_token.clone(),
++ trait_token: self.trait_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ colon_token: self.colon_token.clone(),
++ supertraits: self.supertraits.clone(),
++ brace_token: self.brace_token.clone(),
++ items: self.items.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemTraitAlias {
++ fn clone(&self) -> Self {
++ ItemTraitAlias {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ trait_token: self.trait_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ eq_token: self.eq_token.clone(),
++ bounds: self.bounds.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemType {
++ fn clone(&self) -> Self {
++ ItemType {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ type_token: self.type_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ eq_token: self.eq_token.clone(),
++ ty: self.ty.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemUnion {
++ fn clone(&self) -> Self {
++ ItemUnion {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ union_token: self.union_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ fields: self.fields.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for ItemUse {
++ fn clone(&self) -> Self {
++ ItemUse {
++ attrs: self.attrs.clone(),
++ vis: self.vis.clone(),
++ use_token: self.use_token.clone(),
++ leading_colon: self.leading_colon.clone(),
++ tree: self.tree.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Label {
++ fn clone(&self) -> Self {
++ Label {
++ name: self.name.clone(),
++ colon_token: self.colon_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for LifetimeDef {
++ fn clone(&self) -> Self {
++ LifetimeDef {
++ attrs: self.attrs.clone(),
++ lifetime: self.lifetime.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++impl Clone for Lit {
++ fn clone(&self) -> Self {
++ match self {
++ Lit::Str(v0) => Lit::Str(v0.clone()),
++ Lit::ByteStr(v0) => Lit::ByteStr(v0.clone()),
++ Lit::Byte(v0) => Lit::Byte(v0.clone()),
++ Lit::Char(v0) => Lit::Char(v0.clone()),
++ Lit::Int(v0) => Lit::Int(v0.clone()),
++ Lit::Float(v0) => Lit::Float(v0.clone()),
++ Lit::Bool(v0) => Lit::Bool(v0.clone()),
++ Lit::Verbatim(v0) => Lit::Verbatim(v0.clone()),
++ }
++ }
++}
++impl Clone for LitBool {
++ fn clone(&self) -> Self {
++ LitBool {
++ value: self.value.clone(),
++ span: self.span.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Local {
++ fn clone(&self) -> Self {
++ Local {
++ attrs: self.attrs.clone(),
++ let_token: self.let_token.clone(),
++ pat: self.pat.clone(),
++ init: self.init.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Macro {
++ fn clone(&self) -> Self {
++ Macro {
++ path: self.path.clone(),
++ bang_token: self.bang_token.clone(),
++ delimiter: self.delimiter.clone(),
++ tokens: self.tokens.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for MacroDelimiter {
++ fn clone(&self) -> Self {
++ match self {
++ MacroDelimiter::Paren(v0) => MacroDelimiter::Paren(v0.clone()),
++ MacroDelimiter::Brace(v0) => MacroDelimiter::Brace(v0.clone()),
++ MacroDelimiter::Bracket(v0) => MacroDelimiter::Bracket(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Member {
++ fn clone(&self) -> Self {
++ match self {
++ Member::Named(v0) => Member::Named(v0.clone()),
++ Member::Unnamed(v0) => Member::Unnamed(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Meta {
++ fn clone(&self) -> Self {
++ match self {
++ Meta::Path(v0) => Meta::Path(v0.clone()),
++ Meta::List(v0) => Meta::List(v0.clone()),
++ Meta::NameValue(v0) => Meta::NameValue(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for MetaList {
++ fn clone(&self) -> Self {
++ MetaList {
++ path: self.path.clone(),
++ paren_token: self.paren_token.clone(),
++ nested: self.nested.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for MetaNameValue {
++ fn clone(&self) -> Self {
++ MetaNameValue {
++ path: self.path.clone(),
++ eq_token: self.eq_token.clone(),
++ lit: self.lit.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for MethodTurbofish {
++ fn clone(&self) -> Self {
++ MethodTurbofish {
++ colon2_token: self.colon2_token.clone(),
++ lt_token: self.lt_token.clone(),
++ args: self.args.clone(),
++ gt_token: self.gt_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for NestedMeta {
++ fn clone(&self) -> Self {
++ match self {
++ NestedMeta::Meta(v0) => NestedMeta::Meta(v0.clone()),
++ NestedMeta::Lit(v0) => NestedMeta::Lit(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ParenthesizedGenericArguments {
++ fn clone(&self) -> Self {
++ ParenthesizedGenericArguments {
++ paren_token: self.paren_token.clone(),
++ inputs: self.inputs.clone(),
++ output: self.output.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Pat {
++ fn clone(&self) -> Self {
++ match self {
++ Pat::Box(v0) => Pat::Box(v0.clone()),
++ Pat::Ident(v0) => Pat::Ident(v0.clone()),
++ Pat::Lit(v0) => Pat::Lit(v0.clone()),
++ Pat::Macro(v0) => Pat::Macro(v0.clone()),
++ Pat::Or(v0) => Pat::Or(v0.clone()),
++ Pat::Path(v0) => Pat::Path(v0.clone()),
++ Pat::Range(v0) => Pat::Range(v0.clone()),
++ Pat::Reference(v0) => Pat::Reference(v0.clone()),
++ Pat::Rest(v0) => Pat::Rest(v0.clone()),
++ Pat::Slice(v0) => Pat::Slice(v0.clone()),
++ Pat::Struct(v0) => Pat::Struct(v0.clone()),
++ Pat::Tuple(v0) => Pat::Tuple(v0.clone()),
++ Pat::TupleStruct(v0) => Pat::TupleStruct(v0.clone()),
++ Pat::Type(v0) => Pat::Type(v0.clone()),
++ Pat::Verbatim(v0) => Pat::Verbatim(v0.clone()),
++ Pat::Wild(v0) => Pat::Wild(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatBox {
++ fn clone(&self) -> Self {
++ PatBox {
++ attrs: self.attrs.clone(),
++ box_token: self.box_token.clone(),
++ pat: self.pat.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatIdent {
++ fn clone(&self) -> Self {
++ PatIdent {
++ attrs: self.attrs.clone(),
++ by_ref: self.by_ref.clone(),
++ mutability: self.mutability.clone(),
++ ident: self.ident.clone(),
++ subpat: self.subpat.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatLit {
++ fn clone(&self) -> Self {
++ PatLit {
++ attrs: self.attrs.clone(),
++ expr: self.expr.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatMacro {
++ fn clone(&self) -> Self {
++ PatMacro {
++ attrs: self.attrs.clone(),
++ mac: self.mac.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatOr {
++ fn clone(&self) -> Self {
++ PatOr {
++ attrs: self.attrs.clone(),
++ leading_vert: self.leading_vert.clone(),
++ cases: self.cases.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatPath {
++ fn clone(&self) -> Self {
++ PatPath {
++ attrs: self.attrs.clone(),
++ qself: self.qself.clone(),
++ path: self.path.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatRange {
++ fn clone(&self) -> Self {
++ PatRange {
++ attrs: self.attrs.clone(),
++ lo: self.lo.clone(),
++ limits: self.limits.clone(),
++ hi: self.hi.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatReference {
++ fn clone(&self) -> Self {
++ PatReference {
++ attrs: self.attrs.clone(),
++ and_token: self.and_token.clone(),
++ mutability: self.mutability.clone(),
++ pat: self.pat.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatRest {
++ fn clone(&self) -> Self {
++ PatRest {
++ attrs: self.attrs.clone(),
++ dot2_token: self.dot2_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatSlice {
++ fn clone(&self) -> Self {
++ PatSlice {
++ attrs: self.attrs.clone(),
++ bracket_token: self.bracket_token.clone(),
++ elems: self.elems.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatStruct {
++ fn clone(&self) -> Self {
++ PatStruct {
++ attrs: self.attrs.clone(),
++ path: self.path.clone(),
++ brace_token: self.brace_token.clone(),
++ fields: self.fields.clone(),
++ dot2_token: self.dot2_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatTuple {
++ fn clone(&self) -> Self {
++ PatTuple {
++ attrs: self.attrs.clone(),
++ paren_token: self.paren_token.clone(),
++ elems: self.elems.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatTupleStruct {
++ fn clone(&self) -> Self {
++ PatTupleStruct {
++ attrs: self.attrs.clone(),
++ path: self.path.clone(),
++ pat: self.pat.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatType {
++ fn clone(&self) -> Self {
++ PatType {
++ attrs: self.attrs.clone(),
++ pat: self.pat.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for PatWild {
++ fn clone(&self) -> Self {
++ PatWild {
++ attrs: self.attrs.clone(),
++ underscore_token: self.underscore_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Path {
++ fn clone(&self) -> Self {
++ Path {
++ leading_colon: self.leading_colon.clone(),
++ segments: self.segments.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for PathArguments {
++ fn clone(&self) -> Self {
++ match self {
++ PathArguments::None => PathArguments::None,
++ PathArguments::AngleBracketed(v0) => PathArguments::AngleBracketed(v0.clone()),
++ PathArguments::Parenthesized(v0) => PathArguments::Parenthesized(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for PathSegment {
++ fn clone(&self) -> Self {
++ PathSegment {
++ ident: self.ident.clone(),
++ arguments: self.arguments.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for PredicateEq {
++ fn clone(&self) -> Self {
++ PredicateEq {
++ lhs_ty: self.lhs_ty.clone(),
++ eq_token: self.eq_token.clone(),
++ rhs_ty: self.rhs_ty.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for PredicateLifetime {
++ fn clone(&self) -> Self {
++ PredicateLifetime {
++ lifetime: self.lifetime.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for PredicateType {
++ fn clone(&self) -> Self {
++ PredicateType {
++ lifetimes: self.lifetimes.clone(),
++ bounded_ty: self.bounded_ty.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for QSelf {
++ fn clone(&self) -> Self {
++ QSelf {
++ lt_token: self.lt_token.clone(),
++ ty: self.ty.clone(),
++ position: self.position.clone(),
++ as_token: self.as_token.clone(),
++ gt_token: self.gt_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Copy for RangeLimits {}
++#[cfg(feature = "full")]
++impl Clone for RangeLimits {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Receiver {
++ fn clone(&self) -> Self {
++ Receiver {
++ attrs: self.attrs.clone(),
++ reference: self.reference.clone(),
++ mutability: self.mutability.clone(),
++ self_token: self.self_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for ReturnType {
++ fn clone(&self) -> Self {
++ match self {
++ ReturnType::Default => ReturnType::Default,
++ ReturnType::Type(v0, v1) => ReturnType::Type(v0.clone(), v1.clone()),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Signature {
++ fn clone(&self) -> Self {
++ Signature {
++ constness: self.constness.clone(),
++ asyncness: self.asyncness.clone(),
++ unsafety: self.unsafety.clone(),
++ abi: self.abi.clone(),
++ fn_token: self.fn_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ paren_token: self.paren_token.clone(),
++ inputs: self.inputs.clone(),
++ variadic: self.variadic.clone(),
++ output: self.output.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for Stmt {
++ fn clone(&self) -> Self {
++ match self {
++ Stmt::Local(v0) => Stmt::Local(v0.clone()),
++ Stmt::Item(v0) => Stmt::Item(v0.clone()),
++ Stmt::Expr(v0) => Stmt::Expr(v0.clone()),
++ Stmt::Semi(v0, v1) => Stmt::Semi(v0.clone(), v1.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TraitBound {
++ fn clone(&self) -> Self {
++ TraitBound {
++ paren_token: self.paren_token.clone(),
++ modifier: self.modifier.clone(),
++ lifetimes: self.lifetimes.clone(),
++ path: self.path.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Copy for TraitBoundModifier {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TraitBoundModifier {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for TraitItem {
++ fn clone(&self) -> Self {
++ match self {
++ TraitItem::Const(v0) => TraitItem::Const(v0.clone()),
++ TraitItem::Method(v0) => TraitItem::Method(v0.clone()),
++ TraitItem::Type(v0) => TraitItem::Type(v0.clone()),
++ TraitItem::Macro(v0) => TraitItem::Macro(v0.clone()),
++ TraitItem::Verbatim(v0) => TraitItem::Verbatim(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for TraitItemConst {
++ fn clone(&self) -> Self {
++ TraitItemConst {
++ attrs: self.attrs.clone(),
++ const_token: self.const_token.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ ty: self.ty.clone(),
++ default: self.default.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for TraitItemMacro {
++ fn clone(&self) -> Self {
++ TraitItemMacro {
++ attrs: self.attrs.clone(),
++ mac: self.mac.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for TraitItemMethod {
++ fn clone(&self) -> Self {
++ TraitItemMethod {
++ attrs: self.attrs.clone(),
++ sig: self.sig.clone(),
++ default: self.default.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for TraitItemType {
++ fn clone(&self) -> Self {
++ TraitItemType {
++ attrs: self.attrs.clone(),
++ type_token: self.type_token.clone(),
++ ident: self.ident.clone(),
++ generics: self.generics.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ default: self.default.clone(),
++ semi_token: self.semi_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Type {
++ fn clone(&self) -> Self {
++ match self {
++ Type::Array(v0) => Type::Array(v0.clone()),
++ Type::BareFn(v0) => Type::BareFn(v0.clone()),
++ Type::Group(v0) => Type::Group(v0.clone()),
++ Type::ImplTrait(v0) => Type::ImplTrait(v0.clone()),
++ Type::Infer(v0) => Type::Infer(v0.clone()),
++ Type::Macro(v0) => Type::Macro(v0.clone()),
++ Type::Never(v0) => Type::Never(v0.clone()),
++ Type::Paren(v0) => Type::Paren(v0.clone()),
++ Type::Path(v0) => Type::Path(v0.clone()),
++ Type::Ptr(v0) => Type::Ptr(v0.clone()),
++ Type::Reference(v0) => Type::Reference(v0.clone()),
++ Type::Slice(v0) => Type::Slice(v0.clone()),
++ Type::TraitObject(v0) => Type::TraitObject(v0.clone()),
++ Type::Tuple(v0) => Type::Tuple(v0.clone()),
++ Type::Verbatim(v0) => Type::Verbatim(v0.clone()),
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeArray {
++ fn clone(&self) -> Self {
++ TypeArray {
++ bracket_token: self.bracket_token.clone(),
++ elem: self.elem.clone(),
++ semi_token: self.semi_token.clone(),
++ len: self.len.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeBareFn {
++ fn clone(&self) -> Self {
++ TypeBareFn {
++ lifetimes: self.lifetimes.clone(),
++ unsafety: self.unsafety.clone(),
++ abi: self.abi.clone(),
++ fn_token: self.fn_token.clone(),
++ paren_token: self.paren_token.clone(),
++ inputs: self.inputs.clone(),
++ variadic: self.variadic.clone(),
++ output: self.output.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeGroup {
++ fn clone(&self) -> Self {
++ TypeGroup {
++ group_token: self.group_token.clone(),
++ elem: self.elem.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeImplTrait {
++ fn clone(&self) -> Self {
++ TypeImplTrait {
++ impl_token: self.impl_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeInfer {
++ fn clone(&self) -> Self {
++ TypeInfer {
++ underscore_token: self.underscore_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeMacro {
++ fn clone(&self) -> Self {
++ TypeMacro {
++ mac: self.mac.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeNever {
++ fn clone(&self) -> Self {
++ TypeNever {
++ bang_token: self.bang_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeParam {
++ fn clone(&self) -> Self {
++ TypeParam {
++ attrs: self.attrs.clone(),
++ ident: self.ident.clone(),
++ colon_token: self.colon_token.clone(),
++ bounds: self.bounds.clone(),
++ eq_token: self.eq_token.clone(),
++ default: self.default.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeParamBound {
++ fn clone(&self) -> Self {
++ match self {
++ TypeParamBound::Trait(v0) => TypeParamBound::Trait(v0.clone()),
++ TypeParamBound::Lifetime(v0) => TypeParamBound::Lifetime(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeParen {
++ fn clone(&self) -> Self {
++ TypeParen {
++ paren_token: self.paren_token.clone(),
++ elem: self.elem.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypePath {
++ fn clone(&self) -> Self {
++ TypePath {
++ qself: self.qself.clone(),
++ path: self.path.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypePtr {
++ fn clone(&self) -> Self {
++ TypePtr {
++ star_token: self.star_token.clone(),
++ const_token: self.const_token.clone(),
++ mutability: self.mutability.clone(),
++ elem: self.elem.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeReference {
++ fn clone(&self) -> Self {
++ TypeReference {
++ and_token: self.and_token.clone(),
++ lifetime: self.lifetime.clone(),
++ mutability: self.mutability.clone(),
++ elem: self.elem.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeSlice {
++ fn clone(&self) -> Self {
++ TypeSlice {
++ bracket_token: self.bracket_token.clone(),
++ elem: self.elem.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeTraitObject {
++ fn clone(&self) -> Self {
++ TypeTraitObject {
++ dyn_token: self.dyn_token.clone(),
++ bounds: self.bounds.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for TypeTuple {
++ fn clone(&self) -> Self {
++ TypeTuple {
++ paren_token: self.paren_token.clone(),
++ elems: self.elems.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Copy for UnOp {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for UnOp {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UseGlob {
++ fn clone(&self) -> Self {
++ UseGlob {
++ star_token: self.star_token.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UseGroup {
++ fn clone(&self) -> Self {
++ UseGroup {
++ brace_token: self.brace_token.clone(),
++ items: self.items.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UseName {
++ fn clone(&self) -> Self {
++ UseName {
++ ident: self.ident.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UsePath {
++ fn clone(&self) -> Self {
++ UsePath {
++ ident: self.ident.clone(),
++ colon2_token: self.colon2_token.clone(),
++ tree: self.tree.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UseRename {
++ fn clone(&self) -> Self {
++ UseRename {
++ ident: self.ident.clone(),
++ as_token: self.as_token.clone(),
++ rename: self.rename.clone(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Clone for UseTree {
++ fn clone(&self) -> Self {
++ match self {
++ UseTree::Path(v0) => UseTree::Path(v0.clone()),
++ UseTree::Name(v0) => UseTree::Name(v0.clone()),
++ UseTree::Rename(v0) => UseTree::Rename(v0.clone()),
++ UseTree::Glob(v0) => UseTree::Glob(v0.clone()),
++ UseTree::Group(v0) => UseTree::Group(v0.clone()),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Variadic {
++ fn clone(&self) -> Self {
++ Variadic {
++ attrs: self.attrs.clone(),
++ dots: self.dots.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Variant {
++ fn clone(&self) -> Self {
++ Variant {
++ attrs: self.attrs.clone(),
++ ident: self.ident.clone(),
++ fields: self.fields.clone(),
++ discriminant: self.discriminant.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for VisCrate {
++ fn clone(&self) -> Self {
++ VisCrate {
++ crate_token: self.crate_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for VisPublic {
++ fn clone(&self) -> Self {
++ VisPublic {
++ pub_token: self.pub_token.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for VisRestricted {
++ fn clone(&self) -> Self {
++ VisRestricted {
++ pub_token: self.pub_token.clone(),
++ paren_token: self.paren_token.clone(),
++ in_token: self.in_token.clone(),
++ path: self.path.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for Visibility {
++ fn clone(&self) -> Self {
++ match self {
++ Visibility::Public(v0) => Visibility::Public(v0.clone()),
++ Visibility::Crate(v0) => Visibility::Crate(v0.clone()),
++ Visibility::Restricted(v0) => Visibility::Restricted(v0.clone()),
++ Visibility::Inherited => Visibility::Inherited,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for WhereClause {
++ fn clone(&self) -> Self {
++ WhereClause {
++ where_token: self.where_token.clone(),
++ predicates: self.predicates.clone(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Clone for WherePredicate {
++ fn clone(&self) -> Self {
++ match self {
++ WherePredicate::Type(v0) => WherePredicate::Type(v0.clone()),
++ WherePredicate::Lifetime(v0) => WherePredicate::Lifetime(v0.clone()),
++ WherePredicate::Eq(v0) => WherePredicate::Eq(v0.clone()),
++ }
++ }
++}
+diff --git a/third_party/rust/syn/src/gen/debug.rs b/third_party/rust/syn/src/gen/debug.rs
+new file mode 100644
+index 0000000000..72baab05f4
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/gen/debug.rs
+@@ -0,0 +1,2857 @@
++// This file is @generated by syn-internal-codegen.
++// It is not intended for manual editing.
++
++use crate::*;
++use std::fmt::{self, Debug};
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Abi {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Abi");
++ formatter.field("extern_token", &self.extern_token);
++ formatter.field("name", &self.name);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for AngleBracketedGenericArguments {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("AngleBracketedGenericArguments");
++ formatter.field("colon2_token", &self.colon2_token);
++ formatter.field("lt_token", &self.lt_token);
++ formatter.field("args", &self.args);
++ formatter.field("gt_token", &self.gt_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Arm {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Arm");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("pat", &self.pat);
++ formatter.field("guard", &self.guard);
++ formatter.field("fat_arrow_token", &self.fat_arrow_token);
++ formatter.field("body", &self.body);
++ formatter.field("comma", &self.comma);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for AttrStyle {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ AttrStyle::Outer => formatter.write_str("Outer"),
++ AttrStyle::Inner(v0) => {
++ let mut formatter = formatter.debug_tuple("Inner");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Attribute {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Attribute");
++ formatter.field("pound_token", &self.pound_token);
++ formatter.field("style", &self.style);
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("path", &self.path);
++ formatter.field("tokens", &self.tokens);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for BareFnArg {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("BareFnArg");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("name", &self.name);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for BinOp {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ BinOp::Add(v0) => {
++ let mut formatter = formatter.debug_tuple("Add");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Sub(v0) => {
++ let mut formatter = formatter.debug_tuple("Sub");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Mul(v0) => {
++ let mut formatter = formatter.debug_tuple("Mul");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Div(v0) => {
++ let mut formatter = formatter.debug_tuple("Div");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Rem(v0) => {
++ let mut formatter = formatter.debug_tuple("Rem");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::And(v0) => {
++ let mut formatter = formatter.debug_tuple("And");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Or(v0) => {
++ let mut formatter = formatter.debug_tuple("Or");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitXor(v0) => {
++ let mut formatter = formatter.debug_tuple("BitXor");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitAnd(v0) => {
++ let mut formatter = formatter.debug_tuple("BitAnd");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitOr(v0) => {
++ let mut formatter = formatter.debug_tuple("BitOr");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Shl(v0) => {
++ let mut formatter = formatter.debug_tuple("Shl");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Shr(v0) => {
++ let mut formatter = formatter.debug_tuple("Shr");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Eq(v0) => {
++ let mut formatter = formatter.debug_tuple("Eq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Lt(v0) => {
++ let mut formatter = formatter.debug_tuple("Lt");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Le(v0) => {
++ let mut formatter = formatter.debug_tuple("Le");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Ne(v0) => {
++ let mut formatter = formatter.debug_tuple("Ne");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Ge(v0) => {
++ let mut formatter = formatter.debug_tuple("Ge");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::Gt(v0) => {
++ let mut formatter = formatter.debug_tuple("Gt");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::AddEq(v0) => {
++ let mut formatter = formatter.debug_tuple("AddEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::SubEq(v0) => {
++ let mut formatter = formatter.debug_tuple("SubEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::MulEq(v0) => {
++ let mut formatter = formatter.debug_tuple("MulEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::DivEq(v0) => {
++ let mut formatter = formatter.debug_tuple("DivEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::RemEq(v0) => {
++ let mut formatter = formatter.debug_tuple("RemEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitXorEq(v0) => {
++ let mut formatter = formatter.debug_tuple("BitXorEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitAndEq(v0) => {
++ let mut formatter = formatter.debug_tuple("BitAndEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::BitOrEq(v0) => {
++ let mut formatter = formatter.debug_tuple("BitOrEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::ShlEq(v0) => {
++ let mut formatter = formatter.debug_tuple("ShlEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ BinOp::ShrEq(v0) => {
++ let mut formatter = formatter.debug_tuple("ShrEq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Binding {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Binding");
++ formatter.field("ident", &self.ident);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Block {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Block");
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("stmts", &self.stmts);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for BoundLifetimes {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("BoundLifetimes");
++ formatter.field("for_token", &self.for_token);
++ formatter.field("lt_token", &self.lt_token);
++ formatter.field("lifetimes", &self.lifetimes);
++ formatter.field("gt_token", &self.gt_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ConstParam {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ConstParam");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("const_token", &self.const_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("default", &self.default);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Constraint {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Constraint");
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "derive")]
++impl Debug for Data {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Data::Struct(v0) => {
++ let mut formatter = formatter.debug_tuple("Struct");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Data::Enum(v0) => {
++ let mut formatter = formatter.debug_tuple("Enum");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Data::Union(v0) => {
++ let mut formatter = formatter.debug_tuple("Union");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Debug for DataEnum {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("DataEnum");
++ formatter.field("enum_token", &self.enum_token);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("variants", &self.variants);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "derive")]
++impl Debug for DataStruct {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("DataStruct");
++ formatter.field("struct_token", &self.struct_token);
++ formatter.field("fields", &self.fields);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "derive")]
++impl Debug for DataUnion {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("DataUnion");
++ formatter.field("union_token", &self.union_token);
++ formatter.field("fields", &self.fields);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "derive")]
++impl Debug for DeriveInput {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("DeriveInput");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("data", &self.data);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Expr {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ #[cfg(feature = "full")]
++ Expr::Array(v0) => {
++ let mut formatter = formatter.debug_tuple("Array");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Assign(v0) => {
++ let mut formatter = formatter.debug_tuple("Assign");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::AssignOp(v0) => {
++ let mut formatter = formatter.debug_tuple("AssignOp");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Async(v0) => {
++ let mut formatter = formatter.debug_tuple("Async");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Await(v0) => {
++ let mut formatter = formatter.debug_tuple("Await");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Binary(v0) => {
++ let mut formatter = formatter.debug_tuple("Binary");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Block(v0) => {
++ let mut formatter = formatter.debug_tuple("Block");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Box(v0) => {
++ let mut formatter = formatter.debug_tuple("Box");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Break(v0) => {
++ let mut formatter = formatter.debug_tuple("Break");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Call(v0) => {
++ let mut formatter = formatter.debug_tuple("Call");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Cast(v0) => {
++ let mut formatter = formatter.debug_tuple("Cast");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Closure(v0) => {
++ let mut formatter = formatter.debug_tuple("Closure");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Continue(v0) => {
++ let mut formatter = formatter.debug_tuple("Continue");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Field(v0) => {
++ let mut formatter = formatter.debug_tuple("Field");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::ForLoop(v0) => {
++ let mut formatter = formatter.debug_tuple("ForLoop");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Group(v0) => {
++ let mut formatter = formatter.debug_tuple("Group");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::If(v0) => {
++ let mut formatter = formatter.debug_tuple("If");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Index(v0) => {
++ let mut formatter = formatter.debug_tuple("Index");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Let(v0) => {
++ let mut formatter = formatter.debug_tuple("Let");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Lit(v0) => {
++ let mut formatter = formatter.debug_tuple("Lit");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Loop(v0) => {
++ let mut formatter = formatter.debug_tuple("Loop");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Match(v0) => {
++ let mut formatter = formatter.debug_tuple("Match");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::MethodCall(v0) => {
++ let mut formatter = formatter.debug_tuple("MethodCall");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Paren(v0) => {
++ let mut formatter = formatter.debug_tuple("Paren");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Path(v0) => {
++ let mut formatter = formatter.debug_tuple("Path");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Range(v0) => {
++ let mut formatter = formatter.debug_tuple("Range");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Reference(v0) => {
++ let mut formatter = formatter.debug_tuple("Reference");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Repeat(v0) => {
++ let mut formatter = formatter.debug_tuple("Repeat");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Return(v0) => {
++ let mut formatter = formatter.debug_tuple("Return");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Struct(v0) => {
++ let mut formatter = formatter.debug_tuple("Struct");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Try(v0) => {
++ let mut formatter = formatter.debug_tuple("Try");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::TryBlock(v0) => {
++ let mut formatter = formatter.debug_tuple("TryBlock");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Tuple(v0) => {
++ let mut formatter = formatter.debug_tuple("Tuple");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Unary(v0) => {
++ let mut formatter = formatter.debug_tuple("Unary");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Unsafe(v0) => {
++ let mut formatter = formatter.debug_tuple("Unsafe");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Expr::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::While(v0) => {
++ let mut formatter = formatter.debug_tuple("While");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ #[cfg(feature = "full")]
++ Expr::Yield(v0) => {
++ let mut formatter = formatter.debug_tuple("Yield");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprArray {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprArray");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("elems", &self.elems);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprAssign {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprAssign");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("left", &self.left);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("right", &self.right);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprAssignOp {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprAssignOp");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("left", &self.left);
++ formatter.field("op", &self.op);
++ formatter.field("right", &self.right);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprAsync {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprAsync");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("async_token", &self.async_token);
++ formatter.field("capture", &self.capture);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprAwait {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprAwait");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("base", &self.base);
++ formatter.field("dot_token", &self.dot_token);
++ formatter.field("await_token", &self.await_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprBinary {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprBinary");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("left", &self.left);
++ formatter.field("op", &self.op);
++ formatter.field("right", &self.right);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprBlock {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprBlock");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("label", &self.label);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprBox {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprBox");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("box_token", &self.box_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprBreak {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprBreak");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("break_token", &self.break_token);
++ formatter.field("label", &self.label);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprCall {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprCall");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("func", &self.func);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("args", &self.args);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprCast {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprCast");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("expr", &self.expr);
++ formatter.field("as_token", &self.as_token);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprClosure {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprClosure");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("asyncness", &self.asyncness);
++ formatter.field("movability", &self.movability);
++ formatter.field("capture", &self.capture);
++ formatter.field("or1_token", &self.or1_token);
++ formatter.field("inputs", &self.inputs);
++ formatter.field("or2_token", &self.or2_token);
++ formatter.field("output", &self.output);
++ formatter.field("body", &self.body);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprContinue {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprContinue");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("continue_token", &self.continue_token);
++ formatter.field("label", &self.label);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprField {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprField");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("base", &self.base);
++ formatter.field("dot_token", &self.dot_token);
++ formatter.field("member", &self.member);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprForLoop {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprForLoop");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("label", &self.label);
++ formatter.field("for_token", &self.for_token);
++ formatter.field("pat", &self.pat);
++ formatter.field("in_token", &self.in_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("body", &self.body);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprGroup {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprGroup");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("group_token", &self.group_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprIf {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprIf");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("if_token", &self.if_token);
++ formatter.field("cond", &self.cond);
++ formatter.field("then_branch", &self.then_branch);
++ formatter.field("else_branch", &self.else_branch);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprIndex {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprIndex");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("expr", &self.expr);
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("index", &self.index);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprLet {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprLet");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("let_token", &self.let_token);
++ formatter.field("pat", &self.pat);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprLit {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprLit");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("lit", &self.lit);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprLoop {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprLoop");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("label", &self.label);
++ formatter.field("loop_token", &self.loop_token);
++ formatter.field("body", &self.body);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("mac", &self.mac);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprMatch {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprMatch");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("match_token", &self.match_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("arms", &self.arms);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprMethodCall {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprMethodCall");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("receiver", &self.receiver);
++ formatter.field("dot_token", &self.dot_token);
++ formatter.field("method", &self.method);
++ formatter.field("turbofish", &self.turbofish);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("args", &self.args);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprParen {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprParen");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprPath {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprPath");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("qself", &self.qself);
++ formatter.field("path", &self.path);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprRange {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprRange");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("from", &self.from);
++ formatter.field("limits", &self.limits);
++ formatter.field("to", &self.to);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprReference {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprReference");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("and_token", &self.and_token);
++ formatter.field("raw", &self.raw);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprRepeat {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprRepeat");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.field("len", &self.len);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprReturn {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprReturn");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("return_token", &self.return_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprStruct {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprStruct");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("path", &self.path);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("fields", &self.fields);
++ formatter.field("dot2_token", &self.dot2_token);
++ formatter.field("rest", &self.rest);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprTry {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprTry");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("expr", &self.expr);
++ formatter.field("question_token", &self.question_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprTryBlock {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprTryBlock");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("try_token", &self.try_token);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprTuple {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprTuple");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("elems", &self.elems);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("expr", &self.expr);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ExprUnary {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprUnary");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("op", &self.op);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprUnsafe {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprUnsafe");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("unsafe_token", &self.unsafe_token);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprWhile {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprWhile");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("label", &self.label);
++ formatter.field("while_token", &self.while_token);
++ formatter.field("cond", &self.cond);
++ formatter.field("body", &self.body);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ExprYield {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ExprYield");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("yield_token", &self.yield_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Field {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Field");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for FieldPat {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("FieldPat");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("member", &self.member);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("pat", &self.pat);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for FieldValue {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("FieldValue");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("member", &self.member);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Fields {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Fields::Named(v0) => {
++ let mut formatter = formatter.debug_tuple("Named");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Fields::Unnamed(v0) => {
++ let mut formatter = formatter.debug_tuple("Unnamed");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Fields::Unit => formatter.write_str("Unit"),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for FieldsNamed {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("FieldsNamed");
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("named", &self.named);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for FieldsUnnamed {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("FieldsUnnamed");
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("unnamed", &self.unnamed);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for File {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("File");
++ formatter.field("shebang", &self.shebang);
++ formatter.field("attrs", &self.attrs);
++ formatter.field("items", &self.items);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for FnArg {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ FnArg::Receiver(v0) => {
++ let mut formatter = formatter.debug_tuple("Receiver");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ FnArg::Typed(v0) => {
++ let mut formatter = formatter.debug_tuple("Typed");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ForeignItem {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ ForeignItem::Fn(v0) => {
++ let mut formatter = formatter.debug_tuple("Fn");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ForeignItem::Static(v0) => {
++ let mut formatter = formatter.debug_tuple("Static");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ForeignItem::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ForeignItem::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ForeignItem::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ForeignItemFn {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ForeignItemFn");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("sig", &self.sig);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ForeignItemMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ForeignItemMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("mac", &self.mac);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ForeignItemStatic {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ForeignItemStatic");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("static_token", &self.static_token);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ForeignItemType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ForeignItemType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("type_token", &self.type_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for GenericArgument {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ GenericArgument::Lifetime(v0) => {
++ let mut formatter = formatter.debug_tuple("Lifetime");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericArgument::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericArgument::Binding(v0) => {
++ let mut formatter = formatter.debug_tuple("Binding");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericArgument::Constraint(v0) => {
++ let mut formatter = formatter.debug_tuple("Constraint");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericArgument::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for GenericMethodArgument {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ GenericMethodArgument::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericMethodArgument::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for GenericParam {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ GenericParam::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericParam::Lifetime(v0) => {
++ let mut formatter = formatter.debug_tuple("Lifetime");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ GenericParam::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Generics {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Generics");
++ formatter.field("lt_token", &self.lt_token);
++ formatter.field("params", &self.params);
++ formatter.field("gt_token", &self.gt_token);
++ formatter.field("where_clause", &self.where_clause);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ImplItem {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ ImplItem::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ImplItem::Method(v0) => {
++ let mut formatter = formatter.debug_tuple("Method");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ImplItem::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ImplItem::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ ImplItem::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ImplItemConst {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ImplItemConst");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("defaultness", &self.defaultness);
++ formatter.field("const_token", &self.const_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ImplItemMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ImplItemMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("mac", &self.mac);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ImplItemMethod {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ImplItemMethod");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("defaultness", &self.defaultness);
++ formatter.field("sig", &self.sig);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ImplItemType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ImplItemType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("defaultness", &self.defaultness);
++ formatter.field("type_token", &self.type_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Index {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Index");
++ formatter.field("index", &self.index);
++ formatter.field("span", &self.span);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Item {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Item::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Enum(v0) => {
++ let mut formatter = formatter.debug_tuple("Enum");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::ExternCrate(v0) => {
++ let mut formatter = formatter.debug_tuple("ExternCrate");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Fn(v0) => {
++ let mut formatter = formatter.debug_tuple("Fn");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::ForeignMod(v0) => {
++ let mut formatter = formatter.debug_tuple("ForeignMod");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Impl(v0) => {
++ let mut formatter = formatter.debug_tuple("Impl");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Macro2(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro2");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Mod(v0) => {
++ let mut formatter = formatter.debug_tuple("Mod");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Static(v0) => {
++ let mut formatter = formatter.debug_tuple("Static");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Struct(v0) => {
++ let mut formatter = formatter.debug_tuple("Struct");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Trait(v0) => {
++ let mut formatter = formatter.debug_tuple("Trait");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::TraitAlias(v0) => {
++ let mut formatter = formatter.debug_tuple("TraitAlias");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Union(v0) => {
++ let mut formatter = formatter.debug_tuple("Union");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Use(v0) => {
++ let mut formatter = formatter.debug_tuple("Use");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Item::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemConst {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemConst");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("const_token", &self.const_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemEnum {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemEnum");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("enum_token", &self.enum_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("variants", &self.variants);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemExternCrate {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemExternCrate");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("extern_token", &self.extern_token);
++ formatter.field("crate_token", &self.crate_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("rename", &self.rename);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemFn {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemFn");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("sig", &self.sig);
++ formatter.field("block", &self.block);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemForeignMod {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemForeignMod");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("abi", &self.abi);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("items", &self.items);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemImpl {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemImpl");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("defaultness", &self.defaultness);
++ formatter.field("unsafety", &self.unsafety);
++ formatter.field("impl_token", &self.impl_token);
++ formatter.field("generics", &self.generics);
++ formatter.field("trait_", &self.trait_);
++ formatter.field("self_ty", &self.self_ty);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("items", &self.items);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("ident", &self.ident);
++ formatter.field("mac", &self.mac);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemMacro2 {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemMacro2");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("macro_token", &self.macro_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("rules", &self.rules);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemMod {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemMod");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("mod_token", &self.mod_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("content", &self.content);
++ formatter.field("semi", &self.semi);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemStatic {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemStatic");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("static_token", &self.static_token);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("expr", &self.expr);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemStruct {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemStruct");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("struct_token", &self.struct_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("fields", &self.fields);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemTrait {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemTrait");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("unsafety", &self.unsafety);
++ formatter.field("auto_token", &self.auto_token);
++ formatter.field("trait_token", &self.trait_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("supertraits", &self.supertraits);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("items", &self.items);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemTraitAlias {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemTraitAlias");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("trait_token", &self.trait_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("type_token", &self.type_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemUnion {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemUnion");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("union_token", &self.union_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("fields", &self.fields);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for ItemUse {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ItemUse");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("vis", &self.vis);
++ formatter.field("use_token", &self.use_token);
++ formatter.field("leading_colon", &self.leading_colon);
++ formatter.field("tree", &self.tree);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Label {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Label");
++ formatter.field("name", &self.name);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.finish()
++ }
++}
++impl Debug for Lifetime {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Lifetime");
++ formatter.field("apostrophe", &self.apostrophe);
++ formatter.field("ident", &self.ident);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for LifetimeDef {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("LifetimeDef");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("lifetime", &self.lifetime);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++impl Debug for Lit {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Lit::Str(v0) => {
++ let mut formatter = formatter.debug_tuple("Str");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::ByteStr(v0) => {
++ let mut formatter = formatter.debug_tuple("ByteStr");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Byte(v0) => {
++ let mut formatter = formatter.debug_tuple("Byte");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Char(v0) => {
++ let mut formatter = formatter.debug_tuple("Char");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Int(v0) => {
++ let mut formatter = formatter.debug_tuple("Int");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Float(v0) => {
++ let mut formatter = formatter.debug_tuple("Float");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Bool(v0) => {
++ let mut formatter = formatter.debug_tuple("Bool");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Lit::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Local {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Local");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("let_token", &self.let_token);
++ formatter.field("pat", &self.pat);
++ formatter.field("init", &self.init);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Macro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Macro");
++ formatter.field("path", &self.path);
++ formatter.field("bang_token", &self.bang_token);
++ formatter.field("delimiter", &self.delimiter);
++ formatter.field("tokens", &self.tokens);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for MacroDelimiter {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ MacroDelimiter::Paren(v0) => {
++ let mut formatter = formatter.debug_tuple("Paren");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ MacroDelimiter::Brace(v0) => {
++ let mut formatter = formatter.debug_tuple("Brace");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ MacroDelimiter::Bracket(v0) => {
++ let mut formatter = formatter.debug_tuple("Bracket");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Member {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Member::Named(v0) => {
++ let mut formatter = formatter.debug_tuple("Named");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Member::Unnamed(v0) => {
++ let mut formatter = formatter.debug_tuple("Unnamed");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Meta {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Meta::Path(v0) => {
++ let mut formatter = formatter.debug_tuple("Path");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Meta::List(v0) => {
++ let mut formatter = formatter.debug_tuple("List");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Meta::NameValue(v0) => {
++ let mut formatter = formatter.debug_tuple("NameValue");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for MetaList {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("MetaList");
++ formatter.field("path", &self.path);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("nested", &self.nested);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for MetaNameValue {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("MetaNameValue");
++ formatter.field("path", &self.path);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("lit", &self.lit);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for MethodTurbofish {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("MethodTurbofish");
++ formatter.field("colon2_token", &self.colon2_token);
++ formatter.field("lt_token", &self.lt_token);
++ formatter.field("args", &self.args);
++ formatter.field("gt_token", &self.gt_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for NestedMeta {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ NestedMeta::Meta(v0) => {
++ let mut formatter = formatter.debug_tuple("Meta");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ NestedMeta::Lit(v0) => {
++ let mut formatter = formatter.debug_tuple("Lit");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ParenthesizedGenericArguments {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("ParenthesizedGenericArguments");
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("inputs", &self.inputs);
++ formatter.field("output", &self.output);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Pat {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Pat::Box(v0) => {
++ let mut formatter = formatter.debug_tuple("Box");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Ident(v0) => {
++ let mut formatter = formatter.debug_tuple("Ident");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Lit(v0) => {
++ let mut formatter = formatter.debug_tuple("Lit");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Or(v0) => {
++ let mut formatter = formatter.debug_tuple("Or");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Path(v0) => {
++ let mut formatter = formatter.debug_tuple("Path");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Range(v0) => {
++ let mut formatter = formatter.debug_tuple("Range");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Reference(v0) => {
++ let mut formatter = formatter.debug_tuple("Reference");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Rest(v0) => {
++ let mut formatter = formatter.debug_tuple("Rest");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Slice(v0) => {
++ let mut formatter = formatter.debug_tuple("Slice");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Struct(v0) => {
++ let mut formatter = formatter.debug_tuple("Struct");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Tuple(v0) => {
++ let mut formatter = formatter.debug_tuple("Tuple");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::TupleStruct(v0) => {
++ let mut formatter = formatter.debug_tuple("TupleStruct");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Pat::Wild(v0) => {
++ let mut formatter = formatter.debug_tuple("Wild");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatBox {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatBox");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("box_token", &self.box_token);
++ formatter.field("pat", &self.pat);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatIdent {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatIdent");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("by_ref", &self.by_ref);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("ident", &self.ident);
++ formatter.field("subpat", &self.subpat);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatLit {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatLit");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("expr", &self.expr);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("mac", &self.mac);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatOr {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatOr");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("leading_vert", &self.leading_vert);
++ formatter.field("cases", &self.cases);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatPath {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatPath");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("qself", &self.qself);
++ formatter.field("path", &self.path);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatRange {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatRange");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("lo", &self.lo);
++ formatter.field("limits", &self.limits);
++ formatter.field("hi", &self.hi);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatReference {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatReference");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("and_token", &self.and_token);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("pat", &self.pat);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatRest {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatRest");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("dot2_token", &self.dot2_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatSlice {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatSlice");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("elems", &self.elems);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatStruct {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatStruct");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("path", &self.path);
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("fields", &self.fields);
++ formatter.field("dot2_token", &self.dot2_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatTuple {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatTuple");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("elems", &self.elems);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatTupleStruct {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatTupleStruct");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("path", &self.path);
++ formatter.field("pat", &self.pat);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("pat", &self.pat);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for PatWild {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PatWild");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("underscore_token", &self.underscore_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Path {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Path");
++ formatter.field("leading_colon", &self.leading_colon);
++ formatter.field("segments", &self.segments);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for PathArguments {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ PathArguments::None => formatter.write_str("None"),
++ PathArguments::AngleBracketed(v0) => {
++ let mut formatter = formatter.debug_tuple("AngleBracketed");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ PathArguments::Parenthesized(v0) => {
++ let mut formatter = formatter.debug_tuple("Parenthesized");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for PathSegment {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PathSegment");
++ formatter.field("ident", &self.ident);
++ formatter.field("arguments", &self.arguments);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for PredicateEq {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PredicateEq");
++ formatter.field("lhs_ty", &self.lhs_ty);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("rhs_ty", &self.rhs_ty);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for PredicateLifetime {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PredicateLifetime");
++ formatter.field("lifetime", &self.lifetime);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for PredicateType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("PredicateType");
++ formatter.field("lifetimes", &self.lifetimes);
++ formatter.field("bounded_ty", &self.bounded_ty);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for QSelf {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("QSelf");
++ formatter.field("lt_token", &self.lt_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("position", &self.position);
++ formatter.field("as_token", &self.as_token);
++ formatter.field("gt_token", &self.gt_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for RangeLimits {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ RangeLimits::HalfOpen(v0) => {
++ let mut formatter = formatter.debug_tuple("HalfOpen");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ RangeLimits::Closed(v0) => {
++ let mut formatter = formatter.debug_tuple("Closed");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Receiver {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Receiver");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("reference", &self.reference);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("self_token", &self.self_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for ReturnType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ ReturnType::Default => formatter.write_str("Default"),
++ ReturnType::Type(v0, v1) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.field(v1);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Signature {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Signature");
++ formatter.field("constness", &self.constness);
++ formatter.field("asyncness", &self.asyncness);
++ formatter.field("unsafety", &self.unsafety);
++ formatter.field("abi", &self.abi);
++ formatter.field("fn_token", &self.fn_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("inputs", &self.inputs);
++ formatter.field("variadic", &self.variadic);
++ formatter.field("output", &self.output);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for Stmt {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Stmt::Local(v0) => {
++ let mut formatter = formatter.debug_tuple("Local");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Stmt::Item(v0) => {
++ let mut formatter = formatter.debug_tuple("Item");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Stmt::Expr(v0) => {
++ let mut formatter = formatter.debug_tuple("Expr");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Stmt::Semi(v0, v1) => {
++ let mut formatter = formatter.debug_tuple("Semi");
++ formatter.field(v0);
++ formatter.field(v1);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TraitBound {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TraitBound");
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("modifier", &self.modifier);
++ formatter.field("lifetimes", &self.lifetimes);
++ formatter.field("path", &self.path);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TraitBoundModifier {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ TraitBoundModifier::None => formatter.write_str("None"),
++ TraitBoundModifier::Maybe(v0) => {
++ let mut formatter = formatter.debug_tuple("Maybe");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for TraitItem {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ TraitItem::Const(v0) => {
++ let mut formatter = formatter.debug_tuple("Const");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ TraitItem::Method(v0) => {
++ let mut formatter = formatter.debug_tuple("Method");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ TraitItem::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ TraitItem::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ TraitItem::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for TraitItemConst {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TraitItemConst");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("const_token", &self.const_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("ty", &self.ty);
++ formatter.field("default", &self.default);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for TraitItemMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TraitItemMacro");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("mac", &self.mac);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for TraitItemMethod {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TraitItemMethod");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("sig", &self.sig);
++ formatter.field("default", &self.default);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for TraitItemType {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TraitItemType");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("type_token", &self.type_token);
++ formatter.field("ident", &self.ident);
++ formatter.field("generics", &self.generics);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.field("default", &self.default);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Type {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Type::Array(v0) => {
++ let mut formatter = formatter.debug_tuple("Array");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::BareFn(v0) => {
++ let mut formatter = formatter.debug_tuple("BareFn");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Group(v0) => {
++ let mut formatter = formatter.debug_tuple("Group");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::ImplTrait(v0) => {
++ let mut formatter = formatter.debug_tuple("ImplTrait");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Infer(v0) => {
++ let mut formatter = formatter.debug_tuple("Infer");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Macro(v0) => {
++ let mut formatter = formatter.debug_tuple("Macro");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Never(v0) => {
++ let mut formatter = formatter.debug_tuple("Never");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Paren(v0) => {
++ let mut formatter = formatter.debug_tuple("Paren");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Path(v0) => {
++ let mut formatter = formatter.debug_tuple("Path");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Ptr(v0) => {
++ let mut formatter = formatter.debug_tuple("Ptr");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Reference(v0) => {
++ let mut formatter = formatter.debug_tuple("Reference");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Slice(v0) => {
++ let mut formatter = formatter.debug_tuple("Slice");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::TraitObject(v0) => {
++ let mut formatter = formatter.debug_tuple("TraitObject");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Tuple(v0) => {
++ let mut formatter = formatter.debug_tuple("Tuple");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Type::Verbatim(v0) => {
++ let mut formatter = formatter.debug_tuple("Verbatim");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeArray {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeArray");
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("elem", &self.elem);
++ formatter.field("semi_token", &self.semi_token);
++ formatter.field("len", &self.len);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeBareFn {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeBareFn");
++ formatter.field("lifetimes", &self.lifetimes);
++ formatter.field("unsafety", &self.unsafety);
++ formatter.field("abi", &self.abi);
++ formatter.field("fn_token", &self.fn_token);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("inputs", &self.inputs);
++ formatter.field("variadic", &self.variadic);
++ formatter.field("output", &self.output);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeGroup {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeGroup");
++ formatter.field("group_token", &self.group_token);
++ formatter.field("elem", &self.elem);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeImplTrait {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeImplTrait");
++ formatter.field("impl_token", &self.impl_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeInfer {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeInfer");
++ formatter.field("underscore_token", &self.underscore_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeMacro {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeMacro");
++ formatter.field("mac", &self.mac);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeNever {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeNever");
++ formatter.field("bang_token", &self.bang_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeParam {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeParam");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("ident", &self.ident);
++ formatter.field("colon_token", &self.colon_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.field("eq_token", &self.eq_token);
++ formatter.field("default", &self.default);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeParamBound {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ TypeParamBound::Trait(v0) => {
++ let mut formatter = formatter.debug_tuple("Trait");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ TypeParamBound::Lifetime(v0) => {
++ let mut formatter = formatter.debug_tuple("Lifetime");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeParen {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeParen");
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("elem", &self.elem);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypePath {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypePath");
++ formatter.field("qself", &self.qself);
++ formatter.field("path", &self.path);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypePtr {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypePtr");
++ formatter.field("star_token", &self.star_token);
++ formatter.field("const_token", &self.const_token);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("elem", &self.elem);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeReference {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeReference");
++ formatter.field("and_token", &self.and_token);
++ formatter.field("lifetime", &self.lifetime);
++ formatter.field("mutability", &self.mutability);
++ formatter.field("elem", &self.elem);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeSlice {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeSlice");
++ formatter.field("bracket_token", &self.bracket_token);
++ formatter.field("elem", &self.elem);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeTraitObject {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeTraitObject");
++ formatter.field("dyn_token", &self.dyn_token);
++ formatter.field("bounds", &self.bounds);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for TypeTuple {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("TypeTuple");
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("elems", &self.elems);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for UnOp {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ UnOp::Deref(v0) => {
++ let mut formatter = formatter.debug_tuple("Deref");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UnOp::Not(v0) => {
++ let mut formatter = formatter.debug_tuple("Not");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UnOp::Neg(v0) => {
++ let mut formatter = formatter.debug_tuple("Neg");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UseGlob {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("UseGlob");
++ formatter.field("star_token", &self.star_token);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UseGroup {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("UseGroup");
++ formatter.field("brace_token", &self.brace_token);
++ formatter.field("items", &self.items);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UseName {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("UseName");
++ formatter.field("ident", &self.ident);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UsePath {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("UsePath");
++ formatter.field("ident", &self.ident);
++ formatter.field("colon2_token", &self.colon2_token);
++ formatter.field("tree", &self.tree);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UseRename {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("UseRename");
++ formatter.field("ident", &self.ident);
++ formatter.field("as_token", &self.as_token);
++ formatter.field("rename", &self.rename);
++ formatter.finish()
++ }
++}
++#[cfg(feature = "full")]
++impl Debug for UseTree {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ UseTree::Path(v0) => {
++ let mut formatter = formatter.debug_tuple("Path");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UseTree::Name(v0) => {
++ let mut formatter = formatter.debug_tuple("Name");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UseTree::Rename(v0) => {
++ let mut formatter = formatter.debug_tuple("Rename");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UseTree::Glob(v0) => {
++ let mut formatter = formatter.debug_tuple("Glob");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ UseTree::Group(v0) => {
++ let mut formatter = formatter.debug_tuple("Group");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Variadic {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Variadic");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("dots", &self.dots);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Variant {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("Variant");
++ formatter.field("attrs", &self.attrs);
++ formatter.field("ident", &self.ident);
++ formatter.field("fields", &self.fields);
++ formatter.field("discriminant", &self.discriminant);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for VisCrate {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("VisCrate");
++ formatter.field("crate_token", &self.crate_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for VisPublic {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("VisPublic");
++ formatter.field("pub_token", &self.pub_token);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for VisRestricted {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("VisRestricted");
++ formatter.field("pub_token", &self.pub_token);
++ formatter.field("paren_token", &self.paren_token);
++ formatter.field("in_token", &self.in_token);
++ formatter.field("path", &self.path);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for Visibility {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ Visibility::Public(v0) => {
++ let mut formatter = formatter.debug_tuple("Public");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Visibility::Crate(v0) => {
++ let mut formatter = formatter.debug_tuple("Crate");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Visibility::Restricted(v0) => {
++ let mut formatter = formatter.debug_tuple("Restricted");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ Visibility::Inherited => formatter.write_str("Inherited"),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for WhereClause {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut formatter = formatter.debug_struct("WhereClause");
++ formatter.field("where_token", &self.where_token);
++ formatter.field("predicates", &self.predicates);
++ formatter.finish()
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Debug for WherePredicate {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match self {
++ WherePredicate::Type(v0) => {
++ let mut formatter = formatter.debug_tuple("Type");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ WherePredicate::Lifetime(v0) => {
++ let mut formatter = formatter.debug_tuple("Lifetime");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ WherePredicate::Eq(v0) => {
++ let mut formatter = formatter.debug_tuple("Eq");
++ formatter.field(v0);
++ formatter.finish()
++ }
++ }
++ }
++}
+diff --git a/third_party/rust/syn/src/gen/eq.rs b/third_party/rust/syn/src/gen/eq.rs
+new file mode 100644
+index 0000000000..15b2bcbbde
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/gen/eq.rs
+@@ -0,0 +1,1930 @@
++// This file is @generated by syn-internal-codegen.
++// It is not intended for manual editing.
++
++#[cfg(any(feature = "derive", feature = "full"))]
++use crate::tt::TokenStreamHelper;
++use crate::*;
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Abi {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Abi {
++ fn eq(&self, other: &Self) -> bool {
++ self.name == other.name
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for AngleBracketedGenericArguments {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for AngleBracketedGenericArguments {
++ fn eq(&self, other: &Self) -> bool {
++ self.colon2_token == other.colon2_token && self.args == other.args
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Arm {}
++#[cfg(feature = "full")]
++impl PartialEq for Arm {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.pat == other.pat
++ && self.guard == other.guard
++ && self.body == other.body
++ && self.comma == other.comma
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for AttrStyle {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for AttrStyle {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (AttrStyle::Outer, AttrStyle::Outer) => true,
++ (AttrStyle::Inner(_), AttrStyle::Inner(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Attribute {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Attribute {
++ fn eq(&self, other: &Self) -> bool {
++ self.style == other.style
++ && self.path == other.path
++ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for BareFnArg {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for BareFnArg {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.name == other.name && self.ty == other.ty
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for BinOp {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for BinOp {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (BinOp::Add(_), BinOp::Add(_)) => true,
++ (BinOp::Sub(_), BinOp::Sub(_)) => true,
++ (BinOp::Mul(_), BinOp::Mul(_)) => true,
++ (BinOp::Div(_), BinOp::Div(_)) => true,
++ (BinOp::Rem(_), BinOp::Rem(_)) => true,
++ (BinOp::And(_), BinOp::And(_)) => true,
++ (BinOp::Or(_), BinOp::Or(_)) => true,
++ (BinOp::BitXor(_), BinOp::BitXor(_)) => true,
++ (BinOp::BitAnd(_), BinOp::BitAnd(_)) => true,
++ (BinOp::BitOr(_), BinOp::BitOr(_)) => true,
++ (BinOp::Shl(_), BinOp::Shl(_)) => true,
++ (BinOp::Shr(_), BinOp::Shr(_)) => true,
++ (BinOp::Eq(_), BinOp::Eq(_)) => true,
++ (BinOp::Lt(_), BinOp::Lt(_)) => true,
++ (BinOp::Le(_), BinOp::Le(_)) => true,
++ (BinOp::Ne(_), BinOp::Ne(_)) => true,
++ (BinOp::Ge(_), BinOp::Ge(_)) => true,
++ (BinOp::Gt(_), BinOp::Gt(_)) => true,
++ (BinOp::AddEq(_), BinOp::AddEq(_)) => true,
++ (BinOp::SubEq(_), BinOp::SubEq(_)) => true,
++ (BinOp::MulEq(_), BinOp::MulEq(_)) => true,
++ (BinOp::DivEq(_), BinOp::DivEq(_)) => true,
++ (BinOp::RemEq(_), BinOp::RemEq(_)) => true,
++ (BinOp::BitXorEq(_), BinOp::BitXorEq(_)) => true,
++ (BinOp::BitAndEq(_), BinOp::BitAndEq(_)) => true,
++ (BinOp::BitOrEq(_), BinOp::BitOrEq(_)) => true,
++ (BinOp::ShlEq(_), BinOp::ShlEq(_)) => true,
++ (BinOp::ShrEq(_), BinOp::ShrEq(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Binding {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Binding {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Block {}
++#[cfg(feature = "full")]
++impl PartialEq for Block {
++ fn eq(&self, other: &Self) -> bool {
++ self.stmts == other.stmts
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for BoundLifetimes {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for BoundLifetimes {
++ fn eq(&self, other: &Self) -> bool {
++ self.lifetimes == other.lifetimes
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ConstParam {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ConstParam {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.ty == other.ty
++ && self.eq_token == other.eq_token
++ && self.default == other.default
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Constraint {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Constraint {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident && self.bounds == other.bounds
++ }
++}
++#[cfg(feature = "derive")]
++impl Eq for Data {}
++#[cfg(feature = "derive")]
++impl PartialEq for Data {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Data::Struct(self0), Data::Struct(other0)) => self0 == other0,
++ (Data::Enum(self0), Data::Enum(other0)) => self0 == other0,
++ (Data::Union(self0), Data::Union(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Eq for DataEnum {}
++#[cfg(feature = "derive")]
++impl PartialEq for DataEnum {
++ fn eq(&self, other: &Self) -> bool {
++ self.variants == other.variants
++ }
++}
++#[cfg(feature = "derive")]
++impl Eq for DataStruct {}
++#[cfg(feature = "derive")]
++impl PartialEq for DataStruct {
++ fn eq(&self, other: &Self) -> bool {
++ self.fields == other.fields && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "derive")]
++impl Eq for DataUnion {}
++#[cfg(feature = "derive")]
++impl PartialEq for DataUnion {
++ fn eq(&self, other: &Self) -> bool {
++ self.fields == other.fields
++ }
++}
++#[cfg(feature = "derive")]
++impl Eq for DeriveInput {}
++#[cfg(feature = "derive")]
++impl PartialEq for DeriveInput {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.data == other.data
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Expr {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Expr {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ #[cfg(feature = "full")]
++ (Expr::Array(self0), Expr::Array(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Assign(self0), Expr::Assign(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::AssignOp(self0), Expr::AssignOp(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Async(self0), Expr::Async(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Await(self0), Expr::Await(other0)) => self0 == other0,
++ (Expr::Binary(self0), Expr::Binary(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Block(self0), Expr::Block(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Box(self0), Expr::Box(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Break(self0), Expr::Break(other0)) => self0 == other0,
++ (Expr::Call(self0), Expr::Call(other0)) => self0 == other0,
++ (Expr::Cast(self0), Expr::Cast(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Closure(self0), Expr::Closure(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Continue(self0), Expr::Continue(other0)) => self0 == other0,
++ (Expr::Field(self0), Expr::Field(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::ForLoop(self0), Expr::ForLoop(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Group(self0), Expr::Group(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::If(self0), Expr::If(other0)) => self0 == other0,
++ (Expr::Index(self0), Expr::Index(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Let(self0), Expr::Let(other0)) => self0 == other0,
++ (Expr::Lit(self0), Expr::Lit(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Loop(self0), Expr::Loop(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Macro(self0), Expr::Macro(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Match(self0), Expr::Match(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::MethodCall(self0), Expr::MethodCall(other0)) => self0 == other0,
++ (Expr::Paren(self0), Expr::Paren(other0)) => self0 == other0,
++ (Expr::Path(self0), Expr::Path(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Range(self0), Expr::Range(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Reference(self0), Expr::Reference(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Repeat(self0), Expr::Repeat(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Return(self0), Expr::Return(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Struct(self0), Expr::Struct(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Try(self0), Expr::Try(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::TryBlock(self0), Expr::TryBlock(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Tuple(self0), Expr::Tuple(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Type(self0), Expr::Type(other0)) => self0 == other0,
++ (Expr::Unary(self0), Expr::Unary(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Unsafe(self0), Expr::Unsafe(other0)) => self0 == other0,
++ (Expr::Verbatim(self0), Expr::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ #[cfg(feature = "full")]
++ (Expr::While(self0), Expr::While(other0)) => self0 == other0,
++ #[cfg(feature = "full")]
++ (Expr::Yield(self0), Expr::Yield(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprArray {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprArray {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.elems == other.elems
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprAssign {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprAssign {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.left == other.left && self.right == other.right
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprAssignOp {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprAssignOp {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.left == other.left
++ && self.op == other.op
++ && self.right == other.right
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprAsync {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprAsync {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.capture == other.capture && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprAwait {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprAwait {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.base == other.base
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprBinary {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprBinary {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.left == other.left
++ && self.op == other.op
++ && self.right == other.right
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprBlock {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprBlock {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.label == other.label && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprBox {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprBox {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprBreak {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprBreak {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.label == other.label && self.expr == other.expr
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprCall {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprCall {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.func == other.func && self.args == other.args
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprCast {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprCast {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprClosure {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprClosure {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.asyncness == other.asyncness
++ && self.movability == other.movability
++ && self.capture == other.capture
++ && self.inputs == other.inputs
++ && self.output == other.output
++ && self.body == other.body
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprContinue {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprContinue {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.label == other.label
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprField {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprField {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.base == other.base && self.member == other.member
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprForLoop {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprForLoop {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.label == other.label
++ && self.pat == other.pat
++ && self.expr == other.expr
++ && self.body == other.body
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprGroup {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprGroup {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprIf {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprIf {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.cond == other.cond
++ && self.then_branch == other.then_branch
++ && self.else_branch == other.else_branch
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprIndex {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprIndex {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr && self.index == other.index
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprLet {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprLet {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.pat == other.pat && self.expr == other.expr
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprLit {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprLit {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.lit == other.lit
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprLoop {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprLoop {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.label == other.label && self.body == other.body
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mac == other.mac
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprMatch {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprMatch {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr && self.arms == other.arms
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprMethodCall {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprMethodCall {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.receiver == other.receiver
++ && self.method == other.method
++ && self.turbofish == other.turbofish
++ && self.args == other.args
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprParen {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprParen {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprPath {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprPath {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprRange {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprRange {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.from == other.from
++ && self.limits == other.limits
++ && self.to == other.to
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprReference {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprReference {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mutability == other.mutability && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprRepeat {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprRepeat {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr && self.len == other.len
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprReturn {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprReturn {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprStruct {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprStruct {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.path == other.path
++ && self.fields == other.fields
++ && self.dot2_token == other.dot2_token
++ && self.rest == other.rest
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprTry {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprTry {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprTryBlock {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprTryBlock {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprTuple {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprTuple {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.elems == other.elems
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprType {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ExprUnary {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ExprUnary {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.op == other.op && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprUnsafe {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprUnsafe {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprWhile {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprWhile {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.label == other.label
++ && self.cond == other.cond
++ && self.body == other.body
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ExprYield {}
++#[cfg(feature = "full")]
++impl PartialEq for ExprYield {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Field {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Field {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.colon_token == other.colon_token
++ && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for FieldPat {}
++#[cfg(feature = "full")]
++impl PartialEq for FieldPat {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.member == other.member
++ && self.colon_token == other.colon_token
++ && self.pat == other.pat
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for FieldValue {}
++#[cfg(feature = "full")]
++impl PartialEq for FieldValue {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.member == other.member
++ && self.colon_token == other.colon_token
++ && self.expr == other.expr
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Fields {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Fields {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Fields::Named(self0), Fields::Named(other0)) => self0 == other0,
++ (Fields::Unnamed(self0), Fields::Unnamed(other0)) => self0 == other0,
++ (Fields::Unit, Fields::Unit) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for FieldsNamed {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for FieldsNamed {
++ fn eq(&self, other: &Self) -> bool {
++ self.named == other.named
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for FieldsUnnamed {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for FieldsUnnamed {
++ fn eq(&self, other: &Self) -> bool {
++ self.unnamed == other.unnamed
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for File {}
++#[cfg(feature = "full")]
++impl PartialEq for File {
++ fn eq(&self, other: &Self) -> bool {
++ self.shebang == other.shebang && self.attrs == other.attrs && self.items == other.items
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for FnArg {}
++#[cfg(feature = "full")]
++impl PartialEq for FnArg {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (FnArg::Receiver(self0), FnArg::Receiver(other0)) => self0 == other0,
++ (FnArg::Typed(self0), FnArg::Typed(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ForeignItem {}
++#[cfg(feature = "full")]
++impl PartialEq for ForeignItem {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (ForeignItem::Fn(self0), ForeignItem::Fn(other0)) => self0 == other0,
++ (ForeignItem::Static(self0), ForeignItem::Static(other0)) => self0 == other0,
++ (ForeignItem::Type(self0), ForeignItem::Type(other0)) => self0 == other0,
++ (ForeignItem::Macro(self0), ForeignItem::Macro(other0)) => self0 == other0,
++ (ForeignItem::Verbatim(self0), ForeignItem::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ForeignItemFn {}
++#[cfg(feature = "full")]
++impl PartialEq for ForeignItemFn {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.vis == other.vis && self.sig == other.sig
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ForeignItemMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for ForeignItemMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ForeignItemStatic {}
++#[cfg(feature = "full")]
++impl PartialEq for ForeignItemStatic {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.mutability == other.mutability
++ && self.ident == other.ident
++ && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ForeignItemType {}
++#[cfg(feature = "full")]
++impl PartialEq for ForeignItemType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.vis == other.vis && self.ident == other.ident
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for GenericArgument {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for GenericArgument {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (GenericArgument::Lifetime(self0), GenericArgument::Lifetime(other0)) => {
++ self0 == other0
++ }
++ (GenericArgument::Type(self0), GenericArgument::Type(other0)) => self0 == other0,
++ (GenericArgument::Binding(self0), GenericArgument::Binding(other0)) => self0 == other0,
++ (GenericArgument::Constraint(self0), GenericArgument::Constraint(other0)) => {
++ self0 == other0
++ }
++ (GenericArgument::Const(self0), GenericArgument::Const(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for GenericMethodArgument {}
++#[cfg(feature = "full")]
++impl PartialEq for GenericMethodArgument {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (GenericMethodArgument::Type(self0), GenericMethodArgument::Type(other0)) => {
++ self0 == other0
++ }
++ (GenericMethodArgument::Const(self0), GenericMethodArgument::Const(other0)) => {
++ self0 == other0
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for GenericParam {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for GenericParam {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (GenericParam::Type(self0), GenericParam::Type(other0)) => self0 == other0,
++ (GenericParam::Lifetime(self0), GenericParam::Lifetime(other0)) => self0 == other0,
++ (GenericParam::Const(self0), GenericParam::Const(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Generics {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Generics {
++ fn eq(&self, other: &Self) -> bool {
++ self.lt_token == other.lt_token
++ && self.params == other.params
++ && self.gt_token == other.gt_token
++ && self.where_clause == other.where_clause
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ImplItem {}
++#[cfg(feature = "full")]
++impl PartialEq for ImplItem {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (ImplItem::Const(self0), ImplItem::Const(other0)) => self0 == other0,
++ (ImplItem::Method(self0), ImplItem::Method(other0)) => self0 == other0,
++ (ImplItem::Type(self0), ImplItem::Type(other0)) => self0 == other0,
++ (ImplItem::Macro(self0), ImplItem::Macro(other0)) => self0 == other0,
++ (ImplItem::Verbatim(self0), ImplItem::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ImplItemConst {}
++#[cfg(feature = "full")]
++impl PartialEq for ImplItemConst {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.defaultness == other.defaultness
++ && self.ident == other.ident
++ && self.ty == other.ty
++ && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ImplItemMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for ImplItemMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ImplItemMethod {}
++#[cfg(feature = "full")]
++impl PartialEq for ImplItemMethod {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.defaultness == other.defaultness
++ && self.sig == other.sig
++ && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ImplItemType {}
++#[cfg(feature = "full")]
++impl PartialEq for ImplItemType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.defaultness == other.defaultness
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Item {}
++#[cfg(feature = "full")]
++impl PartialEq for Item {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Item::Const(self0), Item::Const(other0)) => self0 == other0,
++ (Item::Enum(self0), Item::Enum(other0)) => self0 == other0,
++ (Item::ExternCrate(self0), Item::ExternCrate(other0)) => self0 == other0,
++ (Item::Fn(self0), Item::Fn(other0)) => self0 == other0,
++ (Item::ForeignMod(self0), Item::ForeignMod(other0)) => self0 == other0,
++ (Item::Impl(self0), Item::Impl(other0)) => self0 == other0,
++ (Item::Macro(self0), Item::Macro(other0)) => self0 == other0,
++ (Item::Macro2(self0), Item::Macro2(other0)) => self0 == other0,
++ (Item::Mod(self0), Item::Mod(other0)) => self0 == other0,
++ (Item::Static(self0), Item::Static(other0)) => self0 == other0,
++ (Item::Struct(self0), Item::Struct(other0)) => self0 == other0,
++ (Item::Trait(self0), Item::Trait(other0)) => self0 == other0,
++ (Item::TraitAlias(self0), Item::TraitAlias(other0)) => self0 == other0,
++ (Item::Type(self0), Item::Type(other0)) => self0 == other0,
++ (Item::Union(self0), Item::Union(other0)) => self0 == other0,
++ (Item::Use(self0), Item::Use(other0)) => self0 == other0,
++ (Item::Verbatim(self0), Item::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemConst {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemConst {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.ty == other.ty
++ && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemEnum {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemEnum {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.variants == other.variants
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemExternCrate {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemExternCrate {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.rename == other.rename
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemFn {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemFn {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.sig == other.sig
++ && self.block == other.block
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemForeignMod {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemForeignMod {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.abi == other.abi && self.items == other.items
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemImpl {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemImpl {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.defaultness == other.defaultness
++ && self.unsafety == other.unsafety
++ && self.generics == other.generics
++ && self.trait_ == other.trait_
++ && self.self_ty == other.self_ty
++ && self.items == other.items
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.mac == other.mac
++ && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemMacro2 {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemMacro2 {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && TokenStreamHelper(&self.rules) == TokenStreamHelper(&other.rules)
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemMod {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemMod {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.content == other.content
++ && self.semi == other.semi
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemStatic {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemStatic {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.mutability == other.mutability
++ && self.ident == other.ident
++ && self.ty == other.ty
++ && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemStruct {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemStruct {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.fields == other.fields
++ && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemTrait {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemTrait {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.unsafety == other.unsafety
++ && self.auto_token == other.auto_token
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.colon_token == other.colon_token
++ && self.supertraits == other.supertraits
++ && self.items == other.items
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemTraitAlias {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemTraitAlias {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.bounds == other.bounds
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemType {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemUnion {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemUnion {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.fields == other.fields
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for ItemUse {}
++#[cfg(feature = "full")]
++impl PartialEq for ItemUse {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.vis == other.vis
++ && self.leading_colon == other.leading_colon
++ && self.tree == other.tree
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Label {}
++#[cfg(feature = "full")]
++impl PartialEq for Label {
++ fn eq(&self, other: &Self) -> bool {
++ self.name == other.name
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for LifetimeDef {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for LifetimeDef {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.lifetime == other.lifetime
++ && self.colon_token == other.colon_token
++ && self.bounds == other.bounds
++ }
++}
++impl Eq for Lit {}
++impl PartialEq for Lit {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Lit::Str(self0), Lit::Str(other0)) => self0 == other0,
++ (Lit::ByteStr(self0), Lit::ByteStr(other0)) => self0 == other0,
++ (Lit::Byte(self0), Lit::Byte(other0)) => self0 == other0,
++ (Lit::Char(self0), Lit::Char(other0)) => self0 == other0,
++ (Lit::Int(self0), Lit::Int(other0)) => self0 == other0,
++ (Lit::Float(self0), Lit::Float(other0)) => self0 == other0,
++ (Lit::Bool(self0), Lit::Bool(other0)) => self0 == other0,
++ (Lit::Verbatim(self0), Lit::Verbatim(other0)) => {
++ self0.to_string() == other0.to_string()
++ }
++ _ => false,
++ }
++ }
++}
++impl Eq for LitBool {}
++impl PartialEq for LitBool {
++ fn eq(&self, other: &Self) -> bool {
++ self.value == other.value
++ }
++}
++impl Eq for LitByte {}
++impl Eq for LitByteStr {}
++impl Eq for LitChar {}
++impl Eq for LitFloat {}
++impl Eq for LitInt {}
++impl Eq for LitStr {}
++#[cfg(feature = "full")]
++impl Eq for Local {}
++#[cfg(feature = "full")]
++impl PartialEq for Local {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.pat == other.pat && self.init == other.init
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Macro {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Macro {
++ fn eq(&self, other: &Self) -> bool {
++ self.path == other.path
++ && self.delimiter == other.delimiter
++ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for MacroDelimiter {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for MacroDelimiter {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (MacroDelimiter::Paren(_), MacroDelimiter::Paren(_)) => true,
++ (MacroDelimiter::Brace(_), MacroDelimiter::Brace(_)) => true,
++ (MacroDelimiter::Bracket(_), MacroDelimiter::Bracket(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Meta {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Meta {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Meta::Path(self0), Meta::Path(other0)) => self0 == other0,
++ (Meta::List(self0), Meta::List(other0)) => self0 == other0,
++ (Meta::NameValue(self0), Meta::NameValue(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for MetaList {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for MetaList {
++ fn eq(&self, other: &Self) -> bool {
++ self.path == other.path && self.nested == other.nested
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for MetaNameValue {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for MetaNameValue {
++ fn eq(&self, other: &Self) -> bool {
++ self.path == other.path && self.lit == other.lit
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for MethodTurbofish {}
++#[cfg(feature = "full")]
++impl PartialEq for MethodTurbofish {
++ fn eq(&self, other: &Self) -> bool {
++ self.args == other.args
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for NestedMeta {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for NestedMeta {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (NestedMeta::Meta(self0), NestedMeta::Meta(other0)) => self0 == other0,
++ (NestedMeta::Lit(self0), NestedMeta::Lit(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ParenthesizedGenericArguments {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ParenthesizedGenericArguments {
++ fn eq(&self, other: &Self) -> bool {
++ self.inputs == other.inputs && self.output == other.output
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Pat {}
++#[cfg(feature = "full")]
++impl PartialEq for Pat {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Pat::Box(self0), Pat::Box(other0)) => self0 == other0,
++ (Pat::Ident(self0), Pat::Ident(other0)) => self0 == other0,
++ (Pat::Lit(self0), Pat::Lit(other0)) => self0 == other0,
++ (Pat::Macro(self0), Pat::Macro(other0)) => self0 == other0,
++ (Pat::Or(self0), Pat::Or(other0)) => self0 == other0,
++ (Pat::Path(self0), Pat::Path(other0)) => self0 == other0,
++ (Pat::Range(self0), Pat::Range(other0)) => self0 == other0,
++ (Pat::Reference(self0), Pat::Reference(other0)) => self0 == other0,
++ (Pat::Rest(self0), Pat::Rest(other0)) => self0 == other0,
++ (Pat::Slice(self0), Pat::Slice(other0)) => self0 == other0,
++ (Pat::Struct(self0), Pat::Struct(other0)) => self0 == other0,
++ (Pat::Tuple(self0), Pat::Tuple(other0)) => self0 == other0,
++ (Pat::TupleStruct(self0), Pat::TupleStruct(other0)) => self0 == other0,
++ (Pat::Type(self0), Pat::Type(other0)) => self0 == other0,
++ (Pat::Verbatim(self0), Pat::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ (Pat::Wild(self0), Pat::Wild(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatBox {}
++#[cfg(feature = "full")]
++impl PartialEq for PatBox {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.pat == other.pat
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatIdent {}
++#[cfg(feature = "full")]
++impl PartialEq for PatIdent {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.by_ref == other.by_ref
++ && self.mutability == other.mutability
++ && self.ident == other.ident
++ && self.subpat == other.subpat
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatLit {}
++#[cfg(feature = "full")]
++impl PartialEq for PatLit {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.expr == other.expr
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for PatMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mac == other.mac
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatOr {}
++#[cfg(feature = "full")]
++impl PartialEq for PatOr {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.leading_vert == other.leading_vert
++ && self.cases == other.cases
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatPath {}
++#[cfg(feature = "full")]
++impl PartialEq for PatPath {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatRange {}
++#[cfg(feature = "full")]
++impl PartialEq for PatRange {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.lo == other.lo
++ && self.limits == other.limits
++ && self.hi == other.hi
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatReference {}
++#[cfg(feature = "full")]
++impl PartialEq for PatReference {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mutability == other.mutability && self.pat == other.pat
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatRest {}
++#[cfg(feature = "full")]
++impl PartialEq for PatRest {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatSlice {}
++#[cfg(feature = "full")]
++impl PartialEq for PatSlice {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.elems == other.elems
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatStruct {}
++#[cfg(feature = "full")]
++impl PartialEq for PatStruct {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.path == other.path
++ && self.fields == other.fields
++ && self.dot2_token == other.dot2_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatTuple {}
++#[cfg(feature = "full")]
++impl PartialEq for PatTuple {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.elems == other.elems
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatTupleStruct {}
++#[cfg(feature = "full")]
++impl PartialEq for PatTupleStruct {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.path == other.path && self.pat == other.pat
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatType {}
++#[cfg(feature = "full")]
++impl PartialEq for PatType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.pat == other.pat && self.ty == other.ty
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for PatWild {}
++#[cfg(feature = "full")]
++impl PartialEq for PatWild {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Path {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Path {
++ fn eq(&self, other: &Self) -> bool {
++ self.leading_colon == other.leading_colon && self.segments == other.segments
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for PathArguments {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for PathArguments {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (PathArguments::None, PathArguments::None) => true,
++ (PathArguments::AngleBracketed(self0), PathArguments::AngleBracketed(other0)) => {
++ self0 == other0
++ }
++ (PathArguments::Parenthesized(self0), PathArguments::Parenthesized(other0)) => {
++ self0 == other0
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for PathSegment {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for PathSegment {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident && self.arguments == other.arguments
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for PredicateEq {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for PredicateEq {
++ fn eq(&self, other: &Self) -> bool {
++ self.lhs_ty == other.lhs_ty && self.rhs_ty == other.rhs_ty
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for PredicateLifetime {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for PredicateLifetime {
++ fn eq(&self, other: &Self) -> bool {
++ self.lifetime == other.lifetime && self.bounds == other.bounds
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for PredicateType {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for PredicateType {
++ fn eq(&self, other: &Self) -> bool {
++ self.lifetimes == other.lifetimes
++ && self.bounded_ty == other.bounded_ty
++ && self.bounds == other.bounds
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for QSelf {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for QSelf {
++ fn eq(&self, other: &Self) -> bool {
++ self.ty == other.ty && self.position == other.position && self.as_token == other.as_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for RangeLimits {}
++#[cfg(feature = "full")]
++impl PartialEq for RangeLimits {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (RangeLimits::HalfOpen(_), RangeLimits::HalfOpen(_)) => true,
++ (RangeLimits::Closed(_), RangeLimits::Closed(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Receiver {}
++#[cfg(feature = "full")]
++impl PartialEq for Receiver {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.reference == other.reference
++ && self.mutability == other.mutability
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for ReturnType {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for ReturnType {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (ReturnType::Default, ReturnType::Default) => true,
++ (ReturnType::Type(_, self1), ReturnType::Type(_, other1)) => self1 == other1,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Signature {}
++#[cfg(feature = "full")]
++impl PartialEq for Signature {
++ fn eq(&self, other: &Self) -> bool {
++ self.constness == other.constness
++ && self.asyncness == other.asyncness
++ && self.unsafety == other.unsafety
++ && self.abi == other.abi
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.inputs == other.inputs
++ && self.variadic == other.variadic
++ && self.output == other.output
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for Stmt {}
++#[cfg(feature = "full")]
++impl PartialEq for Stmt {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Stmt::Local(self0), Stmt::Local(other0)) => self0 == other0,
++ (Stmt::Item(self0), Stmt::Item(other0)) => self0 == other0,
++ (Stmt::Expr(self0), Stmt::Expr(other0)) => self0 == other0,
++ (Stmt::Semi(self0, _), Stmt::Semi(other0, _)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TraitBound {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TraitBound {
++ fn eq(&self, other: &Self) -> bool {
++ self.paren_token == other.paren_token
++ && self.modifier == other.modifier
++ && self.lifetimes == other.lifetimes
++ && self.path == other.path
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TraitBoundModifier {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TraitBoundModifier {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (TraitBoundModifier::None, TraitBoundModifier::None) => true,
++ (TraitBoundModifier::Maybe(_), TraitBoundModifier::Maybe(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for TraitItem {}
++#[cfg(feature = "full")]
++impl PartialEq for TraitItem {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (TraitItem::Const(self0), TraitItem::Const(other0)) => self0 == other0,
++ (TraitItem::Method(self0), TraitItem::Method(other0)) => self0 == other0,
++ (TraitItem::Type(self0), TraitItem::Type(other0)) => self0 == other0,
++ (TraitItem::Macro(self0), TraitItem::Macro(other0)) => self0 == other0,
++ (TraitItem::Verbatim(self0), TraitItem::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for TraitItemConst {}
++#[cfg(feature = "full")]
++impl PartialEq for TraitItemConst {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.ty == other.ty
++ && self.default == other.default
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for TraitItemMacro {}
++#[cfg(feature = "full")]
++impl PartialEq for TraitItemMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for TraitItemMethod {}
++#[cfg(feature = "full")]
++impl PartialEq for TraitItemMethod {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.sig == other.sig
++ && self.default == other.default
++ && self.semi_token == other.semi_token
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for TraitItemType {}
++#[cfg(feature = "full")]
++impl PartialEq for TraitItemType {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.generics == other.generics
++ && self.colon_token == other.colon_token
++ && self.bounds == other.bounds
++ && self.default == other.default
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Type {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Type {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Type::Array(self0), Type::Array(other0)) => self0 == other0,
++ (Type::BareFn(self0), Type::BareFn(other0)) => self0 == other0,
++ (Type::Group(self0), Type::Group(other0)) => self0 == other0,
++ (Type::ImplTrait(self0), Type::ImplTrait(other0)) => self0 == other0,
++ (Type::Infer(self0), Type::Infer(other0)) => self0 == other0,
++ (Type::Macro(self0), Type::Macro(other0)) => self0 == other0,
++ (Type::Never(self0), Type::Never(other0)) => self0 == other0,
++ (Type::Paren(self0), Type::Paren(other0)) => self0 == other0,
++ (Type::Path(self0), Type::Path(other0)) => self0 == other0,
++ (Type::Ptr(self0), Type::Ptr(other0)) => self0 == other0,
++ (Type::Reference(self0), Type::Reference(other0)) => self0 == other0,
++ (Type::Slice(self0), Type::Slice(other0)) => self0 == other0,
++ (Type::TraitObject(self0), Type::TraitObject(other0)) => self0 == other0,
++ (Type::Tuple(self0), Type::Tuple(other0)) => self0 == other0,
++ (Type::Verbatim(self0), Type::Verbatim(other0)) => {
++ TokenStreamHelper(self0) == TokenStreamHelper(other0)
++ }
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeArray {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeArray {
++ fn eq(&self, other: &Self) -> bool {
++ self.elem == other.elem && self.len == other.len
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeBareFn {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeBareFn {
++ fn eq(&self, other: &Self) -> bool {
++ self.lifetimes == other.lifetimes
++ && self.unsafety == other.unsafety
++ && self.abi == other.abi
++ && self.inputs == other.inputs
++ && self.variadic == other.variadic
++ && self.output == other.output
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeGroup {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeGroup {
++ fn eq(&self, other: &Self) -> bool {
++ self.elem == other.elem
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeImplTrait {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeImplTrait {
++ fn eq(&self, other: &Self) -> bool {
++ self.bounds == other.bounds
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeInfer {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeInfer {
++ fn eq(&self, _other: &Self) -> bool {
++ true
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeMacro {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeMacro {
++ fn eq(&self, other: &Self) -> bool {
++ self.mac == other.mac
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeNever {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeNever {
++ fn eq(&self, _other: &Self) -> bool {
++ true
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeParam {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeParam {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.colon_token == other.colon_token
++ && self.bounds == other.bounds
++ && self.eq_token == other.eq_token
++ && self.default == other.default
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeParamBound {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeParamBound {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (TypeParamBound::Trait(self0), TypeParamBound::Trait(other0)) => self0 == other0,
++ (TypeParamBound::Lifetime(self0), TypeParamBound::Lifetime(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeParen {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeParen {
++ fn eq(&self, other: &Self) -> bool {
++ self.elem == other.elem
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypePath {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypePath {
++ fn eq(&self, other: &Self) -> bool {
++ self.qself == other.qself && self.path == other.path
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypePtr {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypePtr {
++ fn eq(&self, other: &Self) -> bool {
++ self.const_token == other.const_token
++ && self.mutability == other.mutability
++ && self.elem == other.elem
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeReference {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeReference {
++ fn eq(&self, other: &Self) -> bool {
++ self.lifetime == other.lifetime
++ && self.mutability == other.mutability
++ && self.elem == other.elem
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeSlice {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeSlice {
++ fn eq(&self, other: &Self) -> bool {
++ self.elem == other.elem
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeTraitObject {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeTraitObject {
++ fn eq(&self, other: &Self) -> bool {
++ self.dyn_token == other.dyn_token && self.bounds == other.bounds
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for TypeTuple {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for TypeTuple {
++ fn eq(&self, other: &Self) -> bool {
++ self.elems == other.elems
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for UnOp {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for UnOp {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (UnOp::Deref(_), UnOp::Deref(_)) => true,
++ (UnOp::Not(_), UnOp::Not(_)) => true,
++ (UnOp::Neg(_), UnOp::Neg(_)) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UseGlob {}
++#[cfg(feature = "full")]
++impl PartialEq for UseGlob {
++ fn eq(&self, _other: &Self) -> bool {
++ true
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UseGroup {}
++#[cfg(feature = "full")]
++impl PartialEq for UseGroup {
++ fn eq(&self, other: &Self) -> bool {
++ self.items == other.items
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UseName {}
++#[cfg(feature = "full")]
++impl PartialEq for UseName {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UsePath {}
++#[cfg(feature = "full")]
++impl PartialEq for UsePath {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident && self.tree == other.tree
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UseRename {}
++#[cfg(feature = "full")]
++impl PartialEq for UseRename {
++ fn eq(&self, other: &Self) -> bool {
++ self.ident == other.ident && self.rename == other.rename
++ }
++}
++#[cfg(feature = "full")]
++impl Eq for UseTree {}
++#[cfg(feature = "full")]
++impl PartialEq for UseTree {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (UseTree::Path(self0), UseTree::Path(other0)) => self0 == other0,
++ (UseTree::Name(self0), UseTree::Name(other0)) => self0 == other0,
++ (UseTree::Rename(self0), UseTree::Rename(other0)) => self0 == other0,
++ (UseTree::Glob(self0), UseTree::Glob(other0)) => self0 == other0,
++ (UseTree::Group(self0), UseTree::Group(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Variadic {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Variadic {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Variant {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Variant {
++ fn eq(&self, other: &Self) -> bool {
++ self.attrs == other.attrs
++ && self.ident == other.ident
++ && self.fields == other.fields
++ && self.discriminant == other.discriminant
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for VisCrate {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for VisCrate {
++ fn eq(&self, _other: &Self) -> bool {
++ true
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for VisPublic {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for VisPublic {
++ fn eq(&self, _other: &Self) -> bool {
++ true
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for VisRestricted {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for VisRestricted {
++ fn eq(&self, other: &Self) -> bool {
++ self.in_token == other.in_token && self.path == other.path
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for Visibility {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for Visibility {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (Visibility::Public(self0), Visibility::Public(other0)) => self0 == other0,
++ (Visibility::Crate(self0), Visibility::Crate(other0)) => self0 == other0,
++ (Visibility::Restricted(self0), Visibility::Restricted(other0)) => self0 == other0,
++ (Visibility::Inherited, Visibility::Inherited) => true,
++ _ => false,
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for WhereClause {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for WhereClause {
++ fn eq(&self, other: &Self) -> bool {
++ self.predicates == other.predicates
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Eq for WherePredicate {}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl PartialEq for WherePredicate {
++ fn eq(&self, other: &Self) -> bool {
++ match (self, other) {
++ (WherePredicate::Type(self0), WherePredicate::Type(other0)) => self0 == other0,
++ (WherePredicate::Lifetime(self0), WherePredicate::Lifetime(other0)) => self0 == other0,
++ (WherePredicate::Eq(self0), WherePredicate::Eq(other0)) => self0 == other0,
++ _ => false,
++ }
++ }
++}
+diff --git a/third_party/rust/syn/src/gen/fold.rs b/third_party/rust/syn/src/gen/fold.rs
+index f51218b78c..d9dd32a420 100644
+--- mozilla-release/third_party/rust/syn/src/gen/fold.rs
++++ mozilla-release/third_party/rust/syn/src/gen/fold.rs
+@@ -2,6 +2,7 @@
+ // It is not intended for manual editing.
+
+ #![allow(unreachable_code, unused_variables)]
++#![allow(clippy::match_wildcard_for_single_variants)]
+ #[cfg(any(feature = "full", feature = "derive"))]
+ use crate::gen::helper::fold::*;
+ #[cfg(any(feature = "full", feature = "derive"))]
+@@ -26,7 +27,7 @@ macro_rules! full {
+ ///
+ /// [module documentation]: self
+ ///
+-/// *This trait is available if Syn is built with the `"fold"` feature.*
++/// *This trait is available only if Syn is built with the `"fold"` feature.*
+ pub trait Fold {
+ #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_abi(&mut self, i: Abi) -> Abi {
+@@ -433,35 +434,27 @@ pub trait Fold {
+ fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef {
+ fold_lifetime_def(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit(&mut self, i: Lit) -> Lit {
+ fold_lit(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_bool(&mut self, i: LitBool) -> LitBool {
+ fold_lit_bool(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_byte(&mut self, i: LitByte) -> LitByte {
+ fold_lit_byte(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_byte_str(&mut self, i: LitByteStr) -> LitByteStr {
+ fold_lit_byte_str(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_char(&mut self, i: LitChar) -> LitChar {
+ fold_lit_char(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_float(&mut self, i: LitFloat) -> LitFloat {
+ fold_lit_float(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_int(&mut self, i: LitInt) -> LitInt {
+ fold_lit_int(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn fold_lit_str(&mut self, i: LitStr) -> LitStr {
+ fold_lit_str(self, i)
+ }
+@@ -799,10 +792,10 @@ where
+ F: Fold + ?Sized,
+ {
+ AngleBracketedGenericArguments {
+- colon2_token: (node.colon2_token).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))),
+- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
++ colon2_token: (node.colon2_token).map(|it| Token ! [::](tokens_helper(f, &it.spans))),
++ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
+ args: FoldHelper::lift(node.args, |it| f.fold_generic_argument(it)),
+- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
++ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -819,9 +812,9 @@ where
+ Box::new(f.fold_expr(*(it).1)),
+ )
+ }),
+- fat_arrow_token: Token ! [ => ](tokens_helper(f, &node.fat_arrow_token.spans)),
++ fat_arrow_token: Token ! [=>](tokens_helper(f, &node.fat_arrow_token.spans)),
+ body: Box::new(f.fold_expr(*node.body)),
+- comma: (node.comma).map(|it| Token ! [ , ](tokens_helper(f, &it.spans))),
++ comma: (node.comma).map(|it| Token ! [,](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -842,7 +835,7 @@ where
+ F: Fold + ?Sized,
+ {
+ Attribute {
+- pound_token: Token ! [ # ](tokens_helper(f, &node.pound_token.spans)),
++ pound_token: Token ! [#](tokens_helper(f, &node.pound_token.spans)),
+ style: f.fold_attr_style(node.style),
+ bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)),
+ path: f.fold_path(node.path),
+@@ -859,7 +852,7 @@ where
+ name: (node.name).map(|it| {
+ (
+ f.fold_ident((it).0),
+- Token ! [ : ](tokens_helper(f, &(it).1.spans)),
++ Token ! [:](tokens_helper(f, &(it).1.spans)),
+ )
+ }),
+ ty: f.fold_type(node.ty),
+@@ -871,59 +864,47 @@ where
+ F: Fold + ?Sized,
+ {
+ match node {
+- BinOp::Add(_binding_0) => BinOp::Add(Token ! [ + ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [ - ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [ * ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Div(_binding_0) => BinOp::Div(Token ! [ / ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [ % ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::And(_binding_0) => BinOp::And(Token ! [ && ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Or(_binding_0) => BinOp::Or(Token ! [ || ](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Add(_binding_0) => BinOp::Add(Token ! [+](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [-](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [*](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Div(_binding_0) => BinOp::Div(Token ! [/](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [%](tokens_helper(f, &_binding_0.spans))),
++ BinOp::And(_binding_0) => BinOp::And(Token ! [&&](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Or(_binding_0) => BinOp::Or(Token ! [||](tokens_helper(f, &_binding_0.spans))),
+ BinOp::BitXor(_binding_0) => {
+- BinOp::BitXor(Token ! [ ^ ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::BitXor(Token ! [^](tokens_helper(f, &_binding_0.spans)))
+ }
+ BinOp::BitAnd(_binding_0) => {
+- BinOp::BitAnd(Token ! [ & ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::BitOr(_binding_0) => {
+- BinOp::BitOr(Token ! [ | ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [ << ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [ >> ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [ == ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [ < ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Le(_binding_0) => BinOp::Le(Token ! [ <= ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [ != ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [ >= ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [ > ](tokens_helper(f, &_binding_0.spans))),
+- BinOp::AddEq(_binding_0) => {
+- BinOp::AddEq(Token ! [ += ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::SubEq(_binding_0) => {
+- BinOp::SubEq(Token ! [ -= ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::MulEq(_binding_0) => {
+- BinOp::MulEq(Token ! [ *= ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::DivEq(_binding_0) => {
+- BinOp::DivEq(Token ! [ /= ](tokens_helper(f, &_binding_0.spans)))
+- }
+- BinOp::RemEq(_binding_0) => {
+- BinOp::RemEq(Token ! [ %= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::BitAnd(Token ! [&](tokens_helper(f, &_binding_0.spans)))
+ }
++ BinOp::BitOr(_binding_0) => BinOp::BitOr(Token ! [|](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [<<](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [>>](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [==](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [<](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Le(_binding_0) => BinOp::Le(Token ! [<=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [!=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [>=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [>](tokens_helper(f, &_binding_0.spans))),
++ BinOp::AddEq(_binding_0) => BinOp::AddEq(Token ! [+=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::SubEq(_binding_0) => BinOp::SubEq(Token ! [-=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::MulEq(_binding_0) => BinOp::MulEq(Token ! [*=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::DivEq(_binding_0) => BinOp::DivEq(Token ! [/=](tokens_helper(f, &_binding_0.spans))),
++ BinOp::RemEq(_binding_0) => BinOp::RemEq(Token ! [%=](tokens_helper(f, &_binding_0.spans))),
+ BinOp::BitXorEq(_binding_0) => {
+- BinOp::BitXorEq(Token ! [ ^= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::BitXorEq(Token ! [^=](tokens_helper(f, &_binding_0.spans)))
+ }
+ BinOp::BitAndEq(_binding_0) => {
+- BinOp::BitAndEq(Token ! [ &= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::BitAndEq(Token ! [&=](tokens_helper(f, &_binding_0.spans)))
+ }
+ BinOp::BitOrEq(_binding_0) => {
+- BinOp::BitOrEq(Token ! [ |= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::BitOrEq(Token ! [|=](tokens_helper(f, &_binding_0.spans)))
+ }
+ BinOp::ShlEq(_binding_0) => {
+- BinOp::ShlEq(Token ! [ <<= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::ShlEq(Token ! [<<=](tokens_helper(f, &_binding_0.spans)))
+ }
+ BinOp::ShrEq(_binding_0) => {
+- BinOp::ShrEq(Token ! [ >>= ](tokens_helper(f, &_binding_0.spans)))
++ BinOp::ShrEq(Token ! [>>=](tokens_helper(f, &_binding_0.spans)))
+ }
+ }
+ }
+@@ -934,7 +915,7 @@ where
+ {
+ Binding {
+ ident: f.fold_ident(node.ident),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ ty: f.fold_type(node.ty),
+ }
+ }
+@@ -955,9 +936,9 @@ where
+ {
+ BoundLifetimes {
+ for_token: Token![for](tokens_helper(f, &node.for_token.span)),
+- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
++ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
+ lifetimes: FoldHelper::lift(node.lifetimes, |it| f.fold_lifetime_def(it)),
+- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
++ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -969,9 +950,9 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ const_token: Token![const](tokens_helper(f, &node.const_token.span)),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: f.fold_type(node.ty),
+- eq_token: (node.eq_token).map(|it| Token ! [ = ](tokens_helper(f, &it.spans))),
++ eq_token: (node.eq_token).map(|it| Token ! [=](tokens_helper(f, &it.spans))),
+ default: (node.default).map(|it| f.fold_expr(it)),
+ }
+ }
+@@ -982,7 +963,7 @@ where
+ {
+ Constraint {
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)),
+ }
+ }
+@@ -1016,7 +997,7 @@ where
+ DataStruct {
+ struct_token: Token![struct](tokens_helper(f, &node.struct_token.span)),
+ fields: f.fold_fields(node.fields),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "derive")]
+@@ -1112,7 +1093,7 @@ where
+ ExprAssign {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ left: Box::new(f.fold_expr(*node.left)),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ right: Box::new(f.fold_expr(*node.right)),
+ }
+ }
+@@ -1148,7 +1129,7 @@ where
+ ExprAwait {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ base: Box::new(f.fold_expr(*node.base)),
+- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)),
++ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)),
+ await_token: crate::token::Await(tokens_helper(f, &node.await_token.span)),
+ }
+ }
+@@ -1232,9 +1213,9 @@ where
+ asyncness: (node.asyncness).map(|it| Token![async](tokens_helper(f, &it.span))),
+ movability: (node.movability).map(|it| Token![static](tokens_helper(f, &it.span))),
+ capture: (node.capture).map(|it| Token![move](tokens_helper(f, &it.span))),
+- or1_token: Token ! [ | ](tokens_helper(f, &node.or1_token.spans)),
++ or1_token: Token ! [|](tokens_helper(f, &node.or1_token.spans)),
+ inputs: FoldHelper::lift(node.inputs, |it| f.fold_pat(it)),
+- or2_token: Token ! [ | ](tokens_helper(f, &node.or2_token.spans)),
++ or2_token: Token ! [|](tokens_helper(f, &node.or2_token.spans)),
+ output: f.fold_return_type(node.output),
+ body: Box::new(f.fold_expr(*node.body)),
+ }
+@@ -1258,7 +1239,7 @@ where
+ ExprField {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ base: Box::new(f.fold_expr(*node.base)),
+- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)),
++ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)),
+ member: f.fold_member(node.member),
+ }
+ }
+@@ -1327,7 +1308,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ let_token: Token![let](tokens_helper(f, &node.let_token.span)),
+ pat: f.fold_pat(node.pat),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+ }
+ }
+@@ -1384,7 +1365,7 @@ where
+ ExprMethodCall {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ receiver: Box::new(f.fold_expr(*node.receiver)),
+- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)),
++ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)),
+ method: f.fold_ident(node.method),
+ turbofish: (node.turbofish).map(|it| f.fold_method_turbofish(it)),
+ paren_token: Paren(tokens_helper(f, &node.paren_token.span)),
+@@ -1432,7 +1413,7 @@ where
+ {
+ ExprReference {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)),
++ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)),
+ raw: node.raw,
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ expr: Box::new(f.fold_expr(*node.expr)),
+@@ -1447,7 +1428,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ len: Box::new(f.fold_expr(*node.len)),
+ }
+ }
+@@ -1484,7 +1465,7 @@ where
+ ExprTry {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+- question_token: Token ! [ ? ](tokens_helper(f, &node.question_token.spans)),
++ question_token: Token ! [?](tokens_helper(f, &node.question_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1517,7 +1498,7 @@ where
+ ExprType {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+ }
+ }
+@@ -1576,7 +1557,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ vis: f.fold_visibility(node.vis),
+ ident: (node.ident).map(|it| f.fold_ident(it)),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ ty: f.fold_type(node.ty),
+ }
+ }
+@@ -1588,7 +1569,7 @@ where
+ FieldPat {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ member: f.fold_member(node.member),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ pat: Box::new(f.fold_pat(*node.pat)),
+ }
+ }
+@@ -1600,7 +1581,7 @@ where
+ FieldValue {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ member: f.fold_member(node.member),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ expr: f.fold_expr(node.expr),
+ }
+ }
+@@ -1681,7 +1662,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ vis: f.fold_visibility(node.vis),
+ sig: f.fold_signature(node.sig),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1692,7 +1673,7 @@ where
+ ForeignItemMacro {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ mac: f.fold_macro(node.mac),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1706,9 +1687,9 @@ where
+ static_token: Token![static](tokens_helper(f, &node.static_token.span)),
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1721,7 +1702,7 @@ where
+ vis: f.fold_visibility(node.vis),
+ type_token: Token![type](tokens_helper(f, &node.type_token.span)),
+ ident: f.fold_ident(node.ident),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -1779,9 +1760,9 @@ where
+ F: Fold + ?Sized,
+ {
+ Generics {
+- lt_token: (node.lt_token).map(|it| Token ! [ < ](tokens_helper(f, &it.spans))),
++ lt_token: (node.lt_token).map(|it| Token ! [<](tokens_helper(f, &it.spans))),
+ params: FoldHelper::lift(node.params, |it| f.fold_generic_param(it)),
+- gt_token: (node.gt_token).map(|it| Token ! [ > ](tokens_helper(f, &it.spans))),
++ gt_token: (node.gt_token).map(|it| Token ! [>](tokens_helper(f, &it.spans))),
+ where_clause: (node.where_clause).map(|it| f.fold_where_clause(it)),
+ }
+ }
+@@ -1819,11 +1800,11 @@ where
+ defaultness: (node.defaultness).map(|it| Token![default](tokens_helper(f, &it.span))),
+ const_token: Token![const](tokens_helper(f, &node.const_token.span)),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: f.fold_type(node.ty),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ expr: f.fold_expr(node.expr),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1834,7 +1815,7 @@ where
+ ImplItemMacro {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ mac: f.fold_macro(node.mac),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1862,9 +1843,9 @@ where
+ type_token: Token![type](tokens_helper(f, &node.type_token.span)),
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ ty: f.fold_type(node.ty),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -1913,11 +1894,11 @@ where
+ vis: f.fold_visibility(node.vis),
+ const_token: Token![const](tokens_helper(f, &node.const_token.span)),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -1952,7 +1933,7 @@ where
+ f.fold_ident((it).1),
+ )
+ }),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2011,7 +1992,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ ident: (node.ident).map(|it| f.fold_ident(it)),
+ mac: f.fold_macro(node.mac),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2043,7 +2024,7 @@ where
+ FoldHelper::lift((it).1, |it| f.fold_item(it)),
+ )
+ }),
+- semi: (node.semi).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi: (node.semi).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2057,11 +2038,11 @@ where
+ static_token: Token![static](tokens_helper(f, &node.static_token.span)),
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ expr: Box::new(f.fold_expr(*node.expr)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2076,7 +2057,7 @@ where
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+ fields: f.fold_fields(node.fields),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2092,7 +2073,7 @@ where
+ trait_token: Token![trait](tokens_helper(f, &node.trait_token.span)),
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ supertraits: FoldHelper::lift(node.supertraits, |it| f.fold_type_param_bound(it)),
+ brace_token: Brace(tokens_helper(f, &node.brace_token.span)),
+ items: FoldHelper::lift(node.items, |it| f.fold_trait_item(it)),
+@@ -2109,9 +2090,9 @@ where
+ trait_token: Token![trait](tokens_helper(f, &node.trait_token.span)),
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2125,9 +2106,9 @@ where
+ type_token: Token![type](tokens_helper(f, &node.type_token.span)),
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2153,9 +2134,9 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ vis: f.fold_visibility(node.vis),
+ use_token: Token![use](tokens_helper(f, &node.use_token.span)),
+- leading_colon: (node.leading_colon).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))),
++ leading_colon: (node.leading_colon).map(|it| Token ! [::](tokens_helper(f, &it.spans))),
+ tree: f.fold_use_tree(node.tree),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2165,7 +2146,7 @@ where
+ {
+ Label {
+ name: f.fold_lifetime(node.name),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ }
+ }
+ pub fn fold_lifetime<F>(f: &mut F, node: Lifetime) -> Lifetime
+@@ -2185,11 +2166,10 @@ where
+ LifetimeDef {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ lifetime: f.fold_lifetime(node.lifetime),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_lifetime(it)),
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit<F>(f: &mut F, node: Lit) -> Lit
+ where
+ F: Fold + ?Sized,
+@@ -2205,7 +2185,6 @@ where
+ Lit::Verbatim(_binding_0) => Lit::Verbatim(_binding_0),
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_bool<F>(f: &mut F, node: LitBool) -> LitBool
+ where
+ F: Fold + ?Sized,
+@@ -2215,7 +2194,6 @@ where
+ span: f.fold_span(node.span),
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_byte<F>(f: &mut F, node: LitByte) -> LitByte
+ where
+ F: Fold + ?Sized,
+@@ -2225,7 +2203,6 @@ where
+ node.set_span(span);
+ node
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_byte_str<F>(f: &mut F, node: LitByteStr) -> LitByteStr
+ where
+ F: Fold + ?Sized,
+@@ -2235,7 +2212,6 @@ where
+ node.set_span(span);
+ node
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_char<F>(f: &mut F, node: LitChar) -> LitChar
+ where
+ F: Fold + ?Sized,
+@@ -2245,7 +2221,6 @@ where
+ node.set_span(span);
+ node
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_float<F>(f: &mut F, node: LitFloat) -> LitFloat
+ where
+ F: Fold + ?Sized,
+@@ -2255,7 +2230,6 @@ where
+ node.set_span(span);
+ node
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_int<F>(f: &mut F, node: LitInt) -> LitInt
+ where
+ F: Fold + ?Sized,
+@@ -2265,7 +2239,6 @@ where
+ node.set_span(span);
+ node
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn fold_lit_str<F>(f: &mut F, node: LitStr) -> LitStr
+ where
+ F: Fold + ?Sized,
+@@ -2286,11 +2259,11 @@ where
+ pat: f.fold_pat(node.pat),
+ init: (node.init).map(|it| {
+ (
+- Token ! [ = ](tokens_helper(f, &(it).0.spans)),
++ Token ! [=](tokens_helper(f, &(it).0.spans)),
+ Box::new(f.fold_expr(*(it).1)),
+ )
+ }),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -2361,7 +2334,7 @@ where
+ {
+ MetaNameValue {
+ path: f.fold_path(node.path),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ lit: f.fold_lit(node.lit),
+ }
+ }
+@@ -2371,10 +2344,10 @@ where
+ F: Fold + ?Sized,
+ {
+ MethodTurbofish {
+- colon2_token: Token ! [ :: ](tokens_helper(f, &node.colon2_token.spans)),
+- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
++ colon2_token: Token ! [::](tokens_helper(f, &node.colon2_token.spans)),
++ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
+ args: FoldHelper::lift(node.args, |it| f.fold_generic_method_argument(it)),
+- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
++ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -2449,7 +2422,7 @@ where
+ ident: f.fold_ident(node.ident),
+ subpat: (node.subpat).map(|it| {
+ (
+- Token ! [ @ ](tokens_helper(f, &(it).0.spans)),
++ Token ! [@](tokens_helper(f, &(it).0.spans)),
+ Box::new(f.fold_pat(*(it).1)),
+ )
+ }),
+@@ -2482,7 +2455,7 @@ where
+ {
+ PatOr {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+- leading_vert: (node.leading_vert).map(|it| Token ! [ | ](tokens_helper(f, &it.spans))),
++ leading_vert: (node.leading_vert).map(|it| Token ! [|](tokens_helper(f, &it.spans))),
+ cases: FoldHelper::lift(node.cases, |it| f.fold_pat(it)),
+ }
+ }
+@@ -2516,7 +2489,7 @@ where
+ {
+ PatReference {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)),
++ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)),
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ pat: Box::new(f.fold_pat(*node.pat)),
+ }
+@@ -2585,7 +2558,7 @@ where
+ PatType {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ pat: Box::new(f.fold_pat(*node.pat)),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+ }
+ }
+@@ -2605,7 +2578,7 @@ where
+ F: Fold + ?Sized,
+ {
+ Path {
+- leading_colon: (node.leading_colon).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))),
++ leading_colon: (node.leading_colon).map(|it| Token ! [::](tokens_helper(f, &it.spans))),
+ segments: FoldHelper::lift(node.segments, |it| f.fold_path_segment(it)),
+ }
+ }
+@@ -2641,7 +2614,7 @@ where
+ {
+ PredicateEq {
+ lhs_ty: f.fold_type(node.lhs_ty),
+- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
++ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
+ rhs_ty: f.fold_type(node.rhs_ty),
+ }
+ }
+@@ -2652,7 +2625,7 @@ where
+ {
+ PredicateLifetime {
+ lifetime: f.fold_lifetime(node.lifetime),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_lifetime(it)),
+ }
+ }
+@@ -2664,7 +2637,7 @@ where
+ PredicateType {
+ lifetimes: (node.lifetimes).map(|it| f.fold_bound_lifetimes(it)),
+ bounded_ty: f.fold_type(node.bounded_ty),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)),
+ }
+ }
+@@ -2674,11 +2647,11 @@ where
+ F: Fold + ?Sized,
+ {
+ QSelf {
+- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
++ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
+ ty: Box::new(f.fold_type(*node.ty)),
+ position: node.position,
+ as_token: (node.as_token).map(|it| Token![as](tokens_helper(f, &it.span))),
+- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
++ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2691,7 +2664,7 @@ where
+ RangeLimits::HalfOpen(Token![..](tokens_helper(f, &_binding_0.spans)))
+ }
+ RangeLimits::Closed(_binding_0) => {
+- RangeLimits::Closed(Token ! [ ..= ](tokens_helper(f, &_binding_0.spans)))
++ RangeLimits::Closed(Token ! [..=](tokens_helper(f, &_binding_0.spans)))
+ }
+ }
+ }
+@@ -2704,7 +2677,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ reference: (node.reference).map(|it| {
+ (
+- Token ! [ & ](tokens_helper(f, &(it).0.spans)),
++ Token ! [&](tokens_helper(f, &(it).0.spans)),
+ ((it).1).map(|it| f.fold_lifetime(it)),
+ )
+ }),
+@@ -2720,7 +2693,7 @@ where
+ match node {
+ ReturnType::Default => ReturnType::Default,
+ ReturnType::Type(_binding_0, _binding_1) => ReturnType::Type(
+- Token ! [ -> ](tokens_helper(f, &_binding_0.spans)),
++ Token ! [->](tokens_helper(f, &_binding_0.spans)),
+ Box::new(f.fold_type(*_binding_1)),
+ ),
+ }
+@@ -2761,7 +2734,7 @@ where
+ Stmt::Expr(_binding_0) => Stmt::Expr(f.fold_expr(_binding_0)),
+ Stmt::Semi(_binding_0, _binding_1) => Stmt::Semi(
+ f.fold_expr(_binding_0),
+- Token ! [ ; ](tokens_helper(f, &_binding_1.spans)),
++ Token ! [;](tokens_helper(f, &_binding_1.spans)),
+ ),
+ }
+ }
+@@ -2785,7 +2758,7 @@ where
+ match node {
+ TraitBoundModifier::None => TraitBoundModifier::None,
+ TraitBoundModifier::Maybe(_binding_0) => {
+- TraitBoundModifier::Maybe(Token ! [ ? ](tokens_helper(f, &_binding_0.spans)))
++ TraitBoundModifier::Maybe(Token ! [?](tokens_helper(f, &_binding_0.spans)))
+ }
+ }
+ }
+@@ -2812,15 +2785,15 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ const_token: Token![const](tokens_helper(f, &node.const_token.span)),
+ ident: f.fold_ident(node.ident),
+- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
++ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
+ ty: f.fold_type(node.ty),
+ default: (node.default).map(|it| {
+ (
+- Token ! [ = ](tokens_helper(f, &(it).0.spans)),
++ Token ! [=](tokens_helper(f, &(it).0.spans)),
+ f.fold_expr((it).1),
+ )
+ }),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2831,7 +2804,7 @@ where
+ TraitItemMacro {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ mac: f.fold_macro(node.mac),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2843,7 +2816,7 @@ where
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ sig: f.fold_signature(node.sig),
+ default: (node.default).map(|it| f.fold_block(it)),
+- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))),
++ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -2856,15 +2829,15 @@ where
+ type_token: Token![type](tokens_helper(f, &node.type_token.span)),
+ ident: f.fold_ident(node.ident),
+ generics: f.fold_generics(node.generics),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)),
+ default: (node.default).map(|it| {
+ (
+- Token ! [ = ](tokens_helper(f, &(it).0.spans)),
++ Token ! [=](tokens_helper(f, &(it).0.spans)),
+ f.fold_type((it).1),
+ )
+ }),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -2899,7 +2872,7 @@ where
+ TypeArray {
+ bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)),
+ elem: Box::new(f.fold_type(*node.elem)),
+- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)),
++ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)),
+ len: f.fold_expr(node.len),
+ }
+ }
+@@ -2974,9 +2947,9 @@ where
+ TypeParam {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+ ident: f.fold_ident(node.ident),
+- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))),
++ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))),
+ bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)),
+- eq_token: (node.eq_token).map(|it| Token ! [ = ](tokens_helper(f, &it.spans))),
++ eq_token: (node.eq_token).map(|it| Token ! [=](tokens_helper(f, &it.spans))),
+ default: (node.default).map(|it| f.fold_type(it)),
+ }
+ }
+@@ -3018,7 +2991,7 @@ where
+ F: Fold + ?Sized,
+ {
+ TypePtr {
+- star_token: Token ! [ * ](tokens_helper(f, &node.star_token.spans)),
++ star_token: Token ! [*](tokens_helper(f, &node.star_token.spans)),
+ const_token: (node.const_token).map(|it| Token![const](tokens_helper(f, &it.span))),
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ elem: Box::new(f.fold_type(*node.elem)),
+@@ -3030,7 +3003,7 @@ where
+ F: Fold + ?Sized,
+ {
+ TypeReference {
+- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)),
++ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)),
+ lifetime: (node.lifetime).map(|it| f.fold_lifetime(it)),
+ mutability: (node.mutability).map(|it| Token![mut](tokens_helper(f, &it.span))),
+ elem: Box::new(f.fold_type(*node.elem)),
+@@ -3072,9 +3045,9 @@ where
+ F: Fold + ?Sized,
+ {
+ match node {
+- UnOp::Deref(_binding_0) => UnOp::Deref(Token ! [ * ](tokens_helper(f, &_binding_0.spans))),
++ UnOp::Deref(_binding_0) => UnOp::Deref(Token ! [*](tokens_helper(f, &_binding_0.spans))),
+ UnOp::Not(_binding_0) => UnOp::Not(Token![!](tokens_helper(f, &_binding_0.spans))),
+- UnOp::Neg(_binding_0) => UnOp::Neg(Token ! [ - ](tokens_helper(f, &_binding_0.spans))),
++ UnOp::Neg(_binding_0) => UnOp::Neg(Token ! [-](tokens_helper(f, &_binding_0.spans))),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -3083,7 +3056,7 @@ where
+ F: Fold + ?Sized,
+ {
+ UseGlob {
+- star_token: Token ! [ * ](tokens_helper(f, &node.star_token.spans)),
++ star_token: Token ! [*](tokens_helper(f, &node.star_token.spans)),
+ }
+ }
+ #[cfg(feature = "full")]
+@@ -3112,7 +3085,7 @@ where
+ {
+ UsePath {
+ ident: f.fold_ident(node.ident),
+- colon2_token: Token ! [ :: ](tokens_helper(f, &node.colon2_token.spans)),
++ colon2_token: Token ! [::](tokens_helper(f, &node.colon2_token.spans)),
+ tree: Box::new(f.fold_use_tree(*node.tree)),
+ }
+ }
+@@ -3147,7 +3120,7 @@ where
+ {
+ Variadic {
+ attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
+- dots: Token ! [ ... ](tokens_helper(f, &node.dots.spans)),
++ dots: Token ! [...](tokens_helper(f, &node.dots.spans)),
+ }
+ }
+ #[cfg(any(feature = "derive", feature = "full"))]
+@@ -3161,7 +3134,7 @@ where
+ fields: f.fold_fields(node.fields),
+ discriminant: (node.discriminant).map(|it| {
+ (
+- Token ! [ = ](tokens_helper(f, &(it).0.spans)),
++ Token ! [=](tokens_helper(f, &(it).0.spans)),
+ f.fold_expr((it).1),
+ )
+ }),
+diff --git a/third_party/rust/syn/src/gen/hash.rs b/third_party/rust/syn/src/gen/hash.rs
+new file mode 100644
+index 0000000000..9e9e84a7af
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/gen/hash.rs
+@@ -0,0 +1,2691 @@
++// This file is @generated by syn-internal-codegen.
++// It is not intended for manual editing.
++
++#[cfg(any(feature = "derive", feature = "full"))]
++use crate::tt::TokenStreamHelper;
++use crate::*;
++use std::hash::{Hash, Hasher};
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Abi {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.name.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for AngleBracketedGenericArguments {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.colon2_token.hash(state);
++ self.args.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Arm {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.pat.hash(state);
++ self.guard.hash(state);
++ self.body.hash(state);
++ self.comma.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for AttrStyle {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ AttrStyle::Outer => {
++ state.write_u8(0u8);
++ }
++ AttrStyle::Inner(_) => {
++ state.write_u8(1u8);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Attribute {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.style.hash(state);
++ self.path.hash(state);
++ TokenStreamHelper(&self.tokens).hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for BareFnArg {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.name.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for BinOp {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ BinOp::Add(_) => {
++ state.write_u8(0u8);
++ }
++ BinOp::Sub(_) => {
++ state.write_u8(1u8);
++ }
++ BinOp::Mul(_) => {
++ state.write_u8(2u8);
++ }
++ BinOp::Div(_) => {
++ state.write_u8(3u8);
++ }
++ BinOp::Rem(_) => {
++ state.write_u8(4u8);
++ }
++ BinOp::And(_) => {
++ state.write_u8(5u8);
++ }
++ BinOp::Or(_) => {
++ state.write_u8(6u8);
++ }
++ BinOp::BitXor(_) => {
++ state.write_u8(7u8);
++ }
++ BinOp::BitAnd(_) => {
++ state.write_u8(8u8);
++ }
++ BinOp::BitOr(_) => {
++ state.write_u8(9u8);
++ }
++ BinOp::Shl(_) => {
++ state.write_u8(10u8);
++ }
++ BinOp::Shr(_) => {
++ state.write_u8(11u8);
++ }
++ BinOp::Eq(_) => {
++ state.write_u8(12u8);
++ }
++ BinOp::Lt(_) => {
++ state.write_u8(13u8);
++ }
++ BinOp::Le(_) => {
++ state.write_u8(14u8);
++ }
++ BinOp::Ne(_) => {
++ state.write_u8(15u8);
++ }
++ BinOp::Ge(_) => {
++ state.write_u8(16u8);
++ }
++ BinOp::Gt(_) => {
++ state.write_u8(17u8);
++ }
++ BinOp::AddEq(_) => {
++ state.write_u8(18u8);
++ }
++ BinOp::SubEq(_) => {
++ state.write_u8(19u8);
++ }
++ BinOp::MulEq(_) => {
++ state.write_u8(20u8);
++ }
++ BinOp::DivEq(_) => {
++ state.write_u8(21u8);
++ }
++ BinOp::RemEq(_) => {
++ state.write_u8(22u8);
++ }
++ BinOp::BitXorEq(_) => {
++ state.write_u8(23u8);
++ }
++ BinOp::BitAndEq(_) => {
++ state.write_u8(24u8);
++ }
++ BinOp::BitOrEq(_) => {
++ state.write_u8(25u8);
++ }
++ BinOp::ShlEq(_) => {
++ state.write_u8(26u8);
++ }
++ BinOp::ShrEq(_) => {
++ state.write_u8(27u8);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Binding {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Block {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.stmts.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for BoundLifetimes {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lifetimes.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ConstParam {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ self.eq_token.hash(state);
++ self.default.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Constraint {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ self.bounds.hash(state);
++ }
++}
++#[cfg(feature = "derive")]
++impl Hash for Data {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Data::Struct(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Data::Enum(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Data::Union(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(feature = "derive")]
++impl Hash for DataEnum {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.variants.hash(state);
++ }
++}
++#[cfg(feature = "derive")]
++impl Hash for DataStruct {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.fields.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "derive")]
++impl Hash for DataUnion {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.fields.hash(state);
++ }
++}
++#[cfg(feature = "derive")]
++impl Hash for DeriveInput {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.data.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Expr {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ #[cfg(feature = "full")]
++ Expr::Array(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Assign(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::AssignOp(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Async(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Await(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ Expr::Binary(v0) => {
++ state.write_u8(5u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Block(v0) => {
++ state.write_u8(6u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Box(v0) => {
++ state.write_u8(7u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Break(v0) => {
++ state.write_u8(8u8);
++ v0.hash(state);
++ }
++ Expr::Call(v0) => {
++ state.write_u8(9u8);
++ v0.hash(state);
++ }
++ Expr::Cast(v0) => {
++ state.write_u8(10u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Closure(v0) => {
++ state.write_u8(11u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Continue(v0) => {
++ state.write_u8(12u8);
++ v0.hash(state);
++ }
++ Expr::Field(v0) => {
++ state.write_u8(13u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::ForLoop(v0) => {
++ state.write_u8(14u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Group(v0) => {
++ state.write_u8(15u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::If(v0) => {
++ state.write_u8(16u8);
++ v0.hash(state);
++ }
++ Expr::Index(v0) => {
++ state.write_u8(17u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Let(v0) => {
++ state.write_u8(18u8);
++ v0.hash(state);
++ }
++ Expr::Lit(v0) => {
++ state.write_u8(19u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Loop(v0) => {
++ state.write_u8(20u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Macro(v0) => {
++ state.write_u8(21u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Match(v0) => {
++ state.write_u8(22u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::MethodCall(v0) => {
++ state.write_u8(23u8);
++ v0.hash(state);
++ }
++ Expr::Paren(v0) => {
++ state.write_u8(24u8);
++ v0.hash(state);
++ }
++ Expr::Path(v0) => {
++ state.write_u8(25u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Range(v0) => {
++ state.write_u8(26u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Reference(v0) => {
++ state.write_u8(27u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Repeat(v0) => {
++ state.write_u8(28u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Return(v0) => {
++ state.write_u8(29u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Struct(v0) => {
++ state.write_u8(30u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Try(v0) => {
++ state.write_u8(31u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::TryBlock(v0) => {
++ state.write_u8(32u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Tuple(v0) => {
++ state.write_u8(33u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Type(v0) => {
++ state.write_u8(34u8);
++ v0.hash(state);
++ }
++ Expr::Unary(v0) => {
++ state.write_u8(35u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Unsafe(v0) => {
++ state.write_u8(36u8);
++ v0.hash(state);
++ }
++ Expr::Verbatim(v0) => {
++ state.write_u8(37u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::While(v0) => {
++ state.write_u8(38u8);
++ v0.hash(state);
++ }
++ #[cfg(feature = "full")]
++ Expr::Yield(v0) => {
++ state.write_u8(39u8);
++ v0.hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprArray {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.elems.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprAssign {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.left.hash(state);
++ self.right.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprAssignOp {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.left.hash(state);
++ self.op.hash(state);
++ self.right.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprAsync {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.capture.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprAwait {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.base.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprBinary {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.left.hash(state);
++ self.op.hash(state);
++ self.right.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprBlock {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprBox {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprBreak {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprCall {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.func.hash(state);
++ self.args.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprCast {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprClosure {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.asyncness.hash(state);
++ self.movability.hash(state);
++ self.capture.hash(state);
++ self.inputs.hash(state);
++ self.output.hash(state);
++ self.body.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprContinue {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprField {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.base.hash(state);
++ self.member.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprForLoop {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ self.pat.hash(state);
++ self.expr.hash(state);
++ self.body.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprGroup {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprIf {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.cond.hash(state);
++ self.then_branch.hash(state);
++ self.else_branch.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprIndex {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ self.index.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprLet {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.pat.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprLit {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.lit.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprLoop {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ self.body.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mac.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprMatch {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ self.arms.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprMethodCall {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.receiver.hash(state);
++ self.method.hash(state);
++ self.turbofish.hash(state);
++ self.args.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprParen {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprPath {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.qself.hash(state);
++ self.path.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprRange {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.from.hash(state);
++ self.limits.hash(state);
++ self.to.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprReference {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mutability.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprRepeat {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ self.len.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprReturn {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprStruct {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.path.hash(state);
++ self.fields.hash(state);
++ self.dot2_token.hash(state);
++ self.rest.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprTry {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprTryBlock {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprTuple {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.elems.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ExprUnary {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.op.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprUnsafe {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprWhile {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.label.hash(state);
++ self.cond.hash(state);
++ self.body.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ExprYield {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Field {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.colon_token.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for FieldPat {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.member.hash(state);
++ self.colon_token.hash(state);
++ self.pat.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for FieldValue {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.member.hash(state);
++ self.colon_token.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Fields {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Fields::Named(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Fields::Unnamed(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Fields::Unit => {
++ state.write_u8(2u8);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for FieldsNamed {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.named.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for FieldsUnnamed {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.unnamed.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for File {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.shebang.hash(state);
++ self.attrs.hash(state);
++ self.items.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for FnArg {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ FnArg::Receiver(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ FnArg::Typed(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ForeignItem {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ ForeignItem::Fn(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ ForeignItem::Static(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ ForeignItem::Type(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ ForeignItem::Macro(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ ForeignItem::Verbatim(v0) => {
++ state.write_u8(4u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ForeignItemFn {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.sig.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ForeignItemMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mac.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ForeignItemStatic {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.mutability.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ForeignItemType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for GenericArgument {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ GenericArgument::Lifetime(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ GenericArgument::Type(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ GenericArgument::Binding(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ GenericArgument::Constraint(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ GenericArgument::Const(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for GenericMethodArgument {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ GenericMethodArgument::Type(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ GenericMethodArgument::Const(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for GenericParam {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ GenericParam::Type(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ GenericParam::Lifetime(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ GenericParam::Const(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Generics {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lt_token.hash(state);
++ self.params.hash(state);
++ self.gt_token.hash(state);
++ self.where_clause.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ImplItem {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ ImplItem::Const(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ ImplItem::Method(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ ImplItem::Type(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ ImplItem::Macro(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ ImplItem::Verbatim(v0) => {
++ state.write_u8(4u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ImplItemConst {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.defaultness.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ImplItemMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mac.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ImplItemMethod {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.defaultness.hash(state);
++ self.sig.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ImplItemType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.defaultness.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Item {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Item::Const(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Item::Enum(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Item::ExternCrate(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Item::Fn(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ Item::ForeignMod(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ Item::Impl(v0) => {
++ state.write_u8(5u8);
++ v0.hash(state);
++ }
++ Item::Macro(v0) => {
++ state.write_u8(6u8);
++ v0.hash(state);
++ }
++ Item::Macro2(v0) => {
++ state.write_u8(7u8);
++ v0.hash(state);
++ }
++ Item::Mod(v0) => {
++ state.write_u8(8u8);
++ v0.hash(state);
++ }
++ Item::Static(v0) => {
++ state.write_u8(9u8);
++ v0.hash(state);
++ }
++ Item::Struct(v0) => {
++ state.write_u8(10u8);
++ v0.hash(state);
++ }
++ Item::Trait(v0) => {
++ state.write_u8(11u8);
++ v0.hash(state);
++ }
++ Item::TraitAlias(v0) => {
++ state.write_u8(12u8);
++ v0.hash(state);
++ }
++ Item::Type(v0) => {
++ state.write_u8(13u8);
++ v0.hash(state);
++ }
++ Item::Union(v0) => {
++ state.write_u8(14u8);
++ v0.hash(state);
++ }
++ Item::Use(v0) => {
++ state.write_u8(15u8);
++ v0.hash(state);
++ }
++ Item::Verbatim(v0) => {
++ state.write_u8(16u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemConst {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemEnum {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.variants.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemExternCrate {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.rename.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemFn {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.sig.hash(state);
++ self.block.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemForeignMod {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.abi.hash(state);
++ self.items.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemImpl {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.defaultness.hash(state);
++ self.unsafety.hash(state);
++ self.generics.hash(state);
++ self.trait_.hash(state);
++ self.self_ty.hash(state);
++ self.items.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.mac.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemMacro2 {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ TokenStreamHelper(&self.rules).hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemMod {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.content.hash(state);
++ self.semi.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemStatic {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.mutability.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemStruct {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.fields.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemTrait {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.unsafety.hash(state);
++ self.auto_token.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.colon_token.hash(state);
++ self.supertraits.hash(state);
++ self.items.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemTraitAlias {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.bounds.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemUnion {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.fields.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for ItemUse {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.vis.hash(state);
++ self.leading_colon.hash(state);
++ self.tree.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Label {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.name.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for LifetimeDef {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.lifetime.hash(state);
++ self.colon_token.hash(state);
++ self.bounds.hash(state);
++ }
++}
++impl Hash for Lit {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Lit::Str(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Lit::ByteStr(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Lit::Byte(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Lit::Char(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ Lit::Int(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ Lit::Float(v0) => {
++ state.write_u8(5u8);
++ v0.hash(state);
++ }
++ Lit::Bool(v0) => {
++ state.write_u8(6u8);
++ v0.hash(state);
++ }
++ Lit::Verbatim(v0) => {
++ state.write_u8(7u8);
++ v0.to_string().hash(state);
++ }
++ }
++ }
++}
++impl Hash for LitBool {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.value.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Local {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.pat.hash(state);
++ self.init.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Macro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.path.hash(state);
++ self.delimiter.hash(state);
++ TokenStreamHelper(&self.tokens).hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for MacroDelimiter {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ MacroDelimiter::Paren(_) => {
++ state.write_u8(0u8);
++ }
++ MacroDelimiter::Brace(_) => {
++ state.write_u8(1u8);
++ }
++ MacroDelimiter::Bracket(_) => {
++ state.write_u8(2u8);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Meta {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Meta::Path(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Meta::List(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Meta::NameValue(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for MetaList {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.path.hash(state);
++ self.nested.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for MetaNameValue {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.path.hash(state);
++ self.lit.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for MethodTurbofish {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.args.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for NestedMeta {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ NestedMeta::Meta(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ NestedMeta::Lit(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ParenthesizedGenericArguments {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.inputs.hash(state);
++ self.output.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Pat {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Pat::Box(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Pat::Ident(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Pat::Lit(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Pat::Macro(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ Pat::Or(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ Pat::Path(v0) => {
++ state.write_u8(5u8);
++ v0.hash(state);
++ }
++ Pat::Range(v0) => {
++ state.write_u8(6u8);
++ v0.hash(state);
++ }
++ Pat::Reference(v0) => {
++ state.write_u8(7u8);
++ v0.hash(state);
++ }
++ Pat::Rest(v0) => {
++ state.write_u8(8u8);
++ v0.hash(state);
++ }
++ Pat::Slice(v0) => {
++ state.write_u8(9u8);
++ v0.hash(state);
++ }
++ Pat::Struct(v0) => {
++ state.write_u8(10u8);
++ v0.hash(state);
++ }
++ Pat::Tuple(v0) => {
++ state.write_u8(11u8);
++ v0.hash(state);
++ }
++ Pat::TupleStruct(v0) => {
++ state.write_u8(12u8);
++ v0.hash(state);
++ }
++ Pat::Type(v0) => {
++ state.write_u8(13u8);
++ v0.hash(state);
++ }
++ Pat::Verbatim(v0) => {
++ state.write_u8(14u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ Pat::Wild(v0) => {
++ state.write_u8(15u8);
++ v0.hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatBox {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.pat.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatIdent {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.by_ref.hash(state);
++ self.mutability.hash(state);
++ self.ident.hash(state);
++ self.subpat.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatLit {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.expr.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mac.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatOr {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.leading_vert.hash(state);
++ self.cases.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatPath {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.qself.hash(state);
++ self.path.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatRange {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.lo.hash(state);
++ self.limits.hash(state);
++ self.hi.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatReference {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mutability.hash(state);
++ self.pat.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatRest {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatSlice {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.elems.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatStruct {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.path.hash(state);
++ self.fields.hash(state);
++ self.dot2_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatTuple {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.elems.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatTupleStruct {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.path.hash(state);
++ self.pat.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.pat.hash(state);
++ self.ty.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for PatWild {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Path {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.leading_colon.hash(state);
++ self.segments.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for PathArguments {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ PathArguments::None => {
++ state.write_u8(0u8);
++ }
++ PathArguments::AngleBracketed(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ PathArguments::Parenthesized(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for PathSegment {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ self.arguments.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for PredicateEq {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lhs_ty.hash(state);
++ self.rhs_ty.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for PredicateLifetime {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lifetime.hash(state);
++ self.bounds.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for PredicateType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lifetimes.hash(state);
++ self.bounded_ty.hash(state);
++ self.bounds.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for QSelf {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ty.hash(state);
++ self.position.hash(state);
++ self.as_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for RangeLimits {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ RangeLimits::HalfOpen(_) => {
++ state.write_u8(0u8);
++ }
++ RangeLimits::Closed(_) => {
++ state.write_u8(1u8);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Receiver {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.reference.hash(state);
++ self.mutability.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for ReturnType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ ReturnType::Default => {
++ state.write_u8(0u8);
++ }
++ ReturnType::Type(_, v1) => {
++ state.write_u8(1u8);
++ v1.hash(state);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Signature {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.constness.hash(state);
++ self.asyncness.hash(state);
++ self.unsafety.hash(state);
++ self.abi.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.inputs.hash(state);
++ self.variadic.hash(state);
++ self.output.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for Stmt {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Stmt::Local(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Stmt::Item(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Stmt::Expr(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Stmt::Semi(v0, _) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TraitBound {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.paren_token.hash(state);
++ self.modifier.hash(state);
++ self.lifetimes.hash(state);
++ self.path.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TraitBoundModifier {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ TraitBoundModifier::None => {
++ state.write_u8(0u8);
++ }
++ TraitBoundModifier::Maybe(_) => {
++ state.write_u8(1u8);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for TraitItem {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ TraitItem::Const(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ TraitItem::Method(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ TraitItem::Type(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ TraitItem::Macro(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ TraitItem::Verbatim(v0) => {
++ state.write_u8(4u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for TraitItemConst {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.ty.hash(state);
++ self.default.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for TraitItemMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.mac.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for TraitItemMethod {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.sig.hash(state);
++ self.default.hash(state);
++ self.semi_token.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for TraitItemType {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.generics.hash(state);
++ self.colon_token.hash(state);
++ self.bounds.hash(state);
++ self.default.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Type {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Type::Array(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Type::BareFn(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Type::Group(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Type::ImplTrait(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ Type::Infer(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ Type::Macro(v0) => {
++ state.write_u8(5u8);
++ v0.hash(state);
++ }
++ Type::Never(v0) => {
++ state.write_u8(6u8);
++ v0.hash(state);
++ }
++ Type::Paren(v0) => {
++ state.write_u8(7u8);
++ v0.hash(state);
++ }
++ Type::Path(v0) => {
++ state.write_u8(8u8);
++ v0.hash(state);
++ }
++ Type::Ptr(v0) => {
++ state.write_u8(9u8);
++ v0.hash(state);
++ }
++ Type::Reference(v0) => {
++ state.write_u8(10u8);
++ v0.hash(state);
++ }
++ Type::Slice(v0) => {
++ state.write_u8(11u8);
++ v0.hash(state);
++ }
++ Type::TraitObject(v0) => {
++ state.write_u8(12u8);
++ v0.hash(state);
++ }
++ Type::Tuple(v0) => {
++ state.write_u8(13u8);
++ v0.hash(state);
++ }
++ Type::Verbatim(v0) => {
++ state.write_u8(14u8);
++ TokenStreamHelper(v0).hash(state);
++ }
++ _ => unreachable!(),
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeArray {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.elem.hash(state);
++ self.len.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeBareFn {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lifetimes.hash(state);
++ self.unsafety.hash(state);
++ self.abi.hash(state);
++ self.inputs.hash(state);
++ self.variadic.hash(state);
++ self.output.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeGroup {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.elem.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeImplTrait {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.bounds.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeInfer {
++ fn hash<H>(&self, _state: &mut H)
++ where
++ H: Hasher,
++ {
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeMacro {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.mac.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeNever {
++ fn hash<H>(&self, _state: &mut H)
++ where
++ H: Hasher,
++ {
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeParam {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.colon_token.hash(state);
++ self.bounds.hash(state);
++ self.eq_token.hash(state);
++ self.default.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeParamBound {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ TypeParamBound::Trait(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ TypeParamBound::Lifetime(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeParen {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.elem.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypePath {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.qself.hash(state);
++ self.path.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypePtr {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.const_token.hash(state);
++ self.mutability.hash(state);
++ self.elem.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeReference {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.lifetime.hash(state);
++ self.mutability.hash(state);
++ self.elem.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeSlice {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.elem.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeTraitObject {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.dyn_token.hash(state);
++ self.bounds.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for TypeTuple {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.elems.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for UnOp {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ UnOp::Deref(_) => {
++ state.write_u8(0u8);
++ }
++ UnOp::Not(_) => {
++ state.write_u8(1u8);
++ }
++ UnOp::Neg(_) => {
++ state.write_u8(2u8);
++ }
++ }
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UseGlob {
++ fn hash<H>(&self, _state: &mut H)
++ where
++ H: Hasher,
++ {
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UseGroup {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.items.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UseName {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UsePath {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ self.tree.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UseRename {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.ident.hash(state);
++ self.rename.hash(state);
++ }
++}
++#[cfg(feature = "full")]
++impl Hash for UseTree {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ UseTree::Path(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ UseTree::Name(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ UseTree::Rename(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ UseTree::Glob(v0) => {
++ state.write_u8(3u8);
++ v0.hash(state);
++ }
++ UseTree::Group(v0) => {
++ state.write_u8(4u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Variadic {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Variant {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.attrs.hash(state);
++ self.ident.hash(state);
++ self.fields.hash(state);
++ self.discriminant.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for VisCrate {
++ fn hash<H>(&self, _state: &mut H)
++ where
++ H: Hasher,
++ {
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for VisPublic {
++ fn hash<H>(&self, _state: &mut H)
++ where
++ H: Hasher,
++ {
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for VisRestricted {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.in_token.hash(state);
++ self.path.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for Visibility {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ Visibility::Public(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ Visibility::Crate(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ Visibility::Restricted(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ Visibility::Inherited => {
++ state.write_u8(3u8);
++ }
++ }
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for WhereClause {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ self.predicates.hash(state);
++ }
++}
++#[cfg(any(feature = "derive", feature = "full"))]
++impl Hash for WherePredicate {
++ fn hash<H>(&self, state: &mut H)
++ where
++ H: Hasher,
++ {
++ match self {
++ WherePredicate::Type(v0) => {
++ state.write_u8(0u8);
++ v0.hash(state);
++ }
++ WherePredicate::Lifetime(v0) => {
++ state.write_u8(1u8);
++ v0.hash(state);
++ }
++ WherePredicate::Eq(v0) => {
++ state.write_u8(2u8);
++ v0.hash(state);
++ }
++ }
++ }
++}
+diff --git a/third_party/rust/syn/src/gen/visit.rs b/third_party/rust/syn/src/gen/visit.rs
+index b667f530c3..24d34b7480 100644
+--- mozilla-release/third_party/rust/syn/src/gen/visit.rs
++++ mozilla-release/third_party/rust/syn/src/gen/visit.rs
+@@ -20,7 +20,6 @@ macro_rules! full {
+ unreachable!()
+ };
+ }
+-#[cfg(any(feature = "full", feature = "derive"))]
+ macro_rules! skip {
+ ($($tt:tt)*) => {};
+ }
+@@ -30,7 +29,7 @@ macro_rules! skip {
+ ///
+ /// [module documentation]: self
+ ///
+-/// *This trait is available if Syn is built with the `"visit"` feature.*
++/// *This trait is available only if Syn is built with the `"visit"` feature.*
+ pub trait Visit<'ast> {
+ #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_abi(&mut self, i: &'ast Abi) {
+@@ -434,35 +433,27 @@ pub trait Visit<'ast> {
+ fn visit_lifetime_def(&mut self, i: &'ast LifetimeDef) {
+ visit_lifetime_def(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit(&mut self, i: &'ast Lit) {
+ visit_lit(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_bool(&mut self, i: &'ast LitBool) {
+ visit_lit_bool(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_byte(&mut self, i: &'ast LitByte) {
+ visit_lit_byte(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_byte_str(&mut self, i: &'ast LitByteStr) {
+ visit_lit_byte_str(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_char(&mut self, i: &'ast LitChar) {
+ visit_lit_char(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_float(&mut self, i: &'ast LitFloat) {
+ visit_lit_float(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_int(&mut self, i: &'ast LitInt) {
+ visit_lit_int(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_str(&mut self, i: &'ast LitStr) {
+ visit_lit_str(self, i)
+ }
+@@ -2537,7 +2528,6 @@ where
+ }
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit<'ast, V>(v: &mut V, node: &'ast Lit)
+ where
+ V: Visit<'ast> + ?Sized,
+@@ -2569,7 +2559,6 @@ where
+ }
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_bool<'ast, V>(v: &mut V, node: &'ast LitBool)
+ where
+ V: Visit<'ast> + ?Sized,
+@@ -2577,37 +2566,31 @@ where
+ skip!(node.value);
+ v.visit_span(&node.span);
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_byte<'ast, V>(v: &mut V, node: &'ast LitByte)
+ where
+ V: Visit<'ast> + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_byte_str<'ast, V>(v: &mut V, node: &'ast LitByteStr)
+ where
+ V: Visit<'ast> + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_char<'ast, V>(v: &mut V, node: &'ast LitChar)
+ where
+ V: Visit<'ast> + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_float<'ast, V>(v: &mut V, node: &'ast LitFloat)
+ where
+ V: Visit<'ast> + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_int<'ast, V>(v: &mut V, node: &'ast LitInt)
+ where
+ V: Visit<'ast> + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_str<'ast, V>(v: &mut V, node: &'ast LitStr)
+ where
+ V: Visit<'ast> + ?Sized,
+diff --git a/third_party/rust/syn/src/gen/visit_mut.rs b/third_party/rust/syn/src/gen/visit_mut.rs
+index 5cddb827c6..5ce11f0b2e 100644
+--- mozilla-release/third_party/rust/syn/src/gen/visit_mut.rs
++++ mozilla-release/third_party/rust/syn/src/gen/visit_mut.rs
+@@ -20,7 +20,6 @@ macro_rules! full {
+ unreachable!()
+ };
+ }
+-#[cfg(any(feature = "full", feature = "derive"))]
+ macro_rules! skip {
+ ($($tt:tt)*) => {};
+ }
+@@ -31,7 +30,7 @@ macro_rules! skip {
+ ///
+ /// [module documentation]: self
+ ///
+-/// *This trait is available if Syn is built with the `"visit-mut"` feature.*
++/// *This trait is available only if Syn is built with the `"visit-mut"` feature.*
+ pub trait VisitMut {
+ #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_abi_mut(&mut self, i: &mut Abi) {
+@@ -438,35 +437,27 @@ pub trait VisitMut {
+ fn visit_lifetime_def_mut(&mut self, i: &mut LifetimeDef) {
+ visit_lifetime_def_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_mut(&mut self, i: &mut Lit) {
+ visit_lit_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_bool_mut(&mut self, i: &mut LitBool) {
+ visit_lit_bool_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_byte_mut(&mut self, i: &mut LitByte) {
+ visit_lit_byte_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_byte_str_mut(&mut self, i: &mut LitByteStr) {
+ visit_lit_byte_str_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_char_mut(&mut self, i: &mut LitChar) {
+ visit_lit_char_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_float_mut(&mut self, i: &mut LitFloat) {
+ visit_lit_float_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_int_mut(&mut self, i: &mut LitInt) {
+ visit_lit_int_mut(self, i)
+ }
+- #[cfg(any(feature = "derive", feature = "full"))]
+ fn visit_lit_str_mut(&mut self, i: &mut LitStr) {
+ visit_lit_str_mut(self, i)
+ }
+@@ -2543,7 +2534,6 @@ where
+ }
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_mut<V>(v: &mut V, node: &mut Lit)
+ where
+ V: VisitMut + ?Sized,
+@@ -2575,7 +2565,6 @@ where
+ }
+ }
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_bool_mut<V>(v: &mut V, node: &mut LitBool)
+ where
+ V: VisitMut + ?Sized,
+@@ -2583,37 +2572,31 @@ where
+ skip!(node.value);
+ v.visit_span_mut(&mut node.span);
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_byte_mut<V>(v: &mut V, node: &mut LitByte)
+ where
+ V: VisitMut + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_byte_str_mut<V>(v: &mut V, node: &mut LitByteStr)
+ where
+ V: VisitMut + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_char_mut<V>(v: &mut V, node: &mut LitChar)
+ where
+ V: VisitMut + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_float_mut<V>(v: &mut V, node: &mut LitFloat)
+ where
+ V: VisitMut + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_int_mut<V>(v: &mut V, node: &mut LitInt)
+ where
+ V: VisitMut + ?Sized,
+ {
+ }
+-#[cfg(any(feature = "derive", feature = "full"))]
+ pub fn visit_lit_str_mut<V>(v: &mut V, node: &mut LitStr)
+ where
+ V: VisitMut + ?Sized,
+diff --git a/third_party/rust/syn/src/generics.rs b/third_party/rust/syn/src/generics.rs
+index 95ab2e404a..05e8ef5cdf 100644
+--- mozilla-release/third_party/rust/syn/src/generics.rs
++++ mozilla-release/third_party/rust/syn/src/generics.rs
+@@ -1,13 +1,16 @@
+ use super::*;
+ use crate::punctuated::{Iter, IterMut, Punctuated};
++#[cfg(all(feature = "printing", feature = "extra-traits"))]
++use std::fmt::{self, Debug};
++#[cfg(all(feature = "printing", feature = "extra-traits"))]
++use std::hash::{Hash, Hasher};
+
+ ast_struct! {
+ /// Lifetimes and type parameters attached to a declaration of a function,
+ /// enum, trait, etc.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- #[derive(Default)]
+ pub struct Generics {
+ pub lt_token: Option<Token![<]>,
+ pub params: Punctuated<GenericParam, Token![,]>,
+@@ -20,7 +23,7 @@ ast_enum_of_structs! {
+ /// A generic type parameter, lifetime, or const generic: `T: Into<String>`,
+ /// `'a: 'b`, `const LEN: usize`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Syntax tree enum
+@@ -28,9 +31,6 @@ ast_enum_of_structs! {
+ /// This type is a [syntax tree enum].
+ ///
+ /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
+- //
+- // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+- // blocked on https://github.com/rust-lang/rust/issues/62833
+ pub enum GenericParam {
+ /// A generic type parameter: `T: Into<String>`.
+ Type(TypeParam),
+@@ -46,7 +46,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A generic type parameter: `T: Into<String>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeParam {
+ pub attrs: Vec<Attribute>,
+@@ -61,7 +61,7 @@ ast_struct! {
+ ast_struct! {
+ /// A lifetime definition: `'a: 'b + 'c + 'd`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct LifetimeDef {
+ pub attrs: Vec<Attribute>,
+@@ -74,7 +74,7 @@ ast_struct! {
+ ast_struct! {
+ /// A const generic parameter: `const LENGTH: usize`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct ConstParam {
+ pub attrs: Vec<Attribute>,
+@@ -87,6 +87,17 @@ ast_struct! {
+ }
+ }
+
++impl Default for Generics {
++ fn default() -> Self {
++ Generics {
++ lt_token: None,
++ params: Punctuated::new(),
++ gt_token: None,
++ where_clause: None,
++ }
++ }
++}
++
+ impl Generics {
+ /// Returns an
+ /// <code
+@@ -280,29 +291,23 @@ impl<'a> Iterator for ConstParamsMut<'a> {
+
+ /// Returned by `Generics::split_for_impl`.
+ ///
+-/// *This type is available if Syn is built with the `"derive"` or `"full"`
++/// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature and the `"printing"` feature.*
+ #[cfg(feature = "printing")]
+-#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ pub struct ImplGenerics<'a>(&'a Generics);
+
+ /// Returned by `Generics::split_for_impl`.
+ ///
+-/// *This type is available if Syn is built with the `"derive"` or `"full"`
++/// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature and the `"printing"` feature.*
+ #[cfg(feature = "printing")]
+-#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ pub struct TypeGenerics<'a>(&'a Generics);
+
+ /// Returned by `TypeGenerics::as_turbofish`.
+ ///
+-/// *This type is available if Syn is built with the `"derive"` or `"full"`
++/// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature and the `"printing"` feature.*
+ #[cfg(feature = "printing")]
+-#[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ pub struct Turbofish<'a>(&'a Generics);
+
+ #[cfg(feature = "printing")]
+@@ -314,9 +319,8 @@ impl Generics {
+ /// # use proc_macro2::{Span, Ident};
+ /// # use quote::quote;
+ /// #
+- /// # fn main() {
+- /// # let generics: syn::Generics = Default::default();
+- /// # let name = Ident::new("MyType", Span::call_site());
++ /// # let generics: syn::Generics = Default::default();
++ /// # let name = Ident::new("MyType", Span::call_site());
+ /// #
+ /// let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
+ /// quote! {
+@@ -324,11 +328,10 @@ impl Generics {
+ /// // ...
+ /// }
+ /// }
+- /// # ;
+- /// # }
++ /// # ;
+ /// ```
+ ///
+- /// *This method is available if Syn is built with the `"derive"` or
++ /// *This method is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature and the `"printing"` feature.*
+ pub fn split_for_impl(&self) -> (ImplGenerics, TypeGenerics, Option<&WhereClause>) {
+ (
+@@ -339,11 +342,57 @@ impl Generics {
+ }
+ }
+
++#[cfg(feature = "printing")]
++macro_rules! generics_wrapper_impls {
++ ($ty:ident) => {
++ #[cfg(feature = "clone-impls")]
++ impl<'a> Clone for $ty<'a> {
++ fn clone(&self) -> Self {
++ $ty(self.0)
++ }
++ }
++
++ #[cfg(feature = "extra-traits")]
++ impl<'a> Debug for $ty<'a> {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter
++ .debug_tuple(stringify!($ty))
++ .field(self.0)
++ .finish()
++ }
++ }
++
++ #[cfg(feature = "extra-traits")]
++ impl<'a> Eq for $ty<'a> {}
++
++ #[cfg(feature = "extra-traits")]
++ impl<'a> PartialEq for $ty<'a> {
++ fn eq(&self, other: &Self) -> bool {
++ self.0 == other.0
++ }
++ }
++
++ #[cfg(feature = "extra-traits")]
++ impl<'a> Hash for $ty<'a> {
++ fn hash<H: Hasher>(&self, state: &mut H) {
++ self.0.hash(state);
++ }
++ }
++ };
++}
++
++#[cfg(feature = "printing")]
++generics_wrapper_impls!(ImplGenerics);
++#[cfg(feature = "printing")]
++generics_wrapper_impls!(TypeGenerics);
++#[cfg(feature = "printing")]
++generics_wrapper_impls!(Turbofish);
++
+ #[cfg(feature = "printing")]
+ impl<'a> TypeGenerics<'a> {
+ /// Turn a type's generics like `<X, Y>` into a turbofish like `::<X, Y>`.
+ ///
+- /// *This method is available if Syn is built with the `"derive"` or
++ /// *This method is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature and the `"printing"` feature.*
+ pub fn as_turbofish(&self) -> Turbofish {
+ Turbofish(self.0)
+@@ -353,9 +402,8 @@ impl<'a> TypeGenerics<'a> {
+ ast_struct! {
+ /// A set of bound lifetimes: `for<'a, 'b, 'c>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- #[derive(Default)]
+ pub struct BoundLifetimes {
+ pub for_token: Token![for],
+ pub lt_token: Token![<],
+@@ -364,6 +412,17 @@ ast_struct! {
+ }
+ }
+
++impl Default for BoundLifetimes {
++ fn default() -> Self {
++ BoundLifetimes {
++ for_token: Default::default(),
++ lt_token: Default::default(),
++ lifetimes: Punctuated::new(),
++ gt_token: Default::default(),
++ }
++ }
++}
++
+ impl LifetimeDef {
+ pub fn new(lifetime: Lifetime) -> Self {
+ LifetimeDef {
+@@ -391,7 +450,7 @@ impl From<Ident> for TypeParam {
+ ast_enum_of_structs! {
+ /// A trait or lifetime used as a bound on a type parameter.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum TypeParamBound {
+ Trait(TraitBound),
+@@ -402,7 +461,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A trait used as a bound on a type parameter.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct TraitBound {
+ pub paren_token: Option<token::Paren>,
+@@ -418,9 +477,8 @@ ast_enum! {
+ /// A modifier on a trait bound, currently only used for the `?` in
+ /// `?Sized`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- #[cfg_attr(feature = "clone-impls", derive(Copy))]
+ pub enum TraitBoundModifier {
+ None,
+ Maybe(Token![?]),
+@@ -431,7 +489,7 @@ ast_struct! {
+ /// A `where` clause in a definition: `where T: Deserialize<'de>, D:
+ /// 'static`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct WhereClause {
+ pub where_token: Token![where],
+@@ -442,7 +500,7 @@ ast_struct! {
+ ast_enum_of_structs! {
+ /// A single predicate in a `where` clause: `T: Deserialize<'de>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Syntax tree enum
+@@ -450,9 +508,6 @@ ast_enum_of_structs! {
+ /// This type is a [syntax tree enum].
+ ///
+ /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums
+- //
+- // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+- // blocked on https://github.com/rust-lang/rust/issues/62833
+ pub enum WherePredicate {
+ /// A type predicate in a `where` clause: `for<'c> Foo<'c>: Trait<'c>`.
+ Type(PredicateType),
+@@ -468,7 +523,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A type predicate in a `where` clause: `for<'c> Foo<'c>: Trait<'c>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct PredicateType {
+ /// Any lifetimes from a `for` binding
+@@ -484,7 +539,7 @@ ast_struct! {
+ ast_struct! {
+ /// A lifetime predicate in a `where` clause: `'a: 'b + 'c`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct PredicateLifetime {
+ pub lifetime: Lifetime,
+@@ -496,7 +551,7 @@ ast_struct! {
+ ast_struct! {
+ /// An equality predicate in a `where` clause (unsupported).
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct PredicateEq {
+ pub lhs_ty: Type,
+@@ -521,7 +576,6 @@ pub mod parsing {
+
+ let mut params = Punctuated::new();
+ let mut allow_lifetime_param = true;
+- let mut allow_type_param = true;
+ loop {
+ if input.peek(Token![>]) {
+ break;
+@@ -534,7 +588,7 @@ pub mod parsing {
+ attrs,
+ ..input.parse()?
+ }));
+- } else if allow_type_param && lookahead.peek(Ident) {
++ } else if lookahead.peek(Ident) {
+ allow_lifetime_param = false;
+ params.push_value(GenericParam::Type(TypeParam {
+ attrs,
+@@ -542,7 +596,6 @@ pub mod parsing {
+ }));
+ } else if lookahead.peek(Token![const]) {
+ allow_lifetime_param = false;
+- allow_type_param = false;
+ params.push_value(GenericParam::Const(ConstParam {
+ attrs,
+ ..input.parse()?
+@@ -665,57 +718,53 @@ pub mod parsing {
+
+ impl Parse for TypeParam {
+ fn parse(input: ParseStream) -> Result<Self> {
+- let has_colon;
+- let has_default;
+- Ok(TypeParam {
+- attrs: input.call(Attribute::parse_outer)?,
+- ident: input.parse()?,
+- colon_token: {
+- if input.peek(Token![:]) {
+- has_colon = true;
+- Some(input.parse()?)
+- } else {
+- has_colon = false;
+- None
+- }
+- },
+- bounds: {
+- let mut bounds = Punctuated::new();
+- if has_colon {
+- loop {
+- if input.peek(Token![,])
+- || input.peek(Token![>])
+- || input.peek(Token![=])
+- {
+- break;
+- }
+- let value = input.parse()?;
+- bounds.push_value(value);
+- if !input.peek(Token![+]) {
+- break;
+- }
+- let punct = input.parse()?;
+- bounds.push_punct(punct);
+- }
++ let attrs = input.call(Attribute::parse_outer)?;
++ let ident: Ident = input.parse()?;
++ let colon_token: Option<Token![:]> = input.parse()?;
++
++ let begin_bound = input.fork();
++ let mut is_maybe_const = false;
++ let mut bounds = Punctuated::new();
++ if colon_token.is_some() {
++ loop {
++ if input.peek(Token![,]) || input.peek(Token![>]) || input.peek(Token![=]) {
++ break;
+ }
+- bounds
+- },
+- eq_token: {
+- if input.peek(Token![=]) {
+- has_default = true;
+- Some(input.parse()?)
+- } else {
+- has_default = false;
+- None
++ if input.peek(Token![?]) && input.peek2(Token![const]) {
++ input.parse::<Token![?]>()?;
++ input.parse::<Token![const]>()?;
++ is_maybe_const = true;
+ }
+- },
+- default: {
+- if has_default {
+- Some(input.parse()?)
+- } else {
+- None
++ let value: TypeParamBound = input.parse()?;
++ bounds.push_value(value);
++ if !input.peek(Token![+]) {
++ break;
+ }
+- },
++ let punct: Token![+] = input.parse()?;
++ bounds.push_punct(punct);
++ }
++ }
++
++ let mut eq_token: Option<Token![=]> = input.parse()?;
++ let mut default = if eq_token.is_some() {
++ Some(input.parse::<Type>()?)
++ } else {
++ None
++ };
++
++ if is_maybe_const {
++ bounds.clear();
++ eq_token = None;
++ default = Some(Type::Verbatim(verbatim::between(begin_bound, input)));
++ }
++
++ Ok(TypeParam {
++ attrs,
++ ident,
++ colon_token,
++ bounds,
++ eq_token,
++ default,
+ })
+ }
+ }
+@@ -898,6 +947,8 @@ mod printing {
+ use super::*;
+
+ use proc_macro2::TokenStream;
++ #[cfg(feature = "full")]
++ use proc_macro2::TokenTree;
+ use quote::{ToTokens, TokenStreamExt};
+
+ use crate::attr::FilterAttrs;
+@@ -1080,9 +1131,25 @@ mod printing {
+ TokensOrDefault(&self.colon_token).to_tokens(tokens);
+ self.bounds.to_tokens(tokens);
+ }
+- if self.default.is_some() {
++ if let Some(default) = &self.default {
++ #[cfg(feature = "full")]
++ {
++ if self.eq_token.is_none() {
++ if let Type::Verbatim(default) = default {
++ let mut iter = default.clone().into_iter();
++ match (iter.next(), iter.next()) {
++ (Some(TokenTree::Punct(ref q)), Some(TokenTree::Ident(ref c)))
++ if q.as_char() == '?' && c == "const" =>
++ {
++ return default.to_tokens(tokens);
++ }
++ _ => {}
++ }
++ }
++ }
++ }
+ TokensOrDefault(&self.eq_token).to_tokens(tokens);
+- self.default.to_tokens(tokens);
++ default.to_tokens(tokens);
+ }
+ }
+ }
+@@ -1117,9 +1184,9 @@ mod printing {
+ self.ident.to_tokens(tokens);
+ self.colon_token.to_tokens(tokens);
+ self.ty.to_tokens(tokens);
+- if self.default.is_some() {
++ if let Some(default) = &self.default {
+ TokensOrDefault(&self.eq_token).to_tokens(tokens);
+- self.default.to_tokens(tokens);
++ default.to_tokens(tokens);
+ }
+ }
+ }
+diff --git a/third_party/rust/syn/src/item.rs b/third_party/rust/syn/src/item.rs
+index ff4485ace9..0d8f7d3ddc 100644
+--- mozilla-release/third_party/rust/syn/src/item.rs
++++ mozilla-release/third_party/rust/syn/src/item.rs
+@@ -1,17 +1,15 @@
+ use super::*;
+-use crate::derive::{Data, DeriveInput};
++use crate::derive::{Data, DataEnum, DataStruct, DataUnion, DeriveInput};
+ use crate::punctuated::Punctuated;
+ use proc_macro2::TokenStream;
+
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
+-#[cfg(feature = "extra-traits")]
+-use std::hash::{Hash, Hasher};
++#[cfg(feature = "parsing")]
++use std::mem;
+
+ ast_enum_of_structs! {
+ /// Things that can appear directly inside of a module or scope.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -21,7 +19,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum Item #manual_extra_traits {
++ pub enum Item {
+ /// A constant item: `const MAX: u16 = 65535`.
+ Const(ItemConst),
+
+@@ -83,7 +81,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A constant item: `const MAX: u16 = 65535`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemConst {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -100,7 +98,7 @@ ast_struct! {
+ ast_struct! {
+ /// An enum definition: `enum Foo<A, B> { A(A), B(B) }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemEnum {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -115,7 +113,7 @@ ast_struct! {
+ ast_struct! {
+ /// An `extern crate` item: `extern crate serde`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemExternCrate {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -131,7 +129,7 @@ ast_struct! {
+ /// A free-standing function: `fn process(n: usize) -> Result<()> { ...
+ /// }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemFn {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -143,7 +141,7 @@ ast_struct! {
+ ast_struct! {
+ /// A block of foreign items: `extern "C" { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemForeignMod {
+ pub attrs: Vec<Attribute>,
+ pub abi: Abi,
+@@ -156,7 +154,7 @@ ast_struct! {
+ /// An impl block providing trait or associated items: `impl<A> Trait
+ /// for Data<A> { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemImpl {
+ pub attrs: Vec<Attribute>,
+ pub defaultness: Option<Token![default]>,
+@@ -175,7 +173,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro invocation, which includes `macro_rules!` definitions.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemMacro {
+ pub attrs: Vec<Attribute>,
+ /// The `example` in `macro_rules! example { ... }`.
+@@ -188,8 +186,8 @@ ast_struct! {
+ ast_struct! {
+ /// A 2.0-style declarative macro introduced by the `macro` keyword.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
+- pub struct ItemMacro2 #manual_extra_traits {
++ /// *This type is available only if Syn is built with the `"full"` feature.*
++ pub struct ItemMacro2 {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+ pub macro_token: Token![macro],
+@@ -201,7 +199,7 @@ ast_struct! {
+ ast_struct! {
+ /// A module or module declaration: `mod m` or `mod m { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemMod {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -215,7 +213,7 @@ ast_struct! {
+ ast_struct! {
+ /// A static item: `static BIKE: Shed = Shed(42)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemStatic {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -233,7 +231,7 @@ ast_struct! {
+ ast_struct! {
+ /// A struct definition: `struct Foo<A> { x: A }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemStruct {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -248,7 +246,7 @@ ast_struct! {
+ ast_struct! {
+ /// A trait definition: `pub trait Iterator { ... }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemTrait {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -267,7 +265,7 @@ ast_struct! {
+ ast_struct! {
+ /// A trait alias: `pub trait SharableIterator = Iterator + Sync`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemTraitAlias {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -283,7 +281,7 @@ ast_struct! {
+ ast_struct! {
+ /// A type alias: `type Result<T> = std::result::Result<T, MyError>`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemType {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -299,7 +297,7 @@ ast_struct! {
+ ast_struct! {
+ /// A union definition: `union Foo<A, B> { x: A, y: B }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemUnion {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -313,7 +311,7 @@ ast_struct! {
+ ast_struct! {
+ /// A use declaration: `use std::collections::HashMap`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ItemUse {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -324,145 +322,32 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Item {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Item {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (Item::Const(this), Item::Const(other)) => this == other,
+- (Item::Enum(this), Item::Enum(other)) => this == other,
+- (Item::ExternCrate(this), Item::ExternCrate(other)) => this == other,
+- (Item::Fn(this), Item::Fn(other)) => this == other,
+- (Item::ForeignMod(this), Item::ForeignMod(other)) => this == other,
+- (Item::Impl(this), Item::Impl(other)) => this == other,
+- (Item::Macro(this), Item::Macro(other)) => this == other,
+- (Item::Macro2(this), Item::Macro2(other)) => this == other,
+- (Item::Mod(this), Item::Mod(other)) => this == other,
+- (Item::Static(this), Item::Static(other)) => this == other,
+- (Item::Struct(this), Item::Struct(other)) => this == other,
+- (Item::Trait(this), Item::Trait(other)) => this == other,
+- (Item::TraitAlias(this), Item::TraitAlias(other)) => this == other,
+- (Item::Type(this), Item::Type(other)) => this == other,
+- (Item::Union(this), Item::Union(other)) => this == other,
+- (Item::Use(this), Item::Use(other)) => this == other,
+- (Item::Verbatim(this), Item::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Item {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
++impl Item {
++ #[cfg(feature = "parsing")]
++ pub(crate) fn replace_attrs(&mut self, new: Vec<Attribute>) -> Vec<Attribute> {
+ match self {
+- Item::Const(item) => {
+- state.write_u8(0);
+- item.hash(state);
+- }
+- Item::Enum(item) => {
+- state.write_u8(1);
+- item.hash(state);
+- }
+- Item::ExternCrate(item) => {
+- state.write_u8(2);
+- item.hash(state);
+- }
+- Item::Fn(item) => {
+- state.write_u8(3);
+- item.hash(state);
+- }
+- Item::ForeignMod(item) => {
+- state.write_u8(4);
+- item.hash(state);
+- }
+- Item::Impl(item) => {
+- state.write_u8(5);
+- item.hash(state);
+- }
+- Item::Macro(item) => {
+- state.write_u8(6);
+- item.hash(state);
+- }
+- Item::Macro2(item) => {
+- state.write_u8(7);
+- item.hash(state);
+- }
+- Item::Mod(item) => {
+- state.write_u8(8);
+- item.hash(state);
+- }
+- Item::Static(item) => {
+- state.write_u8(9);
+- item.hash(state);
+- }
+- Item::Struct(item) => {
+- state.write_u8(10);
+- item.hash(state);
+- }
+- Item::Trait(item) => {
+- state.write_u8(11);
+- item.hash(state);
+- }
+- Item::TraitAlias(item) => {
+- state.write_u8(12);
+- item.hash(state);
+- }
+- Item::Type(item) => {
+- state.write_u8(13);
+- item.hash(state);
+- }
+- Item::Union(item) => {
+- state.write_u8(14);
+- item.hash(state);
+- }
+- Item::Use(item) => {
+- state.write_u8(15);
+- item.hash(state);
+- }
+- Item::Verbatim(item) => {
+- state.write_u8(16);
+- TokenStreamHelper(item).hash(state);
+- }
++ Item::ExternCrate(ItemExternCrate { attrs, .. })
++ | Item::Use(ItemUse { attrs, .. })
++ | Item::Static(ItemStatic { attrs, .. })
++ | Item::Const(ItemConst { attrs, .. })
++ | Item::Fn(ItemFn { attrs, .. })
++ | Item::Mod(ItemMod { attrs, .. })
++ | Item::ForeignMod(ItemForeignMod { attrs, .. })
++ | Item::Type(ItemType { attrs, .. })
++ | Item::Struct(ItemStruct { attrs, .. })
++ | Item::Enum(ItemEnum { attrs, .. })
++ | Item::Union(ItemUnion { attrs, .. })
++ | Item::Trait(ItemTrait { attrs, .. })
++ | Item::TraitAlias(ItemTraitAlias { attrs, .. })
++ | Item::Impl(ItemImpl { attrs, .. })
++ | Item::Macro(ItemMacro { attrs, .. })
++ | Item::Macro2(ItemMacro2 { attrs, .. }) => mem::replace(attrs, new),
++ Item::Verbatim(_) => Vec::new(),
+ Item::__Nonexhaustive => unreachable!(),
+ }
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for ItemMacro2 {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for ItemMacro2 {
+- fn eq(&self, other: &Self) -> bool {
+- self.attrs == other.attrs
+- && self.vis == other.vis
+- && self.macro_token == other.macro_token
+- && self.ident == other.ident
+- && TokenStreamHelper(&self.rules) == TokenStreamHelper(&other.rules)
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for ItemMacro2 {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- self.attrs.hash(state);
+- self.vis.hash(state);
+- self.macro_token.hash(state);
+- self.ident.hash(state);
+- TokenStreamHelper(&self.rules).hash(state);
+- }
+-}
+-
+ impl From<DeriveInput> for Item {
+ fn from(input: DeriveInput) -> Item {
+ match input.data {
+@@ -496,10 +381,57 @@ impl From<DeriveInput> for Item {
+ }
+ }
+
++impl From<ItemStruct> for DeriveInput {
++ fn from(input: ItemStruct) -> DeriveInput {
++ DeriveInput {
++ attrs: input.attrs,
++ vis: input.vis,
++ ident: input.ident,
++ generics: input.generics,
++ data: Data::Struct(DataStruct {
++ struct_token: input.struct_token,
++ fields: input.fields,
++ semi_token: input.semi_token,
++ }),
++ }
++ }
++}
++
++impl From<ItemEnum> for DeriveInput {
++ fn from(input: ItemEnum) -> DeriveInput {
++ DeriveInput {
++ attrs: input.attrs,
++ vis: input.vis,
++ ident: input.ident,
++ generics: input.generics,
++ data: Data::Enum(DataEnum {
++ enum_token: input.enum_token,
++ brace_token: input.brace_token,
++ variants: input.variants,
++ }),
++ }
++ }
++}
++
++impl From<ItemUnion> for DeriveInput {
++ fn from(input: ItemUnion) -> DeriveInput {
++ DeriveInput {
++ attrs: input.attrs,
++ vis: input.vis,
++ ident: input.ident,
++ generics: input.generics,
++ data: Data::Union(DataUnion {
++ union_token: input.union_token,
++ fields: input.fields,
++ }),
++ }
++ }
++}
++
+ ast_enum_of_structs! {
+ /// A suffix of an import tree in a `use` item: `Type as Renamed` or `*`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -530,7 +462,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A path prefix of imports in a `use` item: `std::...`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct UsePath {
+ pub ident: Ident,
+ pub colon2_token: Token![::],
+@@ -541,7 +473,7 @@ ast_struct! {
+ ast_struct! {
+ /// An identifier imported by a `use` item: `HashMap`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct UseName {
+ pub ident: Ident,
+ }
+@@ -550,7 +482,7 @@ ast_struct! {
+ ast_struct! {
+ /// An renamed identifier imported by a `use` item: `HashMap as Map`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct UseRename {
+ pub ident: Ident,
+ pub as_token: Token![as],
+@@ -561,7 +493,7 @@ ast_struct! {
+ ast_struct! {
+ /// A glob import in a `use` item: `*`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct UseGlob {
+ pub star_token: Token![*],
+ }
+@@ -570,7 +502,7 @@ ast_struct! {
+ ast_struct! {
+ /// A braced group of imports in a `use` item: `{A, B, C}`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct UseGroup {
+ pub brace_token: token::Brace,
+ pub items: Punctuated<UseTree, Token![,]>,
+@@ -580,7 +512,7 @@ ast_struct! {
+ ast_enum_of_structs! {
+ /// An item within an `extern` block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -590,7 +522,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum ForeignItem #manual_extra_traits {
++ pub enum ForeignItem {
+ /// A foreign function in an `extern` block.
+ Fn(ForeignItemFn),
+
+@@ -614,7 +546,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A foreign function in an `extern` block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ForeignItemFn {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -626,7 +558,7 @@ ast_struct! {
+ ast_struct! {
+ /// A foreign static item in an `extern` block: `static ext: u8`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ForeignItemStatic {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -642,7 +574,7 @@ ast_struct! {
+ ast_struct! {
+ /// A foreign type in an `extern` block: `type void`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ForeignItemType {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -655,7 +587,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro invocation within an extern block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ForeignItemMacro {
+ pub attrs: Vec<Attribute>,
+ pub mac: Macro,
+@@ -663,61 +595,10 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for ForeignItem {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for ForeignItem {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (ForeignItem::Fn(this), ForeignItem::Fn(other)) => this == other,
+- (ForeignItem::Static(this), ForeignItem::Static(other)) => this == other,
+- (ForeignItem::Type(this), ForeignItem::Type(other)) => this == other,
+- (ForeignItem::Macro(this), ForeignItem::Macro(other)) => this == other,
+- (ForeignItem::Verbatim(this), ForeignItem::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for ForeignItem {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- ForeignItem::Fn(item) => {
+- state.write_u8(0);
+- item.hash(state);
+- }
+- ForeignItem::Static(item) => {
+- state.write_u8(1);
+- item.hash(state);
+- }
+- ForeignItem::Type(item) => {
+- state.write_u8(2);
+- item.hash(state);
+- }
+- ForeignItem::Macro(item) => {
+- state.write_u8(3);
+- item.hash(state);
+- }
+- ForeignItem::Verbatim(item) => {
+- state.write_u8(4);
+- TokenStreamHelper(item).hash(state);
+- }
+- ForeignItem::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ ast_enum_of_structs! {
+ /// An item declaration within the definition of a trait.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -727,7 +608,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum TraitItem #manual_extra_traits {
++ pub enum TraitItem {
+ /// An associated constant within the definition of a trait.
+ Const(TraitItemConst),
+
+@@ -751,7 +632,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// An associated constant within the definition of a trait.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct TraitItemConst {
+ pub attrs: Vec<Attribute>,
+ pub const_token: Token![const],
+@@ -766,7 +647,7 @@ ast_struct! {
+ ast_struct! {
+ /// A trait method within the definition of a trait.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct TraitItemMethod {
+ pub attrs: Vec<Attribute>,
+ pub sig: Signature,
+@@ -778,7 +659,7 @@ ast_struct! {
+ ast_struct! {
+ /// An associated type within the definition of a trait.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct TraitItemType {
+ pub attrs: Vec<Attribute>,
+ pub type_token: Token![type],
+@@ -794,7 +675,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro invocation within the definition of a trait.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct TraitItemMacro {
+ pub attrs: Vec<Attribute>,
+ pub mac: Macro,
+@@ -802,61 +683,10 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for TraitItem {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for TraitItem {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (TraitItem::Const(this), TraitItem::Const(other)) => this == other,
+- (TraitItem::Method(this), TraitItem::Method(other)) => this == other,
+- (TraitItem::Type(this), TraitItem::Type(other)) => this == other,
+- (TraitItem::Macro(this), TraitItem::Macro(other)) => this == other,
+- (TraitItem::Verbatim(this), TraitItem::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for TraitItem {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- TraitItem::Const(item) => {
+- state.write_u8(0);
+- item.hash(state);
+- }
+- TraitItem::Method(item) => {
+- state.write_u8(1);
+- item.hash(state);
+- }
+- TraitItem::Type(item) => {
+- state.write_u8(2);
+- item.hash(state);
+- }
+- TraitItem::Macro(item) => {
+- state.write_u8(3);
+- item.hash(state);
+- }
+- TraitItem::Verbatim(item) => {
+- state.write_u8(4);
+- TokenStreamHelper(item).hash(state);
+- }
+- TraitItem::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ ast_enum_of_structs! {
+ /// An item within an impl block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -866,7 +696,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum ImplItem #manual_extra_traits {
++ pub enum ImplItem {
+ /// An associated constant within an impl block.
+ Const(ImplItemConst),
+
+@@ -890,7 +720,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// An associated constant within an impl block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ImplItemConst {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -908,7 +738,7 @@ ast_struct! {
+ ast_struct! {
+ /// A method within an impl block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ImplItemMethod {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -921,7 +751,7 @@ ast_struct! {
+ ast_struct! {
+ /// An associated type within an impl block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ImplItemType {
+ pub attrs: Vec<Attribute>,
+ pub vis: Visibility,
+@@ -938,7 +768,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro invocation within an impl block.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct ImplItemMacro {
+ pub attrs: Vec<Attribute>,
+ pub mac: Macro,
+@@ -946,62 +776,11 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for ImplItem {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for ImplItem {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (ImplItem::Const(this), ImplItem::Const(other)) => this == other,
+- (ImplItem::Method(this), ImplItem::Method(other)) => this == other,
+- (ImplItem::Type(this), ImplItem::Type(other)) => this == other,
+- (ImplItem::Macro(this), ImplItem::Macro(other)) => this == other,
+- (ImplItem::Verbatim(this), ImplItem::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for ImplItem {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- ImplItem::Const(item) => {
+- state.write_u8(0);
+- item.hash(state);
+- }
+- ImplItem::Method(item) => {
+- state.write_u8(1);
+- item.hash(state);
+- }
+- ImplItem::Type(item) => {
+- state.write_u8(2);
+- item.hash(state);
+- }
+- ImplItem::Macro(item) => {
+- state.write_u8(3);
+- item.hash(state);
+- }
+- ImplItem::Verbatim(item) => {
+- state.write_u8(4);
+- TokenStreamHelper(item).hash(state);
+- }
+- ImplItem::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ ast_struct! {
+ /// A function signature in a trait or implementation: `unsafe fn
+ /// initialize(&self)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Signature {
+ pub constness: Option<Token![const]>,
+ pub asyncness: Option<Token![async]>,
+@@ -1017,13 +796,34 @@ ast_struct! {
+ }
+ }
+
++impl Signature {
++ /// A method's `self` receiver, such as `&self` or `self: Box<Self>`.
++ pub fn receiver(&self) -> Option<&FnArg> {
++ let arg = self.inputs.first()?;
++ match arg {
++ FnArg::Receiver(_) => Some(arg),
++ FnArg::Typed(PatType { pat, .. }) => {
++ if let Pat::Ident(PatIdent { ident, .. }) = &**pat {
++ if ident == "self" {
++ return Some(arg);
++ }
++ }
++ None
++ }
++ }
++ }
++}
++
+ ast_enum_of_structs! {
+ /// An argument in a function signature: the `n: usize` in `fn f(n: usize)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub enum FnArg {
+ /// The `self` argument of an associated method, whether taken by value
+ /// or by reference.
++ ///
++ /// Note that `self` receivers with a specified type, such as `self:
++ /// Box<Self>`, are parsed as a `FnArg::Typed`.
+ Receiver(Receiver),
+
+ /// A function argument accepted by pattern and type.
+@@ -1035,7 +835,10 @@ ast_struct! {
+ /// The `self` argument of an associated method, whether taken by value
+ /// or by reference.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// Note that `self` receivers with a specified type, such as `self:
++ /// Box<Self>`, are parsed as a `FnArg::Typed`.
++ ///
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Receiver {
+ pub attrs: Vec<Attribute>,
+ pub reference: Option<(Token![&], Option<Lifetime>)>,
+@@ -1056,7 +859,8 @@ pub mod parsing {
+
+ use crate::ext::IdentExt;
+ use crate::parse::discouraged::Speculative;
+- use crate::parse::{Parse, ParseStream, Result};
++ use crate::parse::{Parse, ParseBuffer, ParseStream, Result};
++ use crate::token::Brace;
+ use proc_macro2::{Delimiter, Group, Punct, Spacing, TokenTree};
+ use std::iter::{self, FromIterator};
+
+@@ -1064,18 +868,26 @@ pub mod parsing {
+
+ impl Parse for Item {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let begin = input.fork();
+ let mut attrs = input.call(Attribute::parse_outer)?;
+ let ahead = input.fork();
+ let vis: Visibility = ahead.parse()?;
+
+ let lookahead = ahead.lookahead1();
+- let mut item = if lookahead.peek(Token![extern]) {
++ let mut item = if lookahead.peek(Token![fn]) || peek_signature(&ahead) {
++ let vis: Visibility = input.parse()?;
++ let sig = parse_signature(input)?;
++ if input.peek(Token![;]) {
++ input.parse::<Token![;]>()?;
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ } else {
++ parse_rest_of_fn(input, Vec::new(), vis, sig).map(Item::Fn)
++ }
++ } else if lookahead.peek(Token![extern]) {
+ ahead.parse::<Token![extern]>()?;
+ let lookahead = ahead.lookahead1();
+ if lookahead.peek(Token![crate]) {
+ input.parse().map(Item::ExternCrate)
+- } else if lookahead.peek(Token![fn]) {
+- input.parse().map(Item::Fn)
+ } else if lookahead.peek(token::Brace) {
+ input.parse().map(Item::ForeignMod)
+ } else if lookahead.peek(LitStr) {
+@@ -1083,8 +895,6 @@ pub mod parsing {
+ let lookahead = ahead.lookahead1();
+ if lookahead.peek(token::Brace) {
+ input.parse().map(Item::ForeignMod)
+- } else if lookahead.peek(Token![fn]) {
+- input.parse().map(Item::Fn)
+ } else {
+ Err(lookahead.error())
+ }
+@@ -1094,18 +904,61 @@ pub mod parsing {
+ } else if lookahead.peek(Token![use]) {
+ input.parse().map(Item::Use)
+ } else if lookahead.peek(Token![static]) {
+- input.parse().map(Item::Static)
++ let vis = input.parse()?;
++ let static_token = input.parse()?;
++ let mutability = input.parse()?;
++ let ident = input.parse()?;
++ let colon_token = input.parse()?;
++ let ty = input.parse()?;
++ if input.peek(Token![;]) {
++ input.parse::<Token![;]>()?;
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(Item::Static(ItemStatic {
++ attrs: Vec::new(),
++ vis,
++ static_token,
++ mutability,
++ ident,
++ colon_token,
++ ty,
++ eq_token: input.parse()?,
++ expr: input.parse()?,
++ semi_token: input.parse()?,
++ }))
++ }
+ } else if lookahead.peek(Token![const]) {
+ ahead.parse::<Token![const]>()?;
+ let lookahead = ahead.lookahead1();
+ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
+- input.parse().map(Item::Const)
+- } else if lookahead.peek(Token![unsafe])
+- || lookahead.peek(Token![async])
+- || lookahead.peek(Token![extern])
+- || lookahead.peek(Token![fn])
+- {
+- input.parse().map(Item::Fn)
++ let vis = input.parse()?;
++ let const_token = input.parse()?;
++ let ident = {
++ let lookahead = input.lookahead1();
++ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
++ input.call(Ident::parse_any)?
++ } else {
++ return Err(lookahead.error());
++ }
++ };
++ let colon_token = input.parse()?;
++ let ty = input.parse()?;
++ if input.peek(Token![;]) {
++ input.parse::<Token![;]>()?;
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(Item::Const(ItemConst {
++ attrs: Vec::new(),
++ vis,
++ const_token,
++ ident,
++ colon_token,
++ ty,
++ eq_token: input.parse()?,
++ expr: input.parse()?,
++ semi_token: input.parse()?,
++ }))
++ }
+ } else {
+ Err(lookahead.error())
+ }
+@@ -1117,21 +970,19 @@ pub mod parsing {
+ {
+ input.parse().map(Item::Trait)
+ } else if lookahead.peek(Token![impl]) {
+- input.parse().map(Item::Impl)
+- } else if lookahead.peek(Token![async])
+- || lookahead.peek(Token![extern])
+- || lookahead.peek(Token![fn])
+- {
+- input.parse().map(Item::Fn)
++ let allow_const_impl = true;
++ if let Some(item) = parse_impl(input, allow_const_impl)? {
++ Ok(Item::Impl(item))
++ } else {
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ }
+ } else {
+ Err(lookahead.error())
+ }
+- } else if lookahead.peek(Token![async]) || lookahead.peek(Token![fn]) {
+- input.parse().map(Item::Fn)
+ } else if lookahead.peek(Token![mod]) {
+ input.parse().map(Item::Mod)
+ } else if lookahead.peek(Token![type]) {
+- input.parse().map(Item::Type)
++ parse_item_type(begin, input)
+ } else if lookahead.peek(existential) {
+ input.call(item_existential).map(Item::Verbatim)
+ } else if lookahead.peek(Token![struct]) {
+@@ -1147,14 +998,18 @@ pub mod parsing {
+ } else if lookahead.peek(Token![impl])
+ || lookahead.peek(Token![default]) && !ahead.peek2(Token![!])
+ {
+- input.parse().map(Item::Impl)
++ let allow_const_impl = true;
++ if let Some(item) = parse_impl(input, allow_const_impl)? {
++ Ok(Item::Impl(item))
++ } else {
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ }
+ } else if lookahead.peek(Token![macro]) {
+ input.parse().map(Item::Macro2)
+ } else if vis.is_inherited()
+ && (lookahead.peek(Ident)
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![super])
+- || lookahead.peek(Token![extern])
+ || lookahead.peek(Token![crate])
+ || lookahead.peek(Token![::]))
+ {
+@@ -1163,32 +1018,64 @@ pub mod parsing {
+ Err(lookahead.error())
+ }?;
+
+- {
+- let item_attrs = match &mut item {
+- Item::ExternCrate(item) => &mut item.attrs,
+- Item::Use(item) => &mut item.attrs,
+- Item::Static(item) => &mut item.attrs,
+- Item::Const(item) => &mut item.attrs,
+- Item::Fn(item) => &mut item.attrs,
+- Item::Mod(item) => &mut item.attrs,
+- Item::ForeignMod(item) => &mut item.attrs,
+- Item::Type(item) => &mut item.attrs,
+- Item::Struct(item) => &mut item.attrs,
+- Item::Enum(item) => &mut item.attrs,
+- Item::Union(item) => &mut item.attrs,
+- Item::Trait(item) => &mut item.attrs,
+- Item::TraitAlias(item) => &mut item.attrs,
+- Item::Impl(item) => &mut item.attrs,
+- Item::Macro(item) => &mut item.attrs,
+- Item::Macro2(item) => &mut item.attrs,
+- Item::Verbatim(_) => return Ok(item),
+- Item::__Nonexhaustive => unreachable!(),
+- };
+- attrs.extend(item_attrs.drain(..));
+- *item_attrs = attrs;
++ attrs.extend(item.replace_attrs(Vec::new()));
++ item.replace_attrs(attrs);
++ Ok(item)
++ }
++ }
++
++ struct FlexibleItemType {
++ vis: Visibility,
++ defaultness: Option<Token![default]>,
++ type_token: Token![type],
++ ident: Ident,
++ generics: Generics,
++ colon_token: Option<Token![:]>,
++ bounds: Punctuated<TypeParamBound, Token![+]>,
++ ty: Option<(Token![=], Type)>,
++ semi_token: Token![;],
++ }
++
++ impl Parse for FlexibleItemType {
++ fn parse(input: ParseStream) -> Result<Self> {
++ let vis: Visibility = input.parse()?;
++ let defaultness: Option<Token![default]> = input.parse()?;
++ let type_token: Token![type] = input.parse()?;
++ let ident: Ident = input.parse()?;
++ let mut generics: Generics = input.parse()?;
++ let colon_token: Option<Token![:]> = input.parse()?;
++ let mut bounds = Punctuated::new();
++ if colon_token.is_some() {
++ loop {
++ bounds.push_value(input.parse::<TypeParamBound>()?);
++ if input.peek(Token![where]) || input.peek(Token![=]) || input.peek(Token![;]) {
++ break;
++ }
++ bounds.push_punct(input.parse::<Token![+]>()?);
++ if input.peek(Token![where]) || input.peek(Token![=]) || input.peek(Token![;]) {
++ break;
++ }
++ }
+ }
++ generics.where_clause = input.parse()?;
++ let ty = if let Some(eq_token) = input.parse()? {
++ Some((eq_token, input.parse::<Type>()?))
++ } else {
++ None
++ };
++ let semi_token: Token![;] = input.parse()?;
+
+- Ok(item)
++ Ok(FlexibleItemType {
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds,
++ ty,
++ semi_token,
++ })
+ }
+ }
+
+@@ -1310,7 +1197,6 @@ pub mod parsing {
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![super])
+ || lookahead.peek(Token![crate])
+- || lookahead.peek(Token![extern])
+ {
+ let ident = input.call(Ident::parse_any)?;
+ if input.peek(Token![::]) {
+@@ -1392,69 +1278,126 @@ pub mod parsing {
+ }
+ }
+
+- impl Parse for ItemFn {
+- fn parse(input: ParseStream) -> Result<Self> {
+- let outer_attrs = input.call(Attribute::parse_outer)?;
+- let vis: Visibility = input.parse()?;
+- let constness: Option<Token![const]> = input.parse()?;
+- let asyncness: Option<Token![async]> = input.parse()?;
+- let unsafety: Option<Token![unsafe]> = input.parse()?;
+- let abi: Option<Abi> = input.parse()?;
+- let fn_token: Token![fn] = input.parse()?;
+- let ident: Ident = input.parse()?;
+- let generics: Generics = input.parse()?;
++ fn pop_variadic(args: &mut Punctuated<FnArg, Token![,]>) -> Option<Variadic> {
++ let trailing_punct = args.trailing_punct();
+
+- let content;
+- let paren_token = parenthesized!(content in input);
+- let inputs = content.parse_terminated(FnArg::parse)?;
+- let variadic = inputs.last().as_ref().and_then(get_variadic);
+-
+- fn get_variadic(input: &&FnArg) -> Option<Variadic> {
+- if let FnArg::Typed(PatType { ty, .. }) = input {
+- if let Type::Verbatim(tokens) = &**ty {
+- if let Ok(dots) = parse2(tokens.clone()) {
+- return Some(Variadic {
+- attrs: Vec::new(),
+- dots,
+- });
+- }
+- }
+- }
+- None
++ let last = match args.last_mut()? {
++ FnArg::Typed(last) => last,
++ _ => return None,
++ };
++
++ let ty = match last.ty.as_ref() {
++ Type::Verbatim(ty) => ty,
++ _ => return None,
++ };
++
++ let mut variadic = Variadic {
++ attrs: Vec::new(),
++ dots: parse2(ty.clone()).ok()?,
++ };
++
++ if let Pat::Verbatim(pat) = last.pat.as_ref() {
++ if pat.to_string() == "..." && !trailing_punct {
++ variadic.attrs = mem::replace(&mut last.attrs, Vec::new());
++ args.pop();
+ }
++ }
+
+- let output: ReturnType = input.parse()?;
+- let where_clause: Option<WhereClause> = input.parse()?;
++ Some(variadic)
++ }
+
+- let content;
+- let brace_token = braced!(content in input);
+- let inner_attrs = content.call(Attribute::parse_inner)?;
+- let stmts = content.call(Block::parse_within)?;
++ fn variadic_to_tokens(dots: &Token![...]) -> TokenStream {
++ TokenStream::from_iter(vec![
++ TokenTree::Punct({
++ let mut dot = Punct::new('.', Spacing::Joint);
++ dot.set_span(dots.spans[0]);
++ dot
++ }),
++ TokenTree::Punct({
++ let mut dot = Punct::new('.', Spacing::Joint);
++ dot.set_span(dots.spans[1]);
++ dot
++ }),
++ TokenTree::Punct({
++ let mut dot = Punct::new('.', Spacing::Alone);
++ dot.set_span(dots.spans[2]);
++ dot
++ }),
++ ])
++ }
+
+- Ok(ItemFn {
+- attrs: private::attrs(outer_attrs, inner_attrs),
+- vis,
+- sig: Signature {
+- constness,
+- asyncness,
+- unsafety,
+- abi,
+- fn_token,
+- ident,
+- paren_token,
+- inputs,
+- output,
+- variadic,
+- generics: Generics {
+- where_clause,
+- ..generics
+- },
+- },
+- block: Box::new(Block { brace_token, stmts }),
+- })
++ fn peek_signature(input: ParseStream) -> bool {
++ let fork = input.fork();
++ fork.parse::<Option<Token![const]>>().is_ok()
++ && fork.parse::<Option<Token![async]>>().is_ok()
++ && fork.parse::<Option<Token![unsafe]>>().is_ok()
++ && fork.parse::<Option<Abi>>().is_ok()
++ && fork.peek(Token![fn])
++ }
++
++ fn parse_signature(input: ParseStream) -> Result<Signature> {
++ let constness: Option<Token![const]> = input.parse()?;
++ let asyncness: Option<Token![async]> = input.parse()?;
++ let unsafety: Option<Token![unsafe]> = input.parse()?;
++ let abi: Option<Abi> = input.parse()?;
++ let fn_token: Token![fn] = input.parse()?;
++ let ident: Ident = input.parse()?;
++ let generics: Generics = input.parse()?;
++
++ let content;
++ let paren_token = parenthesized!(content in input);
++ let mut inputs = parse_fn_args(&content)?;
++ let variadic = pop_variadic(&mut inputs);
++
++ let output: ReturnType = input.parse()?;
++ let where_clause: Option<WhereClause> = input.parse()?;
++
++ Ok(Signature {
++ constness,
++ asyncness,
++ unsafety,
++ abi,
++ fn_token,
++ ident,
++ paren_token,
++ inputs,
++ output,
++ variadic,
++ generics: Generics {
++ where_clause,
++ ..generics
++ },
++ })
++ }
++
++ impl Parse for ItemFn {
++ fn parse(input: ParseStream) -> Result<Self> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
++ let vis: Visibility = input.parse()?;
++ let sig = parse_signature(input)?;
++ parse_rest_of_fn(input, outer_attrs, vis, sig)
+ }
+ }
+
++ fn parse_rest_of_fn(
++ input: ParseStream,
++ outer_attrs: Vec<Attribute>,
++ vis: Visibility,
++ sig: Signature,
++ ) -> Result<ItemFn> {
++ let content;
++ let brace_token = braced!(content in input);
++ let inner_attrs = content.call(Attribute::parse_inner)?;
++ let stmts = content.call(Block::parse_within)?;
++
++ Ok(ItemFn {
++ attrs: private::attrs(outer_attrs, inner_attrs),
++ vis,
++ sig,
++ block: Box::new(Block { brace_token, stmts }),
++ })
++ }
++
+ impl Parse for FnArg {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let attrs = input.call(Attribute::parse_outer)?;
+@@ -1491,26 +1434,79 @@ pub mod parsing {
+ }
+ }
+
++ fn parse_fn_args(input: ParseStream) -> Result<Punctuated<FnArg, Token![,]>> {
++ let mut args = Punctuated::new();
++ let mut has_receiver = false;
++
++ while !input.is_empty() {
++ let attrs = input.call(Attribute::parse_outer)?;
++
++ let arg = if let Some(dots) = input.parse::<Option<Token![...]>>()? {
++ FnArg::Typed(PatType {
++ attrs,
++ pat: Box::new(Pat::Verbatim(variadic_to_tokens(&dots))),
++ colon_token: Token![:](dots.spans[0]),
++ ty: Box::new(Type::Verbatim(variadic_to_tokens(&dots))),
++ })
++ } else {
++ let mut arg: FnArg = input.parse()?;
++ match &mut arg {
++ FnArg::Receiver(receiver) if has_receiver => {
++ return Err(Error::new(
++ receiver.self_token.span,
++ "unexpected second method receiver",
++ ));
++ }
++ FnArg::Receiver(receiver) if !args.is_empty() => {
++ return Err(Error::new(
++ receiver.self_token.span,
++ "unexpected method receiver",
++ ));
++ }
++ FnArg::Receiver(receiver) => {
++ has_receiver = true;
++ receiver.attrs = attrs;
++ }
++ FnArg::Typed(arg) => arg.attrs = attrs,
++ }
++ arg
++ };
++ args.push_value(arg);
++
++ if input.is_empty() {
++ break;
++ }
++
++ let comma: Token![,] = input.parse()?;
++ args.push_punct(comma);
++ }
++
++ Ok(args)
++ }
++
+ fn fn_arg_typed(input: ParseStream) -> Result<PatType> {
++ // Hack to parse pre-2018 syntax in
++ // test/ui/rfc-2565-param-attrs/param-attrs-pretty.rs
++ // because the rest of the test case is valuable.
++ if input.peek(Ident) && input.peek2(Token![<]) {
++ let span = input.fork().parse::<Ident>()?.span();
++ return Ok(PatType {
++ attrs: Vec::new(),
++ pat: Box::new(Pat::Wild(PatWild {
++ attrs: Vec::new(),
++ underscore_token: Token![_](span),
++ })),
++ colon_token: Token![:](span),
++ ty: input.parse()?,
++ });
++ }
++
+ Ok(PatType {
+ attrs: Vec::new(),
+- pat: input.parse()?,
++ pat: Box::new(pat::parsing::multi_pat(input)?),
+ colon_token: input.parse()?,
+ ty: Box::new(match input.parse::<Option<Token![...]>>()? {
+- Some(dot3) => {
+- let args = vec![
+- TokenTree::Punct(Punct::new('.', Spacing::Joint)),
+- TokenTree::Punct(Punct::new('.', Spacing::Joint)),
+- TokenTree::Punct(Punct::new('.', Spacing::Alone)),
+- ];
+- let tokens = TokenStream::from_iter(args.into_iter().zip(&dot3.spans).map(
+- |(mut arg, span)| {
+- arg.set_span(*span);
+- arg
+- },
+- ));
+- Type::Verbatim(tokens)
+- }
++ Some(dot3) => Type::Verbatim(variadic_to_tokens(&dot3)),
+ None => input.parse()?,
+ }),
+ })
+@@ -1581,22 +1577,60 @@ pub mod parsing {
+
+ impl Parse for ForeignItem {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let begin = input.fork();
+ let mut attrs = input.call(Attribute::parse_outer)?;
+ let ahead = input.fork();
+ let vis: Visibility = ahead.parse()?;
+
+ let lookahead = ahead.lookahead1();
+- let mut item = if lookahead.peek(Token![fn]) {
+- input.parse().map(ForeignItem::Fn)
++ let mut item = if lookahead.peek(Token![fn]) || peek_signature(&ahead) {
++ let vis: Visibility = input.parse()?;
++ let sig = parse_signature(input)?;
++ if input.peek(token::Brace) {
++ let content;
++ braced!(content in input);
++ content.call(Attribute::parse_inner)?;
++ content.call(Block::parse_within)?;
++
++ Ok(ForeignItem::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(ForeignItem::Fn(ForeignItemFn {
++ attrs: Vec::new(),
++ vis,
++ sig,
++ semi_token: input.parse()?,
++ }))
++ }
+ } else if lookahead.peek(Token![static]) {
+- input.parse().map(ForeignItem::Static)
++ let vis = input.parse()?;
++ let static_token = input.parse()?;
++ let mutability = input.parse()?;
++ let ident = input.parse()?;
++ let colon_token = input.parse()?;
++ let ty = input.parse()?;
++ if input.peek(Token![=]) {
++ input.parse::<Token![=]>()?;
++ input.parse::<Expr>()?;
++ input.parse::<Token![;]>()?;
++ Ok(ForeignItem::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(ForeignItem::Static(ForeignItemStatic {
++ attrs: Vec::new(),
++ vis,
++ static_token,
++ mutability,
++ ident,
++ colon_token,
++ ty,
++ semi_token: input.parse()?,
++ }))
++ }
+ } else if lookahead.peek(Token![type]) {
+- input.parse().map(ForeignItem::Type)
++ parse_foreign_item_type(begin, input)
+ } else if vis.is_inherited()
+ && (lookahead.peek(Ident)
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![super])
+- || lookahead.peek(Token![extern])
+ || lookahead.peek(Token![crate])
+ || lookahead.peek(Token![::]))
+ {
+@@ -1605,17 +1639,16 @@ pub mod parsing {
+ Err(lookahead.error())
+ }?;
+
+- {
+- let item_attrs = match &mut item {
+- ForeignItem::Fn(item) => &mut item.attrs,
+- ForeignItem::Static(item) => &mut item.attrs,
+- ForeignItem::Type(item) => &mut item.attrs,
+- ForeignItem::Macro(item) => &mut item.attrs,
+- ForeignItem::Verbatim(_) | ForeignItem::__Nonexhaustive => unreachable!(),
+- };
+- attrs.extend(item_attrs.drain(..));
+- *item_attrs = attrs;
+- }
++ let item_attrs = match &mut item {
++ ForeignItem::Fn(item) => &mut item.attrs,
++ ForeignItem::Static(item) => &mut item.attrs,
++ ForeignItem::Type(item) => &mut item.attrs,
++ ForeignItem::Macro(item) => &mut item.attrs,
++ ForeignItem::Verbatim(_) => return Ok(item),
++ ForeignItem::__Nonexhaustive => unreachable!(),
++ };
++ attrs.extend(item_attrs.drain(..));
++ *item_attrs = attrs;
+
+ Ok(item)
+ }
+@@ -1625,55 +1658,12 @@ pub mod parsing {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let attrs = input.call(Attribute::parse_outer)?;
+ let vis: Visibility = input.parse()?;
+- let fn_token: Token![fn] = input.parse()?;
+- let ident: Ident = input.parse()?;
+- let generics: Generics = input.parse()?;
+-
+- let content;
+- let paren_token = parenthesized!(content in input);
+- let mut inputs = Punctuated::new();
+- let mut variadic = None;
+- while !content.is_empty() {
+- let attrs = content.call(Attribute::parse_outer)?;
+-
+- if let Some(dots) = content.parse()? {
+- variadic = Some(Variadic { attrs, dots });
+- break;
+- }
+-
+- let mut arg = content.call(fn_arg_typed)?;
+- arg.attrs = attrs;
+- inputs.push_value(FnArg::Typed(arg));
+- if content.is_empty() {
+- break;
+- }
+-
+- inputs.push_punct(content.parse()?);
+- }
+-
+- let output: ReturnType = input.parse()?;
+- let where_clause: Option<WhereClause> = input.parse()?;
++ let sig = parse_signature(input)?;
+ let semi_token: Token![;] = input.parse()?;
+-
+ Ok(ForeignItemFn {
+ attrs,
+ vis,
+- sig: Signature {
+- constness: None,
+- asyncness: None,
+- unsafety: None,
+- abi: None,
+- fn_token,
+- ident,
+- paren_token,
+- inputs,
+- output,
+- variadic,
+- generics: Generics {
+- where_clause,
+- ..generics
+- },
+- },
++ sig,
+ semi_token,
+ })
+ }
+@@ -1706,6 +1696,37 @@ pub mod parsing {
+ }
+ }
+
++ fn parse_foreign_item_type(begin: ParseBuffer, input: ParseStream) -> Result<ForeignItem> {
++ let FlexibleItemType {
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds: _,
++ ty,
++ semi_token,
++ } = input.parse()?;
++
++ if defaultness.is_some()
++ || generics.lt_token.is_some()
++ || generics.where_clause.is_some()
++ || colon_token.is_some()
++ || ty.is_some()
++ {
++ Ok(ForeignItem::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(ForeignItem::Type(ForeignItemType {
++ attrs: Vec::new(),
++ vis,
++ type_token,
++ ident,
++ semi_token,
++ }))
++ }
++ }
++
+ impl Parse for ForeignItemMacro {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let attrs = input.call(Attribute::parse_outer)?;
+@@ -1742,6 +1763,36 @@ pub mod parsing {
+ }
+ }
+
++ fn parse_item_type(begin: ParseBuffer, input: ParseStream) -> Result<Item> {
++ let FlexibleItemType {
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds: _,
++ ty,
++ semi_token,
++ } = input.parse()?;
++
++ if defaultness.is_some() || colon_token.is_some() || ty.is_none() {
++ Ok(Item::Verbatim(verbatim::between(begin, input)))
++ } else {
++ let (eq_token, ty) = ty.unwrap();
++ Ok(Item::Type(ItemType {
++ attrs: Vec::new(),
++ vis,
++ type_token,
++ ident,
++ generics,
++ eq_token,
++ ty: Box::new(ty),
++ semi_token,
++ }))
++ }
++ }
++
+ #[cfg(not(feature = "printing"))]
+ fn item_existential(input: ParseStream) -> Result<TokenStream> {
+ Err(input.error("existential type is not supported"))
+@@ -1887,7 +1938,7 @@ pub mod parsing {
+
+ impl Parse for ItemTrait {
+ fn parse(input: ParseStream) -> Result<Self> {
+- let attrs = input.call(Attribute::parse_outer)?;
++ let outer_attrs = input.call(Attribute::parse_outer)?;
+ let vis: Visibility = input.parse()?;
+ let unsafety: Option<Token![unsafe]> = input.parse()?;
+ let auto_token: Option<Token![auto]> = input.parse()?;
+@@ -1896,7 +1947,7 @@ pub mod parsing {
+ let generics: Generics = input.parse()?;
+ parse_rest_of_trait(
+ input,
+- attrs,
++ outer_attrs,
+ vis,
+ unsafety,
+ auto_token,
+@@ -1909,7 +1960,7 @@ pub mod parsing {
+
+ fn parse_rest_of_trait(
+ input: ParseStream,
+- attrs: Vec<Attribute>,
++ outer_attrs: Vec<Attribute>,
+ vis: Visibility,
+ unsafety: Option<Token![unsafe]>,
+ auto_token: Option<Token![auto]>,
+@@ -1937,13 +1988,14 @@ pub mod parsing {
+
+ let content;
+ let brace_token = braced!(content in input);
++ let inner_attrs = content.call(Attribute::parse_inner)?;
+ let mut items = Vec::new();
+ while !content.is_empty() {
+ items.push(content.parse()?);
+ }
+
+ Ok(ItemTrait {
+- attrs,
++ attrs: private::attrs(outer_attrs, inner_attrs),
+ vis,
+ unsafety,
+ auto_token,
+@@ -2014,14 +2066,19 @@ pub mod parsing {
+
+ impl Parse for TraitItem {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let begin = input.fork();
+ let mut attrs = input.call(Attribute::parse_outer)?;
++ let vis: Visibility = input.parse()?;
++ let defaultness: Option<Token![default]> = input.parse()?;
+ let ahead = input.fork();
+
+ let lookahead = ahead.lookahead1();
+- let mut item = if lookahead.peek(Token![const]) {
++ let mut item = if lookahead.peek(Token![fn]) || peek_signature(&ahead) {
++ input.parse().map(TraitItem::Method)
++ } else if lookahead.peek(Token![const]) {
+ ahead.parse::<Token![const]>()?;
+ let lookahead = ahead.lookahead1();
+- if lookahead.peek(Ident) {
++ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
+ input.parse().map(TraitItem::Const)
+ } else if lookahead.peek(Token![async])
+ || lookahead.peek(Token![unsafe])
+@@ -2032,18 +2089,11 @@ pub mod parsing {
+ } else {
+ Err(lookahead.error())
+ }
+- } else if lookahead.peek(Token![async])
+- || lookahead.peek(Token![unsafe])
+- || lookahead.peek(Token![extern])
+- || lookahead.peek(Token![fn])
+- {
+- input.parse().map(TraitItem::Method)
+ } else if lookahead.peek(Token![type]) {
+- input.parse().map(TraitItem::Type)
++ parse_trait_item_type(begin.fork(), input)
+ } else if lookahead.peek(Ident)
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![super])
+- || lookahead.peek(Token![extern])
+ || lookahead.peek(Token![crate])
+ || lookahead.peek(Token![::])
+ {
+@@ -2052,18 +2102,20 @@ pub mod parsing {
+ Err(lookahead.error())
+ }?;
+
+- {
+- let item_attrs = match &mut item {
+- TraitItem::Const(item) => &mut item.attrs,
+- TraitItem::Method(item) => &mut item.attrs,
+- TraitItem::Type(item) => &mut item.attrs,
+- TraitItem::Macro(item) => &mut item.attrs,
+- TraitItem::Verbatim(_) | TraitItem::__Nonexhaustive => unreachable!(),
+- };
+- attrs.extend(item_attrs.drain(..));
+- *item_attrs = attrs;
++ match (vis, defaultness) {
++ (Visibility::Inherited, None) => {}
++ _ => return Ok(TraitItem::Verbatim(verbatim::between(begin, input))),
+ }
+
++ let item_attrs = match &mut item {
++ TraitItem::Const(item) => &mut item.attrs,
++ TraitItem::Method(item) => &mut item.attrs,
++ TraitItem::Type(item) => &mut item.attrs,
++ TraitItem::Macro(item) => &mut item.attrs,
++ TraitItem::Verbatim(_) | TraitItem::__Nonexhaustive => unreachable!(),
++ };
++ attrs.extend(item_attrs.drain(..));
++ *item_attrs = attrs;
+ Ok(item)
+ }
+ }
+@@ -2073,7 +2125,14 @@ pub mod parsing {
+ Ok(TraitItemConst {
+ attrs: input.call(Attribute::parse_outer)?,
+ const_token: input.parse()?,
+- ident: input.parse()?,
++ ident: {
++ let lookahead = input.lookahead1();
++ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
++ input.call(Ident::parse_any)?
++ } else {
++ return Err(lookahead.error());
++ }
++ },
+ colon_token: input.parse()?,
+ ty: input.parse()?,
+ default: {
+@@ -2093,20 +2152,7 @@ pub mod parsing {
+ impl Parse for TraitItemMethod {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let outer_attrs = input.call(Attribute::parse_outer)?;
+- let constness: Option<Token![const]> = input.parse()?;
+- let asyncness: Option<Token![async]> = input.parse()?;
+- let unsafety: Option<Token![unsafe]> = input.parse()?;
+- let abi: Option<Abi> = input.parse()?;
+- let fn_token: Token![fn] = input.parse()?;
+- let ident: Ident = input.parse()?;
+- let generics: Generics = input.parse()?;
+-
+- let content;
+- let paren_token = parenthesized!(content in input);
+- let inputs = content.parse_terminated(FnArg::parse)?;
+-
+- let output: ReturnType = input.parse()?;
+- let where_clause: Option<WhereClause> = input.parse()?;
++ let sig = parse_signature(input)?;
+
+ let lookahead = input.lookahead1();
+ let (brace_token, inner_attrs, stmts, semi_token) = if lookahead.peek(token::Brace) {
+@@ -2124,22 +2170,7 @@ pub mod parsing {
+
+ Ok(TraitItemMethod {
+ attrs: private::attrs(outer_attrs, inner_attrs),
+- sig: Signature {
+- constness,
+- asyncness,
+- unsafety,
+- abi,
+- fn_token,
+- ident,
+- paren_token,
+- inputs,
+- output,
+- variadic: None,
+- generics: Generics {
+- where_clause,
+- ..generics
+- },
+- },
++ sig,
+ default: brace_token.map(|brace_token| Block { brace_token, stmts }),
+ semi_token,
+ })
+@@ -2188,6 +2219,35 @@ pub mod parsing {
+ }
+ }
+
++ fn parse_trait_item_type(begin: ParseBuffer, input: ParseStream) -> Result<TraitItem> {
++ let FlexibleItemType {
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds,
++ ty,
++ semi_token,
++ } = input.parse()?;
++
++ if defaultness.is_some() || vis.is_some() {
++ Ok(TraitItem::Verbatim(verbatim::between(begin, input)))
++ } else {
++ Ok(TraitItem::Type(TraitItemType {
++ attrs: Vec::new(),
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds,
++ default: ty,
++ semi_token,
++ }))
++ }
++ }
++
+ impl Parse for TraitItemMacro {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let attrs = input.call(Attribute::parse_outer)?;
+@@ -2207,52 +2267,67 @@ pub mod parsing {
+
+ impl Parse for ItemImpl {
+ fn parse(input: ParseStream) -> Result<Self> {
+- let outer_attrs = input.call(Attribute::parse_outer)?;
+- let defaultness: Option<Token![default]> = input.parse()?;
+- let unsafety: Option<Token![unsafe]> = input.parse()?;
+- let impl_token: Token![impl] = input.parse()?;
+-
+- let has_generics = input.peek(Token![<])
+- && (input.peek2(Token![>])
+- || input.peek2(Token![#])
+- || (input.peek2(Ident) || input.peek2(Lifetime))
+- && (input.peek3(Token![:])
+- || input.peek3(Token![,])
+- || input.peek3(Token![>])));
+- let generics: Generics = if has_generics {
+- input.parse()?
+- } else {
+- Generics::default()
+- };
+-
+- let trait_ = {
+- // TODO: optimize using advance_to
+- let ahead = input.fork();
+- if ahead.parse::<Option<Token![!]>>().is_ok()
+- && ahead.parse::<Path>().is_ok()
+- && ahead.parse::<Token![for]>().is_ok()
+- {
+- let polarity: Option<Token![!]> = input.parse()?;
+- let path: Path = input.parse()?;
+- let for_token: Token![for] = input.parse()?;
+- Some((polarity, path, for_token))
+- } else {
+- None
+- }
+- };
+- let self_ty: Type = input.parse()?;
+- let where_clause: Option<WhereClause> = input.parse()?;
++ let allow_const_impl = false;
++ parse_impl(input, allow_const_impl).map(Option::unwrap)
++ }
++ }
++
++ fn parse_impl(input: ParseStream, allow_const_impl: bool) -> Result<Option<ItemImpl>> {
++ let outer_attrs = input.call(Attribute::parse_outer)?;
++ let defaultness: Option<Token![default]> = input.parse()?;
++ let unsafety: Option<Token![unsafe]> = input.parse()?;
++ let impl_token: Token![impl] = input.parse()?;
++
++ let has_generics = input.peek(Token![<])
++ && (input.peek2(Token![>])
++ || input.peek2(Token![#])
++ || (input.peek2(Ident) || input.peek2(Lifetime))
++ && (input.peek3(Token![:])
++ || input.peek3(Token![,])
++ || input.peek3(Token![>]))
++ || input.peek2(Token![const]));
++ let generics: Generics = if has_generics {
++ input.parse()?
++ } else {
++ Generics::default()
++ };
+
+- let content;
+- let brace_token = braced!(content in input);
+- let inner_attrs = content.call(Attribute::parse_inner)?;
++ let is_const_impl = allow_const_impl
++ && (input.peek(Token![const]) || input.peek(Token![?]) && input.peek2(Token![const]));
++ if is_const_impl {
++ input.parse::<Option<Token![?]>>()?;
++ input.parse::<Token![const]>()?;
++ }
+
+- let mut items = Vec::new();
+- while !content.is_empty() {
+- items.push(content.parse()?);
++ let trait_ = (|| -> Option<_> {
++ let ahead = input.fork();
++ let polarity: Option<Token![!]> = ahead.parse().ok()?;
++ let mut path: Path = ahead.parse().ok()?;
++ if path.segments.last().unwrap().arguments.is_empty() && ahead.peek(token::Paren) {
++ let parenthesized = PathArguments::Parenthesized(ahead.parse().ok()?);
++ path.segments.last_mut().unwrap().arguments = parenthesized;
+ }
++ let for_token: Token![for] = ahead.parse().ok()?;
++ input.advance_to(&ahead);
++ Some((polarity, path, for_token))
++ })();
++
++ let self_ty: Type = input.parse()?;
++ let where_clause: Option<WhereClause> = input.parse()?;
++
++ let content;
++ let brace_token = braced!(content in input);
++ let inner_attrs = content.call(Attribute::parse_inner)?;
++
++ let mut items = Vec::new();
++ while !content.is_empty() {
++ items.push(content.parse()?);
++ }
+
+- Ok(ItemImpl {
++ if is_const_impl {
++ Ok(None)
++ } else {
++ Ok(Some(ItemImpl {
+ attrs: private::attrs(outer_attrs, inner_attrs),
+ defaultness,
+ unsafety,
+@@ -2265,12 +2340,13 @@ pub mod parsing {
+ self_ty: Box::new(self_ty),
+ brace_token,
+ items,
+- })
++ }))
+ }
+ }
+
+ impl Parse for ImplItem {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let begin = input.fork();
+ let mut attrs = input.call(Attribute::parse_outer)?;
+ let ahead = input.fork();
+ let vis: Visibility = ahead.parse()?;
+@@ -2284,28 +2360,38 @@ pub mod parsing {
+ None
+ };
+
+- let mut item = if lookahead.peek(Token![const]) {
+- ahead.parse::<Token![const]>()?;
++ let mut item = if lookahead.peek(Token![fn]) || peek_signature(&ahead) {
++ input.parse().map(ImplItem::Method)
++ } else if lookahead.peek(Token![const]) {
++ let const_token: Token![const] = ahead.parse()?;
+ let lookahead = ahead.lookahead1();
+- if lookahead.peek(Ident) {
+- input.parse().map(ImplItem::Const)
+- } else if lookahead.peek(Token![unsafe])
+- || lookahead.peek(Token![async])
+- || lookahead.peek(Token![extern])
+- || lookahead.peek(Token![fn])
+- {
+- input.parse().map(ImplItem::Method)
++ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
++ input.advance_to(&ahead);
++ let ident: Ident = input.call(Ident::parse_any)?;
++ let colon_token: Token![:] = input.parse()?;
++ let ty: Type = input.parse()?;
++ if let Some(eq_token) = input.parse()? {
++ return Ok(ImplItem::Const(ImplItemConst {
++ attrs,
++ vis,
++ defaultness,
++ const_token,
++ ident,
++ colon_token,
++ ty,
++ eq_token,
++ expr: input.parse()?,
++ semi_token: input.parse()?,
++ }));
++ } else {
++ input.parse::<Token![;]>()?;
++ return Ok(ImplItem::Verbatim(verbatim::between(begin, input)));
++ }
+ } else {
+ Err(lookahead.error())
+ }
+- } else if lookahead.peek(Token![unsafe])
+- || lookahead.peek(Token![async])
+- || lookahead.peek(Token![extern])
+- || lookahead.peek(Token![fn])
+- {
+- input.parse().map(ImplItem::Method)
+ } else if lookahead.peek(Token![type]) {
+- input.parse().map(ImplItem::Type)
++ parse_impl_item_type(begin, input)
+ } else if vis.is_inherited() && defaultness.is_none() && lookahead.peek(existential) {
+ input.call(item_existential).map(ImplItem::Verbatim)
+ } else if vis.is_inherited()
+@@ -2313,7 +2399,6 @@ pub mod parsing {
+ && (lookahead.peek(Ident)
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![super])
+- || lookahead.peek(Token![extern])
+ || lookahead.peek(Token![crate])
+ || lookahead.peek(Token![::]))
+ {
+@@ -2346,7 +2431,14 @@ pub mod parsing {
+ vis: input.parse()?,
+ defaultness: input.parse()?,
+ const_token: input.parse()?,
+- ident: input.parse()?,
++ ident: {
++ let lookahead = input.lookahead1();
++ if lookahead.peek(Ident) || lookahead.peek(Token![_]) {
++ input.call(Ident::parse_any)?
++ } else {
++ return Err(lookahead.error());
++ }
++ },
+ colon_token: input.parse()?,
+ ty: input.parse()?,
+ eq_token: input.parse()?,
+@@ -2358,50 +2450,39 @@ pub mod parsing {
+
+ impl Parse for ImplItemMethod {
+ fn parse(input: ParseStream) -> Result<Self> {
+- let outer_attrs = input.call(Attribute::parse_outer)?;
++ let mut attrs = input.call(Attribute::parse_outer)?;
+ let vis: Visibility = input.parse()?;
+ let defaultness: Option<Token![default]> = input.parse()?;
+- let constness: Option<Token![const]> = input.parse()?;
+- let asyncness: Option<Token![async]> = input.parse()?;
+- let unsafety: Option<Token![unsafe]> = input.parse()?;
+- let abi: Option<Abi> = input.parse()?;
+- let fn_token: Token![fn] = input.parse()?;
+- let ident: Ident = input.parse()?;
+- let generics: Generics = input.parse()?;
+-
+- let content;
+- let paren_token = parenthesized!(content in input);
+- let inputs = content.parse_terminated(FnArg::parse)?;
+-
+- let output: ReturnType = input.parse()?;
+- let where_clause: Option<WhereClause> = input.parse()?;
+-
+- let content;
+- let brace_token = braced!(content in input);
+- let inner_attrs = content.call(Attribute::parse_inner)?;
+- let stmts = content.call(Block::parse_within)?;
++ let sig = parse_signature(input)?;
++
++ let block = if let Some(semi) = input.parse::<Option<Token![;]>>()? {
++ // Accept methods without a body in an impl block because
++ // rustc's *parser* does not reject them (the compilation error
++ // is emitted later than parsing) and it can be useful for macro
++ // DSLs.
++ let mut punct = Punct::new(';', Spacing::Alone);
++ punct.set_span(semi.span);
++ let tokens = TokenStream::from_iter(vec![TokenTree::Punct(punct)]);
++ Block {
++ brace_token: Brace::default(),
++ stmts: vec![Stmt::Item(Item::Verbatim(tokens))],
++ }
++ } else {
++ let content;
++ let brace_token = braced!(content in input);
++ attrs.extend(content.call(Attribute::parse_inner)?);
++ Block {
++ brace_token,
++ stmts: content.call(Block::parse_within)?,
++ }
++ };
+
+ Ok(ImplItemMethod {
+- attrs: private::attrs(outer_attrs, inner_attrs),
++ attrs,
+ vis,
+ defaultness,
+- sig: Signature {
+- constness,
+- asyncness,
+- unsafety,
+- abi,
+- fn_token,
+- ident,
+- paren_token,
+- inputs,
+- output,
+- variadic: None,
+- generics: Generics {
+- where_clause,
+- ..generics
+- },
+- },
+- block: Block { brace_token, stmts },
++ sig,
++ block,
+ })
+ }
+ }
+@@ -2426,6 +2507,37 @@ pub mod parsing {
+ }
+ }
+
++ fn parse_impl_item_type(begin: ParseBuffer, input: ParseStream) -> Result<ImplItem> {
++ let FlexibleItemType {
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ colon_token,
++ bounds: _,
++ ty,
++ semi_token,
++ } = input.parse()?;
++
++ if colon_token.is_some() || ty.is_none() {
++ Ok(ImplItem::Verbatim(verbatim::between(begin, input)))
++ } else {
++ let (eq_token, ty) = ty.unwrap();
++ Ok(ImplItem::Type(ImplItemType {
++ attrs: Vec::new(),
++ vis,
++ defaultness,
++ type_token,
++ ident,
++ generics,
++ eq_token,
++ ty,
++ semi_token,
++ }))
++ }
++ }
++
+ impl Parse for ImplItemMacro {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let attrs = input.call(Attribute::parse_outer)?;
+@@ -2471,6 +2583,7 @@ mod printing {
+
+ use crate::attr::FilterAttrs;
+ use crate::print::TokensOrDefault;
++ use crate::punctuated::Pair;
+
+ impl ToTokens for ItemExternCrate {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+@@ -2835,6 +2948,14 @@ mod printing {
+ self.vis.to_tokens(tokens);
+ self.defaultness.to_tokens(tokens);
+ self.sig.to_tokens(tokens);
++ if self.block.stmts.len() == 1 {
++ if let Stmt::Item(Item::Verbatim(verbatim)) = &self.block.stmts[0] {
++ if verbatim.to_string() == ";" {
++ verbatim.to_tokens(tokens);
++ return;
++ }
++ }
++ }
+ self.block.brace_token.surround(tokens, |tokens| {
+ tokens.append_all(self.attrs.inner());
+ tokens.append_all(&self.block.stmts);
+@@ -2905,6 +3026,33 @@ mod printing {
+ }
+ }
+
++ fn maybe_variadic_to_tokens(arg: &FnArg, tokens: &mut TokenStream) -> bool {
++ let arg = match arg {
++ FnArg::Typed(arg) => arg,
++ FnArg::Receiver(receiver) => {
++ receiver.to_tokens(tokens);
++ return false;
++ }
++ };
++
++ match arg.ty.as_ref() {
++ Type::Verbatim(ty) if ty.to_string() == "..." => {
++ match arg.pat.as_ref() {
++ Pat::Verbatim(pat) if pat.to_string() == "..." => {
++ tokens.append_all(arg.attrs.outer());
++ pat.to_tokens(tokens);
++ }
++ _ => arg.to_tokens(tokens),
++ }
++ true
++ }
++ _ => {
++ arg.to_tokens(tokens);
++ false
++ }
++ }
++ }
++
+ impl ToTokens for Signature {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+ self.constness.to_tokens(tokens);
+@@ -2915,11 +3063,24 @@ mod printing {
+ self.ident.to_tokens(tokens);
+ self.generics.to_tokens(tokens);
+ self.paren_token.surround(tokens, |tokens| {
+- self.inputs.to_tokens(tokens);
+- if self.variadic.is_some() && !self.inputs.empty_or_trailing() {
+- <Token![,]>::default().to_tokens(tokens);
++ let mut last_is_variadic = false;
++ for input in self.inputs.pairs() {
++ match input {
++ Pair::Punctuated(input, comma) => {
++ maybe_variadic_to_tokens(input, tokens);
++ comma.to_tokens(tokens);
++ }
++ Pair::End(input) => {
++ last_is_variadic = maybe_variadic_to_tokens(input, tokens);
++ }
++ }
++ }
++ if self.variadic.is_some() && !last_is_variadic {
++ if !self.inputs.empty_or_trailing() {
++ <Token![,]>::default().to_tokens(tokens);
++ }
++ self.variadic.to_tokens(tokens);
+ }
+- self.variadic.to_tokens(tokens);
+ });
+ self.output.to_tokens(tokens);
+ self.generics.where_clause.to_tokens(tokens);
+diff --git a/third_party/rust/syn/src/keyword.rs b/third_party/rust/syn/src/keyword.rs
+deleted file mode 100644
+index e69de29bb2..0000000000
+diff --git a/third_party/rust/syn/src/lib.rs b/third_party/rust/syn/src/lib.rs
+index c8ada7e638..3da506731e 100644
+--- mozilla-release/third_party/rust/syn/src/lib.rs
++++ mozilla-release/third_party/rust/syn/src/lib.rs
+@@ -1,3 +1,11 @@
++//! [![github]](https://github.com/dtolnay/syn)&ensp;[![crates-io]](https://crates.io/crates/syn)&ensp;[![docs-rs]](https://docs.rs/syn)
++//!
++//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
++//! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust
++//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K
++//!
++//! <br>
++//!
+ //! Syn is a parsing library for parsing a stream of Rust tokens into a syntax
+ //! tree of Rust source code.
+ //!
+@@ -62,8 +70,8 @@
+ //! ```
+ //!
+ //! ```
+-//! extern crate proc_macro;
+-//!
++//! # extern crate proc_macro;
++//! #
+ //! use proc_macro::TokenStream;
+ //! use quote::quote;
+ //! use syn::{parse_macro_input, DeriveInput};
+@@ -242,35 +250,48 @@
+ //! dynamic library libproc_macro from rustc toolchain.
+
+ // Syn types in rustdoc of other crates get linked to here.
+-#![doc(html_root_url = "https://docs.rs/syn/1.0.5")]
++#![doc(html_root_url = "https://docs.rs/syn/1.0.40")]
+ #![deny(clippy::all, clippy::pedantic)]
+ // Ignored clippy lints.
+ #![allow(
+- clippy::block_in_if_condition_stmt,
++ clippy::blocks_in_if_conditions,
+ clippy::cognitive_complexity,
+ clippy::doc_markdown,
+ clippy::eval_order_dependence,
+ clippy::inherent_to_string,
+ clippy::large_enum_variant,
++ clippy::manual_non_exhaustive,
++ clippy::match_like_matches_macro,
++ clippy::match_on_vec_items,
++ clippy::needless_doctest_main,
+ clippy::needless_pass_by_value,
+ clippy::never_loop,
+ clippy::suspicious_op_assign_impl,
+ clippy::too_many_arguments,
+- clippy::trivially_copy_pass_by_ref
++ clippy::trivially_copy_pass_by_ref,
++ clippy::unnecessary_unwrap
+ )]
+ // Ignored clippy_pedantic lints.
+ #![allow(
+ clippy::cast_possible_truncation,
++ clippy::default_trait_access,
+ clippy::empty_enum,
++ clippy::expl_impl_clone_on_copy,
+ clippy::if_not_else,
+ clippy::items_after_statements,
++ clippy::match_same_arms,
++ clippy::missing_errors_doc,
+ clippy::module_name_repetitions,
++ clippy::must_use_candidate,
++ clippy::option_if_let_else,
+ clippy::shadow_unrelated,
+ clippy::similar_names,
+ clippy::single_match_else,
++ clippy::too_many_lines,
+ clippy::unseparated_literal_suffix,
+ clippy::use_self,
+- clippy::used_underscore_binding
++ clippy::used_underscore_binding,
++ clippy::wildcard_imports
+ )]
+
+ #[cfg(all(
+@@ -284,7 +305,6 @@ extern crate unicode_xid;
+ #[cfg(feature = "printing")]
+ extern crate quote;
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+ #[macro_use]
+ mod macros;
+
+@@ -307,7 +327,6 @@ pub use crate::attr::{
+ AttrStyle, Attribute, AttributeArgs, Meta, MetaList, MetaNameValue, NestedMeta,
+ };
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+ mod bigint;
+
+ #[cfg(any(feature = "full", feature = "derive"))]
+@@ -364,9 +383,7 @@ pub use crate::file::File;
+ mod lifetime;
+ pub use crate::lifetime::Lifetime;
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+ mod lit;
+-#[cfg(any(feature = "full", feature = "derive"))]
+ pub use crate::lit::{
+ Lit, LitBool, LitByte, LitByteStr, LitChar, LitFloat, LitInt, LitStr, StrStyle,
+ };
+@@ -441,6 +458,9 @@ pub mod parse_macro_input;
+ #[cfg(all(feature = "parsing", feature = "printing"))]
+ pub mod spanned;
+
++#[cfg(all(feature = "parsing", feature = "full"))]
++mod whitespace;
++
+ mod gen {
+ /// Syntax tree traversal to walk a shared borrow of a syntax tree.
+ ///
+@@ -482,7 +502,7 @@ mod gen {
+ /// /* ... */
+ /// ```
+ ///
+- /// *This module is available if Syn is built with the `"visit"` feature.*
++ /// *This module is available only if Syn is built with the `"visit"` feature.*
+ ///
+ /// <br>
+ ///
+@@ -603,7 +623,7 @@ mod gen {
+ /// /* ... */
+ /// ```
+ ///
+- /// *This module is available if Syn is built with the `"visit-mut"`
++ /// *This module is available only if Syn is built with the `"visit-mut"`
+ /// feature.*
+ ///
+ /// <br>
+@@ -702,7 +722,7 @@ mod gen {
+ /// /* ... */
+ /// ```
+ ///
+- /// *This module is available if Syn is built with the `"fold"` feature.*
++ /// *This module is available only if Syn is built with the `"fold"` feature.*
+ ///
+ /// <br>
+ ///
+@@ -744,6 +764,22 @@ mod gen {
+ #[rustfmt::skip]
+ pub mod fold;
+
++ #[cfg(feature = "clone-impls")]
++ #[rustfmt::skip]
++ mod clone;
++
++ #[cfg(feature = "extra-traits")]
++ #[rustfmt::skip]
++ mod eq;
++
++ #[cfg(feature = "extra-traits")]
++ #[rustfmt::skip]
++ mod hash;
++
++ #[cfg(feature = "extra-traits")]
++ #[rustfmt::skip]
++ mod debug;
++
+ #[cfg(any(feature = "full", feature = "derive"))]
+ #[path = "../gen_helper.rs"]
+ mod helper;
+@@ -757,6 +793,8 @@ pub mod export;
+ mod custom_keyword;
+ mod custom_punctuation;
+ mod sealed;
++mod span;
++mod thread;
+
+ #[cfg(feature = "parsing")]
+ mod lookahead;
+@@ -764,13 +802,15 @@ mod lookahead;
+ #[cfg(feature = "parsing")]
+ pub mod parse;
+
+-mod span;
++#[cfg(feature = "full")]
++mod reserved;
++
++#[cfg(all(any(feature = "full", feature = "derive"), feature = "parsing"))]
++mod verbatim;
+
+ #[cfg(all(any(feature = "full", feature = "derive"), feature = "printing"))]
+ mod print;
+
+-mod thread;
+-
+ ////////////////////////////////////////////////////////////////////////////////
+
+ #[allow(dead_code, non_camel_case_types)]
+@@ -800,14 +840,14 @@ pub use crate::error::{Error, Result};
+ ///
+ /// [`syn::parse2`]: parse2
+ ///
+-/// *This function is available if Syn is built with both the `"parsing"` and
++/// *This function is available only if Syn is built with both the `"parsing"` and
+ /// `"proc-macro"` features.*
+ ///
+ /// # Examples
+ ///
+ /// ```
+-/// extern crate proc_macro;
+-///
++/// # extern crate proc_macro;
++/// #
+ /// use proc_macro::TokenStream;
+ /// use quote::quote;
+ /// use syn::DeriveInput;
+@@ -847,7 +887,7 @@ pub fn parse<T: parse::Parse>(tokens: proc_macro::TokenStream) -> Result<T> {
+ ///
+ /// [`syn::parse`]: parse()
+ ///
+-/// *This function is available if Syn is built with the `"parsing"` feature.*
++/// *This function is available only if Syn is built with the `"parsing"` feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse2<T: parse::Parse>(tokens: proc_macro2::TokenStream) -> Result<T> {
+ parse::Parser::parse2(T::parse, tokens)
+@@ -855,7 +895,7 @@ pub fn parse2<T: parse::Parse>(tokens: proc_macro2::TokenStream) -> Result<T> {
+
+ /// Parse a string of Rust code into the chosen syntax tree node.
+ ///
+-/// *This function is available if Syn is built with the `"parsing"` feature.*
++/// *This function is available only if Syn is built with the `"parsing"` feature.*
+ ///
+ /// # Hygiene
+ ///
+@@ -874,9 +914,7 @@ pub fn parse2<T: parse::Parse>(tokens: proc_macro2::TokenStream) -> Result<T> {
+ /// Ok(())
+ /// }
+ /// #
+-/// # fn main() {
+-/// # run().unwrap();
+-/// # }
++/// # run().unwrap();
+ /// ```
+ #[cfg(feature = "parsing")]
+ pub fn parse_str<T: parse::Parse>(s: &str) -> Result<T> {
+@@ -894,7 +932,7 @@ pub fn parse_str<T: parse::Parse>(s: &str) -> Result<T> {
+ ///
+ /// If present, either of these would be an error using `from_str`.
+ ///
+-/// *This function is available if Syn is built with the `"parsing"` and
++/// *This function is available only if Syn is built with the `"parsing"` and
+ /// `"full"` features.*
+ ///
+ /// # Examples
+@@ -918,9 +956,7 @@ pub fn parse_str<T: parse::Parse>(s: &str) -> Result<T> {
+ /// Ok(())
+ /// }
+ /// #
+-/// # fn main() {
+-/// # run().unwrap();
+-/// # }
++/// # run().unwrap();
+ /// ```
+ #[cfg(all(feature = "parsing", feature = "full"))]
+ pub fn parse_file(mut content: &str) -> Result<File> {
+@@ -931,13 +967,16 @@ pub fn parse_file(mut content: &str) -> Result<File> {
+ }
+
+ let mut shebang = None;
+- if content.starts_with("#!") && !content.starts_with("#![") {
+- if let Some(idx) = content.find('\n') {
+- shebang = Some(content[..idx].to_string());
+- content = &content[idx..];
+- } else {
+- shebang = Some(content.to_string());
+- content = "";
++ if content.starts_with("#!") {
++ let rest = whitespace::skip(&content[2..]);
++ if !rest.starts_with('[') {
++ if let Some(idx) = content.find('\n') {
++ shebang = Some(content[..idx].to_string());
++ content = &content[idx..];
++ } else {
++ shebang = Some(content.to_string());
++ content = "";
++ }
+ }
+ }
+
+diff --git a/third_party/rust/syn/src/lifetime.rs b/third_party/rust/syn/src/lifetime.rs
+index d51c48e827..959cc5f9c6 100644
+--- mozilla-release/third_party/rust/syn/src/lifetime.rs
++++ mozilla-release/third_party/rust/syn/src/lifetime.rs
+@@ -18,10 +18,8 @@ use crate::lookahead;
+ /// - All following characters must be Unicode code points with the XID_Continue
+ /// property.
+ ///
+-/// *This type is available if Syn is built with the `"derive"` or `"full"`
++/// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+-#[cfg_attr(feature = "extra-traits", derive(Debug))]
+-#[derive(Clone)]
+ pub struct Lifetime {
+ pub apostrophe: Span,
+ pub ident: Ident,
+@@ -72,6 +70,15 @@ impl Display for Lifetime {
+ }
+ }
+
++impl Clone for Lifetime {
++ fn clone(&self) -> Self {
++ Lifetime {
++ apostrophe: self.apostrophe,
++ ident: self.ident.clone(),
++ }
++ }
++}
++
+ impl PartialEq for Lifetime {
+ fn eq(&self, other: &Lifetime) -> bool {
+ self.ident.eq(&other.ident)
+diff --git a/third_party/rust/syn/src/lit.rs b/third_party/rust/syn/src/lit.rs
+index f2209a2980..ee77e75bec 100644
+--- mozilla-release/third_party/rust/syn/src/lit.rs
++++ mozilla-release/third_party/rust/syn/src/lit.rs
+@@ -22,9 +22,6 @@ use crate::{Error, Result};
+ ast_enum_of_structs! {
+ /// A Rust literal such as a string or integer or boolean.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
+- /// feature.*
+- ///
+ /// # Syntax tree enum
+ ///
+ /// This type is a [syntax tree enum].
+@@ -33,7 +30,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum Lit #manual_extra_traits {
++ pub enum Lit {
+ /// A UTF-8 string literal: `"foo"`.
+ Str(LitStr),
+
+@@ -64,61 +61,44 @@ ast_enum_of_structs! {
+
+ ast_struct! {
+ /// A UTF-8 string literal: `"foo"`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitStr #manual_extra_traits_debug {
+- repr: Box<LitStrRepr>,
++ pub struct LitStr {
++ repr: Box<LitRepr>,
+ }
+ }
+
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+-struct LitStrRepr {
+- token: Literal,
+- suffix: Box<str>,
+-}
+-
+ ast_struct! {
+ /// A byte string literal: `b"foo"`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitByteStr #manual_extra_traits_debug {
+- token: Literal,
++ pub struct LitByteStr {
++ repr: Box<LitRepr>,
+ }
+ }
+
+ ast_struct! {
+ /// A byte literal: `b'f'`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitByte #manual_extra_traits_debug {
+- token: Literal,
++ pub struct LitByte {
++ repr: Box<LitRepr>,
+ }
+ }
+
+ ast_struct! {
+ /// A character literal: `'a'`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitChar #manual_extra_traits_debug {
+- token: Literal,
++ pub struct LitChar {
++ repr: Box<LitRepr>,
+ }
+ }
+
++struct LitRepr {
++ token: Literal,
++ suffix: Box<str>,
++}
++
+ ast_struct! {
+ /// An integer literal: `1` or `1u16`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitInt #manual_extra_traits_debug {
++ pub struct LitInt {
+ repr: Box<LitIntRepr>,
+ }
+ }
+
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ struct LitIntRepr {
+ token: Literal,
+ digits: Box<str>,
+@@ -129,15 +109,11 @@ ast_struct! {
+ /// A floating point literal: `1f64` or `1.0e10f64`.
+ ///
+ /// Must be finite. May not be infinte or NaN.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitFloat #manual_extra_traits_debug {
++ pub struct LitFloat {
+ repr: Box<LitFloatRepr>,
+ }
+ }
+
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ struct LitFloatRepr {
+ token: Literal,
+ digits: Box<str>,
+@@ -146,92 +122,27 @@ struct LitFloatRepr {
+
+ ast_struct! {
+ /// A boolean literal: `true` or `false`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or
+- /// `"full"` feature.*
+- pub struct LitBool #manual_extra_traits_debug {
++ pub struct LitBool {
+ pub value: bool,
+ pub span: Span,
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Lit {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Lit {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (Lit::Str(this), Lit::Str(other)) => this == other,
+- (Lit::ByteStr(this), Lit::ByteStr(other)) => this == other,
+- (Lit::Byte(this), Lit::Byte(other)) => this == other,
+- (Lit::Char(this), Lit::Char(other)) => this == other,
+- (Lit::Int(this), Lit::Int(other)) => this == other,
+- (Lit::Float(this), Lit::Float(other)) => this == other,
+- (Lit::Bool(this), Lit::Bool(other)) => this == other,
+- (Lit::Verbatim(this), Lit::Verbatim(other)) => this.to_string() == other.to_string(),
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Lit {
+- fn hash<H>(&self, hash: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- Lit::Str(lit) => {
+- hash.write_u8(0);
+- lit.hash(hash);
+- }
+- Lit::ByteStr(lit) => {
+- hash.write_u8(1);
+- lit.hash(hash);
+- }
+- Lit::Byte(lit) => {
+- hash.write_u8(2);
+- lit.hash(hash);
+- }
+- Lit::Char(lit) => {
+- hash.write_u8(3);
+- lit.hash(hash);
+- }
+- Lit::Int(lit) => {
+- hash.write_u8(4);
+- lit.hash(hash);
+- }
+- Lit::Float(lit) => {
+- hash.write_u8(5);
+- lit.hash(hash);
+- }
+- Lit::Bool(lit) => {
+- hash.write_u8(6);
+- lit.hash(hash);
+- }
+- Lit::Verbatim(lit) => {
+- hash.write_u8(7);
+- lit.to_string().hash(hash);
+- }
+- }
+- }
+-}
+-
+ impl LitStr {
+ pub fn new(value: &str, span: Span) -> Self {
+- let mut lit = Literal::string(value);
+- lit.set_span(span);
++ let mut token = Literal::string(value);
++ token.set_span(span);
+ LitStr {
+- repr: Box::new(LitStrRepr {
+- token: lit,
++ repr: Box::new(LitRepr {
++ token,
+ suffix: Box::<str>::default(),
+ }),
+ }
+ }
+
+ pub fn value(&self) -> String {
+- let (value, _) = value::parse_lit_str(&self.repr.token.to_string());
++ let repr = self.repr.token.to_string();
++ let (value, _suffix) = value::parse_lit_str(&repr);
+ String::from(value)
+ }
+
+@@ -311,7 +222,7 @@ impl LitStr {
+ fn respan_token_tree(mut token: TokenTree, span: Span) -> TokenTree {
+ match &mut token {
+ TokenTree::Group(g) => {
+- let stream = respan_token_stream(g.stream().clone(), span);
++ let stream = respan_token_stream(g.stream(), span);
+ *g = Group::new(g.delimiter(), stream);
+ g.set_span(span);
+ }
+@@ -345,19 +256,30 @@ impl LitByteStr {
+ pub fn new(value: &[u8], span: Span) -> Self {
+ let mut token = Literal::byte_string(value);
+ token.set_span(span);
+- LitByteStr { token }
++ LitByteStr {
++ repr: Box::new(LitRepr {
++ token,
++ suffix: Box::<str>::default(),
++ }),
++ }
+ }
+
+ pub fn value(&self) -> Vec<u8> {
+- value::parse_lit_byte_str(&self.token.to_string())
++ let repr = self.repr.token.to_string();
++ let (value, _suffix) = value::parse_lit_byte_str(&repr);
++ value
+ }
+
+ pub fn span(&self) -> Span {
+- self.token.span()
++ self.repr.token.span()
+ }
+
+ pub fn set_span(&mut self, span: Span) {
+- self.token.set_span(span)
++ self.repr.token.set_span(span)
++ }
++
++ pub fn suffix(&self) -> &str {
++ &self.repr.suffix
+ }
+ }
+
+@@ -365,19 +287,30 @@ impl LitByte {
+ pub fn new(value: u8, span: Span) -> Self {
+ let mut token = Literal::u8_suffixed(value);
+ token.set_span(span);
+- LitByte { token }
++ LitByte {
++ repr: Box::new(LitRepr {
++ token,
++ suffix: Box::<str>::default(),
++ }),
++ }
+ }
+
+ pub fn value(&self) -> u8 {
+- value::parse_lit_byte(&self.token.to_string())
++ let repr = self.repr.token.to_string();
++ let (value, _suffix) = value::parse_lit_byte(&repr);
++ value
+ }
+
+ pub fn span(&self) -> Span {
+- self.token.span()
++ self.repr.token.span()
+ }
+
+ pub fn set_span(&mut self, span: Span) {
+- self.token.set_span(span)
++ self.repr.token.set_span(span)
++ }
++
++ pub fn suffix(&self) -> &str {
++ &self.repr.suffix
+ }
+ }
+
+@@ -385,36 +318,52 @@ impl LitChar {
+ pub fn new(value: char, span: Span) -> Self {
+ let mut token = Literal::character(value);
+ token.set_span(span);
+- LitChar { token }
++ LitChar {
++ repr: Box::new(LitRepr {
++ token,
++ suffix: Box::<str>::default(),
++ }),
++ }
+ }
+
+ pub fn value(&self) -> char {
+- value::parse_lit_char(&self.token.to_string())
++ let repr = self.repr.token.to_string();
++ let (value, _suffix) = value::parse_lit_char(&repr);
++ value
+ }
+
+ pub fn span(&self) -> Span {
+- self.token.span()
++ self.repr.token.span()
+ }
+
+ pub fn set_span(&mut self, span: Span) {
+- self.token.set_span(span)
++ self.repr.token.set_span(span)
++ }
++
++ pub fn suffix(&self) -> &str {
++ &self.repr.suffix
+ }
+ }
+
+ impl LitInt {
+ pub fn new(repr: &str, span: Span) -> Self {
+- if let Some((digits, suffix)) = value::parse_lit_int(repr) {
+- let mut token = value::to_literal(repr);
+- token.set_span(span);
+- LitInt {
+- repr: Box::new(LitIntRepr {
+- token,
+- digits,
+- suffix,
+- }),
+- }
+- } else {
+- panic!("Not an integer literal: `{}`", repr);
++ let (digits, suffix) = match value::parse_lit_int(repr) {
++ Some(parse) => parse,
++ None => panic!("Not an integer literal: `{}`", repr),
++ };
++
++ let mut token = match value::to_literal(repr, &digits, &suffix) {
++ Some(token) => token,
++ None => panic!("Unsupported integer literal: `{}`", repr),
++ };
++
++ token.set_span(span);
++ LitInt {
++ repr: Box::new(LitIntRepr {
++ token,
++ digits,
++ suffix,
++ }),
+ }
+ }
+
+@@ -492,18 +441,23 @@ impl Display for LitInt {
+
+ impl LitFloat {
+ pub fn new(repr: &str, span: Span) -> Self {
+- if let Some((digits, suffix)) = value::parse_lit_float(repr) {
+- let mut token = value::to_literal(repr);
+- token.set_span(span);
+- LitFloat {
+- repr: Box::new(LitFloatRepr {
+- token,
+- digits,
+- suffix,
+- }),
+- }
+- } else {
+- panic!("Not a float literal: `{}`", repr);
++ let (digits, suffix) = match value::parse_lit_float(repr) {
++ Some(parse) => parse,
++ None => panic!("Not a float literal: `{}`", repr),
++ };
++
++ let mut token = match value::to_literal(repr, &digits, &suffix) {
++ Some(token) => token,
++ None => panic!("Unsupported float literal: `{}`", repr),
++ };
++
++ token.set_span(span);
++ LitFloat {
++ repr: Box::new(LitFloatRepr {
++ token,
++ digits,
++ suffix,
++ }),
+ }
+ }
+
+@@ -575,7 +529,7 @@ mod debug_impls {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ formatter
+ .debug_struct("LitByteStr")
+- .field("token", &format_args!("{}", self.token))
++ .field("token", &format_args!("{}", self.repr.token))
+ .finish()
+ }
+ }
+@@ -584,7 +538,7 @@ mod debug_impls {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ formatter
+ .debug_struct("LitByte")
+- .field("token", &format_args!("{}", self.token))
++ .field("token", &format_args!("{}", self.repr.token))
+ .finish()
+ }
+ }
+@@ -593,7 +547,7 @@ mod debug_impls {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ formatter
+ .debug_struct("LitChar")
+- .field("token", &format_args!("{}", self.token))
++ .field("token", &format_args!("{}", self.repr.token))
+ .finish()
+ }
+ }
+@@ -626,15 +580,53 @@ mod debug_impls {
+ }
+ }
+
++#[cfg(feature = "clone-impls")]
++impl Clone for LitRepr {
++ fn clone(&self) -> Self {
++ LitRepr {
++ token: self.token.clone(),
++ suffix: self.suffix.clone(),
++ }
++ }
++}
++
++#[cfg(feature = "clone-impls")]
++impl Clone for LitIntRepr {
++ fn clone(&self) -> Self {
++ LitIntRepr {
++ token: self.token.clone(),
++ digits: self.digits.clone(),
++ suffix: self.suffix.clone(),
++ }
++ }
++}
++
++#[cfg(feature = "clone-impls")]
++impl Clone for LitFloatRepr {
++ fn clone(&self) -> Self {
++ LitFloatRepr {
++ token: self.token.clone(),
++ digits: self.digits.clone(),
++ suffix: self.suffix.clone(),
++ }
++ }
++}
++
+ macro_rules! lit_extra_traits {
+- ($ty:ident, $($field:ident).+) => {
+- #[cfg(feature = "extra-traits")]
+- impl Eq for $ty {}
++ ($ty:ident) => {
++ #[cfg(feature = "clone-impls")]
++ impl Clone for $ty {
++ fn clone(&self) -> Self {
++ $ty {
++ repr: self.repr.clone(),
++ }
++ }
++ }
+
+ #[cfg(feature = "extra-traits")]
+ impl PartialEq for $ty {
+ fn eq(&self, other: &Self) -> bool {
+- self.$($field).+.to_string() == other.$($field).+.to_string()
++ self.repr.token.to_string() == other.repr.token.to_string()
+ }
+ }
+
+@@ -644,7 +636,7 @@ macro_rules! lit_extra_traits {
+ where
+ H: Hasher,
+ {
+- self.$($field).+.to_string().hash(state);
++ self.repr.token.to_string().hash(state);
+ }
+ }
+
+@@ -657,20 +649,23 @@ macro_rules! lit_extra_traits {
+ };
+ }
+
+-lit_extra_traits!(LitStr, repr.token);
+-lit_extra_traits!(LitByteStr, token);
+-lit_extra_traits!(LitByte, token);
+-lit_extra_traits!(LitChar, token);
+-lit_extra_traits!(LitInt, repr.token);
+-lit_extra_traits!(LitFloat, repr.token);
+-lit_extra_traits!(LitBool, value);
++lit_extra_traits!(LitStr);
++lit_extra_traits!(LitByteStr);
++lit_extra_traits!(LitByte);
++lit_extra_traits!(LitChar);
++lit_extra_traits!(LitInt);
++lit_extra_traits!(LitFloat);
++
++#[cfg(feature = "parsing")]
++#[doc(hidden)]
++#[allow(non_snake_case)]
++pub fn LitBool(marker: lookahead::TokenMarker) -> LitBool {
++ match marker {}
++}
+
+ ast_enum! {
+ /// The style of a string literal, either plain quoted or a raw string like
+ /// `r##"data"##`.
+- ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
+- /// feature.*
+ pub enum StrStyle #no_visit {
+ /// An ordinary string like `"data"`.
+ Cooked,
+@@ -691,7 +686,9 @@ pub fn Lit(marker: lookahead::TokenMarker) -> Lit {
+ #[cfg(feature = "parsing")]
+ pub mod parsing {
+ use super::*;
++ use crate::buffer::Cursor;
+ use crate::parse::{Parse, ParseStream, Result};
++ use proc_macro2::Punct;
+
+ impl Parse for Lit {
+ fn parse(input: ParseStream) -> Result<Self> {
+@@ -699,25 +696,73 @@ pub mod parsing {
+ if let Some((lit, rest)) = cursor.literal() {
+ return Ok((Lit::new(lit), rest));
+ }
+- while let Some((ident, rest)) = cursor.ident() {
+- let value = if ident == "true" {
+- true
+- } else if ident == "false" {
+- false
+- } else {
+- break;
+- };
+- let lit_bool = LitBool {
+- value,
+- span: ident.span(),
+- };
+- return Ok((Lit::Bool(lit_bool), rest));
++
++ if let Some((ident, rest)) = cursor.ident() {
++ let value = ident == "true";
++ if value || ident == "false" {
++ let lit_bool = LitBool {
++ value,
++ span: ident.span(),
++ };
++ return Ok((Lit::Bool(lit_bool), rest));
++ }
+ }
++
++ if let Some((punct, rest)) = cursor.punct() {
++ if punct.as_char() == '-' {
++ if let Some((lit, rest)) = parse_negative_lit(punct, rest) {
++ return Ok((lit, rest));
++ }
++ }
++ }
++
+ Err(cursor.error("expected literal"))
+ })
+ }
+ }
+
++ fn parse_negative_lit(neg: Punct, cursor: Cursor) -> Option<(Lit, Cursor)> {
++ let (lit, rest) = cursor.literal()?;
++
++ let mut span = neg.span();
++ span = span.join(lit.span()).unwrap_or(span);
++
++ let mut repr = lit.to_string();
++ repr.insert(0, '-');
++
++ if !(repr.ends_with("f32") || repr.ends_with("f64")) {
++ if let Some((digits, suffix)) = value::parse_lit_int(&repr) {
++ if let Some(mut token) = value::to_literal(&repr, &digits, &suffix) {
++ token.set_span(span);
++ return Some((
++ Lit::Int(LitInt {
++ repr: Box::new(LitIntRepr {
++ token,
++ digits,
++ suffix,
++ }),
++ }),
++ rest,
++ ));
++ }
++ }
++ }
++
++ let (digits, suffix) = value::parse_lit_float(&repr)?;
++ let mut token = value::to_literal(&repr, &digits, &suffix)?;
++ token.set_span(span);
++ Some((
++ Lit::Float(LitFloat {
++ repr: Box::new(LitFloatRepr {
++ token,
++ digits,
++ suffix,
++ }),
++ }),
++ rest,
++ ))
++ }
++
+ impl Parse for LitStr {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let head = input.fork();
+@@ -803,19 +848,19 @@ mod printing {
+
+ impl ToTokens for LitByteStr {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+- self.token.to_tokens(tokens);
++ self.repr.token.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for LitByte {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+- self.token.to_tokens(tokens);
++ self.repr.token.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for LitChar {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
+- self.token.to_tokens(tokens);
++ self.repr.token.to_tokens(tokens);
+ }
+ }
+
+@@ -855,20 +900,29 @@ mod value {
+ b'"' | b'r' => {
+ let (_, suffix) = parse_lit_str(&repr);
+ return Lit::Str(LitStr {
+- repr: Box::new(LitStrRepr { token, suffix }),
++ repr: Box::new(LitRepr { token, suffix }),
+ });
+ }
+ b'b' => match byte(&repr, 1) {
+ b'"' | b'r' => {
+- return Lit::ByteStr(LitByteStr { token });
++ let (_, suffix) = parse_lit_byte_str(&repr);
++ return Lit::ByteStr(LitByteStr {
++ repr: Box::new(LitRepr { token, suffix }),
++ });
+ }
+ b'\'' => {
+- return Lit::Byte(LitByte { token });
++ let (_, suffix) = parse_lit_byte(&repr);
++ return Lit::Byte(LitByte {
++ repr: Box::new(LitRepr { token, suffix }),
++ });
+ }
+ _ => {}
+ },
+ b'\'' => {
+- return Lit::Char(LitChar { token });
++ let (_, suffix) = parse_lit_char(&repr);
++ return Lit::Char(LitChar {
++ repr: Box::new(LitRepr { token, suffix }),
++ });
+ }
+ b'0'..=b'9' | b'-' => {
+ if !(repr.ends_with("f32") || repr.ends_with("f64")) {
+@@ -905,6 +959,44 @@ mod value {
+
+ panic!("Unrecognized literal: `{}`", repr);
+ }
++
++ pub fn suffix(&self) -> &str {
++ match self {
++ Lit::Str(lit) => lit.suffix(),
++ Lit::ByteStr(lit) => lit.suffix(),
++ Lit::Byte(lit) => lit.suffix(),
++ Lit::Char(lit) => lit.suffix(),
++ Lit::Int(lit) => lit.suffix(),
++ Lit::Float(lit) => lit.suffix(),
++ Lit::Bool(_) | Lit::Verbatim(_) => "",
++ }
++ }
++
++ pub fn span(&self) -> Span {
++ match self {
++ Lit::Str(lit) => lit.span(),
++ Lit::ByteStr(lit) => lit.span(),
++ Lit::Byte(lit) => lit.span(),
++ Lit::Char(lit) => lit.span(),
++ Lit::Int(lit) => lit.span(),
++ Lit::Float(lit) => lit.span(),
++ Lit::Bool(lit) => lit.span,
++ Lit::Verbatim(lit) => lit.span(),
++ }
++ }
++
++ pub fn set_span(&mut self, span: Span) {
++ match self {
++ Lit::Str(lit) => lit.set_span(span),
++ Lit::ByteStr(lit) => lit.set_span(span),
++ Lit::Byte(lit) => lit.set_span(span),
++ Lit::Char(lit) => lit.set_span(span),
++ Lit::Int(lit) => lit.set_span(span),
++ Lit::Float(lit) => lit.set_span(span),
++ Lit::Bool(lit) => lit.span = span,
++ Lit::Verbatim(lit) => lit.set_span(span),
++ }
++ }
+ }
+
+ /// Get the byte at offset idx, or a default of `b'\0'` if we're looking
+@@ -1004,19 +1096,18 @@ mod value {
+ pounds += 1;
+ }
+ assert_eq!(byte(s, pounds), b'"');
+- assert_eq!(byte(s, s.len() - pounds - 1), b'"');
+- for end in s[s.len() - pounds..].bytes() {
++ let close = s.rfind('"').unwrap();
++ for end in s[close + 1..close + 1 + pounds].bytes() {
+ assert_eq!(end, b'#');
+ }
+
+- let content = s[pounds + 1..s.len() - pounds - 1]
+- .to_owned()
+- .into_boxed_str();
+- let suffix = Box::<str>::default(); // todo
++ let content = s[pounds + 1..close].to_owned().into_boxed_str();
++ let suffix = s[close + 1 + pounds..].to_owned().into_boxed_str();
+ (content, suffix)
+ }
+
+- pub fn parse_lit_byte_str(s: &str) -> Vec<u8> {
++ // Returns (content, suffix).
++ pub fn parse_lit_byte_str(s: &str) -> (Vec<u8>, Box<str>) {
+ assert_eq!(byte(s, 0), b'b');
+ match byte(s, 1) {
+ b'"' => parse_lit_byte_str_cooked(s),
+@@ -1028,25 +1119,25 @@ mod value {
+ // Clippy false positive
+ // https://github.com/rust-lang-nursery/rust-clippy/issues/2329
+ #[allow(clippy::needless_continue)]
+- fn parse_lit_byte_str_cooked(mut s: &str) -> Vec<u8> {
++ fn parse_lit_byte_str_cooked(mut s: &str) -> (Vec<u8>, Box<str>) {
+ assert_eq!(byte(s, 0), b'b');
+ assert_eq!(byte(s, 1), b'"');
+ s = &s[2..];
+
+ // We're going to want to have slices which don't respect codepoint boundaries.
+- let mut s = s.as_bytes();
++ let mut v = s.as_bytes();
+
+ let mut out = Vec::new();
+ 'outer: loop {
+- let byte = match byte(s, 0) {
++ let byte = match byte(v, 0) {
+ b'"' => break,
+ b'\\' => {
+- let b = byte(s, 1);
+- s = &s[2..];
++ let b = byte(v, 1);
++ v = &v[2..];
+ match b {
+ b'x' => {
+- let (b, rest) = backslash_x(s);
+- s = rest;
++ let (b, rest) = backslash_x(v);
++ v = rest;
+ b
+ }
+ b'n' => b'\n',
+@@ -1057,10 +1148,10 @@ mod value {
+ b'\'' => b'\'',
+ b'"' => b'"',
+ b'\r' | b'\n' => loop {
+- let byte = byte(s, 0);
++ let byte = byte(v, 0);
+ let ch = char::from_u32(u32::from(byte)).unwrap();
+ if ch.is_whitespace() {
+- s = &s[1..];
++ v = &v[1..];
+ } else {
+ continue 'outer;
+ }
+@@ -1069,42 +1160,45 @@ mod value {
+ }
+ }
+ b'\r' => {
+- assert_eq!(byte(s, 1), b'\n', "Bare CR not allowed in string");
+- s = &s[2..];
++ assert_eq!(byte(v, 1), b'\n', "Bare CR not allowed in string");
++ v = &v[2..];
+ b'\n'
+ }
+ b => {
+- s = &s[1..];
++ v = &v[1..];
+ b
+ }
+ };
+ out.push(byte);
+ }
+
+- assert_eq!(s, b"\"");
+- out
++ assert_eq!(byte(v, 0), b'"');
++ let suffix = s[s.len() - v.len() + 1..].to_owned().into_boxed_str();
++ (out, suffix)
+ }
+
+- fn parse_lit_byte_str_raw(s: &str) -> Vec<u8> {
++ fn parse_lit_byte_str_raw(s: &str) -> (Vec<u8>, Box<str>) {
+ assert_eq!(byte(s, 0), b'b');
+- String::from(parse_lit_str_raw(&s[1..]).0).into_bytes()
++ let (value, suffix) = parse_lit_str_raw(&s[1..]);
++ (String::from(value).into_bytes(), suffix)
+ }
+
+- pub fn parse_lit_byte(s: &str) -> u8 {
++ // Returns (value, suffix).
++ pub fn parse_lit_byte(s: &str) -> (u8, Box<str>) {
+ assert_eq!(byte(s, 0), b'b');
+ assert_eq!(byte(s, 1), b'\'');
+
+ // We're going to want to have slices which don't respect codepoint boundaries.
+- let mut s = s[2..].as_bytes();
++ let mut v = s[2..].as_bytes();
+
+- let b = match byte(s, 0) {
++ let b = match byte(v, 0) {
+ b'\\' => {
+- let b = byte(s, 1);
+- s = &s[2..];
++ let b = byte(v, 1);
++ v = &v[2..];
+ match b {
+ b'x' => {
+- let (b, rest) = backslash_x(s);
+- s = rest;
++ let (b, rest) = backslash_x(v);
++ v = rest;
+ b
+ }
+ b'n' => b'\n',
+@@ -1118,16 +1212,18 @@ mod value {
+ }
+ }
+ b => {
+- s = &s[1..];
++ v = &v[1..];
+ b
+ }
+ };
+
+- assert_eq!(byte(s, 0), b'\'');
+- b
++ assert_eq!(byte(v, 0), b'\'');
++ let suffix = s[s.len() - v.len() + 1..].to_owned().into_boxed_str();
++ (b, suffix)
+ }
+
+- pub fn parse_lit_char(mut s: &str) -> char {
++ // Returns (value, suffix).
++ pub fn parse_lit_char(mut s: &str) -> (char, Box<str>) {
+ assert_eq!(byte(s, 0), b'\'');
+ s = &s[1..];
+
+@@ -1163,8 +1259,9 @@ mod value {
+ ch
+ }
+ };
+- assert_eq!(s, "\'", "Expected end of char literal");
+- ch
++ assert_eq!(byte(s, 0), b'\'');
++ let suffix = s[1..].to_owned().into_boxed_str();
++ (ch, suffix)
+ }
+
+ fn backslash_x<S>(s: &S) -> (u8, &S)
+@@ -1334,7 +1431,11 @@ mod value {
+ }
+ b'e' | b'E' => {
+ if has_e {
+- return None;
++ if has_exponent {
++ break;
++ } else {
++ return None;
++ }
+ }
+ has_e = true;
+ bytes[write] = b'e';
+@@ -1372,11 +1473,33 @@ mod value {
+ }
+ }
+
+- pub fn to_literal(s: &str) -> Literal {
+- let stream = s.parse::<TokenStream>().unwrap();
+- match stream.into_iter().next().unwrap() {
+- TokenTree::Literal(l) => l,
+- _ => unreachable!(),
++ pub fn to_literal(repr: &str, digits: &str, suffix: &str) -> Option<Literal> {
++ if repr.starts_with('-') {
++ if suffix == "f64" {
++ digits.parse().ok().map(Literal::f64_suffixed)
++ } else if suffix == "f32" {
++ digits.parse().ok().map(Literal::f32_suffixed)
++ } else if suffix == "i64" {
++ digits.parse().ok().map(Literal::i64_suffixed)
++ } else if suffix == "i32" {
++ digits.parse().ok().map(Literal::i32_suffixed)
++ } else if suffix == "i16" {
++ digits.parse().ok().map(Literal::i16_suffixed)
++ } else if suffix == "i8" {
++ digits.parse().ok().map(Literal::i8_suffixed)
++ } else if !suffix.is_empty() {
++ None
++ } else if digits.contains('.') {
++ digits.parse().ok().map(Literal::f64_unsuffixed)
++ } else {
++ digits.parse().ok().map(Literal::i64_unsuffixed)
++ }
++ } else {
++ let stream = repr.parse::<TokenStream>().unwrap();
++ match stream.into_iter().next().unwrap() {
++ TokenTree::Literal(l) => Some(l),
++ _ => unreachable!(),
++ }
+ }
+ }
+ }
+diff --git a/third_party/rust/syn/src/mac.rs b/third_party/rust/syn/src/mac.rs
+index 6c3dcae92a..de288a34e1 100644
+--- mozilla-release/third_party/rust/syn/src/mac.rs
++++ mozilla-release/third_party/rust/syn/src/mac.rs
+@@ -2,21 +2,17 @@ use super::*;
+ use crate::token::{Brace, Bracket, Paren};
+ use proc_macro2::TokenStream;
+ #[cfg(feature = "parsing")]
+-use proc_macro2::{Delimiter, Span, TokenTree};
++use proc_macro2::{Delimiter, Group, Span, TokenTree};
+
+ #[cfg(feature = "parsing")]
+ use crate::parse::{Parse, ParseStream, Parser, Result};
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
+-#[cfg(feature = "extra-traits")]
+-use std::hash::{Hash, Hasher};
+
+ ast_struct! {
+ /// A macro invocation: `println!("{}", mac)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- pub struct Macro #manual_extra_traits {
++ pub struct Macro {
+ pub path: Path,
+ pub bang_token: Token![!],
+ pub delimiter: MacroDelimiter,
+@@ -27,7 +23,7 @@ ast_struct! {
+ ast_enum! {
+ /// A grouping token that surrounds a macro body: `m!(...)` or `m!{...}` or `m![...]`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum MacroDelimiter {
+ Paren(Paren),
+@@ -36,39 +32,20 @@ ast_enum! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Macro {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Macro {
+- fn eq(&self, other: &Self) -> bool {
+- self.path == other.path
+- && self.bang_token == other.bang_token
+- && self.delimiter == other.delimiter
+- && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Macro {
+- fn hash<H>(&self, state: &mut H)
+- where
+- H: Hasher,
+- {
+- self.path.hash(state);
+- self.bang_token.hash(state);
+- self.delimiter.hash(state);
+- TokenStreamHelper(&self.tokens).hash(state);
+- }
+-}
+-
+ #[cfg(feature = "parsing")]
+-fn delimiter_span(delimiter: &MacroDelimiter) -> Span {
+- match delimiter {
++fn delimiter_span_close(macro_delimiter: &MacroDelimiter) -> Span {
++ let delimiter = match macro_delimiter {
++ MacroDelimiter::Paren(_) => Delimiter::Parenthesis,
++ MacroDelimiter::Brace(_) => Delimiter::Brace,
++ MacroDelimiter::Bracket(_) => Delimiter::Bracket,
++ };
++ let mut group = Group::new(delimiter, TokenStream::new());
++ group.set_span(match macro_delimiter {
+ MacroDelimiter::Paren(token) => token.span,
+ MacroDelimiter::Brace(token) => token.span,
+ MacroDelimiter::Bracket(token) => token.span,
+- }
++ });
++ group.span_close()
+ }
+
+ impl Macro {
+@@ -163,9 +140,7 @@ impl Macro {
+ /// given parser.
+ #[cfg(feature = "parsing")]
+ pub fn parse_body_with<F: Parser>(&self, parser: F) -> Result<F::Output> {
+- // TODO: see if we can get a group.span_close() span in here as the
+- // scope, rather than the span of the whole group.
+- let scope = delimiter_span(&self.delimiter);
++ let scope = delimiter_span_close(&self.delimiter);
+ crate::parse::parse_scoped(parser, scope, self.tokens.clone())
+ }
+ }
+diff --git a/third_party/rust/syn/src/macros.rs b/third_party/rust/syn/src/macros.rs
+index 9cac5c15df..8060224381 100644
+--- mozilla-release/third_party/rust/syn/src/macros.rs
++++ mozilla-release/third_party/rust/syn/src/macros.rs
+@@ -4,15 +4,11 @@ macro_rules! ast_struct {
+ struct $name:ident #full $($rest:tt)*
+ ) => {
+ #[cfg(feature = "full")]
+- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+ $($attrs_pub)* struct $name $($rest)*
+
+ #[cfg(not(feature = "full"))]
+- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+ $($attrs_pub)* struct $name {
+- _noconstruct: (),
++ _noconstruct: ::std::marker::PhantomData<::proc_macro2::Span>,
+ }
+
+ #[cfg(all(not(feature = "full"), feature = "printing"))]
+@@ -23,29 +19,10 @@ macro_rules! ast_struct {
+ }
+ };
+
+- (
+- [$($attrs_pub:tt)*]
+- struct $name:ident #manual_extra_traits $($rest:tt)*
+- ) => {
+- #[cfg_attr(feature = "extra-traits", derive(Debug))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+- $($attrs_pub)* struct $name $($rest)*
+- };
+-
+- (
+- [$($attrs_pub:tt)*]
+- struct $name:ident #manual_extra_traits_debug $($rest:tt)*
+- ) => {
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+- $($attrs_pub)* struct $name $($rest)*
+- };
+-
+ (
+ [$($attrs_pub:tt)*]
+ struct $name:ident $($rest:tt)*
+ ) => {
+- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+ $($attrs_pub)* struct $name $($rest)*
+ };
+
+@@ -63,21 +40,10 @@ macro_rules! ast_enum {
+ ast_enum!([$($attrs_pub)*] enum $name $($rest)*);
+ );
+
+- (
+- [$($attrs_pub:tt)*]
+- enum $name:ident #manual_extra_traits $($rest:tt)*
+- ) => (
+- #[cfg_attr(feature = "extra-traits", derive(Debug))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+- $($attrs_pub)* enum $name $($rest)*
+- );
+-
+ (
+ [$($attrs_pub:tt)*]
+ enum $name:ident $($rest:tt)*
+ ) => (
+- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
+- #[cfg_attr(feature = "clone-impls", derive(Clone))]
+ $($attrs_pub)* enum $name $($rest)*
+ );
+
+@@ -120,15 +86,9 @@ macro_rules! ast_enum_of_structs_impl {
+ check_keyword_matches!(pub $pub);
+ check_keyword_matches!(enum $enum);
+
+- $(
+- $(
+- impl From<$member> for $name {
+- fn from(e: $member) -> $name {
+- $name::$variant(e)
+- }
+- }
+- )*
+- )*
++ $($(
++ ast_enum_from_struct!($name::$variant, $member);
++ )*)*
+
+ #[cfg(feature = "printing")]
+ generate_to_tokens! {
+@@ -140,6 +100,19 @@ macro_rules! ast_enum_of_structs_impl {
+ };
+ }
+
++macro_rules! ast_enum_from_struct {
++ // No From<TokenStream> for verbatim variants.
++ ($name:ident::Verbatim, $member:ident) => {};
++
++ ($name:ident::$variant:ident, $member:ident) => {
++ impl From<$member> for $name {
++ fn from(e: $member) -> $name {
++ $name::$variant(e)
++ }
++ }
++ };
++}
++
+ #[cfg(feature = "printing")]
+ macro_rules! generate_to_tokens {
+ (do_not_generate_to_tokens $($foo:tt)*) => ();
+diff --git a/third_party/rust/syn/src/op.rs b/third_party/rust/syn/src/op.rs
+index 49fb853c79..d254673b40 100644
+--- mozilla-release/third_party/rust/syn/src/op.rs
++++ mozilla-release/third_party/rust/syn/src/op.rs
+@@ -1,9 +1,8 @@
+ ast_enum! {
+ /// A binary operator: `+`, `+=`, `&`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- #[cfg_attr(feature = "clone-impls", derive(Copy))]
+ pub enum BinOp {
+ /// The `+` operator (addition)
+ Add(Token![+]),
+@@ -67,9 +66,8 @@ ast_enum! {
+ ast_enum! {
+ /// A unary operator: `*`, `!`, `-`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+- #[cfg_attr(feature = "clone-impls", derive(Copy))]
+ pub enum UnOp {
+ /// The `*` operator for dereferencing
+ Deref(Token![*]),
+diff --git a/third_party/rust/syn/src/parse.rs b/third_party/rust/syn/src/parse.rs
+index 7c7b194308..abb4c4c14f 100644
+--- mozilla-release/third_party/rust/syn/src/parse.rs
++++ mozilla-release/third_party/rust/syn/src/parse.rs
+@@ -26,8 +26,8 @@
+ //! [`parse_macro_input!`]: ../macro.parse_macro_input.html
+ //!
+ //! ```
+-//! extern crate proc_macro;
+-//!
++//! # extern crate proc_macro;
++//! #
+ //! use proc_macro::TokenStream;
+ //! use syn::{braced, parse_macro_input, token, Field, Ident, Result, Token};
+ //! use syn::parse::{Parse, ParseStream};
+@@ -109,9 +109,7 @@
+ //! # Ok(())
+ //! # }
+ //! #
+-//! # fn main() {
+-//! # run_parser().unwrap();
+-//! # }
++//! # run_parser().unwrap();
+ //! ```
+ //!
+ //! The [`parse_quote!`] macro also uses this approach.
+@@ -155,8 +153,8 @@
+ //! [`Parser`]: trait.Parser.html
+ //!
+ //! ```
+-//! extern crate proc_macro;
+-//!
++//! # extern crate proc_macro;
++//! #
+ //! use proc_macro::TokenStream;
+ //! use syn::parse::Parser;
+ //! use syn::punctuated::Punctuated;
+@@ -186,7 +184,7 @@
+ //!
+ //! ---
+ //!
+-//! *This module is available if Syn is built with the `"parsing"` feature.*
++//! *This module is available only if Syn is built with the `"parsing"` feature.*
+
+ #[path = "discouraged.rs"]
+ pub mod discouraged;
+@@ -217,6 +215,11 @@ pub use crate::lookahead::{Lookahead1, Peek};
+
+ /// Parsing interface implemented by all types that can be parsed in a default
+ /// way from a token stream.
++///
++/// Refer to the [module documentation] for details about implementing and using
++/// the `Parse` trait.
++///
++/// [module documentation]: self
+ pub trait Parse: Sized {
+ fn parse(input: ParseStream) -> Result<Self>;
+ }
+@@ -263,13 +266,16 @@ pub struct ParseBuffer<'a> {
+ // the cell.
+ cell: Cell<Cursor<'static>>,
+ marker: PhantomData<Cursor<'a>>,
+- unexpected: Rc<Cell<Option<Span>>>,
++ unexpected: Cell<Option<Rc<Cell<Unexpected>>>>,
+ }
+
+ impl<'a> Drop for ParseBuffer<'a> {
+ fn drop(&mut self) {
+- if !self.is_empty() && self.unexpected.get().is_none() {
+- self.unexpected.set(Some(self.cursor().span()));
++ if let Some(unexpected_span) = span_of_unexpected_ignoring_nones(self.cursor()) {
++ let (inner, old_span) = inner_unexpected(self);
++ if old_span.is_none() {
++ inner.set(Unexpected::Some(unexpected_span));
++ }
+ }
+ }
+ }
+@@ -324,15 +330,12 @@ impl<'a> Debug for ParseBuffer<'a> {
+ /// # input.parse()
+ /// # }
+ /// #
+-/// # fn main() {
+-/// # use syn::parse::Parser;
+-/// # let remainder = remainder_after_skipping_past_next_at
+-/// # .parse_str("a @ b c")
+-/// # .unwrap();
+-/// # assert_eq!(remainder.to_string(), "b c");
+-/// # }
++/// # use syn::parse::Parser;
++/// # let remainder = remainder_after_skipping_past_next_at
++/// # .parse_str("a @ b c")
++/// # .unwrap();
++/// # assert_eq!(remainder.to_string(), "b c");
+ /// ```
+-#[derive(Copy, Clone)]
+ pub struct StepCursor<'c, 'a> {
+ scope: Span,
+ // This field is covariant in 'c.
+@@ -356,6 +359,14 @@ impl<'c, 'a> Deref for StepCursor<'c, 'a> {
+ }
+ }
+
++impl<'c, 'a> Copy for StepCursor<'c, 'a> {}
++
++impl<'c, 'a> Clone for StepCursor<'c, 'a> {
++ fn clone(&self) -> Self {
++ *self
++ }
++}
++
+ impl<'c, 'a> StepCursor<'c, 'a> {
+ /// Triggers an error at the current position of the parse stream.
+ ///
+@@ -375,36 +386,81 @@ pub(crate) fn advance_step_cursor<'c, 'a>(proof: StepCursor<'c, 'a>, to: Cursor<
+ unsafe { mem::transmute::<Cursor<'c>, Cursor<'a>>(to) }
+ }
+
+-fn skip(input: ParseStream) -> bool {
+- input
+- .step(|cursor| {
+- if let Some((_lifetime, rest)) = cursor.lifetime() {
+- Ok((true, rest))
+- } else if let Some((_token, rest)) = cursor.token_tree() {
+- Ok((true, rest))
+- } else {
+- Ok((false, *cursor))
+- }
+- })
+- .unwrap()
+-}
+-
+ pub(crate) fn new_parse_buffer(
+ scope: Span,
+ cursor: Cursor,
+- unexpected: Rc<Cell<Option<Span>>>,
++ unexpected: Rc<Cell<Unexpected>>,
+ ) -> ParseBuffer {
+ ParseBuffer {
+ scope,
+ // See comment on `cell` in the struct definition.
+ cell: Cell::new(unsafe { mem::transmute::<Cursor, Cursor<'static>>(cursor) }),
+ marker: PhantomData,
+- unexpected,
++ unexpected: Cell::new(Some(unexpected)),
++ }
++}
++
++pub(crate) enum Unexpected {
++ None,
++ Some(Span),
++ Chain(Rc<Cell<Unexpected>>),
++}
++
++impl Default for Unexpected {
++ fn default() -> Self {
++ Unexpected::None
+ }
+ }
+
+-pub(crate) fn get_unexpected(buffer: &ParseBuffer) -> Rc<Cell<Option<Span>>> {
+- buffer.unexpected.clone()
++impl Clone for Unexpected {
++ fn clone(&self) -> Self {
++ match self {
++ Unexpected::None => Unexpected::None,
++ Unexpected::Some(span) => Unexpected::Some(*span),
++ Unexpected::Chain(next) => Unexpected::Chain(next.clone()),
++ }
++ }
++}
++
++// We call this on Cell<Unexpected> and Cell<Option<T>> where temporarily
++// swapping in a None is cheap.
++fn cell_clone<T: Default + Clone>(cell: &Cell<T>) -> T {
++ let prev = cell.take();
++ let ret = prev.clone();
++ cell.set(prev);
++ ret
++}
++
++fn inner_unexpected(buffer: &ParseBuffer) -> (Rc<Cell<Unexpected>>, Option<Span>) {
++ let mut unexpected = get_unexpected(buffer);
++ loop {
++ match cell_clone(&unexpected) {
++ Unexpected::None => return (unexpected, None),
++ Unexpected::Some(span) => return (unexpected, Some(span)),
++ Unexpected::Chain(next) => unexpected = next,
++ }
++ }
++}
++
++pub(crate) fn get_unexpected(buffer: &ParseBuffer) -> Rc<Cell<Unexpected>> {
++ cell_clone(&buffer.unexpected).unwrap()
++}
++
++fn span_of_unexpected_ignoring_nones(mut cursor: Cursor) -> Option<Span> {
++ if cursor.eof() {
++ return None;
++ }
++ while let Some((inner, _span, rest)) = cursor.group(Delimiter::None) {
++ if let Some(unexpected) = span_of_unexpected_ignoring_nones(inner) {
++ return Some(unexpected);
++ }
++ cursor = rest;
++ }
++ if cursor.eof() {
++ None
++ } else {
++ Some(cursor.span())
++ }
+ }
+
+ impl<'a> ParseBuffer<'a> {
+@@ -566,14 +622,17 @@ impl<'a> ParseBuffer<'a> {
+ /// }
+ /// ```
+ pub fn peek2<T: Peek>(&self, token: T) -> bool {
+- let ahead = self.fork();
+- skip(&ahead) && ahead.peek(token)
++ let _ = token;
++ self.cursor().skip().map_or(false, T::Token::peek)
+ }
+
+ /// Looks at the third-next token in the parse stream.
+ pub fn peek3<T: Peek>(&self, token: T) -> bool {
+- let ahead = self.fork();
+- skip(&ahead) && skip(&ahead) && ahead.peek(token)
++ let _ = token;
++ self.cursor()
++ .skip()
++ .and_then(Cursor::skip)
++ .map_or(false, T::Token::peek)
+ }
+
+ /// Parses zero or more occurrences of `T` separated by punctuation of type
+@@ -615,12 +674,10 @@ impl<'a> ParseBuffer<'a> {
+ /// }
+ /// }
+ /// #
+- /// # fn main() {
+- /// # let input = quote! {
+- /// # struct S(A, B);
+- /// # };
+- /// # syn::parse2::<TupleStruct>(input).unwrap();
+- /// # }
++ /// # let input = quote! {
++ /// # struct S(A, B);
++ /// # };
++ /// # syn::parse2::<TupleStruct>(input).unwrap();
+ /// ```
+ pub fn parse_terminated<T, P: Parse>(
+ &self,
+@@ -847,8 +904,8 @@ impl<'a> ParseBuffer<'a> {
+ cell: self.cell.clone(),
+ marker: PhantomData,
+ // Not the parent's unexpected. Nothing cares whether the clone
+- // parses all the way.
+- unexpected: Rc::new(Cell::new(None)),
++ // parses all the way unless we `advance_to`.
++ unexpected: Cell::new(Some(Rc::new(Cell::new(Unexpected::None)))),
+ }
+ }
+
+@@ -923,13 +980,11 @@ impl<'a> ParseBuffer<'a> {
+ /// # input.parse()
+ /// # }
+ /// #
+- /// # fn main() {
+- /// # use syn::parse::Parser;
+- /// # let remainder = remainder_after_skipping_past_next_at
+- /// # .parse_str("a @ b c")
+- /// # .unwrap();
+- /// # assert_eq!(remainder.to_string(), "b c");
+- /// # }
++ /// # use syn::parse::Parser;
++ /// # let remainder = remainder_after_skipping_past_next_at
++ /// # .parse_str("a @ b c")
++ /// # .unwrap();
++ /// # assert_eq!(remainder.to_string(), "b c");
+ /// ```
+ pub fn step<F, R>(&self, function: F) -> Result<R>
+ where
+@@ -961,6 +1016,18 @@ impl<'a> ParseBuffer<'a> {
+ Ok(node)
+ }
+
++ /// Returns the `Span` of the next token in the parse stream, or
++ /// `Span::call_site()` if this parse stream has completely exhausted its
++ /// input `TokenStream`.
++ pub fn span(&self) -> Span {
++ let cursor = self.cursor();
++ if cursor.eof() {
++ self.scope
++ } else {
++ crate::buffer::open_span_of_group(cursor)
++ }
++ }
++
+ /// Provides low-level access to the token representation underlying this
+ /// parse stream.
+ ///
+@@ -971,7 +1038,7 @@ impl<'a> ParseBuffer<'a> {
+ }
+
+ fn check_unexpected(&self) -> Result<()> {
+- match self.unexpected.get() {
++ match inner_unexpected(self).1 {
+ Some(span) => Err(Error::new(span, "unexpected token")),
+ None => Ok(()),
+ }
+@@ -1048,7 +1115,7 @@ impl Parse for Literal {
+ ///
+ /// [module documentation]: self
+ ///
+-/// *This trait is available if Syn is built with the `"parsing"` feature.*
++/// *This trait is available only if Syn is built with the `"parsing"` feature.*
+ pub trait Parser: Sized {
+ type Output;
+
+@@ -1063,7 +1130,7 @@ pub trait Parser: Sized {
+ /// This function will check that the input is fully parsed. If there are
+ /// any unparsed tokens at the end of the stream, an error is returned.
+ ///
+- /// *This method is available if Syn is built with both the `"parsing"` and
++ /// *This method is available only if Syn is built with both the `"parsing"` and
+ /// `"proc-macro"` features.*
+ #[cfg(all(
+ not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))),
+@@ -1088,6 +1155,7 @@ pub trait Parser: Sized {
+
+ // Not public API.
+ #[doc(hidden)]
++ #[cfg(any(feature = "full", feature = "derive"))]
+ fn __parse_scoped(self, scope: Span, tokens: TokenStream) -> Result<Self::Output> {
+ let _ = scope;
+ self.parse2(tokens)
+@@ -1095,6 +1163,7 @@ pub trait Parser: Sized {
+
+ // Not public API.
+ #[doc(hidden)]
++ #[cfg(any(feature = "full", feature = "derive"))]
+ fn __parse_stream(self, input: ParseStream) -> Result<Self::Output> {
+ input.parse().and_then(|tokens| self.parse2(tokens))
+ }
+@@ -1103,7 +1172,7 @@ pub trait Parser: Sized {
+ fn tokens_to_parse_buffer(tokens: &TokenBuffer) -> ParseBuffer {
+ let scope = Span::call_site();
+ let cursor = tokens.begin();
+- let unexpected = Rc::new(Cell::new(None));
++ let unexpected = Rc::new(Cell::new(Unexpected::None));
+ new_parse_buffer(scope, cursor, unexpected)
+ }
+
+@@ -1118,38 +1187,42 @@ where
+ let state = tokens_to_parse_buffer(&buf);
+ let node = self(&state)?;
+ state.check_unexpected()?;
+- if state.is_empty() {
+- Ok(node)
++ if let Some(unexpected_span) = span_of_unexpected_ignoring_nones(state.cursor()) {
++ Err(Error::new(unexpected_span, "unexpected token"))
+ } else {
+- Err(state.error("unexpected token"))
++ Ok(node)
+ }
+ }
+
+ #[doc(hidden)]
++ #[cfg(any(feature = "full", feature = "derive"))]
+ fn __parse_scoped(self, scope: Span, tokens: TokenStream) -> Result<Self::Output> {
+ let buf = TokenBuffer::new2(tokens);
+ let cursor = buf.begin();
+- let unexpected = Rc::new(Cell::new(None));
++ let unexpected = Rc::new(Cell::new(Unexpected::None));
+ let state = new_parse_buffer(scope, cursor, unexpected);
+ let node = self(&state)?;
+ state.check_unexpected()?;
+- if state.is_empty() {
+- Ok(node)
++ if let Some(unexpected_span) = span_of_unexpected_ignoring_nones(state.cursor()) {
++ Err(Error::new(unexpected_span, "unexpected token"))
+ } else {
+- Err(state.error("unexpected token"))
++ Ok(node)
+ }
+ }
+
+ #[doc(hidden)]
++ #[cfg(any(feature = "full", feature = "derive"))]
+ fn __parse_stream(self, input: ParseStream) -> Result<Self::Output> {
+ self(input)
+ }
+ }
+
++#[cfg(any(feature = "full", feature = "derive"))]
+ pub(crate) fn parse_scoped<F: Parser>(f: F, scope: Span, tokens: TokenStream) -> Result<F::Output> {
+ f.__parse_scoped(scope, tokens)
+ }
+
++#[cfg(any(feature = "full", feature = "derive"))]
+ pub(crate) fn parse_stream<F: Parser>(f: F, input: ParseStream) -> Result<F::Output> {
+ f.__parse_stream(input)
+ }
+@@ -1160,8 +1233,8 @@ pub(crate) fn parse_stream<F: Parser>(f: F, input: ParseStream) -> Result<F::Out
+ /// provided any attribute args.
+ ///
+ /// ```
+-/// extern crate proc_macro;
+-///
++/// # extern crate proc_macro;
++/// #
+ /// use proc_macro::TokenStream;
+ /// use syn::parse_macro_input;
+ /// use syn::parse::Nothing;
+diff --git a/third_party/rust/syn/src/parse_macro_input.rs b/third_party/rust/syn/src/parse_macro_input.rs
+index d6e0725c17..c8fc1cea37 100644
+--- mozilla-release/third_party/rust/syn/src/parse_macro_input.rs
++++ mozilla-release/third_party/rust/syn/src/parse_macro_input.rs
+@@ -16,8 +16,8 @@
+ /// #\[proc_macro_attribute\] attribute.
+ ///
+ /// ```
+-/// extern crate proc_macro;
+-///
++/// # extern crate proc_macro;
++/// #
+ /// use proc_macro::TokenStream;
+ /// use syn::{parse_macro_input, Result};
+ /// use syn::parse::{Parse, ParseStream};
+@@ -43,7 +43,31 @@
+ /// # "".parse().unwrap()
+ /// }
+ /// ```
+-#[macro_export(local_inner_macros)]
++///
++/// <br>
++///
++/// # Expansion
++///
++/// `parse_macro_input!($variable as $Type)` expands to something like:
++///
++/// ```no_run
++/// # extern crate proc_macro;
++/// #
++/// # macro_rules! doc_test {
++/// # ($variable:ident as $Type:ty) => {
++/// match syn::parse::<$Type>($variable) {
++/// Ok(syntax_tree) => syntax_tree,
++/// Err(err) => return proc_macro::TokenStream::from(err.to_compile_error()),
++/// }
++/// # };
++/// # }
++/// #
++/// # fn test(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
++/// # let _ = doc_test!(input as syn::Ident);
++/// # proc_macro::TokenStream::new()
++/// # }
++/// ```
++#[macro_export]
+ macro_rules! parse_macro_input {
+ ($tokenstream:ident as $ty:ty) => {
+ match $crate::parse_macro_input::parse::<$ty>($tokenstream) {
+@@ -54,7 +78,7 @@ macro_rules! parse_macro_input {
+ }
+ };
+ ($tokenstream:ident) => {
+- parse_macro_input!($tokenstream as _)
++ $crate::parse_macro_input!($tokenstream as _)
+ };
+ }
+
+diff --git a/third_party/rust/syn/src/parse_quote.rs b/third_party/rust/syn/src/parse_quote.rs
+index 18a47b95c7..66aa818cd0 100644
+--- mozilla-release/third_party/rust/syn/src/parse_quote.rs
++++ mozilla-release/third_party/rust/syn/src/parse_quote.rs
+@@ -24,7 +24,7 @@
+ /// }
+ /// ```
+ ///
+-/// *This macro is available if Syn is built with the `"parsing"` feature,
++/// *This macro is available only if Syn is built with the `"parsing"` feature,
+ /// although interpolation of syntax tree nodes into the quoted tokens is only
+ /// supported if Syn is built with the `"printing"` feature as well.*
+ ///
+@@ -56,8 +56,10 @@
+ /// or inner like `#![...]`
+ /// - [`Punctuated<T, P>`] — parses zero or more `T` separated by punctuation
+ /// `P` with optional trailing punctuation
++/// - [`Vec<Stmt>`] — parses the same as `Block::parse_within`
+ ///
+ /// [`Punctuated<T, P>`]: punctuated::Punctuated
++/// [`Vec<Stmt>`]: Block::parse_within
+ ///
+ /// # Panics
+ ///
+@@ -67,7 +69,7 @@
+ //
+ // TODO: allow Punctuated to be inferred as intra doc link, currently blocked on
+ // https://github.com/rust-lang/rust/issues/62834
+-#[macro_export(local_inner_macros)]
++#[macro_export]
+ macro_rules! parse_quote {
+ ($($tt:tt)*) => {
+ $crate::parse_quote::parse(
+@@ -112,6 +114,8 @@ impl<T: Parse> ParseQuote for T {
+ use crate::punctuated::Punctuated;
+ #[cfg(any(feature = "full", feature = "derive"))]
+ use crate::{attr, Attribute};
++#[cfg(feature = "full")]
++use crate::{Block, Stmt};
+
+ #[cfg(any(feature = "full", feature = "derive"))]
+ impl ParseQuote for Attribute {
+@@ -129,3 +133,10 @@ impl<T: Parse, P: Parse> ParseQuote for Punctuated<T, P> {
+ Self::parse_terminated(input)
+ }
+ }
++
++#[cfg(feature = "full")]
++impl ParseQuote for Vec<Stmt> {
++ fn parse(input: ParseStream) -> Result<Self> {
++ Block::parse_within(input)
++ }
++}
+diff --git a/third_party/rust/syn/src/pat.rs b/third_party/rust/syn/src/pat.rs
+index 9371e05493..e9576a2361 100644
+--- mozilla-release/third_party/rust/syn/src/pat.rs
++++ mozilla-release/third_party/rust/syn/src/pat.rs
+@@ -1,16 +1,12 @@
+ use super::*;
+ use crate::punctuated::Punctuated;
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
+ use proc_macro2::TokenStream;
+-#[cfg(feature = "extra-traits")]
+-use std::hash::{Hash, Hasher};
+
+ ast_enum_of_structs! {
+ /// A pattern in a local binding, function signature, match expression, or
+ /// various other places.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ ///
+ /// # Syntax tree enum
+ ///
+@@ -20,7 +16,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum Pat #manual_extra_traits {
++ pub enum Pat {
+ /// A box pattern: `box v`.
+ Box(PatBox),
+
+@@ -86,7 +82,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A box pattern: `box v`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatBox {
+ pub attrs: Vec<Attribute>,
+ pub box_token: Token![box],
+@@ -97,7 +93,10 @@ ast_struct! {
+ ast_struct! {
+ /// A pattern that binds a new variable: `ref mut binding @ SUBPATTERN`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// It may also be a unit struct or struct variant (e.g. `None`), or a
++ /// constant; these cannot be distinguished syntactically.
++ ///
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatIdent {
+ pub attrs: Vec<Attribute>,
+ pub by_ref: Option<Token![ref]>,
+@@ -113,7 +112,7 @@ ast_struct! {
+ /// This holds an `Expr` rather than a `Lit` because negative numbers
+ /// are represented as an `Expr::Unary`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatLit {
+ pub attrs: Vec<Attribute>,
+ pub expr: Box<Expr>,
+@@ -123,7 +122,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro in pattern position.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatMacro {
+ pub attrs: Vec<Attribute>,
+ pub mac: Macro,
+@@ -133,7 +132,7 @@ ast_struct! {
+ ast_struct! {
+ /// A pattern that matches any one of a set of cases.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatOr {
+ pub attrs: Vec<Attribute>,
+ pub leading_vert: Option<Token![|]>,
+@@ -150,7 +149,7 @@ ast_struct! {
+ /// `<A>::B::C` and `<A as Trait>::B::C` can only legally refer to
+ /// associated constants.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatPath {
+ pub attrs: Vec<Attribute>,
+ pub qself: Option<QSelf>,
+@@ -161,7 +160,7 @@ ast_struct! {
+ ast_struct! {
+ /// A range pattern: `1..=2`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatRange {
+ pub attrs: Vec<Attribute>,
+ pub lo: Box<Expr>,
+@@ -173,7 +172,7 @@ ast_struct! {
+ ast_struct! {
+ /// A reference pattern: `&mut var`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatReference {
+ pub attrs: Vec<Attribute>,
+ pub and_token: Token![&],
+@@ -185,7 +184,7 @@ ast_struct! {
+ ast_struct! {
+ /// The dots in a tuple or slice pattern: `[0, 1, ..]`
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatRest {
+ pub attrs: Vec<Attribute>,
+ pub dot2_token: Token![..],
+@@ -195,7 +194,7 @@ ast_struct! {
+ ast_struct! {
+ /// A dynamically sized slice pattern: `[a, b, ref i @ .., y, z]`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatSlice {
+ pub attrs: Vec<Attribute>,
+ pub bracket_token: token::Bracket,
+@@ -206,7 +205,7 @@ ast_struct! {
+ ast_struct! {
+ /// A struct or struct variant pattern: `Variant { x, y, .. }`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatStruct {
+ pub attrs: Vec<Attribute>,
+ pub path: Path,
+@@ -219,7 +218,7 @@ ast_struct! {
+ ast_struct! {
+ /// A tuple pattern: `(a, b)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatTuple {
+ pub attrs: Vec<Attribute>,
+ pub paren_token: token::Paren,
+@@ -230,7 +229,7 @@ ast_struct! {
+ ast_struct! {
+ /// A tuple struct or tuple variant pattern: `Variant(x, y, .., z)`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatTupleStruct {
+ pub attrs: Vec<Attribute>,
+ pub path: Path,
+@@ -241,7 +240,7 @@ ast_struct! {
+ ast_struct! {
+ /// A type ascription pattern: `foo: f64`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatType {
+ pub attrs: Vec<Attribute>,
+ pub pat: Box<Pat>,
+@@ -253,7 +252,7 @@ ast_struct! {
+ ast_struct! {
+ /// A pattern that matches any value: `_`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct PatWild {
+ pub attrs: Vec<Attribute>,
+ pub underscore_token: Token![_],
+@@ -266,7 +265,7 @@ ast_struct! {
+ /// Patterns like the fields of Foo `{ x, ref y, ref mut z }` are treated
+ /// the same as `x: x, y: ref y, z: ref mut z` but there is no colon token.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct FieldPat {
+ pub attrs: Vec<Attribute>,
+ pub member: Member,
+@@ -275,122 +274,17 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Pat {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Pat {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (Pat::Box(this), Pat::Box(other)) => this == other,
+- (Pat::Ident(this), Pat::Ident(other)) => this == other,
+- (Pat::Lit(this), Pat::Lit(other)) => this == other,
+- (Pat::Macro(this), Pat::Macro(other)) => this == other,
+- (Pat::Or(this), Pat::Or(other)) => this == other,
+- (Pat::Path(this), Pat::Path(other)) => this == other,
+- (Pat::Range(this), Pat::Range(other)) => this == other,
+- (Pat::Reference(this), Pat::Reference(other)) => this == other,
+- (Pat::Rest(this), Pat::Rest(other)) => this == other,
+- (Pat::Slice(this), Pat::Slice(other)) => this == other,
+- (Pat::Struct(this), Pat::Struct(other)) => this == other,
+- (Pat::Tuple(this), Pat::Tuple(other)) => this == other,
+- (Pat::TupleStruct(this), Pat::TupleStruct(other)) => this == other,
+- (Pat::Type(this), Pat::Type(other)) => this == other,
+- (Pat::Verbatim(this), Pat::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- (Pat::Wild(this), Pat::Wild(other)) => this == other,
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Pat {
+- fn hash<H>(&self, hash: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- Pat::Box(pat) => {
+- hash.write_u8(0);
+- pat.hash(hash);
+- }
+- Pat::Ident(pat) => {
+- hash.write_u8(1);
+- pat.hash(hash);
+- }
+- Pat::Lit(pat) => {
+- hash.write_u8(2);
+- pat.hash(hash);
+- }
+- Pat::Macro(pat) => {
+- hash.write_u8(3);
+- pat.hash(hash);
+- }
+- Pat::Or(pat) => {
+- hash.write_u8(4);
+- pat.hash(hash);
+- }
+- Pat::Path(pat) => {
+- hash.write_u8(5);
+- pat.hash(hash);
+- }
+- Pat::Range(pat) => {
+- hash.write_u8(6);
+- pat.hash(hash);
+- }
+- Pat::Reference(pat) => {
+- hash.write_u8(7);
+- pat.hash(hash);
+- }
+- Pat::Rest(pat) => {
+- hash.write_u8(8);
+- pat.hash(hash);
+- }
+- Pat::Slice(pat) => {
+- hash.write_u8(9);
+- pat.hash(hash);
+- }
+- Pat::Struct(pat) => {
+- hash.write_u8(10);
+- pat.hash(hash);
+- }
+- Pat::Tuple(pat) => {
+- hash.write_u8(11);
+- pat.hash(hash);
+- }
+- Pat::TupleStruct(pat) => {
+- hash.write_u8(12);
+- pat.hash(hash);
+- }
+- Pat::Type(pat) => {
+- hash.write_u8(13);
+- pat.hash(hash);
+- }
+- Pat::Verbatim(pat) => {
+- hash.write_u8(14);
+- TokenStreamHelper(pat).hash(hash);
+- }
+- Pat::Wild(pat) => {
+- hash.write_u8(15);
+- pat.hash(hash);
+- }
+- Pat::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ #[cfg(feature = "parsing")]
+-mod parsing {
++pub mod parsing {
+ use super::*;
+
+ use crate::ext::IdentExt;
+- use crate::parse::{Parse, ParseStream, Result};
++ use crate::parse::{Parse, ParseBuffer, ParseStream, Result};
+ use crate::path;
+
+ impl Parse for Pat {
+ fn parse(input: ParseStream) -> Result<Self> {
++ let begin = input.fork();
+ let lookahead = input.lookahead1();
+ if lookahead.peek(Ident)
+ && ({
+@@ -411,7 +305,6 @@ mod parsing {
+ || lookahead.peek(Token![<])
+ || input.peek(Token![Self])
+ || input.peek(Token![super])
+- || input.peek(Token![extern])
+ || input.peek(Token![crate])
+ {
+ pat_path_or_macro_or_struct_or_range(input)
+@@ -434,7 +327,7 @@ mod parsing {
+ } else if lookahead.peek(token::Bracket) {
+ input.call(pat_slice).map(Pat::Slice)
+ } else if lookahead.peek(Token![..]) && !input.peek(Token![...]) {
+- input.call(pat_rest).map(Pat::Rest)
++ pat_range_half_open(input, begin)
+ } else {
+ Err(lookahead.error())
+ }
+@@ -442,10 +335,11 @@ mod parsing {
+ }
+
+ fn pat_path_or_macro_or_struct_or_range(input: ParseStream) -> Result<Pat> {
++ let begin = input.fork();
+ let (qself, path) = path::parsing::qpath(input, true)?;
+
+ if input.peek(Token![..]) {
+- return pat_range(input, qself, path).map(Pat::Range);
++ return pat_range(input, begin, qself, path);
+ }
+
+ if qself.is_some() {
+@@ -487,7 +381,7 @@ mod parsing {
+ } else if input.peek(token::Paren) {
+ pat_tuple_struct(input, path).map(Pat::TupleStruct)
+ } else if input.peek(Token![..]) {
+- pat_range(input, qself, path).map(Pat::Range)
++ pat_range(input, begin, qself, path)
+ } else {
+ Ok(Pat::Path(PatPath {
+ attrs: Vec::new(),
+@@ -546,7 +440,7 @@ mod parsing {
+ while !content.is_empty() && !content.peek(Token![..]) {
+ let value = content.call(field_pat)?;
+ fields.push_value(value);
+- if !content.peek(Token![,]) {
++ if content.is_empty() {
+ break;
+ }
+ let punct: Token![,] = content.parse()?;
+@@ -578,6 +472,7 @@ mod parsing {
+ }
+
+ fn field_pat(input: ParseStream) -> Result<FieldPat> {
++ let attrs = input.call(Attribute::parse_outer)?;
+ let boxed: Option<Token![box]> = input.parse()?;
+ let by_ref: Option<Token![ref]> = input.parse()?;
+ let mutability: Option<Token![mut]> = input.parse()?;
+@@ -587,10 +482,10 @@ mod parsing {
+ || member.is_unnamed()
+ {
+ return Ok(FieldPat {
+- attrs: Vec::new(),
++ attrs,
+ member,
+ colon_token: input.parse()?,
+- pat: input.parse()?,
++ pat: Box::new(multi_pat(input)?),
+ });
+ }
+
+@@ -610,30 +505,57 @@ mod parsing {
+ if let Some(boxed) = boxed {
+ pat = Pat::Box(PatBox {
+ attrs: Vec::new(),
+- pat: Box::new(pat),
+ box_token: boxed,
++ pat: Box::new(pat),
+ });
+ }
+
+ Ok(FieldPat {
++ attrs,
+ member: Member::Named(ident),
+- pat: Box::new(pat),
+- attrs: Vec::new(),
+ colon_token: None,
++ pat: Box::new(pat),
+ })
+ }
+
+- fn pat_range(input: ParseStream, qself: Option<QSelf>, path: Path) -> Result<PatRange> {
+- Ok(PatRange {
+- attrs: Vec::new(),
+- lo: Box::new(Expr::Path(ExprPath {
++ fn pat_range(
++ input: ParseStream,
++ begin: ParseBuffer,
++ qself: Option<QSelf>,
++ path: Path,
++ ) -> Result<Pat> {
++ let limits: RangeLimits = input.parse()?;
++ let hi = input.call(pat_lit_expr)?;
++ if let Some(hi) = hi {
++ Ok(Pat::Range(PatRange {
+ attrs: Vec::new(),
+- qself,
+- path,
+- })),
+- limits: input.parse()?,
+- hi: input.call(pat_lit_expr)?,
+- })
++ lo: Box::new(Expr::Path(ExprPath {
++ attrs: Vec::new(),
++ qself,
++ path,
++ })),
++ limits,
++ hi,
++ }))
++ } else {
++ Ok(Pat::Verbatim(verbatim::between(begin, input)))
++ }
++ }
++
++ fn pat_range_half_open(input: ParseStream, begin: ParseBuffer) -> Result<Pat> {
++ let limits: RangeLimits = input.parse()?;
++ let hi = input.call(pat_lit_expr)?;
++ if hi.is_some() {
++ Ok(Pat::Verbatim(verbatim::between(begin, input)))
++ } else {
++ match limits {
++ RangeLimits::HalfOpen(dot2_token) => Ok(Pat::Rest(PatRest {
++ attrs: Vec::new(),
++ dot2_token,
++ })),
++ RangeLimits::Closed(_) => Err(input.error("expected range upper bound")),
++ }
++ }
+ }
+
+ fn pat_tuple(input: ParseStream) -> Result<PatTuple> {
+@@ -642,7 +564,7 @@ mod parsing {
+
+ let mut elems = Punctuated::new();
+ while !content.is_empty() {
+- let value: Pat = content.parse()?;
++ let value = multi_pat(&content)?;
+ elems.push_value(value);
+ if content.is_empty() {
+ break;
+@@ -668,14 +590,21 @@ mod parsing {
+ }
+
+ fn pat_lit_or_range(input: ParseStream) -> Result<Pat> {
+- let lo = input.call(pat_lit_expr)?;
++ let begin = input.fork();
++ let lo = input.call(pat_lit_expr)?.unwrap();
+ if input.peek(Token![..]) {
+- Ok(Pat::Range(PatRange {
+- attrs: Vec::new(),
+- lo,
+- limits: input.parse()?,
+- hi: input.call(pat_lit_expr)?,
+- }))
++ let limits: RangeLimits = input.parse()?;
++ let hi = input.call(pat_lit_expr)?;
++ if let Some(hi) = hi {
++ Ok(Pat::Range(PatRange {
++ attrs: Vec::new(),
++ lo,
++ limits,
++ hi,
++ }))
++ } else {
++ Ok(Pat::Verbatim(verbatim::between(begin, input)))
++ }
+ } else {
+ Ok(Pat::Lit(PatLit {
+ attrs: Vec::new(),
+@@ -684,7 +613,17 @@ mod parsing {
+ }
+ }
+
+- fn pat_lit_expr(input: ParseStream) -> Result<Box<Expr>> {
++ fn pat_lit_expr(input: ParseStream) -> Result<Option<Box<Expr>>> {
++ if input.is_empty()
++ || input.peek(Token![|])
++ || input.peek(Token![=>])
++ || input.peek(Token![:]) && !input.peek(Token![::])
++ || input.peek(Token![,])
++ || input.peek(Token![;])
++ {
++ return Ok(None);
++ }
++
+ let neg: Option<Token![-]> = input.parse()?;
+
+ let lookahead = input.lookahead1();
+@@ -696,7 +635,6 @@ mod parsing {
+ || lookahead.peek(Token![self])
+ || lookahead.peek(Token![Self])
+ || lookahead.peek(Token![super])
+- || lookahead.peek(Token![extern])
+ || lookahead.peek(Token![crate])
+ {
+ Expr::Path(input.parse()?)
+@@ -704,7 +642,7 @@ mod parsing {
+ return Err(lookahead.error());
+ };
+
+- Ok(Box::new(if let Some(neg) = neg {
++ Ok(Some(Box::new(if let Some(neg) = neg {
+ Expr::Unary(ExprUnary {
+ attrs: Vec::new(),
+ op: UnOp::Neg(neg),
+@@ -712,7 +650,7 @@ mod parsing {
+ })
+ } else {
+ expr
+- }))
++ })))
+ }
+
+ fn pat_slice(input: ParseStream) -> Result<PatSlice> {
+@@ -721,7 +659,7 @@ mod parsing {
+
+ let mut elems = Punctuated::new();
+ while !content.is_empty() {
+- let value: Pat = content.parse()?;
++ let value = multi_pat(&content)?;
+ elems.push_value(value);
+ if content.is_empty() {
+ break;
+@@ -737,11 +675,35 @@ mod parsing {
+ })
+ }
+
+- fn pat_rest(input: ParseStream) -> Result<PatRest> {
+- Ok(PatRest {
+- attrs: Vec::new(),
+- dot2_token: input.parse()?,
+- })
++ pub fn multi_pat(input: ParseStream) -> Result<Pat> {
++ multi_pat_impl(input, None)
++ }
++
++ pub fn multi_pat_with_leading_vert(input: ParseStream) -> Result<Pat> {
++ let leading_vert: Option<Token![|]> = input.parse()?;
++ multi_pat_impl(input, leading_vert)
++ }
++
++ fn multi_pat_impl(input: ParseStream, leading_vert: Option<Token![|]>) -> Result<Pat> {
++ let mut pat: Pat = input.parse()?;
++ if leading_vert.is_some()
++ || input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=])
++ {
++ let mut cases = Punctuated::new();
++ cases.push_value(pat);
++ while input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=]) {
++ let punct = input.parse()?;
++ cases.push_punct(punct);
++ let pat: Pat = input.parse()?;
++ cases.push_value(pat);
++ }
++ pat = Pat::Or(PatOr {
++ attrs: Vec::new(),
++ leading_vert,
++ cases,
++ });
++ }
++ Ok(pat)
+ }
+ }
+
+@@ -756,12 +718,14 @@ mod printing {
+
+ impl ToTokens for PatWild {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.underscore_token.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for PatIdent {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.by_ref.to_tokens(tokens);
+ self.mutability.to_tokens(tokens);
+ self.ident.to_tokens(tokens);
+@@ -774,6 +738,7 @@ mod printing {
+
+ impl ToTokens for PatStruct {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.path.to_tokens(tokens);
+ self.brace_token.surround(tokens, |tokens| {
+ self.fields.to_tokens(tokens);
+@@ -788,6 +753,7 @@ mod printing {
+
+ impl ToTokens for PatTupleStruct {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.path.to_tokens(tokens);
+ self.pat.to_tokens(tokens);
+ }
+@@ -804,12 +770,14 @@ mod printing {
+
+ impl ToTokens for PatPath {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ private::print_path(tokens, &self.qself, &self.path);
+ }
+ }
+
+ impl ToTokens for PatTuple {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.paren_token.surround(tokens, |tokens| {
+ self.elems.to_tokens(tokens);
+ });
+@@ -818,6 +786,7 @@ mod printing {
+
+ impl ToTokens for PatBox {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.box_token.to_tokens(tokens);
+ self.pat.to_tokens(tokens);
+ }
+@@ -825,6 +794,7 @@ mod printing {
+
+ impl ToTokens for PatReference {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.and_token.to_tokens(tokens);
+ self.mutability.to_tokens(tokens);
+ self.pat.to_tokens(tokens);
+@@ -833,18 +803,21 @@ mod printing {
+
+ impl ToTokens for PatRest {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.dot2_token.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for PatLit {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.expr.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for PatRange {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.lo.to_tokens(tokens);
+ match &self.limits {
+ RangeLimits::HalfOpen(t) => t.to_tokens(tokens),
+@@ -856,6 +829,7 @@ mod printing {
+
+ impl ToTokens for PatSlice {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.bracket_token.surround(tokens, |tokens| {
+ self.elems.to_tokens(tokens);
+ });
+@@ -864,12 +838,14 @@ mod printing {
+
+ impl ToTokens for PatMacro {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.mac.to_tokens(tokens);
+ }
+ }
+
+ impl ToTokens for PatOr {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ self.leading_vert.to_tokens(tokens);
+ self.cases.to_tokens(tokens);
+ }
+@@ -877,6 +853,7 @@ mod printing {
+
+ impl ToTokens for FieldPat {
+ fn to_tokens(&self, tokens: &mut TokenStream) {
++ tokens.append_all(self.attrs.outer());
+ if let Some(colon_token) = &self.colon_token {
+ self.member.to_tokens(tokens);
+ colon_token.to_tokens(tokens);
+diff --git a/third_party/rust/syn/src/path.rs b/third_party/rust/syn/src/path.rs
+index 8dda43ee67..15c0fcc664 100644
+--- mozilla-release/third_party/rust/syn/src/path.rs
++++ mozilla-release/third_party/rust/syn/src/path.rs
+@@ -2,9 +2,9 @@ use super::*;
+ use crate::punctuated::Punctuated;
+
+ ast_struct! {
+- /// A path at which a named item is exported: `std::collections::HashMap`.
++ /// A path at which a named item is exported (e.g. `std::collections::HashMap`).
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Path {
+ pub leading_colon: Option<Token![::]>,
+@@ -29,7 +29,7 @@ where
+ ast_struct! {
+ /// A segment of a path together with any path arguments on that segment.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct PathSegment {
+ pub ident: Ident,
+@@ -52,7 +52,7 @@ where
+ ast_enum! {
+ /// Angle bracketed or parenthesized arguments of a path segment.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// ## Angle bracketed
+@@ -98,7 +98,7 @@ impl PathArguments {
+ ast_enum! {
+ /// An individual generic argument, like `'a`, `T`, or `Item = T`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum GenericArgument {
+ /// A lifetime argument.
+@@ -122,7 +122,7 @@ ast_struct! {
+ /// Angle bracketed arguments of a path segment: the `<K, V>` in `HashMap<K,
+ /// V>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct AngleBracketedGenericArguments {
+ pub colon2_token: Option<Token![::]>,
+@@ -135,7 +135,7 @@ ast_struct! {
+ ast_struct! {
+ /// A binding (equality constraint) on an associated type: `Item = u8`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Binding {
+ pub ident: Ident,
+@@ -147,7 +147,7 @@ ast_struct! {
+ ast_struct! {
+ /// An associated type bound: `Iterator<Item: Display>`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Constraint {
+ pub ident: Ident,
+@@ -160,7 +160,7 @@ ast_struct! {
+ /// Arguments of a function path segment: the `(A, B) -> C` in `Fn(A,B) ->
+ /// C`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct ParenthesizedGenericArguments {
+ pub paren_token: token::Paren,
+@@ -189,7 +189,7 @@ ast_struct! {
+ /// ty position = 0
+ /// ```
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct QSelf {
+ pub lt_token: Token![<],
+@@ -291,11 +291,7 @@ pub mod parsing {
+
+ impl PathSegment {
+ fn parse_helper(input: ParseStream, expr_style: bool) -> Result<Self> {
+- if input.peek(Token![super])
+- || input.peek(Token![self])
+- || input.peek(Token![crate])
+- || input.peek(Token![extern])
+- {
++ if input.peek(Token![super]) || input.peek(Token![self]) || input.peek(Token![crate]) {
+ let ident = input.call(Ident::parse_any)?;
+ return Ok(PathSegment::from(ident));
+ }
+@@ -358,7 +354,7 @@ pub mod parsing {
+ impl Path {
+ /// Parse a `Path` containing no path arguments on any of its segments.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ ///
+ /// # Example
+@@ -400,7 +396,6 @@ pub mod parsing {
+ && !input.peek(Token![self])
+ && !input.peek(Token![Self])
+ && !input.peek(Token![crate])
+- && !input.peek(Token![extern])
+ {
+ break;
+ }
+@@ -433,7 +428,7 @@ pub mod parsing {
+ /// path arguments, and
+ /// - the ident of the first path segment is equal to the given one.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ ///
+ /// # Example
+@@ -472,7 +467,7 @@ pub mod parsing {
+ /// - the first path segment has no angle bracketed or parenthesized
+ /// path arguments.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ pub fn get_ident(&self) -> Option<&Ident> {
+ if self.leading_colon.is_none()
+diff --git a/third_party/rust/syn/src/punctuated.rs b/third_party/rust/syn/src/punctuated.rs
+index 38c7bf4e82..46c82a65b1 100644
+--- mozilla-release/third_party/rust/syn/src/punctuated.rs
++++ mozilla-release/third_party/rust/syn/src/punctuated.rs
+@@ -22,6 +22,8 @@
+
+ #[cfg(feature = "extra-traits")]
+ use std::fmt::{self, Debug};
++#[cfg(feature = "extra-traits")]
++use std::hash::{Hash, Hasher};
+ #[cfg(any(feature = "full", feature = "derive"))]
+ use std::iter;
+ use std::iter::FromIterator;
+@@ -41,8 +43,6 @@ use crate::token::Token;
+ /// Refer to the [module documentation] for details about punctuated sequences.
+ ///
+ /// [module documentation]: self
+-#[cfg_attr(feature = "extra-traits", derive(Eq, PartialEq, Hash))]
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ pub struct Punctuated<T, P> {
+ inner: Vec<(T, P)>,
+ last: Option<Box<T>>,
+@@ -76,22 +76,19 @@ impl<T, P> Punctuated<T, P> {
+ self.iter().next()
+ }
+
++ /// Mutably borrows the first element in this sequence.
++ pub fn first_mut(&mut self) -> Option<&mut T> {
++ self.iter_mut().next()
++ }
++
+ /// Borrows the last element in this sequence.
+ pub fn last(&self) -> Option<&T> {
+- if self.last.is_some() {
+- self.last.as_ref().map(Box::as_ref)
+- } else {
+- self.inner.last().map(|pair| &pair.0)
+- }
++ self.iter().next_back()
+ }
+
+ /// Mutably borrows the last element in this sequence.
+ pub fn last_mut(&mut self) -> Option<&mut T> {
+- if self.last.is_some() {
+- self.last.as_mut().map(Box::as_mut)
+- } else {
+- self.inner.last_mut().map(|pair| &mut pair.0)
+- }
++ self.iter_mut().next_back()
+ }
+
+ /// Returns an iterator over borrowed syntax tree nodes of type `&T`.
+@@ -230,13 +227,19 @@ impl<T, P> Punctuated<T, P> {
+ }
+ }
+
++ /// Clears the sequence of all values and punctuation, making it empty.
++ pub fn clear(&mut self) {
++ self.inner.clear();
++ self.last = None;
++ }
++
+ /// Parses zero or more occurrences of `T` separated by punctuation of type
+ /// `P`, with optional trailing punctuation.
+ ///
+ /// Parsing continues until the end of this parse stream. The entire content
+ /// of this parse stream must consist of `T` and `P`.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_terminated(input: ParseStream) -> Result<Self>
+@@ -256,7 +259,7 @@ impl<T, P> Punctuated<T, P> {
+ ///
+ /// [`parse_terminated`]: Punctuated::parse_terminated
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_terminated_with(
+@@ -292,7 +295,7 @@ impl<T, P> Punctuated<T, P> {
+ /// is not followed by a `P`, even if there are remaining tokens in the
+ /// stream.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_separated_nonempty(input: ParseStream) -> Result<Self>
+@@ -312,7 +315,7 @@ impl<T, P> Punctuated<T, P> {
+ ///
+ /// [`parse_separated_nonempty`]: Punctuated::parse_separated_nonempty
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ #[cfg(feature = "parsing")]
+ pub fn parse_separated_nonempty_with(
+@@ -338,6 +341,53 @@ impl<T, P> Punctuated<T, P> {
+ }
+ }
+
++#[cfg(feature = "clone-impls")]
++impl<T, P> Clone for Punctuated<T, P>
++where
++ T: Clone,
++ P: Clone,
++{
++ fn clone(&self) -> Self {
++ Punctuated {
++ inner: self.inner.clone(),
++ last: self.last.clone(),
++ }
++ }
++}
++
++#[cfg(feature = "extra-traits")]
++impl<T, P> Eq for Punctuated<T, P>
++where
++ T: Eq,
++ P: Eq,
++{
++}
++
++#[cfg(feature = "extra-traits")]
++impl<T, P> PartialEq for Punctuated<T, P>
++where
++ T: PartialEq,
++ P: PartialEq,
++{
++ fn eq(&self, other: &Self) -> bool {
++ let Punctuated { inner, last } = self;
++ *inner == other.inner && *last == other.last
++ }
++}
++
++#[cfg(feature = "extra-traits")]
++impl<T, P> Hash for Punctuated<T, P>
++where
++ T: Hash,
++ P: Hash,
++{
++ fn hash<H: Hasher>(&self, state: &mut H) {
++ let Punctuated { inner, last } = self;
++ inner.hash(state);
++ last.hash(state);
++ }
++}
++
+ #[cfg(feature = "extra-traits")]
+ impl<T: Debug, P: Debug> Debug for Punctuated<T, P> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+@@ -536,7 +586,6 @@ impl<'a, T, P> ExactSizeIterator for PairsMut<'a, T, P> {
+ /// Refer to the [module documentation] for details about punctuated sequences.
+ ///
+ /// [module documentation]: self
+-#[derive(Clone)]
+ pub struct IntoPairs<T, P> {
+ inner: vec::IntoIter<(T, P)>,
+ last: option::IntoIter<T>,
+@@ -572,12 +621,24 @@ impl<T, P> ExactSizeIterator for IntoPairs<T, P> {
+ }
+ }
+
++impl<T, P> Clone for IntoPairs<T, P>
++where
++ T: Clone,
++ P: Clone,
++{
++ fn clone(&self) -> Self {
++ IntoPairs {
++ inner: self.inner.clone(),
++ last: self.last.clone(),
++ }
++ }
++}
++
+ /// An iterator over owned values of type `T`.
+ ///
+ /// Refer to the [module documentation] for details about punctuated sequences.
+ ///
+ /// [module documentation]: self
+-#[derive(Clone)]
+ pub struct IntoIter<T> {
+ inner: vec::IntoIter<T>,
+ }
+@@ -606,6 +667,17 @@ impl<T> ExactSizeIterator for IntoIter<T> {
+ }
+ }
+
++impl<T> Clone for IntoIter<T>
++where
++ T: Clone,
++{
++ fn clone(&self) -> Self {
++ IntoIter {
++ inner: self.inner.clone(),
++ }
++ }
++}
++
+ /// An iterator over borrowed values of type `&T`.
+ ///
+ /// Refer to the [module documentation] for details about punctuated sequences.
+@@ -799,7 +871,6 @@ impl<'a, T: 'a, I: 'a> IterMutTrait<'a, T> for I where
+ /// Refer to the [module documentation] for details about punctuated sequences.
+ ///
+ /// [module documentation]: self
+-#[cfg_attr(feature = "clone-impls", derive(Clone))]
+ pub enum Pair<T, P> {
+ Punctuated(T, P),
+ End(T),
+@@ -856,6 +927,20 @@ impl<T, P> Pair<T, P> {
+ }
+ }
+
++#[cfg(feature = "clone-impls")]
++impl<T, P> Clone for Pair<T, P>
++where
++ T: Clone,
++ P: Clone,
++{
++ fn clone(&self) -> Self {
++ match self {
++ Pair::Punctuated(t, p) => Pair::Punctuated(t.clone(), p.clone()),
++ Pair::End(t) => Pair::End(t.clone()),
++ }
++ }
++}
++
+ impl<T, P> Index<usize> for Punctuated<T, P> {
+ type Output = T;
+
+diff --git a/third_party/rust/syn/src/reserved.rs b/third_party/rust/syn/src/reserved.rs
+new file mode 100644
+index 0000000000..ccfb8b5ad0
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/reserved.rs
+@@ -0,0 +1,42 @@
++// Type for a syntax tree node that is reserved for future use.
++//
++// For example ExprReference contains a field `raw` of type Reserved. If `&raw
++// place` syntax becomes a thing as per https://github.com/rust-lang/rfcs/pull/2582,
++// we can backward compatibly change `raw`'s type to Option<Token![raw]> without
++// the possibility of breaking any code.
++
++use proc_macro2::Span;
++use std::marker::PhantomData;
++
++#[cfg(feature = "extra-traits")]
++use std::fmt::{self, Debug};
++
++ast_struct! {
++ pub struct Reserved {
++ _private: PhantomData<Span>,
++ }
++}
++
++impl Default for Reserved {
++ fn default() -> Self {
++ Reserved {
++ _private: PhantomData,
++ }
++ }
++}
++
++#[cfg(feature = "clone-impls")]
++impl Clone for Reserved {
++ fn clone(&self) -> Self {
++ Reserved {
++ _private: self._private,
++ }
++ }
++}
++
++#[cfg(feature = "extra-traits")]
++impl Debug for Reserved {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.debug_struct("Reserved").finish()
++ }
++}
+diff --git a/third_party/rust/syn/src/spanned.rs b/third_party/rust/syn/src/spanned.rs
+index 71ffe26b81..01591cedcb 100644
+--- mozilla-release/third_party/rust/syn/src/spanned.rs
++++ mozilla-release/third_party/rust/syn/src/spanned.rs
+@@ -1,7 +1,7 @@
+ //! A trait that can provide the `Span` of the complete contents of a syntax
+ //! tree node.
+ //!
+-//! *This module is available if Syn is built with both the `"parsing"` and
++//! *This module is available only if Syn is built with both the `"parsing"` and
+ //! `"printing"` features.*
+ //!
+ //! <br>
+@@ -97,7 +97,7 @@ use quote::spanned::Spanned as ToTokens;
+ ///
+ /// [module documentation]: self
+ ///
+-/// *This trait is available if Syn is built with both the `"parsing"` and
++/// *This trait is available only if Syn is built with both the `"parsing"` and
+ /// `"printing"` features.*
+ pub trait Spanned {
+ /// Returns a `Span` covering the complete contents of this syntax tree
+diff --git a/third_party/rust/syn/src/stmt.rs b/third_party/rust/syn/src/stmt.rs
+index e4277fdbaa..b06e843d75 100644
+--- mozilla-release/third_party/rust/syn/src/stmt.rs
++++ mozilla-release/third_party/rust/syn/src/stmt.rs
+@@ -3,7 +3,7 @@ use super::*;
+ ast_struct! {
+ /// A braced block containing Rust statements.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Block {
+ pub brace_token: token::Brace,
+ /// Statements in a block
+@@ -14,7 +14,7 @@ ast_struct! {
+ ast_enum! {
+ /// A statement, usually ending in a semicolon.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub enum Stmt {
+ /// A local (let) binding.
+ Local(Local),
+@@ -33,7 +33,7 @@ ast_enum! {
+ ast_struct! {
+ /// A local `let` binding: `let x: u64 = s.parse()?`.
+ ///
+- /// *This type is available if Syn is built with the `"full"` feature.*
++ /// *This type is available only if Syn is built with the `"full"` feature.*
+ pub struct Local {
+ pub attrs: Vec<Attribute>,
+ pub let_token: Token![let],
+@@ -47,14 +47,15 @@ ast_struct! {
+ pub mod parsing {
+ use super::*;
+
++ use crate::parse::discouraged::Speculative;
+ use crate::parse::{Parse, ParseStream, Result};
+- use crate::punctuated::Punctuated;
++ use proc_macro2::TokenStream;
+
+ impl Block {
+ /// Parse the body of a block as zero or more statements, possibly
+ /// including one trailing expression.
+ ///
+- /// *This function is available if Syn is built with the `"parsing"`
++ /// *This function is available only if Syn is built with the `"parsing"`
+ /// feature.*
+ ///
+ /// # Example
+@@ -106,8 +107,8 @@ pub mod parsing {
+ pub fn parse_within(input: ParseStream) -> Result<Vec<Stmt>> {
+ let mut stmts = Vec::new();
+ loop {
+- while input.peek(Token![;]) {
+- input.parse::<Token![;]>()?;
++ while let Some(semi) = input.parse::<Option<Token![;]>>()? {
++ stmts.push(Stmt::Semi(Expr::Verbatim(TokenStream::new()), semi));
+ }
+ if input.is_empty() {
+ break;
+@@ -146,55 +147,55 @@ pub mod parsing {
+ }
+
+ fn parse_stmt(input: ParseStream, allow_nosemi: bool) -> Result<Stmt> {
+- // TODO: optimize using advance_to
++ let mut attrs = input.call(Attribute::parse_outer)?;
++
++ // brace-style macros; paren and bracket macros get parsed as
++ // expression statements.
+ let ahead = input.fork();
+- ahead.call(Attribute::parse_outer)?;
++ if let Ok(path) = ahead.call(Path::parse_mod_style) {
++ if ahead.peek(Token![!]) && (ahead.peek2(token::Brace) || ahead.peek2(Ident)) {
++ input.advance_to(&ahead);
++ return stmt_mac(input, attrs, path);
++ }
++ }
+
+- if {
+- let ahead = ahead.fork();
+- // Only parse braces here; paren and bracket will get parsed as
+- // expression statements
+- ahead.call(Path::parse_mod_style).is_ok()
+- && ahead.parse::<Token![!]>().is_ok()
+- && (ahead.peek(token::Brace) || ahead.peek(Ident))
+- } {
+- stmt_mac(input)
+- } else if ahead.peek(Token![let]) {
+- stmt_local(input).map(Stmt::Local)
+- } else if ahead.peek(Token![pub])
+- || ahead.peek(Token![crate]) && !ahead.peek2(Token![::])
+- || ahead.peek(Token![extern]) && !ahead.peek2(Token![::])
+- || ahead.peek(Token![use])
+- || ahead.peek(Token![static]) && (ahead.peek2(Token![mut]) || ahead.peek2(Ident))
+- || ahead.peek(Token![const])
+- || ahead.peek(Token![unsafe]) && !ahead.peek2(token::Brace)
+- || ahead.peek(Token![async])
+- && (ahead.peek2(Token![unsafe])
+- || ahead.peek2(Token![extern])
+- || ahead.peek2(Token![fn]))
+- || ahead.peek(Token![fn])
+- || ahead.peek(Token![mod])
+- || ahead.peek(Token![type])
+- || ahead.peek(item::parsing::existential) && ahead.peek2(Token![type])
+- || ahead.peek(Token![struct])
+- || ahead.peek(Token![enum])
+- || ahead.peek(Token![union]) && ahead.peek2(Ident)
+- || ahead.peek(Token![auto]) && ahead.peek2(Token![trait])
+- || ahead.peek(Token![trait])
+- || ahead.peek(Token![default])
+- && (ahead.peek2(Token![unsafe]) || ahead.peek2(Token![impl]))
+- || ahead.peek(Token![impl])
+- || ahead.peek(Token![macro])
++ if input.peek(Token![let]) {
++ stmt_local(input, attrs).map(Stmt::Local)
++ } else if input.peek(Token![pub])
++ || input.peek(Token![crate]) && !input.peek2(Token![::])
++ || input.peek(Token![extern])
++ || input.peek(Token![use])
++ || input.peek(Token![static]) && (input.peek2(Token![mut]) || input.peek2(Ident))
++ || input.peek(Token![const])
++ || input.peek(Token![unsafe]) && !input.peek2(token::Brace)
++ || input.peek(Token![async])
++ && (input.peek2(Token![unsafe])
++ || input.peek2(Token![extern])
++ || input.peek2(Token![fn]))
++ || input.peek(Token![fn])
++ || input.peek(Token![mod])
++ || input.peek(Token![type])
++ || input.peek(item::parsing::existential) && input.peek2(Token![type])
++ || input.peek(Token![struct])
++ || input.peek(Token![enum])
++ || input.peek(Token![union]) && input.peek2(Ident)
++ || input.peek(Token![auto]) && input.peek2(Token![trait])
++ || input.peek(Token![trait])
++ || input.peek(Token![default])
++ && (input.peek2(Token![unsafe]) || input.peek2(Token![impl]))
++ || input.peek(Token![impl])
++ || input.peek(Token![macro])
+ {
+- input.parse().map(Stmt::Item)
++ let mut item: Item = input.parse()?;
++ attrs.extend(item.replace_attrs(Vec::new()));
++ item.replace_attrs(attrs);
++ Ok(Stmt::Item(item))
+ } else {
+- stmt_expr(input, allow_nosemi)
++ stmt_expr(input, allow_nosemi, attrs)
+ }
+ }
+
+- fn stmt_mac(input: ParseStream) -> Result<Stmt> {
+- let attrs = input.call(Attribute::parse_outer)?;
+- let path = input.call(Path::parse_mod_style)?;
++ fn stmt_mac(input: ParseStream, attrs: Vec<Attribute>, path: Path) -> Result<Stmt> {
+ let bang_token: Token![!] = input.parse()?;
+ let ident: Option<Ident> = input.parse()?;
+ let (delimiter, tokens) = mac::parse_delimiter(input)?;
+@@ -213,33 +214,12 @@ pub mod parsing {
+ })))
+ }
+
+- fn stmt_local(input: ParseStream) -> Result<Local> {
++ fn stmt_local(input: ParseStream, attrs: Vec<Attribute>) -> Result<Local> {
+ Ok(Local {
+- attrs: input.call(Attribute::parse_outer)?,
++ attrs,
+ let_token: input.parse()?,
+ pat: {
+- let leading_vert: Option<Token![|]> = input.parse()?;
+- let mut pat: Pat = input.parse()?;
+- if leading_vert.is_some()
+- || input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=])
+- {
+- let mut cases = Punctuated::new();
+- cases.push_value(pat);
+- while input.peek(Token![|])
+- && !input.peek(Token![||])
+- && !input.peek(Token![|=])
+- {
+- let punct = input.parse()?;
+- cases.push_punct(punct);
+- let pat: Pat = input.parse()?;
+- cases.push_value(pat);
+- }
+- pat = Pat::Or(PatOr {
+- attrs: Vec::new(),
+- leading_vert,
+- cases,
+- });
+- }
++ let mut pat: Pat = pat::parsing::multi_pat_with_leading_vert(input)?;
+ if input.peek(Token![:]) {
+ let colon_token: Token![:] = input.parse()?;
+ let ty: Type = input.parse()?;
+@@ -265,12 +245,19 @@ pub mod parsing {
+ })
+ }
+
+- fn stmt_expr(input: ParseStream, allow_nosemi: bool) -> Result<Stmt> {
+- let mut attrs = input.call(Attribute::parse_outer)?;
++ fn stmt_expr(
++ input: ParseStream,
++ allow_nosemi: bool,
++ mut attrs: Vec<Attribute>,
++ ) -> Result<Stmt> {
+ let mut e = expr::parsing::expr_early(input)?;
+
+- attrs.extend(e.replace_attrs(Vec::new()));
+- e.replace_attrs(attrs);
++ let mut attr_target = &mut e;
++ while let Expr::Binary(e) = attr_target {
++ attr_target = &mut e.left;
++ }
++ attrs.extend(attr_target.replace_attrs(Vec::new()));
++ attr_target.replace_attrs(attrs);
+
+ if input.peek(Token![;]) {
+ return Ok(Stmt::Semi(e, input.parse()?));
+diff --git a/third_party/rust/syn/src/token.rs b/third_party/rust/syn/src/token.rs
+index 0b8c18192f..8539378c5e 100644
+--- mozilla-release/third_party/rust/syn/src/token.rs
++++ mozilla-release/third_party/rust/syn/src/token.rs
+@@ -88,7 +88,6 @@
+ //! [Printing]: https://docs.rs/quote/1.0/quote/trait.ToTokens.html
+ //! [`Span`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.html
+
+-use std;
+ #[cfg(feature = "extra-traits")]
+ use std::cmp;
+ #[cfg(feature = "extra-traits")]
+@@ -97,13 +96,13 @@ use std::fmt::{self, Debug};
+ use std::hash::{Hash, Hasher};
+ use std::ops::{Deref, DerefMut};
+
+-#[cfg(feature = "parsing")]
+-use proc_macro2::Delimiter;
+ #[cfg(any(feature = "parsing", feature = "printing"))]
+ use proc_macro2::Ident;
+ use proc_macro2::Span;
+ #[cfg(feature = "printing")]
+ use proc_macro2::TokenStream;
++#[cfg(feature = "parsing")]
++use proc_macro2::{Delimiter, Literal, Punct, TokenTree};
+ #[cfg(feature = "printing")]
+ use quote::{ToTokens, TokenStreamExt};
+
+@@ -112,10 +111,8 @@ use self::private::WithSpan;
+ use crate::buffer::Cursor;
+ #[cfg(feature = "parsing")]
+ use crate::error::Result;
+-#[cfg(any(feature = "full", feature = "derive"))]
+ #[cfg(feature = "parsing")]
+ use crate::lifetime::Lifetime;
+-#[cfg(any(feature = "full", feature = "derive"))]
+ #[cfg(feature = "parsing")]
+ use crate::lit::{Lit, LitBool, LitByte, LitByteStr, LitChar, LitFloat, LitInt, LitStr};
+ #[cfg(feature = "parsing")]
+@@ -155,21 +152,20 @@ mod private {
+ #[cfg(feature = "parsing")]
+ impl private::Sealed for Ident {}
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+ #[cfg(feature = "parsing")]
+ fn peek_impl(cursor: Cursor, peek: fn(ParseStream) -> bool) -> bool {
++ use crate::parse::Unexpected;
+ use std::cell::Cell;
+ use std::rc::Rc;
+
+ let scope = Span::call_site();
+- let unexpected = Rc::new(Cell::new(None));
++ let unexpected = Rc::new(Cell::new(Unexpected::None));
+ let buffer = crate::parse::new_parse_buffer(scope, cursor, unexpected);
+ peek(&buffer)
+ }
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+ macro_rules! impl_token {
+- ($name:ident $display:expr) => {
++ ($display:tt $name:ty) => {
+ #[cfg(feature = "parsing")]
+ impl Token for $name {
+ fn peek(cursor: Cursor) -> bool {
+@@ -189,24 +185,38 @@ macro_rules! impl_token {
+ };
+ }
+
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(Lifetime "lifetime");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(Lit "literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitStr "string literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitByteStr "byte string literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitByte "byte literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitChar "character literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitInt "integer literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitFloat "floating point literal");
+-#[cfg(any(feature = "full", feature = "derive"))]
+-impl_token!(LitBool "boolean literal");
++impl_token!("lifetime" Lifetime);
++impl_token!("literal" Lit);
++impl_token!("string literal" LitStr);
++impl_token!("byte string literal" LitByteStr);
++impl_token!("byte literal" LitByte);
++impl_token!("character literal" LitChar);
++impl_token!("integer literal" LitInt);
++impl_token!("floating point literal" LitFloat);
++impl_token!("boolean literal" LitBool);
++impl_token!("group token" proc_macro2::Group);
++
++macro_rules! impl_low_level_token {
++ ($display:tt $ty:ident $get:ident) => {
++ #[cfg(feature = "parsing")]
++ impl Token for $ty {
++ fn peek(cursor: Cursor) -> bool {
++ cursor.$get().is_some()
++ }
++
++ fn display() -> &'static str {
++ $display
++ }
++ }
++
++ #[cfg(feature = "parsing")]
++ impl private::Sealed for $ty {}
++ };
++}
++
++impl_low_level_token!("punctuation token" Punct punct);
++impl_low_level_token!("literal" Literal literal);
++impl_low_level_token!("token" TokenTree token_tree);
+
+ // Not public API.
+ #[doc(hidden)]
+@@ -233,7 +243,6 @@ impl<T: CustomToken> Token for T {
+ macro_rules! define_keywords {
+ ($($token:tt pub struct $name:ident #[$doc:meta])*) => {
+ $(
+- #[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
+ #[$doc]
+ ///
+ /// Don't try to remember the name of this type &mdash; use the
+@@ -260,6 +269,16 @@ macro_rules! define_keywords {
+ }
+ }
+
++ #[cfg(feature = "clone-impls")]
++ impl Copy for $name {}
++
++ #[cfg(feature = "clone-impls")]
++ impl Clone for $name {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
++
+ #[cfg(feature = "extra-traits")]
+ impl Debug for $name {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+@@ -338,7 +357,6 @@ macro_rules! impl_deref_if_len_is_1 {
+ macro_rules! define_punctuation_structs {
+ ($($token:tt pub struct $name:ident/$len:tt #[$doc:meta])*) => {
+ $(
+- #[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
+ #[repr(C)]
+ #[$doc]
+ ///
+@@ -366,6 +384,16 @@ macro_rules! define_punctuation_structs {
+ }
+ }
+
++ #[cfg(feature = "clone-impls")]
++ impl Copy for $name {}
++
++ #[cfg(feature = "clone-impls")]
++ impl Clone for $name {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
++
+ #[cfg(feature = "extra-traits")]
+ impl Debug for $name {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+@@ -436,7 +464,6 @@ macro_rules! define_punctuation {
+ macro_rules! define_delimiters {
+ ($($token:tt pub struct $name:ident #[$doc:meta])*) => {
+ $(
+- #[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
+ #[$doc]
+ pub struct $name {
+ pub span: Span,
+@@ -458,6 +485,16 @@ macro_rules! define_delimiters {
+ }
+ }
+
++ #[cfg(feature = "clone-impls")]
++ impl Copy for $name {}
++
++ #[cfg(feature = "clone-impls")]
++ impl Clone for $name {
++ fn clone(&self) -> Self {
++ *self
++ }
++ }
++
+ #[cfg(feature = "extra-traits")]
+ impl Debug for $name {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+@@ -855,7 +892,7 @@ pub mod parsing {
+ }
+
+ pub fn punct<S: FromSpans>(input: ParseStream, token: &str) -> Result<S> {
+- let mut spans = [input.cursor().span(); 3];
++ let mut spans = [input.span(); 3];
+ punct_helper(input, token, &mut spans)?;
+ Ok(S::from_spans(&spans))
+ }
+diff --git a/third_party/rust/syn/src/tt.rs b/third_party/rust/syn/src/tt.rs
+index f860eebb4f..8dba0627cd 100644
+--- mozilla-release/third_party/rust/syn/src/tt.rs
++++ mozilla-release/third_party/rust/syn/src/tt.rs
+@@ -18,8 +18,8 @@ impl<'a> PartialEq for TokenTreeHelper<'a> {
+ _ => return false,
+ }
+
+- let s1 = g1.stream().clone().into_iter();
+- let mut s2 = g2.stream().clone().into_iter();
++ let s1 = g1.stream().into_iter();
++ let mut s2 = g2.stream().into_iter();
+
+ for item1 in s1 {
+ let item2 = match s2.next() {
+@@ -60,7 +60,7 @@ impl<'a> Hash for TokenTreeHelper<'a> {
+ Delimiter::None => 3u8.hash(h),
+ }
+
+- for item in g.stream().clone() {
++ for item in g.stream() {
+ TokenTreeHelper(&item).hash(h);
+ }
+ 0xffu8.hash(h); // terminator w/ a variant we don't normally hash
+diff --git a/third_party/rust/syn/src/ty.rs b/third_party/rust/syn/src/ty.rs
+index 4ee59bda2a..fd7c97eab7 100644
+--- mozilla-release/third_party/rust/syn/src/ty.rs
++++ mozilla-release/third_party/rust/syn/src/ty.rs
+@@ -1,15 +1,11 @@
+ use super::*;
+ use crate::punctuated::Punctuated;
+-#[cfg(feature = "extra-traits")]
+-use crate::tt::TokenStreamHelper;
+ use proc_macro2::TokenStream;
+-#[cfg(feature = "extra-traits")]
+-use std::hash::{Hash, Hasher};
+
+ ast_enum_of_structs! {
+ /// The possible types that a Rust value could have.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ ///
+ /// # Syntax tree enum
+@@ -20,7 +16,7 @@ ast_enum_of_structs! {
+ //
+ // TODO: change syntax-tree-enum link to an intra rustdoc link, currently
+ // blocked on https://github.com/rust-lang/rust/issues/62833
+- pub enum Type #manual_extra_traits {
++ pub enum Type {
+ /// A fixed size array type: `[T; n]`.
+ Array(TypeArray),
+
+@@ -77,7 +73,7 @@ ast_enum_of_structs! {
+ ast_struct! {
+ /// A fixed size array type: `[T; n]`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeArray {
+ pub bracket_token: token::Bracket,
+@@ -90,7 +86,7 @@ ast_struct! {
+ ast_struct! {
+ /// A bare function type: `fn(usize) -> bool`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeBareFn {
+ pub lifetimes: Option<BoundLifetimes>,
+@@ -107,7 +103,7 @@ ast_struct! {
+ ast_struct! {
+ /// A type contained within invisible delimiters.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeGroup {
+ pub group_token: token::Group,
+@@ -119,7 +115,7 @@ ast_struct! {
+ /// An `impl Bound1 + Bound2 + Bound3` type where `Bound` is a trait or
+ /// a lifetime.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeImplTrait {
+ pub impl_token: Token![impl],
+@@ -130,7 +126,7 @@ ast_struct! {
+ ast_struct! {
+ /// Indication that a type should be inferred by the compiler: `_`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeInfer {
+ pub underscore_token: Token![_],
+@@ -140,7 +136,7 @@ ast_struct! {
+ ast_struct! {
+ /// A macro in the type position.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeMacro {
+ pub mac: Macro,
+@@ -150,7 +146,7 @@ ast_struct! {
+ ast_struct! {
+ /// The never type: `!`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeNever {
+ pub bang_token: Token![!],
+@@ -160,7 +156,7 @@ ast_struct! {
+ ast_struct! {
+ /// A parenthesized type equivalent to the inner type.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeParen {
+ pub paren_token: token::Paren,
+@@ -172,7 +168,7 @@ ast_struct! {
+ /// A path like `std::slice::Iter`, optionally qualified with a
+ /// self-type as in `<Vec<T> as SomeTrait>::Associated`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypePath {
+ pub qself: Option<QSelf>,
+@@ -183,7 +179,7 @@ ast_struct! {
+ ast_struct! {
+ /// A raw pointer type: `*const T` or `*mut T`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypePtr {
+ pub star_token: Token![*],
+@@ -196,7 +192,7 @@ ast_struct! {
+ ast_struct! {
+ /// A reference type: `&'a T` or `&'a mut T`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeReference {
+ pub and_token: Token![&],
+@@ -209,7 +205,7 @@ ast_struct! {
+ ast_struct! {
+ /// A dynamically sized slice type: `[T]`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeSlice {
+ pub bracket_token: token::Bracket,
+@@ -221,7 +217,7 @@ ast_struct! {
+ /// A trait object type `Bound1 + Bound2 + Bound3` where `Bound` is a
+ /// trait or a lifetime.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeTraitObject {
+ pub dyn_token: Option<Token![dyn]>,
+@@ -232,7 +228,7 @@ ast_struct! {
+ ast_struct! {
+ /// A tuple type: `(A, B, C, String)`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or
++ /// *This type is available only if Syn is built with the `"derive"` or
+ /// `"full"` feature.*
+ pub struct TypeTuple {
+ pub paren_token: token::Paren,
+@@ -240,111 +236,10 @@ ast_struct! {
+ }
+ }
+
+-#[cfg(feature = "extra-traits")]
+-impl Eq for Type {}
+-
+-#[cfg(feature = "extra-traits")]
+-impl PartialEq for Type {
+- fn eq(&self, other: &Self) -> bool {
+- match (self, other) {
+- (Type::Array(this), Type::Array(other)) => this == other,
+- (Type::BareFn(this), Type::BareFn(other)) => this == other,
+- (Type::Group(this), Type::Group(other)) => this == other,
+- (Type::ImplTrait(this), Type::ImplTrait(other)) => this == other,
+- (Type::Infer(this), Type::Infer(other)) => this == other,
+- (Type::Macro(this), Type::Macro(other)) => this == other,
+- (Type::Never(this), Type::Never(other)) => this == other,
+- (Type::Paren(this), Type::Paren(other)) => this == other,
+- (Type::Path(this), Type::Path(other)) => this == other,
+- (Type::Ptr(this), Type::Ptr(other)) => this == other,
+- (Type::Reference(this), Type::Reference(other)) => this == other,
+- (Type::Slice(this), Type::Slice(other)) => this == other,
+- (Type::TraitObject(this), Type::TraitObject(other)) => this == other,
+- (Type::Tuple(this), Type::Tuple(other)) => this == other,
+- (Type::Verbatim(this), Type::Verbatim(other)) => {
+- TokenStreamHelper(this) == TokenStreamHelper(other)
+- }
+- _ => false,
+- }
+- }
+-}
+-
+-#[cfg(feature = "extra-traits")]
+-impl Hash for Type {
+- fn hash<H>(&self, hash: &mut H)
+- where
+- H: Hasher,
+- {
+- match self {
+- Type::Array(ty) => {
+- hash.write_u8(0);
+- ty.hash(hash);
+- }
+- Type::BareFn(ty) => {
+- hash.write_u8(1);
+- ty.hash(hash);
+- }
+- Type::Group(ty) => {
+- hash.write_u8(2);
+- ty.hash(hash);
+- }
+- Type::ImplTrait(ty) => {
+- hash.write_u8(3);
+- ty.hash(hash);
+- }
+- Type::Infer(ty) => {
+- hash.write_u8(4);
+- ty.hash(hash);
+- }
+- Type::Macro(ty) => {
+- hash.write_u8(5);
+- ty.hash(hash);
+- }
+- Type::Never(ty) => {
+- hash.write_u8(6);
+- ty.hash(hash);
+- }
+- Type::Paren(ty) => {
+- hash.write_u8(7);
+- ty.hash(hash);
+- }
+- Type::Path(ty) => {
+- hash.write_u8(8);
+- ty.hash(hash);
+- }
+- Type::Ptr(ty) => {
+- hash.write_u8(9);
+- ty.hash(hash);
+- }
+- Type::Reference(ty) => {
+- hash.write_u8(10);
+- ty.hash(hash);
+- }
+- Type::Slice(ty) => {
+- hash.write_u8(11);
+- ty.hash(hash);
+- }
+- Type::TraitObject(ty) => {
+- hash.write_u8(12);
+- ty.hash(hash);
+- }
+- Type::Tuple(ty) => {
+- hash.write_u8(13);
+- ty.hash(hash);
+- }
+- Type::Verbatim(ty) => {
+- hash.write_u8(14);
+- TokenStreamHelper(ty).hash(hash);
+- }
+- Type::__Nonexhaustive => unreachable!(),
+- }
+- }
+-}
+-
+ ast_struct! {
+ /// The binary interface of a function: `extern "C"`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Abi {
+ pub extern_token: Token![extern],
+@@ -355,7 +250,7 @@ ast_struct! {
+ ast_struct! {
+ /// An argument in a function type: the `usize` in `fn(usize) -> bool`.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct BareFnArg {
+ pub attrs: Vec<Attribute>,
+@@ -377,7 +272,7 @@ ast_struct! {
+ /// }
+ /// ```
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub struct Variadic {
+ pub attrs: Vec<Attribute>,
+@@ -388,7 +283,7 @@ ast_struct! {
+ ast_enum! {
+ /// Return type of a function signature.
+ ///
+- /// *This type is available if Syn is built with the `"derive"` or `"full"`
++ /// *This type is available only if Syn is built with the `"derive"` or `"full"`
+ /// feature.*
+ pub enum ReturnType {
+ /// Return type is not specified.
+@@ -407,10 +302,13 @@ pub mod parsing {
+ use crate::ext::IdentExt;
+ use crate::parse::{Parse, ParseStream, Result};
+ use crate::path;
++ use proc_macro2::{Punct, Spacing, TokenTree};
++ use std::iter::FromIterator;
+
+ impl Parse for Type {
+ fn parse(input: ParseStream) -> Result<Self> {
+- ambig_ty(input, true)
++ let allow_plus = true;
++ ambig_ty(input, allow_plus)
+ }
+ }
+
+@@ -421,15 +319,17 @@ pub mod parsing {
+ ///
+ /// This parser does not allow a `+`, while the default parser does.
+ pub fn without_plus(input: ParseStream) -> Result<Self> {
+- ambig_ty(input, false)
++ let allow_plus = false;
++ ambig_ty(input, allow_plus)
+ }
+ }
+
+ fn ambig_ty(input: ParseStream, allow_plus: bool) -> Result<Type> {
+- if input.peek(token::Group) {
++ if input.peek(token::Group) && !input.peek2(Token![::]) && !input.peek2(Token![<]) {
+ return input.parse().map(Type::Group);
+ }
+
++ let begin = input.fork();
+ let mut lifetimes = None::<BoundLifetimes>;
+ let mut lookahead = input.lookahead1();
+ if lookahead.peek(Token![for]) {
+@@ -524,7 +424,7 @@ pub mod parsing {
+ ..trait_bound
+ })
+ }
+- other => other,
++ other @ TypeParamBound::Lifetime(_) => other,
+ }
+ }
+ _ => break,
+@@ -549,17 +449,20 @@ pub mod parsing {
+ }))
+ } else if lookahead.peek(Token![fn])
+ || lookahead.peek(Token![unsafe])
+- || lookahead.peek(Token![extern]) && !input.peek2(Token![::])
++ || lookahead.peek(Token![extern])
+ {
+- let mut bare_fn: TypeBareFn = input.parse()?;
+- bare_fn.lifetimes = lifetimes;
+- Ok(Type::BareFn(bare_fn))
++ let allow_mut_self = true;
++ if let Some(mut bare_fn) = parse_bare_fn(input, allow_mut_self)? {
++ bare_fn.lifetimes = lifetimes;
++ Ok(Type::BareFn(bare_fn))
++ } else {
++ Ok(Type::Verbatim(verbatim::between(begin, input)))
++ }
+ } else if lookahead.peek(Ident)
+ || input.peek(Token![super])
+ || input.peek(Token![self])
+ || input.peek(Token![Self])
+ || input.peek(Token![crate])
+- || input.peek(Token![extern])
+ || lookahead.peek(Token![::])
+ || lookahead.peek(Token![<])
+ {
+@@ -722,38 +625,58 @@ pub mod parsing {
+
+ impl Parse for TypeBareFn {
+ fn parse(input: ParseStream) -> Result<Self> {
+- let args;
+- let allow_variadic;
+- Ok(TypeBareFn {
+- lifetimes: input.parse()?,
+- unsafety: input.parse()?,
+- abi: input.parse()?,
+- fn_token: input.parse()?,
+- paren_token: parenthesized!(args in input),
+- inputs: {
+- let mut inputs = Punctuated::new();
+- while !args.is_empty() && !args.peek(Token![...]) {
+- inputs.push_value(args.parse()?);
+- if args.is_empty() {
+- break;
+- }
+- inputs.push_punct(args.parse()?);
+- }
+- allow_variadic = inputs.empty_or_trailing();
+- inputs
+- },
+- variadic: {
+- if allow_variadic && args.peek(Token![...]) {
+- Some(Variadic {
+- attrs: Vec::new(),
++ let allow_mut_self = false;
++ parse_bare_fn(input, allow_mut_self).map(Option::unwrap)
++ }
++ }
++
++ fn parse_bare_fn(input: ParseStream, allow_mut_self: bool) -> Result<Option<TypeBareFn>> {
++ let args;
++ let mut variadic = None;
++ let mut has_mut_self = false;
++
++ let bare_fn = TypeBareFn {
++ lifetimes: input.parse()?,
++ unsafety: input.parse()?,
++ abi: input.parse()?,
++ fn_token: input.parse()?,
++ paren_token: parenthesized!(args in input),
++ inputs: {
++ let mut inputs = Punctuated::new();
++
++ while !args.is_empty() {
++ let attrs = args.call(Attribute::parse_outer)?;
++
++ if inputs.empty_or_trailing() && args.peek(Token![...]) {
++ variadic = Some(Variadic {
++ attrs,
+ dots: args.parse()?,
+- })
++ });
++ break;
++ }
++
++ if let Some(arg) = parse_bare_fn_arg(&args, allow_mut_self)? {
++ inputs.push_value(BareFnArg { attrs, ..arg });
+ } else {
+- None
++ has_mut_self = true;
+ }
+- },
+- output: input.call(ReturnType::without_plus)?,
+- })
++ if args.is_empty() {
++ break;
++ }
++
++ inputs.push_punct(args.parse()?);
++ }
++
++ inputs
++ },
++ variadic,
++ output: input.call(ReturnType::without_plus)?,
++ };
++
++ if has_mut_self {
++ Ok(None)
++ } else {
++ Ok(Some(bare_fn))
+ }
+ }
+
+@@ -776,9 +699,27 @@ pub mod parsing {
+ impl Parse for TypeTuple {
+ fn parse(input: ParseStream) -> Result<Self> {
+ let content;
++ let paren_token = parenthesized!(content in input);
++
++ if content.is_empty() {
++ return Ok(TypeTuple {
++ paren_token,
++ elems: Punctuated::new(),
++ });
++ }
++
++ let first: Type = content.parse()?;
+ Ok(TypeTuple {
+- paren_token: parenthesized!(content in input),
+- elems: content.parse_terminated(Type::parse)?,
++ paren_token,
++ elems: {
++ let mut elems = Punctuated::new();
++ elems.push_value(first);
++ elems.push_punct(content.parse()?);
++ let rest: Punctuated<Type, Token![,]> =
++ content.parse_terminated(Parse::parse)?;
++ elems.extend(rest);
++ elems
++ },
+ })
+ }
+ }
+@@ -807,9 +748,11 @@ pub mod parsing {
+
+ impl ReturnType {
+ pub fn without_plus(input: ParseStream) -> Result<Self> {
+- Self::parse(input, false)
++ let allow_plus = false;
++ Self::parse(input, allow_plus)
+ }
+
++ #[doc(hidden)]
+ pub fn parse(input: ParseStream, allow_plus: bool) -> Result<Self> {
+ if input.peek(Token![->]) {
+ let arrow = input.parse()?;
+@@ -844,10 +787,12 @@ pub mod parsing {
+
+ impl TypeTraitObject {
+ pub fn without_plus(input: ParseStream) -> Result<Self> {
+- Self::parse(input, false)
++ let allow_plus = false;
++ Self::parse(input, allow_plus)
+ }
+
+ // Only allow multiple trait references if allow_plus is true.
++ #[doc(hidden)]
+ pub fn parse(input: ParseStream, allow_plus: bool) -> Result<Self> {
+ Ok(TypeTraitObject {
+ dyn_token: input.parse()?,
+@@ -910,7 +855,8 @@ pub mod parsing {
+
+ impl Parse for TypeParen {
+ fn parse(input: ParseStream) -> Result<Self> {
+- Self::parse(input, false)
++ let allow_plus = false;
++ Self::parse(input, allow_plus)
+ }
+ }
+
+@@ -926,22 +872,72 @@ pub mod parsing {
+
+ impl Parse for BareFnArg {
+ fn parse(input: ParseStream) -> Result<Self> {
+- Ok(BareFnArg {
+- attrs: input.call(Attribute::parse_outer)?,
+- name: {
+- if (input.peek(Ident) || input.peek(Token![_]))
+- && input.peek2(Token![:])
+- && !input.peek2(Token![::])
+- {
+- let name = input.call(Ident::parse_any)?;
+- let colon: Token![:] = input.parse()?;
+- Some((name, colon))
+- } else {
+- None
+- }
+- },
+- ty: input.parse()?,
+- })
++ let allow_mut_self = false;
++ parse_bare_fn_arg(input, allow_mut_self).map(Option::unwrap)
++ }
++ }
++
++ fn parse_bare_fn_arg(
++ input: ParseStream,
++ mut allow_mut_self: bool,
++ ) -> Result<Option<BareFnArg>> {
++ let mut has_mut_self = false;
++ let arg = BareFnArg {
++ attrs: input.call(Attribute::parse_outer)?,
++ name: {
++ if (input.peek(Ident) || input.peek(Token![_]) || input.peek(Token![self]))
++ && input.peek2(Token![:])
++ && !input.peek2(Token![::])
++ {
++ let name = input.call(Ident::parse_any)?;
++ let colon: Token![:] = input.parse()?;
++ Some((name, colon))
++ } else if allow_mut_self
++ && input.peek(Token![mut])
++ && input.peek2(Token![self])
++ && input.peek3(Token![:])
++ && !input.peek3(Token![::])
++ {
++ has_mut_self = true;
++ allow_mut_self = false;
++ input.parse::<Token![mut]>()?;
++ input.parse::<Token![self]>()?;
++ input.parse::<Token![:]>()?;
++ None
++ } else {
++ None
++ }
++ },
++ ty: if !has_mut_self && input.peek(Token![...]) {
++ let dot3 = input.parse::<Token![...]>()?;
++ let args = vec![
++ TokenTree::Punct(Punct::new('.', Spacing::Joint)),
++ TokenTree::Punct(Punct::new('.', Spacing::Joint)),
++ TokenTree::Punct(Punct::new('.', Spacing::Alone)),
++ ];
++ let tokens = TokenStream::from_iter(args.into_iter().zip(&dot3.spans).map(
++ |(mut arg, span)| {
++ arg.set_span(*span);
++ arg
++ },
++ ));
++ Type::Verbatim(tokens)
++ } else if allow_mut_self && input.peek(Token![mut]) && input.peek2(Token![self]) {
++ has_mut_self = true;
++ input.parse::<Token![mut]>()?;
++ Type::Path(TypePath {
++ qself: None,
++ path: input.parse::<Token![self]>()?.into(),
++ })
++ } else {
++ input.parse()?
++ },
++ };
++
++ if has_mut_self {
++ Ok(None)
++ } else {
++ Ok(Some(arg))
+ }
+ }
+
+diff --git a/third_party/rust/syn/src/verbatim.rs b/third_party/rust/syn/src/verbatim.rs
+new file mode 100644
+index 0000000000..0686352f7a
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/verbatim.rs
+@@ -0,0 +1,15 @@
++use crate::parse::{ParseBuffer, ParseStream};
++use proc_macro2::TokenStream;
++use std::iter;
++
++pub fn between<'a>(begin: ParseBuffer<'a>, end: ParseStream<'a>) -> TokenStream {
++ let end = end.cursor();
++ let mut cursor = begin.cursor();
++ let mut tokens = TokenStream::new();
++ while cursor != end {
++ let (tt, next) = cursor.token_tree().unwrap();
++ tokens.extend(iter::once(tt));
++ cursor = next;
++ }
++ tokens
++}
+diff --git a/third_party/rust/syn/src/whitespace.rs b/third_party/rust/syn/src/whitespace.rs
+new file mode 100644
+index 0000000000..7be082e1a2
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/src/whitespace.rs
+@@ -0,0 +1,65 @@
++pub fn skip(mut s: &str) -> &str {
++ 'skip: while !s.is_empty() {
++ let byte = s.as_bytes()[0];
++ if byte == b'/' {
++ if s.starts_with("//")
++ && (!s.starts_with("///") || s.starts_with("////"))
++ && !s.starts_with("//!")
++ {
++ if let Some(i) = s.find('\n') {
++ s = &s[i + 1..];
++ continue;
++ } else {
++ return "";
++ }
++ } else if s.starts_with("/**/") {
++ s = &s[4..];
++ continue;
++ } else if s.starts_with("/*")
++ && (!s.starts_with("/**") || s.starts_with("/***"))
++ && !s.starts_with("/*!")
++ {
++ let mut depth = 0;
++ let bytes = s.as_bytes();
++ let mut i = 0;
++ let upper = bytes.len() - 1;
++ while i < upper {
++ if bytes[i] == b'/' && bytes[i + 1] == b'*' {
++ depth += 1;
++ i += 1; // eat '*'
++ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' {
++ depth -= 1;
++ if depth == 0 {
++ s = &s[i + 2..];
++ continue 'skip;
++ }
++ i += 1; // eat '/'
++ }
++ i += 1;
++ }
++ return s;
++ }
++ }
++ match byte {
++ b' ' | 0x09..=0x0d => {
++ s = &s[1..];
++ continue;
++ }
++ b if b <= 0x7f => {}
++ _ => {
++ let ch = s.chars().next().unwrap();
++ if is_whitespace(ch) {
++ s = &s[ch.len_utf8()..];
++ continue;
++ }
++ }
++ }
++ return s;
++ }
++ s
++}
++
++fn is_whitespace(ch: char) -> bool {
++ // Rust treats left-to-right mark and right-to-left mark as whitespace
++ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}'
++}
+diff --git a/third_party/rust/syn/tests/clone.sh b/third_party/rust/syn/tests/clone.sh
+deleted file mode 100755
+index 8e0863cba6..0000000000
+--- mozilla-release/third_party/rust/syn/tests/clone.sh
++++ mozilla-release//dev/null
+@@ -1,16 +0,0 @@
+-#!/bin/bash
+-
+-REV=4560cb830fce63fcffdc4558f4281aaac6a3a1ba
+-
+-set -euo pipefail
+-cd "$(dirname "${BASH_SOURCE[0]}")"
+-mkdir -p rust
+-touch rust/COMMIT
+-
+-if [ "$(cat rust/COMMIT)" != "$REV" ]; then
+- rm -rf rust
+- mkdir rust
+- curl -L "https://github.com/rust-lang/rust/archive/${REV}.tar.gz" \
+- | tar xz --directory rust --strip-components 1
+- echo "$REV" > rust/COMMIT
+-fi
+diff --git a/third_party/rust/syn/tests/common/eq.rs b/third_party/rust/syn/tests/common/eq.rs
+index 13a6c36ae5..7589a07573 100644
+--- mozilla-release/third_party/rust/syn/tests/common/eq.rs
++++ mozilla-release/third_party/rust/syn/tests/common/eq.rs
+@@ -1,36 +1,35 @@
++extern crate rustc_ast;
+ extern crate rustc_data_structures;
++extern crate rustc_span;
+ extern crate rustc_target;
+-extern crate syntax;
+-extern crate syntax_pos;
+
+ use std::mem;
+
+-use self::rustc_data_structures::sync::Lrc;
+-use self::rustc_data_structures::thin_vec::ThinVec;
+-use self::rustc_target::abi::FloatTy;
+-use self::rustc_target::spec::abi::Abi;
+-use self::syntax::ast::{
+- AngleBracketedArgs, AnonConst, Arg, Arm, AsmDialect, AssocTyConstraint, AssocTyConstraintKind,
+- AttrId, AttrStyle, Attribute, BareFnTy, BinOpKind, BindingMode, Block, BlockCheckMode,
+- CaptureBy, Constness, Crate, CrateSugar, Defaultness, EnumDef, Expr, ExprKind, Field, FieldPat,
+- FnDecl, FnHeader, ForeignItem, ForeignItemKind, ForeignMod, FunctionRetTy, GenericArg,
+- GenericArgs, GenericBound, GenericParam, GenericParamKind, Generics, GlobalAsm, Ident,
+- ImplItem, ImplItemKind, ImplPolarity, InlineAsm, InlineAsmOutput, IntTy, IsAsync, IsAuto, Item,
+- ItemKind, Label, Lifetime, Lit, LitIntType, LitKind, Local, Mac, MacDelimiter, MacStmtStyle,
+- MacroDef, MethodSig, Mod, Movability, MutTy, Mutability, NodeId, ParenthesizedArgs, Pat,
+- PatKind, Path, PathSegment, PolyTraitRef, QSelf, RangeEnd, RangeLimits, RangeSyntax, Stmt,
+- StmtKind, StrStyle, StructField, TraitBoundModifier, TraitItem, TraitItemKind,
+- TraitObjectSyntax, TraitRef, Ty, TyKind, UintTy, UnOp, UnsafeSource, Unsafety, UseTree,
+- UseTreeKind, Variant, VariantData, VisibilityKind, WhereBoundPredicate, WhereClause,
+- WhereEqPredicate, WherePredicate, WhereRegionPredicate,
++use rustc_ast::ast::{
++ AngleBracketedArg, AngleBracketedArgs, AnonConst, Arm, AssocItemKind, AssocTyConstraint,
++ AssocTyConstraintKind, Async, AttrId, AttrItem, AttrKind, AttrStyle, Attribute, BareFnTy,
++ BinOpKind, BindingMode, Block, BlockCheckMode, BorrowKind, CaptureBy, Const, Crate, CrateSugar,
++ Defaultness, EnumDef, Expr, ExprKind, Extern, Field, FieldPat, FloatTy, FnDecl, FnHeader,
++ FnRetTy, FnSig, ForeignItemKind, ForeignMod, GenericArg, GenericArgs, GenericBound,
++ GenericParam, GenericParamKind, Generics, GlobalAsm, ImplPolarity, InlineAsm, InlineAsmOperand,
++ InlineAsmOptions, InlineAsmRegOrRegClass, InlineAsmTemplatePiece, IntTy, IsAuto, Item,
++ ItemKind, Label, Lifetime, Lit, LitFloatType, LitIntType, LitKind, LlvmAsmDialect,
++ LlvmInlineAsm, LlvmInlineAsmOutput, Local, MacArgs, MacCall, MacCallStmt, MacDelimiter,
++ MacStmtStyle, MacroDef, Mod, Movability, MutTy, Mutability, NodeId, Param, ParenthesizedArgs,
++ Pat, PatKind, Path, PathSegment, PolyTraitRef, QSelf, RangeEnd, RangeLimits, RangeSyntax, Stmt,
++ StmtKind, StrLit, StrStyle, StructField, TraitBoundModifier, TraitObjectSyntax, TraitRef, Ty,
++ TyKind, UintTy, UnOp, Unsafe, UnsafeSource, UseTree, UseTreeKind, Variant, VariantData,
++ VisibilityKind, WhereBoundPredicate, WhereClause, WhereEqPredicate, WherePredicate,
++ WhereRegionPredicate,
+ };
+-use self::syntax::parse::lexer::comments;
+-use self::syntax::parse::token::{self, DelimToken, Token, TokenKind};
+-use self::syntax::ptr::P;
+-use self::syntax::source_map::Spanned;
+-use self::syntax::symbol::{sym, Symbol};
+-use self::syntax::tokenstream::{DelimSpan, TokenStream, TokenTree};
+-use self::syntax_pos::{Span, SyntaxContext, DUMMY_SP};
++use rustc_ast::ptr::P;
++use rustc_ast::token::{self, CommentKind, DelimToken, Token, TokenKind};
++use rustc_ast::tokenstream::{DelimSpan, TokenStream, TokenTree};
++use rustc_data_structures::sync::Lrc;
++use rustc_data_structures::thin_vec::ThinVec;
++use rustc_span::source_map::Spanned;
++use rustc_span::symbol::Ident;
++use rustc_span::{Span, Symbol, SyntaxContext};
+
+ pub trait SpanlessEq {
+ fn eq(&self, other: &Self) -> bool;
+@@ -86,14 +85,6 @@ impl<A: SpanlessEq, B: SpanlessEq> SpanlessEq for (A, B) {
+ }
+ }
+
+-impl<A: SpanlessEq, B: SpanlessEq, C: SpanlessEq> SpanlessEq for (A, B, C) {
+- fn eq(&self, other: &Self) -> bool {
+- SpanlessEq::eq(&self.0, &other.0)
+- && SpanlessEq::eq(&self.1, &other.1)
+- && SpanlessEq::eq(&self.2, &other.2)
+- }
+-}
+-
+ macro_rules! spanless_eq_true {
+ ($name:ident) => {
+ impl SpanlessEq for $name {
+@@ -126,17 +117,19 @@ spanless_eq_partial_eq!(u16);
+ spanless_eq_partial_eq!(u128);
+ spanless_eq_partial_eq!(usize);
+ spanless_eq_partial_eq!(char);
++spanless_eq_partial_eq!(String);
+ spanless_eq_partial_eq!(Symbol);
+-spanless_eq_partial_eq!(Abi);
++spanless_eq_partial_eq!(CommentKind);
+ spanless_eq_partial_eq!(DelimToken);
++spanless_eq_partial_eq!(InlineAsmOptions);
+
+ macro_rules! spanless_eq_struct {
+ {
+- $name:ident;
++ $name:ident $(<$param:ident>)?;
+ $([$field:ident $other:ident])*
+ $(![$ignore:ident])*
+ } => {
+- impl SpanlessEq for $name {
++ impl $(<$param: SpanlessEq>)* SpanlessEq for $name $(<$param>)* {
+ fn eq(&self, other: &Self) -> bool {
+ let $name { $($field,)* $($ignore: _,)* } = self;
+ let $name { $($field: $other,)* $($ignore: _,)* } = other;
+@@ -146,14 +139,14 @@ macro_rules! spanless_eq_struct {
+ };
+
+ {
+- $name:ident;
++ $name:ident $(<$param:ident>)?;
+ $([$field:ident $other:ident])*
+ $next:ident
+ $($rest:ident)*
+ $(!$ignore:ident)*
+ } => {
+ spanless_eq_struct! {
+- $name;
++ $name $(<$param>)*;
+ $([$field $other])*
+ [$next other]
+ $($rest)*
+@@ -162,14 +155,14 @@ macro_rules! spanless_eq_struct {
+ };
+
+ {
+- $name:ident;
++ $name:ident $(<$param:ident>)?;
+ $([$field:ident $other:ident])*
+ $(![$ignore:ident])*
+ !$next:ident
+ $(!$rest:ident)*
+ } => {
+ spanless_eq_struct! {
+- $name;
++ $name $(<$param>)*;
+ $([$field $other])*
+ $(![$ignore])*
+ ![$next]
+@@ -263,119 +256,131 @@ macro_rules! spanless_eq_enum {
+ };
+ }
+
+-spanless_eq_struct!(AngleBracketedArgs; span args constraints);
++spanless_eq_struct!(AngleBracketedArgs; span args);
+ spanless_eq_struct!(AnonConst; id value);
+-spanless_eq_struct!(Arg; attrs ty pat id span);
+-spanless_eq_struct!(Arm; attrs pats guard body span id);
++spanless_eq_struct!(Arm; attrs pat guard body span id is_placeholder);
+ spanless_eq_struct!(AssocTyConstraint; id ident kind span);
+-spanless_eq_struct!(Attribute; id style path tokens span !is_sugared_doc);
+-spanless_eq_struct!(BareFnTy; unsafety abi generic_params decl);
++spanless_eq_struct!(AttrItem; path args);
++spanless_eq_struct!(Attribute; kind id style span);
++spanless_eq_struct!(BareFnTy; unsafety ext generic_params decl);
+ spanless_eq_struct!(Block; stmts id rules span);
+-spanless_eq_struct!(Crate; module attrs span);
++spanless_eq_struct!(Crate; module attrs span proc_macros);
+ spanless_eq_struct!(EnumDef; variants);
+-spanless_eq_struct!(Expr; id node span attrs);
+-spanless_eq_struct!(Field; ident expr span is_shorthand attrs id);
+-spanless_eq_struct!(FieldPat; ident pat is_shorthand attrs id span);
+-spanless_eq_struct!(FnDecl; inputs output c_variadic);
+-spanless_eq_struct!(FnHeader; constness asyncness unsafety abi);
+-spanless_eq_struct!(ForeignItem; ident attrs node id span vis);
++spanless_eq_struct!(Expr; id kind span attrs !tokens);
++spanless_eq_struct!(Field; attrs id span ident expr is_shorthand is_placeholder);
++spanless_eq_struct!(FieldPat; ident pat is_shorthand attrs id span is_placeholder);
++spanless_eq_struct!(FnDecl; inputs output);
++spanless_eq_struct!(FnHeader; constness asyncness unsafety ext);
++spanless_eq_struct!(FnSig; header decl span);
+ spanless_eq_struct!(ForeignMod; abi items);
+-spanless_eq_struct!(GenericParam; id ident attrs bounds kind);
++spanless_eq_struct!(GenericParam; id ident attrs bounds is_placeholder kind);
+ spanless_eq_struct!(Generics; params where_clause span);
+ spanless_eq_struct!(GlobalAsm; asm);
+-spanless_eq_struct!(ImplItem; id ident vis defaultness attrs generics node span !tokens);
+-spanless_eq_struct!(InlineAsm; asm asm_str_style outputs inputs clobbers volatile alignstack dialect);
+-spanless_eq_struct!(InlineAsmOutput; constraint expr is_rw is_indirect);
+-spanless_eq_struct!(Item; ident attrs id node vis span !tokens);
++spanless_eq_struct!(InlineAsm; template operands options line_spans);
++spanless_eq_struct!(Item<K>; attrs id span vis ident kind !tokens);
+ spanless_eq_struct!(Label; ident);
+ spanless_eq_struct!(Lifetime; id ident);
+-spanless_eq_struct!(Lit; token node span);
++spanless_eq_struct!(Lit; token kind span);
++spanless_eq_struct!(LlvmInlineAsm; asm asm_str_style outputs inputs clobbers volatile alignstack dialect);
++spanless_eq_struct!(LlvmInlineAsmOutput; constraint expr is_rw is_indirect);
+ spanless_eq_struct!(Local; pat ty init id span attrs);
+-spanless_eq_struct!(Mac; path delim tts span prior_type_ascription);
+-spanless_eq_struct!(MacroDef; tokens legacy);
+-spanless_eq_struct!(MethodSig; header decl);
++spanless_eq_struct!(MacCall; path args prior_type_ascription);
++spanless_eq_struct!(MacCallStmt; mac style attrs);
++spanless_eq_struct!(MacroDef; body macro_rules);
+ spanless_eq_struct!(Mod; inner items inline);
+ spanless_eq_struct!(MutTy; ty mutbl);
++spanless_eq_struct!(Param; attrs ty pat id span is_placeholder);
+ spanless_eq_struct!(ParenthesizedArgs; span inputs output);
+-spanless_eq_struct!(Pat; id node span);
++spanless_eq_struct!(Pat; id kind span tokens);
+ spanless_eq_struct!(Path; span segments);
+ spanless_eq_struct!(PathSegment; ident id args);
+ spanless_eq_struct!(PolyTraitRef; bound_generic_params trait_ref span);
+ spanless_eq_struct!(QSelf; ty path_span position);
+-spanless_eq_struct!(Stmt; id node span);
+-spanless_eq_struct!(StructField; span ident vis id ty attrs);
++spanless_eq_struct!(Stmt; id kind span);
++spanless_eq_struct!(StrLit; style symbol suffix span symbol_unescaped);
++spanless_eq_struct!(StructField; attrs id span vis ident ty is_placeholder);
+ spanless_eq_struct!(Token; kind span);
+-spanless_eq_struct!(TraitItem; id ident attrs generics node span !tokens);
+ spanless_eq_struct!(TraitRef; path ref_id);
+-spanless_eq_struct!(Ty; id node span);
++spanless_eq_struct!(Ty; id kind span);
+ spanless_eq_struct!(UseTree; prefix kind span);
+-spanless_eq_struct!(Variant; ident attrs id data disr_expr span);
++spanless_eq_struct!(Variant; attrs id span vis ident data disr_expr is_placeholder);
+ spanless_eq_struct!(WhereBoundPredicate; span bound_generic_params bounded_ty bounds);
+-spanless_eq_struct!(WhereClause; predicates span);
++spanless_eq_struct!(WhereClause; has_where_token predicates span);
+ spanless_eq_struct!(WhereEqPredicate; id span lhs_ty rhs_ty);
+ spanless_eq_struct!(WhereRegionPredicate; span lifetime bounds);
+-spanless_eq_enum!(AsmDialect; Att Intel);
++spanless_eq_enum!(AngleBracketedArg; Arg(0) Constraint(0));
++spanless_eq_enum!(AssocItemKind; Const(0 1 2) Fn(0 1 2 3) TyAlias(0 1 2 3) MacCall(0));
+ spanless_eq_enum!(AssocTyConstraintKind; Equality(ty) Bound(bounds));
++spanless_eq_enum!(Async; Yes(span closure_id return_impl_trait_id) No);
++spanless_eq_enum!(AttrKind; Normal(0) DocComment(0 1));
+ spanless_eq_enum!(AttrStyle; Outer Inner);
+ spanless_eq_enum!(BinOpKind; Add Sub Mul Div Rem And Or BitXor BitAnd BitOr Shl Shr Eq Lt Le Ne Ge Gt);
+ spanless_eq_enum!(BindingMode; ByRef(0) ByValue(0));
+ spanless_eq_enum!(BlockCheckMode; Default Unsafe(0));
++spanless_eq_enum!(BorrowKind; Ref Raw);
+ spanless_eq_enum!(CaptureBy; Value Ref);
+-spanless_eq_enum!(Constness; Const NotConst);
++spanless_eq_enum!(Const; Yes(0) No);
+ spanless_eq_enum!(CrateSugar; PubCrate JustCrate);
+-spanless_eq_enum!(Defaultness; Default Final);
++spanless_eq_enum!(Defaultness; Default(0) Final);
++spanless_eq_enum!(Extern; None Implicit Explicit(0));
+ spanless_eq_enum!(FloatTy; F32 F64);
+-spanless_eq_enum!(ForeignItemKind; Fn(0 1) Static(0 1) Ty Macro(0));
+-spanless_eq_enum!(FunctionRetTy; Default(0) Ty(0));
++spanless_eq_enum!(FnRetTy; Default(0) Ty(0));
++spanless_eq_enum!(ForeignItemKind; Static(0 1 2) Fn(0 1 2 3) TyAlias(0 1 2 3) MacCall(0));
+ spanless_eq_enum!(GenericArg; Lifetime(0) Type(0) Const(0));
+ spanless_eq_enum!(GenericArgs; AngleBracketed(0) Parenthesized(0));
+ spanless_eq_enum!(GenericBound; Trait(0 1) Outlives(0));
+-spanless_eq_enum!(GenericParamKind; Lifetime Type(default) Const(ty));
+-spanless_eq_enum!(ImplItemKind; Const(0 1) Method(0 1) TyAlias(0) OpaqueTy(0) Macro(0));
+-spanless_eq_enum!(ImplPolarity; Positive Negative);
++spanless_eq_enum!(GenericParamKind; Lifetime Type(default) Const(ty kw_span));
++spanless_eq_enum!(ImplPolarity; Positive Negative(0));
++spanless_eq_enum!(InlineAsmRegOrRegClass; Reg(0) RegClass(0));
++spanless_eq_enum!(InlineAsmTemplatePiece; String(0) Placeholder(operand_idx modifier span));
+ spanless_eq_enum!(IntTy; Isize I8 I16 I32 I64 I128);
+-spanless_eq_enum!(IsAsync; Async(closure_id return_impl_trait_id) NotAsync);
+ spanless_eq_enum!(IsAuto; Yes No);
++spanless_eq_enum!(LitFloatType; Suffixed(0) Unsuffixed);
+ spanless_eq_enum!(LitIntType; Signed(0) Unsigned(0) Unsuffixed);
++spanless_eq_enum!(LlvmAsmDialect; Att Intel);
++spanless_eq_enum!(MacArgs; Empty Delimited(0 1 2) Eq(0 1));
+ spanless_eq_enum!(MacDelimiter; Parenthesis Bracket Brace);
+ spanless_eq_enum!(MacStmtStyle; Semicolon Braces NoBraces);
+ spanless_eq_enum!(Movability; Static Movable);
+-spanless_eq_enum!(Mutability; Mutable Immutable);
++spanless_eq_enum!(Mutability; Mut Not);
+ spanless_eq_enum!(RangeEnd; Included(0) Excluded);
+ spanless_eq_enum!(RangeLimits; HalfOpen Closed);
+-spanless_eq_enum!(StmtKind; Local(0) Item(0) Expr(0) Semi(0) Mac(0));
++spanless_eq_enum!(StmtKind; Local(0) Item(0) Expr(0) Semi(0) Empty MacCall(0));
+ spanless_eq_enum!(StrStyle; Cooked Raw(0));
+ spanless_eq_enum!(TokenTree; Token(0) Delimited(0 1 2));
+-spanless_eq_enum!(TraitBoundModifier; None Maybe);
+-spanless_eq_enum!(TraitItemKind; Const(0 1) Method(0 1) Type(0 1) Macro(0));
++spanless_eq_enum!(TraitBoundModifier; None Maybe MaybeConst MaybeConstMaybe);
+ spanless_eq_enum!(TraitObjectSyntax; Dyn None);
+ spanless_eq_enum!(UintTy; Usize U8 U16 U32 U64 U128);
+ spanless_eq_enum!(UnOp; Deref Not Neg);
++spanless_eq_enum!(Unsafe; Yes(0) No);
+ spanless_eq_enum!(UnsafeSource; CompilerGenerated UserProvided);
+-spanless_eq_enum!(Unsafety; Unsafe Normal);
+ spanless_eq_enum!(UseTreeKind; Simple(0 1 2) Nested(0) Glob);
+ spanless_eq_enum!(VariantData; Struct(0 1) Tuple(0 1) Unit(0));
+ spanless_eq_enum!(VisibilityKind; Public Crate(0) Restricted(path id) Inherited);
+ spanless_eq_enum!(WherePredicate; BoundPredicate(0) RegionPredicate(0) EqPredicate(0));
+-spanless_eq_enum!(ExprKind; Box(0) Array(0) Call(0 1) MethodCall(0 1) Tup(0)
++spanless_eq_enum!(ExprKind; Box(0) Array(0) Call(0 1) MethodCall(0 1 2) Tup(0)
+ Binary(0 1 2) Unary(0 1) Lit(0) Cast(0 1) Type(0 1) Let(0 1) If(0 1 2)
+ While(0 1 2) ForLoop(0 1 2 3) Loop(0 1) Match(0 1) Closure(0 1 2 3 4 5)
+- Block(0 1) Async(0 1 2) Await(0) TryBlock(0) Assign(0 1) AssignOp(0 1 2)
+- Field(0 1) Index(0 1) Range(0 1 2) Path(0 1) AddrOf(0 1) Break(0 1)
+- Continue(0) Ret(0) InlineAsm(0) Mac(0) Struct(0 1 2) Repeat(0 1) Paren(0)
+- Try(0) Yield(0) Err);
+-spanless_eq_enum!(ItemKind; ExternCrate(0) Use(0) Static(0 1 2) Const(0 1)
+- Fn(0 1 2 3) Mod(0) ForeignMod(0) GlobalAsm(0) TyAlias(0 1) OpaqueTy(0 1)
+- Enum(0 1) Struct(0 1) Union(0 1) Trait(0 1 2 3 4) TraitAlias(0 1)
+- Impl(0 1 2 3 4 5 6) Mac(0) MacroDef(0));
++ Block(0 1) Async(0 1 2) Await(0) TryBlock(0) Assign(0 1 2) AssignOp(0 1 2)
++ Field(0 1) Index(0 1) Range(0 1 2) Path(0 1) AddrOf(0 1 2) Break(0 1)
++ Continue(0) Ret(0) InlineAsm(0) LlvmInlineAsm(0) MacCall(0) Struct(0 1 2)
++ Repeat(0 1) Paren(0) Try(0) Yield(0) Err);
++spanless_eq_enum!(InlineAsmOperand; In(reg expr) Out(reg late expr)
++ InOut(reg late expr) SplitInOut(reg late in_expr out_expr) Const(expr)
++ Sym(expr));
++spanless_eq_enum!(ItemKind; ExternCrate(0) Use(0) Static(0 1 2) Const(0 1 2)
++ Fn(0 1 2 3) Mod(0) ForeignMod(0) GlobalAsm(0) TyAlias(0 1 2 3) Enum(0 1)
++ Struct(0 1) Union(0 1) Trait(0 1 2 3 4) TraitAlias(0 1)
++ Impl(unsafety polarity defaultness constness generics of_trait self_ty items)
++ MacCall(0) MacroDef(0));
+ spanless_eq_enum!(LitKind; Str(0 1) ByteStr(0) Byte(0) Char(0) Int(0 1)
+- Float(0 1) FloatUnsuffixed(0) Bool(0) Err(0));
++ Float(0 1) Bool(0) Err(0));
+ spanless_eq_enum!(PatKind; Wild Ident(0 1 2) Struct(0 1 2) TupleStruct(0 1)
+ Or(0) Path(0 1) Tuple(0) Box(0) Ref(0 1) Lit(0) Range(0 1 2) Slice(0) Rest
+- Paren(0) Mac(0));
++ Paren(0) MacCall(0));
+ spanless_eq_enum!(TyKind; Slice(0) Array(0 1) Ptr(0) Rptr(0 1) BareFn(0) Never
+ Tup(0) Path(0 1) TraitObject(0 1) ImplTrait(0 1) Paren(0) Typeof(0) Infer
+- ImplicitSelf Mac(0) Err CVarArgs);
++ ImplicitSelf MacCall(0) Err CVarArgs);
+
+ impl SpanlessEq for Ident {
+ fn eq(&self, other: &Self) -> bool {
+@@ -414,44 +419,20 @@ impl SpanlessEq for TokenKind {
+
+ impl SpanlessEq for TokenStream {
+ fn eq(&self, other: &Self) -> bool {
+- SpanlessEq::eq(&expand_tts(self), &expand_tts(other))
+- }
+-}
+-
+-fn expand_tts(tts: &TokenStream) -> Vec<TokenTree> {
+- let mut tokens = Vec::new();
+- for tt in tts.clone().into_trees() {
+- let c = match tt {
+- TokenTree::Token(Token {
+- kind: TokenKind::DocComment(c),
+- ..
+- }) => c,
+- _ => {
+- tokens.push(tt);
+- continue;
++ let mut this = self.clone().into_trees();
++ let mut other = other.clone().into_trees();
++ loop {
++ let this = match this.next() {
++ None => return other.next().is_none(),
++ Some(val) => val,
++ };
++ let other = match other.next() {
++ None => return false,
++ Some(val) => val,
++ };
++ if !SpanlessEq::eq(&this, &other) {
++ return false;
+ }
+- };
+- let contents = comments::strip_doc_comment_decoration(&c.as_str());
+- let style = comments::doc_comment_style(&c.as_str());
+- tokens.push(TokenTree::token(TokenKind::Pound, DUMMY_SP));
+- if style == AttrStyle::Inner {
+- tokens.push(TokenTree::token(TokenKind::Not, DUMMY_SP));
+ }
+- let lit = token::Lit {
+- kind: token::LitKind::Str,
+- symbol: Symbol::intern(&contents),
+- suffix: None,
+- };
+- let tts = vec![
+- TokenTree::token(TokenKind::Ident(sym::doc, false), DUMMY_SP),
+- TokenTree::token(TokenKind::Eq, DUMMY_SP),
+- TokenTree::token(TokenKind::Literal(lit), DUMMY_SP),
+- ];
+- tokens.push(TokenTree::Delimited(
+- DelimSpan::dummy(),
+- DelimToken::Bracket,
+- tts.into_iter().collect::<TokenStream>().into(),
+- ));
+ }
+- tokens
+ }
+diff --git a/third_party/rust/syn/tests/common/mod.rs b/third_party/rust/syn/tests/common/mod.rs
+index 8b784beed7..a1cc80a16f 100644
+--- mozilla-release/third_party/rust/syn/tests/common/mod.rs
++++ mozilla-release/third_party/rust/syn/tests/common/mod.rs
+@@ -1,5 +1,6 @@
+ #![allow(dead_code)]
+
++use rayon::ThreadPoolBuilder;
+ use std::env;
+
+ pub mod eq;
+@@ -12,3 +13,15 @@ pub fn abort_after() -> usize {
+ Err(_) => usize::max_value(),
+ }
+ }
++
++/// Configure Rayon threadpool.
++pub fn rayon_init() {
++ let stack_size = match env::var("RUST_MIN_STACK") {
++ Ok(s) => s.parse().expect("failed to parse RUST_MIN_STACK"),
++ Err(_) => 20 * 1024 * 1024,
++ };
++ ThreadPoolBuilder::new()
++ .stack_size(stack_size)
++ .build_global()
++ .unwrap();
++}
+diff --git a/third_party/rust/syn/tests/common/parse.rs b/third_party/rust/syn/tests/common/parse.rs
+index 41d192f6fb..192828fedd 100644
+--- mozilla-release/third_party/rust/syn/tests/common/parse.rs
++++ mozilla-release/third_party/rust/syn/tests/common/parse.rs
+@@ -1,20 +1,20 @@
+-extern crate proc_macro2;
+-extern crate syn;
+-extern crate syntax;
+-extern crate syntax_pos;
++extern crate rustc_ast;
++extern crate rustc_expand;
++extern crate rustc_parse as parse;
++extern crate rustc_session;
++extern crate rustc_span;
+
+-use self::syntax::ast;
+-use self::syntax::parse::{self, ParseSess};
+-use self::syntax::ptr::P;
+-use self::syntax::source_map::FilePathMapping;
+-use self::syntax_pos::FileName;
++use rustc_ast::ast;
++use rustc_ast::ptr::P;
++use rustc_session::parse::ParseSess;
++use rustc_span::source_map::FilePathMapping;
++use rustc_span::FileName;
+
+ use std::panic;
+
+-pub fn libsyntax_expr(input: &str) -> Option<P<ast::Expr>> {
++pub fn librustc_expr(input: &str) -> Option<P<ast::Expr>> {
+ match panic::catch_unwind(|| {
+ let sess = ParseSess::new(FilePathMapping::empty());
+- sess.span_diagnostic.set_continue_after_error(false);
+ let e = parse::new_parser_from_source_str(
+ &sess,
+ FileName::Custom("test_precedence".to_string()),
+@@ -32,7 +32,7 @@ pub fn libsyntax_expr(input: &str) -> Option<P<ast::Expr>> {
+ Ok(Some(e)) => Some(e),
+ Ok(None) => None,
+ Err(_) => {
+- errorf!("libsyntax panicked\n");
++ errorf!("librustc panicked\n");
+ None
+ }
+ }
+diff --git a/third_party/rust/syn/tests/debug/gen.rs b/third_party/rust/syn/tests/debug/gen.rs
+index 8450c09ecf..85a1a39079 100644
+--- mozilla-release/third_party/rust/syn/tests/debug/gen.rs
++++ mozilla-release/third_party/rust/syn/tests/debug/gen.rs
+@@ -2,7 +2,7 @@
+ // It is not intended for manual editing.
+
+ use super::{Lite, RefCast};
+-use std::fmt::{self, Debug};
++use std::fmt::{self, Debug, Display};
+ impl Debug for Lite<syn::Abi> {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ let _val = &self.value;
+@@ -1039,9 +1039,9 @@ impl Debug for Lite<syn::Expr> {
+ }
+ syn::Expr::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ syn::Expr::While(_val) => {
+@@ -2116,9 +2116,9 @@ impl Debug for Lite<syn::ForeignItem> {
+ }
+ syn::ForeignItem::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ _ => unreachable!(),
+@@ -2432,9 +2432,9 @@ impl Debug for Lite<syn::ImplItem> {
+ }
+ syn::ImplItem::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ _ => unreachable!(),
+@@ -2940,9 +2940,9 @@ impl Debug for Lite<syn::Item> {
+ }
+ syn::Item::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ _ => unreachable!(),
+@@ -3437,9 +3437,9 @@ impl Debug for Lite<syn::Lit> {
+ }
+ syn::Lit::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ }
+@@ -3878,9 +3878,9 @@ impl Debug for Lite<syn::Pat> {
+ }
+ syn::Pat::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ syn::Pat::Wild(_val) => {
+@@ -4674,9 +4674,9 @@ impl Debug for Lite<syn::TraitItem> {
+ }
+ syn::TraitItem::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ _ => unreachable!(),
+@@ -5040,9 +5040,9 @@ impl Debug for Lite<syn::Type> {
+ }
+ syn::Type::Verbatim(_val) => {
+ formatter.write_str("Verbatim")?;
+- formatter.write_str("(")?;
+- Debug::fmt(Lite(_val), formatter)?;
+- formatter.write_str(")")?;
++ formatter.write_str("(`")?;
++ Display::fmt(_val, formatter)?;
++ formatter.write_str("`)")?;
+ Ok(())
+ }
+ _ => unreachable!(),
+diff --git a/third_party/rust/syn/tests/debug/mod.rs b/third_party/rust/syn/tests/debug/mod.rs
+index c1180532ec..cefebacef7 100644
+--- mozilla-release/third_party/rust/syn/tests/debug/mod.rs
++++ mozilla-release/third_party/rust/syn/tests/debug/mod.rs
+@@ -1,10 +1,7 @@
+-extern crate proc_macro2;
+-extern crate ref_cast;
+-
+ mod gen;
+
+-use self::proc_macro2::{Ident, Literal, TokenStream};
+-use self::ref_cast::RefCast;
++use proc_macro2::{Ident, Literal, TokenStream};
++use ref_cast::RefCast;
+ use std::fmt::{self, Debug};
+ use std::ops::Deref;
+ use syn::punctuated::Punctuated;
+@@ -66,7 +63,15 @@ impl Debug for Lite<Literal> {
+
+ impl Debug for Lite<TokenStream> {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- write!(formatter, "`{}`", self.value)
++ let string = self.value.to_string();
++ if string.len() <= 80 {
++ write!(formatter, "TokenStream(`{}`)", self.value)
++ } else {
++ formatter
++ .debug_tuple("TokenStream")
++ .field(&format_args!("`{}`", string))
++ .finish()
++ }
+ }
+ }
+
+diff --git a/third_party/rust/syn/tests/features/error.rs b/third_party/rust/syn/tests/features/error.rs
+deleted file mode 100644
+index 10ac88965d..0000000000
+--- mozilla-release/third_party/rust/syn/tests/features/error.rs
++++ mozilla-release//dev/null
+@@ -1 +0,0 @@
+-"Hello! You want: cargo test --release --all-features"
+diff --git a/third_party/rust/syn/tests/features/mod.rs b/third_party/rust/syn/tests/features/mod.rs
+deleted file mode 100644
+index 83fbe13e7e..0000000000
+--- mozilla-release/third_party/rust/syn/tests/features/mod.rs
++++ mozilla-release//dev/null
+@@ -1,22 +0,0 @@
+-#[allow(unused_macros)]
+-macro_rules! hide_from_rustfmt {
+- ($mod:item) => {
+- $mod
+- };
+-}
+-
+-#[cfg(not(all(
+- feature = "derive",
+- feature = "full",
+- feature = "parsing",
+- feature = "printing",
+- feature = "visit",
+- feature = "visit-mut",
+- feature = "fold",
+- feature = "clone-impls",
+- feature = "extra-traits",
+- feature = "proc-macro",
+-)))]
+-hide_from_rustfmt! {
+- mod error;
+-}
+diff --git a/third_party/rust/syn/tests/macros/mod.rs b/third_party/rust/syn/tests/macros/mod.rs
+index c72fd01058..3994615fc4 100644
+--- mozilla-release/third_party/rust/syn/tests/macros/mod.rs
++++ mozilla-release/third_party/rust/syn/tests/macros/mod.rs
+@@ -1,5 +1,3 @@
+-extern crate proc_macro2;
+-
+ #[path = "../debug/mod.rs"]
+ pub mod debug;
+
+@@ -42,18 +40,18 @@ macro_rules! snapshot_impl {
+ (($expr:ident) as $t:ty, @$snapshot:literal) => {
+ let $expr = crate::macros::Tokens::parse::<$t>($expr).unwrap();
+ let debug = crate::macros::debug::Lite(&$expr);
+- insta::assert_debug_snapshot_matches!(debug, @$snapshot);
++ insta::assert_debug_snapshot!(debug, @$snapshot);
+ };
+ (($($expr:tt)*) as $t:ty, @$snapshot:literal) => {{
+ let syntax_tree = crate::macros::Tokens::parse::<$t>($($expr)*).unwrap();
+ let debug = crate::macros::debug::Lite(&syntax_tree);
+- insta::assert_debug_snapshot_matches!(debug, @$snapshot);
++ insta::assert_debug_snapshot!(debug, @$snapshot);
+ syntax_tree
+ }};
+ (($($expr:tt)*) , @$snapshot:literal) => {{
+ let syntax_tree = $($expr)*;
+ let debug = crate::macros::debug::Lite(&syntax_tree);
+- insta::assert_debug_snapshot_matches!(debug, @$snapshot);
++ insta::assert_debug_snapshot!(debug, @$snapshot);
+ syntax_tree
+ }};
+ (($($expr:tt)*) $next:tt $($rest:tt)*) => {
+diff --git a/third_party/rust/syn/tests/repo/mod.rs b/third_party/rust/syn/tests/repo/mod.rs
+index c22cb03758..1d3e1f0e74 100644
+--- mozilla-release/third_party/rust/syn/tests/repo/mod.rs
++++ mozilla-release/third_party/rust/syn/tests/repo/mod.rs
+@@ -1,8 +1,37 @@
+-extern crate walkdir;
++mod progress;
+
+-use std::process::Command;
++use self::progress::Progress;
++use anyhow::Result;
++use flate2::read::GzDecoder;
++use std::fs;
++use std::path::Path;
++use tar::Archive;
++use walkdir::DirEntry;
+
+-use self::walkdir::DirEntry;
++const REVISION: &str = "792c645ca7d11a8d254df307d019c5bf01445c37";
++
++#[rustfmt::skip]
++static EXCLUDE: &[&str] = &[
++ // Compile-fail expr parameter in const generic position: f::<1 + 2>()
++ "test/ui/const-generics/const-expression-parameter.rs",
++
++ // Deprecated anonymous parameter syntax in traits
++ "test/ui/issues/issue-13105.rs",
++ "test/ui/issues/issue-13775.rs",
++ "test/ui/issues/issue-34074.rs",
++ "test/ui/proc-macro/trait-fn-args-2015.rs",
++
++ // Not actually test cases
++ "test/rustdoc-ui/test-compile-fail2.rs",
++ "test/rustdoc-ui/test-compile-fail3.rs",
++ "test/ui/include-single-expr-helper.rs",
++ "test/ui/include-single-expr-helper-1.rs",
++ "test/ui/issues/auxiliary/issue-21146-inc.rs",
++ "test/ui/json-bom-plus-crlf-multifile-aux.rs",
++ "test/ui/lint/expansion-time-include.rs",
++ "test/ui/macros/auxiliary/macro-comma-support.rs",
++ "test/ui/macros/auxiliary/macro-include-items-expr.rs",
++];
+
+ pub fn base_dir_filter(entry: &DirEntry) -> bool {
+ let path = entry.path();
+@@ -12,49 +41,95 @@ pub fn base_dir_filter(entry: &DirEntry) -> bool {
+ if path.extension().map(|e| e != "rs").unwrap_or(true) {
+ return false;
+ }
+- let path_string = path.to_string_lossy();
+- let path_string = if cfg!(windows) {
+- path_string.replace('\\', "/").into()
++
++ let mut path_string = path.to_string_lossy();
++ if cfg!(windows) {
++ path_string = path_string.replace('\\', "/").into();
++ }
++ let path = if let Some(path) = path_string.strip_prefix("tests/rust/src/") {
++ path
++ } else if let Some(path) = path_string.strip_prefix("tests/rust/library/") {
++ path
+ } else {
+- path_string
++ panic!("unexpected path in Rust dist: {}", path_string);
+ };
++
+ // TODO assert that parsing fails on the parse-fail cases
+- if path_string.starts_with("tests/rust/src/test/parse-fail")
+- || path_string.starts_with("tests/rust/src/test/compile-fail")
+- || path_string.starts_with("tests/rust/src/test/rustfix")
++ if path.starts_with("test/parse-fail")
++ || path.starts_with("test/compile-fail")
++ || path.starts_with("test/rustfix")
+ {
+ return false;
+ }
+
+- if path_string.starts_with("tests/rust/src/test/ui") {
+- let stderr_path = path.with_extension("stderr");
++ if path.starts_with("test/ui") {
++ let stderr_path = entry.path().with_extension("stderr");
+ if stderr_path.exists() {
+ // Expected to fail in some way
+ return false;
+ }
+ }
+
+- match path_string.as_ref() {
+- // Deprecated placement syntax
+- "tests/rust/src/test/ui/obsolete-in-place/bad.rs" |
+- // Deprecated anonymous parameter syntax in traits
+- "tests/rust/src/test/ui/error-codes/e0119/auxiliary/issue-23563-a.rs" |
+- "tests/rust/src/test/ui/issues/issue-13105.rs" |
+- "tests/rust/src/test/ui/issues/issue-13775.rs" |
+- "tests/rust/src/test/ui/issues/issue-34074.rs" |
+- // Deprecated await macro syntax
+- "tests/rust/src/test/ui/async-await/await-macro.rs" |
+- // 2015-style dyn that libsyntax rejects
+- "tests/rust/src/test/ui/dyn-keyword/dyn-2015-no-warnings-without-lints.rs" |
+- // not actually test cases
+- "tests/rust/src/test/ui/macros/auxiliary/macro-comma-support.rs" |
+- "tests/rust/src/test/ui/macros/auxiliary/macro-include-items-expr.rs" |
+- "tests/rust/src/test/ui/issues/auxiliary/issue-21146-inc.rs" => false,
+- _ => true,
++ !EXCLUDE.contains(&path)
++}
++
++#[allow(dead_code)]
++pub fn edition(path: &Path) -> &'static str {
++ if path.ends_with("dyn-2015-no-warnings-without-lints.rs") {
++ "2015"
++ } else {
++ "2018"
+ }
+ }
+
+ pub fn clone_rust() {
+- let result = Command::new("tests/clone.sh").status().unwrap();
+- assert!(result.success());
++ let needs_clone = match fs::read_to_string("tests/rust/COMMIT") {
++ Err(_) => true,
++ Ok(contents) => contents.trim() != REVISION,
++ };
++ if needs_clone {
++ download_and_unpack().unwrap();
++ }
++ let mut missing = String::new();
++ let test_src = Path::new("tests/rust/src");
++ for exclude in EXCLUDE {
++ if !test_src.join(exclude).exists() {
++ missing += "\ntests/rust/src/";
++ missing += exclude;
++ }
++ }
++ if !missing.is_empty() {
++ panic!("excluded test file does not exist:{}\n", missing);
++ }
++}
++
++fn download_and_unpack() -> Result<()> {
++ let url = format!(
++ "https://github.com/rust-lang/rust/archive/{}.tar.gz",
++ REVISION
++ );
++ let response = reqwest::blocking::get(&url)?.error_for_status()?;
++ let progress = Progress::new(response);
++ let decoder = GzDecoder::new(progress);
++ let mut archive = Archive::new(decoder);
++ let prefix = format!("rust-{}", REVISION);
++
++ let tests_rust = Path::new("tests/rust");
++ if tests_rust.exists() {
++ fs::remove_dir_all(tests_rust)?;
++ }
++
++ for entry in archive.entries()? {
++ let mut entry = entry?;
++ let path = entry.path()?;
++ if path == Path::new("pax_global_header") {
++ continue;
++ }
++ let relative = path.strip_prefix(&prefix)?;
++ let out = tests_rust.join(relative);
++ entry.unpack(&out)?;
++ }
++
++ fs::write("tests/rust/COMMIT", REVISION)?;
++ Ok(())
+ }
+diff --git a/third_party/rust/syn/tests/repo/progress.rs b/third_party/rust/syn/tests/repo/progress.rs
+new file mode 100644
+index 0000000000..28c8a44b12
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/repo/progress.rs
+@@ -0,0 +1,37 @@
++use std::io::{Read, Result};
++use std::time::{Duration, Instant};
++
++pub struct Progress<R> {
++ bytes: usize,
++ tick: Instant,
++ stream: R,
++}
++
++impl<R> Progress<R> {
++ pub fn new(stream: R) -> Self {
++ Progress {
++ bytes: 0,
++ tick: Instant::now() + Duration::from_millis(2000),
++ stream,
++ }
++ }
++}
++
++impl<R: Read> Read for Progress<R> {
++ fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
++ let num = self.stream.read(buf)?;
++ self.bytes += num;
++ let now = Instant::now();
++ if now > self.tick {
++ self.tick = now + Duration::from_millis(500);
++ errorf!("downloading... {} bytes\n", self.bytes);
++ }
++ Ok(num)
++ }
++}
++
++impl<R> Drop for Progress<R> {
++ fn drop(&mut self) {
++ errorf!("done ({} bytes)\n", self.bytes);
++ }
++}
+diff --git a/third_party/rust/syn/tests/test_asyncness.rs b/third_party/rust/syn/tests/test_asyncness.rs
+index f868fbcc20..0efef5976f 100644
+--- mozilla-release/third_party/rust/syn/tests/test_asyncness.rs
++++ mozilla-release/third_party/rust/syn/tests/test_asyncness.rs
+@@ -1,7 +1,3 @@
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -12,16 +8,16 @@ fn test_async_fn() {
+ let input = "async fn process() {}";
+
+ snapshot!(input as Item, @r###"
+- â‹®Item::Fn {
+- â‹® vis: Inherited,
+- â‹® sig: Signature {
+- â‹® asyncness: Some,
+- â‹® ident: "process",
+- â‹® generics: Generics,
+- â‹® output: Default,
+- â‹® },
+- â‹® block: Block,
+- â‹®}
++ Item::Fn {
++ vis: Inherited,
++ sig: Signature {
++ asyncness: Some,
++ ident: "process",
++ generics: Generics,
++ output: Default,
++ },
++ block: Block,
++ }
+ "###);
+ }
+
+@@ -30,12 +26,12 @@ fn test_async_closure() {
+ let input = "async || {}";
+
+ snapshot!(input as Expr, @r###"
+- â‹®Expr::Closure {
+- â‹® asyncness: Some,
+- â‹® output: Default,
+- â‹® body: Expr::Block {
+- â‹® block: Block,
+- â‹® },
+- â‹®}
++ Expr::Closure {
++ asyncness: Some,
++ output: Default,
++ body: Expr::Block {
++ block: Block,
++ },
++ }
+ "###);
+ }
+diff --git a/third_party/rust/syn/tests/test_attribute.rs b/third_party/rust/syn/tests/test_attribute.rs
+index aff6294fc3..c26bd090ec 100644
+--- mozilla-release/third_party/rust/syn/tests/test_attribute.rs
++++ mozilla-release/third_party/rust/syn/tests/test_attribute.rs
+@@ -1,7 +1,3 @@
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -13,14 +9,14 @@ fn test_meta_item_word() {
+ let meta = test("#[foo]");
+
+ snapshot!(meta, @r###"
+- â‹®Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹®})
++ Path(Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ })
+ "###);
+ }
+
+@@ -29,17 +25,17 @@ fn test_meta_item_name_value() {
+ let meta = test("#[foo = 5]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+ }
+
+@@ -48,37 +44,37 @@ fn test_meta_item_bool_value() {
+ let meta = test("#[foo = true]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: Lit::Bool {
+- â‹® value: true,
+- â‹® },
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ lit: Lit::Bool {
++ value: true,
++ },
++ }
+ "###);
+
+ let meta = test("#[foo = false]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: Lit::Bool {
+- â‹® value: false,
+- â‹® },
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ lit: Lit::Bool {
++ value: false,
++ },
++ }
+ "###);
+ }
+
+@@ -87,19 +83,19 @@ fn test_meta_item_list_lit() {
+ let meta = test("#[foo(5)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Lit(5),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Lit(5),
++ ],
++ }
+ "###);
+ }
+
+@@ -108,26 +104,26 @@ fn test_meta_item_list_word() {
+ let meta = test("#[foo(bar)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "bar",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "bar",
++ arguments: None,
++ },
++ ],
++ })),
++ ],
++ }
+ "###);
+ }
+
+@@ -136,29 +132,29 @@ fn test_meta_item_list_name_value() {
+ let meta = test("#[foo(bar = 5)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "bar",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹® }),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "bar",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }),
++ ],
++ }
+ "###);
+ }
+
+@@ -167,31 +163,31 @@ fn test_meta_item_list_bool_value() {
+ let meta = test("#[foo(bar = true)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "bar",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: Lit::Bool {
+- â‹® value: true,
+- â‹® },
+- â‹® }),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "bar",
++ arguments: None,
++ },
++ ],
++ },
++ lit: Lit::Bool {
++ value: true,
++ },
++ }),
++ ],
++ }
+ "###);
+ }
+
+@@ -200,68 +196,68 @@ fn test_meta_item_multiple() {
+ let meta = test("#[foo(word, name = 5, list(name2 = 6), word2)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹® }),
+- â‹® Meta(Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "list",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 6,
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word",
++ arguments: None,
++ },
++ ],
++ })),
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }),
++ Meta(Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "list",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name2",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 6,
++ }),
++ ],
++ }),
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word2",
++ arguments: None,
++ },
++ ],
++ })),
++ ],
++ }
+ "###);
+ }
+
+@@ -270,21 +266,63 @@ fn test_bool_lit() {
+ let meta = test("#[foo(true)]");
+
+ snapshot!(meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Lit(Lit::Bool {
+- â‹® value: true,
+- â‹® }),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Lit(Lit::Bool {
++ value: true,
++ }),
++ ],
++ }
++ "###);
++}
++
++#[test]
++fn test_negative_lit() {
++ let meta = test("#[form(min = -1, max = 200)]");
++
++ snapshot!(meta, @r###"
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "form",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "min",
++ arguments: None,
++ },
++ ],
++ },
++ lit: -1,
++ }),
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "max",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 200,
++ }),
++ ],
++ }
+ "###);
+ }
+
+diff --git a/third_party/rust/syn/tests/test_derive_input.rs b/third_party/rust/syn/tests/test_derive_input.rs
+index de68240166..bf1ebdb67d 100644
+--- mozilla-release/third_party/rust/syn/tests/test_derive_input.rs
++++ mozilla-release/third_party/rust/syn/tests/test_derive_input.rs
+@@ -1,8 +1,3 @@
+-extern crate quote;
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -16,15 +11,15 @@ fn test_unit() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "Unit",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "Unit",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -39,105 +34,105 @@ fn test_struct() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "derive",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: `( Debug , Clone )`,
+- â‹® },
+- â‹® ],
+- â‹® vis: Visibility::Public,
+- â‹® ident: "Item",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Fields::Named {
+- â‹® named: [
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ident: Some("ident"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Ident",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ident: Some("attrs"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Vec",
+- â‹® arguments: PathArguments::AngleBracketed {
+- â‹® args: [
+- â‹® Type(Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Attribute",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® }),
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹®}
++ DeriveInput {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "derive",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(`(Debug , Clone)`),
++ },
++ ],
++ vis: Visibility::Public,
++ ident: "Item",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Named {
++ named: [
++ Field {
++ vis: Visibility::Public,
++ ident: Some("ident"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Ident",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ Field {
++ vis: Visibility::Public,
++ ident: Some("attrs"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Vec",
++ arguments: PathArguments::AngleBracketed {
++ args: [
++ Type(Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Attribute",
++ arguments: None,
++ },
++ ],
++ },
++ }),
++ ],
++ },
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ },
++ }
+ "###);
+
+ snapshot!(input.attrs[0].parse_meta().unwrap(), @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "derive",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Debug",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Clone",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "derive",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "Debug",
++ arguments: None,
++ },
++ ],
++ })),
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "Clone",
++ arguments: None,
++ },
++ ],
++ })),
++ ],
++ }
+ "###);
+ }
+
+@@ -151,46 +146,46 @@ fn test_union() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "MaybeUninit",
+- â‹® generics: Generics {
+- â‹® lt_token: Some,
+- â‹® params: [
+- â‹® Type(TypeParam {
+- â‹® ident: "T",
+- â‹® }),
+- â‹® ],
+- â‹® gt_token: Some,
+- â‹® },
+- â‹® data: Data::Union {
+- â‹® fields: FieldsNamed {
+- â‹® named: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ident: Some("uninit"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Tuple,
+- â‹® },
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ident: Some("value"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "T",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "MaybeUninit",
++ generics: Generics {
++ lt_token: Some,
++ params: [
++ Type(TypeParam {
++ ident: "T",
++ }),
++ ],
++ gt_token: Some,
++ },
++ data: Data::Union {
++ fields: FieldsNamed {
++ named: [
++ Field {
++ vis: Inherited,
++ ident: Some("uninit"),
++ colon_token: Some,
++ ty: Type::Tuple,
++ },
++ Field {
++ vis: Inherited,
++ ident: Some("value"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "T",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ },
++ }
+ "###);
+ }
+
+@@ -212,118 +207,118 @@ fn test_enum() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "doc",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: `= r" See the std::result module documentation for details."`,
+- â‹® },
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "must_use",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: ``,
+- â‹® },
+- â‹® ],
+- â‹® vis: Visibility::Public,
+- â‹® ident: "Result",
+- â‹® generics: Generics {
+- â‹® lt_token: Some,
+- â‹® params: [
+- â‹® Type(TypeParam {
+- â‹® ident: "T",
+- â‹® }),
+- â‹® Type(TypeParam {
+- â‹® ident: "E",
+- â‹® }),
+- â‹® ],
+- â‹® gt_token: Some,
+- â‹® },
+- â‹® data: Data::Enum {
+- â‹® variants: [
+- â‹® Variant {
+- â‹® ident: "Ok",
+- â‹® fields: Fields::Unnamed {
+- â‹® unnamed: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "T",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® Variant {
+- â‹® ident: "Err",
+- â‹® fields: Fields::Unnamed {
+- â‹® unnamed: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "E",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® Variant {
+- â‹® ident: "Surprise",
+- â‹® fields: Unit,
+- â‹® discriminant: Some(Expr::Lit {
+- â‹® lit: 0isize,
+- â‹® }),
+- â‹® },
+- â‹® Variant {
+- â‹® ident: "ProcMacroHack",
+- â‹® fields: Unit,
+- â‹® discriminant: Some(Expr::Field {
+- â‹® base: Expr::Tuple {
+- â‹® elems: [
+- â‹® Expr::Lit {
+- â‹® lit: 0,
+- â‹® },
+- â‹® Expr::Lit {
+- â‹® lit: "data",
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® member: Unnamed(Index {
+- â‹® index: 0,
+- â‹® }),
+- â‹® }),
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹®}
++ DeriveInput {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "doc",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(`= r" See the std::result module documentation for details."`),
++ },
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "must_use",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ vis: Visibility::Public,
++ ident: "Result",
++ generics: Generics {
++ lt_token: Some,
++ params: [
++ Type(TypeParam {
++ ident: "T",
++ }),
++ Type(TypeParam {
++ ident: "E",
++ }),
++ ],
++ gt_token: Some,
++ },
++ data: Data::Enum {
++ variants: [
++ Variant {
++ ident: "Ok",
++ fields: Fields::Unnamed {
++ unnamed: [
++ Field {
++ vis: Inherited,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "T",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ },
++ Variant {
++ ident: "Err",
++ fields: Fields::Unnamed {
++ unnamed: [
++ Field {
++ vis: Inherited,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "E",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ },
++ Variant {
++ ident: "Surprise",
++ fields: Unit,
++ discriminant: Some(Expr::Lit {
++ lit: 0isize,
++ }),
++ },
++ Variant {
++ ident: "ProcMacroHack",
++ fields: Unit,
++ discriminant: Some(Expr::Field {
++ base: Expr::Tuple {
++ elems: [
++ Expr::Lit {
++ lit: 0,
++ },
++ Expr::Lit {
++ lit: "data",
++ },
++ ],
++ },
++ member: Unnamed(Index {
++ index: 0,
++ }),
++ }),
++ },
++ ],
++ },
++ }
+ "###);
+
+ let meta_items: Vec<_> = input
+@@ -333,27 +328,27 @@ fn test_enum() {
+ .collect();
+
+ snapshot!(meta_items, @r###"
+- â‹®[
+- â‹® Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "doc",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: " See the std::result module documentation for details.",
+- â‹® },
+- â‹® Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "must_use",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® }),
+- â‹®]
++ [
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "doc",
++ arguments: None,
++ },
++ ],
++ },
++ lit: " See the std::result module documentation for details.",
++ },
++ Path(Path {
++ segments: [
++ PathSegment {
++ ident: "must_use",
++ arguments: None,
++ },
++ ],
++ }),
++ ]
+ "###);
+ }
+
+@@ -366,34 +361,34 @@ fn test_attr_with_path() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® leading_colon: Some,
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "attr_args",
+- â‹® arguments: None,
+- â‹® },
+- â‹® PathSegment {
+- â‹® ident: "identity",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: `fn main ( ) { assert_eq ! ( foo ( ) , "Hello, world!" ) ; }`,
+- â‹® },
+- â‹® ],
+- â‹® vis: Inherited,
+- â‹® ident: "Dummy",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ leading_colon: Some,
++ segments: [
++ PathSegment {
++ ident: "attr_args",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "identity",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(`fn main () { assert_eq ! (foo () , "Hello, world!") ; }`),
++ },
++ ],
++ vis: Inherited,
++ ident: "Dummy",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ assert!(input.attrs[0].parse_meta().is_err());
+@@ -407,29 +402,29 @@ fn test_attr_with_non_mod_style_path() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "inert",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: `< T >`,
+- â‹® },
+- â‹® ],
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "inert",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(`< T >`),
++ },
++ ],
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ assert!(input.attrs[0].parse_meta().is_err());
+@@ -443,48 +438,48 @@ fn test_attr_with_mod_style_path_with_self() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® PathSegment {
+- â‹® ident: "self",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: ``,
+- â‹® },
+- â‹® ],
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "self",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ snapshot!(input.attrs[0].parse_meta().unwrap(), @r###"
+- â‹®Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® PathSegment {
+- â‹® ident: "self",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹®})
++ Path(Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "self",
++ arguments: None,
++ },
++ ],
++ })
+ "###);
+ }
+
+@@ -496,55 +491,55 @@ fn test_pub_restricted() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Visibility::Restricted {
+- â‹® in_token: Some,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "m",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ident: "Z",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Fields::Unnamed {
+- â‹® unnamed: [
+- â‹® Field {
+- â‹® vis: Visibility::Restricted {
+- â‹® in_token: Some,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "m",
+- â‹® arguments: None,
+- â‹® },
+- â‹® PathSegment {
+- â‹® ident: "n",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "u8",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Visibility::Restricted {
++ in_token: Some,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "m",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ident: "Z",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Unnamed {
++ unnamed: [
++ Field {
++ vis: Visibility::Restricted {
++ in_token: Some,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "m",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "n",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "u8",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -555,15 +550,15 @@ fn test_vis_crate() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Visibility::Crate,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Visibility::Crate,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -574,24 +569,24 @@ fn test_pub_restricted_crate() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Visibility::Restricted {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "crate",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Visibility::Restricted {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "crate",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -602,24 +597,24 @@ fn test_pub_restricted_super() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Visibility::Restricted {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "super",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Visibility::Restricted {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "super",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -630,25 +625,25 @@ fn test_pub_restricted_in_super() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Visibility::Restricted {
+- â‹® in_token: Some,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "super",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Visibility::Restricted {
++ in_token: Some,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "super",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+
+@@ -659,15 +654,15 @@ fn test_fields_on_unit_struct() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ let data = match input.data {
+@@ -688,47 +683,47 @@ fn test_fields_on_named_struct() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Fields::Named {
+- â‹® named: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ident: Some("foo"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "i32",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ident: Some("bar"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "String",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Named {
++ named: [
++ Field {
++ vis: Inherited,
++ ident: Some("foo"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "i32",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ Field {
++ vis: Visibility::Public,
++ ident: Some("bar"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "String",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ },
++ }
+ "###);
+
+ let data = match input.data {
+@@ -737,38 +732,38 @@ fn test_fields_on_named_struct() {
+ };
+
+ snapshot!(data.fields.into_iter().collect::<Vec<_>>(), @r###"
+- â‹®[
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ident: Some("foo"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "i32",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ident: Some("bar"),
+- â‹® colon_token: Some,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "String",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹®]
++ [
++ Field {
++ vis: Inherited,
++ ident: Some("foo"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "i32",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ Field {
++ vis: Visibility::Public,
++ ident: Some("bar"),
++ colon_token: Some,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "String",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ]
+ "###);
+ }
+
+@@ -779,44 +774,44 @@ fn test_fields_on_tuple_struct() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Fields::Unnamed {
+- â‹® unnamed: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "i32",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "String",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Unnamed {
++ unnamed: [
++ Field {
++ vis: Inherited,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "i32",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ Field {
++ vis: Visibility::Public,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "String",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ let data = match input.data {
+@@ -825,34 +820,34 @@ fn test_fields_on_tuple_struct() {
+ };
+
+ snapshot!(data.fields.iter().collect::<Vec<_>>(), @r###"
+- â‹®[
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "i32",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® Field {
+- â‹® vis: Visibility::Public,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "String",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹®]
++ [
++ Field {
++ vis: Inherited,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "i32",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ Field {
++ vis: Visibility::Public,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "String",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ]
+ "###);
+ }
+
+@@ -864,34 +859,34 @@ fn test_ambiguous_crate() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics,
+- â‹® data: Data::Struct {
+- â‹® fields: Fields::Unnamed {
+- â‹® unnamed: [
+- â‹® Field {
+- â‹® vis: Inherited,
+- â‹® ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "crate",
+- â‹® arguments: None,
+- â‹® },
+- â‹® PathSegment {
+- â‹® ident: "X",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Unnamed {
++ unnamed: [
++ Field {
++ vis: Inherited,
++ ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "crate",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "X",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ ],
++ },
++ semi_token: Some,
++ },
++ }
+ "###);
+ }
+diff --git a/third_party/rust/syn/tests/test_expr.rs b/third_party/rust/syn/tests/test_expr.rs
+index c8a11cec2c..b2b65a254f 100644
+--- mozilla-release/third_party/rust/syn/tests/test_expr.rs
++++ mozilla-release/third_party/rust/syn/tests/test_expr.rs
+@@ -1,40 +1,302 @@
+-extern crate proc_macro2;
+-extern crate syn;
+-
+ #[macro_use]
+ mod macros;
+
+-use std::str::FromStr;
+-
+-use proc_macro2::TokenStream;
++use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
++use quote::quote;
++use std::iter::FromIterator;
+ use syn::{Expr, ExprRange};
+
+ #[test]
+ fn test_expr_parse() {
+- let code = "..100u32";
+- let tt = TokenStream::from_str(code).unwrap();
+- let expr: Expr = syn::parse2(tt.clone()).unwrap();
+- let expr_range: ExprRange = syn::parse2(tt).unwrap();
+- assert_eq!(expr, Expr::Range(expr_range));
++ let tokens = quote!(..100u32);
++ snapshot!(tokens as Expr, @r###"
++ Expr::Range {
++ limits: HalfOpen,
++ to: Some(Expr::Lit {
++ lit: 100u32,
++ }),
++ }
++ "###);
++
++ let tokens = quote!(..100u32);
++ snapshot!(tokens as ExprRange, @r###"
++ ExprRange {
++ limits: HalfOpen,
++ to: Some(Expr::Lit {
++ lit: 100u32,
++ }),
++ }
++ "###);
+ }
+
+ #[test]
+ fn test_await() {
+ // Must not parse as Expr::Field.
+- let expr = syn::parse_str::<Expr>("fut.await").unwrap();
+-
+- snapshot!(expr, @r###"
+- â‹®Expr::Await {
+- â‹® base: Expr::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "fut",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹®}
++ let tokens = quote!(fut.await);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Await {
++ base: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "fut",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ }
++ "###);
++}
++
++#[rustfmt::skip]
++#[test]
++fn test_tuple_multi_index() {
++ for &input in &[
++ "tuple.0.0",
++ "tuple .0.0",
++ "tuple. 0.0",
++ "tuple.0 .0",
++ "tuple.0. 0",
++ "tuple . 0 . 0",
++ ] {
++ snapshot!(input as Expr, @r###"
++ Expr::Field {
++ base: Expr::Field {
++ base: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "tuple",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ member: Unnamed(Index {
++ index: 0,
++ }),
++ },
++ member: Unnamed(Index {
++ index: 0,
++ }),
++ }
++ "###);
++ }
++
++ for tokens in vec![
++ quote!(tuple.0.0),
++ quote!(tuple .0.0),
++ quote!(tuple. 0.0),
++ quote!(tuple.0 .0),
++ quote!(tuple.0. 0),
++ quote!(tuple . 0 . 0),
++ ] {
++ snapshot!(tokens as Expr, @r###"
++ Expr::Field {
++ base: Expr::Field {
++ base: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "tuple",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ member: Unnamed(Index {
++ index: 0,
++ }),
++ },
++ member: Unnamed(Index {
++ index: 0,
++ }),
++ }
++ "###);
++ }
++}
++
++#[test]
++fn test_macro_variable_func() {
++ // mimics the token stream corresponding to `$fn()`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { f })),
++ TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
++ ]);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Call {
++ func: Expr::Group {
++ expr: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "f",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ }
++ "###);
++
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Punct(Punct::new('#', Spacing::Alone)),
++ TokenTree::Group(Group::new(Delimiter::Bracket, quote! { outside })),
++ TokenTree::Group(Group::new(Delimiter::None, quote! { #[inside] f })),
++ TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
++ ]);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Call {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "outside",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ func: Expr::Group {
++ expr: Expr::Path {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "inside",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "f",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ },
++ }
++ "###);
++}
++
++#[test]
++fn test_macro_variable_macro() {
++ // mimics the token stream corresponding to `$macro!()`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { m })),
++ TokenTree::Punct(Punct::new('!', Spacing::Alone)),
++ TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
++ ]);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Macro {
++ mac: Macro {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "m",
++ arguments: None,
++ },
++ ],
++ },
++ delimiter: Paren,
++ tokens: TokenStream(``),
++ },
++ }
++ "###);
++}
++
++#[test]
++fn test_macro_variable_struct() {
++ // mimics the token stream corresponding to `$struct {}`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { S })),
++ TokenTree::Group(Group::new(Delimiter::Brace, TokenStream::new())),
++ ]);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Struct {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "S",
++ arguments: None,
++ },
++ ],
++ },
++ }
++ "###);
++}
++
++#[test]
++fn test_macro_variable_match_arm() {
++ // mimics the token stream corresponding to `match v { _ => $expr }`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Ident(Ident::new("match", Span::call_site())),
++ TokenTree::Ident(Ident::new("v", Span::call_site())),
++ TokenTree::Group(Group::new(
++ Delimiter::Brace,
++ TokenStream::from_iter(vec![
++ TokenTree::Punct(Punct::new('_', Spacing::Alone)),
++ TokenTree::Punct(Punct::new('=', Spacing::Joint)),
++ TokenTree::Punct(Punct::new('>', Spacing::Alone)),
++ TokenTree::Group(Group::new(Delimiter::None, quote! { #[a] () })),
++ ]),
++ )),
++ ]);
++
++ snapshot!(tokens as Expr, @r###"
++ Expr::Match {
++ expr: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "v",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ arms: [
++ Arm {
++ pat: Pat::Wild,
++ body: Expr::Group {
++ expr: Expr::Tuple {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "a",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ },
++ },
++ },
++ ],
++ }
+ "###);
+ }
+diff --git a/third_party/rust/syn/tests/test_generics.rs b/third_party/rust/syn/tests/test_generics.rs
+index 55c79e066b..b29434a147 100644
+--- mozilla-release/third_party/rust/syn/tests/test_generics.rs
++++ mozilla-release/third_party/rust/syn/tests/test_generics.rs
+@@ -1,8 +1,3 @@
+-extern crate quote;
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -16,90 +11,90 @@ fn test_split_for_impl() {
+ };
+
+ snapshot!(input as DeriveInput, @r###"
+- â‹®DeriveInput {
+- â‹® vis: Inherited,
+- â‹® ident: "S",
+- â‹® generics: Generics {
+- â‹® lt_token: Some,
+- â‹® params: [
+- â‹® Lifetime(LifetimeDef {
+- â‹® lifetime: Lifetime {
+- â‹® ident: "a",
+- â‹® },
+- â‹® }),
+- â‹® Lifetime(LifetimeDef {
+- â‹® lifetime: Lifetime {
+- â‹® ident: "b",
+- â‹® },
+- â‹® colon_token: Some,
+- â‹® bounds: [
+- â‹® Lifetime {
+- â‹® ident: "a",
+- â‹® },
+- â‹® ],
+- â‹® }),
+- â‹® Type(TypeParam {
+- â‹® attrs: [
+- â‹® Attribute {
+- â‹® style: Outer,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "may_dangle",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® tokens: ``,
+- â‹® },
+- â‹® ],
+- â‹® ident: "T",
+- â‹® colon_token: Some,
+- â‹® bounds: [
+- â‹® Lifetime(Lifetime {
+- â‹® ident: "a",
+- â‹® }),
+- â‹® ],
+- â‹® eq_token: Some,
+- â‹® default: Some(Type::Tuple),
+- â‹® }),
+- â‹® ],
+- â‹® gt_token: Some,
+- â‹® where_clause: Some(WhereClause {
+- â‹® predicates: [
+- â‹® Type(PredicateType {
+- â‹® bounded_ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "T",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® bounds: [
+- â‹® Trait(TraitBound {
+- â‹® modifier: None,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Debug",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® },
+- â‹® data: Data::Struct {
+- â‹® fields: Unit,
+- â‹® semi_token: Some,
+- â‹® },
+- â‹®}
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics {
++ lt_token: Some,
++ params: [
++ Lifetime(LifetimeDef {
++ lifetime: Lifetime {
++ ident: "a",
++ },
++ }),
++ Lifetime(LifetimeDef {
++ lifetime: Lifetime {
++ ident: "b",
++ },
++ colon_token: Some,
++ bounds: [
++ Lifetime {
++ ident: "a",
++ },
++ ],
++ }),
++ Type(TypeParam {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "may_dangle",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ ident: "T",
++ colon_token: Some,
++ bounds: [
++ Lifetime(Lifetime {
++ ident: "a",
++ }),
++ ],
++ eq_token: Some,
++ default: Some(Type::Tuple),
++ }),
++ ],
++ gt_token: Some,
++ where_clause: Some(WhereClause {
++ predicates: [
++ Type(PredicateType {
++ bounded_ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "T",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ bounds: [
++ Trait(TraitBound {
++ modifier: None,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Debug",
++ arguments: None,
++ },
++ ],
++ },
++ }),
++ ],
++ }),
++ ],
++ }),
++ },
++ data: Data::Struct {
++ fields: Unit,
++ semi_token: Some,
++ },
++ }
+ "###);
+
+ let generics = input.generics;
+@@ -131,46 +126,46 @@ fn test_split_for_impl() {
+ fn test_ty_param_bound() {
+ let tokens = quote!('a);
+ snapshot!(tokens as TypeParamBound, @r###"
+- â‹®Lifetime(Lifetime {
+- â‹® ident: "a",
+- â‹®})
++ Lifetime(Lifetime {
++ ident: "a",
++ })
+ "###);
+
+ let tokens = quote!('_);
+ snapshot!(tokens as TypeParamBound, @r###"
+- â‹®Lifetime(Lifetime {
+- â‹® ident: "_",
+- â‹®})
++ Lifetime(Lifetime {
++ ident: "_",
++ })
+ "###);
+
+ let tokens = quote!(Debug);
+ snapshot!(tokens as TypeParamBound, @r###"
+- â‹®Trait(TraitBound {
+- â‹® modifier: None,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Debug",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹®})
++ Trait(TraitBound {
++ modifier: None,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Debug",
++ arguments: None,
++ },
++ ],
++ },
++ })
+ "###);
+
+ let tokens = quote!(?Sized);
+ snapshot!(tokens as TypeParamBound, @r###"
+- â‹®Trait(TraitBound {
+- â‹® modifier: Maybe,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Sized",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹®})
++ Trait(TraitBound {
++ modifier: Maybe,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Sized",
++ arguments: None,
++ },
++ ],
++ },
++ })
+ "###);
+ }
+
+@@ -187,76 +182,76 @@ fn test_fn_precedence_in_where_clause() {
+ };
+
+ snapshot!(input as ItemFn, @r###"
+- â‹®ItemFn {
+- â‹® vis: Inherited,
+- â‹® sig: Signature {
+- â‹® ident: "f",
+- â‹® generics: Generics {
+- â‹® lt_token: Some,
+- â‹® params: [
+- â‹® Type(TypeParam {
+- â‹® ident: "G",
+- â‹® }),
+- â‹® ],
+- â‹® gt_token: Some,
+- â‹® where_clause: Some(WhereClause {
+- â‹® predicates: [
+- â‹® Type(PredicateType {
+- â‹® bounded_ty: Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "G",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® bounds: [
+- â‹® Trait(TraitBound {
+- â‹® modifier: None,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "FnOnce",
+- â‹® arguments: PathArguments::Parenthesized {
+- â‹® output: Type(
+- â‹® Type::Path {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "i32",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® },
+- â‹® ),
+- â‹® },
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® }),
+- â‹® Trait(TraitBound {
+- â‹® modifier: None,
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "Send",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® },
+- â‹® output: Default,
+- â‹® },
+- â‹® block: Block,
+- â‹®}
++ ItemFn {
++ vis: Inherited,
++ sig: Signature {
++ ident: "f",
++ generics: Generics {
++ lt_token: Some,
++ params: [
++ Type(TypeParam {
++ ident: "G",
++ }),
++ ],
++ gt_token: Some,
++ where_clause: Some(WhereClause {
++ predicates: [
++ Type(PredicateType {
++ bounded_ty: Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "G",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ bounds: [
++ Trait(TraitBound {
++ modifier: None,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "FnOnce",
++ arguments: PathArguments::Parenthesized {
++ output: Type(
++ Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "i32",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ ),
++ },
++ },
++ ],
++ },
++ }),
++ Trait(TraitBound {
++ modifier: None,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "Send",
++ arguments: None,
++ },
++ ],
++ },
++ }),
++ ],
++ }),
++ ],
++ }),
++ },
++ output: Default,
++ },
++ block: Block,
++ }
+ "###);
+
+ let where_clause = input.sig.generics.where_clause.as_ref().unwrap();
+@@ -270,7 +265,7 @@ fn test_fn_precedence_in_where_clause() {
+ assert_eq!(predicate.bounds.len(), 2, "{:#?}", predicate.bounds);
+
+ let first_bound = &predicate.bounds[0];
+- assert_eq!(quote!(#first_bound).to_string(), "FnOnce ( ) -> i32");
++ assert_eq!(quote!(#first_bound).to_string(), "FnOnce () -> i32");
+
+ let second_bound = &predicate.bounds[1];
+ assert_eq!(quote!(#second_bound).to_string(), "Send");
+diff --git a/third_party/rust/syn/tests/test_grouping.rs b/third_party/rust/syn/tests/test_grouping.rs
+index 1558a47b4b..a0fe716390 100644
+--- mozilla-release/third_party/rust/syn/tests/test_grouping.rs
++++ mozilla-release/third_party/rust/syn/tests/test_grouping.rs
+@@ -1,8 +1,3 @@
+-extern crate proc_macro2;
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -28,31 +23,31 @@ fn test_grouping() {
+ TokenTree::Literal(Literal::i32_suffixed(4)),
+ ]);
+
+- assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32");
++ assert_eq!(tokens.to_string(), "1i32 + 2i32 + 3i32 * 4i32");
+
+ snapshot!(tokens as Expr, @r###"
+- â‹®Expr::Binary {
+- â‹® left: Expr::Lit {
+- â‹® lit: 1i32,
+- â‹® },
+- â‹® op: Add,
+- â‹® right: Expr::Binary {
+- â‹® left: Expr::Group {
+- â‹® expr: Expr::Binary {
+- â‹® left: Expr::Lit {
+- â‹® lit: 2i32,
+- â‹® },
+- â‹® op: Add,
+- â‹® right: Expr::Lit {
+- â‹® lit: 3i32,
+- â‹® },
+- â‹® },
+- â‹® },
+- â‹® op: Mul,
+- â‹® right: Expr::Lit {
+- â‹® lit: 4i32,
+- â‹® },
+- â‹® },
+- â‹®}
++ Expr::Binary {
++ left: Expr::Lit {
++ lit: 1i32,
++ },
++ op: Add,
++ right: Expr::Binary {
++ left: Expr::Group {
++ expr: Expr::Binary {
++ left: Expr::Lit {
++ lit: 2i32,
++ },
++ op: Add,
++ right: Expr::Lit {
++ lit: 3i32,
++ },
++ },
++ },
++ op: Mul,
++ right: Expr::Lit {
++ lit: 4i32,
++ },
++ },
++ }
+ "###);
+ }
+diff --git a/third_party/rust/syn/tests/test_ident.rs b/third_party/rust/syn/tests/test_ident.rs
+index bec00a70c9..ee01bfcc9f 100644
+--- mozilla-release/third_party/rust/syn/tests/test_ident.rs
++++ mozilla-release/third_party/rust/syn/tests/test_ident.rs
+@@ -1,8 +1,3 @@
+-extern crate proc_macro2;
+-extern crate syn;
+-
+-mod features;
+-
+ use proc_macro2::{Ident, Span, TokenStream};
+ use std::str::FromStr;
+ use syn::Result;
+diff --git a/third_party/rust/syn/tests/test_item.rs b/third_party/rust/syn/tests/test_item.rs
+new file mode 100644
+index 0000000000..74ac4baec6
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_item.rs
+@@ -0,0 +1,45 @@
++#[macro_use]
++mod macros;
++
++use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree};
++use quote::quote;
++use std::iter::FromIterator;
++use syn::Item;
++
++#[test]
++fn test_macro_variable_attr() {
++ // mimics the token stream corresponding to `$attr fn f() {}`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { #[test] })),
++ TokenTree::Ident(Ident::new("fn", Span::call_site())),
++ TokenTree::Ident(Ident::new("f", Span::call_site())),
++ TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
++ TokenTree::Group(Group::new(Delimiter::Brace, TokenStream::new())),
++ ]);
++
++ snapshot!(tokens as Item, @r###"
++ Item::Fn {
++ attrs: [
++ Attribute {
++ style: Outer,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "test",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(``),
++ },
++ ],
++ vis: Inherited,
++ sig: Signature {
++ ident: "f",
++ generics: Generics,
++ output: Default,
++ },
++ block: Block,
++ }
++ "###);
++}
+diff --git a/third_party/rust/syn/tests/test_iterators.rs b/third_party/rust/syn/tests/test_iterators.rs
+index 1cf7157e6f..2c8359c157 100644
+--- mozilla-release/third_party/rust/syn/tests/test_iterators.rs
++++ mozilla-release/third_party/rust/syn/tests/test_iterators.rs
+@@ -1,10 +1,5 @@
+ use syn::punctuated::{Pair, Punctuated};
+-
+-extern crate quote;
+-#[macro_use]
+-extern crate syn;
+-
+-mod features;
++use syn::Token;
+
+ #[macro_use]
+ mod macros;
+diff --git a/third_party/rust/syn/tests/test_lit.rs b/third_party/rust/syn/tests/test_lit.rs
+index 1e8f49d19b..e995f2287f 100644
+--- mozilla-release/third_party/rust/syn/tests/test_lit.rs
++++ mozilla-release/third_party/rust/syn/tests/test_lit.rs
+@@ -1,13 +1,11 @@
+-extern crate proc_macro2;
+-extern crate quote;
+-extern crate syn;
++#[macro_use]
++mod macros;
+
+-mod features;
+-
+-use proc_macro2::{TokenStream, TokenTree};
++use proc_macro2::{Delimiter, Group, Literal, Span, TokenStream, TokenTree};
+ use quote::ToTokens;
++use std::iter::FromIterator;
+ use std::str::FromStr;
+-use syn::Lit;
++use syn::{Lit, LitFloat, LitInt};
+
+ fn lit(s: &str) -> Lit {
+ match TokenStream::from_str(s)
+@@ -50,6 +48,9 @@ fn strings() {
+ "contains\nnewlinesescaped newlines",
+ );
+ test_string("r\"raw\nstring\\\nhere\"", "raw\nstring\\\nhere");
++ test_string("\"...\"q", "...");
++ test_string("r\"...\"q", "...");
++ test_string("r##\"...\"##q", "...");
+ }
+
+ #[test]
+@@ -79,6 +80,9 @@ fn byte_strings() {
+ b"contains\nnewlinesescaped newlines",
+ );
+ test_byte_string("br\"raw\nstring\\\nhere\"", b"raw\nstring\\\nhere");
++ test_byte_string("b\"...\"q", b"...");
++ test_byte_string("br\"...\"q", b"...");
++ test_byte_string("br##\"...\"##q", b"...");
+ }
+
+ #[test]
+@@ -100,6 +104,7 @@ fn bytes() {
+ test_byte("b'\\t'", b'\t');
+ test_byte("b'\\''", b'\'');
+ test_byte("b'\"'", b'"');
++ test_byte("b'a'q", b'a');
+ }
+
+ #[test]
+@@ -125,6 +130,7 @@ fn chars() {
+ test_char("'\\''", '\'');
+ test_char("'\"'", '"');
+ test_char("'\\u{1F415}'", '\u{1F415}');
++ test_char("'a'q", 'a');
+ }
+
+ #[test]
+@@ -185,4 +191,59 @@ fn floats() {
+ test_float("5.5e12", 5.5e12, "");
+ test_float("1.0__3e-12", 1.03e-12, "");
+ test_float("1.03e+12", 1.03e12, "");
++ test_float("9e99e99", 9e99, "e99");
++}
++
++#[test]
++fn negative() {
++ let span = Span::call_site();
++ assert_eq!("-1", LitInt::new("-1", span).to_string());
++ assert_eq!("-1i8", LitInt::new("-1i8", span).to_string());
++ assert_eq!("-1i16", LitInt::new("-1i16", span).to_string());
++ assert_eq!("-1i32", LitInt::new("-1i32", span).to_string());
++ assert_eq!("-1i64", LitInt::new("-1i64", span).to_string());
++ assert_eq!("-1.5", LitFloat::new("-1.5", span).to_string());
++ assert_eq!("-1.5f32", LitFloat::new("-1.5f32", span).to_string());
++ assert_eq!("-1.5f64", LitFloat::new("-1.5f64", span).to_string());
++}
++
++#[test]
++fn suffix() {
++ fn get_suffix(token: &str) -> String {
++ let lit = syn::parse_str::<Lit>(token).unwrap();
++ match lit {
++ Lit::Str(lit) => lit.suffix().to_owned(),
++ Lit::ByteStr(lit) => lit.suffix().to_owned(),
++ Lit::Byte(lit) => lit.suffix().to_owned(),
++ Lit::Char(lit) => lit.suffix().to_owned(),
++ Lit::Int(lit) => lit.suffix().to_owned(),
++ Lit::Float(lit) => lit.suffix().to_owned(),
++ _ => unimplemented!(),
++ }
++ }
++
++ assert_eq!(get_suffix("\"\"s"), "s");
++ assert_eq!(get_suffix("r\"\"r"), "r");
++ assert_eq!(get_suffix("b\"\"b"), "b");
++ assert_eq!(get_suffix("br\"\"br"), "br");
++ assert_eq!(get_suffix("r#\"\"#r"), "r");
++ assert_eq!(get_suffix("'c'c"), "c");
++ assert_eq!(get_suffix("b'b'b"), "b");
++ assert_eq!(get_suffix("1i32"), "i32");
++ assert_eq!(get_suffix("1_i32"), "i32");
++ assert_eq!(get_suffix("1.0f32"), "f32");
++ assert_eq!(get_suffix("1.0_f32"), "f32");
++}
++
++#[test]
++fn test_deep_group_empty() {
++ let tokens = TokenStream::from_iter(vec![TokenTree::Group(Group::new(
++ Delimiter::None,
++ TokenStream::from_iter(vec![TokenTree::Group(Group::new(
++ Delimiter::None,
++ TokenStream::from_iter(vec![TokenTree::Literal(Literal::string("hi"))]),
++ ))]),
++ ))]);
++
++ snapshot!(tokens as Lit, @r#""hi""# );
+ }
+diff --git a/third_party/rust/syn/tests/test_meta.rs b/third_party/rust/syn/tests/test_meta.rs
+index 547472d6f4..d37dda948a 100644
+--- mozilla-release/third_party/rust/syn/tests/test_meta.rs
++++ mozilla-release/third_party/rust/syn/tests/test_meta.rs
+@@ -1,7 +1,3 @@
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -12,14 +8,14 @@ fn test_parse_meta_item_word() {
+ let input = "hello";
+
+ snapshot!(input as Meta, @r###"
+- â‹®Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "hello",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹®})
++ Path(Path {
++ segments: [
++ PathSegment {
++ ident: "hello",
++ arguments: None,
++ },
++ ],
++ })
+ "###);
+ }
+
+@@ -29,31 +25,31 @@ fn test_parse_meta_name_value() {
+ let (inner, meta) = (input, input);
+
+ snapshot!(inner as MetaNameValue, @r###"
+- â‹®MetaNameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ MetaNameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ snapshot!(meta as Meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ assert_eq!(meta, inner.into());
+@@ -65,31 +61,31 @@ fn test_parse_meta_name_value_with_keyword() {
+ let (inner, meta) = (input, input);
+
+ snapshot!(inner as MetaNameValue, @r###"
+- â‹®MetaNameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "static",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ MetaNameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "static",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ snapshot!(meta as Meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "static",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "static",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ assert_eq!(meta, inner.into());
+@@ -101,31 +97,31 @@ fn test_parse_meta_name_value_with_bool() {
+ let (inner, meta) = (input, input);
+
+ snapshot!(inner as MetaNameValue, @r###"
+- â‹®MetaNameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "true",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ MetaNameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "true",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ snapshot!(meta as Meta, @r###"
+- â‹®Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "true",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹®}
++ Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "true",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }
+ "###);
+
+ assert_eq!(meta, inner.into());
+@@ -137,35 +133,35 @@ fn test_parse_meta_item_list_lit() {
+ let (inner, meta) = (input, input);
+
+ snapshot!(inner as MetaList, @r###"
+- â‹®MetaList {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Lit(5),
+- â‹® ],
+- â‹®}
++ MetaList {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Lit(5),
++ ],
++ }
+ "###);
+
+ snapshot!(meta as Meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Lit(5),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Lit(5),
++ ],
++ }
+ "###);
+
+ assert_eq!(meta, inner.into());
+@@ -177,133 +173,133 @@ fn test_parse_meta_item_multiple() {
+ let (inner, meta) = (input, input);
+
+ snapshot!(inner as MetaList, @r###"
+- â‹®MetaList {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹® }),
+- â‹® Meta(Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "list",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 6,
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® ],
+- â‹®}
++ MetaList {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word",
++ arguments: None,
++ },
++ ],
++ })),
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }),
++ Meta(Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "list",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name2",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 6,
++ }),
++ ],
++ }),
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word2",
++ arguments: None,
++ },
++ ],
++ })),
++ ],
++ }
+ "###);
+
+ snapshot!(meta as Meta, @r###"
+- â‹®Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "foo",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 5,
+- â‹® }),
+- â‹® Meta(Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "list",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 6,
+- â‹® }),
+- â‹® ],
+- â‹® }),
+- â‹® Meta(Path(Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "word2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® })),
+- â‹® ],
+- â‹®}
++ Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "foo",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word",
++ arguments: None,
++ },
++ ],
++ })),
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 5,
++ }),
++ Meta(Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "list",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name2",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 6,
++ }),
++ ],
++ }),
++ Meta(Path(Path {
++ segments: [
++ PathSegment {
++ ident: "word2",
++ arguments: None,
++ },
++ ],
++ })),
++ ],
++ }
+ "###);
+
+ assert_eq!(meta, inner.into());
+@@ -316,28 +312,28 @@ fn test_parse_nested_meta() {
+
+ let input = "list(name2 = 6)";
+ snapshot!(input as NestedMeta, @r###"
+- â‹®Meta(Meta::List {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "list",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® nested: [
+- â‹® Meta(Meta::NameValue {
+- â‹® path: Path {
+- â‹® segments: [
+- â‹® PathSegment {
+- â‹® ident: "name2",
+- â‹® arguments: None,
+- â‹® },
+- â‹® ],
+- â‹® },
+- â‹® lit: 6,
+- â‹® }),
+- â‹® ],
+- â‹®})
++ Meta(Meta::List {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "list",
++ arguments: None,
++ },
++ ],
++ },
++ nested: [
++ Meta(Meta::NameValue {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "name2",
++ arguments: None,
++ },
++ ],
++ },
++ lit: 6,
++ }),
++ ],
++ })
+ "###);
+ }
+diff --git a/third_party/rust/syn/tests/test_parse_buffer.rs b/third_party/rust/syn/tests/test_parse_buffer.rs
+index f09495187f..57a3c7c38c 100644
+--- mozilla-release/third_party/rust/syn/tests/test_parse_buffer.rs
++++ mozilla-release/third_party/rust/syn/tests/test_parse_buffer.rs
+@@ -1,7 +1,7 @@
+-#[macro_use]
+-extern crate syn;
+-
++use proc_macro2::{Delimiter, Group, Punct, Spacing, TokenStream, TokenTree};
++use std::iter::FromIterator;
+ use syn::parse::{discouraged::Speculative, Parse, ParseStream, Parser, Result};
++use syn::{parenthesized, Token};
+
+ #[test]
+ #[should_panic(expected = "Fork was not derived from the advancing parse stream")]
+@@ -53,3 +53,38 @@ fn smuggled_speculative_cursor_into_brackets() {
+
+ syn::parse_str::<BreakRules>("()").unwrap();
+ }
++
++#[test]
++fn trailing_empty_none_group() {
++ fn parse(input: ParseStream) -> Result<()> {
++ input.parse::<Token![+]>()?;
++
++ let content;
++ parenthesized!(content in input);
++ content.parse::<Token![+]>()?;
++
++ Ok(())
++ }
++
++ // `+ ( + <Ø Ø> ) <Ø <Ø Ø> Ø>`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Punct(Punct::new('+', Spacing::Alone)),
++ TokenTree::Group(Group::new(
++ Delimiter::Parenthesis,
++ TokenStream::from_iter(vec![
++ TokenTree::Punct(Punct::new('+', Spacing::Alone)),
++ TokenTree::Group(Group::new(Delimiter::None, TokenStream::new())),
++ ]),
++ )),
++ TokenTree::Group(Group::new(Delimiter::None, TokenStream::new())),
++ TokenTree::Group(Group::new(
++ Delimiter::None,
++ TokenStream::from_iter(vec![TokenTree::Group(Group::new(
++ Delimiter::None,
++ TokenStream::new(),
++ ))]),
++ )),
++ ]);
++
++ parse.parse2(tokens).unwrap();
++}
+diff --git a/third_party/rust/syn/tests/test_parse_stream.rs b/third_party/rust/syn/tests/test_parse_stream.rs
+new file mode 100644
+index 0000000000..76bd065777
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_parse_stream.rs
+@@ -0,0 +1,12 @@
++use syn::ext::IdentExt;
++use syn::parse::ParseStream;
++use syn::{Ident, Token};
++
++#[test]
++fn test_peek() {
++ let _ = |input: ParseStream| {
++ let _ = input.peek(Ident);
++ let _ = input.peek(Ident::peek_any);
++ let _ = input.peek(Token![::]);
++ };
++}
+diff --git a/third_party/rust/syn/tests/test_pat.rs b/third_party/rust/syn/tests/test_pat.rs
+index 1343aa646f..73388dd79d 100644
+--- mozilla-release/third_party/rust/syn/tests/test_pat.rs
++++ mozilla-release/third_party/rust/syn/tests/test_pat.rs
+@@ -1,10 +1,5 @@
+-extern crate quote;
+-extern crate syn;
+-
+-mod features;
+-
+ use quote::quote;
+-use syn::Pat;
++use syn::{Item, Pat, Stmt};
+
+ #[test]
+ fn test_pat_ident() {
+@@ -21,3 +16,23 @@ fn test_pat_path() {
+ value => panic!("expected PatPath, got {:?}", value),
+ }
+ }
++
++#[test]
++fn test_leading_vert() {
++ // https://github.com/rust-lang/rust/blob/1.43.0/src/test/ui/or-patterns/remove-leading-vert.rs
++
++ syn::parse_str::<Item>("fn f() {}").unwrap();
++ syn::parse_str::<Item>("fn fun1(| A: E) {}").unwrap_err();
++ syn::parse_str::<Item>("fn fun2(|| A: E) {}").unwrap_err();
++
++ syn::parse_str::<Stmt>("let | () = ();").unwrap();
++ syn::parse_str::<Stmt>("let (| A): E;").unwrap_err();
++ syn::parse_str::<Stmt>("let (|| A): (E);").unwrap_err();
++ syn::parse_str::<Stmt>("let (| A,): (E,);").unwrap_err();
++ syn::parse_str::<Stmt>("let [| A]: [E; 1];").unwrap_err();
++ syn::parse_str::<Stmt>("let [|| A]: [E; 1];").unwrap_err();
++ syn::parse_str::<Stmt>("let TS(| A): TS;").unwrap_err();
++ syn::parse_str::<Stmt>("let TS(|| A): TS;").unwrap_err();
++ syn::parse_str::<Stmt>("let NS { f: | A }: NS;").unwrap_err();
++ syn::parse_str::<Stmt>("let NS { f: || A }: NS;").unwrap_err();
++}
+diff --git a/third_party/rust/syn/tests/test_path.rs b/third_party/rust/syn/tests/test_path.rs
+new file mode 100644
+index 0000000000..2ce12066f5
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_path.rs
+@@ -0,0 +1,52 @@
++#[macro_use]
++mod macros;
++
++use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
++use quote::quote;
++use std::iter::FromIterator;
++use syn::{Expr, Type};
++
++#[test]
++fn parse_interpolated_leading_component() {
++ // mimics the token stream corresponding to `$mod::rest`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { first })),
++ TokenTree::Punct(Punct::new(':', Spacing::Joint)),
++ TokenTree::Punct(Punct::new(':', Spacing::Alone)),
++ TokenTree::Ident(Ident::new("rest", Span::call_site())),
++ ]);
++
++ snapshot!(tokens.clone() as Expr, @r###"
++ Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "first",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "rest",
++ arguments: None,
++ },
++ ],
++ },
++ }
++ "###);
++
++ snapshot!(tokens as Type, @r###"
++ Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "first",
++ arguments: None,
++ },
++ PathSegment {
++ ident: "rest",
++ arguments: None,
++ },
++ ],
++ },
++ }
++ "###);
++}
+diff --git a/third_party/rust/syn/tests/test_precedence.rs b/third_party/rust/syn/tests/test_precedence.rs
+index 53ee66e372..a586b3fe48 100644
+--- mozilla-release/third_party/rust/syn/tests/test_precedence.rs
++++ mozilla-release/third_party/rust/syn/tests/test_precedence.rs
+@@ -4,35 +4,26 @@
+
+ //! The tests in this module do the following:
+ //!
+-//! 1. Parse a given expression in both `syn` and `libsyntax`.
++//! 1. Parse a given expression in both `syn` and `librustc`.
+ //! 2. Fold over the expression adding brackets around each subexpression (with
+-//! some complications - see the `syn_brackets` and `libsyntax_brackets`
++//! some complications - see the `syn_brackets` and `librustc_brackets`
+ //! methods).
+ //! 3. Serialize the `syn` expression back into a string, and re-parse it with
+-//! `libsyntax`.
++//! `librustc`.
+ //! 4. Respan all of the expressions, replacing the spans with the default
+ //! spans.
+ //! 5. Compare the expressions with one another, if they are not equal fail.
+
+-extern crate quote;
+-extern crate rayon;
+-extern crate regex;
++extern crate rustc_ast;
+ extern crate rustc_data_structures;
+-extern crate smallvec;
+-extern crate syn;
+-extern crate syntax;
+-extern crate syntax_pos;
+-extern crate walkdir;
+-
+-mod features;
++extern crate rustc_span;
+
+ use quote::quote;
+ use rayon::iter::{IntoParallelIterator, ParallelIterator};
+ use regex::Regex;
+-use smallvec::smallvec;
+-use syntax::ast;
+-use syntax::ptr::P;
+-use syntax_pos::edition::Edition;
++use rustc_ast::ast;
++use rustc_ast::ptr::P;
++use rustc_span::edition::Edition;
+ use walkdir::{DirEntry, WalkDir};
+
+ use std::fs::File;
+@@ -73,7 +64,7 @@ fn test_simple_precedence() {
+ continue;
+ };
+
+- let pf = match test_expressions(vec![expr]) {
++ let pf = match test_expressions(Edition::Edition2018, vec![expr]) {
+ (1, 0) => "passed",
+ (0, 1) => {
+ failed += 1;
+@@ -91,8 +82,8 @@ fn test_simple_precedence() {
+
+ /// Test expressions from rustc, like in `test_round_trip`.
+ #[test]
+-#[cfg_attr(target_os = "windows", ignore = "requires nix .sh")]
+ fn test_rustc_precedence() {
++ common::rayon_init();
+ repo::clone_rust();
+ let abort_after = common::abort_after();
+ if abort_after == 0 {
+@@ -118,15 +109,6 @@ fn test_rustc_precedence() {
+ return;
+ }
+
+- // Our version of `libsyntax` can't parse this tests
+- if path
+- .to_str()
+- .unwrap()
+- .ends_with("optional_comma_in_match_arm.rs")
+- {
+- return;
+- }
+-
+ let mut file = File::open(path).unwrap();
+ let mut content = String::new();
+ file.read_to_string(&mut content).unwrap();
+@@ -134,8 +116,9 @@ fn test_rustc_precedence() {
+
+ let (l_passed, l_failed) = match syn::parse_file(&content) {
+ Ok(file) => {
++ let edition = repo::edition(path).parse().unwrap();
+ let exprs = collect_exprs(file);
+- test_expressions(exprs)
++ test_expressions(edition, exprs)
+ }
+ Err(msg) => {
+ errorf!("syn failed to parse\n{:?}\n", msg);
+@@ -169,36 +152,36 @@ fn test_rustc_precedence() {
+ }
+ }
+
+-fn test_expressions(exprs: Vec<syn::Expr>) -> (usize, usize) {
++fn test_expressions(edition: Edition, exprs: Vec<syn::Expr>) -> (usize, usize) {
+ let mut passed = 0;
+ let mut failed = 0;
+
+- syntax::with_globals(Edition::Edition2018, || {
++ rustc_span::with_session_globals(edition, || {
+ for expr in exprs {
+ let raw = quote!(#expr).to_string();
+
+- let libsyntax_ast = if let Some(e) = libsyntax_parse_and_rewrite(&raw) {
++ let librustc_ast = if let Some(e) = librustc_parse_and_rewrite(&raw) {
+ e
+ } else {
+ failed += 1;
+- errorf!("\nFAIL - libsyntax failed to parse raw\n");
++ errorf!("\nFAIL - librustc failed to parse raw\n");
+ continue;
+ };
+
+ let syn_expr = syn_brackets(expr);
+- let syn_ast = if let Some(e) = parse::libsyntax_expr(&quote!(#syn_expr).to_string()) {
++ let syn_ast = if let Some(e) = parse::librustc_expr(&quote!(#syn_expr).to_string()) {
+ e
+ } else {
+ failed += 1;
+- errorf!("\nFAIL - libsyntax failed to parse bracketed\n");
++ errorf!("\nFAIL - librustc failed to parse bracketed\n");
+ continue;
+ };
+
+- if SpanlessEq::eq(&syn_ast, &libsyntax_ast) {
++ if SpanlessEq::eq(&syn_ast, &librustc_ast) {
+ passed += 1;
+ } else {
+ failed += 1;
+- errorf!("\nFAIL\n{:?}\n!=\n{:?}\n", syn_ast, libsyntax_ast);
++ errorf!("\nFAIL\n{:?}\n!=\n{:?}\n", syn_ast, librustc_ast);
+ }
+ }
+ });
+@@ -206,54 +189,106 @@ fn test_expressions(exprs: Vec<syn::Expr>) -> (usize, usize) {
+ (passed, failed)
+ }
+
+-fn libsyntax_parse_and_rewrite(input: &str) -> Option<P<ast::Expr>> {
+- parse::libsyntax_expr(input).and_then(libsyntax_brackets)
++fn librustc_parse_and_rewrite(input: &str) -> Option<P<ast::Expr>> {
++ parse::librustc_expr(input).and_then(librustc_brackets)
+ }
+
+ /// Wrap every expression which is not already wrapped in parens with parens, to
+ /// reveal the precidence of the parsed expressions, and produce a stringified
+ /// form of the resulting expression.
+ ///
+-/// This method operates on libsyntax objects.
+-fn libsyntax_brackets(mut libsyntax_expr: P<ast::Expr>) -> Option<P<ast::Expr>> {
++/// This method operates on librustc objects.
++fn librustc_brackets(mut librustc_expr: P<ast::Expr>) -> Option<P<ast::Expr>> {
++ use rustc_ast::ast::{
++ Block, BorrowKind, Expr, ExprKind, Field, GenericArg, MacCall, Pat, Stmt, StmtKind, Ty,
++ };
++ use rustc_ast::mut_visit::{noop_visit_generic_arg, MutVisitor};
++ use rustc_data_structures::map_in_place::MapInPlace;
+ use rustc_data_structures::thin_vec::ThinVec;
+- use smallvec::SmallVec;
++ use rustc_span::DUMMY_SP;
+ use std::mem;
+- use syntax::ast::{Expr, ExprKind, Field, Mac, Pat, Stmt, StmtKind, Ty};
+- use syntax::mut_visit::{noop_visit_expr, MutVisitor};
+- use syntax_pos::DUMMY_SP;
+
+ struct BracketsVisitor {
+ failed: bool,
+ };
+
++ fn flat_map_field<T: MutVisitor>(mut f: Field, vis: &mut T) -> Vec<Field> {
++ if f.is_shorthand {
++ noop_visit_expr(&mut f.expr, vis);
++ } else {
++ vis.visit_expr(&mut f.expr);
++ }
++ vec![f]
++ }
++
++ fn flat_map_stmt<T: MutVisitor>(stmt: Stmt, vis: &mut T) -> Vec<Stmt> {
++ let kind = match stmt.kind {
++ // Don't wrap toplevel expressions in statements.
++ StmtKind::Expr(mut e) => {
++ noop_visit_expr(&mut e, vis);
++ StmtKind::Expr(e)
++ }
++ StmtKind::Semi(mut e) => {
++ noop_visit_expr(&mut e, vis);
++ StmtKind::Semi(e)
++ }
++ s => s,
++ };
++
++ vec![Stmt { kind, ..stmt }]
++ }
++
++ fn noop_visit_expr<T: MutVisitor>(e: &mut Expr, vis: &mut T) {
++ use rustc_ast::mut_visit::{noop_visit_expr, visit_opt, visit_thin_attrs};
++ match &mut e.kind {
++ ExprKind::AddrOf(BorrowKind::Raw, ..) => {}
++ ExprKind::Struct(path, fields, expr) => {
++ vis.visit_path(path);
++ fields.flat_map_in_place(|field| flat_map_field(field, vis));
++ visit_opt(expr, |expr| vis.visit_expr(expr));
++ vis.visit_id(&mut e.id);
++ vis.visit_span(&mut e.span);
++ visit_thin_attrs(&mut e.attrs, vis);
++ }
++ _ => noop_visit_expr(e, vis),
++ }
++ }
++
+ impl MutVisitor for BracketsVisitor {
+ fn visit_expr(&mut self, e: &mut P<Expr>) {
+ noop_visit_expr(e, self);
+- match e.node {
++ match e.kind {
+ ExprKind::If(..) | ExprKind::Block(..) | ExprKind::Let(..) => {}
+ _ => {
+ let inner = mem::replace(
+ e,
+ P(Expr {
+ id: ast::DUMMY_NODE_ID,
+- node: ExprKind::Err,
++ kind: ExprKind::Err,
+ span: DUMMY_SP,
+ attrs: ThinVec::new(),
++ tokens: None,
+ }),
+ );
+- e.node = ExprKind::Paren(inner);
++ e.kind = ExprKind::Paren(inner);
+ }
+ }
+ }
+
+- fn flat_map_field(&mut self, mut f: Field) -> SmallVec<[Field; 1]> {
+- if f.is_shorthand {
+- noop_visit_expr(&mut f.expr, self);
+- } else {
+- self.visit_expr(&mut f.expr);
++ fn visit_generic_arg(&mut self, arg: &mut GenericArg) {
++ match arg {
++ // Don't wrap const generic arg as that's invalid syntax.
++ GenericArg::Const(arg) => noop_visit_expr(&mut arg.value, self),
++ _ => noop_visit_generic_arg(arg, self),
+ }
+- SmallVec::from([f])
++ }
++
++ fn visit_block(&mut self, block: &mut P<Block>) {
++ self.visit_id(&mut block.id);
++ block
++ .stmts
++ .flat_map_in_place(|stmt| flat_map_stmt(stmt, self));
++ self.visit_span(&mut block.span);
+ }
+
+ // We don't want to look at expressions that might appear in patterns or
+@@ -267,25 +302,8 @@ fn libsyntax_brackets(mut libsyntax_expr: P<ast::Expr>) -> Option<P<ast::Expr>>
+ let _ = ty;
+ }
+
+- fn flat_map_stmt(&mut self, stmt: Stmt) -> SmallVec<[Stmt; 1]> {
+- let node = match stmt.node {
+- // Don't wrap toplevel expressions in statements.
+- StmtKind::Expr(mut e) => {
+- noop_visit_expr(&mut e, self);
+- StmtKind::Expr(e)
+- }
+- StmtKind::Semi(mut e) => {
+- noop_visit_expr(&mut e, self);
+- StmtKind::Semi(e)
+- }
+- s => s,
+- };
+-
+- smallvec![Stmt { node, ..stmt }]
+- }
+-
+- fn visit_mac(&mut self, mac: &mut Mac) {
+- // By default when folding over macros, libsyntax panics. This is
++ fn visit_mac(&mut self, mac: &mut MacCall) {
++ // By default when folding over macros, librustc panics. This is
+ // because it's usually not what you want, you want to run after
+ // macro expansion. We do want to do that (syn doesn't do macro
+ // expansion), so we implement visit_mac to just return the macro
+@@ -295,11 +313,11 @@ fn libsyntax_brackets(mut libsyntax_expr: P<ast::Expr>) -> Option<P<ast::Expr>>
+ }
+
+ let mut folder = BracketsVisitor { failed: false };
+- folder.visit_expr(&mut libsyntax_expr);
++ folder.visit_expr(&mut librustc_expr);
+ if folder.failed {
+ None
+ } else {
+- Some(libsyntax_expr)
++ Some(librustc_expr)
+ }
+ }
+
+@@ -318,14 +336,33 @@ fn syn_brackets(syn_expr: syn::Expr) -> syn::Expr {
+ Expr::If(..) | Expr::Unsafe(..) | Expr::Block(..) | Expr::Let(..) => {
+ fold_expr(self, expr)
+ }
+- node => Expr::Paren(ExprParen {
++ _ => Expr::Paren(ExprParen {
+ attrs: Vec::new(),
+- expr: Box::new(fold_expr(self, node)),
++ expr: Box::new(fold_expr(self, expr)),
+ paren_token: token::Paren::default(),
+ }),
+ }
+ }
+
++ fn fold_generic_argument(&mut self, arg: GenericArgument) -> GenericArgument {
++ match arg {
++ // Don't wrap const generic arg as that's invalid syntax.
++ GenericArgument::Const(a) => GenericArgument::Const(fold_expr(self, a)),
++ _ => fold_generic_argument(self, arg),
++ }
++ }
++
++ fn fold_generic_method_argument(
++ &mut self,
++ arg: GenericMethodArgument,
++ ) -> GenericMethodArgument {
++ match arg {
++ // Don't wrap const generic arg as that's invalid syntax.
++ GenericMethodArgument::Const(a) => GenericMethodArgument::Const(fold_expr(self, a)),
++ _ => fold_generic_method_argument(self, arg),
++ }
++ }
++
+ fn fold_stmt(&mut self, stmt: Stmt) -> Stmt {
+ match stmt {
+ // Don't wrap toplevel expressions in statements.
+@@ -360,7 +397,10 @@ fn collect_exprs(file: syn::File) -> Vec<syn::Expr> {
+ struct CollectExprs(Vec<Expr>);
+ impl Fold for CollectExprs {
+ fn fold_expr(&mut self, expr: Expr) -> Expr {
+- self.0.push(expr);
++ match expr {
++ Expr::Verbatim(tokens) if tokens.is_empty() => {}
++ _ => self.0.push(expr),
++ }
+
+ Expr::Tuple(ExprTuple {
+ attrs: vec![],
+diff --git a/third_party/rust/syn/tests/test_receiver.rs b/third_party/rust/syn/tests/test_receiver.rs
+new file mode 100644
+index 0000000000..923df96ba9
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_receiver.rs
+@@ -0,0 +1,127 @@
++use syn::{parse_quote, FnArg, Receiver, TraitItemMethod};
++
++#[test]
++fn test_by_value() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn by_value(self: Self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_by_mut_value() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn by_mut(mut self: Self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_by_ref() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn by_ref(self: &Self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_by_box() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn by_box(self: Box<Self>);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_by_pin() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn by_pin(self: Pin<Self>);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_explicit_type() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn explicit_type(self: Pin<MyType>);
++ };
++ match sig.receiver() {
++ Some(FnArg::Typed(_)) => (),
++ value => panic!("expected FnArg::Typed, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_value_shorthand() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn value_shorthand(self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Receiver(Receiver {
++ reference: None,
++ mutability: None,
++ ..
++ })) => (),
++ value => panic!("expected FnArg::Receiver without ref/mut, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_mut_value_shorthand() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn mut_value_shorthand(mut self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Receiver(Receiver {
++ reference: None,
++ mutability: Some(_),
++ ..
++ })) => (),
++ value => panic!("expected FnArg::Receiver with mut, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_ref_shorthand() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn ref_shorthand(&self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Receiver(Receiver {
++ reference: Some(_),
++ mutability: None,
++ ..
++ })) => (),
++ value => panic!("expected FnArg::Receiver with ref, got {:?}", value),
++ }
++}
++
++#[test]
++fn test_ref_mut_shorthand() {
++ let TraitItemMethod { sig, .. } = parse_quote! {
++ fn ref_mut_shorthand(&mut self);
++ };
++ match sig.receiver() {
++ Some(FnArg::Receiver(Receiver {
++ reference: Some(_),
++ mutability: Some(_),
++ ..
++ })) => (),
++ value => panic!("expected FnArg::Receiver with ref+mut, got {:?}", value),
++ }
++}
+diff --git a/third_party/rust/syn/tests/test_round_trip.rs b/third_party/rust/syn/tests/test_round_trip.rs
+index 2fc9cecd86..260dd0c3d9 100644
+--- mozilla-release/third_party/rust/syn/tests/test_round_trip.rs
++++ mozilla-release/third_party/rust/syn/tests/test_round_trip.rs
+@@ -2,22 +2,20 @@
+ #![recursion_limit = "1024"]
+ #![feature(rustc_private)]
+
+-extern crate quote;
+-extern crate rayon;
+-extern crate syn;
+-extern crate syntax;
+-extern crate syntax_pos;
+-extern crate walkdir;
+-
+-mod features;
++extern crate rustc_ast;
++extern crate rustc_errors;
++extern crate rustc_expand;
++extern crate rustc_parse as parse;
++extern crate rustc_session;
++extern crate rustc_span;
+
+ use quote::quote;
+ use rayon::iter::{IntoParallelIterator, ParallelIterator};
+-use syntax::ast;
+-use syntax::parse::{self, PResult, ParseSess};
+-use syntax::source_map::FilePathMapping;
+-use syntax_pos::edition::Edition;
+-use syntax_pos::FileName;
++use rustc_ast::ast;
++use rustc_errors::PResult;
++use rustc_session::parse::ParseSess;
++use rustc_span::source_map::FilePathMapping;
++use rustc_span::FileName;
+ use walkdir::{DirEntry, WalkDir};
+
+ use std::fs::File;
+@@ -38,8 +36,8 @@ mod repo;
+ use common::eq::SpanlessEq;
+
+ #[test]
+-#[cfg_attr(target_os = "windows", ignore = "requires nix .sh")]
+ fn test_round_trip() {
++ common::rayon_init();
+ repo::clone_rust();
+ let abort_after = common::abort_after();
+ if abort_after == 0 {
+@@ -78,11 +76,12 @@ fn test_round_trip() {
+ }
+ };
+ let back = quote!(#krate).to_string();
++ let edition = repo::edition(path).parse().unwrap();
+
+ let equal = panic::catch_unwind(|| {
+- syntax::with_globals(Edition::Edition2018, || {
++ rustc_span::with_session_globals(edition, || {
+ let sess = ParseSess::new(FilePathMapping::empty());
+- let before = match libsyntax_parse(content, &sess) {
++ let before = match librustc_parse(content, &sess) {
+ Ok(before) => before,
+ Err(mut diagnostic) => {
+ diagnostic.cancel();
+@@ -93,7 +92,7 @@ fn test_round_trip() {
+ errorf!("=== {}: ignore\n", path.display());
+ } else {
+ errorf!(
+- "=== {}: ignore - libsyntax failed to parse original content: {}\n",
++ "=== {}: ignore - librustc failed to parse original content: {}\n",
+ path.display(),
+ diagnostic.message()
+ );
+@@ -101,10 +100,10 @@ fn test_round_trip() {
+ return true;
+ }
+ };
+- let after = match libsyntax_parse(back, &sess) {
++ let after = match librustc_parse(back, &sess) {
+ Ok(after) => after,
+ Err(mut diagnostic) => {
+- errorf!("=== {}: libsyntax failed to parse", path.display());
++ errorf!("=== {}: librustc failed to parse", path.display());
+ diagnostic.emit();
+ return false;
+ }
+@@ -130,7 +129,7 @@ fn test_round_trip() {
+ })
+ });
+ match equal {
+- Err(_) => errorf!("=== {}: ignoring libsyntax panic\n", path.display()),
++ Err(_) => errorf!("=== {}: ignoring librustc panic\n", path.display()),
+ Ok(true) => {}
+ Ok(false) => {
+ let prev_failed = failed.fetch_add(1, Ordering::SeqCst);
+@@ -147,7 +146,7 @@ fn test_round_trip() {
+ }
+ }
+
+-fn libsyntax_parse(content: String, sess: &ParseSess) -> PResult<ast::Crate> {
++fn librustc_parse(content: String, sess: &ParseSess) -> PResult<ast::Crate> {
+ let name = FileName::Custom("test_round_trip".to_string());
+ parse::parse_crate_from_source_str(name, content, sess)
+ }
+diff --git a/third_party/rust/syn/tests/test_shebang.rs b/third_party/rust/syn/tests/test_shebang.rs
+new file mode 100644
+index 0000000000..dc26b9aab3
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_shebang.rs
+@@ -0,0 +1,59 @@
++#[macro_use]
++mod macros;
++
++#[test]
++fn test_basic() {
++ let content = "#!/usr/bin/env rustx\nfn main() {}";
++ let file = syn::parse_file(content).unwrap();
++ snapshot!(file, @r###"
++ File {
++ shebang: Some("#!/usr/bin/env rustx"),
++ items: [
++ Item::Fn {
++ vis: Inherited,
++ sig: Signature {
++ ident: "main",
++ generics: Generics,
++ output: Default,
++ },
++ block: Block,
++ },
++ ],
++ }
++ "###);
++}
++
++#[test]
++fn test_comment() {
++ let content = "#!//am/i/a/comment\n[allow(dead_code)] fn main() {}";
++ let file = syn::parse_file(content).unwrap();
++ snapshot!(file, @r###"
++ File {
++ attrs: [
++ Attribute {
++ style: Inner,
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "allow",
++ arguments: None,
++ },
++ ],
++ },
++ tokens: TokenStream(`(dead_code)`),
++ },
++ ],
++ items: [
++ Item::Fn {
++ vis: Inherited,
++ sig: Signature {
++ ident: "main",
++ generics: Generics,
++ output: Default,
++ },
++ block: Block,
++ },
++ ],
++ }
++ "###);
++}
+diff --git a/third_party/rust/syn/tests/test_should_parse.rs b/third_party/rust/syn/tests/test_should_parse.rs
+index aadf42e3af..180d859916 100644
+--- mozilla-release/third_party/rust/syn/tests/test_should_parse.rs
++++ mozilla-release/third_party/rust/syn/tests/test_should_parse.rs
+@@ -1,7 +1,3 @@
+-extern crate syn;
+-
+-mod features;
+-
+ macro_rules! should_parse {
+ ($name:ident, { $($in:tt)* }) => {
+ #[test]
+diff --git a/third_party/rust/syn/tests/test_size.rs b/third_party/rust/syn/tests/test_size.rs
+index 386d4df889..01e8401158 100644
+--- mozilla-release/third_party/rust/syn/tests/test_size.rs
++++ mozilla-release/third_party/rust/syn/tests/test_size.rs
+@@ -1,7 +1,5 @@
+ #![cfg(target_pointer_width = "64")]
+
+-mod features;
+-
+ use std::mem;
+ use syn::*;
+
+diff --git a/third_party/rust/syn/tests/test_stmt.rs b/third_party/rust/syn/tests/test_stmt.rs
+new file mode 100644
+index 0000000000..d68b47fd2f
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_stmt.rs
+@@ -0,0 +1,44 @@
++#[macro_use]
++mod macros;
++
++use syn::Stmt;
++
++#[test]
++fn test_raw_operator() {
++ let stmt = syn::parse_str::<Stmt>("let _ = &raw const x;").unwrap();
++
++ snapshot!(stmt, @r###"
++ Local(Local {
++ pat: Pat::Wild,
++ init: Some(Verbatim(`& raw const x`)),
++ })
++ "###);
++}
++
++#[test]
++fn test_raw_variable() {
++ let stmt = syn::parse_str::<Stmt>("let _ = &raw;").unwrap();
++
++ snapshot!(stmt, @r###"
++ Local(Local {
++ pat: Pat::Wild,
++ init: Some(Expr::Reference {
++ expr: Expr::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "raw",
++ arguments: None,
++ },
++ ],
++ },
++ },
++ }),
++ })
++ "###);
++}
++
++#[test]
++fn test_raw_invalid() {
++ assert!(syn::parse_str::<Stmt>("let _ = &raw x;").is_err());
++}
+diff --git a/third_party/rust/syn/tests/test_token_trees.rs b/third_party/rust/syn/tests/test_token_trees.rs
+index 70a9a72aab..5b00448af8 100644
+--- mozilla-release/third_party/rust/syn/tests/test_token_trees.rs
++++ mozilla-release/third_party/rust/syn/tests/test_token_trees.rs
+@@ -1,9 +1,3 @@
+-extern crate proc_macro2;
+-extern crate quote;
+-extern crate syn;
+-
+-mod features;
+-
+ #[macro_use]
+ mod macros;
+
+@@ -21,7 +15,11 @@ fn test_struct() {
+ }
+ ";
+
+- snapshot!(input as TokenStream, @"`# [ derive ( Debug , Clone ) ] pub struct Item { pub ident : Ident , pub attrs : Vec < Attribute >, }`");
++ snapshot!(input as TokenStream, @r###"
++ TokenStream(
++ `# [derive (Debug , Clone)] pub struct Item { pub ident : Ident , pub attrs : Vec < Attribute >, }`,
++ )
++ "###);
+ }
+
+ #[test]
+diff --git a/third_party/rust/syn/tests/test_ty.rs b/third_party/rust/syn/tests/test_ty.rs
+new file mode 100644
+index 0000000000..9cbdcd6b99
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_ty.rs
+@@ -0,0 +1,53 @@
++#[macro_use]
++mod macros;
++
++use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
++use quote::quote;
++use std::iter::FromIterator;
++use syn::Type;
++
++#[test]
++fn test_mut_self() {
++ syn::parse_str::<Type>("fn(mut self)").unwrap();
++ syn::parse_str::<Type>("fn(mut self: ())").unwrap();
++ syn::parse_str::<Type>("fn(mut self: ...)").unwrap_err();
++ syn::parse_str::<Type>("fn(mut self: mut self)").unwrap_err();
++ syn::parse_str::<Type>("fn(mut self::T)").unwrap_err();
++}
++
++#[test]
++fn test_macro_variable_type() {
++ // mimics the token stream corresponding to `$ty<T>`
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, quote! { ty })),
++ TokenTree::Punct(Punct::new('<', Spacing::Alone)),
++ TokenTree::Ident(Ident::new("T", Span::call_site())),
++ TokenTree::Punct(Punct::new('>', Spacing::Alone)),
++ ]);
++
++ snapshot!(tokens as Type, @r###"
++ Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "ty",
++ arguments: PathArguments::AngleBracketed {
++ args: [
++ Type(Type::Path {
++ path: Path {
++ segments: [
++ PathSegment {
++ ident: "T",
++ arguments: None,
++ },
++ ],
++ },
++ }),
++ ],
++ },
++ },
++ ],
++ },
++ }
++ "###);
++}
+diff --git a/third_party/rust/syn/tests/test_visibility.rs b/third_party/rust/syn/tests/test_visibility.rs
+new file mode 100644
+index 0000000000..c3d0ac7a5b
+--- /dev/null
++++ mozilla-release/third_party/rust/syn/tests/test_visibility.rs
+@@ -0,0 +1,145 @@
++#[macro_use]
++mod macros;
++
++use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
++use std::iter::FromIterator;
++use syn::parse::{Parse, ParseStream};
++use syn::{DeriveInput, Result, Visibility};
++
++#[derive(Debug)]
++struct VisRest {
++ vis: Visibility,
++ rest: TokenStream,
++}
++
++impl Parse for VisRest {
++ fn parse(input: ParseStream) -> Result<Self> {
++ Ok(VisRest {
++ vis: input.parse()?,
++ rest: input.parse()?,
++ })
++ }
++}
++
++macro_rules! assert_vis_parse {
++ ($input:expr, Ok($p:pat)) => {
++ assert_vis_parse!($input, Ok($p) + "");
++ };
++
++ ($input:expr, Ok($p:pat) + $rest:expr) => {
++ let expected = $rest.parse::<TokenStream>().unwrap();
++ let parse: VisRest = syn::parse_str($input).unwrap();
++
++ match parse.vis {
++ $p => {}
++ _ => panic!("Expected {}, got {:?}", stringify!($p), parse.vis),
++ }
++
++ // NOTE: Round-trips through `to_string` to avoid potential whitespace
++ // diffs.
++ assert_eq!(parse.rest.to_string(), expected.to_string());
++ };
++
++ ($input:expr, Err) => {
++ syn::parse2::<VisRest>($input.parse().unwrap()).unwrap_err();
++ };
++}
++
++#[test]
++fn test_pub() {
++ assert_vis_parse!("pub", Ok(Visibility::Public(_)));
++}
++
++#[test]
++fn test_crate() {
++ assert_vis_parse!("crate", Ok(Visibility::Crate(_)));
++}
++
++#[test]
++fn test_inherited() {
++ assert_vis_parse!("", Ok(Visibility::Inherited));
++}
++
++#[test]
++fn test_in() {
++ assert_vis_parse!("pub(in foo::bar)", Ok(Visibility::Restricted(_)));
++}
++
++#[test]
++fn test_pub_crate() {
++ assert_vis_parse!("pub(crate)", Ok(Visibility::Restricted(_)));
++}
++
++#[test]
++fn test_pub_self() {
++ assert_vis_parse!("pub(self)", Ok(Visibility::Restricted(_)));
++}
++
++#[test]
++fn test_pub_super() {
++ assert_vis_parse!("pub(super)", Ok(Visibility::Restricted(_)));
++}
++
++#[test]
++fn test_missing_in() {
++ assert_vis_parse!("pub(foo::bar)", Ok(Visibility::Public(_)) + "(foo::bar)");
++}
++
++#[test]
++fn test_missing_in_path() {
++ assert_vis_parse!("pub(in)", Err);
++}
++
++#[test]
++fn test_crate_path() {
++ assert_vis_parse!("pub(crate::A, crate::B)", Ok(Visibility::Public(_)) + "(crate::A, crate::B)");
++}
++
++#[test]
++fn test_junk_after_in() {
++ assert_vis_parse!("pub(in some::path @@garbage)", Err);
++}
++
++#[test]
++fn test_empty_group_vis() {
++ // mimics `struct S { $vis $field: () }` where $vis is empty
++ let tokens = TokenStream::from_iter(vec![
++ TokenTree::Ident(Ident::new("struct", Span::call_site())),
++ TokenTree::Ident(Ident::new("S", Span::call_site())),
++ TokenTree::Group(Group::new(
++ Delimiter::Brace,
++ TokenStream::from_iter(vec![
++ TokenTree::Group(Group::new(Delimiter::None, TokenStream::new())),
++ TokenTree::Group(Group::new(
++ Delimiter::None,
++ TokenStream::from_iter(vec![TokenTree::Ident(Ident::new(
++ "f",
++ Span::call_site(),
++ ))]),
++ )),
++ TokenTree::Punct(Punct::new(':', Spacing::Alone)),
++ TokenTree::Group(Group::new(Delimiter::Parenthesis, TokenStream::new())),
++ ]),
++ )),
++ ]);
++
++ snapshot!(tokens as DeriveInput, @r###"
++ DeriveInput {
++ vis: Inherited,
++ ident: "S",
++ generics: Generics,
++ data: Data::Struct {
++ fields: Fields::Named {
++ named: [
++ Field {
++ vis: Inherited,
++ ident: Some("f"),
++ colon_token: Some,
++ ty: Type::Tuple,
++ },
++ ],
++ },
++ },
++ }
++ "###);
++}
+diff --git a/third_party/rust/syn/tests/zzz_stable.rs b/third_party/rust/syn/tests/zzz_stable.rs
+index a81b3df4d0..a1a670d9ed 100644
+--- mozilla-release/third_party/rust/syn/tests/zzz_stable.rs
++++ mozilla-release/third_party/rust/syn/tests/zzz_stable.rs
+@@ -1,7 +1,5 @@
+ #![cfg(syn_disable_nightly_tests)]
+
+-extern crate termcolor;
+-
+ use std::io::{self, Write};
+ use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor};
+
+@@ -10,7 +8,7 @@ const MSG: &str = "\
+ ‖ WARNING:
+ ‖ This is not a nightly compiler so not all tests were able to
+ ‖ run. Syn includes tests that compare Syn's parser against the
+-‖ compiler's parser, which requires access to unstable libsyntax
++‖ compiler's parser, which requires access to unstable librustc
+ ‖ data structures and a nightly compiler.
+ ‖
+ ";
+--
+2.28.0
+
diff --git a/www/cliqz/files/patch-bug1667736 b/www/cliqz/files/patch-bug1667736
new file mode 100644
index 000000000000..c620b437c0ad
--- /dev/null
+++ b/www/cliqz/files/patch-bug1667736
@@ -0,0 +1,106 @@
+2 errors:
+error[E0432]: unresolved import `crate::arch::x86_64::_mm_movemask_pi8`
+https://github.com/rust-lang/packed_simd/pull/290
+
+unresolved import `crate::arch::x86_64::__m64`
+https://github.com/rust-lang/packed_simd/pull/292/commits/57d96e45916066fa9b5cdf2bc695e190207e78af
+
+From 950903a66950eaff745b0a029f2051d305df1c22 Mon Sep 17 00:00:00 2001
+From: Justus K <justus.k@protonmail.com>
+Date: Tue, 22 Sep 2020 15:36:03 +0200
+Subject: [PATCH] Remove `x86_m8x8_sse_impl` macro
+
+---
+ src/codegen/reductions/mask/x86/sse.rs | 32 --------------------------
+ 1 file changed, 32 deletions(-)
+
+diff --git a/src/codegen/reductions/mask/x86/sse.rs b/src/codegen/reductions/mask/x86/sse.rs
+index 7482f943..eb1ef7fa 100644
+--- mozilla-release/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
++++ mozilla-release/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
+@@ -34,35 +34,3 @@ macro_rules! x86_m32x4_sse_impl {
+ }
+ };
+ }
+-
+-macro_rules! x86_m8x8_sse_impl {
+- ($id:ident) => {
+- impl All for $id {
+- #[inline]
+- #[target_feature(enable = "sse")]
+- unsafe fn all(self) -> bool {
+- #[cfg(target_arch = "x86")]
+- use crate::arch::x86::_mm_movemask_pi8;
+- #[cfg(target_arch = "x86_64")]
+- use crate::arch::x86_64::_mm_movemask_pi8;
+- // _mm_movemask_pi8(a) creates an 8bit mask containing the most
+- // significant bit of each byte of `a`. If all bits are set,
+- // then all 8 lanes of the mask are true.
+- _mm_movemask_pi8(crate::mem::transmute(self))
+- == u8::max_value() as i32
+- }
+- }
+- impl Any for $id {
+- #[inline]
+- #[target_feature(enable = "sse")]
+- unsafe fn any(self) -> bool {
+- #[cfg(target_arch = "x86")]
+- use crate::arch::x86::_mm_movemask_pi8;
+- #[cfg(target_arch = "x86_64")]
+- use crate::arch::x86_64::_mm_movemask_pi8;
+-
+- _mm_movemask_pi8(crate::mem::transmute(self)) != 0
+- }
+- }
+- };
+-}
+--- mozilla-release/third_party/rust/packed_simd/src/lib.rs.orig 2019-02-05 21:18:53.000000000 +0100
++++ mozilla-release/third_party/rust/packed_simd/src/lib.rs 2020-11-18 15:06:43.736722000 +0100
+@@ -210,7 +210,6 @@
+ core_intrinsics,
+ stmt_expr_attributes,
+ align_offset,
+- mmx_target_feature,
+ crate_visibility_modifier,
+ custom_inner_attributes
+ )]
+diff --git a/src/codegen/reductions/mask/x86.rs b/src/codegen/reductions/mask/x86.rs
+index 2ae4ed81..bcfb1a6e 100644
+--- mozilla-release/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
++++ mozilla-release/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
+@@ -19,13 +19,7 @@ mod avx2;
+ /// x86 64-bit m8x8 implementation
+ macro_rules! x86_m8x8_impl {
+ ($id:ident) => {
+- cfg_if! {
+- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] {
+- x86_m8x8_sse_impl!($id);
+- } else {
+- fallback_impl!($id);
+- }
+- }
++ fallback_impl!($id);
+ };
+ }
+
+From 57d96e45916066fa9b5cdf2bc695e190207e78af Mon Sep 17 00:00:00 2001
+From: Jubilee Young <workingjubilee@gmail.com>
+Date: Wed, 23 Sep 2020 12:23:29 -0700
+Subject: [PATCH] Remove __m64 type
+
+---
+ src/api/into_bits/arch_specific.rs | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/api/into_bits/arch_specific.rs b/src/api/into_bits/arch_specific.rs
+index 6cc2fa37..7b560107 100644
+--- mozilla-release/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
++++ mozilla-release/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
+@@ -84,7 +84,6 @@ macro_rules! impl_arch {
+ // FIXME: 64-bit single element types
+ // FIXME: arm/aarch float16x4_t missing
+ impl_arch!(
+- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64],
+ [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t,
+ poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t,
+ uint64x1_t],
diff --git a/www/cliqz/files/patch-cliqz__env.sh b/www/cliqz/files/patch-cliqz__env.sh
new file mode 100644
index 000000000000..7b3c4f2c6d8c
--- /dev/null
+++ b/www/cliqz/files/patch-cliqz__env.sh
@@ -0,0 +1,27 @@
+Commented out the various wget(1) to prevent http traffic during build
+phase.
+
+--- cliqz_env.sh.orig 2020-07-17 14:00:07 UTC
++++ cliqz_env.sh
+@@ -109,9 +109,9 @@ export S3_BUCKET=repository.cliqz.com
+ export S3_BUCKET_SERVICE=cliqz-browser-data
+
+ # check CQZ_BUILD_ID and try to obtain, if not specified
+-if [ -z $CQZ_BUILD_ID ]; then
+- export CQZ_BUILD_ID="`wget -qO- https://$S3_BUCKET/dist/$CQZ_RELEASE_CHANNEL/$CQZ_VERSION/lastbuildid`"
+-fi
++#if [ -z $CQZ_BUILD_ID ]; then
++# export CQZ_BUILD_ID="`wget -qO- https://$S3_BUCKET/dist/$CQZ_RELEASE_CHANNEL/$CQZ_VERSION/lastbuildid`"
++#fi
+
+ if [ -z $CQZ_BUILD_ID ]; then
+ echo "CQZ_BUILD_ID not specified and can not be obtain from "$S3_BUCKET
+@@ -134,7 +134,7 @@ OBJ_DIR=$MOZ_OBJDIR
+ SRC_BASE=mozilla-release
+
+ # automatic forget tab - start
+-wget -O mozilla-release/browser/adult-domains.bin https://s3.amazonaws.com/cdn.cliqz.com/browser-f/APT/adult-domains.bin
++#wget -O mozilla-release/browser/adult-domains.bin https://s3.amazonaws.com/cdn.cliqz.com/browser-f/APT/adult-domains.bin
+ export CQZ_ADULT_DOMAINS_BF="adult-domains.bin"
+ # automatic forget tab - end
+
diff --git a/www/cliqz/files/patch-mozilla-release_config_rules.mk b/www/cliqz/files/patch-mozilla-release_config_rules.mk
new file mode 100644
index 000000000000..834205ca5b53
--- /dev/null
+++ b/www/cliqz/files/patch-mozilla-release_config_rules.mk
@@ -0,0 +1,34 @@
+--- mozilla-release/config/rules.mk.orig 2020-02-19 14:20:43 UTC
++++ mozilla-release/config/rules.mk
+@@ -914,27 +914,27 @@ $(EXTENSIONS_PATH):
+ CLIQZ_XPI_PATH = $(EXTENSIONS_PATH)/cliqz@cliqz.com.xpi
+ $(CLIQZ_XPI_PATH): $(EXTENSIONS_PATH)
+ echo CLIQZ_XPI_PATH in `pwd`
+- wget --output-document $(CLIQZ_XPI_PATH) $(CLIQZ_EXT_URL)
++# wget --output-document $(CLIQZ_XPI_PATH) $(CLIQZ_EXT_URL)
+
+ HTTPSE_XPI_PATH = $(EXTENSIONS_PATH)/https-everywhere@cliqz.com.xpi
+ $(HTTPSE_XPI_PATH): $(EXTENSIONS_PATH)
+ ifdef HTTPSE_EXT_URL
+ echo HTTPSE_XPI_PATH in `pwd`
+- wget --output-document $(HTTPSE_XPI_PATH) $(HTTPSE_EXT_URL)
++# wget --output-document $(HTTPSE_XPI_PATH) $(HTTPSE_EXT_URL)
+ endif
+
+ CONSENTRICK_XPI_PATH = $(EXTENSIONS_PATH)/gdprtool@cliqz.com.xpi
+ $(CONSENTRICK_XPI_PATH): $(EXTENSIONS_PATH)
+ ifdef CONSENTRICK_EXT_URL
+ echo CONSENTRICK_XPI_PATH in `pwd`
+- wget --output-document $(CONSENTRICK_XPI_PATH) $(CONSENTRICK_EXT_URL)
++# wget --output-document $(CONSENTRICK_XPI_PATH) $(CONSENTRICK_EXT_URL)
+ endif
+
+ DAT_XPI_PATH = $(EXTENSIONS_PATH)/dat@cliqz.com.xpi
+ $(DAT_XPI_PATH): $(EXTENSIONS_PATH)
+ ifdef DAT_EXT_URL
+ echo DAT_XPI_PATH in `pwd`
+- wget --output-document $(DAT_XPI_PATH) $(DAT_EXT_URL)
++# wget --output-document $(DAT_XPI_PATH) $(DAT_EXT_URL)
+ endif
+
+ CLIQZ_CFG = $(DIST_RESPATH)/cliqz.cfg
diff --git a/www/cliqz/files/patch-mozilla-release_gfx_skia_skia_src_core_SkCpu.cpp b/www/cliqz/files/patch-mozilla-release_gfx_skia_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..fc34ba26ca59
--- /dev/null
+++ b/www/cliqz/files/patch-mozilla-release_gfx_skia_skia_src_core_SkCpu.cpp
@@ -0,0 +1,32 @@
+Regressed by https://svnweb.freebsd.org/changeset/base/324815
+
+gfx/skia/skia/src/core/SkCpu.cpp:81:27: error: use of undeclared identifier 'getauxval'
+ uint32_t hwcaps = getauxval(AT_HWCAP);
+ ^
+
+--- mozilla-release/gfx/skia/skia/src/core/SkCpu.cpp.orig 2020-01-21 09:54:20 UTC
++++ mozilla-release/gfx/skia/skia/src/core/SkCpu.cpp
+@@ -72,6 +72,23 @@
+ return features;
+ }
+
++#elif defined(SK_CPU_ARM64) && defined(__FreeBSD__)
++ #include <machine/armreg.h>
++ #ifndef ID_AA64ISAR0_CRC32_VAL
++ #define ID_AA64ISAR0_CRC32_VAL ID_AA64ISAR0_CRC32
++ #endif
++
++ static uint32_t read_cpu_features() {
++ uint32_t features = 0;
++ uint64_t id_aa64isar0;
++
++ id_aa64isar0 = READ_SPECIALREG(id_aa64isar0_el1);
++ if (ID_AA64ISAR0_CRC32_VAL(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE) {
++ features |= SkCpu::CRC32;
++ }
++ return features;
++ }
++
+ #elif defined(SK_CPU_ARM64) && __has_include(<sys/auxv.h>)
+ #include <sys/auxv.h>
+
diff --git a/www/cliqz/pkg-descr b/www/cliqz/pkg-descr
new file mode 100644
index 000000000000..154c3bc0c55c
--- /dev/null
+++ b/www/cliqz/pkg-descr
@@ -0,0 +1,5 @@
+Cliqz develops novel Internet browsers that incorporate proprietary
+features such as search and anti-tracking. Cliqz desktop browser is
+based on Mozilla Firefox.
+
+WWW: https://cliqz.com/en/desktop
diff --git a/www/cliqz/pkg-plist b/www/cliqz/pkg-plist
new file mode 100644
index 000000000000..d52351180cdb
--- /dev/null
+++ b/www/cliqz/pkg-plist
@@ -0,0 +1,45 @@
+bin/cliqz
+lib/cliqz/application.ini
+lib/cliqz/browser/adult-domains.bin
+lib/cliqz/browser/chrome/icons/default/default128.png
+lib/cliqz/browser/chrome/icons/default/default16.png
+lib/cliqz/browser/chrome/icons/default/default32.png
+lib/cliqz/browser/chrome/icons/default/default48.png
+lib/cliqz/browser/chrome/icons/default/default64.png
+lib/cliqz/browser/features/cliqz@cliqz.com.xpi
+lib/cliqz/browser/features/gdprtool@cliqz.com.xpi
+lib/cliqz/browser/features/https-everywhere@cliqz.com.xpi
+lib/cliqz/browser/omni.ja
+lib/cliqz/cliqz
+lib/cliqz/cliqz-bin
+lib/cliqz/defaults/pref/channel-prefs.js
+lib/cliqz/dependentlibs.list
+lib/cliqz/fonts/TwemojiMozilla.ttf
+lib/cliqz/gmp-clearkey/0.1/libclearkey.so
+lib/cliqz/gmp-clearkey/0.1/manifest.json
+lib/cliqz/gtk2/libmozgtk.so
+lib/cliqz/libfreebl3.so
+lib/cliqz/liblgpllibs.so
+lib/cliqz/libmozavcodec.so
+lib/cliqz/libmozavutil.so
+lib/cliqz/libmozgtk.so
+lib/cliqz/libmozsqlite3.so
+%%WAYLAND%%lib/cliqz/libmozwayland.so
+lib/cliqz/libnspr4.so
+lib/cliqz/libnss3.so
+lib/cliqz/libnssckbi.so
+lib/cliqz/libnssutil3.so
+lib/cliqz/libplc4.so
+lib/cliqz/libplds4.so
+lib/cliqz/libsmime3.so
+lib/cliqz/libsoftokn3.so
+lib/cliqz/libssl3.so
+lib/cliqz/libxul.so
+lib/cliqz/omni.ja
+lib/cliqz/pingsender
+lib/cliqz/platform.ini
+lib/cliqz/plugin-container
+lib/cliqz/precomplete
+lib/cliqz/removed-files
+share/applications/cliqz.desktop
+share/pixmaps/cliqz.png
diff --git a/www/iridium/Makefile b/www/iridium/Makefile
new file mode 100644
index 000000000000..1de2a2d34b49
--- /dev/null
+++ b/www/iridium/Makefile
@@ -0,0 +1,270 @@
+# Created by: Carlos J. Puga Medina <cpm@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= iridium
+PORTVERSION= 2020.04.81
+PORTREVISION= 1
+CATEGORIES= www
+MASTER_SITES= https://downloads.iridiumbrowser.de/source/
+PKGNAMESUFFIX= -browser
+DISTNAME= ${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}
+
+MAINTAINER= chromium@FreeBSD.org
+COMMENT= Iridium browser
+
+LICENSE= BSD3CLAUSE LGPL21 MPL11
+LICENSE_COMB= multi
+
+BUILD_DEPENDS= gperf:devel/gperf \
+ yasm:devel/yasm \
+ ffmpeg>=3.2.2,1:multimedia/ffmpeg \
+ bash:shells/bash \
+ flock:sysutils/flock \
+ node:www/node \
+ ${LOCALBASE}/bin/ar:devel/binutils \
+ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat \
+ ${LOCALBASE}/share/usbids/usb.ids:misc/usbids \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>0:devel/py-Jinja2@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}ply>0:devel/py-ply@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}html5lib>0:www/py-html5lib@${PY_FLAVOR}
+
+LIB_DEPENDS= libatk-bridge-2.0.so:accessibility/at-spi2-atk \
+ libatspi.so:accessibility/at-spi2-core \
+ libspeechd.so:accessibility/speech-dispatcher \
+ libsnappy.so:archivers/snappy \
+ libFLAC.so:audio/flac \
+ libopus.so:audio/opus \
+ libspeex.so:audio/speex \
+ libdbus-1.so:devel/dbus \
+ libdbus-glib-1.so:devel/dbus-glib \
+ libicuuc.so:devel/icu \
+ libjsoncpp.so:devel/jsoncpp \
+ libpci.so:devel/libpci \
+ libnspr4.so:devel/nspr \
+ libre2.so:devel/re2 \
+ libcairo.so:graphics/cairo \
+ libdrm.so:graphics/libdrm \
+ libexif.so:graphics/libexif \
+ libpng.so:graphics/png \
+ libwebp.so:graphics/webp \
+ libavcodec.so:multimedia/ffmpeg \
+ libopenh264.so:multimedia/openh264 \
+ libfreetype.so:print/freetype2 \
+ libharfbuzz.so:print/harfbuzz \
+ libharfbuzz-icu.so:print/harfbuzz-icu \
+ libgcrypt.so:security/libgcrypt \
+ libsecret-1.so:security/libsecret \
+ libnss3.so:security/nss \
+ libexpat.so:textproc/expat2 \
+ libfontconfig.so:x11-fonts/fontconfig
+
+RUN_DEPENDS= xdg-open:devel/xdg-utils \
+ noto-basic>0:x11-fonts/noto-basic
+
+ONLY_FOR_ARCHS= amd64 i386
+
+USES= bison cpe desktop-file-utils dos2unix gl gnome jpeg localbase:ldflags \
+ ninja perl5 pkgconfig python:2.7,build shebangfix tar:xz xorg
+USE_GL= gbm gl
+USE_LDCONFIG= ${DATADIR}
+USE_PERL5= build
+USE_XORG= x11 xcb xcomposite xcursor xext xdamage xfixes xi \
+ xorgproto xrandr xrender xscrnsaver xtst
+USE_GNOME= atk dconf glib20 gtk30 libxml2 libxslt
+MAKE_ARGS= -C out/${BUILDTYPE}
+BINARY_ALIAS= python=${PYTHON_CMD}
+DOS2UNIX_FILES= third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+ALL_TARGET= chrome
+INSTALLS_ICONS= yes
+
+EXTRA_PATCHES+= ${FILESDIR}/extra-patch-clang
+
+# Run "./out/${BUILDTYPE}/gn args out/${BUILDTYPE} --list" for all variables.
+# Some parts don't have use_system_* flag, and can be turned on/off by using
+# replace_gn_files.py script, some parts just turned on/off for target host
+# OS "target_os == is_bsd", like libusb, libpci.
+GN_ARGS+= clang_use_chrome_plugins=false \
+ enable_hangout_services_extension=false \
+ enable_nacl=false \
+ enable_one_click_signin=true \
+ enable_remoting=false \
+ fieldtrial_testing_like_official_build=true \
+ is_clang=true \
+ toolkit_views=true \
+ treat_warnings_as_errors=false \
+ use_allocator="none" \
+ use_allocator_shim=false \
+ use_aura=true \
+ use_custom_libcxx=false \
+ use_gnome_keyring=false \
+ use_lld=true \
+ use_sysroot=false \
+ use_system_freetype=true \
+ use_system_harfbuzz=true \
+ use_system_libjpeg=true \
+ extra_cxxflags="${CXXFLAGS}" \
+ extra_ldflags="${LDFLAGS}"
+# TODO: investigate building with these options:
+# use_system_minigbm
+GN_BOOTSTRAP_FLAGS= --no-clean --no-rebuild --skip-generate-buildfiles
+
+SUB_FILES= iridium-browser.desktop iridium
+SUB_LIST+= COMMENT="${COMMENT}"
+
+OPTIONS_DEFINE= CODECS CUPS DEBUG KERBEROS
+CODECS_DESC= Compile and enable patented codecs like H.264
+OPTIONS_GROUP= AUDIO
+OPTIONS_GROUP_AUDIO= ALSA PULSEAUDIO SNDIO
+
+OPTIONS_DEFAULT= ALSA CODECS CUPS KERBEROS
+OPTIONS_SUB= yes
+
+ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib
+ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins \
+ alsa-lib>=1.1.1_1:audio/alsa-lib
+ALSA_VARS= GN_ARGS+=use_alsa=true
+ALSA_VARS_OFF= GN_ARGS+=use_alsa=false
+
+CODECS_VARS= GN_ARGS+=ffmpeg_branding="Chrome" \
+ GN_ARGS+=proprietary_codecs=true
+CODECS_VARS_OFF= GN_ARGS+=ffmpeg_branding="Chromium" \
+ GN_ARGS+=proprietary_codecs=false
+
+CUPS_LIB_DEPENDS= libcups.so:print/cups
+CUPS_VARS= GN_ARGS+=use_cups=true
+CUPS_VARS_OFF= GN_ARGS+=use_cups=false
+
+DEBUG_VARS= BUILDTYPE=Debug \
+ GN_ARGS+=is_debug=true \
+ GN_ARGS+=is_component_build=false \
+ GN_ARGS+=symbol_level=1 \
+ GN_BOOTSTRAP_FLAGS+=--debug \
+ WANTSPACE="lots of free diskspace (~ 13GB)"
+DEBUG_VARS_OFF= BUILDTYPE=Release \
+ GN_ARGS+=blink_symbol_level=0 \
+ GN_ARGS+=is_debug=false \
+ GN_ARGS+=is_official_build=true \
+ GN_ARGS+=symbol_level=0 \
+ WANTSPACE="a fair amount of free diskspace (~ 6.5GB)"
+
+KERBEROS_VARS= GN_ARGS+=use_kerberos=true
+KERBEROS_VARS_OFF= GN_ARGS+=use_kerberos=false
+
+PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio
+PULSEAUDIO_VARS= GN_ARGS+=use_pulseaudio=true
+PULSEAUDIO_VARS_OFF= GN_ARGS+=use_pulseaudio=false
+
+# With SNDIO=on we exclude audio_manager_linux from the build (see
+# media/audio/BUILD.gn) and use audio_manager_openbsd which does not
+# support falling back to ALSA. In theory it supports falling back to
+# PulseAudio, but this is untested.
+SNDIO_PREVENTS= ALSA PULSEAUDIO
+SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
+SNDIO_VARS= GN_ARGS+=use_sndio=true
+SNDIO_VARS_OFF= GN_ARGS+=use_sndio=false
+
+# Make better javascript with java
+JAVA_BUILD= yes
+JAVA_VERSION= 1.8
+USE_JAVA= yes
+
+# Allow relocations against read-only segments (override lld default)
+LDFLAGS_i386= -Wl,-znotext
+
+# TODO: -isystem, would be just as ugly as this approach, but more reliably
+# build would fail without C_INCLUDE_PATH/CPLUS_INCLUDE_PATH env var set.
+MAKE_ENV+= C_INCLUDE_PATH=${LOCALBASE}/include \
+ CPLUS_INCLUDE_PATH=${LOCALBASE}/include
+
+pre-everything::
+ @${ECHO_MSG}
+ @${ECHO_MSG} "To build Iridium, you should have around 2GB of memory"
+ @${ECHO_MSG} "and ${WANTSPACE}."
+ @${ECHO_MSG}
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|@@PACKAGE@@|iridium|' \
+ -e 's|@@MENUNAME@@|Iridium Web Browser|' \
+ ${WRKSRC}/chrome/app/resources/manpage.1.in
+
+post-patch-SNDIO-on:
+ @${MKDIR} ${WRKSRC}/media/audio/sndio ${WRKSRC}/media/audio/openbsd
+ @${CP} ${FILESDIR}/sndio_output.* ${WRKSRC}/media/audio/sndio
+ @${CP} ${FILESDIR}/sndio_input.* ${WRKSRC}/media/audio/sndio
+ @${CP} ${FILESDIR}/audio_manager_openbsd.* ${WRKSRC}/media/audio/openbsd
+
+pre-configure:
+ # We used to remove bundled libraries to be sure that iridium uses
+ # system libraries and not shippen ones.
+ # cd ${WRKSRC} && ${PYTHON_CMD} \
+ #./build/linux/unbundle/remove_bundled_libraries.py [list of preserved]
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} \
+ ./build/linux/unbundle/replace_gn_files.py --system-libraries \
+ ffmpeg flac fontconfig freetype harfbuzz-ng libdrm libpng libwebp libxml libxslt openh264 opus snappy yasm || ${FALSE}
+
+do-configure:
+ # GN generator bootstrapping and generating ninja files
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} CC=${CC} CXX=${CXX} LD=${CXX} \
+ READELF=${READELF} AR=${AR} NM=${NM} ${PYTHON_CMD} \
+ ./tools/gn/bootstrap/bootstrap.py ${GN_BOOTSTRAP_FLAGS}
+ cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ./out/${BUILDTYPE}/gn \
+ gen --args='${GN_ARGS}' out/${BUILDTYPE}
+
+ # Setup nodejs dependency
+ @${MKDIR} ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin
+ ${LN} -sf ${LOCALBASE}/bin/node ${WRKSRC}/third_party/node/freebsd/node-freebsd-x64/bin/node
+
+ # Setup java dependency
+ @${MKDIR} ${WRKDIR}/bin
+ ${LN} -sf ${LOCALBASE}/openjdk8/bin/java ${WRKDIR}/bin/java
+
+do-install:
+ @${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_MAN} ${WRKSRC}/chrome/app/resources/manpage.1.in \
+ ${STAGEDIR}${MANPREFIX}/man/man1/iridium.1
+ ${CP} ${WRKSRC}/chrome/app/theme/chromium/product_logo_22_mono.png ${WRKSRC}/chrome/app/theme/chromium/product_logo_22.png
+.for s in 22 24 48 64 128 256
+ @${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps
+ ${INSTALL_DATA} ${WRKSRC}/chrome/app/theme/chromium/product_logo_${s}.png \
+ ${STAGEDIR}${PREFIX}/share/icons/hicolor/${s}x${s}/apps/iridium.png
+.endfor
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*.png ${STAGEDIR}${DATADIR}
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/*.pak ${STAGEDIR}${DATADIR}
+
+.for d in protoc mksnapshot
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/${d} ${STAGEDIR}${DATADIR}
+.endfor
+.for d in icudtl.dat snapshot_blob.bin v8_context_snapshot.bin
+ ${INSTALL_DATA} ${WRKSRC}/out/${BUILDTYPE}/${d} ${STAGEDIR}${DATADIR}
+.endfor
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/chrome \
+ ${STAGEDIR}${DATADIR}/iridium
+ cd ${WRKSRC}/out/${BUILDTYPE} && \
+ ${COPYTREE_SHARE} "locales resources" ${STAGEDIR}${DATADIR}
+ @${MKDIR} ${STAGEDIR}${DESKTOPDIR}
+ ${INSTALL_DATA} ${WRKDIR}/iridium-browser.desktop \
+ ${STAGEDIR}${DESKTOPDIR}
+ ${INSTALL_SCRIPT} ${WRKDIR}/iridium ${STAGEDIR}${PREFIX}/bin
+
+ # ANGLE, EGL, Vk
+.for f in libEGL.so libGLESv2.so libVkICD_mock_icd.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/${f} ${STAGEDIR}${DATADIR}
+.endfor
+
+ # SwiftShader
+ @${MKDIR} ${STAGEDIR}${DATADIR}/swiftshader
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/libvk_swiftshader.so ${STAGEDIR}${DATADIR}
+.for g in libEGL.so libGLESv2.so
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/swiftshader/${g} \
+ ${STAGEDIR}${DATADIR}/swiftshader
+.endfor
+
+post-install-DEBUG-on:
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/libVkLayer_khronos_validation.so \
+ ${STAGEDIR}${DATADIR}
+ ${INSTALL_LIB} ${WRKSRC}/out/${BUILDTYPE}/*.so \
+ ${STAGEDIR}${DATADIR}
+ ${INSTALL_PROGRAM} ${WRKSRC}/out/${BUILDTYPE}/character_data_generator \
+ ${STAGEDIR}${DATADIR}
+
+.include <bsd.port.mk>
diff --git a/www/iridium/distinfo b/www/iridium/distinfo
new file mode 100644
index 000000000000..c3950662e4b2
--- /dev/null
+++ b/www/iridium/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1586612680
+SHA256 (iridium-browser-2020.04.81.tar.xz) = b9283170001db5f93d9edec61d1abfd2ad66918c266b2cf88cb448470811ab91
+SIZE (iridium-browser-2020.04.81.tar.xz) = 854266540
diff --git a/www/iridium/files/audio_manager_openbsd.cc b/www/iridium/files/audio_manager_openbsd.cc
new file mode 100644
index 000000000000..ee293b9d3791
--- /dev/null
+++ b/www/iridium/files/audio_manager_openbsd.cc
@@ -0,0 +1,177 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/metrics/histogram_macros.h"
+#include "base/memory/ptr_util.h"
+
+#include "media/audio/openbsd/audio_manager_openbsd.h"
+
+#include "media/audio/audio_device_description.h"
+#include "media/audio/audio_output_dispatcher.h"
+#if defined(USE_SNDIO)
+#include "media/audio/sndio/sndio_input.h"
+#include "media/audio/sndio/sndio_output.h"
+#else
+#include "media/audio/fake_audio_manager.h"
+#endif
+#include "media/base/limits.h"
+#include "media/base/media_switches.h"
+
+namespace media {
+
+enum OpenBSDAudioIO {
+ kPulse,
+ kSndio,
+ kAudioIOMax = kSndio
+};
+
+#if defined(USE_SNDIO)
+// Maximum number of output streams that can be open simultaneously.
+static const int kMaxOutputStreams = 4;
+
+// Default sample rate for input and output streams.
+static const int kDefaultSampleRate = 48000;
+
+void AddDefaultDevice(AudioDeviceNames* device_names) {
+ DCHECK(device_names->empty());
+ device_names->push_front(AudioDeviceName::CreateDefault());
+}
+
+bool AudioManagerOpenBSD::HasAudioOutputDevices() {
+ return true;
+}
+
+bool AudioManagerOpenBSD::HasAudioInputDevices() {
+ return true;
+}
+
+void AudioManagerOpenBSD::GetAudioInputDeviceNames(
+ AudioDeviceNames* device_names) {
+ DCHECK(device_names->empty());
+ AddDefaultDevice(device_names);
+}
+
+void AudioManagerOpenBSD::GetAudioOutputDeviceNames(
+ AudioDeviceNames* device_names) {
+ AddDefaultDevice(device_names);
+}
+
+#if defined(USE_SNDIO)
+const char* AudioManagerOpenBSD::GetName() {
+ return "SNDIO";
+}
+#endif
+
+AudioParameters AudioManagerOpenBSD::GetInputStreamParameters(
+ const std::string& device_id) {
+ static const int kDefaultInputBufferSize = 1024;
+
+ int user_buffer_size = GetUserBufferSize();
+ int buffer_size = user_buffer_size ?
+ user_buffer_size : kDefaultInputBufferSize;
+
+ return AudioParameters(
+ AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
+ kDefaultSampleRate, buffer_size);
+}
+
+AudioManagerOpenBSD::AudioManagerOpenBSD(std::unique_ptr<AudioThread> audio_thread,
+ AudioLogFactory* audio_log_factory)
+ : AudioManagerBase(std::move(audio_thread),
+ audio_log_factory) {
+ DLOG(WARNING) << "AudioManagerOpenBSD";
+ SetMaxOutputStreamsAllowed(kMaxOutputStreams);
+}
+
+AudioManagerOpenBSD::~AudioManagerOpenBSD() {
+ Shutdown();
+}
+
+AudioOutputStream* AudioManagerOpenBSD::MakeLinearOutputStream(
+ const AudioParameters& params,
+ const LogCallback& log_callback) {
+ DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
+ return MakeOutputStream(params);
+}
+
+AudioOutputStream* AudioManagerOpenBSD::MakeLowLatencyOutputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) {
+ DLOG_IF(ERROR, !device_id.empty()) << "Not implemented!";
+ DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
+ return MakeOutputStream(params);
+}
+
+AudioInputStream* AudioManagerOpenBSD::MakeLinearInputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) {
+ DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
+ return MakeInputStream(params);
+}
+
+AudioInputStream* AudioManagerOpenBSD::MakeLowLatencyInputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) {
+ DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format());
+ return MakeInputStream(params);
+}
+
+AudioParameters AudioManagerOpenBSD::GetPreferredOutputStreamParameters(
+ const std::string& output_device_id,
+ const AudioParameters& input_params) {
+ // TODO(tommi): Support |output_device_id|.
+ DLOG_IF(ERROR, !output_device_id.empty()) << "Not implemented!";
+ static const int kDefaultOutputBufferSize = 2048;
+
+ ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
+ int sample_rate = kDefaultSampleRate;
+ int buffer_size = kDefaultOutputBufferSize;
+ if (input_params.IsValid()) {
+ sample_rate = input_params.sample_rate();
+ channel_layout = input_params.channel_layout();
+ buffer_size = std::min(buffer_size, input_params.frames_per_buffer());
+ }
+
+ int user_buffer_size = GetUserBufferSize();
+ if (user_buffer_size)
+ buffer_size = user_buffer_size;
+
+ return AudioParameters(
+ AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
+ sample_rate, buffer_size);
+}
+
+AudioInputStream* AudioManagerOpenBSD::MakeInputStream(
+ const AudioParameters& params) {
+ DLOG(WARNING) << "MakeInputStream";
+ return new SndioAudioInputStream(this,
+ AudioDeviceDescription::kDefaultDeviceId, params);
+}
+
+AudioOutputStream* AudioManagerOpenBSD::MakeOutputStream(
+ const AudioParameters& params) {
+ DLOG(WARNING) << "MakeOutputStream";
+ return new SndioAudioOutputStream(params, this);
+}
+#endif
+
+std::unique_ptr<media::AudioManager> CreateAudioManager(
+ std::unique_ptr<AudioThread> audio_thread,
+ AudioLogFactory* audio_log_factory) {
+ DLOG(WARNING) << "CreateAudioManager";
+#if defined(USE_SNDIO)
+ UMA_HISTOGRAM_ENUMERATION("Media.OpenBSDAudioIO", kSndio, kAudioIOMax + 1);
+ return std::make_unique<AudioManagerOpenBSD>(std::move(audio_thread),
+ audio_log_factory);
+#else
+ return std::make_unique<FakeAudioManager>(std::move(audio_thread),
+ audio_log_factory);
+#endif
+
+}
+
+} // namespace media
diff --git a/www/iridium/files/audio_manager_openbsd.h b/www/iridium/files/audio_manager_openbsd.h
new file mode 100644
index 000000000000..8c99db966d65
--- /dev/null
+++ b/www/iridium/files/audio_manager_openbsd.h
@@ -0,0 +1,65 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_
+#define MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_
+
+#include <set>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/threading/thread.h"
+#include "media/audio/audio_manager_base.h"
+
+namespace media {
+
+class MEDIA_EXPORT AudioManagerOpenBSD : public AudioManagerBase {
+ public:
+ AudioManagerOpenBSD(std::unique_ptr<AudioThread> audio_thread,
+ AudioLogFactory* audio_log_factory);
+ ~AudioManagerOpenBSD() override;
+
+ // Implementation of AudioManager.
+ bool HasAudioOutputDevices() override;
+ bool HasAudioInputDevices() override;
+ void GetAudioInputDeviceNames(AudioDeviceNames* device_names) override;
+ void GetAudioOutputDeviceNames(AudioDeviceNames* device_names) override;
+ AudioParameters GetInputStreamParameters(
+ const std::string& device_id) override;
+ const char* GetName() override;
+
+ // Implementation of AudioManagerBase.
+ AudioOutputStream* MakeLinearOutputStream(
+ const AudioParameters& params,
+ const LogCallback& log_callback) override;
+ AudioOutputStream* MakeLowLatencyOutputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) override;
+ AudioInputStream* MakeLinearInputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) override;
+ AudioInputStream* MakeLowLatencyInputStream(
+ const AudioParameters& params,
+ const std::string& device_id,
+ const LogCallback& log_callback) override;
+
+ protected:
+ AudioParameters GetPreferredOutputStreamParameters(
+ const std::string& output_device_id,
+ const AudioParameters& input_params) override;
+
+ private:
+ // Called by MakeLinearOutputStream and MakeLowLatencyOutputStream.
+ AudioOutputStream* MakeOutputStream(const AudioParameters& params);
+ AudioInputStream* MakeInputStream(const AudioParameters& params);
+
+ DISALLOW_COPY_AND_ASSIGN(AudioManagerOpenBSD);
+};
+
+} // namespace media
+
+#endif // MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_
diff --git a/www/iridium/files/extra-patch-clang b/www/iridium/files/extra-patch-clang
new file mode 100644
index 000000000000..887a416b5f2d
--- /dev/null
+++ b/www/iridium/files/extra-patch-clang
@@ -0,0 +1,40 @@
+--- base/strings/safe_sprintf_unittest.cc.orig 2019-03-11 22:00:51 UTC
++++ base/strings/safe_sprintf_unittest.cc
+@@ -730,6 +730,7 @@ TEST(SafeSPrintfTest, EmbeddedNul) {
+ }
+
+ TEST(SafeSPrintfTest, EmitNULL) {
++/* Avoid compiler error: http://pastebin.com/1edWUE84
+ char buf[40];
+ #if defined(__GNUC__)
+ #pragma GCC diagnostic push
+@@ -741,6 +742,7 @@ TEST(SafeSPrintfTest, EmitNULL) {
+ EXPECT_EQ("0x0", std::string(buf));
+ EXPECT_EQ(6, SafeSPrintf(buf, "%s", NULL));
+ EXPECT_EQ("<NULL>", std::string(buf));
++*/
+ #if defined(__GCC__)
+ #pragma GCC diagnostic pop
+ #endif
+--- base/threading/thread_local_storage_unittest.cc.orig 2019-03-11 22:00:51 UTC
++++ base/threading/thread_local_storage_unittest.cc
+@@ -86,7 +86,7 @@ class ThreadLocalStorageRunner : public DelegateSimple
+ void ThreadLocalStorageCleanup(void *value) {
+ int *ptr = reinterpret_cast<int*>(value);
+ // Destructors should never be called with a NULL.
+- ASSERT_NE(reinterpret_cast<int*>(NULL), ptr);
++ ASSERT_NE(static_cast<int*>(NULL), ptr);
+ if (*ptr == kFinalTlsValue)
+ return; // We've been called enough times.
+ ASSERT_LT(kFinalTlsValue, *ptr);
+--- media/audio/audio_output_proxy_unittest.cc.orig 2019-03-11 22:00:59 UTC
++++ media/audio/audio_output_proxy_unittest.cc
+@@ -410,7 +410,7 @@ class AudioOutputProxyTest : public testing::Test {
+ // |stream| is closed at this point. Start() should reopen it again.
+ EXPECT_CALL(manager(), MakeAudioOutputStream(_, _, _))
+ .Times(2)
+- .WillRepeatedly(Return(reinterpret_cast<AudioOutputStream*>(NULL)));
++ .WillRepeatedly(Return(static_cast<AudioOutputStream*>(NULL)));
+
+ EXPECT_CALL(callback_, OnError()).Times(2);
+
diff --git a/www/iridium/files/iridium-browser.desktop.in b/www/iridium/files/iridium-browser.desktop.in
new file mode 100644
index 000000000000..cb92990ad825
--- /dev/null
+++ b/www/iridium/files/iridium-browser.desktop.in
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Encoding=UTF-8
+Name=Iridium
+Comment=%%COMMENT%%
+Icon=iridium
+Exec=iridium %U
+Categories=Application;Network;WebBrowser;
+MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
+StartupNotify=true
diff --git a/www/iridium/files/iridium.in b/www/iridium/files/iridium.in
new file mode 100644
index 000000000000..0237611bb622
--- /dev/null
+++ b/www/iridium/files/iridium.in
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+SYSCTL=kern.ipc.shm_allow_removed
+if [ "`/sbin/sysctl -n $SYSCTL`" = 0 ] ; then
+ cat << EOMSG
+For correct operation, shared memory support has to be enabled
+in Iridium by performing the following command as root :
+
+sysctl $SYSCTL=1
+
+To preserve this setting across reboots, append the following
+to /etc/sysctl.conf :
+
+$SYSCTL=1
+EOMSG
+ exit 1
+fi
+ulimit -c 0
+exec %%PREFIX%%/share/iridium/iridium ${1+"$@"}
diff --git a/www/iridium/files/patch-3p-pdfium_3p_base_allocator_partition__allocator_page__allocator__internals__posix.h b/www/iridium/files/patch-3p-pdfium_3p_base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..a3130315b68e
--- /dev/null
+++ b/www/iridium/files/patch-3p-pdfium_3p_base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2020-04-03 04:13:08 UTC
++++ third_party/pdfium/third_party/base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -16,7 +16,7 @@
+ #if defined(OS_ANDROID)
+ #include <sys/prctl.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+
+ #include <algorithm>
diff --git a/www/iridium/files/patch-BUILD.gn b/www/iridium/files/patch-BUILD.gn
new file mode 100644
index 000000000000..0af06e81260e
--- /dev/null
+++ b/www/iridium/files/patch-BUILD.gn
@@ -0,0 +1,95 @@
+--- BUILD.gn.orig 2020-03-16 18:40:27 UTC
++++ BUILD.gn
+@@ -418,7 +418,7 @@ group("gn_all") {
+ ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ deps += [
+ "//third_party/breakpad:breakpad_unittests",
+ "//third_party/breakpad:core-2-minidump",
+@@ -459,8 +459,6 @@ group("gn_all") {
+ "//net:disk_cache_memory_test",
+ "//net:quic_client",
+ "//net:quic_server",
+- "//sandbox/linux:chrome_sandbox",
+- "//sandbox/linux:sandbox_linux_unittests",
+ "//testing:empty_main",
+ ]
+
+@@ -515,10 +513,6 @@ group("gn_all") {
+ "//chrome/test:load_library_perf_tests",
+ "//chrome/test:sync_performance_tests",
+ "//chrome/test/chromedriver:chromedriver",
+- "//courgette:courgette",
+- "//courgette:courgette_fuzz",
+- "//courgette:courgette_minimal_tool",
+- "//courgette:courgette_unittests",
+ "//media/cast:generate_barcode_video",
+ "//media/cast:generate_timecode_audio",
+ "//net:crash_cache",
+@@ -575,10 +569,6 @@ group("gn_all") {
+ "//mojo:mojo_perftests",
+ "//services/service_manager/public/cpp",
+ "//testing/gmock:gmock_main",
+- "//third_party/breakpad:dump_syms($host_toolchain)",
+- "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+- "//third_party/breakpad:minidump_dump($host_toolchain)",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+ ]
+
+ if (!is_android) {
+@@ -652,7 +642,7 @@ group("gn_all") {
+ host_os == "win") {
+ deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
+ }
+- } else if (!is_android && !is_ios && !is_fuchsia) {
++ } else if (!is_android && !is_ios && !is_fuchsia && !is_bsd) {
+ deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
+ }
+
+@@ -794,7 +784,6 @@ group("gn_all") {
+ "//chrome/browser/vr:vr_common_perftests",
+ "//chrome/browser/vr:vr_common_unittests",
+ "//chrome/browser/vr:vr_pixeltests",
+- "//tools/perf/contrib/vr_benchmarks:vr_perf_tests",
+ ]
+ if (is_desktop_linux && use_ozone) {
+ deps += [ "//chrome/browser/vr/testapp:vr_testapp" ]
+@@ -934,7 +923,6 @@ if (is_chromeos) {
+ "//ppapi/examples/video_decode",
+ "//sandbox/linux:chrome_sandbox",
+ "//sandbox/linux:sandbox_linux_unittests",
+- "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
+
+ # Blocked on https://github.com/catapult-project/catapult/issues/2297
+ #"//third_party/catapult/telemetry:bitmaptools",
+@@ -1092,7 +1080,7 @@ if (!is_ios) {
+ ]
+ }
+
+- if (!is_win && !is_android) {
++ if (!is_win && !is_android && !is_bsd) {
+ data_deps +=
+ [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+@@ -1101,7 +1089,7 @@ if (!is_ios) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
+ }
+
+@@ -1231,9 +1219,6 @@ group("chromium_builder_perf") {
+
+ if (is_win) {
+ data_deps += [ "//chrome/installer/mini_installer:mini_installer" ]
+- } else {
+- data_deps +=
+- [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
+ }
+ if (is_win || is_android) {
+ data_deps += [
diff --git a/www/iridium/files/patch-apps_app__restore__service__browsertest.cc b/www/iridium/files/patch-apps_app__restore__service__browsertest.cc
new file mode 100644
index 000000000000..dc9a47b7323a
--- /dev/null
+++ b/www/iridium/files/patch-apps_app__restore__service__browsertest.cc
@@ -0,0 +1,11 @@
+--- apps/app_restore_service_browsertest.cc.orig 2020-03-23 15:18:04 UTC
++++ apps/app_restore_service_browsertest.cc
+@@ -147,7 +147,7 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, FileAcc
+ }
+
+ // Flaky: crbug.com/269613
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #define MAYBE_FileAccessIsRestored DISABLED_FileAccessIsRestored
+ #else
+ #define MAYBE_FileAccessIsRestored FileAccessIsRestored
diff --git a/www/iridium/files/patch-apps_ui_views_app__window__frame__view.cc b/www/iridium/files/patch-apps_ui_views_app__window__frame__view.cc
new file mode 100644
index 000000000000..8f6bd623a3b3
--- /dev/null
+++ b/www/iridium/files/patch-apps_ui_views_app__window__frame__view.cc
@@ -0,0 +1,11 @@
+--- apps/ui/views/app_window_frame_view.cc.orig 2019-06-04 18:55:14 UTC
++++ apps/ui/views/app_window_frame_view.cc
+@@ -125,7 +125,7 @@ gfx::Rect AppWindowFrameView::GetBoundsForClientView()
+ gfx::Rect AppWindowFrameView::GetWindowBoundsForClientBounds(
+ const gfx::Rect& client_bounds) const {
+ gfx::Rect window_bounds = client_bounds;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Get the difference between the widget's client area bounds and window
+ // bounds, and grow |window_bounds| by that amount.
+ gfx::Insets native_frame_insets =
diff --git a/www/iridium/files/patch-ash_display_mirror__window__controller.cc b/www/iridium/files/patch-ash_display_mirror__window__controller.cc
new file mode 100644
index 000000000000..d5bf99f6dba3
--- /dev/null
+++ b/www/iridium/files/patch-ash_display_mirror__window__controller.cc
@@ -0,0 +1,14 @@
+--- ash/display/mirror_window_controller.cc.orig 2020-03-16 18:40:27 UTC
++++ ash/display/mirror_window_controller.cc
+@@ -276,7 +276,11 @@ void MirrorWindowController::UpdateWindow(
+ return info.id() == iter->first;
+ }) == display_info_list.end()) {
+ CloseAndDeleteHost(iter->second, true);
++#if defined(__llvm__)
++ mirroring_host_info_map_.erase(iter++);
++#else
+ iter = mirroring_host_info_map_.erase(iter);
++#endif
+ } else {
+ ++iter;
+ }
diff --git a/www/iridium/files/patch-base_BUILD.gn b/www/iridium/files/patch-base_BUILD.gn
new file mode 100644
index 000000000000..30f1110ebaff
--- /dev/null
+++ b/www/iridium/files/patch-base_BUILD.gn
@@ -0,0 +1,98 @@
+--- base/BUILD.gn.orig 2020-03-16 18:40:27 UTC
++++ base/BUILD.gn
+@@ -912,7 +912,7 @@ jumbo_component("base") {
+ "timer/hi_res_timer_manager_posix.cc",
+ ]
+
+- if (!is_nacl && !is_mac && !is_ios) {
++ if (!is_nacl && !is_mac && !is_ios && !is_bsd) {
+ sources += [
+ "profiler/stack_copier_signal.cc",
+ "profiler/stack_copier_signal.h",
+@@ -921,6 +921,12 @@ jumbo_component("base") {
+ "profiler/thread_delegate_posix.h",
+ ]
+ }
++
++ if (is_bsd) {
++ sources += [
++ "profiler/stack_sampler_posix.cc",
++ ]
++ }
+ }
+
+ if (is_win) {
+@@ -1305,7 +1311,7 @@ jumbo_component("base") {
+ # Needed for <atomic> if using newer C++ library than sysroot, except if
+ # building inside the cros_sdk environment - use host_toolchain as a
+ # more robust check for this.
+- if (!use_sysroot && (is_android || (is_linux && !is_chromecast)) &&
++ if (!use_sysroot && (is_android || (is_linux && !is_chromecast) && !is_clang) &&
+ host_toolchain != "//build/toolchain/cros:host") {
+ libs += [ "atomic" ]
+ }
+@@ -1331,7 +1337,7 @@ jumbo_component("base") {
+ "allocator/allocator_shim_override_glibc_weak_symbols.h",
+ ]
+ deps += [ "//base/allocator:tcmalloc" ]
+- } else if (is_linux && use_allocator == "none") {
++ } else if ((is_linux && !is_bsd) && use_allocator == "none") {
+ sources += [ "allocator/allocator_shim_default_dispatch_to_glibc.cc" ]
+ } else if (is_android && use_allocator == "none") {
+ sources += [
+@@ -1930,6 +1936,33 @@ jumbo_component("base") {
+ }
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "files/file_path_watcher_linux.cc",
++ "files/file_util_linux.cc",
++ "process/memory_linux.cc",
++ "process/process_handle_linux.cc",
++ "process/process_iterator_linux.cc",
++ "process/process_metrics_linux.cc",
++ "system/sys_info_linux.cc"
++ ]
++ sources += [
++ "files/file_path_watcher_kqueue.cc",
++ "files/file_path_watcher_kqueue.h",
++ "files/file_path_watcher_stub.cc",
++ "process/memory_stubs.cc",
++ "process/process_handle_freebsd.cc",
++ "process/process_iterator_freebsd.cc",
++ "process/process_metrics_freebsd.cc",
++ "system/sys_info_freebsd.cc",
++ ]
++ libs = [
++ "execinfo", # logging.cc
++ "kvm", # process_metrics_freebsd
++ "util" # process_metrics_freebsd
++ ]
++ }
++
+ # iOS
+ if (is_ios) {
+ sources -= [
+@@ -2880,7 +2913,7 @@ test("base_unittests") {
+ "posix/unix_domain_socket_unittest.cc",
+ "task/thread_pool/task_tracker_posix_unittest.cc",
+ ]
+- if (!is_nacl && !is_mac && !is_ios) {
++ if (!is_nacl && !is_mac && !is_ios && !is_bsd) {
+ sources += [ "profiler/stack_copier_signal_unittest.cc" ]
+ }
+ }
+@@ -3068,6 +3101,12 @@ test("base_unittests") {
+
+ manifest = "//build/config/fuchsia/tests.cmx"
+ }
++
++ if (is_bsd) {
++ sources -= [
++ "debug/proc_maps_linux_unittest.cc",
++ ]
++ }
+
+ if (!is_fuchsia && !is_ios) {
+ sources += [ "files/file_locking_unittest.cc" ]
diff --git a/www/iridium/files/patch-base_allocator_allocator__shim.cc b/www/iridium/files/patch-base_allocator_allocator__shim.cc
new file mode 100644
index 000000000000..208a8d93617a
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_allocator__shim.cc
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim.cc.orig 2019-10-21 19:06:18 UTC
++++ base/allocator/allocator_shim.cc
+@@ -71,7 +71,7 @@ inline const base::allocator::AllocatorDispatch* GetCh
+ // Unfortunately due to that bug NoBarrier_Load() is mistakenly fully
+ // barriered on Linux+Clang, and that causes visible perf regressons.
+ return reinterpret_cast<const base::allocator::AllocatorDispatch*>(
+-#if defined(OS_LINUX) && defined(__clang__)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && defined(__clang__)
+ *static_cast<const volatile base::subtle::AtomicWord*>(&g_chain_head)
+ #else
+ base::subtle::NoBarrier_Load(&g_chain_head)
diff --git a/www/iridium/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc b/www/iridium/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
new file mode 100644
index 000000000000..c7b4ac21c804
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_allocator__shim__default__dispatch__to__glibc.cc
@@ -0,0 +1,76 @@
+--- base/allocator/allocator_shim_default_dispatch_to_glibc.cc.orig 2020-02-03 21:52:37 UTC
++++ base/allocator/allocator_shim_default_dispatch_to_glibc.cc
+@@ -6,18 +6,28 @@
+ #include "base/compiler_specific.h"
+
+ #include <dlfcn.h>
+-#include <malloc.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <malloc_np.h>
+
+ // This translation unit defines a default dispatch for the allocator shim which
+ // routes allocations to libc functions.
+-// The code here is strongly inspired from tcmalloc's libc_override_glibc.h.
++// The code here is strongly inspired from tcmalloc's override_glibc.h.
+
+ extern "C" {
+-void* __libc_malloc(size_t size);
+-void* __libc_calloc(size_t n, size_t size);
+-void* __libc_realloc(void* address, size_t size);
+-void* __libc_memalign(size_t alignment, size_t size);
+-void __libc_free(void* ptr);
++void* __malloc(size_t size);
++void* __calloc(size_t n, size_t size);
++void* __realloc(void* address, size_t len);
++void* __memalign(size_t alignment, size_t size) {
++ void *ret;
++ if (__posix_memalign(&ret, alignment, size) != 0) {
++ return nullptr;
++ } else {
++ return ret;
++ }
++}
++int __posix_memalign(void **ptr, size_t alignment, size_t size);
++void __free(void* ptr);
+ } // extern "C"
+
+ namespace {
+@@ -25,32 +35,32 @@ namespace {
+ using base::allocator::AllocatorDispatch;
+
+ void* GlibcMalloc(const AllocatorDispatch*, size_t size, void* context) {
+- return __libc_malloc(size);
++ return __malloc(size);
+ }
+
+ void* GlibcCalloc(const AllocatorDispatch*,
+ size_t n,
+ size_t size,
+ void* context) {
+- return __libc_calloc(n, size);
++ return __calloc(n, size);
+ }
+
+ void* GlibcRealloc(const AllocatorDispatch*,
+ void* address,
+ size_t size,
+ void* context) {
+- return __libc_realloc(address, size);
++ return __realloc(address, size);
+ }
+
+ void* GlibcMemalign(const AllocatorDispatch*,
+ size_t alignment,
+ size_t size,
+ void* context) {
+- return __libc_memalign(alignment, size);
++ return __memalign(alignment, size);
+ }
+
+ void GlibcFree(const AllocatorDispatch*, void* address, void* context) {
+- __libc_free(address);
++ __free(address);
+ }
+
+ NO_SANITIZE("cfi-icall")
diff --git a/www/iridium/files/patch-base_allocator_allocator__shim__override__libc__symbols.h b/www/iridium/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
new file mode 100644
index 000000000000..fc9a47bd3daf
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_allocator__shim__override__libc__symbols.h
@@ -0,0 +1,11 @@
+--- base/allocator/allocator_shim_override_libc_symbols.h.orig 2019-03-11 22:00:51 UTC
++++ base/allocator/allocator_shim_override_libc_symbols.h
+@@ -10,7 +10,7 @@
+ #endif
+ #define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_LIBC_SYMBOLS_H_
+
+-#include <malloc.h>
++#include <stdlib.h>
+
+ #include "base/allocator/allocator_shim_internals.h"
+
diff --git a/www/iridium/files/patch-base_allocator_allocator__shim__unittest.cc b/www/iridium/files/patch-base_allocator_allocator__shim__unittest.cc
new file mode 100644
index 000000000000..1f7664842a07
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_allocator__shim__unittest.cc
@@ -0,0 +1,45 @@
+--- base/allocator/allocator_shim_unittest.cc.orig 2020-03-16 18:39:41 UTC
++++ base/allocator/allocator_shim_unittest.cc
+@@ -348,7 +348,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_size[61], 1u);
+ #endif // !OS_WIN
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void* memalign_ptr = memalign(128, 53);
+ ASSERT_NE(nullptr, memalign_ptr);
+ ASSERT_EQ(0u, reinterpret_cast<uintptr_t>(memalign_ptr) % 128);
+@@ -361,7 +361,7 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ ASSERT_GE(aligned_allocs_intercepted_by_alignment[kPageSize], 1u);
+ // pvalloc rounds the size up to the next page.
+ ASSERT_GE(aligned_allocs_intercepted_by_size[kPageSize], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ char* realloc_ptr = static_cast<char*>(malloc(10));
+ strcpy(realloc_ptr, "foobar");
+@@ -377,13 +377,13 @@ TEST_F(AllocatorShimTest, InterceptLibcSymbols) {
+ free(zero_alloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(zero_alloc_ptr)], 1u);
+
+-#if !defined(OS_WIN) && !defined(OS_MACOSX)
++#if !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ free(memalign_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u);
+
+ free(pvalloc_ptr);
+ ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u);
+-#endif // !OS_WIN && !OS_MACOSX
++#endif // !OS_WIN && !OS_MACOSX && !OS_BSD
+
+ #if !defined(OS_WIN)
+ free(posix_memalign_ptr);
+@@ -550,7 +550,7 @@ static size_t GetAllocatedSize(void* ptr) {
+ static size_t GetAllocatedSize(void* ptr) {
+ return malloc_size(ptr);
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ static size_t GetAllocatedSize(void* ptr) {
+ return malloc_usable_size(ptr);
+ }
diff --git a/www/iridium/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h b/www/iridium/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
new file mode 100644
index 000000000000..fbd28e22abe2
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_partition__allocator_page__allocator__internals__posix.h
@@ -0,0 +1,11 @@
+--- base/allocator/partition_allocator/page_allocator_internals_posix.h.orig 2019-10-21 19:06:18 UTC
++++ base/allocator/partition_allocator/page_allocator_internals_posix.h
+@@ -19,7 +19,7 @@
+ #if defined(OS_ANDROID)
+ #include <sys/prctl.h>
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_BSD) || defined(OS_LINUX)
+ #include <sys/resource.h>
+
+ #include <algorithm>
diff --git a/www/iridium/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc b/www/iridium/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc
new file mode 100644
index 000000000000..12143fe54c50
--- /dev/null
+++ b/www/iridium/files/patch-base_allocator_partition__allocator_partition__alloc__unittest.cc
@@ -0,0 +1,17 @@
+--- base/allocator/partition_allocator/partition_alloc_unittest.cc.orig 2020-03-23 15:20:45 UTC
++++ base/allocator/partition_allocator/partition_alloc_unittest.cc
+@@ -314,9 +314,13 @@ void FreeFullPage(PartitionPage* page) {
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool CheckPageInCore(void* ptr, bool in_core) {
++#if defined(OS_BSD)
++ char ret = 0;
++#else
+ unsigned char ret = 0;
++#endif
+ EXPECT_EQ(0, mincore(ptr, kSystemPageSize, &ret));
+ return in_core == (ret & 1);
+ }
diff --git a/www/iridium/files/patch-base_base__switches.cc b/www/iridium/files/patch-base_base__switches.cc
new file mode 100644
index 000000000000..92ed9217882d
--- /dev/null
+++ b/www/iridium/files/patch-base_base__switches.cc
@@ -0,0 +1,20 @@
+--- base/base_switches.cc.orig 2019-10-21 19:06:18 UTC
++++ base/base_switches.cc
+@@ -117,7 +117,7 @@ const char kDisableHighResTimer[] = "disable-highres-t
+ const char kDisableUsbKeyboardDetect[] = "disable-usb-keyboard-detect";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The /dev/shm partition is too small in certain VM environments, causing
+ // Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
+ // work-around this issue (a temporary directory will always be used to create
+@@ -138,7 +138,7 @@ const char kEnableCrashReporterForTesting[] =
+ const char kEnableReachedCodeProfiler[] = "enable-reached-code-profiler";
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Controls whether or not retired instruction counts are surfaced for threads
+ // in trace events on Linux.
+ //
diff --git a/www/iridium/files/patch-base_base__switches.h b/www/iridium/files/patch-base_base__switches.h
new file mode 100644
index 000000000000..f2be6f05c697
--- /dev/null
+++ b/www/iridium/files/patch-base_base__switches.h
@@ -0,0 +1,20 @@
+--- base/base_switches.h.orig 2019-10-21 19:06:18 UTC
++++ base/base_switches.h
+@@ -38,7 +38,7 @@ extern const char kDisableHighResTimer[];
+ extern const char kDisableUsbKeyboardDetect[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kDisableDevShmUsage[];
+ #endif
+
+@@ -51,7 +51,7 @@ extern const char kEnableReachedCodeProfiler[];
+ extern const char kOrderfileMemoryOptimization[];
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kEnableThreadInstructionCount[];
+ #endif
+
diff --git a/www/iridium/files/patch-base_cpu.cc b/www/iridium/files/patch-base_cpu.cc
new file mode 100644
index 000000000000..231561a3a542
--- /dev/null
+++ b/www/iridium/files/patch-base_cpu.cc
@@ -0,0 +1,38 @@
+--- base/cpu.cc.orig 2019-10-21 19:06:18 UTC
++++ base/cpu.cc
+@@ -14,7 +14,7 @@
+
+ #include "base/stl_util.h"
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/files/file_util.h"
+ #endif
+
+@@ -135,7 +135,7 @@ uint64_t xgetbv(uint32_t xcr) {
+
+ #endif // ARCH_CPU_X86_FAMILY
+
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ std::string* CpuInfoBrand() {
+ static std::string* brand = []() {
+ // This function finds the value from /proc/cpuinfo under the key "model
+@@ -165,7 +165,7 @@ std::string* CpuInfoBrand() {
+ return brand;
+ }
+ #endif // defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) ||
+- // defined(OS_LINUX))
++ // defined(OS_LINUX) || defined(OS_BSD))
+
+ } // namespace
+
+@@ -287,7 +287,7 @@ void CPU::Initialize() {
+ }
+ }
+ #elif defined(ARCH_CPU_ARM_FAMILY)
+-#if (defined(OS_ANDROID) || defined(OS_LINUX))
++#if (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ cpu_brand_ = *CpuInfoBrand();
+ #elif defined(OS_WIN)
+ // Windows makes high-resolution thread timing information available in
diff --git a/www/iridium/files/patch-base_debug_debugger__posix.cc b/www/iridium/files/patch-base_debug_debugger__posix.cc
new file mode 100644
index 000000000000..62317b93a5a1
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_debugger__posix.cc
@@ -0,0 +1,56 @@
+--- base/debug/debugger_posix.cc.orig 2019-09-09 21:55:05 UTC
++++ base/debug/debugger_posix.cc
+@@ -90,7 +90,7 @@ bool BeingDebugged() {
+ KERN_PROC,
+ KERN_PROC_PID,
+ getpid()
+-#if defined(OS_OPENBSD)
++#if defined(OS_BSD)
+ , sizeof(struct kinfo_proc),
+ 0
+ #endif
+@@ -98,33 +98,35 @@ bool BeingDebugged() {
+
+ // Caution: struct kinfo_proc is marked __APPLE_API_UNSTABLE. The source and
+ // binary interfaces may change.
+- struct kinfo_proc info;
+- size_t info_size = sizeof(info);
++ struct kinfo_proc *info;
++ size_t info_size;
+
+-#if defined(OS_OPENBSD)
+ if (sysctl(mib, base::size(mib), NULL, &info_size, NULL, 0) < 0)
+ return -1;
+
++ info = (struct kinfo_proc *)malloc(info_size);
+ mib[5] = (info_size / sizeof(struct kinfo_proc));
+-#endif
+
+- int sysctl_result = sysctl(mib, base::size(mib), &info, &info_size, NULL, 0);
++ int sysctl_result = sysctl(mib, base::size(mib), info, &info_size, NULL, 0);
+ DCHECK_EQ(sysctl_result, 0);
+ if (sysctl_result != 0) {
+ is_set = true;
+ being_debugged = false;
+- return being_debugged;
++ goto out;
+ }
+
+ // This process is being debugged if the P_TRACED flag is set.
+ is_set = true;
+ #if defined(OS_FREEBSD)
+- being_debugged = (info.ki_flag & P_TRACED) != 0;
++ being_debugged = (info->ki_flag & P_TRACED) != 0;
+ #elif defined(OS_BSD)
+- being_debugged = (info.p_flag & P_TRACED) != 0;
++ being_debugged = (info->p_flag & P_TRACED) != 0;
+ #else
+- being_debugged = (info.kp_proc.p_flag & P_TRACED) != 0;
++ being_debugged = (info->kp_proc.p_flag & P_TRACED) != 0;
+ #endif
++
++out:
++ free(info);
+ return being_debugged;
+ }
+
diff --git a/www/iridium/files/patch-base_debug_elf__reader.cc b/www/iridium/files/patch-base_debug_elf__reader.cc
new file mode 100644
index 000000000000..8eca61e3c66e
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_elf__reader.cc
@@ -0,0 +1,28 @@
+--- base/debug/elf_reader.cc.orig 2020-02-24 18:39:05 UTC
++++ base/debug/elf_reader.cc
+@@ -35,7 +35,9 @@ using Nhdr = Elf64_Nhdr;
+ using Word = Elf64_Word;
+ #endif
+
++#if !defined(OS_BSD)
+ constexpr char kGnuNoteName[] = "GNU";
++#endif
+
+ // Returns a pointer to the header of the ELF binary mapped into memory,
+ // or a null pointer if the header is invalid.
+@@ -98,6 +100,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ bool found = false;
+ while (current_section < section_end) {
+ current_note = reinterpret_cast<const Nhdr*>(current_section);
++#if !defined(OS_BSD)
+ if (current_note->n_type == NT_GNU_BUILD_ID) {
+ StringPiece note_name(current_section + sizeof(Nhdr),
+ current_note->n_namesz);
+@@ -107,6 +110,7 @@ size_t ReadElfBuildId(const void* elf_mapped_base,
+ break;
+ }
+ }
++#endif
+
+ size_t section_size = bits::Align(current_note->n_namesz, 4) +
+ bits::Align(current_note->n_descsz, 4) +
diff --git a/www/iridium/files/patch-base_debug_proc__maps__linux.cc b/www/iridium/files/patch-base_debug_proc__maps__linux.cc
new file mode 100644
index 000000000000..21024cb210a8
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_proc__maps__linux.cc
@@ -0,0 +1,141 @@
+--- base/debug/proc_maps_linux.cc.orig 2020-03-16 18:39:41 UTC
++++ base/debug/proc_maps_linux.cc
+@@ -12,7 +12,7 @@
+ #include "base/strings/string_split.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(OS_ANDROID)
+ #include <inttypes.h>
+ #endif
+
+@@ -28,6 +28,11 @@
+ namespace base {
+ namespace debug {
+
++#if defined(OS_BSD)
++const char kProcSelfMapsPath[] = "/proc/curproc/map";
++#else
++const char kProcSelfMapsPath[] = "/proc/self/maps";
++
+ // Scans |proc_maps| starting from |pos| returning true if the gate VMA was
+ // found, otherwise returns false.
+ static bool ContainsGateVMA(std::string* proc_maps, size_t pos) {
+@@ -43,15 +48,16 @@ static bool ContainsGateVMA(std::string* proc_maps, si
+ return false;
+ #endif
+ }
++#endif
+
+ bool ReadProcMaps(std::string* proc_maps) {
+ // seq_file only writes out a page-sized amount on each call. Refer to header
+ // file for details.
+ const long kReadSize = sysconf(_SC_PAGESIZE);
+
+- base::ScopedFD fd(HANDLE_EINTR(open("/proc/self/maps", O_RDONLY)));
++ base::ScopedFD fd(HANDLE_EINTR(open(kProcSelfMapsPath, O_RDONLY)));
+ if (!fd.is_valid()) {
+- DPLOG(ERROR) << "Couldn't open /proc/self/maps";
++ DPLOG(ERROR) << "Couldn't open " << kProcSelfMapsPath;
+ return false;
+ }
+ proc_maps->clear();
+@@ -65,7 +71,7 @@ bool ReadProcMaps(std::string* proc_maps) {
+
+ ssize_t bytes_read = HANDLE_EINTR(read(fd.get(), buffer, kReadSize));
+ if (bytes_read < 0) {
+- DPLOG(ERROR) << "Couldn't read /proc/self/maps";
++ DPLOG(ERROR) << "Couldn't read " << kProcSelfMapsPath;
+ proc_maps->clear();
+ return false;
+ }
+@@ -76,6 +82,7 @@ bool ReadProcMaps(std::string* proc_maps) {
+ if (bytes_read == 0)
+ break;
+
++#if !defined(OS_BSD)
+ // The gate VMA is handled as a special case after seq_file has finished
+ // iterating through all entries in the virtual memory table.
+ //
+@@ -86,6 +93,7 @@ bool ReadProcMaps(std::string* proc_maps) {
+ // Avoid this by searching for the gate VMA and breaking early.
+ if (ContainsGateVMA(proc_maps, pos))
+ break;
++#endif
+ }
+
+ return true;
+@@ -114,10 +122,32 @@ bool ParseProcMaps(const std::string& input,
+ MappedMemoryRegion region;
+ const char* line = lines[i].c_str();
+ char permissions[5] = {'\0'}; // Ensure NUL-terminated string.
++ int path_index = 0;
++
++#if defined(OS_BSD)
++ if (lines[i].empty())
++ continue;
++
++
++ char cow;
++
++ // Format:
++ //
++ // start end resident private_resident obj perms ref_count shadow_count flags cow needs_copy type fullpath cred ruid
++ // 0x200000 0x202000 2 6 0xfffff80005be9000 r-- 3 1 0x1000 COW NC vnode /bin/cat NCH -1
++ //
++ if (sscanf(line, "%" SCNxPTR " %" SCNxPTR " %*ld %*ld %*llx %3c %*d %*d %*x %c%*s %*s %*s %n",
++ &region.start, &region.end, permissions, &cow, &path_index) < 4) {
++ DPLOG(WARNING) << "sscanf failed for line: " << line;
++ return false;
++ }
++
++ const char* fullpath = line + path_index;
++ const char* cred = strchr(fullpath, ' ');
++#else
+ uint8_t dev_major = 0;
+ uint8_t dev_minor = 0;
+ long inode = 0;
+- int path_index = 0;
+
+ // Sample format from man 5 proc:
+ //
+@@ -133,6 +163,7 @@ bool ParseProcMaps(const std::string& input,
+ DPLOG(WARNING) << "sscanf failed for line: " << line;
+ return false;
+ }
++#endif
+
+ region.permissions = 0;
+
+@@ -151,14 +182,31 @@ bool ParseProcMaps(const std::string& input,
+ else if (permissions[2] != '-')
+ return false;
+
++#if defined(OS_BSD)
++ if (cow == 'C') {
++ region.permissions |= MappedMemoryRegion::PRIVATE;
++ } else if (cow != 'N') {
++ DPLOG(WARNING) << "unknown value for COW in line " << line << ": " << cow;
++ return false;
++ }
++#else
+ if (permissions[3] == 'p')
+ region.permissions |= MappedMemoryRegion::PRIVATE;
+ else if (permissions[3] != 's' && permissions[3] != 'S') // Shared memory.
+ return false;
++#endif
+
+ // Pushing then assigning saves us a string copy.
+ regions.push_back(region);
++#if defined(OS_BSD)
++ if (cred != nullptr) {
++ regions.back().path.assign(line + path_index, cred - fullpath);
++ } else {
++ regions.back().path.assign(line + path_index);
++ }
++#else
+ regions.back().path.assign(line + path_index);
++#endif
+ }
+
+ regions_out->swap(regions);
diff --git a/www/iridium/files/patch-base_debug_stack__trace.cc b/www/iridium/files/patch-base_debug_stack__trace.cc
new file mode 100644
index 000000000000..8d2156f365ff
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_stack__trace.cc
@@ -0,0 +1,11 @@
+--- base/debug/stack_trace.cc.orig 2019-03-17 21:37:51 UTC
++++ base/debug/stack_trace.cc
+@@ -14,7 +14,7 @@
+
+ #if BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <pthread.h>
+ #include "base/process/process_handle.h"
+ #include "base/threading/platform_thread.h"
diff --git a/www/iridium/files/patch-base_debug_stack__trace.h b/www/iridium/files/patch-base_debug_stack__trace.h
new file mode 100644
index 000000000000..6b4e63dd1e32
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_stack__trace.h
@@ -0,0 +1,10 @@
+--- base/debug/stack_trace.h.orig 2019-09-09 21:55:05 UTC
++++ base/debug/stack_trace.h
+@@ -19,6 +19,7 @@
+ #if !defined(OS_NACL)
+ #include <signal.h>
+ #endif
++#include <sys/stdint.h>
+ #include <unistd.h>
+ #endif
+
diff --git a/www/iridium/files/patch-base_debug_stack__trace__posix.cc b/www/iridium/files/patch-base_debug_stack__trace__posix.cc
new file mode 100644
index 000000000000..f3b967c844e2
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_stack__trace__posix.cc
@@ -0,0 +1,23 @@
+--- base/debug/stack_trace_posix.cc.orig 2020-03-16 18:39:41 UTC
++++ base/debug/stack_trace_posix.cc
+@@ -35,7 +35,7 @@
+ #include <AvailabilityMacros.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/debug/proc_maps_linux.h"
+ #endif
+
+@@ -697,7 +697,11 @@ class SandboxSymbolizeHelper {
+ // Skip regions with empty file names.
+ continue;
+ }
++#if defined(OS_BSD)
++ if (region.path[0] == '-') {
++#else
+ if (region.path[0] == '[') {
++#endif
+ // Skip pseudo-paths, like [stack], [vdso], [heap], etc ...
+ continue;
+ }
diff --git a/www/iridium/files/patch-base_debug_stack__trace__unittest.cc b/www/iridium/files/patch-base_debug_stack__trace__unittest.cc
new file mode 100644
index 000000000000..933a8e8ce401
--- /dev/null
+++ b/www/iridium/files/patch-base_debug_stack__trace__unittest.cc
@@ -0,0 +1,31 @@
+--- base/debug/stack_trace_unittest.cc.orig 2020-03-23 14:01:09 UTC
++++ base/debug/stack_trace_unittest.cc
+@@ -86,6 +86,7 @@ TEST_F(StackTraceTest, OutputToStream) {
+ std::string::npos)
+ << "Unable to resolve symbols.";
+
++#if !defined(OS_BSD)
+ // Expect a demangled symbol.
+ // Note that Windows Release builds omit the function parameters from the
+ // demangled stack output, otherwise this could be "testing::Test::Run()".
+@@ -103,9 +104,10 @@ TEST_F(StackTraceTest, OutputToStream) {
+ EXPECT_TRUE(backtrace_message.find(__func__) != std::string::npos)
+ << "Expected to find " << __func__ << " in backtrace:\n"
+ << backtrace_message;
++#endif
+ }
+
+-#if !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES)
++#if !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES) && !defined(OS_BSD)
+ // Disabled in Official builds, where Link-Time Optimization can result in two
+ // or fewer stack frames being available, causing the test to fail.
+ TEST_F(StackTraceTest, TruncatedTrace) {
+@@ -119,7 +121,7 @@ TEST_F(StackTraceTest, TruncatedTrace) {
+ truncated.Addresses(&count);
+ EXPECT_EQ(2u, count);
+ }
+-#endif // !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES)
++#endif // !defined(OFFICIAL_BUILD) && !defined(NO_UNWIND_TABLES) && !defined(OS_BSD)
+
+ // The test is used for manual testing, e.g., to see the raw output.
+ TEST_F(StackTraceTest, DebugOutputToStream) {
diff --git a/www/iridium/files/patch-base_files_file__path__unittest.cc b/www/iridium/files/patch-base_files_file__path__unittest.cc
new file mode 100644
index 000000000000..26521d022831
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__path__unittest.cc
@@ -0,0 +1,11 @@
+--- base/files/file_path_unittest.cc.orig 2020-03-16 18:39:41 UTC
++++ base/files/file_path_unittest.cc
+@@ -1149,7 +1149,7 @@ TEST_F(FilePathTest, FromUTF8Unsafe_And_AsUTF8Unsafe)
+ "\xEF\xBC\xA1\xEF\xBC\xA2\xEF\xBC\xA3.txt" },
+ };
+
+-#if !defined(SYSTEM_NATIVE_UTF8) && defined(OS_LINUX)
++#if !defined(SYSTEM_NATIVE_UTF8) && (defined(OS_LINUX) || defined(OS_BSD))
+ ScopedLocale locale("en_US.UTF-8");
+ #endif
+
diff --git a/www/iridium/files/patch-base_files_file__path__watcher.cc b/www/iridium/files/patch-base_files_file__path__watcher.cc
new file mode 100644
index 000000000000..87abcb7fbda1
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__path__watcher.cc
@@ -0,0 +1,15 @@
+--- base/files/file_path_watcher.cc.orig 2020-03-16 18:39:41 UTC
++++ base/files/file_path_watcher.cc
+@@ -20,10 +20,10 @@ FilePathWatcher::~FilePathWatcher() {
+ // static
+ bool FilePathWatcher::RecursiveWatchAvailable() {
+ #if (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_WIN) || \
+- defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++ (defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_ANDROID) || defined(OS_AIX)
+ return true;
+ #else
+- // FSEvents isn't available on iOS.
++ // FSEvents isn't available on iOS and the kqueue watcher.
+ return false;
+ #endif
+ }
diff --git a/www/iridium/files/patch-base_files_file__path__watcher__kqueue.h b/www/iridium/files/patch-base_files_file__path__watcher__kqueue.h
new file mode 100644
index 000000000000..d5712de7a389
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__path__watcher__kqueue.h
@@ -0,0 +1,13 @@
+--- base/files/file_path_watcher_kqueue.h.orig 2019-03-11 22:00:51 UTC
++++ base/files/file_path_watcher_kqueue.h
+@@ -5,6 +5,10 @@
+ #ifndef BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+ #define BASE_FILES_FILE_PATH_WATCHER_KQUEUE_H_
+
++#ifdef __FreeBSD__
++#include <sys/stdint.h>
++#include <sys/types.h>
++#endif
+ #include <sys/event.h>
+
+ #include <memory>
diff --git a/www/iridium/files/patch-base_files_file__path__watcher__stub.cc b/www/iridium/files/patch-base_files_file__path__watcher__stub.cc
new file mode 100644
index 000000000000..fc76cd1b16b3
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__path__watcher__stub.cc
@@ -0,0 +1,53 @@
+--- base/files/file_path_watcher_stub.cc.orig 2020-03-16 18:39:41 UTC
++++ base/files/file_path_watcher_stub.cc
+@@ -1,14 +1,15 @@
+-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
++// Copyright 2014 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-// This file exists for Unix systems which don't have the inotify headers, and
+-// thus cannot build file_watcher_inotify.cc
+
+-#include "base/files/file_path_watcher.h"
++#include <memory>
+
++#include "base/files/file_path_watcher.h"
++#include "base/files/file_path_watcher_kqueue.h"
+ #include "base/macros.h"
+ #include "base/memory/ptr_util.h"
++#include "build/build_config.h"
+
+ namespace base {
+
+@@ -22,12 +23,29 @@ class FilePathWatcherImpl : public FilePathWatcher::Pl
+ bool Watch(const FilePath& path,
+ bool recursive,
+ const FilePathWatcher::Callback& callback) override {
++#if defined(OS_BSD)
++ DCHECK(!impl_.get());
++ if (recursive) {
++ return false;
++ } else {
++ impl_ = std::make_unique<FilePathWatcherKQueue>();
++ }
++ DCHECK(impl_.get());
++ return impl_->Watch(path, recursive, callback);
++#else
+ return false;
++#endif
+ }
+
+- void Cancel() override {}
++ void Cancel() override {
++ if (impl_.get())
++ impl_->Cancel();
++ set_cancelled();
++ }
+
+ private:
++ std::unique_ptr<PlatformDelegate> impl_;
++
+ DISALLOW_COPY_AND_ASSIGN(FilePathWatcherImpl);
+ };
+
diff --git a/www/iridium/files/patch-base_files_file__path__watcher__unittest.cc b/www/iridium/files/patch-base_files_file__path__watcher__unittest.cc
new file mode 100644
index 000000000000..5e7e385e5e23
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__path__watcher__unittest.cc
@@ -0,0 +1,41 @@
+--- base/files/file_path_watcher_unittest.cc.orig 2020-03-16 18:39:41 UTC
++++ base/files/file_path_watcher_unittest.cc
+@@ -435,7 +435,7 @@ TEST_F(FilePathWatcherTest, WatchDirectory) {
+ VLOG(1) << "Waiting for file1 creation";
+ ASSERT_TRUE(WaitForEvents());
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Mac implementation does not detect files modified in a directory.
+ ASSERT_TRUE(WriteFile(file1, "content v2"));
+ VLOG(1) << "Waiting for file1 modification";
+@@ -808,7 +808,7 @@ enum Permission {
+ Execute
+ };
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ bool ChangeFilePermissions(const FilePath& path, Permission perm, bool allow) {
+ struct stat stat_buf;
+
+@@ -837,9 +837,9 @@ bool ChangeFilePermissions(const FilePath& path, Permi
+ }
+ return chmod(path.value().c_str(), stat_buf.st_mode) == 0;
+ }
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Linux implementation of FilePathWatcher doesn't catch attribute changes.
+ // http://crbug.com/78043
+ // Windows implementation of FilePathWatcher catches attribute changes that
+@@ -874,7 +874,7 @@ TEST_F(FilePathWatcherTest, DirAttributesChanged) {
+ ASSERT_TRUE(ChangeFilePermissions(test_dir1, Execute, true));
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+ } // namespace
+
+ } // namespace base
diff --git a/www/iridium/files/patch-base_files_file__util.h b/www/iridium/files/patch-base_files_file__util.h
new file mode 100644
index 000000000000..65171a867e06
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__util.h
@@ -0,0 +1,11 @@
+--- base/files/file_util.h.orig 2020-03-16 18:39:41 UTC
++++ base/files/file_util.h
+@@ -519,7 +519,7 @@ BASE_EXPORT bool VerifyPathControlledByAdmin(const bas
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ BASE_EXPORT int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/www/iridium/files/patch-base_files_file__util__posix.cc b/www/iridium/files/patch-base_files_file__util__posix.cc
new file mode 100644
index 000000000000..4342a618c454
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/files/file_util_posix.cc.orig 2020-02-03 21:52:37 UTC
++++ base/files/file_util_posix.cc
+@@ -411,7 +411,7 @@ bool CreatePipe(ScopedFD* read_fd, ScopedFD* write_fd,
+ }
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/www/iridium/files/patch-base_files_file__util__unittest.cc b/www/iridium/files/patch-base_files_file__util__unittest.cc
new file mode 100644
index 000000000000..5ddff833acb1
--- /dev/null
+++ b/www/iridium/files/patch-base_files_file__util__unittest.cc
@@ -0,0 +1,20 @@
+--- base/files/file_util_unittest.cc.orig 2020-03-23 13:34:59 UTC
++++ base/files/file_util_unittest.cc
+@@ -3434,7 +3434,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithNamedPipe) {
+ }
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ TEST_F(FileUtilTest, ReadFileToStringWithProcFileSystem) {
+ FilePath file_path("/proc/cpuinfo");
+ std::string data = "temp";
+@@ -3452,7 +3452,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithProcFileSyste
+
+ EXPECT_FALSE(ReadFileToStringWithMaxSize(file_path, nullptr, 4));
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ TEST_F(FileUtilTest, ReadFileToStringWithLargeFile) {
+ std::string data(kLargeFileSize, 'c');
diff --git a/www/iridium/files/patch-base_files_scoped__file.cc b/www/iridium/files/patch-base_files_scoped__file.cc
new file mode 100644
index 000000000000..84ba47ff6aeb
--- /dev/null
+++ b/www/iridium/files/patch-base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- base/files/scoped_file.cc.orig 2019-07-29 18:17:43 UTC
++++ base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/www/iridium/files/patch-base_i18n_icu__util.cc b/www/iridium/files/patch-base_i18n_icu__util.cc
new file mode 100644
index 000000000000..34f2453a25de
--- /dev/null
+++ b/www/iridium/files/patch-base_i18n_icu__util.cc
@@ -0,0 +1,20 @@
+--- base/i18n/icu_util.cc.orig 2020-03-16 18:40:27 UTC
++++ base/i18n/icu_util.cc
+@@ -46,7 +46,7 @@
+ #endif
+
+ #if defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMECAST))
++ (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMECAST)) || defined(OS_BSD)
+ #include "third_party/icu/source/i18n/unicode/timezone.h"
+ #endif
+
+@@ -341,7 +341,7 @@ void InitializeIcuTimeZone() {
+ fuchsia::IntlProfileWatcher::GetPrimaryTimeZoneIdForIcuInitialization();
+ icu::TimeZone::adoptDefault(
+ icu::TimeZone::createTimeZone(icu::UnicodeString::fromUTF8(zone_id)));
+-#elif defined(OS_LINUX) && !BUILDFLAG(IS_CHROMECAST)
++#elif (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMECAST)) || defined(OS_BSD)
+ // To respond to the timezone change properly, the default timezone
+ // cache in ICU has to be populated on starting up.
+ // See TimeZoneMonitorLinux::NotifyClientsFromImpl().
diff --git a/www/iridium/files/patch-base_linux__util.cc b/www/iridium/files/patch-base_linux__util.cc
new file mode 100644
index 000000000000..216208c37181
--- /dev/null
+++ b/www/iridium/files/patch-base_linux__util.cc
@@ -0,0 +1,20 @@
+--- base/linux_util.cc.orig 2019-12-16 21:50:40 UTC
++++ base/linux_util.cc
+@@ -144,6 +144,8 @@ char g_linux_distro[kDistroSize] =
+ "CrOS";
+ #elif defined(OS_ANDROID)
+ "Android";
++#elif defined(OS_BSD)
++ "BSD";
+ #else // if defined(OS_LINUX)
+ "Unknown";
+ #endif
+@@ -164,7 +166,7 @@ BASE_EXPORT std::string GetKeyValueFromOSReleaseFileFo
+ }
+
+ std::string GetLinuxDistro() {
+-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#if defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ return g_linux_distro;
+ #elif defined(OS_LINUX)
+ LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
diff --git a/www/iridium/files/patch-base_logging__unittest.cc b/www/iridium/files/patch-base_logging__unittest.cc
new file mode 100644
index 000000000000..2e9496b55220
--- /dev/null
+++ b/www/iridium/files/patch-base_logging__unittest.cc
@@ -0,0 +1,11 @@
+--- base/logging_unittest.cc.orig 2019-12-16 21:51:21 UTC
++++ base/logging_unittest.cc
+@@ -591,7 +591,7 @@ void CheckCrashTestSighandler(int, siginfo_t* info, vo
+ // need the arch-specific boilerplate below, which is inspired by breakpad.
+ // At the same time, on OSX, ucontext.h is deprecated but si_addr works fine.
+ uintptr_t crash_addr = 0;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ crash_addr = reinterpret_cast<uintptr_t>(info->si_addr);
+ #else // OS_POSIX && !OS_MACOSX
+ ucontext_t* context = reinterpret_cast<ucontext_t*>(context_ptr);
diff --git a/www/iridium/files/patch-base_memory_discardable__memory.cc b/www/iridium/files/patch-base_memory_discardable__memory.cc
new file mode 100644
index 000000000000..b50f404a2764
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_discardable__memory.cc
@@ -0,0 +1,63 @@
+--- base/memory/discardable_memory.cc.orig 2020-02-07 10:23:12 UTC
++++ base/memory/discardable_memory.cc
+@@ -23,7 +23,7 @@ const base::Feature kMadvFreeDiscardableMemory{
+ "MadvFreeDiscardableMemory", base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Feature kDiscardableMemoryBackingTrial{
+ "DiscardableMemoryBackingTrial", base::FEATURE_DISABLED_BY_DEFAULT};
+
+@@ -41,13 +41,13 @@ const base::FeatureParam<DiscardableMemoryTrialGroup>
+ DiscardableMemoryTrialGroup::kEmulatedSharedMemory,
+ &kDiscardableMemoryBackingParamOptions};
+
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace features
+
+ namespace {
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ DiscardableMemoryBacking GetBackingForFieldTrial() {
+ DiscardableMemoryTrialGroup trial_group =
+@@ -61,11 +61,11 @@ DiscardableMemoryBacking GetBackingForFieldTrial() {
+ }
+ NOTREACHED();
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Probe capabilities of this device to determine whether we should participate
+ // in the discardable memory backing trial.
+@@ -87,18 +87,18 @@ DiscardableMemoryTrialGroup GetDiscardableMemoryBackin
+ DCHECK(DiscardableMemoryBackingFieldTrialIsEnabled());
+ return features::kDiscardableMemoryBackingParam.Get();
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ DiscardableMemory::DiscardableMemory() = default;
+
+ DiscardableMemory::~DiscardableMemory() = default;
+
+ DiscardableMemoryBacking GetDiscardableMemoryBacking() {
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ if (DiscardableMemoryBackingFieldTrialIsEnabled()) {
+ return GetBackingForFieldTrial();
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ if (ashmem_device_is_supported())
diff --git a/www/iridium/files/patch-base_memory_discardable__memory__internal.h b/www/iridium/files/patch-base_memory_discardable__memory__internal.h
new file mode 100644
index 000000000000..c8225e74d049
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_discardable__memory__internal.h
@@ -0,0 +1,19 @@
+--- base/memory/discardable_memory_internal.h.orig 2020-02-07 10:22:39 UTC
++++ base/memory/discardable_memory_internal.h
+@@ -10,7 +10,7 @@
+ #include "base/metrics/field_trial_params.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace base {
+
+@@ -47,6 +47,6 @@ GetDiscardableMemoryBackingFieldTrialGroup();
+
+ } // namespace base
+
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #endif // BASE_MEMORY_DISCARDABLE_MEMORY_INTERNAL_H_
diff --git a/www/iridium/files/patch-base_memory_madv__free__discardable__memory__posix.cc b/www/iridium/files/patch-base_memory_madv__free__discardable__memory__posix.cc
new file mode 100644
index 000000000000..5368440e775b
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_madv__free__discardable__memory__posix.cc
@@ -0,0 +1,11 @@
+--- base/memory/madv_free_discardable_memory_posix.cc.orig 2020-03-16 18:39:41 UTC
++++ base/memory/madv_free_discardable_memory_posix.cc
+@@ -282,7 +282,7 @@ void MadvFreeDiscardableMemoryPosix::SetKeepMemoryForT
+
+ bool MadvFreeDiscardableMemoryPosix::IsResident() const {
+ DFAKE_SCOPED_RECURSIVE_LOCK(thread_collision_warner_);
+-#ifdef OS_MACOSX
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ std::vector<char> vec(allocated_pages_);
+ #else
+ std::vector<unsigned char> vec(allocated_pages_);
diff --git a/www/iridium/files/patch-base_memory_platform__shared__memory__region.h b/www/iridium/files/patch-base_memory_platform__shared__memory__region.h
new file mode 100644
index 000000000000..477b8029c4a6
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_platform__shared__memory__region.h
@@ -0,0 +1,29 @@
+--- base/memory/platform_shared_memory_region.h.orig 2020-02-03 21:52:37 UTC
++++ base/memory/platform_shared_memory_region.h
+@@ -27,7 +27,7 @@
+ #include "base/files/scoped_file.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ namespace content {
+ class SandboxIPCHandler;
+ }
+@@ -121,7 +121,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
+ kMaxValue = GET_SHMEM_TEMP_DIR_FAILURE
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Structure to limit access to executable region creation.
+ struct ExecutableRegion {
+ private:
+@@ -266,7 +266,7 @@ class BASE_EXPORT PlatformSharedMemoryRegion {
+ CheckPlatformHandlePermissionsCorrespondToMode);
+ static PlatformSharedMemoryRegion Create(Mode mode,
+ size_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ bool executable = false
+ #endif
diff --git a/www/iridium/files/patch-base_memory_platform__shared__memory__region__posix.cc b/www/iridium/files/patch-base_memory_platform__shared__memory__region__posix.cc
new file mode 100644
index 000000000000..c5f57c29c6bc
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_platform__shared__memory__region__posix.cc
@@ -0,0 +1,38 @@
+--- base/memory/platform_shared_memory_region_posix.cc.orig 2020-02-03 21:52:37 UTC
++++ base/memory/platform_shared_memory_region_posix.cc
+@@ -75,7 +75,7 @@ FDPair ScopedFDPair::get() const {
+ return {fd.get(), readonly_fd.get()};
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ ScopedFD PlatformSharedMemoryRegion::ExecutableRegion::CreateFD(size_t size) {
+ PlatformSharedMemoryRegion region =
+@@ -84,7 +84,7 @@ ScopedFD PlatformSharedMemoryRegion::ExecutableRegion:
+ return region.PassPlatformHandle().fd;
+ return ScopedFD();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Take(
+@@ -209,7 +209,7 @@ bool PlatformSharedMemoryRegion::MapAtInternal(off_t o
+ // static
+ PlatformSharedMemoryRegion PlatformSharedMemoryRegion::Create(Mode mode,
+ size_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ bool executable
+ #endif
+@@ -240,7 +240,7 @@ PlatformSharedMemoryRegion PlatformSharedMemoryRegion:
+ // flag.
+ FilePath directory;
+ if (!GetShmemTempDir(
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ executable,
+ #else
+ false /* executable */,
diff --git a/www/iridium/files/patch-base_memory_shared__memory__region__unittest.cc b/www/iridium/files/patch-base_memory_shared__memory__region__unittest.cc
new file mode 100644
index 000000000000..b2525b4381ee
--- /dev/null
+++ b/www/iridium/files/patch-base_memory_shared__memory__region__unittest.cc
@@ -0,0 +1,16 @@
+--- base/memory/shared_memory_region_unittest.cc.orig 2020-03-23 16:31:23 UTC
++++ base/memory/shared_memory_region_unittest.cc
+@@ -188,10 +188,13 @@ TYPED_TEST(SharedMemoryRegionTest, MapAtNotAlignedOffs
+ std::tie(region, rw_mapping) = CreateMappedRegion<TypeParam>(kDataSize);
+ ASSERT_TRUE(region.IsValid());
+ ASSERT_TRUE(rw_mapping.IsValid());
++#if !defined(OS_BSD)
++ // On FreeBSD, mmap() does not require an aligned offset
+ off_t offset = kDataSize / 2;
+ typename TypeParam::MappingType mapping =
+ region.MapAt(offset, kDataSize - offset);
+ EXPECT_FALSE(mapping.IsValid());
++#endif
+ }
+
+ TYPED_TEST(SharedMemoryRegionTest, MapZeroBytesFails) {
diff --git a/www/iridium/files/patch-base_native__library__posix.cc b/www/iridium/files/patch-base_native__library__posix.cc
new file mode 100644
index 000000000000..ba6a16756b10
--- /dev/null
+++ b/www/iridium/files/patch-base_native__library__posix.cc
@@ -0,0 +1,11 @@
+--- base/native_library_posix.cc.orig 2019-03-11 22:00:51 UTC
++++ base/native_library_posix.cc
+@@ -29,7 +29,7 @@ NativeLibrary LoadNativeLibraryWithOptions(const FileP
+ // http://crbug.com/17943, http://crbug.com/17557, http://crbug.com/36892,
+ // and http://crbug.com/40794.
+ int flags = RTLD_LAZY;
+-#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND)
++#if defined(OS_ANDROID) || !defined(RTLD_DEEPBIND) || defined(OS_BSD)
+ // Certain platforms don't define RTLD_DEEPBIND. Android dlopen() requires
+ // further investigation, as it might vary across versions. Crash here to
+ // warn developers that they're trying to rely on uncertain behavior.
diff --git a/www/iridium/files/patch-base_native__library__unittest.cc b/www/iridium/files/patch-base_native__library__unittest.cc
new file mode 100644
index 000000000000..f76c5f8fd986
--- /dev/null
+++ b/www/iridium/files/patch-base_native__library__unittest.cc
@@ -0,0 +1,11 @@
+--- base/native_library_unittest.cc.orig 2019-03-11 22:00:51 UTC
++++ base/native_library_unittest.cc
+@@ -120,7 +120,7 @@ TEST(NativeLibraryTest, LoadLibrary) {
+ // Android dlopen() requires further investigation, as it might vary across
+ // versions with respect to symbol resolution scope.
+ // TSan and MSan error out on RTLD_DEEPBIND, https://crbug.com/705255
+-#if !defined(OS_ANDROID) && !defined(THREAD_SANITIZER) && \
++#if !defined(OS_ANDROID) && !defined(OS_BSD) && !defined(THREAD_SANITIZER) && \
+ !defined(MEMORY_SANITIZER)
+
+ // Verifies that the |prefer_own_symbols| option satisfies its guarantee that
diff --git a/www/iridium/files/patch-base_numerics_safe__math__shared__impl.h b/www/iridium/files/patch-base_numerics_safe__math__shared__impl.h
new file mode 100644
index 000000000000..c088ad9451d0
--- /dev/null
+++ b/www/iridium/files/patch-base_numerics_safe__math__shared__impl.h
@@ -0,0 +1,12 @@
+--- base/numerics/safe_math_shared_impl.h.orig 2019-09-09 21:55:05 UTC
++++ base/numerics/safe_math_shared_impl.h
+@@ -23,8 +23,7 @@
+ // Where available use builtin math overflow support on Clang and GCC.
+ #elif !defined(__native_client__) && \
+ ((defined(__clang__) && \
+- ((__clang_major__ > 3) || \
+- (__clang_major__ == 3 && __clang_minor__ >= 4))) || \
++ (__clang_major__ > 6)) || \
+ (defined(__GNUC__) && __GNUC__ >= 5))
+ #include "base/numerics/safe_math_clang_gcc_impl.h"
+ #define BASE_HAS_OPTIMIZED_SAFE_MATH (1)
diff --git a/www/iridium/files/patch-base_path__service__unittest.cc b/www/iridium/files/patch-base_path__service__unittest.cc
new file mode 100644
index 000000000000..20ffac278abc
--- /dev/null
+++ b/www/iridium/files/patch-base_path__service__unittest.cc
@@ -0,0 +1,11 @@
+--- base/path_service_unittest.cc.orig 2020-03-23 15:23:42 UTC
++++ base/path_service_unittest.cc
+@@ -36,7 +36,7 @@ bool ReturnsValidPath(int dir_type) {
+ if (dir_type == DIR_CACHE)
+ check_path_exists = false;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On the linux try-bots: a path is returned (e.g. /home/chrome-bot/Desktop),
+ // but it doesn't exist.
+ if (dir_type == DIR_USER_DESKTOP)
diff --git a/www/iridium/files/patch-base_posix_can__lower__nice__to.cc b/www/iridium/files/patch-base_posix_can__lower__nice__to.cc
new file mode 100644
index 000000000000..3b13c89d4813
--- /dev/null
+++ b/www/iridium/files/patch-base_posix_can__lower__nice__to.cc
@@ -0,0 +1,20 @@
+--- base/posix/can_lower_nice_to.cc.orig 2019-03-11 22:00:51 UTC
++++ base/posix/can_lower_nice_to.cc
+@@ -31,6 +31,9 @@ bool CanLowerNiceTo(int nice_value) {
+ if (geteuid() == 0)
+ return true;
+
++#if defined(OS_BSD)
++ return false;
++#else
+ // 2. Skip checking the CAP_SYS_NICE permission because it would require
+ // libcap.so.
+
+@@ -54,6 +57,7 @@ bool CanLowerNiceTo(int nice_value) {
+ // And lowering niceness to |nice_value| is allowed if it is greater than or
+ // equal to the limit:
+ return nice_value >= lowest_nice_allowed;
++#endif
+ }
+
+ } // namespace internal
diff --git a/www/iridium/files/patch-base_posix_unix__domain__socket.cc b/www/iridium/files/patch-base_posix_unix__domain__socket.cc
new file mode 100644
index 000000000000..8820cb063006
--- /dev/null
+++ b/www/iridium/files/patch-base_posix_unix__domain__socket.cc
@@ -0,0 +1,49 @@
+--- base/posix/unix_domain_socket.cc.orig 2019-03-11 22:00:51 UTC
++++ base/posix/unix_domain_socket.cc
+@@ -5,7 +5,10 @@
+ #include "base/posix/unix_domain_socket.h"
+
+ #include <errno.h>
++#include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
++#include <sys/ucred.h>
+ #if !defined(OS_NACL_NONSFI)
+ #include <sys/un.h>
+ #endif
+@@ -28,6 +31,14 @@ namespace base {
+
+ const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
+
++#ifndef SCM_CREDENTIALS
++# define SCM_CREDENTIALS 0x9001
++#endif
++
++#ifndef SO_PASSCRED
++# define SO_PASSCRED 0x9002
++#endif
++
+ #if !defined(OS_NACL_NONSFI)
+ bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
+ int raw_socks[2];
+@@ -150,7 +161,7 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ #if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ // The PNaCl toolchain for Non-SFI binary build and macOS do not support
+ // ucred. macOS supports xucred, but this structure is insufficient.
+- + CMSG_SPACE(sizeof(struct ucred))
++ + CMSG_SPACE(sizeof(struct cmsgcred))
+ #endif // OS_NACL_NONSFI or OS_MACOSX
+ ;
+ char control_buffer[kControlBufferSize];
+@@ -180,9 +191,9 @@ ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
+ // SCM_CREDENTIALS.
+ if (cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
+- DCHECK_EQ(payload_len, sizeof(struct ucred));
++ DCHECK_EQ(payload_len, sizeof(struct cmsgcred));
+ DCHECK_EQ(pid, -1);
+- pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
++ pid = getpid();
+ }
+ #endif // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
+ }
diff --git a/www/iridium/files/patch-base_posix_unix__domain__socket__unittest.cc b/www/iridium/files/patch-base_posix_unix__domain__socket__unittest.cc
new file mode 100644
index 000000000000..0336334a6583
--- /dev/null
+++ b/www/iridium/files/patch-base_posix_unix__domain__socket__unittest.cc
@@ -0,0 +1,12 @@
+--- base/posix/unix_domain_socket_unittest.cc.orig 2019-03-11 22:00:51 UTC
++++ base/posix/unix_domain_socket_unittest.cc
+@@ -8,6 +8,9 @@
+ #include <stdint.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
+ #include <unistd.h>
+
+ #include "base/bind.h"
diff --git a/www/iridium/files/patch-base_process_internal__linux.cc b/www/iridium/files/patch-base_process_internal__linux.cc
new file mode 100644
index 000000000000..abfff7cd44ce
--- /dev/null
+++ b/www/iridium/files/patch-base_process_internal__linux.cc
@@ -0,0 +1,97 @@
+--- base/process/internal_linux.cc.orig 2020-03-16 18:39:41 UTC
++++ base/process/internal_linux.cc
+@@ -29,7 +29,11 @@ namespace internal {
+
+ const char kProcDir[] = "/proc";
+
++#if defined(OS_BSD)
++const char kStatFile[] = "status";
++#else
+ const char kStatFile[] = "stat";
++#endif
+
+ FilePath GetProcPidDir(pid_t pid) {
+ return FilePath(kProcDir).Append(NumberToString(pid));
+@@ -64,6 +68,7 @@ bool ReadProcFile(const FilePath& file, std::string* b
+ DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
+ return false;
+ }
++
+ return !buffer->empty();
+ }
+
+@@ -79,6 +84,22 @@ bool ParseProcStats(const std::string& stats_data,
+ if (stats_data.empty())
+ return false;
+
++#if defined(OS_BSD)
++ proc_stats->clear();
++
++ std::vector<std::string> other_stats = SplitString(
++ stats_data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++
++ for (const auto& i : other_stats) {
++ auto pos = i.find(',');
++
++ if (pos == std::string::npos) {
++ proc_stats->push_back(i);
++ } else {
++ proc_stats->push_back(i.substr(0, pos));
++ }
++ }
++#else
+ // The stat file is formatted as:
+ // pid (process name) data1 data2 .... dataN
+ // Look for the closing paren by scanning backwards, to avoid being fooled by
+@@ -108,6 +129,7 @@ bool ParseProcStats(const std::string& stats_data,
+ base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
+ for (const auto& i : other_stats)
+ proc_stats->push_back(i);
++#endif
+ return true;
+ }
+
+@@ -155,7 +177,11 @@ int64_t ReadProcStatsAndGetFieldAsInt64(pid_t pid, Pro
+ }
+
+ int64_t ReadProcSelfStatsAndGetFieldAsInt64(ProcStatsFields field_num) {
++#if defined(OS_BSD)
++ FilePath stat_file = FilePath(kProcDir).Append("curproc").Append(kStatFile);
++#else
+ FilePath stat_file = FilePath(kProcDir).Append("self").Append(kStatFile);
++#endif
+ return ReadStatFileAndGetFieldAsInt64(stat_file, field_num);
+ }
+
+@@ -171,6 +197,9 @@ size_t ReadProcStatsAndGetFieldAsSizeT(pid_t pid,
+ }
+
+ Time GetBootTime() {
++#if defined(OS_BSD)
++ return Time();
++#else
+ FilePath path("/proc/stat");
+ std::string contents;
+ if (!ReadProcFile(path, &contents))
+@@ -184,9 +213,13 @@ Time GetBootTime() {
+ if (!StringToInt(btime_it->second, &btime))
+ return Time();
+ return Time::FromTimeT(btime);
++#endif
+ }
+
+ TimeDelta GetUserCpuTimeSinceBoot() {
++#if defined(OS_BSD)
++ return TimeDelta();
++#else
+ FilePath path("/proc/stat");
+ std::string contents;
+ if (!ReadProcFile(path, &contents))
+@@ -210,6 +243,7 @@ TimeDelta GetUserCpuTimeSinceBoot() {
+ return TimeDelta();
+
+ return ClockTicksToTimeDelta(user + nice);
++#endif
+ }
+
+ TimeDelta ClockTicksToTimeDelta(int clock_ticks) {
diff --git a/www/iridium/files/patch-base_process_internal__linux.h b/www/iridium/files/patch-base_process_internal__linux.h
new file mode 100644
index 000000000000..bfa9c8630afd
--- /dev/null
+++ b/www/iridium/files/patch-base_process_internal__linux.h
@@ -0,0 +1,34 @@
+--- base/process/internal_linux.h.orig 2020-03-16 18:39:41 UTC
++++ base/process/internal_linux.h
+@@ -14,6 +14,8 @@
+
+ #include "base/files/file_path.h"
+
++#include <unistd.h> /* pid_t */
++
+ namespace base {
+
+ class Time;
+@@ -50,6 +52,14 @@ bool ParseProcStats(const std::string& stats_data,
+ // If the ordering ever changes, carefully review functions that use these
+ // values.
+ enum ProcStatsFields {
++#if defined(OS_BSD)
++ VM_COMM = 0, // Command name.
++ VM_PPID = 2, // Parent process id.
++ VM_PGRP = 3, // Process group id.
++ VM_STARTTIME = 7, // The process start time.
++ VM_UTIME = 8, // The user time.
++ VM_STIME = 9, // The system time
++#else
+ VM_COMM = 1, // Filename of executable, without parentheses.
+ VM_STATE = 2, // Letter indicating the state of the process.
+ VM_PPID = 3, // PID of the parent.
+@@ -62,6 +72,7 @@ enum ProcStatsFields {
+ VM_STARTTIME = 21, // The time the process started in clock ticks.
+ VM_VSIZE = 22, // Virtual memory size in bytes.
+ VM_RSS = 23, // Resident Set Size in pages.
++#endif
+ };
+
+ // Reads the |field_num|th field from |proc_stats|. Returns 0 on failure.
diff --git a/www/iridium/files/patch-base_process_kill.h b/www/iridium/files/patch-base_process_kill.h
new file mode 100644
index 000000000000..2e871559c90e
--- /dev/null
+++ b/www/iridium/files/patch-base_process_kill.h
@@ -0,0 +1,16 @@
+--- base/process/kill.h.orig 2019-12-16 21:50:40 UTC
++++ base/process/kill.h
+@@ -118,11 +118,11 @@ BASE_EXPORT TerminationStatus GetTerminationStatus(Pro
+ BASE_EXPORT TerminationStatus GetKnownDeadTerminationStatus(
+ ProcessHandle handle, int* exit_code);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Spawns a thread to wait asynchronously for the child |process| to exit
+ // and then reaps it.
+ BASE_EXPORT void EnsureProcessGetsReaped(Process process);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #endif // defined(OS_POSIX)
+
+ // Registers |process| to be asynchronously monitored for termination, forcibly
diff --git a/www/iridium/files/patch-base_process_kill__posix.cc b/www/iridium/files/patch-base_process_kill__posix.cc
new file mode 100644
index 000000000000..69e4dbc6c05e
--- /dev/null
+++ b/www/iridium/files/patch-base_process_kill__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/kill_posix.cc.orig 2019-06-04 18:55:15 UTC
++++ base/process/kill_posix.cc
+@@ -168,7 +168,7 @@ void EnsureProcessTerminated(Process process) {
+ 0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void EnsureProcessGetsReaped(Process process) {
+ DCHECK(!process.is_current());
+
+@@ -179,7 +179,7 @@ void EnsureProcessGetsReaped(Process process) {
+ PlatformThread::CreateNonJoinable(
+ 0, new BackgroundReaper(std::move(process), TimeDelta()));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #endif // !defined(OS_MACOSX)
+ #endif // !defined(OS_NACL_NONSFI)
diff --git a/www/iridium/files/patch-base_process_launch.cc b/www/iridium/files/patch-base_process_launch.cc
new file mode 100644
index 000000000000..bd174cd496bc
--- /dev/null
+++ b/www/iridium/files/patch-base_process_launch.cc
@@ -0,0 +1,11 @@
+--- base/process/launch.cc.orig 2019-03-11 22:00:51 UTC
++++ base/process/launch.cc
+@@ -15,7 +15,7 @@ LaunchOptions::~LaunchOptions() = default;
+
+ LaunchOptions LaunchOptionsForTest() {
+ LaunchOptions options;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // To prevent accidental privilege sharing to an untrusted child, processes
+ // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
+ // new child will be used for testing only.
diff --git a/www/iridium/files/patch-base_process_launch.h b/www/iridium/files/patch-base_process_launch.h
new file mode 100644
index 000000000000..75708ea5561e
--- /dev/null
+++ b/www/iridium/files/patch-base_process_launch.h
@@ -0,0 +1,20 @@
+--- base/process/launch.h.orig 2020-02-03 21:52:37 UTC
++++ base/process/launch.h
+@@ -180,7 +180,7 @@ struct BASE_EXPORT LaunchOptions {
+ bool clear_environment = false;
+ #endif // OS_WIN || OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If non-zero, start the process using clone(), using flags as provided.
+ // Unlike in clone, clone_flags may not contain a custom termination signal
+ // that is sent to the parent when the child dies. The termination signal will
+@@ -193,7 +193,7 @@ struct BASE_EXPORT LaunchOptions {
+
+ // Sets parent process death signal to SIGKILL.
+ bool kill_on_parent_death = false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+ // Mach ports that will be accessible to the child process. These are not
diff --git a/www/iridium/files/patch-base_process_launch__posix.cc b/www/iridium/files/patch-base_process_launch__posix.cc
new file mode 100644
index 000000000000..ce6054a8ff79
--- /dev/null
+++ b/www/iridium/files/patch-base_process_launch__posix.cc
@@ -0,0 +1,10 @@
+--- base/process/launch_posix.cc.orig 2019-06-04 18:55:15 UTC
++++ base/process/launch_posix.cc
+@@ -65,6 +65,7 @@
+ #error "macOS should use launch_mac.cc"
+ #endif
+
++#pragma weak environ
+ extern char** environ;
+
+ namespace base {
diff --git a/www/iridium/files/patch-base_process_memory.cc b/www/iridium/files/patch-base_process_memory.cc
new file mode 100644
index 000000000000..ff61c2e5408b
--- /dev/null
+++ b/www/iridium/files/patch-base_process_memory.cc
@@ -0,0 +1,20 @@
+--- base/process/memory.cc.orig 2020-03-16 18:39:41 UTC
++++ base/process/memory.cc
+@@ -42,7 +42,7 @@ void OnNoMemoryInternal(size_t size) {
+ } // namespace internal
+
+ // Defined in memory_win.cc for Windows.
+-#if !defined(OS_WIN)
++#if !defined(OS_WIN) && !defined(OS_BSD)
+
+ namespace {
+
+@@ -61,7 +61,7 @@ void TerminateBecauseOutOfMemory(size_t size) {
+ #endif // !defined(OS_WIN)
+
+ // Defined in memory_mac.mm for Mac.
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
+ const size_t alloc_size = num_items * size;
diff --git a/www/iridium/files/patch-base_process_memory.h b/www/iridium/files/patch-base_process_memory.h
new file mode 100644
index 000000000000..007e8593b35d
--- /dev/null
+++ b/www/iridium/files/patch-base_process_memory.h
@@ -0,0 +1,11 @@
+--- base/process/memory.h.orig 2019-10-21 19:06:18 UTC
++++ base/process/memory.h
+@@ -24,7 +24,7 @@ BASE_EXPORT void EnableTerminationOnOutOfMemory();
+ // Crash reporting classifies such crashes as OOM.
+ BASE_EXPORT void TerminateBecauseOutOfMemory(size_t size);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ BASE_EXPORT extern size_t g_oom_size;
+
+ // The maximum allowed value for the OOM score.
diff --git a/www/iridium/files/patch-base_process_memory__unittest.cc b/www/iridium/files/patch-base_process_memory__unittest.cc
new file mode 100644
index 000000000000..82dcfd37c1c7
--- /dev/null
+++ b/www/iridium/files/patch-base_process_memory__unittest.cc
@@ -0,0 +1,18 @@
+--- base/process/memory_unittest.cc.orig 2020-03-16 18:39:41 UTC
++++ base/process/memory_unittest.cc
+@@ -106,7 +106,7 @@ TEST(MemoryTest, AllocatorShimWorking) {
+ // OpenBSD does not support these tests. Don't test these on ASan/TSan/MSan
+ // configurations: only test the real allocator.
+ // Windows only supports these tests with the allocator shim in place.
+-#if !defined(OS_OPENBSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
++#if !defined(OS_BSD) && BUILDFLAG(USE_ALLOCATOR_SHIM) && \
+ !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
+
+ namespace {
+@@ -589,5 +589,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
+ EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
+ EXPECT_TRUE(value_ == nullptr);
+ }
+-#endif // !defined(OS_OPENBSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
++#endif // !defined(OS_BSD) && BUILDFLAG(ENABLE_WIN_ALLOCATOR_SHIM_TESTS) &&
+ // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/www/iridium/files/patch-base_process_process__handle.cc b/www/iridium/files/patch-base_process_process__handle.cc
new file mode 100644
index 000000000000..13812613f73f
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__handle.cc
@@ -0,0 +1,11 @@
+--- base/process/process_handle.cc.orig 2019-10-21 19:06:18 UTC
++++ base/process/process_handle.cc
+@@ -28,7 +28,7 @@ UniqueProcId GetUniqueIdForProcess() {
+ : UniqueProcId(GetCurrentProcId());
+ }
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
+ DCHECK(pid_outside_of_namespace != kNullProcessId);
diff --git a/www/iridium/files/patch-base_process_process__handle.h b/www/iridium/files/patch-base_process_process__handle.h
new file mode 100644
index 000000000000..502beff310e6
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__handle.h
@@ -0,0 +1,11 @@
+--- base/process/process_handle.h.orig 2019-10-21 19:06:18 UTC
++++ base/process/process_handle.h
+@@ -103,7 +103,7 @@ BASE_EXPORT ProcessId GetCurrentProcId();
+ // processes may be reused.
+ BASE_EXPORT UniqueProcId GetUniqueIdForProcess();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // When a process is started in a different PID namespace from the browser
+ // process, this function must be called with the process's PID in the browser's
+ // PID namespace in order to initialize its unique ID. Not thread safe.
diff --git a/www/iridium/files/patch-base_process_process__handle__freebsd.cc b/www/iridium/files/patch-base_process_process__handle__freebsd.cc
new file mode 100644
index 000000000000..13a07c3075fd
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__handle__freebsd.cc
@@ -0,0 +1,17 @@
+--- base/process/process_handle_freebsd.cc.orig 2019-03-11 22:00:51 UTC
++++ base/process/process_handle_freebsd.cc
+@@ -16,10 +16,13 @@ namespace base {
+
+ ProcessId GetParentProcessId(ProcessHandle process) {
+ struct kinfo_proc info;
+- size_t length;
++ size_t length = sizeof(struct kinfo_proc);
+ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, process };
+
+ if (sysctl(mib, base::size(mib), &info, &length, NULL, 0) < 0)
++ return -1;
++
++ if (length < sizeof(struct kinfo_proc))
+ return -1;
+
+ return info.ki_ppid;
diff --git a/www/iridium/files/patch-base_process_process__iterator__freebsd.cc b/www/iridium/files/patch-base_process_process__iterator__freebsd.cc
new file mode 100644
index 000000000000..a89546ccb49d
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__iterator__freebsd.cc
@@ -0,0 +1,44 @@
+--- base/process/process_iterator_freebsd.cc.orig 2019-03-11 22:00:51 UTC
++++ base/process/process_iterator_freebsd.cc
+@@ -10,6 +10,10 @@
+ #include <sys/sysctl.h>
+ #include <unistd.h>
+
++/* getuid() */
++#include <unistd.h>
++#include <sys/types.h>
++
+ #include "base/logging.h"
+ #include "base/stl_util.h"
+ #include "base/strings/string_split.h"
+@@ -40,7 +44,7 @@ ProcessIterator::ProcessIterator(const ProcessFilter*
+ num_of_kinfo_proc += 16;
+ kinfo_procs_.resize(num_of_kinfo_proc);
+ len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
+- if (sysctl(mib, base::size(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
++ if (sysctl(mib, base::size(mib), kinfo_procs_.data(), &len, NULL, 0) < 0) {
+ // If we get a mem error, it just means we need a bigger buffer, so
+ // loop around again. Anything else is a real error and give up.
+ if (errno != ENOMEM) {
+@@ -72,18 +76,13 @@ bool ProcessIterator::CheckForNextProcess() {
+ for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
+ size_t length;
+ struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
+- int mib[] = { CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid };
++ int mib[] = { CTL_KERN, KERN_PROC, KERN_PROC_ARGS, kinfo.ki_pid };
+
+ if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
+ continue;
+
+- length = 0;
+- if (sysctl(mib, base::size(mib), NULL, &length, NULL, 0) < 0) {
+- LOG(ERROR) << "failed to figure out the buffer size for a command line";
+- continue;
+- }
+-
+- data.resize(length);
++ data.resize(ARG_MAX);
++ length = ARG_MAX;
+
+ if (sysctl(mib, base::size(mib), &data[0], &length, NULL, 0) < 0) {
+ LOG(ERROR) << "failed to fetch a commandline";
diff --git a/www/iridium/files/patch-base_process_process__linux.cc b/www/iridium/files/patch-base_process_process__linux.cc
new file mode 100644
index 000000000000..2ec55582fbfa
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__linux.cc
@@ -0,0 +1,31 @@
+--- base/process/process_linux.cc.orig 2020-03-16 18:39:41 UTC
++++ base/process/process_linux.cc
+@@ -79,6 +79,9 @@ Time Process::CreationTime() const {
+ internal::VM_STARTTIME)
+ : internal::ReadProcStatsAndGetFieldAsInt64(
+ Pid(), internal::VM_STARTTIME);
++#if defined(OS_BSD)
++ return Time::FromTimeT(start_ticks);
++#else
+ if (!start_ticks)
+ return Time();
+ TimeDelta start_offset = internal::ClockTicksToTimeDelta(start_ticks);
+@@ -86,8 +89,10 @@ Time Process::CreationTime() const {
+ if (boot_time.is_null())
+ return Time();
+ return Time(boot_time + start_offset);
++#endif
+ }
+
++#if !defined(OS_BSD)
+ // static
+ bool Process::CanBackgroundProcesses() {
+ #if defined(OS_CHROMEOS)
+@@ -139,6 +144,7 @@ bool Process::SetProcessBackgrounded(bool background)
+ DPCHECK(result == 0);
+ return result == 0;
+ }
++#endif // !defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ bool IsProcessBackgroundedCGroup(const StringPiece& cgroup_contents) {
diff --git a/www/iridium/files/patch-base_process_process__metrics.cc b/www/iridium/files/patch-base_process_process__metrics.cc
new file mode 100644
index 000000000000..8e47c5106248
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__metrics.cc
@@ -0,0 +1,38 @@
+--- base/process/process_metrics.cc.orig 2019-07-24 18:58:02 UTC
++++ base/process/process_metrics.cc
+@@ -57,7 +57,7 @@ SystemMetrics SystemMetrics::Sample() {
+ SystemMetrics system_metrics;
+
+ system_metrics.committed_memory_ = GetSystemCommitCharge();
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ GetSystemMemoryInfo(&system_metrics.memory_info_);
+ GetVmStatInfo(&system_metrics.vmstat_info_);
+ GetSystemDiskInfo(&system_metrics.disk_info_);
+@@ -75,7 +75,7 @@ std::unique_ptr<Value> SystemMetrics::ToValue() const
+ std::unique_ptr<DictionaryValue> res(new DictionaryValue());
+
+ res->SetIntKey("committed_memory", static_cast<int>(committed_memory_));
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ std::unique_ptr<DictionaryValue> meminfo = memory_info_.ToValue();
+ std::unique_ptr<DictionaryValue> vmstat = vmstat_info_.ToValue();
+ meminfo->MergeDictionary(vmstat.get());
+@@ -126,7 +126,7 @@ double ProcessMetrics::GetPlatformIndependentCPUUsage(
+ }
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int ProcessMetrics::CalculateIdleWakeupsPerSecond(
+ uint64_t absolute_idle_wakeups) {
+ return CalculateEventsPerSecond(absolute_idle_wakeups,
+@@ -138,7 +138,7 @@ int ProcessMetrics::GetIdleWakeupsPerSecond() {
+ NOTIMPLEMENTED(); // http://crbug.com/120488
+ return 0;
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ int ProcessMetrics::CalculatePackageIdleWakeupsPerSecond(
diff --git a/www/iridium/files/patch-base_process_process__metrics.h b/www/iridium/files/patch-base_process_process__metrics.h
new file mode 100644
index 000000000000..420d563e5b29
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__metrics.h
@@ -0,0 +1,131 @@
+--- base/process/process_metrics.h.orig 2019-10-21 19:06:18 UTC
++++ base/process/process_metrics.h
+@@ -41,7 +41,7 @@ namespace base {
+ // Full declaration is in process_metrics_iocounters.h.
+ struct IoCounters;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Minor and major page fault counts since the process creation.
+ // Both counts are process-wide, and exclude child processes.
+ //
+@@ -51,7 +51,7 @@ struct PageFaultCounts {
+ int64_t minor;
+ int64_t major;
+ };
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Convert a POSIX timeval to microseconds.
+ BASE_EXPORT int64_t TimeValToMicroseconds(const struct timeval& tv);
+@@ -92,7 +92,7 @@ class BASE_EXPORT ProcessMetrics {
+ // convenience wrapper for CreateProcessMetrics().
+ static std::unique_ptr<ProcessMetrics> CreateCurrentProcessMetrics();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Resident Set Size is a Linux/Android specific memory concept. Do not
+ // attempt to extend this to other platforms.
+ BASE_EXPORT size_t GetResidentSetSize() const;
+@@ -172,14 +172,14 @@ class BASE_EXPORT ProcessMetrics {
+ int GetOpenFdSoftLimit() const;
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Bytes of swap as reported by /proc/[pid]/status.
+ uint64_t GetVmSwapBytes() const;
+
+ // Minor and major page fault count as reported by /proc/[pid]/stat.
+ // Returns true for success.
+ bool GetPageFaultCounts(PageFaultCounts* counts) const;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns total memory usage of malloc.
+ size_t GetMallocUsage();
+@@ -191,7 +191,7 @@ class BASE_EXPORT ProcessMetrics {
+ ProcessMetrics(ProcessHandle process, PortProvider* port_provider);
+ #endif // !defined(OS_MACOSX) || defined(OS_IOS)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int CalculateIdleWakeupsPerSecond(uint64_t absolute_idle_wakeups);
+ #endif
+ #if defined(OS_MACOSX)
+@@ -220,7 +220,7 @@ class BASE_EXPORT ProcessMetrics {
+ // Number of bytes transferred to/from disk in bytes.
+ uint64_t last_cumulative_disk_usage_ = 0;
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Same thing for idle wakeups.
+ TimeTicks last_idle_wakeups_time_;
+ uint64_t last_absolute_idle_wakeups_;
+@@ -271,7 +271,7 @@ BASE_EXPORT size_t GetHandleLimit();
+ BASE_EXPORT void IncreaseFdLimitTo(unsigned int max_descriptors);
+ #endif // defined(OS_POSIX)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+ // Data about system-wide memory consumption. Values are in KB. Available on
+ // Windows, Mac, Linux, Android and Chrome OS.
+@@ -305,7 +305,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int avail_phys = 0;
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // This provides an estimate of available memory as described here:
+ // https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
+ // NOTE: this is ONLY valid in kernels 3.14 and up. Its value will always
+@@ -319,7 +319,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int swap_free = 0;
+ #endif
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ int buffers = 0;
+ int cached = 0;
+@@ -329,7 +329,7 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ int inactive_file = 0;
+ int dirty = 0;
+ int reclaimable = 0;
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) ||
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD) ||
+ // defined(OS_FUCHSIA)
+
+ #if defined(OS_CHROMEOS)
+@@ -355,10 +355,10 @@ struct BASE_EXPORT SystemMemoryInfoKB {
+ // Exposed for memory debugging widget.
+ BASE_EXPORT bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo);
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_FUCHSIA)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ // Parse the data found in /proc/<pid>/stat and return the sum of the
+ // CPU-related ticks. Returns -1 on parse error.
+ // Exposed for testing.
+@@ -431,7 +431,7 @@ BASE_EXPORT bool GetSystemDiskInfo(SystemDiskInfo* dis
+ // Returns the amount of time spent in user space since boot across all CPUs.
+ BASE_EXPORT TimeDelta GetUserCpuTimeSinceBoot();
+
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // Data from files in directory /sys/block/zram0 about ZRAM usage.
+@@ -526,7 +526,7 @@ class BASE_EXPORT SystemMetrics {
+ FRIEND_TEST_ALL_PREFIXES(SystemMetricsTest, SystemMetrics);
+
+ size_t committed_memory_;
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ SystemMemoryInfoKB memory_info_;
+ VmStatInfo vmstat_info_;
+ SystemDiskInfo disk_info_;
diff --git a/www/iridium/files/patch-base_process_process__metrics__freebsd.cc b/www/iridium/files/patch-base_process_process__metrics__freebsd.cc
new file mode 100644
index 000000000000..1dc5323f3252
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__metrics__freebsd.cc
@@ -0,0 +1,259 @@
+--- base/process/process_metrics_freebsd.cc.orig 2019-07-24 18:58:02 UTC
++++ base/process/process_metrics_freebsd.cc
+@@ -5,6 +5,7 @@
+ #include "base/process/process_metrics.h"
+
+ #include <stddef.h>
++#include <sys/types.h>
+ #include <sys/sysctl.h>
+ #include <sys/user.h>
+ #include <unistd.h>
+@@ -14,11 +15,29 @@
+ #include "base/process/process_metrics_iocounters.h"
+ #include "base/stl_util.h"
+
++#include <unistd.h> /* getpagesize() */
++#include <fcntl.h> /* O_RDONLY */
++#include <kvm.h>
++#include <libutil.h>
++
+ namespace base {
++namespace {
+
++int GetPageShift() {
++ int pagesize = getpagesize();
++ int pageshift = 0;
++
++ while (pagesize > 1) {
++ pageshift++;
++ pagesize >>= 1;
++ }
++
++ return pageshift;
++}
++}
++
+ ProcessMetrics::ProcessMetrics(ProcessHandle process)
+- : process_(process),
+- last_cpu_(0) {}
++ : process_(process) {}
+
+ // static
+ std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
+@@ -69,4 +88,216 @@ size_t GetSystemCommitCharge() {
+ return mem_total - (mem_free*pagesize) - (mem_inactive*pagesize);
+ }
+
++int GetNumberOfThreads(ProcessHandle process) {
++ // Taken from FreeBSD top (usr.bin/top/machine.c)
++
++ kvm_t* kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
++ if (kd == NULL)
++ return 0;
++
++ struct kinfo_proc* pbase;
++ int nproc;
++ pbase = kvm_getprocs(kd, KERN_PROC_PID, process, &nproc);
++ if (pbase == NULL)
++ return 0;
++
++ if (kvm_close(kd) == -1)
++ return 0;
++
++ return nproc;
++}
++
++bool GetSystemMemoryInfo(SystemMemoryInfoKB *meminfo) {
++ unsigned int mem_total, mem_free, swap_total, swap_used;
++ size_t length;
++ int pagesizeKB;
++
++ pagesizeKB = getpagesize() / 1024;
++
++ length = sizeof(mem_total);
++ if (sysctlbyname("vm.stats.vm.v_page_count", &mem_total,
++ &length, NULL, 0) != 0 || length != sizeof(mem_total))
++ return false;
++
++ length = sizeof(mem_free);
++ if (sysctlbyname("vm.stats.vm.v_free_count", &mem_free, &length, NULL, 0)
++ != 0 || length != sizeof(mem_free))
++ return false;
++
++ length = sizeof(swap_total);
++ if (sysctlbyname("vm.swap_size", &swap_total, &length, NULL, 0)
++ != 0 || length != sizeof(swap_total))
++ return false;
++
++ length = sizeof(swap_used);
++ if (sysctlbyname("vm.swap_anon_use", &swap_used, &length, NULL, 0)
++ != 0 || length != sizeof(swap_used))
++ return false;
++
++ meminfo->total = mem_total * pagesizeKB;
++ meminfo->free = mem_free * pagesizeKB;
++ meminfo->swap_total = swap_total * pagesizeKB;
++ meminfo->swap_free = (swap_total - swap_used) * pagesizeKB;
++
++ return true;
++}
++
++int ProcessMetrics::GetOpenFdCount() const {
++ struct kinfo_file * kif;
++ int cnt;
++
++ if ((kif = kinfo_getfile(process_, &cnt)) == NULL)
++ return -1;
++
++ free(kif);
++
++ return cnt;
++}
++
++int ProcessMetrics::GetOpenFdSoftLimit() const {
++ size_t length;
++ int total_count = 0;
++ int mib[] = { CTL_KERN, KERN_MAXFILESPERPROC };
++
++ length = sizeof(total_count);
++
++ if (sysctl(mib, base::size(mib), &total_count, &length, NULL, 0) < 0) {
++ total_count = -1;
++ }
++
++ return total_count;
++}
++
++size_t ProcessMetrics::GetResidentSetSize() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t rss;
++
++ if (nproc > 0) {
++ rss = pp->ki_rssize << GetPageShift();
++ } else {
++ rss = 0;
++ }
++
++ kvm_close(kd);
++ return rss;
++}
++
++uint64_t ProcessMetrics::GetVmSwapBytes() const {
++ kvm_t *kd = kvm_open(nullptr, "/dev/null", nullptr, O_RDONLY, "kvm_open");
++
++ if (kd == nullptr)
++ return 0;
++
++ struct kinfo_proc *pp;
++ int nproc;
++
++ if ((pp = kvm_getprocs(kd, KERN_PROC_PID, process_, &nproc)) == nullptr) {
++ kvm_close(kd);
++ return 0;
++ }
++
++ size_t swrss;
++
++ if (nproc > 0) {
++ swrss = pp->ki_swrss > pp->ki_rssize
++ ? (pp->ki_swrss - pp->ki_rssize) << GetPageShift()
++ : 0;
++ } else {
++ swrss = 0;
++ }
++
++ kvm_close(kd);
++ return swrss;
++}
++
++int ProcessMetrics::GetIdleWakeupsPerSecond() {
++ NOTIMPLEMENTED();
++ return 0;
++}
++
++bool GetSystemDiskInfo(SystemDiskInfo* diskinfo) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++bool GetVmStatInfo(VmStatInfo* vmstat) {
++ NOTIMPLEMENTED();
++ return false;
++}
++
++SystemDiskInfo::SystemDiskInfo() {
++ reads = 0;
++ reads_merged = 0;
++ sectors_read = 0;
++ read_time = 0;
++ writes = 0;
++ writes_merged = 0;
++ sectors_written = 0;
++ write_time = 0;
++ io = 0;
++ io_time = 0;
++ weighted_io_time = 0;
++}
++
++SystemDiskInfo::SystemDiskInfo(const SystemDiskInfo& other) = default;
++
++std::unique_ptr<Value> SystemDiskInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++
++ // Write out uint64_t variables as doubles.
++ // Note: this may discard some precision, but for JS there's no other option.
++ res->SetDouble("reads", static_cast<double>(reads));
++ res->SetDouble("reads_merged", static_cast<double>(reads_merged));
++ res->SetDouble("sectors_read", static_cast<double>(sectors_read));
++ res->SetDouble("read_time", static_cast<double>(read_time));
++ res->SetDouble("writes", static_cast<double>(writes));
++ res->SetDouble("writes_merged", static_cast<double>(writes_merged));
++ res->SetDouble("sectors_written", static_cast<double>(sectors_written));
++ res->SetDouble("write_time", static_cast<double>(write_time));
++ res->SetDouble("io", static_cast<double>(io));
++ res->SetDouble("io_time", static_cast<double>(io_time));
++ res->SetDouble("weighted_io_time", static_cast<double>(weighted_io_time));
++
++ return std::move(res);
++}
++
++std::unique_ptr<DictionaryValue> SystemMemoryInfoKB::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("total", total);
++ res->SetIntKey("free", free);
++ res->SetIntKey("available", available);
++ res->SetIntKey("buffers", buffers);
++ res->SetIntKey("cached", cached);
++ res->SetIntKey("active_anon", active_anon);
++ res->SetIntKey("inactive_anon", inactive_anon);
++ res->SetIntKey("active_file", active_file);
++ res->SetIntKey("inactive_file", inactive_file);
++ res->SetIntKey("swap_total", swap_total);
++ res->SetIntKey("swap_free", swap_free);
++ res->SetIntKey("swap_used", swap_total - swap_free);
++ res->SetIntKey("dirty", dirty);
++ res->SetIntKey("reclaimable", reclaimable);
++
++ return res;
++}
++
++std::unique_ptr<DictionaryValue> VmStatInfo::ToValue() const {
++ auto res = std::make_unique<DictionaryValue>();
++ res->SetIntKey("pswpin", pswpin);
++ res->SetIntKey("pswpout", pswpout);
++ res->SetIntKey("pgmajfault", pgmajfault);
++ return res;
++}
+ } // namespace base
diff --git a/www/iridium/files/patch-base_process_process__metrics__posix.cc b/www/iridium/files/patch-base_process_process__metrics__posix.cc
new file mode 100644
index 000000000000..e909eeec959b
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__metrics__posix.cc
@@ -0,0 +1,20 @@
+--- base/process/process_metrics_posix.cc.orig 2019-10-21 19:06:18 UTC
++++ base/process/process_metrics_posix.cc
+@@ -20,6 +20,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_FREEBSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -117,7 +119,7 @@ size_t ProcessMetrics::GetMallocUsage() {
+ #else
+ return minfo.hblkhd + minfo.arena;
+ #endif
+-#elif defined(OS_FUCHSIA)
++#elif defined(OS_FUCHSIA) || defined(OS_BSD)
+ // TODO(fuchsia): Not currently exposed. https://crbug.com/735087.
+ return 0;
+ #endif
diff --git a/www/iridium/files/patch-base_process_process__unittest.cc b/www/iridium/files/patch-base_process_process__unittest.cc
new file mode 100644
index 000000000000..3e5aac5b4da7
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__unittest.cc
@@ -0,0 +1,11 @@
+--- base/process/process_unittest.cc.orig 2019-03-18 19:16:37 UTC
++++ base/process/process_unittest.cc
+@@ -148,7 +148,7 @@ TEST_F(ProcessTest, CreationTimeOtherProcess) {
+ // was spawned and a time recorded after it was spawned. However, since the
+ // base::Time and process creation clocks don't match, tolerate some error.
+ constexpr base::TimeDelta kTolerance =
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, process creation time is relative to boot time which has a
+ // 1-second resolution. Tolerate 1 second for the imprecise boot time and
+ // 100 ms for the imprecise clock.
diff --git a/www/iridium/files/patch-base_process_process__util__unittest.cc b/www/iridium/files/patch-base_process_process__util__unittest.cc
new file mode 100644
index 000000000000..e6378dd51b22
--- /dev/null
+++ b/www/iridium/files/patch-base_process_process__util__unittest.cc
@@ -0,0 +1,16 @@
+--- base/process/process_util_unittest.cc.orig 2020-03-23 15:26:12 UTC
++++ base/process/process_util_unittest.cc
+@@ -1307,11 +1307,11 @@ std::string TestLaunchProcess(const CommandLine& cmdli
+ options.fds_to_remap.emplace_back(fds[1], STDOUT_FILENO);
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ options.clone_flags = clone_flags;
+ #else
+ CHECK_EQ(0, clone_flags);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ EXPECT_TRUE(LaunchProcess(cmdline, options).IsValid());
+ write_pipe.Close();
diff --git a/www/iridium/files/patch-base_profiler_register__context.h b/www/iridium/files/patch-base_profiler_register__context.h
new file mode 100644
index 000000000000..ea2c126353b4
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_register__context.h
@@ -0,0 +1,60 @@
+--- base/profiler/register_context.h.orig 2020-03-16 18:39:41 UTC
++++ base/profiler/register_context.h
+@@ -17,7 +17,7 @@
+ #include <windows.h>
+ #elif defined(OS_MACOSX)
+ #include <mach/machine/thread_status.h>
+-#elif defined(OS_ANDROID) || defined(OS_LINUX)
++#elif defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/ucontext.h>
+ #endif
+
+@@ -165,6 +165,48 @@ inline uintptr_t& RegisterContextInstructionPointer(mc
+ }
+
+ #endif // #if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS)
++
++#elif defined(OS_FREEBSD)
++
++using RegisterContext = mcontext_t;
++
++#if defined(ARCH_CPU_X86_64)
++inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_rsp);
++}
++
++inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_rbp);
++}
++
++inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_rip);
++}
++#elif defined(ARCH_CPU_X86)
++inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_esp);
++}
++
++inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_ebp);
++}
++
++inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_eip);
++}
++#elif defined(ARCH_CPU_ARM64)
++inline uintptr_t& RegisterContextStackPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_gpregs.gp_sp);
++}
++
++inline uintptr_t& RegisterContextFramePointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_gpregs.gp_x[29]);
++}
++
++inline uintptr_t& RegisterContextInstructionPointer(mcontext_t* context) {
++ return AsUintPtr(&context->mc_gpregs.gp_elr);
++}
++#endif
+
+ #else // #if defined(OS_WIN)
+
diff --git a/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.cc b/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.cc
new file mode 100644
index 000000000000..96db1204abdd
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.cc
@@ -0,0 +1,11 @@
+--- base/profiler/sampling_profiler_thread_token.cc.orig 2020-02-07 10:24:19 UTC
++++ base/profiler/sampling_profiler_thread_token.cc
+@@ -7,7 +7,7 @@
+ namespace base {
+
+ SamplingProfilerThreadToken GetSamplingProfilerCurrentThreadToken() {
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ return {PlatformThread::CurrentId(), pthread_self()};
+ #else
+ return {PlatformThread::CurrentId()};
diff --git a/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.h b/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.h
new file mode 100644
index 000000000000..589e083be74d
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_sampling__profiler__thread__token.h
@@ -0,0 +1,20 @@
+--- base/profiler/sampling_profiler_thread_token.h.orig 2020-02-07 10:24:33 UTC
++++ base/profiler/sampling_profiler_thread_token.h
+@@ -9,7 +9,7 @@
+ #include "base/threading/platform_thread.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ #include <pthread.h>
+ #endif
+
+@@ -21,7 +21,7 @@ namespace base {
+ // functions used to obtain the stack base address.
+ struct SamplingProfilerThreadToken {
+ PlatformThreadId id;
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ pthread_t pthread_id;
+ #endif
+ };
diff --git a/www/iridium/files/patch-base_profiler_stack__copier__signal.cc b/www/iridium/files/patch-base_profiler_stack__copier__signal.cc
new file mode 100644
index 000000000000..b9e757471f17
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_stack__copier__signal.cc
@@ -0,0 +1,63 @@
+--- base/profiler/stack_copier_signal.cc.orig 2020-04-10 00:33:01 UTC
++++ base/profiler/stack_copier_signal.cc
+@@ -4,7 +4,14 @@
+
+ #include "base/profiler/stack_copier_signal.h"
+
++#if defined(OS_LINUX)
+ #include <linux/futex.h>
++#include <syscall.h>
++#elif defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <sys/thr.h>
++#include <sys/umtx.h>
++#endif
+ #include <signal.h>
+ #include <sys/ucontext.h>
+ #include <syscall.h>
+@@ -35,8 +42,13 @@ class AsyncSafeWaitableEvent {
+ // for a pthread mutex. So, also check the condition.
+ while (true) {
+ int res =
++#if defined(OS_LINUX)
+ syscall(SYS_futex, futex_int_ptr(), FUTEX_WAIT | FUTEX_PRIVATE_FLAG,
+ 0, nullptr, nullptr, 0);
++#elif defined(OS_FREEBSD)
++ _umtx_op(futex_int_ptr(), UMTX_OP_WAIT_UINT_PRIVATE, 0, nullptr,
++ nullptr);
++#endif
+ if (futex_.load(std::memory_order_acquire) != 0)
+ return true;
+ if (res != 0)
+@@ -46,8 +58,12 @@ class AsyncSafeWaitableEvent {
+
+ void Signal() {
+ futex_.store(1, std::memory_order_release);
++#if defined(OS_LINUX)
+ syscall(SYS_futex, futex_int_ptr(), FUTEX_WAKE | FUTEX_PRIVATE_FLAG, 1,
+ nullptr, nullptr, 0);
++#elif defined(OS_FREEBSD)
++ _umtx_op(futex_int_ptr(), UMTX_OP_WAKE_PRIVATE, 1, nullptr, nullptr);
++#endif
+ }
+
+ private:
+@@ -214,11 +230,18 @@ bool StackCopierSignal::CopyStack(StackBuffer* stack_b
+ if (!scoped_sigaction.succeeded())
+ return false;
+
++#if defined(OS_LINUX)
+ if (syscall(SYS_tgkill, getpid(), thread_delegate_->GetThreadId(),
+ SIGURG) != 0) {
+ NOTREACHED();
+ return false;
+ }
++#elif defined(OS_FREEBSD)
++ if (thr_kill2(getpid(), thread_delegate_->GetThreadId(), SIGURG) != 0) {
++ NOTREACHED();
++ return false;
++ }
++#endif
+ bool finished_waiting = wait_event.Wait();
+ TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("cpu_profiler.debug"),
+ "StackCopierSignal copy stack");
diff --git a/www/iridium/files/patch-base_profiler_stack__sampling__profiler__unittest.cc b/www/iridium/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
new file mode 100644
index 000000000000..686f7e90afb3
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_stack__sampling__profiler__unittest.cc
@@ -0,0 +1,11 @@
+--- base/profiler/stack_sampling_profiler_unittest.cc.orig 2019-07-24 18:58:02 UTC
++++ base/profiler/stack_sampling_profiler_unittest.cc
+@@ -41,7 +41,7 @@
+ #include <intrin.h>
+ #include <malloc.h>
+ #include <windows.h>
+-#else
++#elif !defined(OS_BSD)
+ #include <alloca.h>
+ #endif
+
diff --git a/www/iridium/files/patch-base_profiler_thread__delegate__posix.cc b/www/iridium/files/patch-base_profiler_thread__delegate__posix.cc
new file mode 100644
index 000000000000..a2f162e586fe
--- /dev/null
+++ b/www/iridium/files/patch-base_profiler_thread__delegate__posix.cc
@@ -0,0 +1,50 @@
+--- base/profiler/thread_delegate_posix.cc.orig 2020-04-10 00:37:03 UTC
++++ base/profiler/thread_delegate_posix.cc
+@@ -4,6 +4,10 @@
+
+ #include <pthread.h>
+
++#if defined(OS_FREEBSD)
++#include <pthread_np.h>
++#endif
++
+ #include "base/process/process_handle.h"
+ #include "base/profiler/thread_delegate_posix.h"
+ #include "base/stl_util.h"
+@@ -17,7 +21,12 @@ namespace {
+ uintptr_t GetThreadStackBaseAddressImpl(
+ SamplingProfilerThreadToken thread_token) {
+ pthread_attr_t attr;
++#if defined(OS_FREEBSDD)
++ pthread_attr_init(&attr);
++ pthread_attr_get_np(thread_token.pthread_id, &attr);
++#elif defined(OS_LINUX)
+ pthread_getattr_np(thread_token.pthread_id, &attr);
++#endif
+ // See crbug.com/617730 for limitations of this approach on Linux.
+ void* address;
+ size_t size;
+@@ -103,6 +112,15 @@ std::vector<uintptr_t*> ThreadDelegatePosix::GetRegist
+ return {
+ // Return the set of callee-save registers per the x86-64 System V ABI
+ // section 3.2.1, plus the stack pointer.
++#if defined(OS_FREEBSD)
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_rbp),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_rbx),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_r12),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_r13),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_r14),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_r15),
++ reinterpret_cast<uintptr_t*>(&thread_context->mc_rsp),
++#else
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_RBP]),
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_RBX]),
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_R12]),
+@@ -110,6 +128,7 @@ std::vector<uintptr_t*> ThreadDelegatePosix::GetRegist
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_R14]),
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_R15]),
+ reinterpret_cast<uintptr_t*>(&thread_context->gregs[REG_RSP]),
++#endif
+ };
+ #else // #if defined(ARCH_CPU_ARM_FAMILY) && defined(ARCH_CPU_32_BITS)
+ // Unimplemented for other architectures.
diff --git a/www/iridium/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc b/www/iridium/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
new file mode 100644
index 000000000000..44e3b0aae8ef
--- /dev/null
+++ b/www/iridium/files/patch-base_sampling__heap__profiler_sampling__heap__profiler.cc
@@ -0,0 +1,24 @@
+--- base/sampling_heap_profiler/sampling_heap_profiler.cc.orig 2019-09-09 21:55:05 UTC
++++ base/sampling_heap_profiler/sampling_heap_profiler.cc
+@@ -29,6 +29,10 @@
+ #include <sys/prctl.h>
+ #endif
+
++#if defined(OS_BSD)
++#include <pthread_np.h>
++#endif
++
+ #if defined(OS_ANDROID) && BUILDFLAG(CAN_UNWIND_WITH_CFI_TABLE) && \
+ defined(OFFICIAL_BUILD)
+ #include "base/trace_event/cfi_backtrace_android.h"
+@@ -64,6 +68,10 @@ const char* GetAndLeakThreadName() {
+ #elif defined(OS_MACOSX)
+ int err = pthread_getname_np(pthread_self(), name, kBufferLen);
+ if (err == 0 && *name != '\0')
++ return strdup(name);
++#elif defined(OS_BSD) && __FreeBSD__ >= 12
++ pthread_get_name_np(pthread_self(), name, kBufferLen);
++ if (*name != '\0')
+ return strdup(name);
+ #endif // defined(OS_LINUX) || defined(OS_ANDROID)
+
diff --git a/www/iridium/files/patch-base_security__unittest.cc b/www/iridium/files/patch-base_security__unittest.cc
new file mode 100644
index 000000000000..c46d71f83add
--- /dev/null
+++ b/www/iridium/files/patch-base_security__unittest.cc
@@ -0,0 +1,11 @@
+--- base/security_unittest.cc.orig 2019-04-30 22:22:28 UTC
++++ base/security_unittest.cc
+@@ -60,7 +60,7 @@ NOINLINE Type HideValueFromCompiler(volatile Type valu
+ // FAILS_ is too clunky.
+ void OverflowTestsSoftExpectTrue(bool overflow_detected) {
+ if (!overflow_detected) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_NACL)
+ // Sadly, on Linux, Android, and OSX we don't have a good story yet. Don't
+ // fail the test, but report.
+ printf("Platform has overflow: %s\n",
diff --git a/www/iridium/files/patch-base_synchronization_lock__impl.h b/www/iridium/files/patch-base_synchronization_lock__impl.h
new file mode 100644
index 000000000000..fb3737a27ea9
--- /dev/null
+++ b/www/iridium/files/patch-base_synchronization_lock__impl.h
@@ -0,0 +1,16 @@
+--- base/synchronization/lock_impl.h.orig 2020-03-08 08:35:16 UTC
++++ base/synchronization/lock_impl.h
+@@ -67,10 +67,13 @@ void LockImpl::Unlock() {
+ ::ReleaseSRWLockExclusive(reinterpret_cast<PSRWLOCK>(&native_handle_));
+ }
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wthread-safety-analysis"
+ void LockImpl::Unlock() {
+ int rv = pthread_mutex_unlock(&native_handle_);
+ DCHECK_EQ(rv, 0) << ". " << strerror(rv);
+ }
++#pragma GCC diagnostic pop
+ #endif
+
+ // This is an implementation used for AutoLock templated on the lock type.
diff --git a/www/iridium/files/patch-base_syslog__logging.cc b/www/iridium/files/patch-base_syslog__logging.cc
new file mode 100644
index 000000000000..d719219ca50b
--- /dev/null
+++ b/www/iridium/files/patch-base_syslog__logging.cc
@@ -0,0 +1,20 @@
+--- base/syslog_logging.cc.orig 2019-10-21 19:06:18 UTC
++++ base/syslog_logging.cc
+@@ -14,7 +14,7 @@
+ #include "base/debug/stack_trace.h"
+ #include "base/strings/string_util.h"
+ #include "base/win/win_util.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // <syslog.h> defines LOG_INFO, LOG_WARNING macros that could conflict with
+ // base::LOG_INFO, base::LOG_WARNING.
+ #include <syslog.h>
+@@ -113,7 +113,7 @@ EventLogMessage::~EventLogMessage() {
+
+ if (user_sid != nullptr)
+ ::LocalFree(user_sid);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kEventSource[] = "chrome";
+ openlog(kEventSource, LOG_NOWAIT | LOG_PID, LOG_USER);
+ // We can't use the defined names for the logging severity from syslog.h
diff --git a/www/iridium/files/patch-base_system_sys__info.h b/www/iridium/files/patch-base_system_sys__info.h
new file mode 100644
index 000000000000..2159a51c6b6f
--- /dev/null
+++ b/www/iridium/files/patch-base_system_sys__info.h
@@ -0,0 +1,20 @@
+--- base/system/sys_info.h.orig 2020-03-16 18:39:41 UTC
++++ base/system/sys_info.h
+@@ -194,6 +194,8 @@ class BASE_EXPORT SysInfo {
+ // On Desktop this returns true when memory <= 512MB.
+ static bool IsLowEndDevice();
+
++ static uint64_t MaxSharedMemorySize();
++
+ private:
+ FRIEND_TEST_ALL_PREFIXES(SysInfoTest, AmountOfAvailablePhysicalMemory);
+ FRIEND_TEST_ALL_PREFIXES(debug::SystemMetricsTest, ParseMeminfo);
+@@ -203,7 +205,7 @@ class BASE_EXPORT SysInfo {
+ static bool IsLowEndDeviceImpl();
+ static HardwareInfo GetHardwareInfoSync();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX) || defined(OS_BSD)
+ static int64_t AmountOfAvailablePhysicalMemory(
+ const SystemMemoryInfoKB& meminfo);
+ #endif
diff --git a/www/iridium/files/patch-base_system_sys__info__freebsd.cc b/www/iridium/files/patch-base_system_sys__info__freebsd.cc
new file mode 100644
index 000000000000..12994422dc08
--- /dev/null
+++ b/www/iridium/files/patch-base_system_sys__info__freebsd.cc
@@ -0,0 +1,67 @@
+--- base/system/sys_info_freebsd.cc.orig 2019-12-16 21:50:40 UTC
++++ base/system/sys_info_freebsd.cc
+@@ -13,26 +13,59 @@
+ namespace base {
+
+ int64_t SysInfo::AmountOfPhysicalMemoryImpl() {
+- int pages, page_size;
++ int pages, page_size, r = 0;
+ size_t size = sizeof(pages);
+- sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
+- sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
+- if (pages == -1 || page_size == -1) {
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_count", &pages, &size, NULL, 0);
++ if(r == 0)
++ r =sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == -1) {
+ NOTREACHED();
+ return 0;
+ }
+ return static_cast<int64_t>(pages) * page_size;
+ }
+
++int64_t SysInfo::AmountOfAvailablePhysicalMemoryImpl() {
++ int page_size, r = 0;
++ unsigned pgfree, pginact, pgcache;
++ size_t size = sizeof(page_size);
++ size_t szpg = sizeof(pgfree);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_page_size", &page_size, &size, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_free_count", &pgfree, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_inactive_count", &pginact, &szpg, NULL, 0);
++ if(r == 0)
++ r = sysctlbyname("vm.stats.vm.v_cache_count", &pgcache, &szpg, NULL, 0);
++ if(r == -1) {
++ NOTREACHED();
++ return 0;
++ }
++ return static_cast<int64_t>((pgfree + pginact + pgcache) * page_size);
++}
++
+ // static
++std::string SysInfo::CPUModelName() {
++ int mib[] = { CTL_HW, HW_MODEL };
++ char name[256];
++ size_t size = base::size(name);
++ if (sysctl(mib, base::size(mib), &name, &size, NULL, 0) == 0)
++ return name;
++ return std::string();
++}
++
++// static
+ uint64_t SysInfo::MaxSharedMemorySize() {
+ size_t limit;
+ size_t size = sizeof(limit);
++
+ if (sysctlbyname("kern.ipc.shmmax", &limit, &size, NULL, 0) < 0) {
+ NOTREACHED();
+ return 0;
+ }
++
+ return static_cast<uint64_t>(limit);
+ }
+-
+ } // namespace base
diff --git a/www/iridium/files/patch-base_system_sys__info__posix.cc b/www/iridium/files/patch-base_system_sys__info__posix.cc
new file mode 100644
index 000000000000..5b79b03dce8a
--- /dev/null
+++ b/www/iridium/files/patch-base_system_sys__info__posix.cc
@@ -0,0 +1,11 @@
+--- base/system/sys_info_posix.cc.orig 2019-09-09 21:55:05 UTC
++++ base/system/sys_info_posix.cc
+@@ -220,6 +220,8 @@ std::string SysInfo::OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/www/iridium/files/patch-base_task_thread__pool_environment__config__unittest.cc b/www/iridium/files/patch-base_task_thread__pool_environment__config__unittest.cc
new file mode 100644
index 000000000000..92b120193ada
--- /dev/null
+++ b/www/iridium/files/patch-base_task_thread__pool_environment__config__unittest.cc
@@ -0,0 +1,11 @@
+--- base/task/thread_pool/environment_config_unittest.cc.orig 2019-07-29 13:26:54 UTC
++++ base/task/thread_pool/environment_config_unittest.cc
+@@ -14,7 +14,7 @@ namespace internal {
+ TEST(ThreadPoolEnvironmentConfig, CanUseBackgroundPriorityForWorker) {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
+ EXPECT_TRUE(CanUseBackgroundPriorityForWorkerThread());
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || \
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS) || defined(OS_NACL)
+ EXPECT_FALSE(CanUseBackgroundPriorityForWorkerThread());
+ #else
diff --git a/www/iridium/files/patch-base_test_fontconfig__util__linux.cc b/www/iridium/files/patch-base_test_fontconfig__util__linux.cc
new file mode 100644
index 000000000000..eb6ff5024c46
--- /dev/null
+++ b/www/iridium/files/patch-base_test_fontconfig__util__linux.cc
@@ -0,0 +1,406 @@
+--- base/test/fontconfig_util_linux.cc.orig 2020-02-03 21:52:37 UTC
++++ base/test/fontconfig_util_linux.cc
+@@ -6,22 +6,397 @@
+
+ #include <fontconfig/fontconfig.h>
+
+-#include <memory>
+-
+ #include "base/base_paths.h"
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
++#include "base/files/file_util.h"
+ #include "base/logging.h"
++#include "base/macros.h"
+ #include "base/path_service.h"
++#include "base/strings/string_util.h"
+
+ namespace base {
+
++namespace {
++
++const char kFontsConfTemplate[] = R"(<?xml version="1.0"?>
++<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
++<fontconfig>
++
++ <!-- Cache location. -->
++ <cachedir>$1</cachedir>
++
++ <!-- GCS-synced fonts. -->
++ <dir>$2</dir>
++
++ <!-- Default properties. -->
++ <match target="font">
++ <edit name="embeddedbitmap" mode="append_last">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- Some layout tests specify Helvetica as a family and we need to make sure
++ that we don't fallback to Tinos for them -->
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Helvetica</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans-serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>mono</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>monospace</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>cursive</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Comic Sans MS</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>fantasy</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Impact</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Monaco</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Arial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier New</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Georgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times New Roman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Verdana</string>
++ </test>
++ <!-- NOT metrically compatible! -->
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- TODO(thomasanderson): Move these configs to be test-specific. -->
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonAntiAliasedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="antialias" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedGeorgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonHintedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <!-- These deliberately contradict each other. The 'hinting' preference
++ should take priority -->
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>AutohintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>HintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>false</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>FullAndAutoHintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelEnabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>rgb</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelDisabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>none</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- FontConfig doesn't currently provide a well-defined way to turn on
++ subpixel positioning. This is just an arbitrary pattern to use after
++ turning subpixel positioning on globally to ensure that we don't have
++ issues with our style getting cached for other tests. -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioning</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- See comments above -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioningAhem</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>ahem</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedTimesNewRoman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <!-- When we encounter a character that the current font doesn't
++ support, gfx::GetFallbackFontForChar() returns the first font
++ that does have a glyph for the character. The list of fonts is
++ sorted by a pattern that includes the current locale, but doesn't
++ include a font family (which means that the fallback font depends
++ on the locale but not on the current font).
++
++ DejaVu Sans is commonly the only font that supports some
++ characters, such as "⇧", and even when other candidates are
++ available, DejaVu Sans is commonly first among them, because of
++ the way Fontconfig is ordinarily configured. For example, the
++ configuration in the Fonconfig source lists DejaVu Sans under the
++ sans-serif generic family, and appends sans-serif to patterns
++ that don't already include a generic family (such as the pattern
++ in gfx::GetFallbackFontForChar()).
++
++ To get the same fallback font in the layout tests, we could
++ duplicate this configuration here, or more directly, simply
++ append DejaVu Sans to all patterns. -->
++ <match target="pattern">
++ <edit name="family" mode="append_last">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++</fontconfig>
++)";
++
++} // namespace
++
+ void SetUpFontconfig() {
+- FilePath dir_module;
+- CHECK(PathService::Get(DIR_MODULE, &dir_module));
++ std::unique_ptr<Environment> env = Environment::Create();
++ if (!env->HasVar("FONTCONFIG_FILE")) {
++ // fonts.conf must be generated on-the-fly since it contains absolute paths
++ // which may be different if
++ // 1. The user moves/renames their build directory (or any parent dirs).
++ // 2. The build directory is mapped on a swarming bot at a location
++ // different from the one the buildbot used.
++ FilePath dir_module;
++ PathService::Get(DIR_MODULE, &dir_module);
++ FilePath font_cache = dir_module.Append("fontconfig_caches");
++ FilePath test_fonts = dir_module.Append("test_fonts");
++ std::string fonts_conf = ReplaceStringPlaceholders(
++ kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr);
+
+- std::unique_ptr<Environment> env(Environment::Create());
+- CHECK(env->SetVar("FONTCONFIG_SYSROOT", dir_module.value().c_str()));
++ // Write the data to a different file and then atomically rename it to
++ // fonts.conf. This avoids the file being in a bad state when different
++ // parallel tests call this function at the same time.
++ FilePath fonts_conf_file_temp;
++ if(!CreateTemporaryFileInDir(dir_module, &fonts_conf_file_temp))
++ CHECK(CreateTemporaryFile(&fonts_conf_file_temp));
++ CHECK(
++ WriteFile(fonts_conf_file_temp, fonts_conf.c_str(), fonts_conf.size()));
++ FilePath fonts_conf_file = dir_module.Append("fonts.conf");
++ if (ReplaceFile(fonts_conf_file_temp, fonts_conf_file, nullptr))
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file.value());
++ else
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file_temp.value());
++ }
+ }
+
+ } // namespace base
diff --git a/www/iridium/files/patch-base_test_generate__fontconfig__caches.cc b/www/iridium/files/patch-base_test_generate__fontconfig__caches.cc
new file mode 100644
index 000000000000..60cb0527b5f4
--- /dev/null
+++ b/www/iridium/files/patch-base_test_generate__fontconfig__caches.cc
@@ -0,0 +1,17 @@
+--- base/test/generate_fontconfig_caches.cc.orig 2019-12-16 21:51:21 UTC
++++ base/test/generate_fontconfig_caches.cc
+@@ -59,7 +59,14 @@ int main() {
+ FcFini();
+
+ // Check existence of intended fontconfig cache file.
++#if defined(OS_BSD)
++ // Our version of fontconfig is too old to respect .uuid files in font directories,
++ // so we check for the CACHEDIR.TAG file instead
+ CHECK(base::PathExists(
++ fontconfig_caches.Append("CACHEDIR.TAG")));
++#else
++ CHECK(base::PathExists(
+ fontconfig_caches.Append(base::StrCat({uuid, "-le64.cache-7"}))));
++#endif
+ return 0;
+ }
diff --git a/www/iridium/files/patch-base_test_launcher_test__launcher.cc b/www/iridium/files/patch-base_test_launcher_test__launcher.cc
new file mode 100644
index 000000000000..4ec5e581d6b6
--- /dev/null
+++ b/www/iridium/files/patch-base_test_launcher_test__launcher.cc
@@ -0,0 +1,19 @@
+--- base/test/launcher/test_launcher.cc.orig 2020-03-16 18:40:27 UTC
++++ base/test/launcher/test_launcher.cc
+@@ -55,6 +55,7 @@
+ #include "testing/gtest/include/gtest/gtest.h"
+
+ #if defined(OS_POSIX)
++#include <signal.h>
+ #include <fcntl.h>
+
+ #include "base/files/file_descriptor_watcher_posix.h"
+@@ -551,7 +552,7 @@ ChildProcessResults DoLaunchChildTestProcess(
+ #if !defined(OS_FUCHSIA)
+ options.new_process_group = true;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ options.kill_on_parent_death = true;
+ #endif
+
diff --git a/www/iridium/files/patch-base_test_test__file__util__posix.cc b/www/iridium/files/patch-base_test_test__file__util__posix.cc
new file mode 100644
index 000000000000..a65fcc61d56b
--- /dev/null
+++ b/www/iridium/files/patch-base_test_test__file__util__posix.cc
@@ -0,0 +1,11 @@
+--- base/test/test_file_util_posix.cc.orig 2020-02-03 21:52:37 UTC
++++ base/test/test_file_util_posix.cc
+@@ -84,7 +84,7 @@ void SyncPageCacheToDisk() {
+ sync();
+ }
+
+-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ bool EvictFileFromSystemCache(const FilePath& file) {
+ // There doesn't seem to be a POSIX way to cool the disk cache.
+ NOTIMPLEMENTED();
diff --git a/www/iridium/files/patch-base_test_test__suite.cc b/www/iridium/files/patch-base_test_test__suite.cc
new file mode 100644
index 000000000000..74f7f01726cc
--- /dev/null
+++ b/www/iridium/files/patch-base_test_test__suite.cc
@@ -0,0 +1,37 @@
+--- base/test/test_suite.cc.orig 2020-03-23 15:30:45 UTC
++++ base/test/test_suite.cc
+@@ -68,7 +68,7 @@
+ #include "base/test/test_support_ios.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/test/fontconfig_util_linux.h"
+ #endif
+
+@@ -384,14 +384,14 @@ void TestSuite::PreInitialize() {
+ testing::GTEST_FLAG(catch_exceptions) = false;
+ #endif
+ EnableTerminationOnHeapCorruption();
+-#if defined(OS_LINUX) && defined(USE_AURA)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_AURA)
+ // When calling native char conversion functions (e.g wrctomb) we need to
+ // have the locale set. In the absence of such a call the "C" locale is the
+ // default. In the gtk code (below) gtk_init() implicitly sets a locale.
+ setlocale(LC_ALL, "");
+ // We still need number to string conversions to be locale insensitive.
+ setlocale(LC_NUMERIC, "C");
+-#endif // defined(OS_LINUX) && defined(USE_AURA)
++#endif // (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_AURA)
+
+ // On Android, AtExitManager is created in
+ // testing/android/native_test_wrapper.cc before main() is called.
+@@ -620,7 +620,7 @@ void TestSuite::Initialize() {
+ // TODO(jshin): Should we set the locale via an OS X locale API here?
+ i18n::SetICUDefaultLocale("en_US");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetUpFontconfig();
+ #endif
+
diff --git a/www/iridium/files/patch-base_third__party_libevent_BUILD.gn b/www/iridium/files/patch-base_third__party_libevent_BUILD.gn
new file mode 100644
index 000000000000..67042d6ca3e5
--- /dev/null
+++ b/www/iridium/files/patch-base_third__party_libevent_BUILD.gn
@@ -0,0 +1,24 @@
+--- base/third_party/libevent/BUILD.gn.orig 2019-03-11 22:00:51 UTC
++++ base/third_party/libevent/BUILD.gn
+@@ -43,13 +43,20 @@ static_library("libevent") {
+ "mac/event-config.h",
+ ]
+ include_dirs = [ "mac" ]
+- } else if (is_linux) {
++ } else if (is_linux && !is_bsd) {
+ sources += [
+ "epoll.c",
+ "linux/config.h",
+ "linux/event-config.h",
+ ]
+ include_dirs = [ "linux" ]
++ } else if (is_bsd) {
++ sources += [
++ "kqueue.c",
++ "freebsd/config.h",
++ "freebsd/event-config.h",
++ ]
++ include_dirs = [ "freebsd" ]
+ } else if (is_android) {
+ sources += [
+ "android/config.h",
diff --git a/www/iridium/files/patch-base_threading_platform__thread.h b/www/iridium/files/patch-base_threading_platform__thread.h
new file mode 100644
index 000000000000..0ff2fc68f36a
--- /dev/null
+++ b/www/iridium/files/patch-base_threading_platform__thread.h
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread.h.orig 2019-10-21 19:06:18 UTC
++++ base/threading/platform_thread.h
+@@ -221,7 +221,7 @@ class BASE_EXPORT PlatformThread {
+
+ static ThreadPriority GetCurrentThreadPriority();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Toggles a specific thread's priority at runtime. This can be used to
+ // change the priority of a thread in a different process and will fail
+ // if the calling process does not have proper permissions. The
diff --git a/www/iridium/files/patch-base_threading_platform__thread__linux.cc b/www/iridium/files/patch-base_threading_platform__thread__linux.cc
new file mode 100644
index 000000000000..78123188b58a
--- /dev/null
+++ b/www/iridium/files/patch-base_threading_platform__thread__linux.cc
@@ -0,0 +1,30 @@
+--- base/threading/platform_thread_linux.cc.orig 2019-03-11 22:00:51 UTC
++++ base/threading/platform_thread_linux.cc
+@@ -18,7 +18,9 @@
+
+ #if !defined(OS_NACL) && !defined(OS_AIX)
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -99,7 +101,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToN
+
+ Optional<bool> CanIncreaseCurrentThreadPriorityForPlatform(
+ ThreadPriority priority) {
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // A non-zero soft-limit on RLIMIT_RTPRIO is required to be allowed to invoke
+ // pthread_setschedparam in SetCurrentThreadPriorityForPlatform().
+ struct rlimit rlim;
+@@ -141,7 +143,7 @@ Optional<ThreadPriority> GetCurrentThreadPriorityForPl
+ void PlatformThread::SetName(const std::string& name) {
+ ThreadIdNameManager::GetInstance()->SetName(name);
+
+-#if !defined(OS_NACL) && !defined(OS_AIX)
++#if !defined(OS_NACL) && !defined(OS_AIX) && !defined(OS_BSD)
+ // On linux we can get the thread names to show up in the debugger by setting
+ // the process name for the LWP. We don't want to do this for the main
+ // thread because that would rename the process, causing tools like killall
diff --git a/www/iridium/files/patch-base_threading_platform__thread__posix.cc b/www/iridium/files/patch-base_threading_platform__thread__posix.cc
new file mode 100644
index 000000000000..e2681e175e63
--- /dev/null
+++ b/www/iridium/files/patch-base_threading_platform__thread__posix.cc
@@ -0,0 +1,11 @@
+--- base/threading/platform_thread_posix.cc.orig 2019-03-11 22:00:51 UTC
++++ base/threading/platform_thread_posix.cc
+@@ -66,7 +66,7 @@ void* ThreadFunc(void* params) {
+ if (!thread_params->joinable)
+ base::ThreadRestrictions::SetSingletonAllowed(false);
+
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ // Threads on linux/android may inherit their priority from the thread
+ // where they were created. This explicitly sets the priority of all new
+ // threads.
diff --git a/www/iridium/files/patch-base_threading_platform__thread__unittest.cc b/www/iridium/files/patch-base_threading_platform__thread__unittest.cc
new file mode 100644
index 000000000000..b998b2d83f2c
--- /dev/null
+++ b/www/iridium/files/patch-base_threading_platform__thread__unittest.cc
@@ -0,0 +1,20 @@
+--- base/threading/platform_thread_unittest.cc.orig 2020-03-23 15:31:47 UTC
++++ base/threading/platform_thread_unittest.cc
+@@ -302,7 +302,7 @@ TEST(PlatformThreadTest,
+ // and hardcodes what we know. Please inform scheduler-dev@chromium.org if this
+ // proprerty changes for a given platform.
+ TEST(PlatformThreadTest, CanIncreaseThreadPriority) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be
+ // able to increase priority to any level.
+ constexpr bool kCanIncreasePriority = false;
+@@ -398,7 +398,7 @@ TEST(PlatformThreadTest, SetHugeThreadName) {
+ TEST(PlatformThreadTest, GetDefaultThreadStackSize) {
+ size_t stack_size = PlatformThread::GetDefaultThreadStackSize();
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_FUCHSIA) || \
+- (defined(OS_LINUX) && !defined(THREAD_SANITIZER)) || \
++ ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(THREAD_SANITIZER)) || \
+ (defined(OS_ANDROID) && !defined(ADDRESS_SANITIZER))
+ EXPECT_EQ(0u, stack_size);
+ #else
diff --git a/www/iridium/files/patch-base_threading_thread__task__runner__handle.cc b/www/iridium/files/patch-base_threading_thread__task__runner__handle.cc
new file mode 100644
index 000000000000..bdafc95fd2e2
--- /dev/null
+++ b/www/iridium/files/patch-base_threading_thread__task__runner__handle.cc
@@ -0,0 +1,26 @@
+--- base/threading/thread_task_runner_handle.cc.orig 2019-12-16 21:50:40 UTC
++++ base/threading/thread_task_runner_handle.cc
+@@ -8,6 +8,7 @@
+ #include <utility>
+
+ #include "base/bind.h"
++#include "base/callback_helpers.h"
+ #include "base/lazy_instance.h"
+ #include "base/logging.h"
+ #include "base/run_loop.h"
+@@ -38,6 +39,7 @@ bool ThreadTaskRunnerHandle::IsSet() {
+ return !!thread_task_runner_tls.Pointer()->Get();
+ }
+
++#if defined(OS_BSD)
+ // static
+ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideForTesting(
+ scoped_refptr<SingleThreadTaskRunner> overriding_task_runner) {
+@@ -82,6 +84,7 @@ ScopedClosureRunner ThreadTaskRunnerHandle::OverrideFo
+ base::Unretained(ttrh->task_runner_.get()),
+ std::move(no_running_during_override)));
+ }
++#endif
+
+ ThreadTaskRunnerHandle::ThreadTaskRunnerHandle(
+ scoped_refptr<SingleThreadTaskRunner> task_runner)
diff --git a/www/iridium/files/patch-base_trace__event_malloc__dump__provider.cc b/www/iridium/files/patch-base_trace__event_malloc__dump__provider.cc
new file mode 100644
index 000000000000..fef6ba833abf
--- /dev/null
+++ b/www/iridium/files/patch-base_trace__event_malloc__dump__provider.cc
@@ -0,0 +1,21 @@
+--- base/trace_event/malloc_dump_provider.cc.orig 2020-03-16 18:39:41 UTC
++++ base/trace_event/malloc_dump_provider.cc
+@@ -17,6 +17,8 @@
+
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
++#elif defined(OS_BSD)
++#include <stdlib.h>
+ #else
+ #include <malloc.h>
+ #endif
+@@ -132,6 +134,9 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDump
+ }
+ #elif defined(OS_FUCHSIA)
+ // TODO(fuchsia): Port, see https://crbug.com/706592.
++#elif defined(OS_BSD)
++ total_virtual_size = 0;
++ allocated_objects_size = 0;
+ #else
+ struct mallinfo info = mallinfo();
+ // In case of Android's jemalloc |arena| is 0 and the outer pages size is
diff --git a/www/iridium/files/patch-base_trace__event_process__memory__dump.cc b/www/iridium/files/patch-base_trace__event_process__memory__dump.cc
new file mode 100644
index 000000000000..6624e1d04af6
--- /dev/null
+++ b/www/iridium/files/patch-base_trace__event_process__memory__dump.cc
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.cc.orig 2019-03-11 22:00:51 UTC
++++ base/trace_event/process_memory_dump.cc
+@@ -94,7 +94,7 @@ size_t ProcessMemoryDump::CountResidentBytes(void* sta
+ #if defined(OS_WIN)
+ std::unique_ptr<PSAPI_WORKING_SET_EX_INFORMATION[]> vec(
+ new PSAPI_WORKING_SET_EX_INFORMATION[max_vec_size]);
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<char[]> vec(new char[max_vec_size]);
+ #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+ std::unique_ptr<unsigned char[]> vec(new unsigned char[max_vec_size]);
diff --git a/www/iridium/files/patch-base_trace__event_process__memory__dump.h b/www/iridium/files/patch-base_trace__event_process__memory__dump.h
new file mode 100644
index 000000000000..1ae1b93e6409
--- /dev/null
+++ b/www/iridium/files/patch-base_trace__event_process__memory__dump.h
@@ -0,0 +1,11 @@
+--- base/trace_event/process_memory_dump.h.orig 2019-03-11 22:00:51 UTC
++++ base/trace_event/process_memory_dump.h
+@@ -22,7 +22,7 @@
+
+ // Define COUNT_RESIDENT_BYTES_SUPPORTED if platform supports counting of the
+ // resident memory.
+-#if !defined(OS_NACL)
++#if !defined(OS_NACL) && !defined(OS_BSD)
+ #define COUNT_RESIDENT_BYTES_SUPPORTED
+ #endif
+
diff --git a/www/iridium/files/patch-build_config_BUILD.gn b/www/iridium/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..5eadb70887bf
--- /dev/null
+++ b/www/iridium/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig 2020-03-16 18:40:27 UTC
++++ build/config/BUILD.gn
+@@ -133,7 +133,7 @@ config("debug") {
+ # builds, and we have to tell it to turn it off.
+ defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+ }
+- } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
++ } else if ((is_linux || is_bsd) && current_cpu == "x64" && enable_iterator_debugging) {
+ # Enable libstdc++ debugging facilities to help catch problems early, see
+ # http://crbug.com/65151 .
+ # TODO(phajdan.jr): Should we enable this for all of POSIX?
+@@ -231,9 +231,7 @@ config("default_libs") {
+ ]
+ } else if (is_linux) {
+ libs = [
+- "dl",
+ "pthread",
+- "rt",
+ ]
+ }
+ }
+@@ -315,7 +313,7 @@ config("executable_config") {
+ "//build/config/ios:ios_dynamic_flags",
+ "//build/config/ios:ios_executable_flags",
+ ]
+- } else if (is_linux || is_android || current_os == "aix") {
++ } else if (is_linux || is_bsd || is_android || current_os == "aix") {
+ configs += [ "//build/config/gcc:executable_config" ]
+ if (is_chromecast) {
+ configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/www/iridium/files/patch-build_config_BUILDCONFIG.gn b/www/iridium/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..7c6d307fbd22
--- /dev/null
+++ b/www/iridium/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,48 @@
+--- build/config/BUILDCONFIG.gn.orig 2019-06-04 18:55:15 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -131,10 +131,10 @@ declare_args() {
+ is_official_build = false
+
+ # Whether we're a traditional desktop unix.
+- is_desktop_linux = current_os == "linux"
++ is_desktop_linux = current_os == "linux" || current_os == "freebsd"
+
+ # Set to true when compiling with the Clang compiler.
+- is_clang = current_os != "linux" ||
++ is_clang = current_os != "linux" || current_os == "freebsd" ||
+ (current_cpu != "s390x" && current_cpu != "s390" &&
+ current_cpu != "ppc64" && current_cpu != "ppc" &&
+ current_cpu != "mips" && current_cpu != "mips64")
+@@ -186,8 +186,8 @@ if (host_toolchain == "") {
+ # TODO(dpranke): Add some sort of assert here that verifies that
+ # no toolchain omitted host_toolchain from its toolchain_args().
+
+- if (host_os == "linux") {
+- if (target_os != "linux") {
++ if (host_os == "linux" || host_os == "freebsd") {
++ if (target_os != "linux" && target_os != "freebsd") {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+ } else if (is_clang) {
+ host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -224,7 +224,7 @@ if (target_os == "android") {
+ assert(host_os == "linux" || host_os == "mac",
+ "Android builds are only supported on Linux and Mac hosts.")
+ _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+ # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+ if (is_clang) {
+ _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -288,10 +288,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "chromeos" || current_os == "linux"
++is_linux = current_os == "chromeos" || current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+
+ is_posix = !is_win && !is_fuchsia
+
diff --git a/www/iridium/files/patch-build_config_compiler_BUILD.gn b/www/iridium/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..76e9706a7967
--- /dev/null
+++ b/www/iridium/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,92 @@
+--- build/config/compiler/BUILD.gn.orig 2020-03-16 18:40:27 UTC
++++ build/config/compiler/BUILD.gn
+@@ -137,7 +137,7 @@ declare_args() {
+ # TODO(vitalybuka):
+ # 'is_android' breaks content_shell_test_apk on android-kitkat-arm-rel.
+ # 'use_xcode_clang' may call old clang.
+- init_stack_vars = !is_android && !use_xcode_clang && !is_official_build
++ init_stack_vars = !is_android && !use_xcode_clang && !is_official_build && !is_bsd
+ }
+
+ declare_args() {
+@@ -298,7 +298,7 @@ config("compiler") {
+
+ # Linker warnings.
+ if (fatal_linker_warnings && !(is_chromeos && current_cpu == "arm") &&
+- !is_mac && !is_ios && current_os != "aix") {
++ !is_mac && !is_ios && current_os != "aix" && !is_bsd) {
+ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580
+ ldflags += [ "-Wl,--fatal-warnings" ]
+ }
+@@ -393,7 +393,7 @@ config("compiler") {
+
+ # Compiler instrumentation can introduce dependencies in DSOs to symbols in
+ # the executable they are loaded into, so they are unresolved at link-time.
+- if (!using_sanitizer) {
++ if (!using_sanitizer && !is_bsd) {
+ ldflags += [
+ "-Wl,-z,defs",
+ "-Wl,--as-needed",
+@@ -486,7 +486,7 @@ config("compiler") {
+ }
+ }
+
+- if (is_clang && !is_nacl && !use_xcode_clang) {
++ if (is_clang && !is_nacl && !use_xcode_clang && !is_bsd) {
+ cflags += [ "-fcrash-diagnostics-dir=" +
+ rebase_path("//tools/clang/crashreports", root_build_dir) ]
+
+@@ -767,7 +767,7 @@ config("compiler_cpu_abi") {
+ cflags += [ "-mtune=$arm_tune" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++ if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+ cflags += [ "--target=aarch64-linux-gnu" ]
+ ldflags += [ "--target=aarch64-linux-gnu" ]
+ }
+@@ -1118,7 +1118,7 @@ config("compiler_deterministic") {
+ "-Xclang",
+ ".",
+ ]
+- if (!is_win) {
++ if (!is_win && !is_bsd) {
+ # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+ asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+ }
+@@ -1507,7 +1507,7 @@ config("default_warnings") {
+ cflags += [ "-Wno-nonportable-include-path" ]
+ }
+
+- if (current_toolchain == host_toolchain || !use_xcode_clang) {
++ if ((current_toolchain == host_toolchain || !use_xcode_clang) && !is_bsd) {
+ # Flags NaCl (Clang 3.7) and Xcode 9.2 (Clang clang-900.0.39.2) do not
+ # recognize.
+ cflags += [
+@@ -1741,7 +1741,7 @@ config("thin_archive") {
+ # Mac and iOS use the mac-specific "libtool" command, not ar, which doesn't
+ # have a "thin archive" mode (it does accept -T, but it means truncating
+ # archive names to 16 characters, which is not what we want).
+- if ((is_posix && !is_nacl && !is_mac && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_nacl && !is_mac && !is_ios && !is_bsd) || is_fuchsia) {
+ arflags = [ "-T" ]
+ } else if (is_win && use_lld) {
+ arflags = [ "/llvmlibthin" ]
+@@ -2334,7 +2334,7 @@ config("symbols") {
+ # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+ # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+ if (!is_nacl || is_clang) {
+- cflags += [ "-g2" ]
++ cflags += [ "-g0" ]
+ }
+
+ if (use_debug_fission && !is_nacl && !is_android) {
+@@ -2355,7 +2355,7 @@ config("symbols") {
+ # DWARF info may be corrupt; offsets in a range list entry are in different
+ # sections" there. Maybe just a bug in nacl_switch_32.S.
+ if (!is_mac && !is_ios && !is_nacl && current_cpu != "x86" &&
+- (use_gold || use_lld)) {
++ (use_gold || use_lld) && !is_bsd) {
+ if (is_clang) {
+ # This flag enables the GNU-format pubnames and pubtypes sections,
+ # which lld needs in order to generate a correct GDB index.
diff --git a/www/iridium/files/patch-build_config_compiler_compiler.gni b/www/iridium/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..5826499ed89a
--- /dev/null
+++ b/www/iridium/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,20 @@
+--- build/config/compiler/compiler.gni.orig 2020-03-16 18:40:27 UTC
++++ build/config/compiler/compiler.gni
+@@ -47,7 +47,7 @@ declare_args() {
+ # only two architectures that are currently checked in). Turn this off when
+ # you are using a custom toolchain and need to control -B in cflags.
+ linux_use_bundled_binutils =
+- linux_use_bundled_binutils_override && is_linux &&
++ linux_use_bundled_binutils_override && (is_linux && !is_bsd) &&
+ (current_cpu == "x64" || current_cpu == "x86")
+ binutils_path = rebase_path("//third_party/binutils/Linux_x64/Release/bin",
+ root_build_dir)
+@@ -200,7 +200,7 @@ declare_args() {
+ declare_args() {
+ # Whether to use the gold linker from binutils instead of lld or bfd.
+ use_gold =
+- !use_lld && !(is_chromecast && is_linux &&
++ !is_bsd && !use_lld && !(is_chromecast && is_linux &&
+ (current_cpu == "arm" || current_cpu == "mipsel")) &&
+ ((is_linux && (current_cpu == "x64" || current_cpu == "x86" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
diff --git a/www/iridium/files/patch-build_config_features.gni b/www/iridium/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..c98a61186fa9
--- /dev/null
+++ b/www/iridium/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig 2019-10-21 19:06:18 UTC
++++ build/config/features.gni
+@@ -26,7 +26,7 @@ declare_args() {
+ proprietary_codecs = is_chrome_branded || is_chromecast
+
+ # libudev usage. This currently only affects the content layer.
+- use_udev = is_linux && !is_chromecast
++ use_udev = is_linux && !is_chromecast && !is_bsd
+
+ use_dbus = is_linux && !is_chromecast
+
diff --git a/www/iridium/files/patch-build_config_freetype_freetype.gni b/www/iridium/files/patch-build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..17bed01510f8
--- /dev/null
+++ b/www/iridium/files/patch-build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- build/config/freetype/freetype.gni.orig 2019-03-18 08:59:45 UTC
++++ build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+ # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+ # System FreeType configurations other than as described WILL INTRODUCE TEXT
+ # RENDERING AND SECURITY REGRESSIONS.
+- use_system_freetype = false
++ use_system_freetype = true
+ }
diff --git a/www/iridium/files/patch-build_config_linux_BUILD.gn b/www/iridium/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..94faef049b08
--- /dev/null
+++ b/www/iridium/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig 2019-03-11 22:00:52 UTC
++++ build/config/linux/BUILD.gn
+@@ -28,7 +28,7 @@ config("runtime_library") {
+ }
+
+ if ((!is_chromeos || default_toolchain != "//build/toolchain/cros:target") &&
+- (!use_custom_libcxx || current_cpu == "mipsel")) {
++ (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+ libs = [ "atomic" ]
+ }
+ }
diff --git a/www/iridium/files/patch-build_config_linux_pkg-config.py b/www/iridium/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..8a2865a024c0
--- /dev/null
+++ b/www/iridium/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig 2019-07-24 18:58:02 UTC
++++ build/config/linux/pkg-config.py
+@@ -59,8 +59,12 @@ def SetConfigPath(options):
+ print("You must specify an architecture via -a if using a sysroot.")
+ sys.exit(1)
+
+- libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+- libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ if "linux" in sys.platform:
++ libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++ libdir += ':' + sysroot + '/usr/share/pkgconfig'
++ elif "bsd" in sys.platform:
++ libdir = sysroot + '/libdata/pkgconfig'
++ libdir += ':' + '/usr/libdata/pkgconfig'
+ os.environ['PKG_CONFIG_LIBDIR'] = libdir
+ return libdir
+
+@@ -109,7 +113,7 @@ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "bsd" not in sys.platform:
+ print("[[],[],[],[],[]]")
+ return 0
+
diff --git a/www/iridium/files/patch-build_config_sysroot.gni b/www/iridium/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..83a58cad544a
--- /dev/null
+++ b/www/iridium/files/patch-build_config_sysroot.gni
@@ -0,0 +1,15 @@
+--- build/config/sysroot.gni.orig 2019-03-11 22:00:52 UTC
++++ build/config/sysroot.gni
+@@ -15,9 +15,10 @@ declare_args() {
+ # The absolute path to directory containing linux sysroot images
+ target_sysroot_dir = "//build/linux"
+
+- use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++ use_sysroot = !is_bsd && (
++ current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+- current_cpu == "mipsel" || current_cpu == "mips64el"
++ current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+
+ if (current_os == target_os && current_cpu == target_cpu &&
diff --git a/www/iridium/files/patch-build_detect__host__arch.py b/www/iridium/files/patch-build_detect__host__arch.py
new file mode 100644
index 000000000000..588896662607
--- /dev/null
+++ b/www/iridium/files/patch-build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- build/detect_host_arch.py.orig 2019-07-24 18:58:02 UTC
++++ build/detect_host_arch.py
+@@ -21,6 +21,8 @@ def HostArch():
+ host_arch = 'ia32'
+ elif host_arch in ['x86_64', 'amd64']:
+ host_arch = 'x64'
++ elif host_arch.startswith('arm64'):
++ host_arch = 'arm64'
+ elif host_arch.startswith('arm'):
+ host_arch = 'arm'
+ elif host_arch.startswith('aarch64'):
diff --git a/www/iridium/files/patch-build_gn__run__binary.py b/www/iridium/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..d9e733834b4a
--- /dev/null
+++ b/www/iridium/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig 2019-07-24 18:58:02 UTC
++++ build/gn_run_binary.py
+@@ -24,7 +24,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+ if ret <= -100:
+ # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/www/iridium/files/patch-build_linux_chrome.map b/www/iridium/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..7465bc9773c5
--- /dev/null
+++ b/www/iridium/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig 2019-03-11 22:00:52 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++ *;
++
+ global:
+ __bss_start;
+ __data_start;
+@@ -20,6 +23,10 @@ global:
+ # Program entry point.
+ _start;
+
++ # FreeBSD specific variables.
++ __progname;
++ environ;
++
+ # Memory allocation symbols. We want chrome and any libraries to
+ # share the same heap, so it is correct to export these symbols.
+ calloc;
+@@ -81,7 +88,4 @@ global:
+ localtime64;
+ localtime64_r;
+ localtime_r;
+-
+-local:
+- *;
+ };
diff --git a/www/iridium/files/patch-build_linux_libpci_BUILD.gn b/www/iridium/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..86373b5ebf39
--- /dev/null
+++ b/www/iridium/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig 2019-03-11 22:00:52 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+- name = "LibPciLoader"
+- output_h = "libpci.h"
+- output_cc = "libpci_loader.cc"
+- header = "<pci/pci.h>"
++declare_args() {
++ use_system_libpci = is_bsd
++}
+
+- functions = [
+- "pci_alloc",
+- "pci_init",
+- "pci_cleanup",
+- "pci_scan_bus",
+- "pci_fill_info",
+- "pci_lookup_name",
+- ]
++if (use_system_libpci) {
++ pkg_config("system_libpci") {
++ packages = [ "libpci" ]
++ }
++
++ source_set("libpci") {
++ public_configs = [ ":system_libpci" ]
++ }
++
++} else {
++ # This generates a target named "libpci".
++ generate_library_loader("libpci") {
++ name = "LibPciLoader"
++ output_h = "libpci.h"
++ output_cc = "libpci_loader.cc"
++ header = "<pci/pci.h>"
++
++ functions = [
++ "pci_alloc",
++ "pci_init",
++ "pci_cleanup",
++ "pci_scan_bus",
++ "pci_fill_info",
++ "pci_lookup_name",
++ ]
++ }
+ }
diff --git a/www/iridium/files/patch-build_linux_unbundle_libusb.gn b/www/iridium/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..1cc0b00012c6
--- /dev/null
+++ b/www/iridium/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig 2019-03-17 01:47:13 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++ packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++ root_path = "src/libusb"
++ headers = [
++ "libusb.h",
++ ]
++}
++
++source_set("libusb") {
++ deps = [
++ ":libusb_shim",
++ ]
++ public_configs = [ ":system_libusb" ]
++}
diff --git a/www/iridium/files/patch-build_linux_unbundle_replace__gn__files.py b/www/iridium/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..ca2d4fd5e12e
--- /dev/null
+++ b/www/iridium/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig 2019-03-11 22:00:52 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+ 'libevent': 'base/third_party/libevent/BUILD.gn',
+ 'libjpeg': 'third_party/libjpeg.gni',
+ 'libpng': 'third_party/libpng/BUILD.gn',
++ 'libusb': 'third_party/libusb/BUILD.gn',
+ 'libvpx': 'third_party/libvpx/BUILD.gn',
+ 'libwebp': 'third_party/libwebp/BUILD.gn',
+ 'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/www/iridium/files/patch-build_toolchain_gcc__toolchain.gni b/www/iridium/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..4d315485b923
--- /dev/null
+++ b/www/iridium/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig 2020-03-16 18:40:27 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -36,6 +36,11 @@ if (is_linux && target_os == "android") {
+ enable_resource_whitelist_generation = false
+ }
+
++declare_args() {
++ extra_cxxflags = ""
++ extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -577,13 +582,23 @@ template("clang_toolchain") {
+ }
+
+ gcc_toolchain(target_name) {
+- prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+- cc = "$prefix/clang"
+- cxx = "$prefix/clang++"
+- ld = cxx
+- readelf = "${toolprefix}readelf"
+- ar = "${prefix}/llvm-ar"
+- nm = "${toolprefix}nm"
++ if (is_bsd) {
++ prefix = "/usr/local/bin"
++ cc = "cc"
++ cxx = "c++"
++ ld = cxx
++ readelf = "readelf"
++ ar = "${prefix}/ar"
++ nm = "${toolprefix}nm"
++ } else {
++ prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++ cc = "$prefix/clang"
++ cxx = "$prefix/clang++"
++ ld = cxx
++ readelf = "${toolprefix}readelf"
++ ar = "${prefix}/llvm-ar"
++ nm = "${toolprefix}nm"
++ }
+
+ forward_variables_from(invoker,
+ [
diff --git a/www/iridium/files/patch-build_toolchain_get__concurrent__links.py b/www/iridium/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..45bc3d0a520e
--- /dev/null
+++ b/www/iridium/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig 2019-06-04 18:55:15 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -48,6 +48,14 @@ def _GetTotalMemoryInBytes():
+ return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+ except Exception:
+ return 0
++ elif sys.platform.startswith('freebsd'):
++ try:
++ avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++ # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++ # 1 * ... to needed amount
++ return max(1, avail_bytes / (1 * (2 ** 30))) # total / 4GB
++ except Exception:
++ return 1
+ # TODO(scottmg): Implement this for other platforms.
+ return 0
+
diff --git a/www/iridium/files/patch-build_toolchain_linux_BUILD.gn b/www/iridium/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..29b9160f7b07
--- /dev/null
+++ b/www/iridium/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig 2019-04-30 22:22:28 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -22,7 +22,6 @@ clang_toolchain("clang_arm") {
+ }
+
+ clang_toolchain("clang_arm64") {
+- toolprefix = "aarch64-linux-gnu-"
+ toolchain_args = {
+ current_cpu = "arm64"
+ current_os = "linux"
diff --git a/www/iridium/files/patch-cc_BUILD.gn b/www/iridium/files/patch-cc_BUILD.gn
new file mode 100644
index 000000000000..f2e64c64d738
--- /dev/null
+++ b/www/iridium/files/patch-cc_BUILD.gn
@@ -0,0 +1,19 @@
+--- cc/BUILD.gn.orig 2020-03-16 18:40:27 UTC
++++ cc/BUILD.gn
+@@ -582,7 +582,7 @@ cc_test_static_library("test_support") {
+ if (enable_vulkan) {
+ deps += [ "//gpu/vulkan/init" ]
+ }
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ data_deps = [ "//third_party/mesa_headers" ]
+ }
+ }
+@@ -788,7 +788,6 @@ cc_test("cc_unittests") {
+ ]
+ data_deps = [
+ "//testing/buildbot/filters:cc_unittests_filters",
+- "//third_party/mesa_headers",
+ ]
+
+ if (enable_vulkan) {
diff --git a/www/iridium/files/patch-cc_layers_scrollbar__layer__impl__base.cc b/www/iridium/files/patch-cc_layers_scrollbar__layer__impl__base.cc
new file mode 100644
index 000000000000..b412aea9e22b
--- /dev/null
+++ b/www/iridium/files/patch-cc_layers_scrollbar__layer__impl__base.cc
@@ -0,0 +1,13 @@
+--- cc/layers/scrollbar_layer_impl_base.cc.orig 2019-12-16 21:50:40 UTC
++++ cc/layers/scrollbar_layer_impl_base.cc
+@@ -220,8 +220,8 @@ gfx::Rect ScrollbarLayerImplBase::ComputeThumbQuadRect
+ int thumb_offset = TrackStart();
+ if (maximum > 0) {
+ float ratio = clamped_current_pos / maximum;
+- float max_offset = track_length - thumb_length;
+- thumb_offset += static_cast<int>(ratio * max_offset);
++ float _max_offset = track_length - thumb_length;
++ thumb_offset += static_cast<int>(ratio * _max_offset);
+ }
+
+ float thumb_thickness_adjustment =
diff --git a/www/iridium/files/patch-cc_trees_property__tree.cc b/www/iridium/files/patch-cc_trees_property__tree.cc
new file mode 100644
index 000000000000..d8e7bed84ae0
--- /dev/null
+++ b/www/iridium/files/patch-cc_trees_property__tree.cc
@@ -0,0 +1,20 @@
+--- cc/trees/property_tree.cc.orig 2020-03-16 18:40:27 UTC
++++ cc/trees/property_tree.cc
+@@ -1237,13 +1237,13 @@ gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scro
+
+ gfx::Size clip_layer_bounds = container_bounds(scroll_node->id);
+
+- gfx::ScrollOffset max_offset(
++ gfx::ScrollOffset _max_offset(
+ scaled_scroll_bounds.width() - clip_layer_bounds.width(),
+ scaled_scroll_bounds.height() - clip_layer_bounds.height());
+
+- max_offset.Scale(1 / scale_factor);
+- max_offset.SetToMax(gfx::ScrollOffset());
+- return max_offset;
++ _max_offset.Scale(1 / scale_factor);
++ _max_offset.SetToMax(gfx::ScrollOffset());
++ return _max_offset;
+ }
+
+ gfx::SizeF ScrollTree::scroll_bounds(int scroll_node_id) const {
diff --git a/www/iridium/files/patch-chrome_app_chrome__command__ids.h b/www/iridium/files/patch-chrome_app_chrome__command__ids.h
new file mode 100644
index 000000000000..983a9acf8891
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_chrome__command__ids.h
@@ -0,0 +1,11 @@
+--- chrome/app/chrome_command_ids.h.orig 2020-02-03 21:53:28 UTC
++++ chrome/app/chrome_command_ids.h
+@@ -62,7 +62,7 @@
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_2 34049
+ #define IDC_VISIT_DESKTOP_OF_LRU_USER_3 34050
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #define IDC_USE_SYSTEM_TITLE_BAR 34051
+ #define IDC_RESTORE_WINDOW 34052
+ #endif
diff --git a/www/iridium/files/patch-chrome_app_chrome__main.cc b/www/iridium/files/patch-chrome_app_chrome__main.cc
new file mode 100644
index 000000000000..28a06a8d2f72
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_chrome__main.cc
@@ -0,0 +1,16 @@
+--- chrome/app/chrome_main.cc.orig 2020-04-10 00:39:09 UTC
++++ chrome/app/chrome_main.cc
+@@ -118,11 +118,11 @@ int ChromeMain(int argc, const char** argv) {
+ MainThreadStackSamplingProfiler scoped_sampling_profiler;
+
+ // Chrome-specific process modes.
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ if (command_line->HasSwitch(switches::kHeadless)) {
+ return headless::HeadlessShellMain(params);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if !defined(CHROME_MULTIPLE_DLL_CHILD)
+ net::trace_urlreq_cb = &trace_url_request;
diff --git a/www/iridium/files/patch-chrome_app_chrome__main__delegate.cc b/www/iridium/files/patch-chrome_app_chrome__main__delegate.cc
new file mode 100644
index 000000000000..88a9416974a2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_chrome__main__delegate.cc
@@ -0,0 +1,159 @@
+--- chrome/app/chrome_main_delegate.cc.orig 2020-03-16 18:40:27 UTC
++++ chrome/app/chrome_main_delegate.cc
+@@ -100,7 +100,7 @@
+ #include "chrome/app/shutdown_signal_handlers_posix.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ #include "components/nacl/common/nacl_paths.h"
+ #include "components/nacl/zygote/nacl_fork_delegate_linux.h"
+ #endif
+@@ -142,12 +142,12 @@
+ #include "v8/include/v8.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #endif
+
+ #if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_ANDROID) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/policy/policy_path_parser.h"
+ #include "components/crash/content/app/crashpad.h"
+ #endif
+@@ -246,7 +246,7 @@ bool UseHooks() {
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ void AdjustLinuxOOMScore(const std::string& process_type) {
+ // Browsers and zygotes should still be killable, but killed last.
+ const int kZygoteScore = 0;
+@@ -305,13 +305,13 @@ void AdjustLinuxOOMScore(const std::string& process_ty
+ if (score > -1)
+ base::AdjustOOMScore(base::GetCurrentProcId(), score);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ // Returns true if this subprocess type needs the ResourceBundle initialized
+ // and resources loaded.
+ bool SubprocessNeedsResourceBundle(const std::string& process_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The zygote process opens the resources for the renderers.
+ process_type == service_manager::switches::kZygoteProcess ||
+ #endif
+@@ -350,7 +350,7 @@ bool HandleVersionSwitches(const base::CommandLine& co
+ return false;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Show the man page if --help or -h is on the command line.
+ void HandleHelpSwitches(const base::CommandLine& command_line) {
+ if (command_line.HasSwitch(switches::kHelp) ||
+@@ -360,7 +360,7 @@ void HandleHelpSwitches(const base::CommandLine& comma
+ PLOG(FATAL) << "execlp failed";
+ }
+ }
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ void SIGTERMProfilingShutdown(int signal) {
+@@ -414,7 +414,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ std::string process_type =
+ command_line->GetSwitchValueASCII(switches::kProcessType);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, Chrome does not support running multiple copies under different
+ // DISPLAYs, so the profile directory can be specified in the environment to
+ // support the virtual desktop use-case.
+@@ -426,7 +426,7 @@ void InitializeUserDataDir(base::CommandLine* command_
+ user_data_dir = base::FilePath::FromUTF8Unsafe(user_data_dir_string);
+ }
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_MACOSX)
+ policy::path_parser::CheckUserDataDirPolicy(&user_data_dir);
+ #endif // OS_MAC
+@@ -483,7 +483,7 @@ void InitLogging(const std::string& process_type) {
+ void RecordMainStartupMetrics(base::TimeTicks exe_entry_point_ticks) {
+ if (!exe_entry_point_ticks.is_null())
+ startup_metric_utils::RecordExeMainEntryPointTicks(exe_entry_point_ticks);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Record the startup process creation time on supported platforms.
+ startup_metric_utils::RecordStartupProcessCreationTime(
+ base::Process::Current().CreationTime());
+@@ -688,7 +688,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ *exit_code = 0;
+ return true; // Got a --version switch; exit with a success error code.
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This will directly exit if the user asked for help.
+ HandleHelpSwitches(command_line);
+ #endif
+@@ -712,7 +712,7 @@ bool ChromeMainDelegate::BasicStartupComplete(int* exi
+ #if defined(OS_CHROMEOS)
+ chromeos::RegisterPathProvider();
+ #endif
+-#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_NACL) && defined(OS_LINUX) && !defined(OS_BSD)
+ nacl::RegisterPathProvider();
+ #endif
+
+@@ -904,7 +904,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ #if defined(OS_WIN)
+ child_process_logging::Init();
+ #endif
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
+@@ -1028,7 +1028,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ InitializePDF();
+ #endif
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Zygote needs to call InitCrashReporter() in RunZygote().
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ #if defined(OS_ANDROID)
+@@ -1049,7 +1049,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ }
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // After all the platform Breakpads have been initialized, store the command
+ // line for crash reporting.
+@@ -1059,7 +1059,7 @@ void ChromeMainDelegate::PreSandboxStartup() {
+ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
+ // Note: If you are adding a new process type below, be sure to adjust the
+ // AdjustLinuxOOMScore function too.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ AdjustLinuxOOMScore(process_type);
+ #endif
+ #if defined(OS_WIN)
+@@ -1105,7 +1105,7 @@ int ChromeMainDelegate::RunProcess(
+ // This entry is not needed on Linux, where the NaCl loader
+ // process is launched via nacl_helper instead.
+ #if BUILDFLAG(ENABLE_NACL) && !defined(CHROME_MULTIPLE_DLL_BROWSER) && \
+- !defined(OS_LINUX)
++ !defined(OS_LINUX) && !defined(OS_BSD)
+ {switches::kNaClLoaderProcess, NaClMain},
+ #else
+ {"<invalid>", NULL}, // To avoid constant array of size 0
diff --git a/www/iridium/files/patch-chrome_app_chromium__strings.grd b/www/iridium/files/patch-chrome_app_chromium__strings.grd
new file mode 100644
index 000000000000..f2fafb3fc1d4
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_chromium__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/chromium_strings.grd.orig 2020-04-10 00:39:12 UTC
++++ chrome/app/chromium_strings.grd
+@@ -649,7 +649,7 @@ The browser is unable to recover your settings.
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured the browser to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -750,7 +750,7 @@ The browser is unable to recover your settings.
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another browsr process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). The browser has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch the browser.
+ </message>
+@@ -964,7 +964,7 @@ The browser is unable to recover your settings.
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart the browser to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/www/iridium/files/patch-chrome_app_generated__resources.grd b/www/iridium/files/patch-chrome_app_generated__resources.grd
new file mode 100644
index 000000000000..fcae380a37c1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_generated__resources.grd
@@ -0,0 +1,29 @@
+--- chrome/app/generated_resources.grd.orig 2020-03-16 18:40:27 UTC
++++ chrome/app/generated_resources.grd
+@@ -5141,7 +5141,7 @@ Keep your key file in a safe place. You will need it t
+ </if>
+
+ <!-- chrome://browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_TITLE" desc="about:browser-switch page title">
+ Legacy Browser Support
+ </message>
+@@ -6861,7 +6861,7 @@ the Bookmarks menu.">
+ Google Pay
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+ Use system title bar and borders
+ </message>
+@@ -7822,7 +7822,7 @@ Please help our engineers fix this problem. Tell us wh
+ Set as default
+ </message>
+
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_MINIMIZE_WINDOW_MENU" desc="The Linux browser window menu item text for minimizing the window.">
+ Minimize
+ </message>
diff --git a/www/iridium/files/patch-chrome_app_google__chrome__strings.grd b/www/iridium/files/patch-chrome_app_google__chrome__strings.grd
new file mode 100644
index 000000000000..47ad7a871540
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_google__chrome__strings.grd
@@ -0,0 +1,29 @@
+--- chrome/app/google_chrome_strings.grd.orig 2020-03-16 18:40:27 UTC
++++ chrome/app/google_chrome_strings.grd
+@@ -661,7 +661,7 @@ Google Chrome is unable to recover your settings.
+ </if>
+
+ <!-- about:browser-switch strings -->
+- <if expr="is_win or is_macosx or (is_linux and not chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not chromeos)">
+ <message name="IDS_ABOUT_BROWSER_SWITCH_DESCRIPTION_UNKNOWN_BROWSER" desc="Description shown while waiting for an alternative browser to open, when the browser name is not auto-detected">
+ Your system administrator has configured Google Chrome to open an alternative browser to access <ph name="TARGET_URL_HOSTNAME">$1<ex>example.com</ex></ph>.
+ </message>
+@@ -762,7 +762,7 @@ Google Chrome is unable to recover your settings.
+ </message>
+
+ <!-- ProcessSingleton -->
+- <if expr="is_linux or is_macosx">
++ <if expr="is_linux or is_macosx or is_posix">
+ <message name="IDS_PROFILE_IN_USE_POSIX" desc="Message shown when the browser cannot start because the profile is in use on a different host.">
+ The profile appears to be in use by another Google Chrome process (<ph name="PROCESS_ID">$1<ex>12345</ex></ph>) on another computer (<ph name="HOST_NAME">$2<ex>example.com</ex></ph>). Chrome has locked the profile so that it doesn't get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chrome.
+ </message>
+@@ -991,7 +991,7 @@ Google Chrome is unable to recover your settings.
+ </message>
+
+ <!-- Plugin Placeholders -->
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_PLUGIN_RESTART_REQUIRED" desc="The placeholder text for a plugin that can't be loaded until the browser is restarted.">
+ Restart Chrome to enable <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>
+ </message>
diff --git a/www/iridium/files/patch-chrome_app_settings__strings.grdp b/www/iridium/files/patch-chrome_app_settings__strings.grdp
new file mode 100644
index 000000000000..18bd3350bdf8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_settings__strings.grdp
@@ -0,0 +1,20 @@
+--- chrome/app/settings_strings.grdp.orig 2020-03-16 18:40:29 UTC
++++ chrome/app/settings_strings.grdp
+@@ -811,7 +811,7 @@
+ Themes
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SETTINGS_SYSTEM_THEME" desc="Text of the label describing the system (GTK+) browser theme on Linux">
+ GTK+
+ </message>
+@@ -825,7 +825,7 @@
+ Use Classic
+ </message>
+ </if>
+- <if expr="not is_linux or chromeos">
++ <if expr="not is_posix or chromeos">
+ <message name="IDS_SETTINGS_RESET_TO_DEFAULT_THEME" desc="Name of the control which resets the browser theme back to the default theme.">
+ Reset to default
+ </message>
diff --git a/www/iridium/files/patch-chrome_app_shutdown__signal__handlers__posix.cc b/www/iridium/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
new file mode 100644
index 000000000000..3678715840b5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_shutdown__signal__handlers__posix.cc
@@ -0,0 +1,21 @@
+--- chrome/app/shutdown_signal_handlers_posix.cc.orig 2019-04-30 22:22:32 UTC
++++ chrome/app/shutdown_signal_handlers_posix.cc
+@@ -186,12 +186,18 @@ void InstallShutdownSignalHandlers(
+ g_pipe_pid = getpid();
+ g_shutdown_pipe_read_fd = pipefd[0];
+ g_shutdown_pipe_write_fd = pipefd[1];
++#if defined(OS_BSD)
++ // PTHREAD_STACK_MIN causes chromium to crash under FreeBSD,
++ // we request the default pthread stack size by specifying 0 here.
++ const size_t kShutdownDetectorThreadStackSize = 0;
++#else
+ #if !defined(ADDRESS_SANITIZER)
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
+ #else
+ // ASan instrumentation bloats the stack frames, so we need to increase the
+ // stack size to avoid hitting the guard page.
+ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
++#endif
+ #endif
+ ShutdownDetector* detector = new ShutdownDetector(
+ g_shutdown_pipe_read_fd, std::move(shutdown_callback), task_runner);
diff --git a/www/iridium/files/patch-chrome_app_theme_chrome__unscaled__resources.grd b/www/iridium/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
new file mode 100644
index 000000000000..34bf723d2edc
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_theme_chrome__unscaled__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/app/theme/chrome_unscaled_resources.grd.orig 2020-02-03 21:53:28 UTC
++++ chrome/app/theme/chrome_unscaled_resources.grd
+@@ -18,7 +18,7 @@
+ <include name="IDR_PRODUCT_LOGO_64" file="google_chrome/product_logo_64.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128" file="google_chrome/product_logo_128.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_256" file="google_chrome/product_logo_256.png" type="BINDATA" />
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <include name="IDR_PRODUCT_LOGO_128_BETA" file="google_chrome/product_logo_128_beta.png" type="BINDATA" />
+ <include name="IDR_PRODUCT_LOGO_128_DEV" file="google_chrome/product_logo_128_dev.png" type="BINDATA" />
+ </if>
diff --git a/www/iridium/files/patch-chrome_app_theme_theme__resources.grd b/www/iridium/files/patch-chrome_app_theme_theme__resources.grd
new file mode 100644
index 000000000000..a6e63ac69942
--- /dev/null
+++ b/www/iridium/files/patch-chrome_app_theme_theme__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/app/theme/theme_resources.grd.orig 2019-10-30 15:46:23 UTC
++++ chrome/app/theme/theme_resources.grd
+@@ -25,7 +25,7 @@
+ <!-- KEEP THESE IN ALPHABETICAL ORDER! DO NOT ADD TO RANDOM PLACES JUST
+ BECAUSE YOUR RESOURCES ARE FUNCTIONALLY RELATED OR FALL UNDER THE
+ SAME CONDITIONALS. -->
+- <if expr="is_linux or is_win or chromeos">
++ <if expr="is_posix or is_win or chromeos">
+ <structure type="chrome_scaled_image" name="IDR_ACCESSIBILITY_CAPTIONS_PREVIEW_BACKGROUND" file="common/captions-preview-bg.png" />
+ </if>
+ <if expr="toolkit_views and not is_macosx">
diff --git a/www/iridium/files/patch-chrome_browser_about__flags.cc b/www/iridium/files/patch-chrome_browser_about__flags.cc
new file mode 100644
index 000000000000..aec113703d20
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_about__flags.cc
@@ -0,0 +1,205 @@
+--- chrome/browser/about_flags.cc.orig 2020-04-03 04:11:28 UTC
++++ chrome/browser/about_flags.cc
+@@ -170,7 +170,7 @@
+ #include "ui/gl/gl_switches.h"
+ #include "ui/native_theme/native_theme_features.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/allocator/buildflags.h"
+ #endif
+
+@@ -834,7 +834,7 @@ const FeatureEntry::Choice kMemlogSamplingRateChoices[
+ heap_profiling::kMemlogSamplingRate5MB},
+ };
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const FeatureEntry::FeatureParam kOmniboxDocumentProviderServerScoring[] = {
+ {"DocumentUseServerScore", "true"},
+ {"DocumentUseClientScore", "false"},
+@@ -872,7 +872,7 @@ const FeatureEntry::FeatureVariation kOmniboxDocumentP
+ base::size(kOmniboxDocumentProviderClientScoring), nullptr},
+ {"server and client scores", kOmniboxDocumentProviderServerAndClientScoring,
+ base::size(kOmniboxDocumentProviderServerAndClientScoring), nullptr}};
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ const FeatureEntry::FeatureParam kOmniboxOnFocusSuggestionsParamSERP[] = {
+ {"ZeroSuggestVariant:6:*", "RemoteSendUrl"}};
+@@ -994,14 +994,14 @@ const FeatureEntry::FeatureVariation kOmniboxMaxURLMat
+ {"6 matches", kOmniboxMaxURLMatches6, base::size(kOmniboxMaxURLMatches6),
+ nullptr}};
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const FeatureEntry::FeatureParam kTranslateBubbleUITab[] = {
+ {language::kTranslateUIBubbleKey, language::kTranslateUIBubbleTabValue}};
+
+ const FeatureEntry::FeatureVariation kTranslateBubbleUIVariations[] = {
+ {"Tab", kTranslateBubbleUITab, base::size(kTranslateBubbleUITab), nullptr}};
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS || OS_BSD
+
+ const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = {
+ {security_state::features::kMarkHttpAsFeatureParameterName,
+@@ -2031,13 +2031,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kCloudPrintXpsDescription, kOsWin,
+ SINGLE_VALUE_TYPE(switches::kEnableCloudPrintXps)},
+ #endif // OS_WIN
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl2-compute-context",
+ flag_descriptions::kWebGL2ComputeContextName,
+ flag_descriptions::kWebGL2ComputeContextDescription,
+ kOsWin | kOsLinux | kOsCrOS,
+ SINGLE_VALUE_TYPE(switches::kEnableWebGL2ComputeContext)},
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ {"enable-webgl-draft-extensions",
+ flag_descriptions::kWebglDraftExtensionsName,
+ flag_descriptions::kWebglDraftExtensionsDescription, kOsAll,
+@@ -2074,14 +2074,14 @@ const FeatureEntry kFeatureEntries[] = {
+ "OverrideTranslateTriggerInIndia")},
+ #endif // OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"translate-ui-bubble-options", flag_descriptions::kTranslateBubbleUIName,
+ flag_descriptions::kTranslateBubbleUIDescription, kOsDesktop,
+ FEATURE_WITH_PARAMS_VALUE_TYPE(language::kUseButtonTranslateBubbleUi,
+ kTranslateBubbleUIVariations,
+ "UseButtonTranslateBubbleUI")},
+-#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS
++#endif // OS_LINUX || OS_MACOSX || OS_WIN || OS_CHROMEOS || OS_BSD
+
+ #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
+ {"enable-native-notifications",
+@@ -2159,13 +2159,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kTerminalSystemAppSplitsDescription, kOsCrOS,
+ FEATURE_VALUE_TYPE(features::kTerminalSystemAppSplits)},
+ #endif // OS_CHROMEOS
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ #if BUILDFLAG(USE_TCMALLOC)
+ {"dynamic-tcmalloc-tuning", flag_descriptions::kDynamicTcmallocName,
+ flag_descriptions::kDynamicTcmallocDescription, kOsCrOS | kOsLinux,
+ FEATURE_VALUE_TYPE(performance_manager::features::kDynamicTcmallocTuning)},
+ #endif // BUILDFLAG(USE_TCMALLOC)
+-#endif // OS_CHROMEOS || OS_LINUX
++#endif // OS_CHROMEOS || OS_LINUX || defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ {"enable-credit-card-assist", flag_descriptions::kCreditCardAssistName,
+ flag_descriptions::kCreditCardAssistDescription, kOsAndroid,
+@@ -2239,7 +2239,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kEnableLitePageServerPreviewsDescription, kOsAndroid,
+ FEATURE_VALUE_TYPE(previews::features::kLitePageServerPreviews)},
+ #endif // OS_ANDROID
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ {"enable-save-data", flag_descriptions::kEnableSaveDataName,
+ flag_descriptions::kEnableSaveDataDescription, kOsCrOS,
+ SINGLE_VALUE_TYPE(
+@@ -2907,7 +2907,7 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(
+ omnibox::kHistoryQuickProviderAllowMidwordContinuations)},
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ {"omnibox-experimental-keyword-mode",
+ flag_descriptions::kOmniboxExperimentalKeywordModeName,
+ flag_descriptions::kOmniboxExperimentalKeywordModeDescription, kOsDesktop,
+@@ -2956,7 +2956,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kOmniboxAutocompleteTitlesName,
+ flag_descriptions::kOmniboxAutocompleteTitlesDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(omnibox::kAutocompleteTitles)},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+
+ {"enable-speculative-service-worker-start-on-query-input",
+ flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputName,
+@@ -3182,13 +3182,13 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kClickToOpenPDFDescription, kOsAll,
+ FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"direct-manipulation-stylus",
+ flag_descriptions::kDirectManipulationStylusName,
+ flag_descriptions::kDirectManipulationStylusDescription,
+ kOsWin | kOsMac | kOsLinux,
+ FEATURE_VALUE_TYPE(features::kDirectManipulationStylus)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if !defined(OS_ANDROID)
+ {"ntp-confirm-suggestion-removals",
+@@ -3850,12 +3850,12 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(kClickToCallDetectionV2)},
+ #endif // BUILDFLAG(ENABLE_CLICK_TO_CALL)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"remote-copy-receiver", flag_descriptions::kRemoteCopyReceiverName,
+ flag_descriptions::kRemoteCopyReceiverDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(kRemoteCopyReceiver)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ {"shared-clipboard-receiver",
+@@ -3899,7 +3899,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kSharingUseDeviceInfoDescription, kOsAll,
+ FEATURE_VALUE_TYPE(kSharingUseDeviceInfo)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"sharing-peer-connection-receiver",
+ flag_descriptions::kSharingPeerConnectionReceiverName,
+@@ -3910,7 +3910,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kSharingPeerConnectionSenderName,
+ flag_descriptions::kSharingPeerConnectionSenderDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(kSharingPeerConnectionSender)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ {"sharing-qr-code-generator",
+@@ -3985,13 +3985,13 @@ const FeatureEntry kFeatureEntries[] = {
+ FEATURE_VALUE_TYPE(printing::features::kEnableCustomMacPaperSizes)},
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ {"enable-reopen-tab-in-product-help",
+ flag_descriptions::kReopenTabInProductHelpName,
+ flag_descriptions::kReopenTabInProductHelpDescription, kOsDesktop,
+ FEATURE_VALUE_TYPE(feature_engagement::kIPHReopenTabFeature)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ {"enable-audio-focus-enforcement",
+@@ -4436,7 +4436,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kEnableSyncUSSNigoriDescription, kOsAll,
+ FEATURE_VALUE_TYPE(switches::kSyncUSSNigori)},
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {"global-media-controls", flag_descriptions::kGlobalMediaControlsName,
+ flag_descriptions::kGlobalMediaControlsDescription,
+ kOsWin | kOsMac | kOsLinux,
+@@ -4453,7 +4453,7 @@ const FeatureEntry kFeatureEntries[] = {
+ flag_descriptions::kGlobalMediaControlsPictureInPictureDescription,
+ kOsWin | kOsMac | kOsLinux | kOsCrOS,
+ FEATURE_VALUE_TYPE(media::kGlobalMediaControlsPictureInPicture)},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN)
+ {"win-use-native-spellchecker",
diff --git a/www/iridium/files/patch-chrome_browser_after__startup__task__utils.cc b/www/iridium/files/patch-chrome_browser_after__startup__task__utils.cc
new file mode 100644
index 000000000000..fb5b5d6cd963
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_after__startup__task__utils.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/after_startup_task_utils.cc.orig 2020-03-16 18:39:43 UTC
++++ chrome/browser/after_startup_task_utils.cc
+@@ -33,7 +33,7 @@
+ #include "chrome/browser/ui/tabs/tab_strip_model.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -120,7 +120,7 @@ void QueueTask(std::unique_ptr<AfterStartupTask> queue
+
+ void SetBrowserStartupIsComplete() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Process::Current().CreationTime() is not available on all platforms.
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+@@ -128,7 +128,7 @@ void SetBrowserStartupIsComplete() {
+ UMA_HISTOGRAM_LONG_TIMES("Startup.AfterStartupTaskDelayedUntilTime",
+ base::Time::Now() - process_creation_time);
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("Startup.AfterStartupTaskCount",
+ g_after_startup_tasks.Get().size());
+ g_startup_complete_flag.Get().Set();
+@@ -137,7 +137,7 @@ void SetBrowserStartupIsComplete() {
+ g_after_startup_tasks.Get().clear();
+ g_after_startup_tasks.Get().shrink_to_fit();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make sure we complete the startup notification sequence, or launchers will
+ // get confused by not receiving the expected message from the main process.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/www/iridium/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc b/www/iridium/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
new file mode 100644
index 000000000000..7482f7147a70
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_apps_platform__apps_api_music__manager__private_device__id__linux.cc
@@ -0,0 +1,70 @@
+--- chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc.orig 2019-04-30 22:22:32 UTC
++++ chrome/browser/apps/platform_apps/api/music_manager_private/device_id_linux.cc
+@@ -4,6 +4,11 @@
+
+ #include "chrome/browser/apps/platform_apps/api/music_manager_private/device_id.h"
+
++#if defined(OS_FREEBSD)
++#include <sys/types.h>
++#include <net/if_dl.h>
++#endif
++
+ #include <ifaddrs.h>
+ #include <net/if.h>
+ #include <stddef.h>
+@@ -106,9 +111,36 @@ class MacAddressProcessor {
+ const char* const prefixes[],
+ size_t prefixes_count) {
+ const int MAC_LENGTH = 6;
++#if defined(OS_FREEBSD)
++ struct ifaddrs *ifap, *ifinfo;
++#else
+ struct ifreq ifinfo;
++#endif
+
+ memset(&ifinfo, 0, sizeof(ifinfo));
++
++#if defined(OS_FREEBSD)
++ int result = getifaddrs(&ifap);
++
++ if (result != 0)
++ return true;
++
++ result = 1; // no MAC found yet
++
++ for (ifinfo = ifap; ifinfo != NULL; ifinfo = ifinfo->ifa_next) {
++ struct sockaddr* sa = ifinfo->ifa_addr;
++ if (sa->sa_family == AF_LINK &&
++ !strncmp(ifinfo->ifa_name, ifaddr->ifa_name,
++ sizeof(ifinfo->ifa_name) - 1)) {
++ result = 0;
++ break;
++ }
++ }
++
++ char mac_address[6];
++
++ strncpy(mac_address, (const char*)LLADDR((struct sockaddr_dl*)ifinfo->ifa_addr), sizeof(mac_address));
++#else
+ strncpy(ifinfo.ifr_name, ifaddr->ifa_name, sizeof(ifinfo.ifr_name) - 1);
+
+ int sd = socket(AF_INET, SOCK_DGRAM, 0);
+@@ -120,11 +152,18 @@ class MacAddressProcessor {
+
+ const char* mac_address =
+ static_cast<const char*>(ifinfo.ifr_hwaddr.sa_data);
++#endif
++
+ if (!is_valid_mac_address_.Run(mac_address, MAC_LENGTH))
+ return true;
+
++#if defined(OS_FREEBSD)
++ if (!IsValidPrefix(ifinfo->ifa_name, prefixes, prefixes_count))
++ return true;
++#else
+ if (!IsValidPrefix(ifinfo.ifr_name, prefixes, prefixes_count))
+ return true;
++#endif
+
+ // Got one!
+ found_mac_address_ =
diff --git a/www/iridium/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc b/www/iridium/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
new file mode 100644
index 000000000000..6c2491941fb1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_autocomplete_chrome__autocomplete__scheme__classifier.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.orig 2020-04-10 00:39:09 UTC
++++ chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+@@ -60,12 +60,12 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForSch
+ return metrics::OmniboxInputType::QUERY;
+
+ case ExternalProtocolHandler::UNKNOWN: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Linux impl of GetApplicationNameForProtocol doesn't distinguish
+ // between URL schemes with handers and those without. This will
+ // make the default behaviour be search on Linux.
+ return metrics::OmniboxInputType::EMPTY;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // If block state is unknown, check if there is an application registered
+ // for the url scheme.
+ GURL url(scheme + "://");
diff --git a/www/iridium/files/patch-chrome_browser_background_background__mode__manager.cc b/www/iridium/files/patch-chrome_browser_background_background__mode__manager.cc
new file mode 100644
index 000000000000..3aa2fe1a3c84
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_background_background__mode__manager.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/background/background_mode_manager.cc.orig 2020-02-03 21:52:39 UTC
++++ chrome/browser/background/background_mode_manager.cc
+@@ -797,7 +797,7 @@ gfx::ImageSkia GetStatusTrayIcon() {
+ return gfx::ImageSkia();
+
+ return family->CreateExact(size).AsImageSkia();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
+ IDR_PRODUCT_LOGO_128);
+ #elif defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-chrome_browser_background_background__mode__optimizer.cc b/www/iridium/files/patch-chrome_browser_background_background__mode__optimizer.cc
new file mode 100644
index 000000000000..de595924ceb4
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_background_background__mode__optimizer.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/background/background_mode_optimizer.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/background/background_mode_optimizer.cc
+@@ -30,10 +30,10 @@ std::unique_ptr<BackgroundModeOptimizer> BackgroundMod
+ switches::kKeepAliveForTest))
+ return nullptr;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kBackgroundModeAllowRestart))
+ return base::WrapUnique(new BackgroundModeOptimizer());
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ return nullptr;
+ }
diff --git a/www/iridium/files/patch-chrome_browser_browser__resources.grd b/www/iridium/files/patch-chrome_browser_browser__resources.grd
new file mode 100644
index 000000000000..021a83b1c450
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_browser__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/browser/browser_resources.grd.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/browser_resources.grd
+@@ -54,7 +54,7 @@
+ <include name="IDR_DISCARDS_MOJO_PUBLIC_BASE_PROCESS_ID_MOJOM_LITE_JS" file="${root_gen_dir}\mojo\public\mojom\base\process_id.mojom-lite.js" compress="gzip" use_base_dir="false" type="BINDATA" />
+ <include name="IDR_DISCARDS_SORTED_TABLE_BEHAVIOR_JS" file="resources\discards\sorted_table_behavior.js" compress="gzip" type="BINDATA" />
+ </if>
+- <if expr="is_win or is_macosx or (is_linux and not chromeos)">
++ <if expr="is_win or is_macosx or (is_posix and not chromeos)">
+ <include name="IDR_BROWSER_SWITCH_APP_JS" file="${root_gen_dir}\chrome\browser\resources\browser_switch\app.js" compress="gzip" use_base_dir="false" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_PROXY_JS" file="resources\browser_switch\browser_switch_proxy.js" compress="gzip" type="BINDATA" />
+ <include name="IDR_BROWSER_SWITCH_HTML" file="resources\browser_switch\browser_switch.html" compress="gzip" allowexternalscript="true" type="BINDATA" />
diff --git a/www/iridium/files/patch-chrome_browser_chrome__browser__interface__binders.cc b/www/iridium/files/patch-chrome_browser_chrome__browser__interface__binders.cc
new file mode 100644
index 000000000000..80a27c8a8950
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__browser__interface__binders.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/chrome_browser_interface_binders.cc.orig 2020-03-17 09:35:03 UTC
++++ chrome/browser/chrome_browser_interface_binders.cc
+@@ -97,7 +97,7 @@
+ #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ #include "chrome/browser/ui/webui/discards/discards.mojom.h"
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+@@ -471,7 +471,7 @@ void PopulateChromeWebUIFrameBinders(
+ map);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ RegisterWebUIControllerInterfaceBinder<discards::mojom::DetailsProvider,
+ DiscardsUI>(map);
diff --git a/www/iridium/files/patch-chrome_browser_chrome__browser__main.cc b/www/iridium/files/patch-chrome_browser_chrome__browser__main.cc
new file mode 100644
index 000000000000..51bb283f651b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__browser__main.cc
@@ -0,0 +1,66 @@
+--- chrome/browser/chrome_browser_main.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/chrome_browser_main.cc
+@@ -224,9 +224,9 @@
+ #include "components/arc/metrics/stability_metrics_manager.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/first_run/upgrade_util_linux.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ #if defined(OS_LINUX)
+ #include "components/crash/content/app/breakpad_linux.h"
+@@ -265,7 +265,7 @@
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+ #include "chrome/browser/profiles/profile_activity_metrics_recorder.h"
+ #endif
+@@ -1068,7 +1068,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ AddFirstRunNewTabs(browser_creator_.get(), master_prefs_->new_tabs);
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Create directory for user-level Native Messaging manifest files. This
+ // makes it less likely that the directory will be created by third-party
+ // software with incorrect owner or permission. See crbug.com/725513 .
+@@ -1077,7 +1077,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ &user_native_messaging_dir));
+ if (!base::PathExists(user_native_messaging_dir))
+ base::CreateDirectory(user_native_messaging_dir);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+@@ -1116,7 +1116,7 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() {
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD))
+ metrics::DesktopSessionDurationTracker::Initialize();
+ ProfileActivityMetricsRecorder::Initialize();
+ #endif
+@@ -1269,6 +1269,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::TimeDelta::FromMinutes(1));
+
+ #if !defined(OS_ANDROID)
++#if !defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(features::kWebUsb)) {
+ web_usb_detector_.reset(new WebUsbDetector());
+ base::PostTask(
+@@ -1277,6 +1278,7 @@ void ChromeBrowserMainParts::PostBrowserStart() {
+ base::BindOnce(&WebUsbDetector::Initialize,
+ base::Unretained(web_usb_detector_.get())));
+ }
++#endif
+ if (base::FeatureList::IsEnabled(features::kTabMetricsLogging)) {
+ // Initialize the TabActivityWatcher to begin logging tab activity events.
+ resource_coordinator::TabActivityWatcher::GetInstance();
diff --git a/www/iridium/files/patch-chrome_browser_chrome__browser__main__linux.cc b/www/iridium/files/patch-chrome_browser_chrome__browser__main__linux.cc
new file mode 100644
index 000000000000..f7f343f3e0b5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__browser__main__linux.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/chrome_browser_main_linux.cc.orig 2019-12-16 21:50:42 UTC
++++ chrome/browser/chrome_browser_main_linux.cc
+@@ -81,14 +81,16 @@ void ChromeBrowserMainPartsLinux::PreProfileInit() {
+ void ChromeBrowserMainPartsLinux::PostProfileInit() {
+ ChromeBrowserMainPartsPosix::PostProfileInit();
+
++#if !defined(OS_BSD)
+ bool enabled = (crash_reporter::IsCrashpadEnabled() &&
+ crash_reporter::GetUploadsEnabled()) ||
+ breakpad::IsCrashReporterEnabled();
+ g_browser_process->metrics_service()->RecordBreakpadRegistration(enabled);
++#endif
+ }
+
+ void ChromeBrowserMainPartsLinux::PostMainMessageLoopStart() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Initialize(nullptr /* system_bus */);
+ #endif
+
+@@ -96,7 +98,7 @@ void ChromeBrowserMainPartsLinux::PostMainMessageLoopS
+ }
+
+ void ChromeBrowserMainPartsLinux::PostDestroyThreads() {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ bluez::BluezDBusManager::Shutdown();
+ bluez::BluezDBusThreadManager::Shutdown();
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_chrome__browser__main__posix.cc b/www/iridium/files/patch-chrome_browser_chrome__browser__main__posix.cc
new file mode 100644
index 000000000000..d217745edf63
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__browser__main__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/chrome_browser_main_posix.cc.orig 2019-06-04 18:55:16 UTC
++++ chrome/browser/chrome_browser_main_posix.cc
+@@ -70,7 +70,7 @@ void ExitHandler::ExitWhenPossibleOnUIThread(int signa
+ // ExitHandler takes care of deleting itself.
+ new ExitHandler();
+ } else {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ switch (signal) {
+ case SIGINT:
+ case SIGHUP:
+@@ -166,7 +166,7 @@ void ChromeBrowserMainPartsPosix::PostMainMessageLoopS
+ void ChromeBrowserMainPartsPosix::ShowMissingLocaleMessageBox() {
+ #if defined(OS_CHROMEOS)
+ NOTREACHED(); // Should not ever happen on ChromeOS.
+-#elif defined(OS_MACOSX)
++#elif defined(OS_MACOSX) || defined(OS_BSD)
+ // Not called on Mac because we load the locale files differently.
+ NOTREACHED();
+ #elif defined(USE_AURA)
diff --git a/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.cc b/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.cc
new file mode 100644
index 000000000000..270f07c28cd5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.cc
@@ -0,0 +1,115 @@
+--- chrome/browser/chrome_content_browser_client.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/chrome_content_browser_client.cc
+@@ -390,7 +390,7 @@
+ #include "components/user_manager/user.h"
+ #include "components/user_manager/user_manager.h"
+ #include "services/service_manager/public/mojom/interface_provider_spec.mojom.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/chrome_browser_main_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "base/android/application_status_listener.h"
+@@ -444,7 +444,7 @@
+ #endif // !defined(OS_ANDROID)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_navigation_throttle.h"
+ #include "services/service_manager/sandbox/features.h"
+ #endif
+@@ -477,7 +477,7 @@
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ #include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux_x11.h"
+ #else
+@@ -820,11 +820,13 @@ breakpad::CrashHandlerHostLinux* CreateCrashHandlerHos
+ }
+
+ int GetCrashSignalFD(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (crash_reporter::IsCrashpadEnabled()) {
+ int fd;
+ pid_t pid;
+ return crash_reporter::GetHandlerSocket(&fd, &pid) ? fd : -1;
+ }
++#endif
+
+ // Extensions have the same process type as renderers.
+ if (command_line.HasSwitch(extensions::switches::kExtensionProcess)) {
+@@ -1269,7 +1271,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ #elif defined(OS_CHROMEOS)
+ main_parts = std::make_unique<chromeos::ChromeBrowserMainPartsChromeos>(
+ parameters, startup_data_);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ main_parts =
+ std::make_unique<ChromeBrowserMainPartsLinux>(parameters, startup_data_);
+ #elif defined(OS_ANDROID)
+@@ -1295,7 +1297,7 @@ ChromeContentBrowserClient::CreateBrowserMainParts(
+ // Construct additional browser parts. Stages are called in the order in
+ // which they are added.
+ #if defined(TOOLKIT_VIEWS)
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #if defined(USE_X11)
+ main_parts->AddParts(new ChromeBrowserMainExtraPartsViewsLinuxX11());
+ #else
+@@ -2020,7 +2022,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ command_line->AppendSwitchASCII(switches::kMetricsClientID,
+ client_info->client_id);
+ }
+-#elif defined(OS_POSIX)
++#elif defined(OS_POSIX) && !defined(OS_BSD)
+ #if defined(OS_ANDROID)
+ bool enable_crash_reporter = true;
+ #else
+@@ -2288,7 +2290,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLin
+ StackSamplingConfiguration::Get()->AppendCommandLineSwitchForChildProcess(
+ process_type, command_line);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Processes may only query perf_event_open with the BPF sandbox disabled.
+ if (browser_command_line.HasSwitch(switches::kEnableThreadInstructionCount) &&
+ command_line->HasSwitch(service_manager::switches::kNoSandbox)) {
+@@ -3564,7 +3566,7 @@ void ChromeContentBrowserClient::GetAdditionalFileSyst
+ }
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -3696,7 +3698,7 @@ void ChromeContentBrowserClient::BindCredentialManager
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool ShouldEnableAudioSandbox(const policy::PolicyMap& policies) {
+ const base::Value* audio_sandbox_enabled_policy_value =
+ policies.GetValue(policy::key::kAudioSandboxEnabled);
+@@ -3714,7 +3716,7 @@ bool ShouldEnableAudioSandbox(const policy::PolicyMap&
+
+ void ChromeContentBrowserClient::WillStartServiceManager() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (startup_data_) {
+ auto* chrome_feature_list_creator =
+ startup_data_->chrome_feature_list_creator();
+@@ -3999,7 +4001,7 @@ ChromeContentBrowserClient::CreateThrottlesForNavigati
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ MaybeAddThrottle(&throttles,
+ browser_switcher::BrowserSwitcherNavigationThrottle::
+ MaybeCreateThrottleFor(handle));
diff --git a/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.h b/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.h
new file mode 100644
index 000000000000..c8b5fce3597e
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_chrome__content__browser__client.h
@@ -0,0 +1,17 @@
+--- chrome/browser/chrome_content_browser_client.h.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/chrome_content_browser_client.h
+@@ -364,12 +364,12 @@ class ChromeContentBrowserClient : public content::Con
+ void OverridePageVisibilityState(
+ content::RenderFrameHost* render_frame_host,
+ content::PageVisibilityState* visibility_state) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #if defined(OS_WIN)
+ bool PreSpawnRenderer(sandbox::TargetPolicy* policy,
+ RendererSpawnFlags flags) override;
diff --git a/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list.cc b/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list.cc
new file mode 100644
index 000000000000..740824d61e61
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/crash_upload_list/crash_upload_list.cc.orig 2019-12-31 13:55:02 UTC
++++ chrome/browser/crash_upload_list/crash_upload_list.cc
+@@ -38,7 +38,7 @@ scoped_refptr<UploadList> CreateCrashUploadList() {
+ // ChromeOS uses crash_sender as its uploader even when Crashpad is enabled,
+ // which isn't compatible with CrashUploadListCrashpad. crash_sender continues
+ // to log uploads in CrashUploadList::kReporterLogFilename.
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (crash_reporter::IsCrashpadEnabled()) {
+ return new CrashUploadListCrashpad();
+ }
diff --git a/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list__crashpad.cc b/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list__crashpad.cc
new file mode 100644
index 000000000000..0f0d4137c678
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_crash__upload__list_crash__upload__list__crashpad.cc
@@ -0,0 +1,31 @@
+--- chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc.orig 2019-12-31 13:56:21 UTC
++++ chrome/browser/crash_upload_list/crash_upload_list_crashpad.cc
+@@ -42,6 +42,9 @@ CrashUploadListCrashpad::CrashUploadListCrashpad() = d
+ CrashUploadListCrashpad::~CrashUploadListCrashpad() = default;
+
+ std::vector<UploadList::UploadInfo> CrashUploadListCrashpad::LoadUploadList() {
++#if defined(OS_BSD)
++ return std::vector<UploadInfo>();
++#else
+ std::vector<crash_reporter::Report> reports;
+ crash_reporter::GetReports(&reports);
+
+@@ -53,13 +56,18 @@ std::vector<UploadList::UploadInfo> CrashUploadListCra
+ ReportUploadStateToUploadInfoState(report.state)));
+ }
+ return uploads;
++#endif
+ }
+
+ void CrashUploadListCrashpad::ClearUploadList(const base::Time& begin,
+ const base::Time& end) {
++#if !defined(OS_BSD)
+ crash_reporter::ClearReportsBetween(begin, end);
++#endif
+ }
+
+ void CrashUploadListCrashpad::RequestSingleUpload(const std::string& local_id) {
++#if !defined(OS_BSD)
+ crash_reporter::RequestSingleCrashUpload(local_id);
++#endif
+ }
diff --git a/www/iridium/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc b/www/iridium/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
new file mode 100644
index 000000000000..b1db05585e76
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_custom__handlers_protocol__handler__registry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/custom_handlers/protocol_handler_registry.cc.orig 2020-02-03 21:52:39 UTC
++++ chrome/browser/custom_handlers/protocol_handler_registry.cc
+@@ -42,7 +42,7 @@ const ProtocolHandler& LookupHandler(
+ // If true default protocol handlers will be removed if the OS level
+ // registration for a protocol is no longer Chrome.
+ bool ShouldRemoveHandlersNotInOS() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // We don't do this on Linux as the OS registration there is not reliable,
+ // and Chrome OS doesn't have any notion of OS registration.
+ // TODO(benwells): When Linux support is more reliable remove this
diff --git a/www/iridium/files/patch-chrome_browser_defaults.cc b/www/iridium/files/patch-chrome_browser_defaults.cc
new file mode 100644
index 000000000000..4cf8684d29d3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_defaults.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/defaults.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/defaults.cc
+@@ -43,7 +43,7 @@ const bool kSyncAutoStarts = true;
+ const bool kSyncAutoStarts = false;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ const bool kScrollEventChangesTab = true;
+ #else
+ const bool kScrollEventChangesTab = false;
diff --git a/www/iridium/files/patch-chrome_browser_dev__ui__browser__resources.grd b/www/iridium/files/patch-chrome_browser_dev__ui__browser__resources.grd
new file mode 100644
index 000000000000..3a56c04bdb97
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_dev__ui__browser__resources.grd
@@ -0,0 +1,11 @@
+--- chrome/browser/dev_ui_browser_resources.grd.orig 2020-03-17 09:36:38 UTC
++++ chrome/browser/dev_ui_browser_resources.grd
+@@ -55,7 +55,7 @@ This file specifies browser resources for developer-fa
+ <include name="IDR_PREDICTORS_HTML" file="resources\predictors\predictors.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_PREDICTORS_JS" file="resources\predictors\predictors.js" flattenhtml="true" type="BINDATA" compress="gzip" />
+
+- <if expr="is_android or is_linux">
++ <if expr="is_android or is_posix">
+ <include name="IDR_SANDBOX_INTERNALS_HTML" file="resources\sandbox_internals\sandbox_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
+ <include name="IDR_SANDBOX_INTERNALS_JS" file="resources\sandbox_internals\sandbox_internals.js" type="BINDATA" compress="gzip" />
+ </if>
diff --git a/www/iridium/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc b/www/iridium/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
new file mode 100644
index 000000000000..d53ca3e6d56b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_devtools_devtools__eye__dropper.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/devtools/devtools_eye_dropper.cc.orig 2020-02-03 21:53:29 UTC
++++ chrome/browser/devtools/devtools_eye_dropper.cc
+@@ -164,7 +164,7 @@ void DevToolsEyeDropper::UpdateCursor() {
+ // magnified projection only with centered hotspot.
+ // Mac Retina requires cursor to be > 120px in order to render smoothly.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const float kCursorSize = 63;
+ const float kDiameter = 63;
+ const float kHotspotOffset = 32;
diff --git a/www/iridium/files/patch-chrome_browser_diagnostics_diagnostics__writer.h b/www/iridium/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
new file mode 100644
index 000000000000..e77c2c353dd8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_diagnostics_diagnostics__writer.h
@@ -0,0 +1,11 @@
+--- chrome/browser/diagnostics/diagnostics_writer.h.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/diagnostics/diagnostics_writer.h
+@@ -15,6 +15,8 @@ namespace diagnostics {
+ // Console base class used internally.
+ class SimpleConsole;
+
++#undef MACHINE
++
+ class DiagnosticsWriter : public DiagnosticsModel::Observer {
+ public:
+ // The type of formatting done by this writer.
diff --git a/www/iridium/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc b/www/iridium/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
new file mode 100644
index 000000000000..e44deb129a08
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_chrome__download__manager__delegate.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/chrome_download_manager_delegate.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/download/chrome_download_manager_delegate.cc
+@@ -1249,7 +1249,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+ target_info->is_filetype_handled_safely)
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (item->GetOriginalMimeType() == "application/x-x509-user-cert")
+ DownloadItemModel(item).SetShouldPreferOpeningInBrowser(true);
+ #endif
+@@ -1273,7 +1273,7 @@ void ChromeDownloadManagerDelegate::OnDownloadTargetDe
+
+ bool ChromeDownloadManagerDelegate::IsOpenInBrowserPreferreredForFile(
+ const base::FilePath& path) {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) {
+ return !download_prefs_->ShouldOpenPdfInSystemReader();
+ }
diff --git a/www/iridium/files/patch-chrome_browser_download_download__commands.cc b/www/iridium/files/patch-chrome_browser_download_download__commands.cc
new file mode 100644
index 000000000000..7de89e40fd17
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__commands.cc
@@ -0,0 +1,35 @@
+--- chrome/browser/download/download_commands.cc.orig 2019-12-16 21:50:42 UTC
++++ chrome/browser/download/download_commands.cc
+@@ -26,7 +26,7 @@
+ #include "net/base/url_util.h"
+ #include "ui/base/clipboard/scoped_clipboard_writer.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser.h"
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
+@@ -153,7 +153,7 @@ void DownloadCommands::ExecuteCommand(Command command)
+ model_->ExecuteCommand(this, command);
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ Browser* DownloadCommands::GetBrowser() const {
+ chrome::ScopedTabbedBrowserDisplayer browser_displayer(model_->profile());
+@@ -176,12 +176,12 @@ bool DownloadCommands::CanOpenPdfInSystemViewer() cons
+ return IsDownloadPdf() &&
+ (IsAdobeReaderDefaultPDFViewer() ? is_adobe_pdf_reader_up_to_date
+ : true);
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return IsDownloadPdf();
+ #endif
+ }
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void DownloadCommands::CopyFileAsImageToClipboard() {
+ if (model_->GetState() != download::DownloadItem::COMPLETE ||
diff --git a/www/iridium/files/patch-chrome_browser_download_download__commands.h b/www/iridium/files/patch-chrome_browser_download_download__commands.h
new file mode 100644
index 000000000000..126f0123875b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__commands.h
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_commands.h.orig 2020-03-16 18:39:43 UTC
++++ chrome/browser/download/download_commands.h
+@@ -48,7 +48,7 @@ class DownloadCommands {
+ bool IsCommandVisible(Command command) const;
+ void ExecuteCommand(Command command);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool IsDownloadPdf() const;
+ bool CanOpenPdfInSystemViewer() const;
+ Browser* GetBrowser() const;
diff --git a/www/iridium/files/patch-chrome_browser_download_download__item__model.cc b/www/iridium/files/patch-chrome_browser_download_download__item__model.cc
new file mode 100644
index 000000000000..4b367d9bc2e5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__item__model.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_item_model.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/download/download_item_model.cc
+@@ -592,7 +592,7 @@ bool DownloadItemModel::IsCommandChecked(
+ return download_->GetOpenWhenComplete() ||
+ download_crx_util::IsExtensionDownload(*download_);
+ case DownloadCommands::ALWAYS_OPEN_TYPE:
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+ return prefs->ShouldOpenPdfInSystemReader();
+@@ -632,7 +632,7 @@ void DownloadItemModel::ExecuteCommand(DownloadCommand
+ bool is_checked = IsCommandChecked(download_commands,
+ DownloadCommands::ALWAYS_OPEN_TYPE);
+ DownloadPrefs* prefs = DownloadPrefs::FromBrowserContext(profile());
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (download_commands->CanOpenPdfInSystemViewer()) {
+ prefs->SetShouldOpenPdfInSystemReader(!is_checked);
+ SetShouldPreferOpeningInBrowser(is_checked);
diff --git a/www/iridium/files/patch-chrome_browser_download_download__prefs.cc b/www/iridium/files/patch-chrome_browser_download_download__prefs.cc
new file mode 100644
index 000000000000..ddf30c396fc6
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__prefs.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/download/download_prefs.cc.orig 2020-02-03 21:52:39 UTC
++++ chrome/browser/download/download_prefs.cc
+@@ -63,7 +63,7 @@ namespace {
+ // Consider downloads 'dangerous' if they go to the home directory on Linux and
+ // to the desktop on any platform.
+ bool DownloadPathIsDangerous(const base::FilePath& download_path) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath home_dir = base::GetHomeDir();
+ if (download_path == home_dir) {
+ return true;
+@@ -159,7 +159,7 @@ DownloadPrefs::DownloadPrefs(Profile* profile) : profi
+ GetDefaultDownloadDirectoryForProfile()));
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ should_open_pdf_in_system_reader_ =
+ prefs->GetBoolean(prefs::kOpenPdfDownloadInSystemReader);
+ #endif
+@@ -261,7 +261,7 @@ void DownloadPrefs::RegisterProfilePrefs(
+ default_download_path);
+ registry->RegisterFilePathPref(prefs::kSaveFileDefaultDirectory,
+ default_download_path);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kOpenPdfDownloadInSystemReader, false);
+ #endif
+ #if defined(OS_ANDROID)
+@@ -360,7 +360,7 @@ bool DownloadPrefs::IsDownloadPathManaged() const {
+ }
+
+ bool DownloadPrefs::IsAutoOpenUsed() const {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (ShouldOpenPdfInSystemReader())
+ return true;
+ #endif
+@@ -374,7 +374,7 @@ bool DownloadPrefs::IsAutoOpenEnabledBasedOnExtension(
+ return false;
+ DCHECK(extension[0] == base::FilePath::kExtensionSeparator);
+ extension.erase(0, 1);
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (base::FilePath::CompareEqualIgnoreCase(extension,
+ FILE_PATH_LITERAL("pdf")) &&
+ ShouldOpenPdfInSystemReader())
+@@ -411,7 +411,7 @@ void DownloadPrefs::DisableAutoOpenBasedOnExtension(
+ SaveAutoOpenState();
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void DownloadPrefs::SetShouldOpenPdfInSystemReader(bool should_open) {
+ if (should_open_pdf_in_system_reader_ == should_open)
+ return;
+@@ -432,7 +432,7 @@ bool DownloadPrefs::ShouldOpenPdfInSystemReader() cons
+ #endif
+
+ void DownloadPrefs::ResetAutoOpen() {
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ SetShouldOpenPdfInSystemReader(false);
+ #endif
+ auto_open_.clear();
diff --git a/www/iridium/files/patch-chrome_browser_download_download__prefs.h b/www/iridium/files/patch-chrome_browser_download_download__prefs.h
new file mode 100644
index 000000000000..702f54b47279
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__prefs.h
@@ -0,0 +1,20 @@
+--- chrome/browser/download/download_prefs.h.orig 2019-06-04 18:55:17 UTC
++++ chrome/browser/download/download_prefs.h
+@@ -102,7 +102,7 @@ class DownloadPrefs {
+ // Disables auto-open based on file extension.
+ void DisableAutoOpenBasedOnExtension(const base::FilePath& file_name);
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Store the user preference to disk. If |should_open| is true, also disable
+ // the built-in PDF plugin. If |should_open| is false, enable the PDF plugin.
+ void SetShouldOpenPdfInSystemReader(bool should_open);
+@@ -150,7 +150,7 @@ class DownloadPrefs {
+ AutoOpenCompareFunctor> AutoOpenSet;
+ AutoOpenSet auto_open_;
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool should_open_pdf_in_system_reader_;
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_browser_download_download__query.cc b/www/iridium/files/patch-chrome_browser_download_download__query.cc
new file mode 100644
index 000000000000..be6e0537adfc
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__query.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/download/download_query.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/download/download_query.cc
+@@ -27,7 +27,11 @@
+ #include "components/download/public/common/download_item.h"
+ #include "components/url_formatter/url_formatter.h"
+ #include "content/public/browser/content_browser_client.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using download::DownloadDangerType;
diff --git a/www/iridium/files/patch-chrome_browser_download_download__shelf__context__menu.cc b/www/iridium/files/patch-chrome_browser_download_download__shelf__context__menu.cc
new file mode 100644
index 000000000000..71f0ca430012
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_download_download__shelf__context__menu.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/download/download_shelf_context_menu.cc.orig 2020-03-16 18:39:43 UTC
++++ chrome/browser/download/download_shelf_context_menu.cc
+@@ -147,7 +147,7 @@ base::string16 DownloadShelfContextMenu::GetLabelForCo
+ : IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
+ }
+-#elif defined(OS_MACOSX) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (can_open_pdf_in_system_viewer) {
+ id = IDS_DOWNLOAD_MENU_PLATFORM_OPEN_ALWAYS;
+ break;
diff --git a/www/iridium/files/patch-chrome_browser_extensions_BUILD.gn b/www/iridium/files/patch-chrome_browser_extensions_BUILD.gn
new file mode 100644
index 000000000000..4309d41da843
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_BUILD.gn
@@ -0,0 +1,15 @@
+--- chrome/browser/extensions/BUILD.gn.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/extensions/BUILD.gn
+@@ -1175,6 +1175,12 @@ jumbo_static_library("extensions") {
+ deps += [ "//chrome/common:service_process_mojom" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "api/image_writer_private/removable_storage_provider_linux.cc",
++ ]
++ }
++
+ if (enable_service_discovery) {
+ sources += [
+ "api/mdns/mdns_api.cc",
diff --git a/www/iridium/files/patch-chrome_browser_extensions_activity__log_activity__log.cc b/www/iridium/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
new file mode 100644
index 000000000000..9d31ad4054df
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_activity__log_activity__log.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/extensions/activity_log/activity_log.cc.orig 2019-12-16 21:50:42 UTC
++++ chrome/browser/extensions/activity_log/activity_log.cc
+@@ -47,7 +47,11 @@
+ #include "extensions/browser/extensions_browser_client.h"
+ #include "extensions/common/extension.h"
+ #include "extensions/common/extension_messages.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ namespace constants = activity_log_constants;
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher.cc b/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher.cc
new file mode 100644
index 000000000000..591517203deb
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher.cc.orig 2020-03-17 09:37:45 UTC
++++ chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher.cc
+@@ -11,7 +11,7 @@
+ #include "chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher_mac.h"
+ #elif defined(OS_WIN)
+ #include "chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher_linux.h"
+ #endif
+
+@@ -58,7 +58,7 @@ std::unique_ptr<DeviceInfoFetcher> DeviceInfoFetcher::
+ return std::make_unique<DeviceInfoFetcherMac>();
+ #elif defined(OS_WIN)
+ return std::make_unique<DeviceInfoFetcherWin>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<DeviceInfoFetcherLinux>();
+ #else
+ return std::make_unique<StubDeviceFetcher>();
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher__linux.cc b/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher__linux.cc
new file mode 100644
index 000000000000..8620f64e57fd
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_enterprise__reporting__private_device__info__fetcher__linux.cc
@@ -0,0 +1,40 @@
+--- chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher_linux.cc.orig 2020-03-18 08:39:42 UTC
++++ chrome/browser/extensions/api/enterprise_reporting_private/device_info_fetcher_linux.cc
+@@ -8,7 +8,9 @@
+ #include <gio/gio.h>
+ #endif // defined(USE_GIO)
+ #include <sys/stat.h>
++#if !defined(OS_BSD)
+ #include <sys/sysmacros.h>
++#endif
+
+ #include <string>
+
+@@ -90,6 +92,7 @@ enterprise_reporting_private::SettingValue GetScreenlo
+ // Implements the logic from the native host installation script. First find the
+ // root device identifier, then locate its parent and get its type.
+ enterprise_reporting_private::SettingValue GetDiskEncrypted() {
++#if !defined(OS_BSD)
+ struct stat info;
+ // First figure out the device identifier.
+ stat("/", &info);
+@@ -109,6 +112,7 @@ enterprise_reporting_private::SettingValue GetDiskEncr
+ return is_encrypted ? enterprise_reporting_private::SETTING_VALUE_ENABLED
+ : enterprise_reporting_private::SETTING_VALUE_DISABLED;
+ }
++#endif
+ return enterprise_reporting_private::SETTING_VALUE_UNKNOWN;
+ }
+
+@@ -120,7 +124,11 @@ DeviceInfoFetcherLinux::~DeviceInfoFetcherLinux() = de
+
+ DeviceInfo DeviceInfoFetcherLinux::Fetch() {
+ DeviceInfo device_info;
++#if defined(OS_FREEBSD)
++ device_info.os_name = "freebsd";
++#else
+ device_info.os_name = "linux";
++#endif
+ device_info.os_version = GetOsVersion();
+ device_info.device_host_name = GetDeviceHostName();
+ device_info.device_model = GetDeviceModel();
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_erp_chrome_desktop_report_request_helper.cc b/www/iridium/files/patch-chrome_browser_extensions_api_erp_chrome_desktop_report_request_helper.cc
new file mode 100644
index 000000000000..8a3736baf4ee
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_erp_chrome_desktop_report_request_helper.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc.orig 2020-04-03 04:11:29 UTC
++++ chrome/browser/extensions/api/enterprise_reporting_private/chrome_desktop_report_request_helper.cc
+@@ -39,7 +39,7 @@
+ #include "base/win/registry.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/nix/xdg_util.h"
+ #endif
+@@ -382,7 +382,7 @@ base::FilePath GetEndpointVerificationDir() {
+ return *GetEndpointVerificationDirOverride();
+ #if defined(OS_WIN)
+ if (!base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path))
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ path = base::nix::GetXDGDirectory(env.get(), base::nix::kXdgConfigHomeEnvVar,
+ base::nix::kDotConfigDir);
+@@ -393,7 +393,7 @@ base::FilePath GetEndpointVerificationDir() {
+ if (true)
+ #endif
+ return path;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ path = path.AppendASCII("google");
+ #else
+ path = path.AppendASCII("Google");
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc b/www/iridium/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
new file mode 100644
index 000000000000..0b5c1a821007
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_image__writer__private_removable__storage__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc.orig 2019-04-30 22:22:33 UTC
++++ chrome/browser/extensions/api/image_writer_private/removable_storage_provider.cc
+@@ -21,6 +21,7 @@ static base::LazyInstance<scoped_refptr<StorageDeviceL
+
+ void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
++#if !defined(OS_BSD)
+ if (g_test_device_list.Get().get() != nullptr) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+@@ -34,6 +35,9 @@ void RemovableStorageProvider::GetAllDevices(DeviceLis
+ base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+ base::BindOnce(&RemovableStorageProvider::PopulateDeviceList),
+ std::move(callback));
++#else
++ NOTIMPLEMENTED();
++#endif
+ }
+
+ // static
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h b/www/iridium/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
new file mode 100644
index 000000000000..1cb62fbbfdce
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_input__ime_input__ime__api.h
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/input_ime/input_ime_api.h.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/extensions/api/input_ime/input_ime_api.h
+@@ -31,7 +31,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_chromeos.h"
+-#elif defined(OS_LINUX) || defined(OS_WIN)
++#elif defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api_nonchromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc b/www/iridium/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
new file mode 100644
index 000000000000..d8b93a7a1069
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_runtime_chrome__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc.orig 2019-04-30 22:22:33 UTC
++++ chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+@@ -299,6 +299,8 @@ bool ChromeRuntimeAPIDelegate::GetPlatformInfo(Platfor
+ info->os = extensions::api::runtime::PLATFORM_OS_CROS;
+ } else if (strcmp(os, "linux") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_LINUX;
++ } else if (strcmp(os, "freebsd") == 0) {
++ info->os = extensions::api::runtime::PLATFORM_OS_FREEBSD;
+ } else if (strcmp(os, "openbsd") == 0) {
+ info->os = extensions::api::runtime::PLATFORM_OS_OPENBSD;
+ } else {
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc b/www/iridium/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
new file mode 100644
index 000000000000..40176332dcff
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_settings__private_prefs__util.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/api/settings_private/prefs_util.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/extensions/api/settings_private/prefs_util.cc
+@@ -160,7 +160,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ (*s_whitelist)[bookmarks::prefs::kShowBookmarkBar] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ (*s_whitelist)[::prefs::kUseCustomChromeFrame] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
+@@ -170,7 +170,7 @@ const PrefsUtil::TypedPrefMap& PrefsUtil::GetWhitelist
+ // Appearance settings.
+ (*s_whitelist)[::prefs::kCurrentThemeID] =
+ settings_api::PrefType::PREF_TYPE_STRING;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ (*s_whitelist)[::prefs::kUsesSystemTheme] =
+ settings_api::PrefType::PREF_TYPE_BOOLEAN;
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc b/www/iridium/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
new file mode 100644
index 000000000000..7440fdc3cc94
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_api_webrtc__logging__private_webrtc__logging__private__api.cc
@@ -0,0 +1,43 @@
+--- chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc.orig 2019-10-21 19:06:21 UTC
++++ chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_api.cc
+@@ -29,7 +29,7 @@
+ #include "extensions/browser/process_manager.h"
+ #include "extensions/common/error_utils.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "extensions/common/permissions/permissions_data.h"
+ #endif
+
+@@ -38,7 +38,7 @@ namespace {
+ bool CanEnableAudioDebugRecordingsFromExtension(
+ const extensions::Extension* extension) {
+ bool enabled_by_permissions = false;
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ if (extension) {
+ enabled_by_permissions =
+ extension->permissions_data()->active_permissions().HasAPIPermission(
+@@ -557,7 +557,7 @@ void WebrtcLoggingPrivateStartEventLoggingFunction::Fi
+ }
+
+ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::RunAsync() {
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Unlike other WebrtcLoggingPrivate functions that take a RequestInfo object,
+ // this function shouldn't be called by a component extension on behalf of
+ // some web code. It returns a DirectoryEntry for use directly in the calling
+@@ -580,11 +580,11 @@ bool WebrtcLoggingPrivateGetLogsDirectoryFunction::Run
+ &WebrtcLoggingPrivateGetLogsDirectoryFunction::FireErrorCallback,
+ this));
+ return true;
+-#else // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#else // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ SetError("Not supported on the current OS");
+ SendResponse(false);
+ return false;
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void WebrtcLoggingPrivateGetLogsDirectoryFunction::FireCallback(
diff --git a/www/iridium/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc b/www/iridium/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..fbddcf6c422b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_browser__context__keyed__service__factories.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/browser_context_keyed_service_factories.cc.orig 2020-02-03 21:52:39 UTC
++++ chrome/browser/extensions/browser_context_keyed_service_factories.cc
+@@ -52,7 +52,7 @@
+ #include "extensions/browser/api/networking_private/networking_private_delegate_factory.h"
+ #include "ppapi/buildflags/buildflags.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+ #endif
+
+@@ -88,7 +88,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ extensions::IdentityAPI::GetFactoryInstance();
+ extensions::InstallTrackerFactory::GetInstance();
+ extensions::InstallVerifierFactory::GetInstance();
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ extensions::InputImeAPI::GetFactoryInstance();
+ #endif
+ extensions::LanguageSettingsPrivateDelegateFactory::GetInstance();
diff --git a/www/iridium/files/patch-chrome_browser_extensions_external__provider__impl.cc b/www/iridium/files/patch-chrome_browser_extensions_external__provider__impl.cc
new file mode 100644
index 000000000000..8c813c1db5c8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_external__provider__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/extensions/external_provider_impl.cc.orig 2020-03-16 18:39:44 UTC
++++ chrome/browser/extensions/external_provider_impl.cc
+@@ -760,7 +760,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ }
+ #endif
+ if (!profile->GetPrefs()->GetBoolean(pref_names::kBlockExternalExtensions)) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
+@@ -787,7 +787,7 @@ void ExternalProviderImpl::CreateExternalProviders(
+ bundled_extension_creation_flags));
+
+ // Define a per-user source of external extensions.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING))
++#if defined(OS_MACOSX) || ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING))
+ provider_list->push_back(std::make_unique<ExternalProviderImpl>(
+ service,
+ base::MakeRefCounted<ExternalPrefLoader>(
diff --git a/www/iridium/files/patch-chrome_browser_extensions_install__signer.cc b/www/iridium/files/patch-chrome_browser_extensions_install__signer.cc
new file mode 100644
index 000000000000..831136e37584
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_extensions_install__signer.cc
@@ -0,0 +1,18 @@
+--- chrome/browser/extensions/install_signer.cc.orig 2020-03-16 18:39:44 UTC
++++ chrome/browser/extensions/install_signer.cc
+@@ -294,13 +294,13 @@ void LogRequestStartHistograms() {
+ DCHECK(g_single_thread_checker.Get().CalledOnValidThread());
+
+ // Process::Current().CreationTime is only defined on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Time process_creation_time =
+ base::Process::Current().CreationTime();
+ UMA_HISTOGRAM_COUNTS_1M(
+ "ExtensionInstallSigner.UptimeAtTimeOfRequest",
+ (base::Time::Now() - process_creation_time).InSeconds());
+-#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ base::TimeDelta delta;
+ base::TimeTicks now = base::TimeTicks::Now();
diff --git a/www/iridium/files/patch-chrome_browser_first__run_first__run__dialog.h b/www/iridium/files/patch-chrome_browser_first__run_first__run__dialog.h
new file mode 100644
index 000000000000..c079a7eac3e3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_first__run_first__run__dialog.h
@@ -0,0 +1,11 @@
+--- chrome/browser/first_run/first_run_dialog.h.orig 2019-07-29 18:50:26 UTC
++++ chrome/browser/first_run/first_run_dialog.h
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+
+ // Hide this function on platforms where the dialog does not exist.
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ class Profile;
+
diff --git a/www/iridium/files/patch-chrome_browser_first__run_first__run__internal.h b/www/iridium/files/patch-chrome_browser_first__run_first__run__internal.h
new file mode 100644
index 000000000000..5b60fc717be9
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_first__run_first__run__internal.h
@@ -0,0 +1,18 @@
+--- chrome/browser/first_run/first_run_internal.h.orig 2019-07-29 18:50:45 UTC
++++ chrome/browser/first_run/first_run_internal.h
+@@ -64,13 +64,13 @@ FirstRunState DetermineFirstRunState(bool has_sentinel
+ bool force_first_run,
+ bool no_first_run);
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For testing, forces the first run dialog to either be shown or not. If not
+ // called, the decision to show the dialog or not will be made by Chrome based
+ // on a number of factors (such as install type, whether it's a Chrome-branded
+ // build, etc).
+ void ForceFirstRunDialogShownForTesting(bool shown);
+-#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#endif // defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace internal
+ } // namespace first_run
diff --git a/www/iridium/files/patch-chrome_browser_first__run_first__run__internal__posix.cc b/www/iridium/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
new file mode 100644
index 000000000000..1a28c1282fc1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_first__run_first__run__internal__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/first_run/first_run_internal_posix.cc.orig 2020-04-10 00:39:11 UTC
++++ chrome/browser/first_run/first_run_internal_posix.cc
+@@ -46,7 +46,7 @@ enum class ForcedShowDialogState {
+ ForcedShowDialogState g_forced_show_dialog_state =
+ ForcedShowDialogState::kNotForced;
+
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ // Returns whether the first run dialog should be shown. This is only true for
+ // certain builds, and only if the user has not already set preferences. In a
+ // real, official-build first run, initializes the default metrics reporting if
+@@ -100,7 +100,7 @@ void ForceFirstRunDialogShownForTesting(bool shown) {
+ }
+
+ void DoPostImportPlatformSpecificTasks(Profile* profile) {
+-#if !defined(OS_CHROMEOS)
++#if !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ if (!ShouldShowFirstRunDialog())
+ return;
+
diff --git a/www/iridium/files/patch-chrome_browser_flag__descriptions.cc b/www/iridium/files/patch-chrome_browser_flag__descriptions.cc
new file mode 100644
index 000000000000..1a6b198aa788
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_flag__descriptions.cc
@@ -0,0 +1,65 @@
+--- chrome/browser/flag_descriptions.cc.orig 2020-04-10 00:39:02 UTC
++++ chrome/browser/flag_descriptions.cc
+@@ -3651,7 +3651,7 @@ const char kZeroStateFilesDescription[] =
+
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(USE_TCMALLOC)
+ const char kDynamicTcmallocName[] = "Dynamic Tcmalloc Tuning";
+@@ -3660,7 +3660,7 @@ const char kDynamicTcmallocDescription[] =
+ "utilization.";
+ #endif // BUILDFLAG(USE_TCMALLOC)
+
+-#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // All views-based platforms --------------------------------------------------
+
+@@ -3685,13 +3685,13 @@ const char kReopenTabInProductHelpDescription[] =
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ const char kWebGL2ComputeContextName[] = "WebGL 2.0 Compute";
+ const char kWebGL2ComputeContextDescription[] =
+ "Enable the use of WebGL 2.0 Compute API.";
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_CLICK_TO_CALL)
+
+@@ -3708,7 +3708,7 @@ const char kClickToCallDetectionV2Description[] =
+
+ #endif // BUILDFLAG(ENABLE_CLICK_TO_CALL)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+
+ const char kRemoteCopyReceiverName[] =
+@@ -3717,16 +3717,16 @@ const char kRemoteCopyReceiverDescription[] =
+ "Enables the remote copy feature to handle messages by writing content to "
+ "the clipboard and showing a notification to the user.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kDirectManipulationStylusName[] = "Direct Manipulation Stylus";
+ const char kDirectManipulationStylusDescription[] =
+ "If enabled, Chrome will scroll web pages on stylus drag.";
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/www/iridium/files/patch-chrome_browser_flag__descriptions.h b/www/iridium/files/patch-chrome_browser_flag__descriptions.h
new file mode 100644
index 000000000000..ad2ca09a3baa
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_flag__descriptions.h
@@ -0,0 +1,72 @@
+--- chrome/browser/flag_descriptions.h.orig 2020-04-10 00:39:02 UTC
++++ chrome/browser/flag_descriptions.h
+@@ -21,9 +21,9 @@
+ #include "ui/android/buildflags.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/allocator/buildflags.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // This file declares strings used in chrome://flags. These messages are not
+ // translated, because instead of end-users they target Chromium developers and
+@@ -2132,14 +2132,14 @@ extern const char kZeroStateFilesDescription[];
+
+ #endif // #if defined(OS_CHROMEOS)
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(USE_TCMALLOC)
+ extern const char kDynamicTcmallocName[];
+ extern const char kDynamicTcmallocDescription[];
+ #endif // BUILDFLAG(USE_TCMALLOC)
+
+-#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // #if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // All views-based platforms --------------------------------------------------
+
+@@ -2158,12 +2158,12 @@ extern const char kReopenTabInProductHelpDescription[]
+
+ // Random platform combinations -----------------------------------------------
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ extern const char kWebGL2ComputeContextName[];
+ extern const char kWebGL2ComputeContextDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_CLICK_TO_CALL)
+
+@@ -2175,21 +2175,21 @@ extern const char kClickToCallDetectionV2Description[]
+
+ #endif // BUILDFLAG(ENABLE_CLICK_TO_CALL)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+
+ extern const char kRemoteCopyReceiverName[];
+ extern const char kRemoteCopyReceiverDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kDirectManipulationStylusName[];
+ extern const char kDirectManipulationStylusDescription[];
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
+
diff --git a/www/iridium/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc b/www/iridium/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
new file mode 100644
index 000000000000..93a3d5742fd1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media__galleries_fileapi_mtp__device__map__service.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc.orig 2019-04-30 22:22:34 UTC
++++ chrome/browser/media_galleries/fileapi/mtp_device_map_service.cc
+@@ -39,10 +39,12 @@ void MTPDeviceMapService::RegisterMTPFileSystem(
+ // Note that this initializes the delegate asynchronously, but since
+ // the delegate will only be used from the IO thread, it is guaranteed
+ // to be created before use of it expects it to be there.
++#if !defined(OS_FREEBSD)
+ CreateMTPDeviceAsyncDelegate(
+ device_location, read_only,
+ base::Bind(&MTPDeviceMapService::AddAsyncDelegate,
+ base::Unretained(this), device_location, read_only));
++#endif
+ mtp_device_usage_map_[key] = 0;
+ }
+
diff --git a/www/iridium/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc b/www/iridium/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
new file mode 100644
index 000000000000..922d7c8beb61
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media__galleries_media__file__system__registry.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/media_galleries/media_file_system_registry.cc.orig 2019-04-30 22:22:34 UTC
++++ chrome/browser/media_galleries/media_file_system_registry.cc
+@@ -732,7 +732,10 @@ class MediaFileSystemRegistry::MediaFileSystemContextI
+ // Constructor in 'private' section because depends on private class definition.
+ MediaFileSystemRegistry::MediaFileSystemRegistry()
+ : file_system_context_(new MediaFileSystemContextImpl) {
+- StorageMonitor::GetInstance()->AddObserver(this);
++ // This conditional is needed for shutdown. Destructors
++ // try to get the media file system registry.
++ if (StorageMonitor::GetInstance())
++ StorageMonitor::GetInstance()->AddObserver(this);
+ }
+
+ MediaFileSystemRegistry::~MediaFileSystemRegistry() {
diff --git a/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc b/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
new file mode 100644
index 000000000000..c131ed5d1aa8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__posix.cc
@@ -0,0 +1,28 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_posix.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_posix.cc
+@@ -10,6 +10,7 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <sys/time.h>
+
+ #include <algorithm>
+
+@@ -19,7 +20,7 @@
+ #include "chrome/browser/media/router/discovery/discovery_network_list_wifi.h"
+ #include "net/base/net_errors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include <netpacket/packet.h>
+ #else
+ #include <net/if_dl.h>
+@@ -28,7 +29,7 @@
+ namespace media_router {
+ namespace {
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ using sll = struct sockaddr_ll;
+ #define SOCKET_ARP_TYPE(s) ((s)->sll_hatype)
+ #define SOCKET_ADDRESS_LEN(s) ((s)->sll_halen)
diff --git a/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc b/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
new file mode 100644
index 000000000000..23a0d4544e24
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_router_discovery_discovery__network__list__wifi__linux.cc
@@ -0,0 +1,27 @@
+--- chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/media/router/discovery/discovery_network_list_wifi_linux.cc
+@@ -9,8 +9,6 @@
+ #include <sys/socket.h>
+ #include <sys/types.h>
+
+-#include <linux/wireless.h>
+-
+ #include "base/files/scoped_file.h"
+ #include "base/logging.h"
+ #include "net/base/network_interfaces_linux.h"
+@@ -20,6 +18,7 @@ namespace media_router {
+ bool MaybeGetWifiSSID(const std::string& if_name, std::string* ssid_out) {
+ DCHECK(ssid_out);
+
++#if !defined(OS_BSD)
+ base::ScopedFD ioctl_socket(socket(AF_INET, SOCK_DGRAM, 0));
+ if (!ioctl_socket.is_valid()) {
+ // AF_INET is for IPv4, so it may fail for IPv6-only hosts even when there
+@@ -41,6 +40,7 @@ bool MaybeGetWifiSSID(const std::string& if_name, std:
+ ssid_out->assign(ssid);
+ return true;
+ }
++#endif
+ return false;
+ }
+
diff --git a/www/iridium/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc b/www/iridium/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
new file mode 100644
index 000000000000..9b007ae67c87
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_router_providers_wired__display_wired__display__media__route__provider.cc
@@ -0,0 +1,23 @@
+--- chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc.orig 2019-09-09 21:55:09 UTC
++++ chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.cc
+@@ -112,6 +112,12 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ bool incognito,
+ CreateRouteCallback callback) {
+ DCHECK(!base::Contains(presentations_, presentation_id));
++#if defined(OS_BSD)
++ std::move(callback).Run(base::nullopt, nullptr,
++ std::string("Not implemented"),
++ RouteRequestResult::UNKNOWN_ERROR);
++ return;
++#else
+ base::Optional<Display> display = GetDisplayBySinkId(sink_id);
+ if (!display) {
+ std::move(callback).Run(base::nullopt, nullptr,
+@@ -138,6 +144,7 @@ void WiredDisplayMediaRouteProvider::CreateRoute(
+ std::move(callback).Run(route, nullptr, base::nullopt,
+ RouteRequestResult::OK);
+ NotifyRouteObservers();
++#endif
+ }
+
+ void WiredDisplayMediaRouteProvider::JoinRoute(
diff --git a/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
new file mode 100644
index 000000000000..76fb8bab73c0
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__event__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_event_log_uploader.cc.orig 2020-02-03 21:52:40 UTC
++++ chrome/browser/media/webrtc/webrtc_event_log_uploader.cc
+@@ -38,7 +38,7 @@ constexpr size_t kExpectedMimeOverheadBytes = 1000; /
+ const char kProduct[] = "Chrome";
+ #elif defined(OS_MACOSX)
+ const char kProduct[] = "Chrome_Mac";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ const char kProduct[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char kProduct[] = "Chrome_Android";
diff --git a/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
new file mode 100644
index 000000000000..c1ca8fcabf4e
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__log__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/media/webrtc/webrtc_log_uploader.cc.orig 2019-10-21 19:06:22 UTC
++++ chrome/browser/media/webrtc/webrtc_log_uploader.cc
+@@ -358,6 +358,8 @@ void WebRtcLogUploader::SetupMultipart(
+ const char product[] = "Chrome_Android";
+ #elif defined(OS_CHROMEOS)
+ const char product[] = "Chrome_ChromeOS";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc
new file mode 100644
index 000000000000..981d24078676
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.cc
@@ -0,0 +1,33 @@
+--- chrome/browser/media/webrtc/webrtc_logging_controller.cc.orig 2020-03-16 18:39:44 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_controller.cc
+@@ -24,10 +24,10 @@
+ #include "content/public/browser/render_process_host.h"
+ #include "services/service_manager/public/cpp/connector.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "content/public/browser/child_process_security_policy.h"
+ #include "storage/browser/file_system/isolated_context.h"
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ using webrtc_event_logging::WebRtcEventLogManager;
+
+@@ -270,7 +270,7 @@ void WebRtcLoggingController::StartEventLogging(
+ web_app_id, callback);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ void WebRtcLoggingController::GetLogsDirectory(
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback) {
+@@ -315,7 +315,7 @@ void WebRtcLoggingController::GrantLogsDirectoryAccess
+ base::SequencedTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::BindOnce(callback, file_system.id(), registered_name));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ void WebRtcLoggingController::OnRtpPacket(
+ std::unique_ptr<uint8_t[]> packet_header,
diff --git a/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h
new file mode 100644
index 000000000000..e3ef33fc829f
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_media_webrtc_webrtc__logging__controller.h
@@ -0,0 +1,36 @@
+--- chrome/browser/media/webrtc/webrtc_logging_controller.h.orig 2019-10-30 15:50:11 UTC
++++ chrome/browser/media/webrtc/webrtc_logging_controller.h
+@@ -129,13 +129,13 @@ class WebRtcLoggingController
+ size_t web_app_id,
+ const StartEventLoggingCallback& callback);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Ensures that the WebRTC Logs directory exists and then grants render
+ // process access to the 'WebRTC Logs' directory, and invokes |callback| with
+ // the ids necessary to create a DirectoryEntry object.
+ void GetLogsDirectory(const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // chrome::mojom::WebRtcLoggingClient methods:
+ void OnAddMessages(
+@@ -188,7 +188,7 @@ class WebRtcLoggingController
+ bool success,
+ const std::string& error_message);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Grants the render process access to the 'WebRTC Logs' directory, and
+ // invokes |callback| with the ids necessary to create a DirectoryEntry
+ // object. If the |logs_path| couldn't be created or found, |error_callback|
+@@ -197,7 +197,7 @@ class WebRtcLoggingController
+ const LogsDirectoryCallback& callback,
+ const LogsDirectoryErrorCallback& error_callback,
+ const base::FilePath& logs_path);
+-#endif // defined(OS_LINUX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ static base::FilePath GetLogDirectoryAndEnsureExists(
+ const base::FilePath& browser_context_directory_path);
diff --git a/www/iridium/files/patch-chrome_browser_memory__details.cc b/www/iridium/files/patch-chrome_browser_memory__details.cc
new file mode 100644
index 000000000000..2c4302248909
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_memory__details.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/memory_details.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/memory_details.cc
+@@ -38,7 +38,7 @@
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/zygote_host_linux.h"
+ #endif
+
+@@ -336,7 +336,7 @@ void MemoryDetails::CollectChildInfoOnUIThread() {
+ process.titles.push_back(title);
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ if (service_manager::ZygoteHost::GetInstance()->IsZygotePid(process.pid)) {
+ process.process_type = content::PROCESS_TYPE_ZYGOTE;
+ }
diff --git a/www/iridium/files/patch-chrome_browser_memory__details__linux.cc b/www/iridium/files/patch-chrome_browser_memory__details__linux.cc
new file mode 100644
index 000000000000..1112bd81ffcc
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_memory__details__linux.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/memory_details_linux.cc.orig 2019-03-11 22:00:53 UTC
++++ chrome/browser/memory_details_linux.cc
+@@ -72,8 +72,10 @@ ProcessData GetProcessDataMemoryInformation(
+
+ std::unique_ptr<base::ProcessMetrics> metrics(
+ base::ProcessMetrics::CreateProcessMetrics(pid));
++#if !defined(OS_BSD)
+ pmi.num_open_fds = metrics->GetOpenFdCount();
+ pmi.open_fds_soft_limit = metrics->GetOpenFdSoftLimit();
++#endif
+
+ process_data.processes.push_back(pmi);
+ }
diff --git a/www/iridium/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc b/www/iridium/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
new file mode 100644
index 000000000000..3bb3c96f9188
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_metrics_bluetooth__available__utility.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/metrics/bluetooth_available_utility.cc.orig 2019-06-04 18:55:17 UTC
++++ chrome/browser/metrics/bluetooth_available_utility.cc
+@@ -76,8 +76,10 @@ void ReportBluetoothAvailability() {
+ return;
+ }
+
++#if !defined(OS_BSD)
+ device::BluetoothAdapterFactory::Get().GetAdapter(
+ base::BindOnce(&OnGetAdapter));
++#endif
+ }
+
+ } // namespace bluetooth_utility
diff --git a/www/iridium/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc b/www/iridium/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
new file mode 100644
index 000000000000..dd487ab9da88
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_metrics_chrome__browser__main__extra__parts__metrics.cc
@@ -0,0 +1,21 @@
+--- chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc.orig 2019-09-09 21:55:09 UTC
++++ chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+@@ -47,7 +47,9 @@
+
+ #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include <gnu/libc-version.h>
++#endif
+
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/strings/string_split.h"
+ #include "base/strings/string_util.h"
+@@ -55,7 +57,7 @@
+ #if defined(USE_X11)
+ #include "ui/base/x/x11_util.h"
+ #endif
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(USE_OZONE) || defined(USE_X11)
+ #include "ui/events/devices/device_data_manager.h"
diff --git a/www/iridium/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc b/www/iridium/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
new file mode 100644
index 000000000000..a1c3fbc542a8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_metrics_chrome__metrics__service__client.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/metrics/chrome_metrics_service_client.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/metrics/chrome_metrics_service_client.cc
+@@ -718,11 +718,11 @@ void ChromeMetricsServiceClient::RegisterMetricsServic
+ #endif // defined(OS_WIN)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics_service_->RegisterMetricsProvider(
+ std::make_unique<DesktopPlatformFeaturesMetricsProvider>());
+ #endif // defined(OS_WIN) || defined(OS_MACOSX) || \
+- // (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ plugin_metrics_provider_ = new PluginMetricsProvider(local_state);
+@@ -980,7 +980,7 @@ bool ChromeMetricsServiceClient::RegisterForProfileEve
+ }
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // This creates the DesktopProfileSessionDurationsServices if it didn't exist
+ // already.
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetForBrowserContext(
diff --git a/www/iridium/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc b/www/iridium/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
new file mode 100644
index 000000000000..7994a85f8cec
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_metrics_process__memory__metrics__emitter.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/metrics/process_memory_metrics_emitter.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/metrics/process_memory_metrics_emitter.cc
+@@ -438,7 +438,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+
+ builder->SetPrivateMemoryFootprint(pmd.os_dump().private_footprint_kb / 1024);
+ builder->SetSharedMemoryFootprint(pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ builder->SetPrivateSwapFootprint(pmd.os_dump().private_footprint_swap_kb /
+ 1024);
+ #endif
+@@ -461,7 +461,7 @@ void EmitProcessUmaAndUkm(const GlobalMemoryDump::Proc
+ MEMORY_METRICS_HISTOGRAM_MB(std::string(kMemoryHistogramPrefix) +
+ process_name + ".SharedMemoryFootprint",
+ pmd.os_dump().shared_footprint_kb / 1024);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ MEMORY_METRICS_HISTOGRAM_MB(std::string(kMemoryHistogramPrefix) +
+ process_name + ".PrivateSwapFootprint",
+ pmd.os_dump().private_footprint_swap_kb / 1024);
diff --git a/www/iridium/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc b/www/iridium/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc
new file mode 100644
index 000000000000..21db21328ad3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_native__file__system_chrome__native__file__system__permission__context.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
+@@ -144,7 +144,7 @@ const struct {
+ {base::DIR_APP_DATA, nullptr, true},
+ {base::DIR_HOME, FILE_PATH_LITERAL("Library"), true},
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux also block access to devices via /dev, as well as security
+ // sensitive data in /sys and /proc.
+ {kNoBasePathKey, FILE_PATH_LITERAL("/dev"), true},
diff --git a/www/iridium/files/patch-chrome_browser_net_system__network__context__manager.cc b/www/iridium/files/patch-chrome_browser_net_system__network__context__manager.cc
new file mode 100644
index 000000000000..aace9f122f49
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_net_system__network__context__manager.cc
@@ -0,0 +1,64 @@
+--- chrome/browser/net/system_network_context_manager.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/net/system_network_context_manager.cc
+@@ -79,11 +79,11 @@
+ #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/common/chrome_paths_internal.h"
+ #include "chrome/grit/chromium_strings.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ #include "content/public/common/network_service_util.h"
+@@ -160,10 +160,10 @@ network::mojom::HttpAuthDynamicParamsPtr CreateHttpAut
+ auth_dynamic_params->enable_negotiate_port =
+ local_state->GetBoolean(prefs::kEnableAuthNegotiatePort);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ auth_dynamic_params->delegate_by_kdc_policy =
+ local_state->GetBoolean(prefs::kAuthNegotiateDelegateByKdcPolicy);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ auth_dynamic_params->ntlm_v2_enabled =
+@@ -429,10 +429,10 @@ SystemNetworkContextManager::SystemNetworkContextManag
+ pref_change_registrar_.Add(prefs::kEnableAuthNegotiatePort,
+ auth_pref_callback);
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ pref_change_registrar_.Add(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ auth_pref_callback);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ pref_change_registrar_.Add(prefs::kNtlmV2Enabled, auth_pref_callback);
+@@ -485,10 +485,10 @@ void SystemNetworkContextManager::RegisterPrefs(PrefRe
+ registry->RegisterStringPref(prefs::kAuthServerWhitelist, std::string());
+ registry->RegisterStringPref(prefs::kAuthNegotiateDelegateWhitelist,
+ std::string());
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ registry->RegisterBooleanPref(prefs::kAuthNegotiateDelegateByKdcPolicy,
+ false);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ registry->RegisterBooleanPref(
+@@ -610,7 +610,7 @@ void SystemNetworkContextManager::OnNetworkServiceCrea
+ insecure_stub_resolver_enabled, secure_dns_mode,
+ std::move(dns_over_https_servers));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ const base::CommandLine& command_line =
+ *base::CommandLine::ForCurrentProcess();
+
diff --git a/www/iridium/files/patch-chrome_browser_notifications_notification__display__service__impl.cc b/www/iridium/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
new file mode 100644
index 000000000000..7688028b44a2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_notifications_notification__display__service__impl.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/notifications/notification_display_service_impl.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/notifications/notification_display_service_impl.cc
+@@ -33,7 +33,7 @@
+ #include "chrome/browser/notifications/notification_platform_bridge_message_center.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -122,7 +122,7 @@ NotificationDisplayServiceImpl::NotificationDisplaySer
+ AddNotificationHandler(NotificationHandler::Type::WEB_PERSISTENT,
+ std::make_unique<PersistentNotificationHandler>());
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ AddNotificationHandler(
+ NotificationHandler::Type::SEND_TAB_TO_SELF,
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(
diff --git a/www/iridium/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc b/www/iridium/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
new file mode 100644
index 000000000000..b9786e7622f2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_password__manager_chrome__password__manager__client.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/password_manager/chrome_password_manager_client.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/password_manager/chrome_password_manager_client.cc
+@@ -88,7 +88,11 @@
+ #include "net/base/url_util.h"
+ #include "net/cert/cert_status_flags.h"
+ #include "services/metrics/public/cpp/ukm_recorder.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/url_constants.h"
+
+ #if BUILDFLAG(FULL_SAFE_BROWSING)
diff --git a/www/iridium/files/patch-chrome_browser_password__manager_password__store__factory.cc b/www/iridium/files/patch-chrome_browser_password__manager_password__store__factory.cc
new file mode 100644
index 000000000000..889049cf9109
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_password__manager_password__store__factory.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/password_manager/password_store_factory.cc.orig 2019-10-21 19:06:22 UTC
++++ chrome/browser/password_manager/password_store_factory.cc
+@@ -181,7 +181,7 @@ PasswordStoreFactory::BuildServiceInstanceFor(
+ base::TimeDelta::FromSeconds(20));
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<password_manager::PasswordStoreSigninNotifier> notifier =
+ std::make_unique<password_manager::PasswordStoreSigninNotifierImpl>(
+ IdentityManagerFactory::GetForProfile(profile));
diff --git a/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc b/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
new file mode 100644
index 000000000000..98bd40401783
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/performance_monitor/process_metrics_history.cc.orig 2019-10-21 19:06:22 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.cc
+@@ -47,7 +47,7 @@ void ProcessMetricsHistory::SampleMetrics() {
+ #if defined(OS_WIN)
+ disk_usage_ = process_metrics_->GetDiskUsageBytesPerSecond();
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ idle_wakeups_ = process_metrics_->GetIdleWakeupsPerSecond();
+ #endif
+ #if defined(OS_MACOSX)
+@@ -88,7 +88,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kDiskUsageHistogramMin, kDiskUsageHistogramMax,
+ kDiskUsageHistogramBucketCount);
+ #endif
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.BrowserProcess", idle_wakeups_);
+ #endif
+@@ -109,7 +109,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.RendererProcess",
+ true);
+ }
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000(
+ "PerformanceMonitor.IdleWakeups.RendererProcess", idle_wakeups_);
+ #endif
+@@ -129,7 +129,7 @@ void ProcessMetricsHistory::RunPerformanceTriggers() {
+ kHistogramBucketCount);
+ if (cpu_usage_ > kHighCPUUtilizationThreshold)
+ UMA_HISTOGRAM_BOOLEAN("PerformanceMonitor.HighCPU.GPUProcess", true);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ UMA_HISTOGRAM_COUNTS_10000("PerformanceMonitor.IdleWakeups.GPUProcess",
+ idle_wakeups_);
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.h b/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
new file mode 100644
index 000000000000..cb195b6b0cf5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_performance__monitor_process__metrics__history.h
@@ -0,0 +1,11 @@
+--- chrome/browser/performance_monitor/process_metrics_history.h.orig 2019-06-04 18:55:17 UTC
++++ chrome/browser/performance_monitor/process_metrics_history.h
+@@ -72,7 +72,7 @@ class ProcessMetricsHistory {
+ uint64_t disk_usage_ = 0;
+ #endif
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ int idle_wakeups_ = 0;
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc b/www/iridium/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
new file mode 100644
index 000000000000..c45a5b0d8d92
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_plugins_plugin__info__host__impl.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugin_info_host_impl.cc.orig 2020-02-03 21:52:40 UTC
++++ chrome/browser/plugins/plugin_info_host_impl.cc
+@@ -382,7 +382,7 @@ void PluginInfoHostImpl::ComponentPluginLookupDone(
+ std::unique_ptr<component_updater::ComponentInfo> cus_plugin_info) {
+ if (cus_plugin_info) {
+ output->status = chrome::mojom::PluginStatus::kComponentUpdateRequired;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (cus_plugin_info->version != base::Version("0")) {
+ output->status = chrome::mojom::PluginStatus::kRestartRequired;
+ }
diff --git a/www/iridium/files/patch-chrome_browser_plugins_plugins__resource__service.cc b/www/iridium/files/patch-chrome_browser_plugins_plugins__resource__service.cc
new file mode 100644
index 000000000000..35342997a152
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_plugins_plugins__resource__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/plugins/plugins_resource_service.cc.orig 2020-02-03 21:52:40 UTC
++++ chrome/browser/plugins/plugins_resource_service.cc
+@@ -62,7 +62,7 @@ GURL GetPluginsServerURL() {
+ filename = "plugins_win.json";
+ #elif defined(OS_CHROMEOS)
+ filename = "plugins_chromeos.json";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ filename = "plugins_linux.json";
+ #elif defined(OS_MACOSX)
+ filename = "plugins_mac.json";
diff --git a/www/iridium/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc b/www/iridium/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc
new file mode 100644
index 000000000000..b79d0d1d66d8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_policy_browser__signin__policy__handler.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/browser_signin_policy_handler.cc.orig 2019-09-16 07:21:37 UTC
++++ chrome/browser/policy/browser_signin_policy_handler.cc
+@@ -39,7 +39,7 @@ void BrowserSigninPolicyHandler::ApplyPolicySettings(c
+ }
+ switch (static_cast<BrowserSigninMode>(int_value)) {
+ case BrowserSigninMode::kForced:
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ prefs->SetValue(prefs::kForceBrowserSignin, base::Value(true));
+ #endif
+ FALLTHROUGH;
diff --git a/www/iridium/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc b/www/iridium/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
new file mode 100644
index 000000000000..8f82b5f2a44d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_policy_configuration__policy__handler__list__factory.cc
@@ -0,0 +1,43 @@
+--- chrome/browser/policy/configuration_policy_handler_list_factory.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/policy/configuration_policy_handler_list_factory.cc
+@@ -118,7 +118,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -355,11 +355,11 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ { key::kWebComponentsV0Enabled,
+ prefs::kWebComponentsV0Enabled,
+ base::Value::Type::BOOLEAN },
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ { key::kAuthNegotiateDelegateByKdcPolicy,
+ prefs::kAuthNegotiateDelegateByKdcPolicy,
+ base::Value::Type::BOOLEAN },
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #if defined(OS_POSIX)
+ { key::kNtlmV2Enabled,
+ prefs::kNtlmV2Enabled,
+@@ -1163,7 +1163,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ prefs::kExternalProtocolDialogShowAlwaysOpenCheckbox,
+ base::Value::Type::BOOLEAN },
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ { key::kAlternativeBrowserPath,
+ browser_switcher::prefs::kAlternativeBrowserPath,
+ base::Value::Type::STRING },
+@@ -1203,7 +1203,7 @@ const PolicyToPreferenceMapEntry kSimplePolicyMap[] =
+ browser_switcher::prefs::kChromeParameters,
+ base::Value::Type::LIST },
+ #endif
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ { key::kBrowserGuestModeEnforced,
+ prefs::kBrowserGuestModeEnforced,
+ base::Value::Type::BOOLEAN },
diff --git a/www/iridium/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc b/www/iridium/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
new file mode 100644
index 000000000000..816eeffdc37e
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_policy_policy__prefs__browsertest.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/policy/policy_prefs_browsertest.cc.orig 2020-02-03 21:52:40 UTC
++++ chrome/browser/policy/policy_prefs_browsertest.cc
+@@ -250,6 +250,8 @@ class PolicyTestCase {
+ const std::string os("chromeos");
+ #elif defined(OS_LINUX)
+ const std::string os("linux");
++#elif defined(OS_FREEBSD)
++ const std::string os("freebsd");
+ #else
+ #error "Unknown platform"
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_prefs_browser__prefs.cc b/www/iridium/files/patch-chrome_browser_prefs_browser__prefs.cc
new file mode 100644
index 000000000000..7f9fbfc4cd49
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_prefs_browser__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/prefs/browser_prefs.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/prefs/browser_prefs.cc
+@@ -360,7 +360,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/browser_switcher/browser_switcher_prefs.h"
+ #endif
+
+@@ -1022,7 +1022,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySync
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ browser_switcher::BrowserSwitcherPrefs::RegisterProfilePrefs(registry);
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc b/www/iridium/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
new file mode 100644
index 000000000000..0fc02f402f9c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_prefs_pref__service__incognito__whitelist.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/prefs/pref_service_incognito_whitelist.cc.orig 2019-12-16 21:50:42 UTC
++++ chrome/browser/prefs/pref_service_incognito_whitelist.cc
+@@ -187,7 +187,7 @@ const char* const kPersistentPrefNames[] = {
+ prefs::kShowFullscreenToolbar,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Toggleing custom frames affects all open windows in the profile, hence
+ // should be written to the regular profile when changed in incognito mode.
+ prefs::kUseCustomChromeFrame,
diff --git a/www/iridium/files/patch-chrome_browser_process__singleton__posix.cc b/www/iridium/files/patch-chrome_browser_process__singleton__posix.cc
new file mode 100644
index 000000000000..f8a7db8e85a3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_process__singleton__posix.cc
@@ -0,0 +1,34 @@
+--- chrome/browser/process_singleton_posix.cc.orig 2019-10-21 19:06:22 UTC
++++ chrome/browser/process_singleton_posix.cc
+@@ -95,11 +95,11 @@
+ #include "net/base/network_interfaces.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/process_singleton_dialog_linux.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -296,7 +296,7 @@ bool DisplayProfileInUseError(const base::FilePath& lo
+ if (g_disable_prompt)
+ return g_user_opted_unlock_in_use_profile;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::string16 relaunch_button_text = l10n_util::GetStringUTF16(
+ IDS_PROFILE_IN_USE_LINUX_RELAUNCH);
+ return ShowProcessSingletonDialog(error, relaunch_button_text);
+@@ -872,7 +872,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::Notif
+ SendRemoteProcessInteractionResultHistogram(REMOTE_PROCESS_SHUTTING_DOWN);
+ return PROCESS_NONE;
+ } else if (strncmp(buf, kACKToken, base::size(kACKToken) - 1) == 0) {
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Likely NULL in unit tests.
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui)
diff --git a/www/iridium/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc b/www/iridium/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
new file mode 100644
index 000000000000..a2ac58994f69
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_profiles_chrome__browser__main__extra__parts__profiles.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+@@ -295,7 +295,7 @@ void ChromeBrowserMainExtraPartsProfiles::
+ if (base::FeatureList::IsEnabled(media::kUseMediaHistoryStore))
+ media_history::MediaHistoryKeyedServiceFactory::GetInstance();
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopProfileSessionDurationsServiceFactory::GetInstance();
+ #endif
+ ModelTypeStoreServiceFactory::GetInstance();
diff --git a/www/iridium/files/patch-chrome_browser_profiles_profile__attributes__entry.cc b/www/iridium/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
new file mode 100644
index 000000000000..48f0d0c5ddd2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_profiles_profile__attributes__entry.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/profiles/profile_attributes_entry.cc.orig 2020-03-16 18:39:44 UTC
++++ chrome/browser/profiles/profile_attributes_entry.cc
+@@ -108,7 +108,7 @@ void ProfileAttributesEntry::Initialize(ProfileInfoCac
+ if (is_force_signin_enabled_) {
+ if (!IsAuthenticated())
+ is_force_signin_profile_locked_ = true;
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ } else if (IsSigninRequired()) {
+ // Profiles that require signin in the absence of an enterprise policy are
+ // left-overs from legacy supervised users. Just unlock them, so users can
diff --git a/www/iridium/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc b/www/iridium/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
new file mode 100644
index 000000000000..4a46416a7065
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_renderer__context__menu_render__view__context__menu.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_context_menu/render_view_context_menu.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
+@@ -1702,7 +1702,7 @@ void RenderViewContextMenu::AppendEditableItems() {
+ // 'Undo' and 'Redo' for text input with no suggestions and no text selected.
+ // We make an exception for OS X as context clicking will select the closest
+ // word. In this case both items are always shown.
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_UNDO,
+ IDS_CONTENT_CONTEXT_UNDO);
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_REDO,
+@@ -1744,7 +1744,7 @@ void RenderViewContextMenu::AppendLanguageSettings() {
+ if (!use_spelling)
+ return;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ menu_model_.AddItemWithStringId(IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS,
+ IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS);
+ #else
+@@ -2083,7 +2083,7 @@ bool RenderViewContextMenu::IsCommandIdEnabled(int id)
+ case IDC_CHECK_SPELLING_WHILE_TYPING:
+ return prefs->GetBoolean(spellcheck::prefs::kSpellCheckEnable);
+
+-#if !defined(OS_MACOSX) && defined(OS_POSIX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD) && defined(OS_POSIX)
+ // TODO(suzhe): this should not be enabled for password fields.
+ case IDC_INPUT_METHODS_MENU:
+ return true;
diff --git a/www/iridium/files/patch-chrome_browser_renderer__preferences__util.cc b/www/iridium/files/patch-chrome_browser_renderer__preferences__util.cc
new file mode 100644
index 000000000000..db4c5e81a31d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_renderer__preferences__util.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/renderer_preferences_util.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/renderer_preferences_util.cc
+@@ -31,7 +31,7 @@
+ #include "ui/base/cocoa/defaults_utils.h"
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "chrome/browser/themes/theme_service.h"
+ #include "chrome/browser/themes/theme_service_factory.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+@@ -146,7 +146,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ prefs->caret_blink_interval = interval;
+ #endif
+
+-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ views::LinuxUI* linux_ui = views::LinuxUI::instance();
+ if (linux_ui) {
+ if (ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme()) {
+@@ -165,7 +165,7 @@ void UpdateFromSystemSettings(blink::mojom::RendererPr
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_BSD)
+ content::UpdateFontRendererPreferencesFromSystemSettings(prefs);
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py b/www/iridium/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
new file mode 100644
index 000000000000..de779e766d99
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_resources_safe__browsing_gen__file__type__proto.py
@@ -0,0 +1,19 @@
+--- chrome/browser/resources/safe_browsing/gen_file_type_proto.py.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/resources/safe_browsing/gen_file_type_proto.py
+@@ -31,6 +31,7 @@ def PlatformTypes():
+ "android": download_file_types_pb2.DownloadFileType.PLATFORM_ANDROID,
+ "chromeos": download_file_types_pb2.DownloadFileType.PLATFORM_CHROME_OS,
+ "linux": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
++ "bsd": download_file_types_pb2.DownloadFileType.PLATFORM_LINUX,
+ "mac": download_file_types_pb2.DownloadFileType.PLATFORM_MAC,
+ "win": download_file_types_pb2.DownloadFileType.PLATFORM_WINDOWS,
+ }
+@@ -169,7 +170,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenera
+ 'Outfile must have a %d for version and %s for platform.')
+ parser.add_option('-t', '--type',
+ help='The platform type. One of android, chromeos, ' +
+- 'linux, mac, win')
++ 'linux, bsd, mac, win')
+
+ def AddExtraCommandLineArgsForVirtualEnvRun(self, opts, command):
+ if opts.type is not None:
diff --git a/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
new file mode 100644
index 000000000000..6512d38fe080
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__browser__proxy.js
@@ -0,0 +1,20 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js.orig 2019-10-21 19:06:23 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_browser_proxy.js
+@@ -19,7 +19,7 @@ cr.define('settings', function() {
+
+ useDefaultTheme() {}
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ useSystemTheme() {}
+
+ // </if>
+@@ -59,7 +59,7 @@ cr.define('settings', function() {
+ chrome.send('useDefaultTheme');
+ }
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /** @override */
+ useSystemTheme() {
+ chrome.send('useSystemTheme');
diff --git a/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
new file mode 100644
index 000000000000..1470f1f0d2c0
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.html
@@ -0,0 +1,29 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.html.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.html
+@@ -49,7 +49,7 @@
+ <cr-link-row class="first" hidden="[[!pageVisibility.setTheme]]"
+ label="$i18n{themes}" sub-label="[[themeSublabel_]]"
+ on-click="openThemeUrl_" external></cr-link-row>
+-<if expr="not is_linux or chromeos">
++<if expr="not is_posix or chromeos">
+ <template is="dom-if" if="[[prefs.extensions.theme.id.value]]">
+ <div class="separator"></div>
+ <cr-button id="useDefault" on-click="onUseDefaultTap_">
+@@ -57,7 +57,7 @@
+ </cr-button>
+ </template>
+ </if>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <div class="settings-row continuation"
+ hidden="[[!showThemesSecondary_(
+ prefs.extensions.theme.id.value, useSystemTheme_)]]"
+@@ -120,7 +120,7 @@
+ pref="{{prefs.bookmark_bar.show_on_all_tabs}}"
+ label="$i18n{showBookmarksBar}">
+ </settings-toggle-button>
+-<if expr="is_linux and not chromeos">
++<if expr="is_posix and not chromeos">
+ <settings-toggle-button
+ class$="[[getFirst_(pageVisibility.bookmarksBar)]]"
+ pref="{{prefs.browser.custom_chrome_frame}}"
diff --git a/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
new file mode 100644
index 000000000000..a080e83db65c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_resources_settings_appearance__page_appearance__page.js
@@ -0,0 +1,33 @@
+--- chrome/browser/resources/settings/appearance_page/appearance_page.js.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/resources/settings/appearance_page/appearance_page.js
+@@ -104,7 +104,7 @@ Polymer({
+ 'defaultFontSizeChanged_(prefs.webkit.webprefs.default_font_size.value)',
+ 'themeChanged_(prefs.extensions.theme.id.value, useSystemTheme_)',
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ // NOTE: this pref only exists on Linux.
+ 'useSystemThemePrefChanged_(prefs.extensions.theme.use_system.value)',
+ // </if>
+@@ -190,7 +190,7 @@ Polymer({
+ this.appearanceBrowserProxy_.useDefaultTheme();
+ },
+
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ /**
+ * @param {boolean} useSystemTheme
+ * @private
+@@ -267,10 +267,10 @@ Polymer({
+ }
+
+ let i18nId;
+- // <if expr="is_linux and not chromeos">
++ // <if expr="is_bsd and not chromeos">
+ i18nId = useSystemTheme ? 'systemTheme' : 'classicTheme';
+ // </if>
+- // <if expr="not is_linux or chromeos">
++ // <if expr="not is_bsd or chromeos">
+ i18nId = 'chooseFromWebStore';
+ // </if>
+ this.themeSublabel_ = this.i18n(i18nId);
diff --git a/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc b/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
new file mode 100644
index 000000000000..2d242ce878e6
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__handler__util.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc.orig 2019-06-04 18:55:18 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_handler_util.cc
+@@ -8,7 +8,12 @@
+
+ #include "base/hash/hash.h"
+ #include "base/logging.h"
++//XXX(rene) needs shim headers?
++#if defined(USE_SYSTEM_PROTOBUF)
++#include <google/protobuf/message_lite.h>
++#else
+ #include "third_party/protobuf/src/google/protobuf/message_lite.h"
++#endif
+
+ namespace safe_browsing {
+
diff --git a/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc b/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
new file mode 100644
index 000000000000..0690a0795218
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_safe__browsing_incident__reporting_incident__reporting__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc.orig 2020-04-10 00:39:09 UTC
++++ chrome/browser/safe_browsing/incident_reporting/incident_reporting_service.cc
+@@ -674,7 +674,7 @@ void IncidentReportingService::OnEnvironmentDataCollec
+ environment_collection_pending_ = false;
+
+ // Process::Current().CreationTime() is missing on some platforms.
+-#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeDelta uptime =
+ first_incident_time_ - base::Process::Current().CreationTime();
+ environment_data->mutable_process()->set_uptime_msec(uptime.InMilliseconds());
diff --git a/www/iridium/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc b/www/iridium/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc
new file mode 100644
index 000000000000..bf751427bd2a
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_search_search__suggest_search__suggest__service.cc
@@ -0,0 +1,14 @@
+--- chrome/browser/search/search_suggest/search_suggest_service.cc.orig 2019-12-16 21:50:43 UTC
++++ chrome/browser/search/search_suggest/search_suggest_service.cc
+@@ -20,7 +20,11 @@
+ #include "components/prefs/scoped_user_pref_update.h"
+ #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
+ #include "components/signin/public/identity_manager/identity_manager.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/www/iridium/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc b/www/iridium/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
new file mode 100644
index 000000000000..f8a2b34d89f3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_send__tab__to__self_receiving__ui__handler__registry.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc.orig 2019-06-07 20:47:39 UTC
++++ chrome/browser/send_tab_to_self/receiving_ui_handler_registry.cc
+@@ -11,7 +11,7 @@
+ #include "chrome/browser/profiles/profile.h"
+ #include "chrome/browser/send_tab_to_self/receiving_ui_handler.h"
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "chrome/browser/send_tab_to_self/desktop_notification_handler.h"
+ #endif
+
+@@ -32,7 +32,7 @@ ReceivingUiHandlerRegistry* ReceivingUiHandlerRegistry
+ // Instantiates all the handlers relevant to this platform.
+ void ReceivingUiHandlerRegistry::InstantiatePlatformSpecificHandlers(
+ Profile* profile) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ applicable_handlers_.push_back(
+ std::make_unique<send_tab_to_self::DesktopNotificationHandler>(profile));
+ #elif defined(OS_ANDROID)
diff --git a/www/iridium/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc b/www/iridium/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
new file mode 100644
index 000000000000..d20b30112256
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_send__tab__to__self_send__tab__to__self__client__service.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc.orig 2019-07-29 18:57:56 UTC
++++ chrome/browser/send_tab_to_self/send_tab_to_self_client_service.cc
+@@ -41,7 +41,7 @@ void SendTabToSelfClientService::SendTabToSelfModelLoa
+ void SendTabToSelfClientService::EntriesAddedRemotely(
+ const std::vector<const SendTabToSelfEntry*>& new_entries) {
+ for (const std::unique_ptr<ReceivingUiHandler>& handler : GetHandlers()) {
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ // Only respond to notifications corresponding to this service's profile
+ // for these OSes; mobile does not have a Profile.
+ // Cast note: on desktop, handlers are guaranteed to be the derived class
diff --git a/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.cc b/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.cc
new file mode 100644
index 000000000000..e1b209c81c94
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/sharing/shared_clipboard/feature_flags.cc.orig 2020-02-07 12:34:27 UTC
++++ chrome/browser/sharing/shared_clipboard/feature_flags.cc
+@@ -10,12 +10,12 @@ const base::Feature kSharedClipboardReceiver{"SharedCl
+ const base::Feature kSharedClipboardUI{"SharedClipboardUI",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const base::Feature kRemoteCopyReceiver{"RemoteCopyReceiver",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+ const base::FeatureParam<std::string> kRemoteCopyAllowedOrigins = {
+ &kRemoteCopyReceiver, "RemoteCopyAllowedOrigins", ""};
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
diff --git a/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.h b/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.h
new file mode 100644
index 000000000000..6a0e3079731b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_shared__clipboard_feature__flags.h
@@ -0,0 +1,19 @@
+--- chrome/browser/sharing/shared_clipboard/feature_flags.h.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/sharing/shared_clipboard/feature_flags.h
+@@ -17,14 +17,14 @@ extern const base::Feature kSharedClipboardReceiver;
+ // Feature to allow shared clipboard gets processed.
+ extern const base::Feature kSharedClipboardUI;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // Feature to enable handling remote copy messages.
+ extern const base::Feature kRemoteCopyReceiver;
+
+ // List of allowed origins to fetch images from, comma separated.
+ extern const base::FeatureParam<std::string> kRemoteCopyAllowedOrigins;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #endif // CHROME_BROWSER_SHARING_SHARED_CLIPBOARD_FEATURE_FLAGS_H_
diff --git a/www/iridium/files/patch-chrome_browser_sharing_sharing__device__registration.cc b/www/iridium/files/patch-chrome_browser_sharing_sharing__device__registration.cc
new file mode 100644
index 000000000000..0c3723e85860
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_sharing__device__registration.cc
@@ -0,0 +1,24 @@
+--- chrome/browser/sharing/sharing_device_registration.cc.orig 2020-03-26 18:39:48 UTC
++++ chrome/browser/sharing/sharing_device_registration.cc
+@@ -325,7 +325,7 @@ bool SharingDeviceRegistration::IsSmsFetcherSupported(
+ }
+
+ bool SharingDeviceRegistration::IsRemoteCopySupported() const {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ return base::FeatureList::IsEnabled(kRemoteCopyReceiver);
+ #endif
+@@ -334,10 +334,10 @@ bool SharingDeviceRegistration::IsRemoteCopySupported(
+ }
+
+ bool SharingDeviceRegistration::IsPeerConnectionSupported() const {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ return base::FeatureList::IsEnabled(kSharingPeerConnectionReceiver);
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ return false;
diff --git a/www/iridium/files/patch-chrome_browser_sharing_sharing__handler__registry__impl.cc b/www/iridium/files/patch-chrome_browser_sharing_sharing__handler__registry__impl.cc
new file mode 100644
index 000000000000..a9744c4a6a8d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_sharing__handler__registry__impl.cc
@@ -0,0 +1,32 @@
+--- chrome/browser/sharing/sharing_handler_registry_impl.cc.orig 2020-03-16 18:39:44 UTC
++++ chrome/browser/sharing/sharing_handler_registry_impl.cc
+@@ -24,10 +24,10 @@
+ #include "chrome/browser/sharing/webrtc/webrtc_message_handler.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ #include "chrome/browser/sharing/shared_clipboard/remote_copy_message_handler.h"
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ SharingHandlerRegistryImpl::SharingHandlerRegistryImpl(
+@@ -73,14 +73,14 @@ SharingHandlerRegistryImpl::SharingHandlerRegistryImpl
+ {chrome_browser_sharing::SharingMessage::kSharedClipboardMessage});
+ }
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ if (sharing_device_registration->IsRemoteCopySupported()) {
+ AddSharingHandler(
+ std::make_unique<RemoteCopyMessageHandler>(profile),
+ {chrome_browser_sharing::SharingMessage::kRemoteCopyMessage});
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if !defined(OS_ANDROID)
diff --git a/www/iridium/files/patch-chrome_browser_sharing_sharing__service.cc b/www/iridium/files/patch-chrome_browser_sharing_sharing__service.cc
new file mode 100644
index 000000000000..7e096df1b053
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_sharing__service.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/sharing/sharing_service.cc.orig 2020-03-30 09:34:43 UTC
++++ chrome/browser/sharing/sharing_service.cc
+@@ -30,7 +30,7 @@ namespace {
+ SharingMessageSender::DelegateType GetSendDelegateType(
+ const syncer::DeviceInfo& device,
+ const chrome_browser_sharing::SharingMessage& message) {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // Messages other than SharedClipboard are always sent via FCM.
+ if (message.payload_case() !=
+@@ -56,7 +56,7 @@ SharingMessageSender::DelegateType GetSendDelegateType
+ // logic once we wrap up the experiment and e.g. only send messages over a
+ // certain size via WebRTC.
+ return SharingMessageSender::DelegateType::kWebRtc;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // defined(OS_CHROMEOS)
+
+ // Only FCM is supported for non desktop OS.
diff --git a/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.cc b/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.cc
new file mode 100644
index 000000000000..cfac06c08d3d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.cc
@@ -0,0 +1,17 @@
+--- chrome/browser/sharing/webrtc/webrtc_flags.cc.orig 2020-03-30 09:35:30 UTC
++++ chrome/browser/sharing/webrtc/webrtc_flags.cc
+@@ -4,12 +4,12 @@
+
+ #include "chrome/browser/sharing/webrtc/webrtc_flags.h"
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const base::Feature kSharingPeerConnectionReceiver{
+ "SharingPeerConnectionReceiver", base::FEATURE_DISABLED_BY_DEFAULT};
+
+ const base::Feature kSharingPeerConnectionSender{
+ "SharingPeerConnectionSender", base::FEATURE_ENABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
diff --git a/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.h b/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.h
new file mode 100644
index 000000000000..fdec699052e2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sharing_webrtc_webrtc__flags.h
@@ -0,0 +1,19 @@
+--- chrome/browser/sharing/webrtc/webrtc_flags.h.orig 2020-03-30 09:35:47 UTC
++++ chrome/browser/sharing/webrtc/webrtc_flags.h
+@@ -8,14 +8,14 @@
+ #include "base/feature_list.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // Feature flag to enable receiving PeerConnection requests.
+ extern const base::Feature kSharingPeerConnectionReceiver;
+
+ // Feature flag to enable sending SharingMessage using PeerConnection.
+ extern const base::Feature kSharingPeerConnectionSender;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #endif // CHROME_BROWSER_SHARING_WEBRTC_WEBRTC_FLAGS_H_
diff --git a/www/iridium/files/patch-chrome_browser_signin_signin__util.cc b/www/iridium/files/patch-chrome_browser_signin_signin__util.cc
new file mode 100644
index 000000000000..4c230f4f53f2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_signin_signin__util.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/signin/signin_util.cc.orig 2019-12-16 21:50:43 UTC
++++ chrome/browser/signin/signin_util.cc
+@@ -34,7 +34,7 @@
+ #include "google_apis/gaia/gaia_auth_util.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include "chrome/browser/ui/browser_finder.h"
+ #include "chrome/browser/ui/browser_list.h"
+ #include "chrome/browser/ui/browser_list_observer.h"
diff --git a/www/iridium/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc b/www/iridium/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
new file mode 100644
index 000000000000..50ed28cdeb0a
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ssl_ssl__error__controller__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ssl/ssl_error_controller_client.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/ssl/ssl_error_controller_client.cc
+@@ -79,7 +79,7 @@ void LaunchDateAndTimeSettingsImpl() {
+ #if defined(OS_ANDROID)
+ chrome::android::OpenDateAndTimeSettings();
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ struct ClockCommand {
+ const char* const pathname;
+ const char* const argument;
+@@ -205,7 +205,7 @@ void SSLErrorControllerClient::Proceed() {
+ }
+
+ bool SSLErrorControllerClient::CanLaunchDateAndTimeSettings() {
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_WIN)
+ return true;
+ #else
diff --git a/www/iridium/files/patch-chrome_browser_sync_chrome__sync__client.cc b/www/iridium/files/patch-chrome_browser_sync_chrome__sync__client.cc
new file mode 100644
index 000000000000..155f4fdf474c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_sync_chrome__sync__client.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/sync/chrome_sync_client.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/sync/chrome_sync_client.cc
+@@ -442,7 +442,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ }
+ #endif // defined(OS_CHROMEOS)
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // Dictionary sync is enabled by default.
+ if (!disabled_types.Has(syncer::DICTIONARY)) {
+ controllers.push_back(
+@@ -450,7 +450,7 @@ ChromeSyncClient::CreateDataTypeControllers(syncer::Sy
+ syncer::DICTIONARY, model_type_store_factory,
+ GetSyncableServiceForType(syncer::DICTIONARY), dump_stack));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ if (arc::IsArcAllowedForProfile(profile_) &&
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.cc b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.cc
new file mode 100644
index 000000000000..1e077a7ff46c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.cc
@@ -0,0 +1,56 @@
+--- chrome/browser/task_manager/sampling/task_group.cc.orig 2019-09-09 21:55:10 UTC
++++ chrome/browser/task_manager/sampling/task_group.cc
+@@ -33,9 +33,9 @@ const int kBackgroundRefreshTypesMask =
+ #if defined(OS_WIN)
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME |
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if BUILDFLAG(ENABLE_NACL)
+ REFRESH_TYPE_NACL |
+ #endif // BUILDFLAG(ENABLE_NACL)
+@@ -114,9 +114,9 @@ TaskGroup::TaskGroup(
+ #if BUILDFLAG(ENABLE_NACL)
+ nacl_debug_stub_port_(nacl::kGdbDebugStubPortUnknown),
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ open_fd_count_(-1),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ idle_wakeups_per_second_(-1),
+ gpu_memory_has_duplicates_(false),
+ is_backgrounded_(false) {
+@@ -129,10 +129,10 @@ TaskGroup::TaskGroup(
+ weak_ptr_factory_.GetWeakPtr()),
+ base::Bind(&TaskGroup::OnIdleWakeupsRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnOpenFdCountRefreshDone,
+ weak_ptr_factory_.GetWeakPtr()),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ base::Bind(&TaskGroup::OnProcessPriorityDone,
+ weak_ptr_factory_.GetWeakPtr()));
+
+@@ -300,14 +300,14 @@ void TaskGroup::OnRefreshNaClDebugStubPortDone(int nac
+ }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void TaskGroup::OnOpenFdCountRefreshDone(int open_fd_count) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ open_fd_count_ = open_fd_count;
+ OnBackgroundRefreshTypeFinished(REFRESH_TYPE_FD_COUNT);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void TaskGroup::OnCpuRefreshDone(double cpu_usage) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.h b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.h
new file mode 100644
index 000000000000..3b055c6018f5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group.h
@@ -0,0 +1,48 @@
+--- chrome/browser/task_manager/sampling/task_group.h.orig 2019-10-21 19:06:23 UTC
++++ chrome/browser/task_manager/sampling/task_group.h
+@@ -39,7 +39,7 @@ constexpr int kUnsupportedVMRefreshFlags =
+ REFRESH_TYPE_WEBCACHE_STATS | REFRESH_TYPE_NETWORK_USAGE |
+ REFRESH_TYPE_NACL | REFRESH_TYPE_IDLE_WAKEUPS | REFRESH_TYPE_HANDLES |
+ REFRESH_TYPE_START_TIME | REFRESH_TYPE_CPU_TIME | REFRESH_TYPE_PRIORITY |
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ REFRESH_TYPE_FD_COUNT |
+ #endif
+ REFRESH_TYPE_HARD_FAULTS;
+@@ -122,9 +122,9 @@ class TaskGroup {
+ int nacl_debug_stub_port() const { return nacl_debug_stub_port_; }
+ #endif // BUILDFLAG(ENABLE_NACL)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int open_fd_count() const { return open_fd_count_; }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ int idle_wakeups_per_second() const { return idle_wakeups_per_second_; }
+
+@@ -138,9 +138,9 @@ class TaskGroup {
+ void RefreshNaClDebugStubPort(int child_process_unique_id);
+ void OnRefreshNaClDebugStubPortDone(int port);
+ #endif
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ void OnOpenFdCountRefreshDone(int open_fd_count);
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ void OnCpuRefreshDone(double cpu_usage);
+ void OnSwappedMemRefreshDone(int64_t swapped_mem_bytes);
+@@ -209,10 +209,10 @@ class TaskGroup {
+ #if BUILDFLAG(ENABLE_NACL)
+ int nacl_debug_stub_port_;
+ #endif // BUILDFLAG(ENABLE_NACL)
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // The number of file descriptors currently open by the process.
+ int open_fd_count_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int idle_wakeups_per_second_;
+ bool gpu_memory_has_duplicates_;
+ bool is_backgrounded_;
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
new file mode 100644
index 000000000000..0727f82f22b9
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.cc
@@ -0,0 +1,72 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.cc.orig 2020-03-16 18:39:45 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.cc
+@@ -43,9 +43,9 @@ TaskGroupSampler::TaskGroupSampler(
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_swapped_mem_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority)
+ : process_(std::move(process)),
+ process_metrics_(CreateProcessMetrics(process_.Handle())),
+@@ -53,9 +53,9 @@ TaskGroupSampler::TaskGroupSampler(
+ on_cpu_refresh_callback_(on_cpu_refresh),
+ on_swapped_mem_refresh_callback_(on_swapped_mem_refresh),
+ on_idle_wakeups_callback_(on_idle_wakeups),
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_open_fd_count_callback_(on_open_fd_count),
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ on_process_priority_callback_(on_process_priority) {
+ DCHECK(blocking_pool_runner.get());
+
+@@ -85,7 +85,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::BindOnce(on_swapped_mem_refresh_callback_));
+ }
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_IDLE_WAKEUPS,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -93,9 +93,9 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::BindOnce(&TaskGroupSampler::RefreshIdleWakeupsPerSecond, this),
+ base::BindOnce(on_idle_wakeups_callback_));
+ }
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_FD_COUNT,
+ refresh_flags)) {
+ base::PostTaskAndReplyWithResult(
+@@ -103,7 +103,7 @@ void TaskGroupSampler::Refresh(int64_t refresh_flags)
+ base::BindOnce(&TaskGroupSampler::RefreshOpenFdCount, this),
+ base::BindOnce(on_open_fd_count_callback_));
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ if (TaskManagerObserver::IsResourceRefreshEnabled(REFRESH_TYPE_PRIORITY,
+ refresh_flags)) {
+@@ -145,13 +145,13 @@ int TaskGroupSampler::RefreshIdleWakeupsPerSecond() {
+ return process_metrics_->GetIdleWakeupsPerSecond();
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int TaskGroupSampler::RefreshOpenFdCount() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
+
+ return process_metrics_->GetOpenFdCount();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ bool TaskGroupSampler::RefreshProcessPriority() {
+ DCHECK(worker_pool_sequenced_checker_.CalledOnValidSequence());
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
new file mode 100644
index 000000000000..ee309764291e
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__group__sampler.h
@@ -0,0 +1,50 @@
+--- chrome/browser/task_manager/sampling/task_group_sampler.h.orig 2019-06-04 18:55:18 UTC
++++ chrome/browser/task_manager/sampling/task_group_sampler.h
+@@ -32,9 +32,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ using OnCpuRefreshCallback = base::Callback<void(double)>;
+ using OnSwappedMemRefreshCallback = base::Callback<void(int64_t)>;
+ using OnIdleWakeupsCallback = base::Callback<void(int)>;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnOpenFdCountCallback = base::Callback<void(int)>;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ using OnProcessPriorityCallback = base::Callback<void(bool)>;
+
+ TaskGroupSampler(
+@@ -43,9 +43,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback& on_cpu_refresh,
+ const OnSwappedMemRefreshCallback& on_memory_refresh,
+ const OnIdleWakeupsCallback& on_idle_wakeups,
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback& on_open_fd_count,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback& on_process_priority);
+
+ // Refreshes the expensive process' stats (CPU usage, memory usage, and idle
+@@ -60,9 +60,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ double RefreshCpuUsage();
+ int64_t RefreshSwappedMem();
+ int RefreshIdleWakeupsPerSecond();
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int RefreshOpenFdCount();
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ bool RefreshProcessPriority();
+
+ // The process that holds the handle that we own so that we can use it for
+@@ -84,9 +84,9 @@ class TaskGroupSampler : public base::RefCountedThread
+ const OnCpuRefreshCallback on_cpu_refresh_callback_;
+ const OnSwappedMemRefreshCallback on_swapped_mem_refresh_callback_;
+ const OnIdleWakeupsCallback on_idle_wakeups_callback_;
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnOpenFdCountCallback on_open_fd_count_callback_;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const OnProcessPriorityCallback on_process_priority_callback_;
+
+ // To assert we're running on the correct thread.
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
new file mode 100644
index 000000000000..cb287277caa7
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_sampling_task__manager__impl.cc
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/sampling/task_manager_impl.cc.orig 2019-10-21 19:06:23 UTC
++++ chrome/browser/task_manager/sampling/task_manager_impl.cc
+@@ -219,11 +219,11 @@ void TaskManagerImpl::GetUSERHandles(TaskId task_id,
+ }
+
+ int TaskManagerImpl::GetOpenFdCount(TaskId task_id) const {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return GetTaskGroupByTaskId(task_id)->open_fd_count();
+ #else
+ return -1;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ }
+
+ bool TaskManagerImpl::IsTaskOnBackgroundedProcess(TaskId task_id) const {
diff --git a/www/iridium/files/patch-chrome_browser_task__manager_task__manager__observer.h b/www/iridium/files/patch-chrome_browser_task__manager_task__manager__observer.h
new file mode 100644
index 000000000000..ee059c93979b
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_task__manager_task__manager__observer.h
@@ -0,0 +1,16 @@
+--- chrome/browser/task_manager/task_manager_observer.h.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/task_manager/task_manager_observer.h
+@@ -43,11 +43,11 @@ enum RefreshType {
+ // or backgrounded.
+ REFRESH_TYPE_PRIORITY = 1 << 13,
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ // For observers interested in getting the number of open file descriptors of
+ // processes.
+ REFRESH_TYPE_FD_COUNT = 1 << 14,
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ REFRESH_TYPE_KEEPALIVE_COUNT = 1 << 15,
+ REFRESH_TYPE_MEMORY_FOOTPRINT = 1 << 16,
diff --git a/www/iridium/files/patch-chrome_browser_themes_theme__service__factory.cc b/www/iridium/files/patch-chrome_browser_themes_theme__service__factory.cc
new file mode 100644
index 000000000000..cf606ad8b2ce
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_themes_theme__service__factory.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/themes/theme_service_factory.cc.orig 2020-03-16 18:39:45 UTC
++++ chrome/browser/themes/theme_service_factory.cc
+@@ -23,7 +23,7 @@
+ #include "chrome/browser/themes/theme_helper_win.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/themes/theme_service_aura_linux.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+@@ -78,7 +78,7 @@ ThemeServiceFactory::~ThemeServiceFactory() {}
+
+ KeyedService* ThemeServiceFactory::BuildServiceInstanceFor(
+ content::BrowserContext* profile) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ using ThemeService = ThemeServiceAuraLinux;
+ #endif
+
+@@ -90,7 +90,7 @@ KeyedService* ThemeServiceFactory::BuildServiceInstanc
+
+ void ThemeServiceFactory::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool default_uses_system_theme = false;
+
+ const views::LinuxUI* linux_ui = views::LinuxUI::instance();
diff --git a/www/iridium/files/patch-chrome_browser_tracing_crash__service__uploader.cc b/www/iridium/files/patch-chrome_browser_tracing_crash__service__uploader.cc
new file mode 100644
index 000000000000..9e2f7535e762
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_tracing_crash__service__uploader.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/tracing/crash_service_uploader.cc.orig 2020-03-16 18:40:29 UTC
++++ chrome/browser/tracing/crash_service_uploader.cc
+@@ -160,6 +160,8 @@ void TraceCrashServiceUploader::DoCompressOnBackground
+ const char product[] = "Chrome_Linux";
+ #elif defined(OS_ANDROID)
+ const char product[] = "Chrome_Android";
++#elif defined(OS_FREEBSD)
++ const char product[] = "Chrome_FreeBSD";
+ #else
+ #error Platform not supported.
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_browser__command__controller.cc b/www/iridium/files/patch-chrome_browser_ui_browser__command__controller.cc
new file mode 100644
index 000000000000..1ee7f7ff4e27
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_browser__command__controller.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/browser_command_controller.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/browser_command_controller.cc
+@@ -82,7 +82,7 @@
+ #include "chrome/browser/ui/browser_commands_chromeos.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+
+@@ -252,7 +252,7 @@ bool BrowserCommandController::IsReservedCommandOrKey(
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // If this key was registered by the user as a content editing hotkey, then
+ // it is not reserved.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+@@ -476,7 +476,7 @@ bool BrowserCommandController::ExecuteCommandWithDispo
+ break;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case IDC_MINIMIZE_WINDOW:
+ browser_->window()->Minimize();
+ break;
+@@ -961,7 +961,7 @@ void BrowserCommandController::InitCommandState() {
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_2, true);
+ command_updater_.UpdateCommandEnabled(IDC_VISIT_DESKTOP_OF_LRU_USER_3, true);
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ command_updater_.UpdateCommandEnabled(IDC_MINIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_MAXIMIZE_WINDOW, true);
+ command_updater_.UpdateCommandEnabled(IDC_RESTORE_WINDOW, true);
diff --git a/www/iridium/files/patch-chrome_browser_ui_browser__view__prefs.cc b/www/iridium/files/patch-chrome_browser_ui_browser__view__prefs.cc
new file mode 100644
index 000000000000..c393ceb5d02d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_browser__view__prefs.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/browser_view_prefs.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/ui/browser_view_prefs.cc
+@@ -34,7 +34,7 @@ void RegisterBrowserViewLocalPrefs(PrefRegistrySimple*
+
+ void RegisterBrowserViewProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool custom_frame_pref_default = false;
+ #if defined(USE_X11)
+ custom_frame_pref_default = ui::GetCustomFramePrefDefault();
+@@ -45,7 +45,7 @@ void RegisterBrowserViewProfilePrefs(
+ #endif
+ registry->RegisterBooleanPref(prefs::kUseCustomChromeFrame,
+ custom_frame_pref_default);
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX && !OS_CHROMEOS) || defined(OS_BSD)
+ }
+
+ void MigrateBrowserTabStripPrefs(PrefService* prefs) {
diff --git a/www/iridium/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc b/www/iridium/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
new file mode 100644
index 000000000000..c3704c9ebe7d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_exclusive__access_exclusive__access__bubble.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/ui/exclusive_access/exclusive_access_bubble.cc
+@@ -16,7 +16,7 @@
+
+ // NOTE(koz): Linux doesn't use the thick shadowed border, so we add padding
+ // here.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const int ExclusiveAccessBubble::kPaddingPx = 8;
+ #else
+ const int ExclusiveAccessBubble::kPaddingPx = 15;
diff --git a/www/iridium/files/patch-chrome_browser_ui_gtk_print__dialog__gtk.cc b/www/iridium/files/patch-chrome_browser_ui_gtk_print__dialog__gtk.cc
new file mode 100644
index 000000000000..6d796805d2fa
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_gtk_print__dialog__gtk.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/gtk/print_dialog_gtk.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/gtk/print_dialog_gtk.cc
+@@ -336,7 +336,7 @@ void PrintDialogGtk::ShowDialog(
+ // Since we only generate PDF, only show printers that support PDF.
+ // TODO(thestig) Add more capabilities to support?
+ GtkPrintCapabilities cap = static_cast<GtkPrintCapabilities>(
+- GTK_PRINT_CAPABILITY_GENERATE_PDF | GTK_PRINT_CAPABILITY_PAGE_SET |
++ GTK_PRINT_CAPABILITY_GENERATE_PS | GTK_PRINT_CAPABILITY_GENERATE_PDF | GTK_PRINT_CAPABILITY_PAGE_SET |
+ GTK_PRINT_CAPABILITY_COPIES | GTK_PRINT_CAPABILITY_COLLATE |
+ GTK_PRINT_CAPABILITY_REVERSE);
+ gtk_print_unix_dialog_set_manual_capabilities(GTK_PRINT_UNIX_DIALOG(dialog_),
diff --git a/www/iridium/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc b/www/iridium/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
new file mode 100644
index 000000000000..fd379c49386c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_input__method_input__method__engine__base.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/input_method/input_method_engine_base.cc.orig 2020-02-03 21:53:29 UTC
++++ chrome/browser/ui/input_method/input_method_engine_base.cc
+@@ -31,7 +31,7 @@
+ #include "ui/base/ime/chromeos/ime_keymap.h"
+ #elif defined(OS_WIN)
+ #include "ui/events/keycodes/keyboard_codes_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/keycodes/keyboard_codes_posix.h"
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_browser_ui_sad__tab.cc b/www/iridium/files/patch-chrome_browser_ui_sad__tab.cc
new file mode 100644
index 000000000000..d03e6c550af9
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_sad__tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/sad_tab.cc.orig 2020-03-16 18:39:45 UTC
++++ chrome/browser/ui/sad_tab.cc
+@@ -188,7 +188,7 @@ std::vector<int> SadTab::GetSubMessages() {
+ // Only show Incognito suggestion if not already in Incognito mode.
+ if (!web_contents_->GetBrowserContext()->IsOffTheRecord())
+ message_ids.insert(message_ids.begin(), IDS_SAD_TAB_RELOAD_INCOGNITO);
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Note: on macOS, Linux and ChromeOS, the first bullet is either one of
+ // IDS_SAD_TAB_RELOAD_CLOSE_TABS or IDS_SAD_TAB_RELOAD_CLOSE_NOTABS
+ // followed by one of the above suggestions.
diff --git a/www/iridium/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc b/www/iridium/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
new file mode 100644
index 000000000000..e40b9803cffb
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_startup_bad__flags__prompt.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/startup/bad_flags_prompt.cc.orig 2020-02-03 21:53:29 UTC
++++ chrome/browser/ui/startup/bad_flags_prompt.cc
+@@ -87,7 +87,7 @@ static const char* kBadFlags[] = {
+ extensions::switches::kExtensionsOnChromeURLs,
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
+ // http://crbug.com/327295
+ switches::kEnableSpeechDispatcher,
diff --git a/www/iridium/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc b/www/iridium/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
new file mode 100644
index 000000000000..b3cf9e596cbe
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_startup_startup__browser__creator.cc
@@ -0,0 +1,31 @@
+--- chrome/browser/ui/startup/startup_browser_creator.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/browser/ui/startup/startup_browser_creator.cc
+@@ -82,7 +82,7 @@
+ #include "chrome/browser/ui/user_manager.h"
+ #endif
+
+-#if defined(TOOLKIT_VIEWS) && defined(OS_LINUX)
++#if defined(TOOLKIT_VIEWS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+
+@@ -291,7 +291,7 @@ bool IsSilentLaunchEnabled(const base::CommandLine& co
+ // true, send a warning if guest mode is requested but not allowed by policy.
+ bool IsGuestModeEnforced(const base::CommandLine& command_line,
+ bool show_warning) {
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ PrefService* service = g_browser_process->local_state();
+ DCHECK(service);
+
+@@ -662,8 +662,10 @@ bool StartupBrowserCreator::ProcessCmdLineImpl(
+ }
+ #endif // OS_CHROMEOS
+
++#if 0 /* XXX */
+ #if defined(TOOLKIT_VIEWS) && defined(USE_X11)
+ ui::TouchFactory::SetTouchDeviceListFromCommandLine();
++#endif
+ #endif
+
+ #if defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-chrome_browser_ui_tab__helpers.cc b/www/iridium/files/patch-chrome_browser_ui_tab__helpers.cc
new file mode 100644
index 000000000000..053ec7216342
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_tab__helpers.cc
@@ -0,0 +1,25 @@
+--- chrome/browser/ui/tab_helpers.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/tab_helpers.cc
+@@ -132,7 +132,7 @@
+ #include "components/zoom/zoom_controller.h"
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
+ #include "chrome/browser/ui/hats/hats_helper.h"
+ #endif
+@@ -347,11 +347,11 @@ void TabHelpers::AttachTabHelpers(WebContents* web_con
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ metrics::DesktopSessionDurationObserver::CreateForWebContents(web_contents);
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ features::kHappinessTrackingSurveysForDesktop) ||
+ base::FeatureList::IsEnabled(
diff --git a/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc b/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
new file mode 100644
index 000000000000..a5abcc83206d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__columns.cc
@@ -0,0 +1,15 @@
+--- chrome/browser/ui/task_manager/task_manager_columns.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/ui/task_manager/task_manager_columns.cc
+@@ -93,10 +93,10 @@ const TableColumnData kColumns[] = {
+ base::size("100000") * kCharWidth, -1, true, false, false},
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
+ base::size("999") * kCharWidth, -1, true, false, false},
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ {IDS_TASK_MANAGER_PROCESS_PRIORITY_COLUMN, ui::TableColumn::LEFT, -1, 0,
+ base::size("background") * kCharWidth, -1, true, true, false},
+ {IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN, ui::TableColumn::RIGHT, -1, 0,
diff --git a/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc b/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
new file mode 100644
index 000000000000..0f8d7e671406
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_task__manager_task__manager__table__model.cc
@@ -0,0 +1,50 @@
+--- chrome/browser/ui/task_manager/task_manager_table_model.cc.orig 2019-12-16 21:50:43 UTC
++++ chrome/browser/ui/task_manager/task_manager_table_model.cc
+@@ -450,13 +450,13 @@ base::string16 TaskManagerTableModel::GetText(int row,
+ ? stringifier_->backgrounded_string()
+ : stringifier_->foregrounded_string();
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int fd_count = observed_task_manager()->GetOpenFdCount(tasks_[row]);
+ return fd_count >= 0 ? base::FormatNumber(fd_count)
+ : stringifier_->n_a_string();
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ case IDS_TASK_MANAGER_KEEPALIVE_COUNT_COLUMN: {
+ return stringifier_->GetKeepaliveCountText(
+@@ -616,7 +616,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ return BooleanCompare(is_proc1_bg, is_proc2_bg);
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN: {
+ const int proc1_fd_count =
+ observed_task_manager()->GetOpenFdCount(tasks_[row1]);
+@@ -624,7 +624,7 @@ int TaskManagerTableModel::CompareValues(int row1,
+ observed_task_manager()->GetOpenFdCount(tasks_[row2]);
+ return ValueCompare(proc1_fd_count, proc2_fd_count);
+ }
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
+@@ -790,11 +790,11 @@ void TaskManagerTableModel::UpdateRefreshTypes(int col
+ type = REFRESH_TYPE_KEEPALIVE_COUNT;
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case IDS_TASK_MANAGER_OPEN_FD_COUNT_COLUMN:
+ type = REFRESH_TYPE_FD_COUNT;
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+
+ default:
+ NOTREACHED();
diff --git a/www/iridium/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc b/www/iridium/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
new file mode 100644
index 000000000000..f348ce9eaf16
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_toolbar_app__menu__model.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/toolbar/app_menu_model.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/toolbar/app_menu_model.cc
+@@ -684,7 +684,7 @@ bool AppMenuModel::IsCommandIdVisible(int command_id)
+ return app_menu_icon_controller_->GetTypeAndSeverity().type ==
+ AppMenuIconController::IconType::UPGRADE_NOTIFICATION;
+ }
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ case IDC_BOOKMARK_THIS_TAB:
+ return !chrome::ShouldRemoveBookmarkThisTabUI(browser_->profile());
+ case IDC_BOOKMARK_ALL_TABS:
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_accelerator__table.cc b/www/iridium/files/patch-chrome_browser_ui_views_accelerator__table.cc
new file mode 100644
index 000000000000..5b89c27e8d36
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_accelerator__table.cc
@@ -0,0 +1,46 @@
+--- chrome/browser/ui/views/accelerator_table.cc.orig 2019-09-09 21:55:11 UTC
++++ chrome/browser/ui/views/accelerator_table.cc
+@@ -51,7 +51,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_S, ui::EF_PLATFORM_ACCELERATOR, IDC_SAVE_PAGE},
+ {ui::VKEY_9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_LAST_TAB},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN, IDC_SELECT_LAST_TAB},
+ {ui::VKEY_NEXT, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, IDC_MOVE_TAB_NEXT},
+@@ -81,7 +81,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_NUMPAD7, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_6},
+ {ui::VKEY_8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_PLATFORM_ACCELERATOR, IDC_SELECT_TAB_7},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ {ui::VKEY_1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN, IDC_SELECT_TAB_0},
+ {ui::VKEY_2, ui::EF_ALT_DOWN, IDC_SELECT_TAB_1},
+@@ -99,7 +99,7 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ {ui::VKEY_8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN, IDC_SELECT_TAB_7},
+ {ui::VKEY_BROWSER_FAVORITES, ui::EF_NONE, IDC_SHOW_BOOKMARK_BAR},
+-#endif // OS_LINUX && !OS_CHROMEOS
++#endif // (OS_LINUX || OS_BSD) && !OS_CHROMEOS
+ {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
+ IDC_SHOW_BOOKMARK_BAR},
+ {ui::VKEY_OEM_MINUS, ui::EF_PLATFORM_ACCELERATOR, IDC_ZOOM_MINUS},
+@@ -125,14 +125,14 @@ const AcceleratorMapping kAcceleratorMap[] = {
+ IDC_SHOW_AVATAR_MENU},
+
+ // Platform-specific key maps.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ {ui::VKEY_BROWSER_BACK, ui::EF_NONE, IDC_BACK},
+ {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE, IDC_FORWARD},
+ {ui::VKEY_BROWSER_HOME, ui::EF_NONE, IDC_HOME},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE, IDC_RELOAD},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+ {ui::VKEY_BROWSER_REFRESH, ui::EF_SHIFT_DOWN, IDC_RELOAD_BYPASSING_CACHE},
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_CHROMEOS)
+ // On Chrome OS, VKEY_BROWSER_SEARCH is handled in Ash.
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc b/www/iridium/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
new file mode 100644
index 000000000000..47a25b7a998d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_chrome__browser__main__extra__parts__views.cc
@@ -0,0 +1,38 @@
+--- chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc
+@@ -33,7 +33,7 @@
+ #include "ui/wm/core/wm_state.h"
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -43,7 +43,7 @@
+ #include "chrome/grit/generated_resources.h"
+ #include "content/public/common/content_switches.h"
+ #include "ui/base/l10n/l10n_util.h"
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+
+ // This connector is used in ui_devtools's TracingAgent to hook up with the
+ // tracing service.
+@@ -105,7 +105,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ devtools_server_->tracing_agent());
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // On the Linux desktop, we want to prevent the user from logging in as root,
+ // so that we don't destroy the profile. Now that we have some minimal ui
+ // initialized, check to see if we're running as root and bail if we are.
+@@ -136,7 +136,7 @@ void ChromeBrowserMainExtraPartsViews::PreProfileInit(
+ base::RunLoop().RunUntilIdle();
+
+ exit(EXIT_FAILURE);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ }
+
+ void ChromeBrowserMainExtraPartsViews::PostBrowserStart() {
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_chrome__views__delegate.h b/www/iridium/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
new file mode 100644
index 000000000000..59453a839cab
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_chrome__views__delegate.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/chrome_views_delegate.h.orig 2019-06-04 18:55:18 UTC
++++ chrome/browser/ui/views/chrome_views_delegate.h
+@@ -44,7 +44,7 @@ class ChromeViewsDelegate : public views::ViewsDelegat
+ HICON GetSmallWindowIcon() const override;
+ int GetAppbarAutohideEdges(HMONITOR monitor,
+ base::OnceClosure callback) override;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::ImageSkia* GetDefaultWindowIcon() const override;
+ bool WindowManagerProvidesTitleBar(bool maximized) override;
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_download_download__item__view.cc b/www/iridium/files/patch-chrome_browser_ui_views_download_download__item__view.cc
new file mode 100644
index 000000000000..2e9f1501f8a7
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_download_download__item__view.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/download/download_item_view.cc.orig 2020-03-17 09:40:34 UTC
++++ chrome/browser/ui/views/download/download_item_view.cc
+@@ -234,7 +234,7 @@ DownloadItemView::DownloadItemView(DownloadUIModel::Do
+ open_button_ = AddChildView(std::move(open_button));
+
+ int file_name_style = views::style::STYLE_PRIMARY;
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(safe_browsing::kUseNewDownloadWarnings))
+ file_name_style = STYLE_EMPHASIZED;
+ #endif
+@@ -1633,7 +1633,7 @@ void DownloadItemView::StyleFilenameInLabel(views::Sty
+ if (!base::FeatureList::IsEnabled(safe_browsing::kUseNewDownloadWarnings))
+ return;
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ base::string16 filename = ElidedFilename();
+ size_t file_name_position = label->GetText().find(filename);
+ if (file_name_position != std::string::npos) {
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_first__run__dialog.cc b/www/iridium/files/patch-chrome_browser_ui_views_first__run__dialog.cc
new file mode 100644
index 000000000000..d2029ff732a8
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_first__run__dialog.cc
@@ -0,0 +1,13 @@
+--- chrome/browser/ui/views/first_run_dialog.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/views/first_run_dialog.cc
+@@ -114,8 +114,10 @@ void FirstRunDialog::Done() {
+ bool FirstRunDialog::Accept() {
+ GetWidget()->Hide();
+
++#if !defined(OS_BSD)
+ ChangeMetricsReportingStateWithReply(report_crashes_->GetChecked(),
+ base::Bind(&InitCrashReporterIfEnabled));
++#endif
+
+ if (make_default_->GetChecked())
+ shell_integration::SetAsDefaultBrowser();
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__frame.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
new file mode 100644
index 000000000000..c1d853c940c7
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__frame.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_frame.cc.orig 2019-10-21 19:06:24 UTC
++++ chrome/browser/ui/views/frame/browser_frame.cc
+@@ -46,7 +46,7 @@
+ namespace {
+
+ bool IsUsingGtkTheme(Profile* profile) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return ThemeServiceFactory::GetForProfile(profile)->UsingSystemTheme();
+ #else
+ return false;
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
new file mode 100644
index 000000000000..cca78f0e9ece
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__non__client__frame__view__factory__views.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/ui/views/frame/browser_non_client_frame_view_factory_views.cc
+@@ -13,7 +13,7 @@
+ #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
+@@ -32,7 +32,7 @@ OpaqueBrowserFrameView* CreateOpaqueBrowserFrameView(
+ BrowserView* browser_view) {
+ #if BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS)
+ std::unique_ptr<views::NavButtonProvider> nav_button_provider;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (ThemeServiceFactory::GetForProfile(browser_view->browser()->profile())
+ ->UsingSystemTheme() &&
+ views::LinuxUI::instance()) {
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__view.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__view.cc
new file mode 100644
index 000000000000..b69b8869760f
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_browser__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/browser_view.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/views/frame/browser_view.cc
+@@ -1633,7 +1633,7 @@ void BrowserView::UserChangedTheme(BrowserThemeChangeT
+ const bool should_use_native_frame = frame_->ShouldUseNativeFrame();
+
+ bool must_regenerate_frame;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // GTK and user theme changes can both change frame buttons, so the frame
+ // always needs to be regenerated on Linux.
+ must_regenerate_frame = true;
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
new file mode 100644
index 000000000000..9429876dcf27
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view.cc.orig 2020-03-16 18:39:45 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+@@ -48,7 +48,7 @@
+ #include "ui/views/window/vector_icons/vector_icons.h"
+ #include "ui/views/window/window_shape.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/views/controls/menu/menu_runner.h"
+ #endif
+
+@@ -349,7 +349,7 @@ void OpaqueBrowserFrameView::ButtonPressed(views::Butt
+ } else if (sender == close_button_) {
+ frame()->CloseWithReason(views::Widget::ClosedReason::kCloseButtonClicked);
+ } else if (sender == window_icon_) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(pbos): Figure out / document why this is Linux only. This needs a
+ // comment.
+ views::MenuRunner menu_runner(frame()->GetSystemMenuModel(),
+@@ -478,7 +478,7 @@ bool OpaqueBrowserFrameView::EverHasVisibleBackgroundT
+
+ OpaqueBrowserFrameView::FrameButtonStyle
+ OpaqueBrowserFrameView::GetFrameButtonStyle() const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return FrameButtonStyle::kMdButton;
+ #else
+ return FrameButtonStyle::kImageButton;
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
new file mode 100644
index 000000000000..0586d8bb467d
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_opaque__browser__frame__view__platform__specific.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc.orig 2019-04-30 22:22:36 UTC
++++ chrome/browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc
+@@ -6,7 +6,7 @@
+
+ #include "build/build_config.h"
+
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_FREEBSD)
+
+ // static
+ std::unique_ptr<OpaqueBrowserFrameViewPlatformSpecific>
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
new file mode 100644
index 000000000000..dc06c4f10c39
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__builder.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_builder.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_builder.cc
+@@ -62,7 +62,7 @@ void SystemMenuModelBuilder::BuildMenu(ui::SimpleMenuM
+
+ void SystemMenuModelBuilder::BuildSystemMenuForBrowserWindow(
+ ui::SimpleMenuModel* model) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ model->AddItemWithStringId(IDC_MINIMIZE_WINDOW, IDS_MINIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_MAXIMIZE_WINDOW, IDS_MAXIMIZE_WINDOW_MENU);
+ model->AddItemWithStringId(IDC_RESTORE_WINDOW, IDS_RESTORE_WINDOW_MENU);
+@@ -75,7 +75,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForBrowser
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddCheckItemWithStringId(IDC_USE_SYSTEM_TITLE_BAR,
+ IDS_SHOW_WINDOW_DECORATIONS_MENU);
+@@ -113,7 +113,7 @@ void SystemMenuModelBuilder::BuildSystemMenuForAppOrPo
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_TASK_MANAGER, IDS_TASK_MANAGER);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ model->AddSeparator(ui::NORMAL_SEPARATOR);
+ model->AddItemWithStringId(IDC_CLOSE_WINDOW, IDS_CLOSE);
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc b/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
new file mode 100644
index 000000000000..0e2672a7af5f
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_frame_system__menu__model__delegate.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/frame/system_menu_model_delegate.cc.orig 2019-06-04 18:55:18 UTC
++++ chrome/browser/ui/views/frame/system_menu_model_delegate.cc
+@@ -15,7 +15,7 @@
+ #include "components/sessions/core/tab_restore_service.h"
+ #include "ui/base/l10n/l10n_util.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "chrome/common/pref_names.h"
+ #include "components/prefs/pref_service.h"
+ #endif
+@@ -30,7 +30,7 @@ SystemMenuModelDelegate::SystemMenuModelDelegate(
+ SystemMenuModelDelegate::~SystemMenuModelDelegate() {}
+
+ bool SystemMenuModelDelegate::IsCommandIdChecked(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (command_id == IDC_USE_SYSTEM_TITLE_BAR) {
+ PrefService* prefs = browser_->profile()->GetPrefs();
+ return !prefs->GetBoolean(prefs::kUseCustomChromeFrame);
+@@ -44,7 +44,7 @@ bool SystemMenuModelDelegate::IsCommandIdEnabled(int c
+ }
+
+ bool SystemMenuModelDelegate::IsCommandIdVisible(int command_id) const {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool is_maximized = browser_->window()->IsMaximized();
+ switch (command_id) {
+ case IDC_MAXIMIZE_WINDOW:
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_hung__renderer__view.cc b/www/iridium/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
new file mode 100644
index 000000000000..45d717c16389
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_hung__renderer__view.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/hung_renderer_view.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/views/hung_renderer_view.cc
+@@ -417,7 +417,7 @@ bool HungRendererDialogView::Cancel() {
+ content::RenderProcessHost* rph =
+ hung_pages_table_model_->GetRenderWidgetHost()->GetProcess();
+ if (rph) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // A generic |CrashDumpHungChildProcess()| is not implemented for Linux.
+ // Instead we send an explicit IPC to crash on the renderer's IO thread.
+ rph->ForceCrash();
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc b/www/iridium/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
new file mode 100644
index 000000000000..98e130553ec0
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_tabs_new__tab__button.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/new_tab_button.cc.orig 2019-12-16 21:51:24 UTC
++++ chrome/browser/ui/views/tabs/new_tab_button.cc
+@@ -84,7 +84,7 @@ class NewTabButton::HighlightPathGenerator
+ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
+ : views::ImageButton(listener), tab_strip_(tab_strip) {
+ set_animate_on_state_change(true);
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_triggerable_event_flags(triggerable_event_flags() |
+ ui::EF_MIDDLE_MOUSE_BUTTON);
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab.cc b/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab.cc
new file mode 100644
index 000000000000..beabaf0792a0
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/views/tabs/tab.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/views/tabs/tab.cc
+@@ -584,7 +584,7 @@ void Tab::MaybeUpdateHoverStatus(const ui::MouseEvent&
+ if (mouse_hovered_ || !GetWidget()->IsMouseEventsEnabled())
+ return;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Move the hit test area for hovering up so that it is not overlapped by tab
+ // hover cards when they are shown.
+ // TODO(crbug/978134): Once Linux/CrOS widget transparency is solved, remove
diff --git a/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc b/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
new file mode 100644
index 000000000000..166112807cf0
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_views_tabs_tab__drag__controller.cc
@@ -0,0 +1,29 @@
+--- chrome/browser/ui/views/tabs/tab_drag_controller.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/views/tabs/tab_drag_controller.cc
+@@ -450,7 +450,7 @@ void TabDragController::Init(TabDragContext* source_co
+ // synchronous on desktop Linux, so use that.
+ // - Chrome OS
+ // Releasing capture on Ash cancels gestures so avoid it.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ can_release_capture_ = false;
+ #endif
+ start_point_in_screen_ = gfx::Point(source_view_offset, mouse_offset.y());
+@@ -895,7 +895,7 @@ TabDragController::DragBrowserToNewTabStrip(TabDragCon
+ else
+ SetCapture(target_context);
+
+-#if !defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if (!defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(OS_BSD)
+ // EndMoveLoop is going to snap the window back to its original location.
+ // Hide it so users don't see this. Hiding a window in Linux aura causes
+ // it to lose capture so skip it.
+@@ -2082,7 +2082,7 @@ TabDragController::Liveness TabDragController::GetLoca
+ if (dragged_window)
+ exclude.insert(dragged_window);
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Exclude windows which are pending deletion via Browser::TabStripEmpty().
+ // These windows can be returned in the Linux Aura port because the browser
+ // window which was used for dragging is not hidden once all of its tabs are
diff --git a/www/iridium/files/patch-chrome_browser_ui_webui_about__ui.cc b/www/iridium/files/patch-chrome_browser_ui_webui_about__ui.cc
new file mode 100644
index 000000000000..473b7690ddfc
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_webui_about__ui.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/about_ui.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/browser/ui/webui/about_ui.cc
+@@ -561,7 +561,7 @@ std::string ChromeURLs() {
+ return html;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string AboutLinuxProxyConfig() {
+ std::string data;
+ AppendHeader(&data, 0,
+@@ -617,7 +617,7 @@ void AboutUIHTMLSource::StartDataRequest(
+ response =
+ ui::ResourceBundle::GetSharedInstance().LoadDataResourceString(idr);
+ }
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) {
+ response = AboutLinuxProxyConfig();
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc b/www/iridium/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
new file mode 100644
index 000000000000..6fed2b7df1f6
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_webui_chrome__web__ui__controller__factory.cc
@@ -0,0 +1,55 @@
+--- chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -224,11 +224,11 @@
+ #include "chrome/browser/ui/webui/conflicts/conflicts_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/discards/discards_ui.h"
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h"
+ #endif
+
+@@ -337,7 +337,7 @@ bool IsAboutUI(const GURL& url) {
+ #if !defined(OS_ANDROID)
+ || url.host_piece() == chrome::kChromeUITermsHost
+ #endif
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ || url.host_piece() == chrome::kChromeUILinuxProxyConfigHost
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -669,7 +669,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ if (url.host_piece() == chrome::kChromeUINaClHost)
+ return &NewWebUI<NaClUI>;
+ #endif
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUITabModalConfirmDialogHost)
+ return &NewWebUI<ConstrainedWebDialogUI>;
+ #endif
+@@ -717,17 +717,17 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* we
+ return &NewWebUI<CastUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUISandboxHost) {
+ return &NewWebUI<SandboxInternalsUI>;
+ }
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIDiscardsHost)
+ return &NewWebUI<DiscardsUI>;
+ #endif
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (url.host_piece() == chrome::kChromeUIBrowserSwitchHost)
+ return &NewWebUI<BrowserSwitchUI>;
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc b/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
new file mode 100644
index 000000000000..bf333383f3f1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.cc.orig 2019-10-21 19:06:24 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.cc
+@@ -27,7 +27,7 @@ void AppearanceHandler::RegisterMessages() {
+ "useDefaultTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseDefaultTheme,
+ base::Unretained(this)));
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ web_ui()->RegisterMessageCallback(
+ "useSystemTheme",
+ base::BindRepeating(&AppearanceHandler::HandleUseSystemTheme,
+@@ -39,7 +39,7 @@ void AppearanceHandler::HandleUseDefaultTheme(const ba
+ ThemeServiceFactory::GetForProfile(profile_)->UseDefaultTheme();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_BSD) && !defined(OS_CHROMEOS)
+ void AppearanceHandler::HandleUseSystemTheme(const base::ListValue* args) {
+ if (profile_->IsSupervised())
+ NOTREACHED();
diff --git a/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h b/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
new file mode 100644
index 000000000000..79f7e3050fff
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_webui_settings_appearance__handler.h
@@ -0,0 +1,11 @@
+--- chrome/browser/ui/webui/settings/appearance_handler.h.orig 2019-03-11 22:00:54 UTC
++++ chrome/browser/ui/webui/settings/appearance_handler.h
+@@ -36,7 +36,7 @@ class AppearanceHandler : public SettingsPageUIHandler
+ // Changes the UI theme of the browser to the default theme.
+ void HandleUseDefaultTheme(const base::ListValue* args);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ // Changes the UI theme of the browser to the system (GTK+) theme.
+ void HandleUseSystemTheme(const base::ListValue* args);
+ #endif
diff --git a/www/iridium/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc b/www/iridium/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
new file mode 100644
index 000000000000..8df5419b8753
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_ui_webui_settings_settings__localized__strings__provider.cc
@@ -0,0 +1,20 @@
+--- chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+@@ -333,7 +333,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"enterCustomWebAddress", IDS_SETTINGS_ENTER_CUSTOM_WEB_ADDRESS},
+ {"homeButtonDisabled", IDS_SETTINGS_HOME_BUTTON_DISABLED},
+ {"themes", IDS_SETTINGS_THEMES},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"systemTheme", IDS_SETTINGS_SYSTEM_THEME},
+ {"useSystemTheme", IDS_SETTINGS_USE_SYSTEM_THEME},
+ {"classicTheme", IDS_SETTINGS_CLASSIC_THEME},
+@@ -348,7 +348,7 @@ void AddAppearanceStrings(content::WebUIDataSource* ht
+ {"changeHomePage", IDS_SETTINGS_CHANGE_HOME_PAGE},
+ {"themesGalleryUrl", IDS_THEMES_GALLERY_URL},
+ {"chooseFromWebStore", IDS_SETTINGS_WEB_STORE},
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ {"showWindowDecorations", IDS_SHOW_WINDOW_DECORATIONS},
+ #endif
+ #if defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__file__handler__registration.cc b/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__file__handler__registration.cc
new file mode 100644
index 000000000000..abc103c98166
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__file__handler__registration.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/components/web_app_file_handler_registration.cc.orig 2020-02-07 12:36:50 UTC
++++ chrome/browser/web_applications/components/web_app_file_handler_registration.cc
+@@ -15,7 +15,7 @@ namespace web_app {
+ //
+ // Note: Because OS_LINUX includes OS_CHROMEOS be sure to use the stub on
+ // OS_CHROMEOS.
+-#if !defined(OS_WIN) && !(defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if !defined(OS_WIN) && !((defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS))
+ bool ShouldRegisterFileHandlersWithOs() {
+ return false;
+ }
diff --git a/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__shortcut.cc b/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__shortcut.cc
new file mode 100644
index 000000000000..934359b14459
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_web__applications_components_web__app__shortcut.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/components/web_app_shortcut.cc.orig 2020-03-17 09:41:50 UTC
++++ chrome/browser/web_applications/components/web_app_shortcut.cc
+@@ -35,7 +35,7 @@ namespace {
+ const int kDesiredIconSizesForShortcut[] = {16, 32, 128, 256, 512};
+ const size_t kNumDesiredIconSizesForShortcut =
+ base::size(kDesiredIconSizesForShortcut);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux supports icons of any size. FreeDesktop Icon Theme Specification states
+ // that "Minimally you should install a 48x48 icon in the hicolor theme."
+ const int kDesiredIconSizesForShortcut[] = {16, 32, 48, 128, 256, 512};
diff --git a/www/iridium/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc b/www/iridium/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc
new file mode 100644
index 000000000000..9b0d271a91c7
--- /dev/null
+++ b/www/iridium/files/patch-chrome_browser_web__applications_extensions_bookmark__app__finalizer__utils.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/web_applications/extensions/bookmark_app_finalizer_utils.cc.orig 2019-10-30 15:54:13 UTC
++++ chrome/browser/web_applications/extensions/bookmark_app_finalizer_utils.cc
+@@ -15,7 +15,7 @@ namespace {
+
+ #if !defined(OS_CHROMEOS)
+ bool CanOsAddDesktopShortcuts() {
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/www/iridium/files/patch-chrome_common_BUILD.gn b/www/iridium/files/patch-chrome_common_BUILD.gn
new file mode 100644
index 000000000000..bf1e0b6e0415
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_BUILD.gn
@@ -0,0 +1,13 @@
+--- chrome/common/BUILD.gn.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/BUILD.gn
+@@ -272,6 +272,10 @@ static_library("common") {
+ public_deps += [ "//ppapi/shared_impl" ]
+ }
+
++ if (is_bsd) {
++ sources -= [ "component_flash_hint_file_linux.cc" ]
++ }
++
+ if (enable_extensions) {
+ sources += [
+ "cast_messages.cc",
diff --git a/www/iridium/files/patch-chrome_common_channel__info.h b/www/iridium/files/patch-chrome_common_channel__info.h
new file mode 100644
index 000000000000..b290d11bd40c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_channel__info.h
@@ -0,0 +1,11 @@
+--- chrome/common/channel_info.h.orig 2019-12-17 19:22:25 UTC
++++ chrome/common/channel_info.h
+@@ -55,7 +55,7 @@ version_info::Channel GetChannelByName(const std::stri
+ std::string GetChannelSuffixForDataDir();
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Returns the channel-specific filename of the desktop shortcut used to launch
+ // the browser.
+ std::string GetDesktopName(base::Environment* env);
diff --git a/www/iridium/files/patch-chrome_common_channel__info__posix.cc b/www/iridium/files/patch-chrome_common_channel__info__posix.cc
new file mode 100644
index 000000000000..11726bed5663
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_channel__info__posix.cc
@@ -0,0 +1,20 @@
+--- chrome/common/channel_info_posix.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/common/channel_info_posix.cc
+@@ -67,7 +67,7 @@ std::string GetChannelSuffixForDataDir() {
+ }
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::string GetDesktopName(base::Environment* env) {
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ version_info::Channel product_channel(GetChannel());
+@@ -89,7 +89,7 @@ std::string GetDesktopName(base::Environment* env) {
+ return "chromium-browser.desktop";
+ #endif
+ }
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ version_info::Channel GetChannel() {
+ return GetChannelImpl(nullptr);
diff --git a/www/iridium/files/patch-chrome_common_chrome__features.cc b/www/iridium/files/patch-chrome_common_chrome__features.cc
new file mode 100644
index 000000000000..4591e746fab7
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__features.cc
@@ -0,0 +1,18 @@
+--- chrome/common/chrome_features.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/chrome_features.cc
+@@ -86,13 +86,13 @@ const base::Feature kAsyncDns {
+ #endif
+ };
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables the Restart background mode optimization. When all Chrome UI is
+ // closed and it goes in the background, allows to restart the browser to
+ // discard memory.
+ const base::Feature kBackgroundModeAllowRestart{
+ "BackgroundModeAllowRestart", base::FEATURE_DISABLED_BY_DEFAULT};
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Once the user declines a notification permission prompt in a WebContents,
+ // automatically dismiss subsequent prompts in the same WebContents, from any
diff --git a/www/iridium/files/patch-chrome_common_chrome__features.h b/www/iridium/files/patch-chrome_common_chrome__features.h
new file mode 100644
index 000000000000..d23bca53bf82
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__features.h
@@ -0,0 +1,15 @@
+--- chrome/common/chrome_features.h.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/chrome_features.h
+@@ -68,10 +68,10 @@ extern const base::Feature kAppServiceShelf;
+
+ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kAsyncDns;
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBackgroundModeAllowRestart;
+-#endif // defined(OS_WIN) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+
+ COMPONENT_EXPORT(CHROME_FEATURES)
+ extern const base::Feature kBlockRepeatedNotificationPermissionPrompts;
diff --git a/www/iridium/files/patch-chrome_common_chrome__paths.cc b/www/iridium/files/patch-chrome_common_chrome__paths.cc
new file mode 100644
index 000000000000..8f8695168ae5
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__paths.cc
@@ -0,0 +1,111 @@
+--- chrome/common/chrome_paths.cc.orig 2020-02-03 21:52:41 UTC
++++ chrome/common/chrome_paths.cc
+@@ -51,21 +51,21 @@ const base::FilePath::CharType kPepperFlashSystemBaseD
+ FILE_PATH_LITERAL("Internet Plug-Ins/PepperFlashPlayer");
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The path to the external extension <id>.json files.
+ // /usr/share seems like a good choice, see: http://www.pathname.com/fhs/
+ const base::FilePath::CharType kFilepathSinglePrefExtensions[] =
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+- FILE_PATH_LITERAL("/usr/share/google-chrome/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/google-chrome/extensions");
+ #else
+- FILE_PATH_LITERAL("/usr/share/chromium/extensions");
++ FILE_PATH_LITERAL("/usr/local/share/chromium/extensions");
+ #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
+
+ // The path to the hint file that tells the pepper plugin loader
+ // where it can find the latest component updated flash.
+ const base::FilePath::CharType kComponentUpdatedFlashHint[] =
+ FILE_PATH_LITERAL("latest-component-updated-flash");
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_LINUX) && BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
+ // The name of the hint file that tells the latest component updated Widevine
+@@ -204,7 +204,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ break;
+ case chrome::DIR_DEFAULT_DOWNLOADS_SAFE:
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ if (!GetUserDownloadsDirectorySafe(&cur))
+ return false;
+ break;
+@@ -495,6 +495,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ case chrome::DIR_POLICY_FILES: {
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/opt/chrome/policies"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/policies"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL("/etc/chromium/policies"));
+ #endif
+@@ -502,7 +505,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ #endif
+ #if defined(OS_CHROMEOS) || \
+- (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
++ ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
+ case chrome::DIR_USER_EXTERNAL_EXTENSIONS: {
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+ return false;
+@@ -510,7 +513,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ break;
+ }
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS: {
+ cur = base::FilePath(kFilepathSinglePrefExtensions);
+ break;
+@@ -545,7 +548,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ #endif
+ break;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ case chrome::DIR_NATIVE_MESSAGING:
+ #if defined(OS_MACOSX)
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+@@ -559,6 +562,9 @@ bool PathProvider(int key, base::FilePath* result) {
+ #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/opt/chrome/native-messaging-hosts"));
++#elif defined(OS_BSD)
++ cur = base::FilePath(FILE_PATH_LITERAL(
++ "/usr/local/etc/chrome/native-messaging-hosts"));
+ #else
+ cur = base::FilePath(FILE_PATH_LITERAL(
+ "/etc/chromium/native-messaging-hosts"));
+@@ -571,7 +577,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ return false;
+ cur = cur.Append(FILE_PATH_LITERAL("NativeMessagingHosts"));
+ break;
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ #if !defined(OS_ANDROID)
+ case chrome::DIR_GLOBAL_GCM_STORE:
+ if (!base::PathService::Get(chrome::DIR_USER_DATA, &cur))
+@@ -579,7 +585,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ cur = cur.Append(kGCMStoreDirname);
+ break;
+ #endif // !defined(OS_ANDROID)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case chrome::FILE_COMPONENT_FLASH_HINT:
+ if (!base::PathService::Get(
+ chrome::DIR_COMPONENT_UPDATED_PEPPER_FLASH_PLUGIN, &cur)) {
+@@ -587,7 +593,7 @@ bool PathProvider(int key, base::FilePath* result) {
+ }
+ cur = cur.Append(kComponentUpdatedFlashHint);
+ break;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ case chrome::FILE_CHROME_OS_COMPONENT_FLASH:
+ cur = base::FilePath(kChromeOSComponentFlash);
diff --git a/www/iridium/files/patch-chrome_common_chrome__paths.h b/www/iridium/files/patch-chrome_common_chrome__paths.h
new file mode 100644
index 000000000000..703fb6677e76
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__paths.h
@@ -0,0 +1,42 @@
+--- chrome/common/chrome_paths.h.orig 2019-12-16 21:50:44 UTC
++++ chrome/common/chrome_paths.h
+@@ -53,7 +53,7 @@ enum {
+ // contains subdirectories.
+ #endif
+ #if defined(OS_CHROMEOS) || \
+- (defined(OS_LINUX) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
++ ((defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(CHROMIUM_BRANDING)) || defined(OS_MACOSX)
+ DIR_USER_EXTERNAL_EXTENSIONS, // Directory for per-user external extensions
+ // on Chrome Mac and Chromium Linux.
+ // On Chrome OS, this path is used for OEM
+@@ -61,7 +61,7 @@ enum {
+ // create it.
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DIR_STANDALONE_EXTERNAL_EXTENSIONS, // Directory for 'per-extension'
+ // definition manifest files that
+ // describe extensions which are to be
+@@ -122,7 +122,7 @@ enum {
+ DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, // Directory where sanitized
+ // supervised user whitelists are
+ // installed.
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ DIR_NATIVE_MESSAGING, // System directory where native messaging host
+ // manifest files are stored.
+ DIR_USER_NATIVE_MESSAGING, // Directory with Native Messaging Hosts
+@@ -137,10 +137,10 @@ enum {
+ DIR_GEN_TEST_DATA, // Directory where generated test data resides.
+ DIR_TEST_DATA, // Directory where unit test data resides.
+ DIR_TEST_TOOLS, // Directory where unit test tools reside.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ FILE_COMPONENT_FLASH_HINT, // A file in a known location that points to
+ // the component updated flash plugin.
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(OS_CHROMEOS)
+ FILE_CHROME_OS_COMPONENT_FLASH, // The location of component updated Flash on
+ // Chrome OS.
diff --git a/www/iridium/files/patch-chrome_common_chrome__paths__internal.h b/www/iridium/files/patch-chrome_common_chrome__paths__internal.h
new file mode 100644
index 000000000000..9bf429302cd3
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__paths__internal.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_paths_internal.h.orig 2019-07-24 18:58:13 UTC
++++ chrome/common/chrome_paths_internal.h
+@@ -45,7 +45,7 @@ void GetUserCacheDirectory(const base::FilePath& profi
+ // Get the path to the user's documents directory.
+ bool GetUserDocumentsDirectory(base::FilePath* result);
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Gets the path to a safe default download directory for a user.
+ bool GetUserDownloadsDirectorySafe(base::FilePath* result);
+ #endif
diff --git a/www/iridium/files/patch-chrome_common_chrome__switches.cc b/www/iridium/files/patch-chrome_common_chrome__switches.cc
new file mode 100644
index 000000000000..0cf96df2deef
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__switches.cc
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/chrome_switches.cc
+@@ -846,7 +846,7 @@ const char kAllowNaClFileHandleAPI[] = "allow-n
+ const char kAllowNaClSocketAPI[] = "allow-nacl-socket-api";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ const char kEnableNewAppMenuIcon[] = "enable-new-app-menu-icon";
+
+ // Causes the browser to launch directly in guest mode.
diff --git a/www/iridium/files/patch-chrome_common_chrome__switches.h b/www/iridium/files/patch-chrome_common_chrome__switches.h
new file mode 100644
index 000000000000..957faae8a127
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_chrome__switches.h
@@ -0,0 +1,11 @@
+--- chrome/common/chrome_switches.h.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/chrome_switches.h
+@@ -261,7 +261,7 @@ extern const char kAllowNaClFileHandleAPI[];
+ extern const char kAllowNaClSocketAPI[];
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_BSD)
+ extern const char kEnableNewAppMenuIcon[];
+ extern const char kGuest[];
+ #endif
diff --git a/www/iridium/files/patch-chrome_common_extensions_api_api__sources.gni b/www/iridium/files/patch-chrome_common_extensions_api_api__sources.gni
new file mode 100644
index 000000000000..52d07bac4945
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_extensions_api_api__sources.gni
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/api/api_sources.gni.orig 2020-02-03 21:52:41 UTC
++++ chrome/common/extensions/api/api_sources.gni
+@@ -113,7 +113,7 @@ if (is_chromeos) {
+ if (use_cups) {
+ schema_sources_ += [ "printing.idl" ]
+ }
+-} else if (is_linux || is_win) {
++} else if (is_linux || is_bsd || is_win) {
+ schema_sources_ += [ "input_ime.json" ]
+ }
+
diff --git a/www/iridium/files/patch-chrome_common_extensions_command.cc b/www/iridium/files/patch-chrome_common_extensions_command.cc
new file mode 100644
index 000000000000..d69c38703319
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_extensions_command.cc
@@ -0,0 +1,11 @@
+--- chrome/common/extensions/command.cc.orig 2019-04-30 22:22:37 UTC
++++ chrome/common/extensions/command.cc
+@@ -300,7 +300,7 @@ std::string Command::CommandPlatform() {
+ return values::kKeybindingPlatformMac;
+ #elif defined(OS_CHROMEOS)
+ return values::kKeybindingPlatformChromeOs;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return values::kKeybindingPlatformLinux;
+ #else
+ return "";
diff --git a/www/iridium/files/patch-chrome_common_features.gni b/www/iridium/files/patch-chrome_common_features.gni
new file mode 100644
index 000000000000..5af21971a15e
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_features.gni
@@ -0,0 +1,14 @@
+--- chrome/common/features.gni.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/features.gni
+@@ -49,9 +49,9 @@ declare_args() {
+ (is_desktop_linux && use_dbus) || is_chromeos
+
+ enable_one_click_signin =
+- is_win || is_mac || (is_linux && !is_chromeos && !is_chromecast)
++ is_win || is_mac || is_bsd || (is_linux && !is_chromeos && !is_chromecast)
+
+- enable_service_discovery = (enable_mdns && !is_android) || is_mac
++ enable_service_discovery = (enable_mdns && !is_android) || is_mac || is_bsd
+
+ # Enables use of the session service, which is enabled by default.
+ # Android stores them separately on the Java side.
diff --git a/www/iridium/files/patch-chrome_common_media_cdm__host__file__path.cc b/www/iridium/files/patch-chrome_common_media_cdm__host__file__path.cc
new file mode 100644
index 000000000000..0f28ca47dca6
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_media_cdm__host__file__path.cc
@@ -0,0 +1,11 @@
+--- chrome/common/media/cdm_host_file_path.cc.orig 2020-03-17 09:44:41 UTC
++++ chrome/common/media/cdm_host_file_path.cc
+@@ -98,7 +98,7 @@ void AddCdmHostFilePaths(
+ cdm_host_file_paths->emplace_back(chrome_framework_path,
+ chrome_framework_sig_path);
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+
+ base::FilePath chrome_exe_dir;
+ if (!base::PathService::Get(base::DIR_EXE, &chrome_exe_dir))
diff --git a/www/iridium/files/patch-chrome_common_pref__names.cc b/www/iridium/files/patch-chrome_common_pref__names.cc
new file mode 100644
index 000000000000..edf68e0cec56
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_pref__names.cc
@@ -0,0 +1,44 @@
+--- chrome/common/pref_names.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/pref_names.cc
+@@ -1059,7 +1059,7 @@ const char kForceYouTubeRestrict[] = "settings.force_y
+ // only using an account that belongs to one of the domains from this pref.
+ const char kAllowedDomainsForApps[] = "settings.allowed_domains_for_apps";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Linux specific preference on whether we should match the system theme.
+ const char kUsesSystemTheme[] = "extensions.theme.use_system";
+ #endif
+@@ -1193,7 +1193,7 @@ const char kShowUpdatePromotionInfoBar[] =
+ "browser.show_update_promotion_info_bar";
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Boolean that is false if we should show window manager decorations. If
+ // true, we draw a custom chrome frame (thicker title bar and blue border).
+ const char kUseCustomChromeFrame[] = "browser.custom_chrome_frame";
+@@ -1621,7 +1621,7 @@ const char kDownloadDefaultDirectory[] = "download.def
+ // upgrade a unsafe location to a safe location.
+ const char kDownloadDirUpgraded[] = "download.directory_upgrade";
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ const char kOpenPdfDownloadInSystemReader[] =
+ "download.open_pdf_in_system_reader";
+ #endif
+@@ -1917,12 +1917,12 @@ const char kGloballyScopeHTTPAuthCacheEnabled[] =
+ const char kAmbientAuthenticationInPrivateModesEnabled[] =
+ "auth.ambient_auth_in_private_modes";
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // Boolean that specifies whether OK-AS-DELEGATE flag from KDC is respected
+ // along with kAuthNegotiateDelegateWhitelist.
+ const char kAuthNegotiateDelegateByKdcPolicy[] =
+ "auth.negotiate_delegate_by_kdc_policy";
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // Boolean that specifies whether NTLMv2 is enabled.
diff --git a/www/iridium/files/patch-chrome_common_pref__names.h b/www/iridium/files/patch-chrome_common_pref__names.h
new file mode 100644
index 000000000000..7f7af0082f1f
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_pref__names.h
@@ -0,0 +1,41 @@
+--- chrome/common/pref_names.h.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/pref_names.h
+@@ -334,7 +334,7 @@ extern const char kHistoryMenuPromoShown[];
+ extern const char kForceGoogleSafeSearch[];
+ extern const char kForceYouTubeRestrict[];
+ extern const char kAllowedDomainsForApps[];
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUsesSystemTheme[];
+ #endif
+ extern const char kCurrentThemePackFilename[];
+@@ -365,7 +365,7 @@ extern const char kDefaultBrowserSettingEnabled[];
+ #if defined(OS_MACOSX)
+ extern const char kShowUpdatePromotionInfoBar[];
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ extern const char kUseCustomChromeFrame[];
+ #endif
+ #if BUILDFLAG(ENABLE_PLUGINS)
+@@ -532,7 +532,7 @@ extern const char kAppWindowPlacement[];
+ extern const char kDownloadDefaultDirectory[];
+ extern const char kDownloadExtensionsToOpen[];
+ extern const char kDownloadDirUpgraded[];
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ extern const char kOpenPdfDownloadInSystemReader[];
+ #endif
+ #if defined(OS_ANDROID)
+@@ -744,9 +744,9 @@ extern const char kAllowCrossOriginAuthPrompt[];
+ extern const char kGloballyScopeHTTPAuthCacheEnabled[];
+ extern const char kAmbientAuthenticationInPrivateModesEnabled[];
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ extern const char kAuthNegotiateDelegateByKdcPolicy[];
+-#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
++#endif // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ extern const char kNtlmV2Enabled[];
diff --git a/www/iridium/files/patch-chrome_common_webui__url__constants.cc b/www/iridium/files/patch-chrome_common_webui__url__constants.cc
new file mode 100644
index 000000000000..c9a01fc94ffe
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_webui__url__constants.cc
@@ -0,0 +1,48 @@
+--- chrome/common/webui_url_constants.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/webui_url_constants.cc
+@@ -321,7 +321,7 @@ bool IsSystemWebUIHost(base::StringPiece host) {
+ const char kChromeUICastHost[] = "cast";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kChromeUIDiscardsHost[] = "discards";
+ const char kChromeUIDiscardsURL[] = "chrome://discards/";
+ const char kChromeUIHatsHost[] = "hats";
+@@ -332,17 +332,17 @@ const char kChromeUIHatsURL[] = "chrome://hats/";
+ const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const char kChromeUISandboxHost[] = "sandbox";
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ const char kChromeUIBrowserSwitchHost[] = "browser-switch";
+ const char kChromeUIBrowserSwitchURL[] = "chrome://browser-switch/";
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_LINUX) || defined(OS_BSD)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+ #endif
+
+@@ -608,13 +608,13 @@ const char* const kChromeHostURLs[] = {
+ kChromeUIInternetDetailDialogHost,
+ kChromeUIAssistantOptInHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ kChromeUIDiscardsHost,
+ #endif
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+ kChromeUILinuxProxyConfigHost,
+ #endif
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ kChromeUISandboxHost,
+ #endif
+ #if defined(OS_WIN)
diff --git a/www/iridium/files/patch-chrome_common_webui__url__constants.h b/www/iridium/files/patch-chrome_common_webui__url__constants.h
new file mode 100644
index 000000000000..dc27881da387
--- /dev/null
+++ b/www/iridium/files/patch-chrome_common_webui__url__constants.h
@@ -0,0 +1,32 @@
+--- chrome/common/webui_url_constants.h.orig 2020-03-16 18:40:30 UTC
++++ chrome/common/webui_url_constants.h
+@@ -275,7 +275,7 @@ bool IsSystemWebUIHost(base::StringPiece host);
+ extern const char kChromeUICastHost[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kChromeUIDiscardsHost[];
+ extern const char kChromeUIDiscardsURL[];
+ extern const char kChromeUIHatsHost[];
+@@ -287,17 +287,17 @@ extern const char kChromeUIHatsURL[];
+ extern const char kChromeUILinuxProxyConfigHost[];
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ extern const char kChromeUISandboxHost[];
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ extern const char kChromeUIBrowserSwitchHost[];
+ extern const char kChromeUIBrowserSwitchURL[];
+ #endif
+
+-#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
++#if ((defined(OS_LINUX) || defined(OS_BSD)) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+ extern const char kChromeUITabModalConfirmDialogHost[];
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_renderer_chrome__content__renderer__client.cc b/www/iridium/files/patch-chrome_renderer_chrome__content__renderer__client.cc
new file mode 100644
index 000000000000..e6be28220164
--- /dev/null
+++ b/www/iridium/files/patch-chrome_renderer_chrome__content__renderer__client.cc
@@ -0,0 +1,11 @@
+--- chrome/renderer/chrome_content_renderer_client.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/renderer/chrome_content_renderer_client.cc
+@@ -1053,7 +1053,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin(
+ }
+
+ case chrome::mojom::PluginStatus::kRestartRequired: {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ placeholder =
+ create_blocked_plugin(IDR_BLOCKED_PLUGIN_HTML,
+ l10n_util::GetStringFUTF16(
diff --git a/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc b/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
new file mode 100644
index 000000000000..d77103710996
--- /dev/null
+++ b/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.cc
@@ -0,0 +1,29 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.cc
+@@ -15,7 +15,7 @@
+ #include "ppapi/proxy/ppapi_messages.h"
+ #include "ppapi/proxy/serialized_structs.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "content/public/common/common_sandbox_support_linux.h"
+ #elif defined(OS_WIN)
+@@ -29,7 +29,7 @@ PepperFlashFontFileHost::PepperFlashFontFileHost(
+ const ppapi::proxy::SerializedFontDescription& description,
+ PP_PrivateFontCharset charset)
+ : ResourceHost(host->GetPpapiHost(), instance, resource) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The global SkFontConfigInterface is configured and initialized with a
+ // SkFontconfigInterface compatible font_service::FontLoader in
+ // RendererBlinkPlatformImpl (called from RenderThreadImpl::Init) at startup
+@@ -74,7 +74,7 @@ bool PepperFlashFontFileHost::GetFontData(uint32_t tab
+ void* buffer,
+ size_t* length) {
+ bool result = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (font_file_.IsValid()) {
+ result = content::GetFontTable(font_file_.GetPlatformFile(), table,
+ 0 /* offset */,
diff --git a/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h b/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
new file mode 100644
index 000000000000..6acbcf8fc2d9
--- /dev/null
+++ b/www/iridium/files/patch-chrome_renderer_pepper_pepper__flash__font__file__host.h
@@ -0,0 +1,20 @@
+--- chrome/renderer/pepper/pepper_flash_font_file_host.h.orig 2019-03-11 22:00:54 UTC
++++ chrome/renderer/pepper/pepper_flash_font_file_host.h
+@@ -14,7 +14,7 @@
+ #include "ppapi/c/private/pp_private_font_charset.h"
+ #include "ppapi/host/resource_host.h"
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file.h"
+ #elif defined(OS_WIN)
+ #include "third_party/skia/include/core/SkRefCnt.h"
+@@ -50,7 +50,7 @@ class PepperFlashFontFileHost : public ppapi::host::Re
+ uint32_t table);
+ bool GetFontData(uint32_t table, void* buffer, size_t* length);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::File font_file_;
+ #elif defined(OS_WIN)
+ sk_sp<SkTypeface> typeface_;
diff --git a/www/iridium/files/patch-chrome_service_cloud__print_print__system.cc b/www/iridium/files/patch-chrome_service_cloud__print_print__system.cc
new file mode 100644
index 000000000000..8624cc6a5068
--- /dev/null
+++ b/www/iridium/files/patch-chrome_service_cloud__print_print__system.cc
@@ -0,0 +1,11 @@
+--- chrome/service/cloud_print/print_system.cc.orig 2019-03-11 22:00:54 UTC
++++ chrome/service/cloud_print/print_system.cc
+@@ -36,7 +36,7 @@ std::string PrintSystem::GenerateProxyId() {
+ return base::GenerateGUID();
+ }
+
+-#if defined(OS_LINUX) && !defined(USE_CUPS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(USE_CUPS)
+ scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
+ const base::DictionaryValue*) {
+ return nullptr;
diff --git a/www/iridium/files/patch-chrome_test_BUILD.gn b/www/iridium/files/patch-chrome_test_BUILD.gn
new file mode 100644
index 000000000000..67e371b45b43
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_BUILD.gn
@@ -0,0 +1,11 @@
+--- chrome/test/BUILD.gn.orig 2020-03-16 18:40:30 UTC
++++ chrome/test/BUILD.gn
+@@ -6042,7 +6042,7 @@ test("chrome_app_unittests") {
+ "//components/safe_browsing:buildflags",
+ "//components/tracing",
+ ]
+- if (!is_fuchsia) {
++ if (!is_fuchsia && !is_bsd) {
+ # TODO(crbug.com/753619): Enable crash reporting on Fuchsia.
+ deps += [ "//third_party/breakpad:client" ]
+ }
diff --git a/www/iridium/files/patch-chrome_test_base_chrome__test__launcher.cc b/www/iridium/files/patch-chrome_test_base_chrome__test__launcher.cc
new file mode 100644
index 000000000000..d09f2d1d0fd1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_base_chrome__test__launcher.cc
@@ -0,0 +1,20 @@
+--- chrome/test/base/chrome_test_launcher.cc.orig 2020-04-06 07:46:40 UTC
++++ chrome/test/base/chrome_test_launcher.cc
+@@ -59,7 +59,7 @@
+ #endif
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "chrome/browser/first_run/scoped_relaunch_chrome_browser_override.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+ #endif
+@@ -221,7 +221,7 @@ int LaunchChromeTests(size_t parallel_jobs,
+ }
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Cause a test failure for any test that triggers an unexpected relaunch.
+ // Tests that fail here should likely be restructured to put the "before
+ // relaunch" code into a PRE_ test with its own
diff --git a/www/iridium/files/patch-chrome_test_base_in__process__browser__test.cc b/www/iridium/files/patch-chrome_test_base_in__process__browser__test.cc
new file mode 100644
index 000000000000..f4de4bb39b0c
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_base_in__process__browser__test.cc
@@ -0,0 +1,40 @@
+--- chrome/test/base/in_process_browser_test.cc.orig 2020-04-03 04:11:30 UTC
++++ chrome/test/base/in_process_browser_test.cc
+@@ -77,6 +77,10 @@
+ #include "chrome/test/base/scoped_bundle_swizzler_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <signal.h>
++#endif
++
+ #if defined(OS_WIN)
+ #include "base/win/scoped_com_initializer.h"
+ #include "base/win/windows_version.h"
+@@ -104,7 +108,7 @@
+ #include "ui/events/test/event_generator.h"
+ #endif // defined(OS_CHROMEOS)
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/test/test_desktop_screen_x11.h"
+ #endif
+
+@@ -253,7 +257,7 @@ void InProcessBrowserTest::SetUp() {
+ // Cookies). Without this on Mac and Linux, many tests will hang waiting for a
+ // user to approve KeyChain/kwallet access. On Windows this is not needed as
+ // OS APIs never block.
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ OSCryptMocker::SetUp();
+ #endif
+
+@@ -308,7 +312,7 @@ void InProcessBrowserTest::TearDown() {
+ com_initializer_.reset();
+ #endif
+ BrowserTestBase::TearDown();
+-#if defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ OSCryptMocker::TearDown();
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_test_base_interactive__ui__tests__main.cc b/www/iridium/files/patch-chrome_test_base_interactive__ui__tests__main.cc
new file mode 100644
index 000000000000..f80c31dcc8d4
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_base_interactive__ui__tests__main.cc
@@ -0,0 +1,25 @@
+--- chrome/test/base/interactive_ui_tests_main.cc.orig 2020-04-06 07:47:38 UTC
++++ chrome/test/base/interactive_ui_tests_main.cc
+@@ -16,7 +16,7 @@
+ #if defined(USE_AURA)
+ #include "ui/aura/test/ui_controls_factory_aura.h"
+ #include "ui/base/test/ui_controls_aura.h"
+-#if defined(USE_OZONE) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(USE_OZONE) && ((defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD))
+ #include "ui/ozone/public/ozone_platform.h"
+ #endif
+ #if defined(USE_X11)
+@@ -54,11 +54,11 @@ class InteractiveUITestSuite : public ChromeTestSuite
+ com_initializer_.reset(new base::win::ScopedCOMInitializer());
+ ui_controls::InstallUIControlsAura(
+ aura::test::CreateUIControlsAura(nullptr));
+-#elif defined(USE_OZONE) && defined(OS_LINUX)
++#elif defined(USE_OZONE) && (defined(OS_LINUX) || defined(OS_BSD))
+ ui::OzonePlatform::InitParams params;
+ params.single_process = true;
+ ui::OzonePlatform::InitializeForUI(params);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui_controls::InstallUIControlsAura(
+ views::test::CreateUIControlsDesktopAura());
+ #else
diff --git a/www/iridium/files/patch-chrome_test_base_test__browser__window.h b/www/iridium/files/patch-chrome_test_base_test__browser__window.h
new file mode 100644
index 000000000000..842f9dd09dd2
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_base_test__browser__window.h
@@ -0,0 +1,11 @@
+--- chrome/test/base/test_browser_window.h.orig 2020-04-06 07:48:42 UTC
++++ chrome/test/base/test_browser_window.h
+@@ -178,7 +178,7 @@ class TestBrowserWindow : public BrowserWindow {
+ bool is_source_keyboard) override {}
+
+ #if defined(OS_CHROMEOS) || defined(OS_MACOSX) || defined(OS_WIN) || \
+- defined(OS_LINUX)
++ defined(OS_LINUX) || defined(OS_BSD)
+ void ShowHatsBubble(const std::string& site_id) override {}
+ #endif
+
diff --git a/www/iridium/files/patch-chrome_test_base_testing__browser__process.h b/www/iridium/files/patch-chrome_test_base_testing__browser__process.h
new file mode 100644
index 000000000000..97a81118bddd
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_base_testing__browser__process.h
@@ -0,0 +1,13 @@
+--- chrome/test/base/testing_browser_process.h.orig 2019-09-09 21:55:11 UTC
++++ chrome/test/base/testing_browser_process.h
+@@ -116,8 +116,8 @@ class TestingBrowserProcess : public BrowserProcess {
+ DownloadRequestLimiter* download_request_limiter() override;
+ StartupData* startup_data() override;
+
+-#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+- void StartAutoupdateTimer() override {}
++#if (defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FREEBSD)) && !defined(OS_CHROMEOS)
++ void StartAutoupdateTimer() /*override*/ {}
+ #endif
+
+ component_updater::ComponentUpdateService* component_updater() override;
diff --git a/www/iridium/files/patch-chrome_test_chromedriver_chrome__launcher.cc b/www/iridium/files/patch-chrome_test_chromedriver_chrome__launcher.cc
new file mode 100644
index 000000000000..79b4cc08b788
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_chromedriver_chrome__launcher.cc
@@ -0,0 +1,13 @@
+--- chrome/test/chromedriver/chrome_launcher.cc.orig 2020-03-16 18:40:30 UTC
++++ chrome/test/chromedriver/chrome_launcher.cc
+@@ -69,6 +69,10 @@
+ #include "chrome/test/chromedriver/keycode_text_conversion.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <sys/wait.h>
++#endif
++
+ namespace {
+
+ const char* const kCommonSwitches[] = {
diff --git a/www/iridium/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc b/www/iridium/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
new file mode 100644
index 000000000000..1aa645203816
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_chromedriver_chrome_chrome__finder.cc
@@ -0,0 +1,20 @@
+--- chrome/test/chromedriver/chrome/chrome_finder.cc.orig 2020-02-24 18:39:10 UTC
++++ chrome/test/chromedriver/chrome/chrome_finder.cc
+@@ -50,7 +50,7 @@ void GetApplicationDirs(std::vector<base::FilePath>* l
+ installation_locations[i].Append(L"Chromium\\Application"));
+ }
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ void GetApplicationDirs(std::vector<base::FilePath>* locations) {
+ // TODO: Respect users' PATH variables.
+ // Until then, we use an approximation of the most common defaults.
+@@ -136,7 +136,7 @@ bool FindChrome(base::FilePath* browser_exe) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ base::FilePath(chrome::kBrowserProcessExecutablePath),
+ base::FilePath(chrome::kBrowserProcessExecutablePathChromium)
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath("google-chrome"),
+ base::FilePath(chrome::kBrowserProcessExecutablePath),
+ base::FilePath(chrome::kBrowserProcessExecutablePathChromium),
diff --git a/www/iridium/files/patch-chrome_test_chromedriver_key__converter__unittest.cc b/www/iridium/files/patch-chrome_test_chromedriver_key__converter__unittest.cc
new file mode 100644
index 000000000000..81970dcbbec1
--- /dev/null
+++ b/www/iridium/files/patch-chrome_test_chromedriver_key__converter__unittest.cc
@@ -0,0 +1,38 @@
+--- chrome/test/chromedriver/key_converter_unittest.cc.orig 2020-03-23 14:46:39 UTC
++++ chrome/test/chromedriver/key_converter_unittest.cc
+@@ -278,7 +278,7 @@ TEST(KeyConverter, AllShorthandKeys) {
+ ->Generate(&key_events);
+ builder.Generate(&key_events);
+ builder.SetKeyCode(ui::VKEY_TAB);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ builder.SetText("\t", "\t")->Generate(&key_events);
+ #else
+ builder.SetText(std::string(), std::string());
+@@ -286,7 +286,7 @@ TEST(KeyConverter, AllShorthandKeys) {
+ key_events.push_back(builder.SetType(kKeyUpEventType)->Build());
+ #endif
+ builder.SetKeyCode(ui::VKEY_BACK);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ builder.SetText("\b", "\b")->Generate(&key_events);
+ #else
+ builder.SetText(std::string(), std::string());
+@@ -297,7 +297,7 @@ TEST(KeyConverter, AllShorthandKeys) {
+ CheckEventsReleaseModifiers("\n\r\n\t\b ", key_events);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Fails on bots: crbug.com/174962
+ #define MAYBE_AllEnglishKeyboardSymbols DISABLED_AllEnglishKeyboardSymbols
+ #else
+@@ -354,7 +354,7 @@ TEST(KeyConverter, AllEnglishKeyboardTextChars) {
+ TEST(KeyConverter, AllSpecialWebDriverKeysOnEnglishKeyboard) {
+ ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
+ const char kTextForKeys[] = {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ 0, 0, 0, 0, '\t', 0, '\r', '\r', 0, 0, 0, 0, 0,
+ #else
+ 0, 0, 0, 0, 0, 0, '\r', '\r', 0, 0, 0, 0, 0,
diff --git a/www/iridium/files/patch-chromecast_browser_cast__browser__main__parts.cc b/www/iridium/files/patch-chromecast_browser_cast__browser__main__parts.cc
new file mode 100644
index 000000000000..06032792b186
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_browser_cast__browser__main__parts.cc
@@ -0,0 +1,56 @@
+--- chromecast/browser/cast_browser_main_parts.cc.orig 2020-03-16 18:40:30 UTC
++++ chromecast/browser/cast_browser_main_parts.cc
+@@ -74,7 +74,7 @@
+ #include "ui/base/ui_base_switches.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include <signal.h>
+ #include <sys/prctl.h>
+@@ -263,7 +263,7 @@ class CastViewsDelegate : public views::ViewsDelegate
+
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ base::FilePath GetApplicationFontsDir() {
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+@@ -279,7 +279,7 @@ base::FilePath GetApplicationFontsDir() {
+ }
+ }
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace
+
+@@ -308,7 +308,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {cc::switches::kDisableThreadedAnimation, ""},
+ #endif // defined(OS_ANDROID)
+ #endif // BUILDFLAG(IS_CAST_AUDIO_ONLY)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(ARCH_CPU_X86_FAMILY)
+ // This is needed for now to enable the x11 Ozone platform to work with
+ // current Linux/NVidia OpenGL drivers.
+@@ -318,7 +318,7 @@ const DefaultCommandLineSwitch kDefaultSwitches[] = {
+ {switches::kEnableHardwareOverlays, "cast"},
+ #endif
+ #endif
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ // It's better to start GPU process on demand. For example, for TV platforms
+ // cast starts in background and can't render until TV switches to cast
+ // input.
+@@ -459,7 +459,7 @@ void CastBrowserMainParts::ToolkitInitialized() {
+ views_delegate_ = std::make_unique<CastViewsDelegate>();
+ #endif // defined(USE_AURA)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath dir_font = GetApplicationFontsDir();
+ const FcChar8 *dir_font_char8 = reinterpret_cast<const FcChar8*>(dir_font.value().data());
+ if (!FcConfigAppFontAddDir(gfx::GetGlobalFontConfig(), dir_font_char8)) {
diff --git a/www/iridium/files/patch-chromecast_browser_cast__content__browser__client.cc b/www/iridium/files/patch-chromecast_browser_cast__content__browser__client.cc
new file mode 100644
index 000000000000..ceca4fa67274
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_browser_cast__content__browser__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/browser/cast_content_browser_client.cc.orig 2020-03-16 18:40:30 UTC
++++ chromecast/browser/cast_content_browser_client.cc
+@@ -448,7 +448,7 @@ void CastContentBrowserClient::AppendExtraCommandLineS
+ switches::kAudioOutputChannels));
+ }
+ } else if (process_type == switches::kGpuProcess) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Necessary for accelerated 2d canvas. By default on Linux, Chromium
+ // assumes GLES2 contexts can be lost to a power-save mode, which breaks GPU
+ // canvas apps.
diff --git a/www/iridium/files/patch-chromecast_browser_metrics_BUILD.gn b/www/iridium/files/patch-chromecast_browser_metrics_BUILD.gn
new file mode 100644
index 000000000000..e3c84406e9bf
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_browser_metrics_BUILD.gn
@@ -0,0 +1,11 @@
+--- chromecast/browser/metrics/BUILD.gn.orig 2019-07-24 18:58:17 UTC
++++ chromecast/browser/metrics/BUILD.gn
+@@ -32,7 +32,7 @@ cast_source_set("metrics") {
+ "//third_party/metrics_proto",
+ ]
+
+- if (is_linux) {
++ if (is_linux || is_bsd) {
+ sources += [
+ "external_metrics.cc",
+ "external_metrics.h",
diff --git a/www/iridium/files/patch-chromecast_browser_tts_tts__controller__impl.cc b/www/iridium/files/patch-chromecast_browser_tts_tts__controller__impl.cc
new file mode 100644
index 000000000000..2c4456163b65
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_browser_tts_tts__controller__impl.cc
@@ -0,0 +1,14 @@
+--- chromecast/browser/tts/tts_controller_impl.cc.orig 2019-03-11 22:00:56 UTC
++++ chromecast/browser/tts/tts_controller_impl.cc
+@@ -390,7 +390,11 @@ int TtsControllerImpl::QueueSize() {
+ }
+
+ TtsPlatformImpl* TtsControllerImpl::GetPlatformImpl() {
++#if defined(OS_BSD)
++ return NULL;
++#else
+ return platform_impl_.get();
++#endif // defined(OS_BSD)
+ }
+
+ std::string TtsControllerImpl::GetApplicationLocale() const {
diff --git a/www/iridium/files/patch-chromecast_external__mojo_public_cpp_external__mojo__broker.cc b/www/iridium/files/patch-chromecast_external__mojo_public_cpp_external__mojo__broker.cc
new file mode 100644
index 000000000000..381734887dcb
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_external__mojo_public_cpp_external__mojo__broker.cc
@@ -0,0 +1,20 @@
+--- chromecast/external_mojo/public/cpp/external_mojo_broker.cc.orig 2020-02-03 21:52:43 UTC
++++ chromecast/external_mojo/public/cpp/external_mojo_broker.cc
+@@ -7,7 +7,7 @@
+ #include <map>
+ #include <utility>
+
+-#if OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/stat.h>
+ #endif
+
+@@ -393,7 +393,7 @@ ExternalMojoBroker::ExternalMojoBroker(const std::stri
+ named_channel.TakeServerEndpoint();
+ DCHECK(server_endpoint.is_valid());
+
+-#if OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ chmod(broker_path.c_str(), 0770);
+ #endif
+
diff --git a/www/iridium/files/patch-chromecast_media_base_monotonic__clock.cc b/www/iridium/files/patch-chromecast_media_base_monotonic__clock.cc
new file mode 100644
index 000000000000..d141e1f0a1cb
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_media_base_monotonic__clock.cc
@@ -0,0 +1,23 @@
+--- chromecast/media/base/monotonic_clock.cc.orig 2019-10-30 15:55:35 UTC
++++ chromecast/media/base/monotonic_clock.cc
+@@ -9,9 +9,9 @@
+ #include "base/time/time.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "chromecast/media/base/buildflags.h"
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #include <zircon/syscalls.h>
+@@ -20,7 +20,7 @@
+ namespace chromecast {
+ namespace media {
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ int64_t MonotonicClockNow() {
+ timespec now = {0, 0};
+ #if BUILDFLAG(MEDIA_CLOCK_MONOTONIC_RAW)
diff --git a/www/iridium/files/patch-chromecast_renderer_cast__content__renderer__client.cc b/www/iridium/files/patch-chromecast_renderer_cast__content__renderer__client.cc
new file mode 100644
index 000000000000..079d79856b84
--- /dev/null
+++ b/www/iridium/files/patch-chromecast_renderer_cast__content__renderer__client.cc
@@ -0,0 +1,11 @@
+--- chromecast/renderer/cast_content_renderer_client.cc.orig 2020-03-17 09:46:13 UTC
++++ chromecast/renderer/cast_content_renderer_client.cc
+@@ -208,7 +208,7 @@ void CastContentRendererClient::RenderFrameCreated(
+ dispatcher->OnRenderFrameCreated(render_frame);
+ #endif
+
+-#if defined(OS_LINUX) && defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ // JsChannelBindings destroys itself when the RenderFrame is destroyed.
+ JsChannelBindings::Create(render_frame);
+ #endif
diff --git a/www/iridium/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc b/www/iridium/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
new file mode 100644
index 000000000000..f9da88b9683c
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_content_renderer_password__form__conversion__utils.cc
@@ -0,0 +1,14 @@
+--- components/autofill/content/renderer/password_form_conversion_utils.cc.orig 2019-12-16 21:50:45 UTC
++++ components/autofill/content/renderer/password_form_conversion_utils.cc
+@@ -19,7 +19,11 @@
+ #include "third_party/blink/public/web/web_form_control_element.h"
+ #include "third_party/blink/public/web/web_input_element.h"
+ #include "third_party/blink/public/web/web_local_frame.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "url/gurl.h"
+
+ using blink::WebElement;
diff --git a/www/iridium/files/patch-components_autofill_core_browser_autofill__experiments.cc b/www/iridium/files/patch-components_autofill_core_browser_autofill__experiments.cc
new file mode 100644
index 000000000000..294953ed5551
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_core_browser_autofill__experiments.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/browser/autofill_experiments.cc.orig 2019-12-16 21:50:45 UTC
++++ components/autofill/core/browser/autofill_experiments.cc
+@@ -233,7 +233,7 @@ bool IsAutofillNoLocalSaveOnUploadSuccessExperimentEna
+ }
+
+ bool OfferStoreUnmaskedCards(bool is_off_the_record) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The checkbox can be forced on with a flag, but by default we don't store
+ // on Linux due to lack of system keychain integration. See crbug.com/162735
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/www/iridium/files/patch-components_autofill_core_browser_autofill__external__delegate.cc b/www/iridium/files/patch-components_autofill_core_browser_autofill__external__delegate.cc
new file mode 100644
index 000000000000..25ba63628ba8
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_core_browser_autofill__external__delegate.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/browser/autofill_external_delegate.cc.orig 2020-03-16 18:40:30 UTC
++++ components/autofill/core/browser/autofill_external_delegate.cc
+@@ -118,7 +118,7 @@ void AutofillExternalDelegate::OnSuggestionsReturned(
+
+ // Append the "Hide Suggestions" menu item for only Autofill Address and
+ // Autocomplete popups.
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ if (base::FeatureList::IsEnabled(
+ features::kAutofillEnableHideSuggestionsUI)) {
diff --git a/www/iridium/files/patch-components_autofill_core_browser_personal__data__manager.cc b/www/iridium/files/patch-components_autofill_core_browser_personal__data__manager.cc
new file mode 100644
index 000000000000..76d3e7dee3ed
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_core_browser_personal__data__manager.cc
@@ -0,0 +1,15 @@
+--- components/autofill/core/browser/personal_data_manager.cc.orig 2020-03-16 18:40:30 UTC
++++ components/autofill/core/browser/personal_data_manager.cc
+@@ -1856,10 +1856,10 @@ bool PersonalDataManager::IsServerCard(const CreditCar
+
+ bool PersonalDataManager::ShouldShowCardsFromAccountOption() const {
+ // The feature is only for Linux, Windows and Mac.
+-#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) || \
++#if (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) || \
+ defined(OS_CHROMEOS)
+ return false;
+-#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX)) ||
++#endif // (!defined(OS_LINUX) && !defined(OS_WIN) && !defined(OS_MACOSX) && !defined(OS_BSD)) ||
+ // defined(OS_CHROMEOS)
+
+ // This option should only be shown for users that have not enabled the Sync
diff --git a/www/iridium/files/patch-components_autofill_core_common_autofill__payments__features.cc b/www/iridium/files/patch-components_autofill_core_common_autofill__payments__features.cc
new file mode 100644
index 000000000000..016f6de85d3c
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_core_common_autofill__payments__features.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_payments_features.cc.orig 2020-03-16 18:40:30 UTC
++++ components/autofill/core/common/autofill_payments_features.cc
+@@ -122,7 +122,7 @@ const base::Feature kAutofillUpstreamEditableExpiratio
+
+ bool ShouldShowImprovedUserConsentForCreditCardSave() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The new user consent UI is fully launched on MacOS, Windows and Linux.
+ return true;
+ #endif
diff --git a/www/iridium/files/patch-components_autofill_core_common_autofill__util.cc b/www/iridium/files/patch-components_autofill_core_common_autofill__util.cc
new file mode 100644
index 000000000000..f4cdea27b407
--- /dev/null
+++ b/www/iridium/files/patch-components_autofill_core_common_autofill__util.cc
@@ -0,0 +1,11 @@
+--- components/autofill/core/common/autofill_util.cc.orig 2019-09-09 21:55:14 UTC
++++ components/autofill/core/common/autofill_util.cc
+@@ -213,7 +213,7 @@ bool SanitizedFieldIsEmpty(const base::string16& value
+ }
+
+ bool ShouldAutoselectFirstSuggestionOnArrowDown() {
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/www/iridium/files/patch-components_content__settings_core_browser_website__settings__registry.cc b/www/iridium/files/patch-components_content__settings_core_browser_website__settings__registry.cc
new file mode 100644
index 000000000000..3c85edbf2e08
--- /dev/null
+++ b/www/iridium/files/patch-components_content__settings_core_browser_website__settings__registry.cc
@@ -0,0 +1,11 @@
+--- components/content_settings/core/browser/website_settings_registry.cc.orig 2019-03-11 22:00:56 UTC
++++ components/content_settings/core/browser/website_settings_registry.cc
+@@ -66,7 +66,7 @@ const WebsiteSettingsInfo* WebsiteSettingsRegistry::Re
+ #if defined(OS_WIN)
+ if (!(platform & PLATFORM_WINDOWS))
+ return nullptr;
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!(platform & PLATFORM_LINUX))
+ return nullptr;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
diff --git a/www/iridium/files/patch-components_cookie__config_cookie__store__util.cc b/www/iridium/files/patch-components_cookie__config_cookie__store__util.cc
new file mode 100644
index 000000000000..871d1f936cc4
--- /dev/null
+++ b/www/iridium/files/patch-components_cookie__config_cookie__store__util.cc
@@ -0,0 +1,24 @@
+--- components/cookie_config/cookie_store_util.cc.orig 2019-03-11 22:00:56 UTC
++++ components/cookie_config/cookie_store_util.cc
+@@ -11,7 +11,7 @@
+
+ namespace cookie_config {
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ namespace {
+
+ // Use the operating system's mechanisms to encrypt cookies before writing
+@@ -63,10 +63,10 @@ base::LazyInstance<CookieOSCryptoDelegate>::Destructor
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return g_cookie_crypto_delegate.Pointer();
+ }
+-#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#else // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ net::CookieCryptoDelegate* GetCookieCryptoDelegate() {
+ return NULL;
+ }
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ } // namespace cookie_config
diff --git a/www/iridium/files/patch-components_crash_content_app_BUILD.gn b/www/iridium/files/patch-components_crash_content_app_BUILD.gn
new file mode 100644
index 000000000000..2d01264b0bad
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_content_app_BUILD.gn
@@ -0,0 +1,52 @@
+--- components/crash/content/app/BUILD.gn.orig 2020-03-16 18:40:30 UTC
++++ components/crash/content/app/BUILD.gn
+@@ -49,17 +49,20 @@ static_library("app") {
+ "crashpad_win.cc",
+ ]
+
+- if (is_mac || is_win || is_android || is_linux) {
++ if ((is_mac || is_win || is_android || is_linux) && !is_bsd) {
+ sources += [ "crashpad.cc" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "breakpad_linux.cc",
+ "breakpad_linux.h",
+ "breakpad_linux_impl.h",
+ ]
+ }
++ if (is_bsd) {
++ sources -= [ "crashpad_linux.cc" ]
++ }
+
+ defines = [ "CRASH_IMPLEMENTATION" ]
+
+@@ -69,7 +72,7 @@ static_library("app") {
+ "//build:branding_buildflags",
+ ]
+
+- if (is_mac || is_win || is_android || is_linux) {
++ if ((is_mac || is_win || is_android || is_linux) && !is_bsd) {
+ deps += [
+ "//third_party/crashpad/crashpad/client",
+ "//third_party/crashpad/crashpad/util",
+@@ -95,7 +98,7 @@ static_library("app") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
+@@ -126,7 +129,7 @@ static_library("app") {
+ libs = [ "log" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps = [ "//third_party/crashpad/crashpad/handler:crashpad_handler" ]
+ }
+ }
diff --git a/www/iridium/files/patch-components_crash_content_app_crashpad.cc b/www/iridium/files/patch-components_crash_content_app_crashpad.cc
new file mode 100644
index 000000000000..f709f5f3087d
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_content_app_crashpad.cc
@@ -0,0 +1,43 @@
+--- components/crash/content/app/crashpad.cc.orig 2019-04-30 22:22:41 UTC
++++ components/crash/content/app/crashpad.cc
+@@ -104,6 +104,12 @@ void InitializeCrashpadImpl(bool initial_client,
+ const base::FilePath& exe_path,
+ const std::vector<std::string>& initial_arguments,
+ bool embedded_handler) {
++
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return;
++#endif
++
+ static bool initialized = false;
+ DCHECK(!initialized);
+ initialized = true;
+@@ -124,7 +130,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ DCHECK(browser_process || process_type == "Chrome Installer" ||
+ process_type == "notification-helper" ||
+ process_type == "GCPW Installer" || process_type == "GCPW DLL");
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ DCHECK(browser_process);
+ #else
+ #error Port.
+@@ -192,7 +198,7 @@ void InitializeCrashpadImpl(bool initial_client,
+ // other "main, first process" to initialize things. There is no "relauncher"
+ // on Windows, so this is synonymous with initial_client.
+ const bool should_initialize_database_and_set_upload_policy = initial_client;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ const bool should_initialize_database_and_set_upload_policy = browser_process;
+ #endif
+ if (should_initialize_database_and_set_upload_policy) {
+@@ -272,7 +278,9 @@ bool GetUploadsEnabled() {
+
+ #if !defined(OS_ANDROID)
+ void DumpWithoutCrashing() {
++#if !defined(OS_BSD)
+ CRASHPAD_SIMULATE_CRASH();
++#endif
+ }
+ #endif
+
diff --git a/www/iridium/files/patch-components_crash_content_app_crashpad.h b/www/iridium/files/patch-components_crash_content_app_crashpad.h
new file mode 100644
index 000000000000..caf10f1a4f6a
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_content_app_crashpad.h
@@ -0,0 +1,66 @@
+--- components/crash/content/app/crashpad.h.orig 2019-12-19 16:46:22 UTC
++++ components/crash/content/app/crashpad.h
+@@ -22,7 +22,7 @@
+ #include <windows.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <signal.h>
+ #endif
+
+@@ -37,7 +37,7 @@ class CrashReportDatabase;
+
+ namespace crash_reporter {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(jperaza): Remove kEnableCrashpad and IsCrashpadEnabled() when Crashpad
+ // is fully enabled on Linux.
+ extern const char kEnableCrashpad[];
+@@ -146,11 +146,11 @@ void RequestSingleCrashUpload(const std::string& local
+
+ void DumpWithoutCrashing();
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Logs message and immediately crashes the current process without triggering a
+ // crash dump.
+ void CrashWithoutDumping(const std::string& message);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ // Returns the Crashpad database path, only valid in the browser.
+ base::FilePath GetCrashpadDatabasePath();
+@@ -188,7 +188,7 @@ bool DumpWithoutCrashingForClient(CrashReporterClient*
+ void WhitelistMemoryRange(void* begin, size_t size);
+ #endif // OS_ANDROID
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Install a handler that gets a chance to handle faults before Crashpad. This
+ // is used by V8 for trap-based bounds checks.
+ void SetFirstChanceExceptionHandler(bool (*handler)(int, siginfo_t*, void*));
+@@ -196,7 +196,7 @@ void SetFirstChanceExceptionHandler(bool (*handler)(in
+ // Gets the socket and process ID of the Crashpad handler connected to this
+ // process, valid if this function returns `true`.
+ bool GetHandlerSocket(int* sock, pid_t* pid);
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ namespace internal {
+
+@@ -212,11 +212,11 @@ DWORD WINAPI DumpProcessForHungInputThread(void* param
+
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Starts the handler process with an initial client connected on fd.
+ // Returns `true` on success.
+ bool StartHandlerForClient(int fd);
+-#endif // OS_LINUX || OS_ANDROID
++#endif // OS_LINUX || OS_ANDROID || OS_BSD
+
+ // The platform-specific portion of InitializeCrashpad(). On Windows, if
+ // |user_data_dir| is non-empty, the user data directory will be passed to the
diff --git a/www/iridium/files/patch-components_crash_content_app_crashpad__linux.cc b/www/iridium/files/patch-components_crash_content_app_crashpad__linux.cc
new file mode 100644
index 000000000000..20d5d6295eb7
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_content_app_crashpad__linux.cc
@@ -0,0 +1,24 @@
+--- components/crash/content/app/crashpad_linux.cc.orig 2020-03-16 18:39:48 UTC
++++ components/crash/content/app/crashpad_linux.cc
+@@ -5,7 +5,9 @@
+ #include "components/crash/content/app/crashpad.h"
+
+ #include <pthread.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+
+ #include <limits>
+
+@@ -67,9 +69,11 @@ void SetPtracerAtFork() {
+ if (!GetHandlerSocket(nullptr, &pid)) {
+ return;
+ }
++#if !defined(OS_BSD)
+ if (pid > 0 && prctl(PR_SET_PTRACER, pid, 0, 0, 0) != 0) {
+ PLOG(ERROR) << "prctl";
+ }
++#endif
+ }
+
+ namespace internal {
diff --git a/www/iridium/files/patch-components_crash_content_browser_BUILD.gn b/www/iridium/files/patch-components_crash_content_browser_BUILD.gn
new file mode 100644
index 000000000000..6c5e78455e0f
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_content_browser_BUILD.gn
@@ -0,0 +1,27 @@
+--- components/crash/content/browser/BUILD.gn.orig 2019-03-11 22:00:56 UTC
++++ components/crash/content/browser/BUILD.gn
+@@ -28,7 +28,7 @@ source_set("browser") {
+ "//content/public/common",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android) {
+ set_sources_assignment_filter([])
+
+ # Want this file on both Linux and Android.
+@@ -42,13 +42,13 @@ source_set("browser") {
+ deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
+
+- if (!is_android) {
++ if (!is_android && !is_bsd) {
+ deps += [ "//third_party/breakpad:client" ]
+ }
+
+ # This is not in the GYP build but this target includes breakpad client
+ # headers, so add the dependency here.
+- if ((is_posix && !is_ios) || is_fuchsia) {
++ if ((is_posix && !is_ios && !is_bsd) || is_fuchsia) {
+ configs += [ "//third_party/breakpad:client_config" ]
+ public_configs = [ "//third_party/breakpad:client_config" ]
+ }
diff --git a/www/iridium/files/patch-components_crash_core_common_BUILD.gn b/www/iridium/files/patch-components_crash_core_common_BUILD.gn
new file mode 100644
index 000000000000..b7c5ab969a32
--- /dev/null
+++ b/www/iridium/files/patch-components_crash_core_common_BUILD.gn
@@ -0,0 +1,31 @@
+--- components/crash/core/common/BUILD.gn.orig 2020-03-16 18:39:48 UTC
++++ components/crash/core/common/BUILD.gn
+@@ -7,7 +7,7 @@ import("//components/gwp_asan/buildflags/buildflags.gn
+
+ declare_args() {
+ # If set to true, this will stub out and disable the entire crash key system.
+- use_crash_key_stubs = is_fuchsia
++ use_crash_key_stubs = is_fuchsia || is_bsd
+ }
+
+ group("common") {
+@@ -104,7 +104,9 @@ target(crash_key_target_type, "crash_key_lib") {
+ ]
+ }
+
+- deps += [ "//third_party/breakpad:client" ]
++ if (!is_bsd) {
++ deps += [ "//third_party/breakpad:client" ]
++ }
+ if (use_combined_annotations) {
+ public_deps += [ "//third_party/crashpad/crashpad/client" ]
+ }
+@@ -167,7 +169,7 @@ source_set("unit_tests") {
+ sources += [ "objc_zombie_unittest.mm" ]
+ }
+
+- if (!is_mac && !is_ios && !is_win && !is_fuchsia && !is_android) {
++ if (!is_mac && !is_ios && !is_win && !is_fuchsia && !is_android && !is_bsd) {
+ include_dirs = [ "//third_party/breakpad/breakpad/src/" ]
+ sources += [ "crash_key_breakpad_unittest.cc" ]
+ }
diff --git a/www/iridium/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc b/www/iridium/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
new file mode 100644
index 000000000000..def54d6eaffa
--- /dev/null
+++ b/www/iridium/files/patch-components_discardable__memory_service_discardable__shared__memory__manager.cc
@@ -0,0 +1,20 @@
+--- components/discardable_memory/service/discardable_shared_memory_manager.cc.orig 2020-03-16 18:40:30 UTC
++++ components/discardable_memory/service/discardable_shared_memory_manager.cc
+@@ -33,7 +33,7 @@
+ #include "components/discardable_memory/common/discardable_shared_memory_heap.h"
+ #include "mojo/public/cpp/bindings/self_owned_receiver.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/file_path.h"
+ #include "base/files/file_util.h"
+ #include "base/metrics/histogram_macros.h"
+@@ -182,7 +182,7 @@ int64_t GetDefaultMemoryLimit() {
+ max_default_memory_limit /= 8;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::FilePath shmem_dir;
+ if (base::GetShmemTempDir(false, &shmem_dir)) {
+ int64_t shmem_dir_amount_of_free_space =
diff --git a/www/iridium/files/patch-components_download_internal_common_base__file.cc b/www/iridium/files/patch-components_download_internal_common_base__file.cc
new file mode 100644
index 000000000000..dbb0a0dd18dd
--- /dev/null
+++ b/www/iridium/files/patch-components_download_internal_common_base__file.cc
@@ -0,0 +1,20 @@
+--- components/download/internal/common/base_file.cc.orig 2019-12-16 21:50:45 UTC
++++ components/download/internal/common/base_file.cc
+@@ -603,7 +603,7 @@ GURL GetEffectiveAuthorityURL(const GURL& source_url,
+
+ } // namespace
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ DownloadInterruptReason BaseFile::AnnotateWithSourceInformationSync(
+ const std::string& client_guid,
+@@ -621,7 +621,7 @@ DownloadInterruptReason BaseFile::AnnotateWithSourceIn
+
+ return QuarantineFileResultToReason(result);
+ }
+-#else // !OS_WIN && !OS_MACOSX && !OS_LINUX
++#else // !OS_WIN && !OS_MACOSX && !OS_LINUX && !OS_BSD
+ DownloadInterruptReason BaseFile::AnnotateWithSourceInformationSync(
+ const std::string& client_guid,
+ const GURL& source_url,
diff --git a/www/iridium/files/patch-components_feature__engagement_public_event__constants.cc b/www/iridium/files/patch-components_feature__engagement_public_event__constants.cc
new file mode 100644
index 000000000000..ea4af4e91c50
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_event__constants.cc
@@ -0,0 +1,27 @@
+--- components/feature_engagement/public/event_constants.cc.orig 2020-02-03 21:52:44 UTC
++++ components/feature_engagement/public/event_constants.cc
+@@ -12,12 +12,12 @@ namespace feature_engagement {
+ namespace events {
+
+ #if defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) || \
+- defined(OS_LINUX) || defined(OS_CHROMEOS)
++ defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ const char kNewTabOpened[] = "new_tab_opened";
+ #endif // defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) ||
+- // defined(OS_LINUX) || defined(OS_CHROMEOS)
++ // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const char kReopenTabConditionsMet[] = "reopen_tab_conditions_met";
+ const char kTabReopened[] = "tab_reopened";
+@@ -42,7 +42,7 @@ const char kIncognitoWindowOpened[] = "incognito_windo
+ const char kIncognitoWindowSessionTimeMet[] =
+ "incognito_window_session_time_met";
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_IOS)
diff --git a/www/iridium/files/patch-components_feature__engagement_public_event__constants.h b/www/iridium/files/patch-components_feature__engagement_public_event__constants.h
new file mode 100644
index 000000000000..96b274df41fb
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_event__constants.h
@@ -0,0 +1,30 @@
+--- components/feature_engagement/public/event_constants.h.orig 2020-02-03 21:52:44 UTC
++++ components/feature_engagement/public/event_constants.h
+@@ -14,15 +14,15 @@ namespace events {
+
+ // Desktop and IOS.
+ #if defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) || \
+- defined(OS_LINUX) || defined(OS_CHROMEOS)
++ defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The user has explicitly opened a new tab via an entry point from inside of
+ // Chrome.
+ extern const char kNewTabOpened[];
+ #endif // defined(OS_IOS) || defined(OS_WIN) || defined(OS_MACOSX) ||
+- // defined(OS_LINUX) || defined(OS_CHROMEOS)
++ // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+
+ // Desktop
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ // All conditions for reopen closed tab IPH were met. Since this IPH needs to
+ // track user events (opening/closing tabs, focusing the omnibox, etc) on the
+@@ -80,7 +80,7 @@ extern const char kIncognitoWindowOpened[];
+ extern const char kIncognitoWindowSessionTimeMet[];
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_IOS)
diff --git a/www/iridium/files/patch-components_feature__engagement_public_feature__constants.cc b/www/iridium/files/patch-components_feature__engagement_public_feature__constants.cc
new file mode 100644
index 000000000000..699be09ed7b4
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_feature__constants.cc
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_constants.cc.orig 2020-02-03 21:53:30 UTC
++++ components/feature_engagement/public/feature_constants.cc
+@@ -14,7 +14,7 @@ const base::Feature kIPHDemoMode{"IPH_DemoMode",
+ const base::Feature kIPHDummyFeature{"IPH_Dummy",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ const base::Feature kIPHFocusModeFeature{"IPH_FocusMode",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+@@ -33,7 +33,7 @@ const base::Feature kIPHIncognitoWindowFeature{
+ const base::Feature kIPHNewTabFeature{"IPH_NewTab",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ #if defined(OS_ANDROID)
diff --git a/www/iridium/files/patch-components_feature__engagement_public_feature__constants.h b/www/iridium/files/patch-components_feature__engagement_public_feature__constants.h
new file mode 100644
index 000000000000..415b6f1d8c71
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_feature__constants.h
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_constants.h.orig 2020-02-03 21:53:30 UTC
++++ components/feature_engagement/public/feature_constants.h
+@@ -17,7 +17,7 @@ extern const base::Feature kIPHDemoMode;
+ // A feature to ensure all arrays can contain at least one feature.
+ extern const base::Feature kIPHDummyFeature;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ extern const base::Feature kIPHFocusModeFeature;
+ extern const base::Feature kIPHGlobalMediaControlsFeature;
+@@ -29,7 +29,7 @@ extern const base::Feature kIPHBookmarkFeature;
+ extern const base::Feature kIPHIncognitoWindowFeature;
+ extern const base::Feature kIPHNewTabFeature;
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IPH)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ // All the features declared for Android below that are also used in Java,
diff --git a/www/iridium/files/patch-components_feature__engagement_public_feature__list.cc b/www/iridium/files/patch-components_feature__engagement_public_feature__list.cc
new file mode 100644
index 000000000000..6bfd36f75f8d
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_feature__list.cc
@@ -0,0 +1,20 @@
+--- components/feature_engagement/public/feature_list.cc.orig 2020-03-16 18:39:48 UTC
++++ components/feature_engagement/public/feature_list.cc
+@@ -58,7 +58,7 @@ const base::Feature* const kAllFeatures[] = {
+ &kIPHBadgedReadingListFeature,
+ &kIPHBadgedTranslateManualTriggerFeature,
+ #endif // defined(OS_IOS)
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ &kIPHFocusModeFeature,
+ &kIPHGlobalMediaControlsFeature,
+@@ -69,7 +69,7 @@ const base::Feature* const kAllFeatures[] = {
+ &kIPHIncognitoWindowFeature,
+ &kIPHNewTabFeature,
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+ };
+ } // namespace
diff --git a/www/iridium/files/patch-components_feature__engagement_public_feature__list.h b/www/iridium/files/patch-components_feature__engagement_public_feature__list.h
new file mode 100644
index 000000000000..246d10568f99
--- /dev/null
+++ b/www/iridium/files/patch-components_feature__engagement_public_feature__list.h
@@ -0,0 +1,38 @@
+--- components/feature_engagement/public/feature_list.h.orig 2020-03-16 18:39:48 UTC
++++ components/feature_engagement/public/feature_list.h
+@@ -111,7 +111,7 @@ DEFINE_VARIATION_PARAM(kIPHBadgedTranslateManualTrigge
+ "IPH_BadgedTranslateManualTrigger");
+ #endif // defined(OS_IOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ DEFINE_VARIATION_PARAM(kIPHFocusModeFeature, "IPH_FocusMode");
+ DEFINE_VARIATION_PARAM(kIPHGlobalMediaControls, "IPH_GlobalMediaControls");
+@@ -122,7 +122,7 @@ DEFINE_VARIATION_PARAM(kIPHBookmarkFeature, "IPH_Bookm
+ DEFINE_VARIATION_PARAM(kIPHIncognitoWindowFeature, "IPH_IncognitoWindow");
+ DEFINE_VARIATION_PARAM(kIPHNewTabFeature, "IPH_NewTab");
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+
+ } // namespace
+@@ -172,7 +172,7 @@ constexpr flags_ui::FeatureEntry::FeatureVariation
+ VARIATION_ENTRY(kIPHNewIncognitoTabTipFeature),
+ VARIATION_ENTRY(kIPHBadgedReadingListFeature),
+ VARIATION_ENTRY(kIPHBadgedTranslateManualTriggerFeature),
+-#elif defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#elif defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_CHROMEOS)
+ VARIATION_ENTRY(kIPHFocusModeFeature),
+ VARIATION_ENTRY(kIPHGlobalMediaControls),
+@@ -183,7 +183,7 @@ constexpr flags_ui::FeatureEntry::FeatureVariation
+ VARIATION_ENTRY(kIPHIncognitoWindowFeature),
+ VARIATION_ENTRY(kIPHNewTabFeature),
+ #endif // BUILDFLAG(ENABLE_LEGACY_DESKTOP_IN_PRODUCT_HELP)
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) ||
+ // defined(OS_CHROMEOS)
+ };
+
diff --git a/www/iridium/files/patch-components_feedback_anonymizer__tool.cc b/www/iridium/files/patch-components_feedback_anonymizer__tool.cc
new file mode 100644
index 000000000000..ec853d75bd26
--- /dev/null
+++ b/www/iridium/files/patch-components_feedback_anonymizer__tool.cc
@@ -0,0 +1,14 @@
+--- components/feedback/anonymizer_tool.cc.orig 2020-03-16 18:40:30 UTC
++++ components/feedback/anonymizer_tool.cc
+@@ -15,7 +15,11 @@
+ #include "base/threading/thread_restrictions.h"
+ #include "content/public/browser/browser_thread.h"
+ #include "net/base/ip_address.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using re2::RE2;
+
diff --git a/www/iridium/files/patch-components_flags__ui_flags__state.cc b/www/iridium/files/patch-components_flags__ui_flags__state.cc
new file mode 100644
index 000000000000..fdaa3f2f453c
--- /dev/null
+++ b/www/iridium/files/patch-components_flags__ui_flags__state.cc
@@ -0,0 +1,11 @@
+--- components/flags_ui/flags_state.cc.orig 2020-02-03 21:53:30 UTC
++++ components/flags_ui/flags_state.cc
+@@ -693,7 +693,7 @@ int FlagsState::GetCurrentPlatform() {
+ return kOsWin;
+ #elif defined(OS_CHROMEOS) // Needs to be before the OS_LINUX check.
+ return kOsCrOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_OPENBSD) || defined(OS_FREEBSD)
+ return kOsLinux;
+ #elif defined(OS_ANDROID)
+ return kOsAndroid;
diff --git a/www/iridium/files/patch-components_gcm__driver_gcm__client.h b/www/iridium/files/patch-components_gcm__driver_gcm__client.h
new file mode 100644
index 000000000000..d40f905a889e
--- /dev/null
+++ b/www/iridium/files/patch-components_gcm__driver_gcm__client.h
@@ -0,0 +1,10 @@
+--- components/gcm_driver/gcm_client.h.orig 2020-02-03 21:53:30 UTC
++++ components/gcm_driver/gcm_client.h
+@@ -87,6 +87,7 @@ class GCMClient {
+ PLATFORM_CROS,
+ PLATFORM_IOS,
+ PLATFORM_ANDROID,
++ PLATFORM_BSD,
+ PLATFORM_UNSPECIFIED
+ };
+
diff --git a/www/iridium/files/patch-components_gcm__driver_gcm__client__impl.cc b/www/iridium/files/patch-components_gcm__driver_gcm__client__impl.cc
new file mode 100644
index 000000000000..52e43837a5bd
--- /dev/null
+++ b/www/iridium/files/patch-components_gcm__driver_gcm__client__impl.cc
@@ -0,0 +1,12 @@
+--- components/gcm_driver/gcm_client_impl.cc.orig 2020-02-03 21:53:30 UTC
++++ components/gcm_driver/gcm_client_impl.cc
+@@ -135,6 +135,9 @@ void ToCheckinProtoVersion(
+ case GCMClient::PLATFORM_CROS:
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_CROS;
+ break;
++ case GCMClient::PLATFORM_BSD:
++ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
++ break;
+ case GCMClient::PLATFORM_UNSPECIFIED:
+ // For unknown platform, return as LINUX.
+ platform = checkin_proto::ChromeBuildProto_Platform_PLATFORM_LINUX;
diff --git a/www/iridium/files/patch-components_keyed__service_core_dependency__graph__unittest.cc b/www/iridium/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
new file mode 100644
index 000000000000..bbf7cb18c4a1
--- /dev/null
+++ b/www/iridium/files/patch-components_keyed__service_core_dependency__graph__unittest.cc
@@ -0,0 +1,14 @@
+--- components/keyed_service/core/dependency_graph_unittest.cc.orig 2019-03-11 22:00:56 UTC
++++ components/keyed_service/core/dependency_graph_unittest.cc
+@@ -9,7 +9,11 @@
+ #include "components/keyed_service/core/dependency_graph.h"
+ #include "components/keyed_service/core/dependency_node.h"
+ #include "testing/gtest/include/gtest/gtest.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace {
+
diff --git a/www/iridium/files/patch-components_metrics_BUILD.gn b/www/iridium/files/patch-components_metrics_BUILD.gn
new file mode 100644
index 000000000000..b89758947847
--- /dev/null
+++ b/www/iridium/files/patch-components_metrics_BUILD.gn
@@ -0,0 +1,14 @@
+--- components/metrics/BUILD.gn.orig 2020-03-16 18:40:30 UTC
++++ components/metrics/BUILD.gn
+@@ -173,6 +173,11 @@ jumbo_static_library("metrics") {
+ if (is_fuchsia) {
+ sources += [ "drive_metrics_provider_fuchsia.cc" ]
+ }
++
++ if (is_bsd) {
++ sources -= [ "system_memory_stats_recorder_linux.cc" ]
++ }
++
+ }
+
+ if (is_android) {
diff --git a/www/iridium/files/patch-components_metrics_drive__metrics__provider__linux.cc b/www/iridium/files/patch-components_metrics_drive__metrics__provider__linux.cc
new file mode 100644
index 000000000000..7e51eab82bdb
--- /dev/null
+++ b/www/iridium/files/patch-components_metrics_drive__metrics__provider__linux.cc
@@ -0,0 +1,16 @@
+--- components/metrics/drive_metrics_provider_linux.cc.orig 2019-03-11 22:00:56 UTC
++++ components/metrics/drive_metrics_provider_linux.cc
+@@ -4,7 +4,13 @@
+
+ #include "components/metrics/drive_metrics_provider.h"
+
++#if defined(OS_BSD)
++#include <sys/types.h>
++#define MAJOR(dev) major(dev)
++#define MINOR(dev) minor(dev)
++#else
+ #include <linux/kdev_t.h> // For MAJOR()/MINOR().
++#endif
+ #include <sys/stat.h>
+ #include <string>
+
diff --git a/www/iridium/files/patch-components_metrics_metrics__log.cc b/www/iridium/files/patch-components_metrics_metrics__log.cc
new file mode 100644
index 000000000000..22cb98c234a2
--- /dev/null
+++ b/www/iridium/files/patch-components_metrics_metrics__log.cc
@@ -0,0 +1,11 @@
+--- components/metrics/metrics_log.cc.orig 2019-10-21 19:06:29 UTC
++++ components/metrics/metrics_log.cc
+@@ -202,7 +202,7 @@ void MetricsLog::RecordCoreSystemProfile(
+ // OperatingSystemVersion refers to the ChromeOS release version.
+ #if defined(OS_CHROMEOS)
+ os->set_kernel_version(base::SysInfo::KernelVersion());
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Linux operating system version is copied over into kernel version to be
+ // consistent.
+ os->set_kernel_version(base::SysInfo::OperatingSystemVersion());
diff --git a/www/iridium/files/patch-components_metrics_system__memory__stats__recorder__linux.cc b/www/iridium/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
new file mode 100644
index 000000000000..1cb338f7464b
--- /dev/null
+++ b/www/iridium/files/patch-components_metrics_system__memory__stats__recorder__linux.cc
@@ -0,0 +1,18 @@
+--- components/metrics/system_memory_stats_recorder_linux.cc.orig 2019-09-09 21:55:14 UTC
++++ components/metrics/system_memory_stats_recorder_linux.cc
+@@ -30,6 +30,7 @@ namespace metrics {
+ UMA_HISTOGRAM_LINEAR(name, sample, 2500, 50)
+
+ void RecordMemoryStats(RecordMemoryStatsType type) {
++#if !defined(OS_FREEBSD)
+ base::SystemMemoryInfoKB memory;
+ if (!base::GetSystemMemoryInfo(&memory))
+ return;
+@@ -81,6 +82,7 @@ void RecordMemoryStats(RecordMemoryStatsType type) {
+ break;
+ }
+ }
++#endif // !defined(OS_FREEBSD)
+ }
+
+ } // namespace metrics
diff --git a/www/iridium/files/patch-components_neterror_resources_neterror.js b/www/iridium/files/patch-components_neterror_resources_neterror.js
new file mode 100644
index 000000000000..07a9dedb488d
--- /dev/null
+++ b/www/iridium/files/patch-components_neterror_resources_neterror.js
@@ -0,0 +1,11 @@
+--- components/neterror/resources/neterror.js.orig 2020-02-03 21:53:30 UTC
++++ components/neterror/resources/neterror.js
+@@ -201,7 +201,7 @@ function setUpCachedButton(buttonStrings) {
+ }
+
+ let primaryControlOnLeft = true;
+-// <if expr="is_macosx or is_ios or is_linux or is_android">
++// <if expr="is_macosx or is_ios or is_linux or is_android or is_bsd">
+ primaryControlOnLeft = false;
+ // </if>
+
diff --git a/www/iridium/files/patch-components_network__session__configurator_browser_network__session__configurator.cc b/www/iridium/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
new file mode 100644
index 000000000000..658b31ad44fb
--- /dev/null
+++ b/www/iridium/files/patch-components_network__session__configurator_browser_network__session__configurator.cc
@@ -0,0 +1,11 @@
+--- components/network_session_configurator/browser/network_session_configurator.cc.orig 2020-03-16 18:40:30 UTC
++++ components/network_session_configurator/browser/network_session_configurator.cc
+@@ -718,7 +718,7 @@ net::URLRequestContextBuilder::HttpCacheParams::Type C
+ }
+ #endif // #if !defined(OS_ANDROID)
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_SIMPLE;
+ #else
+ return net::URLRequestContextBuilder::HttpCacheParams::DISK_BLOCKFILE;
diff --git a/www/iridium/files/patch-components_new__or__sad__tab__strings.grdp b/www/iridium/files/patch-components_new__or__sad__tab__strings.grdp
new file mode 100644
index 000000000000..015ca5836d21
--- /dev/null
+++ b/www/iridium/files/patch-components_new__or__sad__tab__strings.grdp
@@ -0,0 +1,47 @@
+--- components/new_or_sad_tab_strings.grdp.orig 2020-03-16 18:40:30 UTC
++++ components/new_or_sad_tab_strings.grdp
+@@ -51,7 +51,7 @@
+ Open page in a new Incognito window (⇧⌘N)
+ </message>
+ </if>
+- <if expr="is_win or is_linux or chromeos">
++ <if expr="is_win or is_posix or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_INCOGNITO" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to open the web page in Chrome's Incognito mode.">
+ Open page in a new Incognito window (Ctrl-Shift-N)
+ </message>
+@@ -66,7 +66,7 @@
+ Close other tabs or apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_TABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other Chrome tabs or programs running on their computer.">
+ Close other tabs or programs
+ </message>
+@@ -76,7 +76,7 @@
+ Close other apps
+ </message>
+ </if>
+- <if expr="is_linux and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_CLOSE_NOTABS" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to close other programs running on their computer (Linux).">
+ Close other programs
+ </message>
+@@ -91,7 +91,7 @@
+ Restart Chromium
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_RELOAD_RESTART_DEVICE" desc="One of the bullet points displayed on the web page if a reload failed to fix the issue, advising the user to restart their computer.">
+ Restart your computer
+ </message>
+@@ -106,7 +106,7 @@
+ Learn more
+ </message>
+ </if>
+- <if expr="is_win or is_linux or is_macosx or chromeos">
++ <if expr="is_win or is_posix or is_macosx or chromeos">
+ <message name="IDS_SAD_TAB_ERROR_CODE" desc="The message displayed on the crashed web page indicating the type of the crash.">
+ Error code: <ph name="ERROR_CODE">$1<ex>STATUS_ACCESS_VIOLATION</ex></ph>
+ </message>
diff --git a/www/iridium/files/patch-components_os__crypt_os__crypt.h b/www/iridium/files/patch-components_os__crypt_os__crypt.h
new file mode 100644
index 000000000000..f9e601a9a454
--- /dev/null
+++ b/www/iridium/files/patch-components_os__crypt_os__crypt.h
@@ -0,0 +1,48 @@
+--- components/os_crypt/os_crypt.h.orig 2020-02-03 21:53:30 UTC
++++ components/os_crypt/os_crypt.h
+@@ -15,9 +15,9 @@
+ #include "base/strings/string16.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ class KeyStorageLinux;
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS))
+ class PrefRegistrySimple;
+@@ -34,13 +34,13 @@ struct Config;
+ // true for Linux, if a password management tool is available.
+ class OSCrypt {
+ public:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Set the configuration of OSCrypt.
+ static COMPONENT_EXPORT(OS_CRYPT) void SetConfig(
+ std::unique_ptr<os_crypt::Config> config);
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+-#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // On Linux returns true iff the real secret key (not hardcoded one) is
+ // available. On MacOS returns true if Keychain is available (for mock
+ // Keychain it returns true if not using locked Keychain, false if using
+@@ -131,7 +131,7 @@ class OSCrypt {
+ DISALLOW_IMPLICIT_CONSTRUCTORS(OSCrypt);
+ };
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For unit testing purposes, inject methods to be used.
+ // |get_key_storage_mock| provides the desired |KeyStorage| implementation.
+ // If the provider returns |nullptr|, a hardcoded password will be used.
+@@ -146,6 +146,6 @@ void UseMockKeyStorageForTesting(
+ // Clears any caching and most lazy initialisations performed by the production
+ // code. Should be used after any test which required a password.
+ COMPONENT_EXPORT(OS_CRYPT) void ClearCacheForTesting();
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ #endif // COMPONENTS_OS_CRYPT_OS_CRYPT_H_
diff --git a/www/iridium/files/patch-components_os__crypt_os__crypt__unittest.cc b/www/iridium/files/patch-components_os__crypt_os__crypt__unittest.cc
new file mode 100644
index 000000000000..d8cbdaad386c
--- /dev/null
+++ b/www/iridium/files/patch-components_os__crypt_os__crypt__unittest.cc
@@ -0,0 +1,11 @@
+--- components/os_crypt/os_crypt_unittest.cc.orig 2019-03-11 22:00:56 UTC
++++ components/os_crypt/os_crypt_unittest.cc
+@@ -18,7 +18,7 @@
+ #include "components/os_crypt/os_crypt_mocker.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "components/os_crypt/os_crypt_mocker_linux.h"
+ #endif
+
diff --git a/www/iridium/files/patch-components_plugins_renderer_plugin__placeholder.cc b/www/iridium/files/patch-components_plugins_renderer_plugin__placeholder.cc
new file mode 100644
index 000000000000..0f704d529edf
--- /dev/null
+++ b/www/iridium/files/patch-components_plugins_renderer_plugin__placeholder.cc
@@ -0,0 +1,14 @@
+--- components/plugins/renderer/plugin_placeholder.cc.orig 2019-03-11 22:00:56 UTC
++++ components/plugins/renderer/plugin_placeholder.cc
+@@ -17,7 +17,11 @@
+ #include "third_party/blink/public/web/web_plugin_container.h"
+ #include "third_party/blink/public/web/web_script_source.h"
+ #include "third_party/blink/public/web/web_serialized_script_value.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace plugins {
+
diff --git a/www/iridium/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc b/www/iridium/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
new file mode 100644
index 000000000000..06a59baab59d
--- /dev/null
+++ b/www/iridium/files/patch-components_policy_core_common_cloud_cloud__policy__util.cc
@@ -0,0 +1,73 @@
+--- components/policy/core/common/cloud/cloud_policy_util.cc.orig 2020-02-03 21:52:44 UTC
++++ components/policy/core/common/cloud/cloud_policy_util.cc
+@@ -16,7 +16,7 @@
+ #include <wincred.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ #include <pwd.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -31,7 +31,7 @@
+ #import <SystemConfiguration/SCDynamicStoreCopySpecific.h>
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include <limits.h> // For HOST_NAME_MAX
+ #endif
+
+@@ -60,7 +60,7 @@
+ #include "base/system/sys_info.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "base/system/sys_info.h"
+ #endif
+
+@@ -69,11 +69,24 @@ namespace policy {
+ namespace em = enterprise_management;
+
+ std::string GetMachineName() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
+ char hostname[HOST_NAME_MAX];
+ if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
+ return hostname;
+ return std::string();
++#elif defined(OS_BSD)
++ long host_name_max = sysconf(_SC_HOST_NAME_MAX);
++ if (host_name_max != -1) {
++ char *hostname = new char[host_name_max + 1]();
++ std::string hostname_r;
++
++ if (gethostname(hostname, host_name_max) == 0)
++ hostname_r = hostname;
++
++ delete[] hostname;
++ return hostname_r;
++ }
++ return std::string();
+ #elif defined(OS_MACOSX)
+ // TODO(crbug.com/1024115): Find a different replacement for -[NSHost
+ // currentHost] on iOS.
+@@ -123,7 +136,7 @@ std::string GetMachineName() {
+ }
+
+ std::string GetOSVersion() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return base::SysInfo::OperatingSystemVersion();
+ #elif defined(OS_WIN)
+ base::win::OSInfo::VersionNumber version_number =
+@@ -146,7 +159,7 @@ std::string GetOSArchitecture() {
+ }
+
+ std::string GetOSUsername() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ struct passwd* creds = getpwuid(getuid());
+ if (!creds || !creds->pw_name)
+ return std::string();
diff --git a/www/iridium/files/patch-components_policy_core_common_schema.cc b/www/iridium/files/patch-components_policy_core_common_schema.cc
new file mode 100644
index 000000000000..084085fb3d9f
--- /dev/null
+++ b/www/iridium/files/patch-components_policy_core_common_schema.cc
@@ -0,0 +1,14 @@
+--- components/policy/core/common/schema.cc.orig 2019-03-11 22:00:56 UTC
++++ components/policy/core/common/schema.cc
+@@ -23,7 +23,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "components/policy/core/common/json_schema_constants.h"
+ #include "components/policy/core/common/schema_internal.h"
++#if defined(OS_FREEBSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace schema = json_schema_constants;
+
diff --git a/www/iridium/files/patch-components_policy_resources_policy__templates.json b/www/iridium/files/patch-components_policy_resources_policy__templates.json
new file mode 100644
index 000000000000..5eca40e4b2ae
--- /dev/null
+++ b/www/iridium/files/patch-components_policy_resources_policy__templates.json
@@ -0,0 +1,83 @@
+--- components/policy/resources/policy_templates.json.orig 2020-03-16 18:40:31 UTC
++++ components/policy/resources/policy_templates.json
+@@ -1088,7 +1088,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:81-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'android:81-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1118,7 +1118,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.*:8-', 'chrome_os:11-'],
++ 'supported_on': ['chrome.*:8-', 'chrome_os:11-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1145,7 +1145,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.*:58-', 'chrome_os:58-'],
++ 'supported_on': ['chrome.*:58-', 'chrome_os:58-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -1944,7 +1944,7 @@
+ 'owners': ['jamiewalch@chromium.org', 'rkjnsn@chromium.org'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-'],
++ 'supported_on': ['chrome.linux:25-', 'chrome.mac:25-', 'chrome_os:42-', 'chrome.freebsd:25-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -3807,7 +3807,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'string',
+ 'schema': { 'type': 'string' },
+- 'supported_on': ['chrome.linux:9-'],
++ 'supported_on': ['chrome.linux:9-', 'chrome.freebsd:9-'],
+ 'features': {
+ 'dynamic_refresh': False,
+ 'per_profile': False,
+@@ -3861,7 +3861,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-'],
++ 'supported_on': ['chrome.linux:63-','chrome.mac:63-','chrome_os:63-','android:63-','webview_android:63-', 'chrome.freebsd:63-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -7329,7 +7329,7 @@
+ 'owners': ['file://src/net/cert/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
++ 'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-', 'chrome.freebsd:30-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': False,
+@@ -8621,7 +8621,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:19-', 'chrome.linux:19-'],
++ 'supported_on': ['chrome.win:19-', 'chrome.linux:19-', 'chrome.freebsd:19-'],
+ 'features': {
+ 'can_be_recommended': True,
+ 'dynamic_refresh': True,
+@@ -9297,7 +9297,7 @@
+ 'owners': ['file://components/policy/resources/OWNERS'],
+ 'type': 'main',
+ 'schema': { 'type': 'boolean' },
+- 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-'],
++ 'supported_on': ['chrome.win:31-', 'chrome.linux:31-', 'chrome_os:31-', 'chrome.freebsd:31-'],
+ 'features': {
+ 'dynamic_refresh': True,
+ 'per_profile': True,
diff --git a/www/iridium/files/patch-components_policy_tools_generate__policy__source.py b/www/iridium/files/patch-components_policy_tools_generate__policy__source.py
new file mode 100644
index 000000000000..0274c627676a
--- /dev/null
+++ b/www/iridium/files/patch-components_policy_tools_generate__policy__source.py
@@ -0,0 +1,19 @@
+--- components/policy/tools/generate_policy_source.py.orig 2020-02-03 21:53:30 UTC
++++ components/policy/tools/generate_policy_source.py
+@@ -97,6 +97,7 @@ class PolicyDetails:
+ 'chrome.linux',
+ 'chrome.mac',
+ 'chrome.fuchsia',
++ 'chrome.freebsd',
+ 'chrome.*',
+ 'chrome.win7',
+ ]:
+@@ -119,7 +120,7 @@ class PolicyDetails:
+ if platform.startswith('chrome.'):
+ platform_sub = platform[7:]
+ if platform_sub == '*':
+- self.platforms.extend(['win', 'mac', 'linux', 'fuchsia'])
++ self.platforms.extend(['win', 'mac', 'linux', 'fuchsia', 'freebsd'])
+ elif platform_sub == 'win7':
+ self.platforms.append('win')
+ else:
diff --git a/www/iridium/files/patch-components_previews_core_previews__features.cc b/www/iridium/files/patch-components_previews_core_previews__features.cc
new file mode 100644
index 000000000000..fabf0b3025ea
--- /dev/null
+++ b/www/iridium/files/patch-components_previews_core_previews__features.cc
@@ -0,0 +1,18 @@
+--- components/previews/core/previews_features.cc.orig 2019-03-11 22:00:57 UTC
++++ components/previews/core/previews_features.cc
+@@ -14,12 +14,12 @@ namespace features {
+ // are enabled are controlled by other features.
+ const base::Feature kPreviews {
+ "Previews",
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Previews allowed for Android (but also allow on Linux for dev/debug).
+ base::FEATURE_ENABLED_BY_DEFAULT
+-#else // !defined(OS_ANDROID) || defined(OS_LINUX)
++#else // !defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // Enables the Offline previews on android slow connections.
diff --git a/www/iridium/files/patch-components_security__interstitials_content_captive__portal__blocking__page.cc b/www/iridium/files/patch-components_security__interstitials_content_captive__portal__blocking__page.cc
new file mode 100644
index 000000000000..b9eaf2aa1e95
--- /dev/null
+++ b/www/iridium/files/patch-components_security__interstitials_content_captive__portal__blocking__page.cc
@@ -0,0 +1,11 @@
+--- components/security_interstitials/content/captive_portal_blocking_page.cc.orig 2020-03-16 18:39:49 UTC
++++ components/security_interstitials/content/captive_portal_blocking_page.cc
+@@ -106,7 +106,7 @@ std::string CaptivePortalBlockingPage::GetWiFiSSID() c
+ wifi_service->GetConnectedNetworkSSID(&ssid, &error);
+ if (!error.empty())
+ return std::string();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ssid = net::GetWifiSSID();
+ #elif defined(OS_ANDROID)
+ ssid = net::android::GetWifiSSID();
diff --git a/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.cc b/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.cc
new file mode 100644
index 000000000000..f6e9116c28d0
--- /dev/null
+++ b/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.cc
@@ -0,0 +1,29 @@
+--- components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc.orig 2020-02-24 18:39:14 UTC
++++ components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.cc
+@@ -15,7 +15,7 @@
+
+ #if defined(OS_WIN)
+ #include "content/public/child/dwrite_font_proxy_init_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #endif
+
+@@ -35,7 +35,7 @@ PaintPreviewCompositorCollectionImpl::PaintPreviewComp
+ // Initialize font access for Skia.
+ #if defined(OS_WIN)
+ content::InitializeDWriteFontProxy();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ content::UtilityThread::Get()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -54,7 +54,7 @@ PaintPreviewCompositorCollectionImpl::PaintPreviewComp
+ // encoding to PNG or we could provide our own codec implementations.
+
+ // Sanity check that fonts are working.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // No WebSandbox is provided on Linux so the local fonts aren't accessible.
+ // This is fine since since the subsetted fonts are provided in the SkPicture.
+ // However, we still need to check that the SkFontMgr starts as it is used by
diff --git a/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.h b/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.h
new file mode 100644
index 000000000000..d84c48a27037
--- /dev/null
+++ b/www/iridium/files/patch-components_services_paint__preview__compositor_paint__preview__compositor__collection__impl.h
@@ -0,0 +1,20 @@
+--- components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.h.orig 2020-02-26 13:13:33 UTC
++++ components/services/paint_preview_compositor/paint_preview_compositor_collection_impl.h
+@@ -19,7 +19,7 @@
+ #include "mojo/public/cpp/bindings/pending_receiver.h"
+ #include "mojo/public/cpp/bindings/receiver.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -68,7 +68,7 @@ class PaintPreviewCompositorCollectionImpl
+ std::unique_ptr<PaintPreviewCompositorImpl>>
+ compositors_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/www/iridium/files/patch-components_storage__monitor_BUILD.gn b/www/iridium/files/patch-components_storage__monitor_BUILD.gn
new file mode 100644
index 000000000000..3d90d22d647b
--- /dev/null
+++ b/www/iridium/files/patch-components_storage__monitor_BUILD.gn
@@ -0,0 +1,16 @@
+--- components/storage_monitor/BUILD.gn.orig 2019-10-21 19:06:30 UTC
++++ components/storage_monitor/BUILD.gn
+@@ -81,6 +81,13 @@ static_library("storage_monitor") {
+ }
+ }
+
++ if (is_bsd) {
++ sources += [
++ "storage_monitor_freebsd.cc",
++ "storage_monitor_freebsd.h",
++ ]
++ }
++
+ if (use_udev) {
+ sources += [
+ "udev_util_linux.cc",
diff --git a/www/iridium/files/patch-components_storage__monitor_removable__device__constants.cc b/www/iridium/files/patch-components_storage__monitor_removable__device__constants.cc
new file mode 100644
index 000000000000..055ef8ce5281
--- /dev/null
+++ b/www/iridium/files/patch-components_storage__monitor_removable__device__constants.cc
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.cc.orig 2019-03-11 22:00:57 UTC
++++ components/storage_monitor/removable_device_constants.cc
+@@ -10,7 +10,7 @@ namespace storage_monitor {
+ const char kFSUniqueIdPrefix[] = "UUID:";
+ const char kVendorModelSerialPrefix[] = "VendorModelSerial:";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kVendorModelVolumeStoragePrefix[] = "VendorModelVolumeStorage:";
+ #endif
+
diff --git a/www/iridium/files/patch-components_storage__monitor_removable__device__constants.h b/www/iridium/files/patch-components_storage__monitor_removable__device__constants.h
new file mode 100644
index 000000000000..6417016c4b7e
--- /dev/null
+++ b/www/iridium/files/patch-components_storage__monitor_removable__device__constants.h
@@ -0,0 +1,11 @@
+--- components/storage_monitor/removable_device_constants.h.orig 2019-03-11 22:00:57 UTC
++++ components/storage_monitor/removable_device_constants.h
+@@ -15,7 +15,7 @@ namespace storage_monitor {
+ extern const char kFSUniqueIdPrefix[];
+ extern const char kVendorModelSerialPrefix[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kVendorModelVolumeStoragePrefix[];
+ #endif
+
diff --git a/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.cc b/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
new file mode 100644
index 000000000000..5565618b98b3
--- /dev/null
+++ b/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.cc
@@ -0,0 +1,57 @@
+--- components/storage_monitor/storage_monitor_freebsd.cc.orig 2019-03-17 01:47:13 UTC
++++ components/storage_monitor/storage_monitor_freebsd.cc
+@@ -0,0 +1,54 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD implementation.
++
++#include "components/storage_monitor/storage_monitor_freebsd.h"
++
++#include <stdio.h>
++
++#include <list>
++
++#include "base/bind.h"
++#include "base/metrics/histogram.h"
++#include "base/process/kill.h"
++#include "base/process/launch.h"
++#include "base/stl_util.h"
++#include "base/strings/string_number_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/utf_string_conversions.h"
++#include "components/storage_monitor/media_storage_util.h"
++#include "components/storage_monitor/removable_device_constants.h"
++#include "components/storage_monitor/storage_info.h"
++
++using content::BrowserThread;
++
++namespace storage_monitor {
++
++namespace {
++
++} // namespace
++
++StorageMonitorFreeBSD::StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++StorageMonitorFreeBSD::~StorageMonitorFreeBSD() {
++ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
++}
++
++void StorageMonitorFreeBSD::Init() {
++}
++
++bool StorageMonitorFreeBSD::GetStorageInfoForPath(
++ const base::FilePath& path,
++ StorageInfo* device_info) const {
++ return false; // TODO
++}
++
++StorageMonitor* StorageMonitor::CreateInternal() {
++ return new StorageMonitorFreeBSD();
++}
++
++} // namespace storage_monitor
diff --git a/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.h b/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.h
new file mode 100644
index 000000000000..258c90fede4d
--- /dev/null
+++ b/www/iridium/files/patch-components_storage__monitor_storage__monitor__freebsd.h
@@ -0,0 +1,48 @@
+--- components/storage_monitor/storage_monitor_freebsd.h.orig 2019-03-17 01:47:13 UTC
++++ components/storage_monitor/storage_monitor_freebsd.h
+@@ -0,0 +1,45 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++// StorageMonitorFreeBSD processes mount point change events, notifies listeners
++// about the addition and deletion of media devices, and answers queries about
++// mounted devices.
++// StorageMonitorFreeBSD lives on the UI thread, and uses ???
++// the FILE thread to get mount point change events.
++
++#ifndef COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++#define COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
++
++#include <map>
++#include <string>
++
++#include "base/compiler_specific.h"
++#include "base/files/file_path.h"
++#include "base/files/file_path_watcher.h"
++#include "base/memory/weak_ptr.h"
++#include "components/storage_monitor/storage_monitor.h"
++#include "content/public/browser/browser_thread.h"
++
++namespace storage_monitor {
++
++class StorageMonitorFreeBSD : public StorageMonitor {
++ public:
++ // Should only be called by browser start up code.
++ // Use StorageMonitor::GetInstance() instead.
++ explicit StorageMonitorFreeBSD();
++ virtual ~StorageMonitorFreeBSD();
++
++ // Must be called for StorageMonitorFreeBSD to work.
++ virtual void Init() override;
++ private:
++ // StorageMonitor implementation.
++ virtual bool GetStorageInfoForPath(const base::FilePath& path,
++ StorageInfo* device_info) const override;
++
++ DISALLOW_COPY_AND_ASSIGN(StorageMonitorFreeBSD);
++};
++
++} // namespace storage_monitor
++
++#endif // COMPONENTS_STORAGE_MONITOR_STORAGE_MONITOR_FREEBSD_H_
diff --git a/www/iridium/files/patch-components_sync__device__info_device__info__sync__bridge.cc b/www/iridium/files/patch-components_sync__device__info_device__info__sync__bridge.cc
new file mode 100644
index 000000000000..c075e1c2a99c
--- /dev/null
+++ b/www/iridium/files/patch-components_sync__device__info_device__info__sync__bridge.cc
@@ -0,0 +1,16 @@
+--- components/sync_device_info/device_info_sync_bridge.cc.orig 2020-03-16 18:40:31 UTC
++++ components/sync_device_info/device_info_sync_bridge.cc
+@@ -456,11 +456,13 @@ void DeviceInfoSyncBridge::OnStoreCreated(
+ return;
+ }
+
++#if !defined(OS_BSD)
+ store_ = std::move(store);
+
+ base::SysInfo::GetHardwareInfo(
+ base::BindOnce(&DeviceInfoSyncBridge::OnHardwareInfoRetrieved,
+ weak_ptr_factory_.GetWeakPtr()));
++#endif
+ }
+
+ void DeviceInfoSyncBridge::OnHardwareInfoRetrieved(
diff --git a/www/iridium/files/patch-components_sync__device__info_local__device__info__util.cc b/www/iridium/files/patch-components_sync__device__info_local__device__info__util.cc
new file mode 100644
index 000000000000..19d4b54c7495
--- /dev/null
+++ b/www/iridium/files/patch-components_sync__device__info_local__device__info__util.cc
@@ -0,0 +1,11 @@
+--- components/sync_device_info/local_device_info_util.cc.orig 2019-12-31 14:40:27 UTC
++++ components/sync_device_info/local_device_info_util.cc
+@@ -19,7 +19,7 @@ std::string GetPersonalizableDeviceNameInternal();
+ sync_pb::SyncEnums::DeviceType GetLocalDeviceType() {
+ #if defined(OS_CHROMEOS)
+ return sync_pb::SyncEnums_DeviceType_TYPE_CROS;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return sync_pb::SyncEnums_DeviceType_TYPE_LINUX;
+ #elif defined(OS_ANDROID) || defined(OS_IOS)
+ return ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET
diff --git a/www/iridium/files/patch-components_sync__device__info_local__device__info__util__linux.cc b/www/iridium/files/patch-components_sync__device__info_local__device__info__util__linux.cc
new file mode 100644
index 000000000000..5c9398a7ea7c
--- /dev/null
+++ b/www/iridium/files/patch-components_sync__device__info_local__device__info__util__linux.cc
@@ -0,0 +1,14 @@
+--- components/sync_device_info/local_device_info_util_linux.cc.orig 2020-02-24 18:39:14 UTC
++++ components/sync_device_info/local_device_info_util_linux.cc
+@@ -37,8 +37,9 @@ std::string GetPersonalizableDeviceNameInternal() {
+ #if defined(OS_CHROMEOS)
+ return GetChromeOSDeviceNameFromType();
+ #else
+- char hostname[HOST_NAME_MAX];
+- if (gethostname(hostname, HOST_NAME_MAX) == 0) // Success.
++ int len = sysconf(_SC_HOST_NAME_MAX);
++ char hostname[len];
++ if (gethostname(hostname, _SC_HOST_NAME_MAX) == 0) // Success.
+ return hostname;
+ return base::GetLinuxDistro();
+ #endif
diff --git a/www/iridium/files/patch-components_update__client_update__query__params.cc b/www/iridium/files/patch-components_update__client_update__query__params.cc
new file mode 100644
index 000000000000..7da3a9299fb1
--- /dev/null
+++ b/www/iridium/files/patch-components_update__client_update__query__params.cc
@@ -0,0 +1,11 @@
+--- components/update_client/update_query_params.cc.orig 2019-10-21 19:06:31 UTC
++++ components/update_client/update_query_params.cc
+@@ -39,6 +39,8 @@ const char kOs[] =
+ "fuchsia";
+ #elif defined(OS_OPENBSD)
+ "openbsd";
++#elif defined(OS_FREEBSD)
++ "freebsd";
+ #else
+ #error "unknown os"
+ #endif
diff --git a/www/iridium/files/patch-components_url__formatter_spoof__checks_idn__spoof__checker.cc b/www/iridium/files/patch-components_url__formatter_spoof__checks_idn__spoof__checker.cc
new file mode 100644
index 000000000000..5b6a93f948a3
--- /dev/null
+++ b/www/iridium/files/patch-components_url__formatter_spoof__checks_idn__spoof__checker.cc
@@ -0,0 +1,11 @@
+--- components/url_formatter/spoof_checks/idn_spoof_checker.cc.orig 2020-03-17 09:48:11 UTC
++++ components/url_formatter/spoof_checks/idn_spoof_checker.cc
+@@ -262,7 +262,7 @@ IDNSpoofChecker::IDNSpoofChecker() {
+ // The ideal fix would be to change the omnibox font used for Thai. In
+ // that case, the Linux-only list should be revisited and potentially
+ // removed.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ "[ทนบพรหเà¹à¹à¸”ลปฟม]",
+ #else
+ "[บพเà¹à¹]",
diff --git a/www/iridium/files/patch-components_url__matcher_regex__set__matcher.cc b/www/iridium/files/patch-components_url__matcher_regex__set__matcher.cc
new file mode 100644
index 000000000000..33f3999ba526
--- /dev/null
+++ b/www/iridium/files/patch-components_url__matcher_regex__set__matcher.cc
@@ -0,0 +1,16 @@
+--- components/url_matcher/regex_set_matcher.cc.orig 2019-03-11 22:00:57 UTC
++++ components/url_matcher/regex_set_matcher.cc
+@@ -11,8 +11,13 @@
+ #include "base/logging.h"
+ #include "base/strings/string_util.h"
+ #include "components/url_matcher/substring_set_matcher.h"
++#if defined(OS_BSD)
++#include <re2/filtered_re2.h>
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/filtered_re2.h"
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/www/iridium/files/patch-components_url__matcher_url__matcher__factory.cc b/www/iridium/files/patch-components_url__matcher_url__matcher__factory.cc
new file mode 100644
index 000000000000..533e9439604e
--- /dev/null
+++ b/www/iridium/files/patch-components_url__matcher_url__matcher__factory.cc
@@ -0,0 +1,14 @@
+--- components/url_matcher/url_matcher_factory.cc.orig 2019-03-11 22:00:57 UTC
++++ components/url_matcher/url_matcher_factory.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "components/url_matcher/url_matcher_constants.h"
+ #include "components/url_matcher/url_matcher_helpers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace url_matcher {
+
diff --git a/www/iridium/files/patch-components_viz_common_features.cc b/www/iridium/files/patch-components_viz_common_features.cc
new file mode 100644
index 000000000000..ad1c4166adfc
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_common_features.cc
@@ -0,0 +1,20 @@
+--- components/viz/common/features.cc.orig 2020-03-17 09:49:01 UTC
++++ components/viz/common/features.cc
+@@ -17,7 +17,7 @@
+ namespace features {
+
+ // Use Skia's readback API instead of GLRendererCopier.
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::Feature kUseSkiaForGLReadback{"UseSkiaForGLReadback",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #else
+@@ -26,7 +26,7 @@ const base::Feature kUseSkiaForGLReadback{"UseSkiaForG
+ #endif
+
+ // Use the SkiaRenderer.
+-#if defined(OS_LINUX) && !(defined(OS_CHROMEOS) || BUILDFLAG(IS_CHROMECAST))
++#if (defined(OS_LINUX) && !(defined(OS_CHROMEOS) || BUILDFLAG(IS_CHROMECAST))) || defined(OS_BSD)
+ const base::Feature kUseSkiaRenderer{"UseSkiaRenderer",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+ #else
diff --git a/www/iridium/files/patch-components_viz_common_gpu_dawn__context__provider.cc b/www/iridium/files/patch-components_viz_common_gpu_dawn__context__provider.cc
new file mode 100644
index 000000000000..ea33615fe7e0
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_common_gpu_dawn__context__provider.cc
@@ -0,0 +1,11 @@
+--- components/viz/common/gpu/dawn_context_provider.cc.orig 2020-02-26 13:14:08 UTC
++++ components/viz/common/gpu/dawn_context_provider.cc
+@@ -17,7 +17,7 @@ namespace {
+ dawn_native::BackendType GetDefaultBackendType() {
+ #if defined(OS_WIN)
+ return dawn_native::BackendType::D3D12;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return dawn_native::BackendType::Vulkan;
+ #else
+ NOTREACHED();
diff --git a/www/iridium/files/patch-components_viz_host_host__display__client.cc b/www/iridium/files/patch-components_viz_host_host__display__client.cc
new file mode 100644
index 000000000000..bdfec86f1ddf
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_host_host__display__client.cc
@@ -0,0 +1,11 @@
+--- components/viz/host/host_display_client.cc.orig 2020-02-03 21:52:45 UTC
++++ components/viz/host/host_display_client.cc
+@@ -56,7 +56,7 @@ void HostDisplayClient::CreateLayeredWindowUpdater(
+ }
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void HostDisplayClient::DidCompleteSwapWithNewSize(const gfx::Size& size) {
+ NOTIMPLEMENTED();
+ }
diff --git a/www/iridium/files/patch-components_viz_host_host__display__client.h b/www/iridium/files/patch-components_viz_host_host__display__client.h
new file mode 100644
index 000000000000..4b57c1bf5f23
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_host_host__display__client.h
@@ -0,0 +1,11 @@
+--- components/viz/host/host_display_client.h.orig 2020-02-03 21:52:45 UTC
++++ components/viz/host/host_display_client.h
+@@ -43,7 +43,7 @@ class VIZ_HOST_EXPORT HostDisplayClient : public mojom
+ mojo::PendingReceiver<mojom::LayeredWindowUpdater> receiver) override;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void DidCompleteSwapWithNewSize(const gfx::Size& size) override;
+ #endif
+
diff --git a/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__device__dawn.cc b/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__device__dawn.cc
new file mode 100644
index 000000000000..7b27a7dd14d1
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__device__dawn.cc
@@ -0,0 +1,11 @@
+--- components/viz/service/display_embedder/skia_output_device_dawn.cc.orig 2020-02-26 13:15:08 UTC
++++ components/viz/service/display_embedder/skia_output_device_dawn.cc
+@@ -10,7 +10,7 @@
+
+ #if defined(OS_WIN)
+ #include <dawn_native/D3D12Backend.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include <dawn_native/VulkanBackend.h>
+ #endif
+
diff --git a/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__surface__impl.cc b/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__surface__impl.cc
new file mode 100644
index 000000000000..a3cbc1921992
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_display__embedder_skia__output__surface__impl.cc
@@ -0,0 +1,11 @@
+--- components/viz/service/display_embedder/skia_output_surface_impl.cc.orig 2020-03-17 09:50:06 UTC
++++ components/viz/service/display_embedder/skia_output_surface_impl.cc
+@@ -224,7 +224,7 @@ void SkiaOutputSurfaceImpl::Reshape(const gfx::Size& s
+ if (characterization_.isValid()) {
+ // TODO(vasilyt): We temporary keep old code for linux to not interferee
+ // with M81. Remove this after.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<SkColorSpace> sk_color_space = color_space.ToSkColorSpace();
+ if (!SkColorSpace::Equals(characterization_.colorSpace(),
+ sk_color_space.get())) {
diff --git a/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.cc b/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.cc
new file mode 100644
index 000000000000..a31cdeada8fc
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.cc
@@ -0,0 +1,20 @@
+--- components/viz/service/display_embedder/software_output_surface.cc.orig 2020-02-03 21:53:31 UTC
++++ components/viz/service/display_embedder/software_output_surface.cc
+@@ -118,7 +118,7 @@ void SoftwareOutputSurface::SwapBuffersCallback(base::
+ base::TimeTicks now = base::TimeTicks::Now();
+ base::TimeDelta interval_to_next_refresh =
+ now.SnappedToNextTick(refresh_timebase_, refresh_interval_) - now;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (needs_swap_size_notifications_)
+ client_->DidSwapWithSize(pixel_size);
+ #endif
+@@ -147,7 +147,7 @@ gfx::OverlayTransform SoftwareOutputSurface::GetDispla
+ return gfx::OVERLAY_TRANSFORM_NONE;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SoftwareOutputSurface::SetNeedsSwapSizeNotifications(
+ bool needs_swap_size_notifications) {
+ needs_swap_size_notifications_ = needs_swap_size_notifications;
diff --git a/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.h b/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.h
new file mode 100644
index 000000000000..78a386e1b26f
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_display__embedder_software__output__surface.h
@@ -0,0 +1,20 @@
+--- components/viz/service/display_embedder/software_output_surface.h.orig 2020-03-16 18:40:31 UTC
++++ components/viz/service/display_embedder/software_output_surface.h
+@@ -50,7 +50,7 @@ class VIZ_SERVICE_EXPORT SoftwareOutputSurface : publi
+ UpdateVSyncParametersCallback callback) override;
+ void SetDisplayTransformHint(gfx::OverlayTransform transform) override {}
+ gfx::OverlayTransform GetDisplayTransform() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetNeedsSwapSizeNotifications(
+ bool needs_swap_size_notifications) override;
+ #endif
+@@ -72,7 +72,7 @@ class VIZ_SERVICE_EXPORT SoftwareOutputSurface : publi
+ std::queue<std::vector<ui::LatencyInfo>> stored_latency_info_;
+ ui::LatencyTracker latency_tracker_;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ bool needs_swap_size_notifications_ = false;
+ #endif
+
diff --git a/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.cc b/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.cc
new file mode 100644
index 000000000000..f52c82d287af
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.cc
@@ -0,0 +1,20 @@
+--- components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc.orig 2020-03-16 18:40:31 UTC
++++ components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
+@@ -49,7 +49,7 @@ RootCompositorFrameSinkImpl::Create(
+ output_surface->SetNeedsSwapSizeNotifications(
+ params->send_swap_size_notifications);
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // For X11, we need notify client about swap completion after resizing, so the
+ // client can use it for synchronize with X11 WM.
+ output_surface->SetNeedsSwapSizeNotifications(true);
+@@ -418,7 +418,7 @@ void RootCompositorFrameSinkImpl::DisplayDidCompleteSw
+ #if defined(OS_ANDROID)
+ if (display_client_)
+ display_client_->DidCompleteSwapWithSize(pixel_size);
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (display_client_ && pixel_size != last_swap_pixel_size_) {
+ last_swap_pixel_size_ = pixel_size;
+ display_client_->DidCompleteSwapWithNewSize(last_swap_pixel_size_);
diff --git a/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.h b/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.h
new file mode 100644
index 000000000000..0cd42362caa3
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_service_frame__sinks_root__compositor__frame__sink__impl.h
@@ -0,0 +1,11 @@
+--- components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h.orig 2020-03-16 18:40:31 UTC
++++ components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h
+@@ -149,7 +149,7 @@ class RootCompositorFrameSinkImpl : public mojom::Comp
+ base::TimeDelta preferred_frame_interval_ =
+ FrameRateDecider::UnspecifiedFrameInterval();
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ gfx::Size last_swap_pixel_size_;
+ #endif
+
diff --git a/www/iridium/files/patch-components_viz_test_fake__output__surface.cc b/www/iridium/files/patch-components_viz_test_fake__output__surface.cc
new file mode 100644
index 000000000000..59a258fd3b15
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_test_fake__output__surface.cc
@@ -0,0 +1,11 @@
+--- components/viz/test/fake_output_surface.cc.orig 2020-04-06 07:59:49 UTC
++++ components/viz/test/fake_output_surface.cc
+@@ -114,7 +114,7 @@ gfx::OverlayTransform FakeOutputSurface::GetDisplayTra
+ : gfx::OVERLAY_TRANSFORM_NONE;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void FakeOutputSurface::SetNeedsSwapSizeNotifications(
+ bool needs_swap_size_notifications) {}
+ #endif
diff --git a/www/iridium/files/patch-components_viz_test_fake__output__surface.h b/www/iridium/files/patch-components_viz_test_fake__output__surface.h
new file mode 100644
index 000000000000..5da27a2de0cd
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_test_fake__output__surface.h
@@ -0,0 +1,11 @@
+--- components/viz/test/fake_output_surface.h.orig 2020-04-06 08:00:10 UTC
++++ components/viz/test/fake_output_surface.h
+@@ -84,7 +84,7 @@ class FakeOutputSurface : public OutputSurface {
+ UpdateVSyncParametersCallback callback) override;
+ void SetDisplayTransformHint(gfx::OverlayTransform transform) override;
+ gfx::OverlayTransform GetDisplayTransform() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetNeedsSwapSizeNotifications(
+ bool needs_swap_size_notifications) override;
+ #endif
diff --git a/www/iridium/files/patch-components_viz_test_mock__display__client.h b/www/iridium/files/patch-components_viz_test_mock__display__client.h
new file mode 100644
index 000000000000..43940cf13781
--- /dev/null
+++ b/www/iridium/files/patch-components_viz_test_mock__display__client.h
@@ -0,0 +1,11 @@
+--- components/viz/test/mock_display_client.h.orig 2020-04-06 08:00:42 UTC
++++ components/viz/test/mock_display_client.h
+@@ -35,7 +35,7 @@ class MockDisplayClient : public mojom::DisplayClient
+ MOCK_METHOD1(OnContextCreationResult, void(gpu::ContextResult));
+ MOCK_METHOD1(SetPreferredRefreshRate, void(float refresh_rate));
+ #endif
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ MOCK_METHOD1(DidCompleteSwapWithNewSize, void(const gfx::Size&));
+ #endif
+
diff --git a/www/iridium/files/patch-components_webcrypto_algorithms_test__helpers.cc b/www/iridium/files/patch-components_webcrypto_algorithms_test__helpers.cc
new file mode 100644
index 000000000000..cc741c7d273f
--- /dev/null
+++ b/www/iridium/files/patch-components_webcrypto_algorithms_test__helpers.cc
@@ -0,0 +1,14 @@
+--- components/webcrypto/algorithms/test_helpers.cc.orig 2019-03-11 22:00:57 UTC
++++ components/webcrypto/algorithms/test_helpers.cc
+@@ -25,7 +25,11 @@
+ #include "components/webcrypto/status.h"
+ #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
+ #include "third_party/blink/public/platform/web_crypto_key_algorithm.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace webcrypto {
+
diff --git a/www/iridium/files/patch-content_app_content__main__runner__impl.cc b/www/iridium/files/patch-content_app_content__main__runner__impl.cc
new file mode 100644
index 000000000000..dc4a030d4d3f
--- /dev/null
+++ b/www/iridium/files/patch-content_app_content__main__runner__impl.cc
@@ -0,0 +1,73 @@
+--- content/app/content_main_runner_impl.cc.orig 2020-03-16 18:40:31 UTC
++++ content/app/content_main_runner_impl.cc
+@@ -101,17 +101,17 @@
+ #include "base/posix/global_descriptors.h"
+ #include "content/public/common/content_descriptors.h"
+
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_fork_delegate_linux.h"
+ #endif
+-#if !defined(OS_MACOSX) && !defined(OS_ANDROID)
++#if !defined(OS_MACOSX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ #include "sandbox/linux/services/libc_interceptor.h"
+ #include "services/service_manager/zygote/zygote_main.h"
+ #endif
+
+ #endif // OS_POSIX || OS_FUCHSIA
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/native_library.h"
+ #include "base/rand_util.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
+@@ -132,7 +132,7 @@
+ #include "content/public/common/content_client.h"
+ #endif
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || defined(OS_BSD)
+
+ #if !defined(CHROME_MULTIPLE_DLL_BROWSER)
+ #include "content/child/field_trial.h"
+@@ -298,7 +298,7 @@ void InitializeZygoteSandboxForBrowserProcess(
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ #if BUILDFLAG(ENABLE_PLUGINS)
+ // Loads the (native) libraries but does not initialize them (i.e., does not
+@@ -395,7 +395,7 @@ void PreSandboxInit() {
+ }
+ #endif // BUILDFLAG(USE_ZYGOTE_HANDLE)
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace
+
+@@ -462,7 +462,7 @@ int RunZygote(ContentMainDelegate* delegate) {
+ delegate->ZygoteStarting(&zygote_fork_delegates);
+ media::InitializeMediaLibrary();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PreSandboxInit();
+ #endif
+
+@@ -622,11 +622,11 @@ int ContentMainRunnerImpl::Initialize(const ContentMai
+ base::GlobalDescriptors::kBaseDescriptor);
+ #endif // !OS_ANDROID
+
+-#if defined(OS_LINUX) || defined(OS_OPENBSD)
++#if defined(OS_LINUX)
+ g_fds->Set(service_manager::kCrashDumpSignal,
+ service_manager::kCrashDumpSignal +
+ base::GlobalDescriptors::kBaseDescriptor);
+-#endif // OS_LINUX || OS_OPENBSD
++#endif // OS_LINUX
+
+ #endif // !OS_WIN
+
diff --git a/www/iridium/files/patch-content_browser_browser__main__loop.cc b/www/iridium/files/patch-content_browser_browser__main__loop.cc
new file mode 100644
index 000000000000..d390038358d3
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_browser__main__loop.cc
@@ -0,0 +1,46 @@
+--- content/browser/browser_main_loop.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/browser_main_loop.cc
+@@ -242,6 +242,13 @@
+ #include "mojo/public/cpp/bindings/lib/test_random_mojo_delays.h"
+ #endif
+
++#if defined(OS_BSD)
++#include "content/browser/sandbox_host_linux.h"
++#include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#include "content/public/common/common_sandbox_support_linux.h"
++#include "services/service_manager/sandbox/sandbox.h"
++#endif
++
+ // One of the linux specific headers defines this as a macro.
+ #ifdef DestroyAll
+ #undef DestroyAll
+@@ -613,6 +620,11 @@ int BrowserMainLoop::EarlyInitialization() {
+ // by now since a thread to start the ServiceManager has been created
+ // before the browser main loop starts.
+ DCHECK(SandboxHostLinux::GetInstance()->IsInitialized());
++#elif defined(OS_BSD)
++ SandboxHostLinux::GetInstance()->Init();
++ base::FileHandleMappingVector fds_to_map;
++ const int sfd = SandboxHostLinux::GetInstance()->GetChildSocket();
++ fds_to_map.push_back(std::make_pair(sfd, service_manager::GetSandboxFD()));
+ #endif
+
+ #if defined(USE_X11)
+@@ -658,7 +670,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ }
+ #endif // !defined(OS_MACOSX)
+
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // We use quite a few file descriptors for our IPC as well as disk the disk
+ // cache,and the default limit on the Mac is low (256), so bump it up.
+@@ -668,7 +680,7 @@ int BrowserMainLoop::EarlyInitialization() {
+ // users can easily hit this limit with many open tabs. Bump up the limit to
+ // an arbitrarily high number. See https://crbug.com/539567
+ base::IncreaseFdLimitTo(8192);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) ||
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD) ||
+ // defined(OS_ANDROID)
+
+ #if defined(OS_WIN)
diff --git a/www/iridium/files/patch-content_browser_child__process__launcher__helper__linux.cc b/www/iridium/files/patch-content_browser_child__process__launcher__helper__linux.cc
new file mode 100644
index 000000000000..49d1b92ec5ea
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_child__process__launcher__helper__linux.cc
@@ -0,0 +1,76 @@
+--- content/browser/child_process_launcher_helper_linux.cc.orig 2020-02-03 21:52:45 UTC
++++ content/browser/child_process_launcher_helper_linux.cc
+@@ -17,7 +17,9 @@
+ #include "content/public/common/sandboxed_process_launcher_delegate.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+ #include "services/service_manager/zygote/common/common_sandbox_support_linux.h"
++#if !defined(OS_BSD)
+ #include "services/service_manager/zygote/common/zygote_handle.h"
++#endif
+ #include "services/service_manager/zygote/host/zygote_communication_linux.h"
+ #include "services/service_manager/zygote/host/zygote_host_impl_linux.h"
+
+@@ -68,6 +70,7 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ int* launch_result) {
+ *is_synchronous_launch = true;
+
++#if !defined(OS_BSD)
+ service_manager::ZygoteHandle zygote_handle =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoZygote)
+ ? nullptr
+@@ -81,7 +84,6 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ GetProcessType());
+ *launch_result = LAUNCH_RESULT_SUCCESS;
+
+-#if !defined(OS_OPENBSD)
+ if (handle) {
+ // This is just a starting score for a renderer or extension (the
+ // only types of processes that will be started this way). It will
+@@ -92,13 +94,13 @@ ChildProcessLauncherHelper::LaunchProcessOnLauncherThr
+ service_manager::ZygoteHostImpl::GetInstance()->AdjustRendererOOMScore(
+ handle, kLowestRendererOomScore);
+ }
+-#endif
+
+ Process process;
+ process.process = base::Process(handle);
+ process.zygote = zygote_handle;
+ return process;
+ }
++#endif
+
+ Process process;
+ process.process = base::LaunchProcess(*command_line(), options);
+@@ -116,10 +118,14 @@ ChildProcessTerminationInfo ChildProcessLauncherHelper
+ const ChildProcessLauncherHelper::Process& process,
+ bool known_dead) {
+ ChildProcessTerminationInfo info;
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ info.status = process.zygote->GetTerminationStatus(
+ process.process.Handle(), known_dead, &info.exit_code);
+ } else if (known_dead) {
++#else
++ if (known_dead) {
++#endif
+ info.status = base::GetKnownDeadTerminationStatus(process.process.Handle(),
+ &info.exit_code);
+ } else {
+@@ -143,13 +149,17 @@ void ChildProcessLauncherHelper::ForceNormalProcessTer
+ DCHECK(CurrentlyOnProcessLauncherTaskRunner());
+ process.process.Terminate(service_manager::RESULT_CODE_NORMAL_EXIT, false);
+ // On POSIX, we must additionally reap the child.
++#if !defined(OS_BSD)
+ if (process.zygote) {
+ // If the renderer was created via a zygote, we have to proxy the reaping
+ // through the zygote process.
+ process.zygote->EnsureProcessTerminated(process.process.Handle());
+ } else {
++#endif
+ base::EnsureProcessTerminated(std::move(process.process));
++#if !defined(OS_BSD)
+ }
++#endif
+ }
+
+ void ChildProcessLauncherHelper::SetProcessPriorityOnLauncherThread(
diff --git a/www/iridium/files/patch-content_browser_devtools_protocol_system__info__handler.cc b/www/iridium/files/patch-content_browser_devtools_protocol_system__info__handler.cc
new file mode 100644
index 000000000000..3751c782527d
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_devtools_protocol_system__info__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/devtools/protocol/system_info_handler.cc.orig 2019-12-16 21:51:26 UTC
++++ content/browser/devtools/protocol/system_info_handler.cc
+@@ -48,7 +48,7 @@ std::unique_ptr<SystemInfo::Size> GfxSizeToSystemInfoS
+ // Give the GPU process a few seconds to provide GPU info.
+ // Linux Debug builds need more time -- see Issue 796437.
+ // Windows builds need more time -- see Issue 873112 and 1004472.
+-#if (defined(OS_LINUX) && !defined(NDEBUG))
++#if ((defined(OS_LINUX) || defined(OS_BSD)) && !defined(NDEBUG))
+ const int kGPUInfoWatchdogTimeoutMs = 20000;
+ #elif defined(OS_WIN)
+ const int kGPUInfoWatchdogTimeoutMs = 30000;
diff --git a/www/iridium/files/patch-content_browser_gpu_gpu__process__host.cc b/www/iridium/files/patch-content_browser_gpu_gpu__process__host.cc
new file mode 100644
index 000000000000..78851da5e325
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_gpu_gpu__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/gpu/gpu_process_host.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/gpu/gpu_process_host.cc
+@@ -1086,7 +1086,7 @@ bool GpuProcessHost::LaunchGpuProcess() {
+ std::unique_ptr<base::CommandLine> cmd_line =
+ std::make_unique<base::CommandLine>(base::CommandLine::NO_PROGRAM);
+ #else
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int child_flags = gpu_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-content_browser_media_media__internals.cc b/www/iridium/files/patch-content_browser_media_media__internals.cc
new file mode 100644
index 000000000000..1e117219d0e9
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_media_media__internals.cc
@@ -0,0 +1,11 @@
+--- content/browser/media/media_internals.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/media/media_internals.cc
+@@ -531,7 +531,7 @@ void MediaInternals::UpdateVideoCaptureDeviceCapabilit
+ device_dict->SetString("id", descriptor.device_id);
+ device_dict->SetString("name", descriptor.GetNameAndModel());
+ device_dict->Set("formats", std::move(format_list));
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ device_dict->SetString("captureApi", descriptor.GetCaptureApiTypeString());
+ #endif
diff --git a/www/iridium/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc b/www/iridium/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
new file mode 100644
index 000000000000..ff345048baf2
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_memory_swap__metrics__driver__impl__linux.cc
@@ -0,0 +1,27 @@
+--- content/browser/memory/swap_metrics_driver_impl_linux.cc.orig 2019-03-11 22:00:57 UTC
++++ content/browser/memory/swap_metrics_driver_impl_linux.cc
+@@ -43,6 +43,7 @@ SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinu
+
+ SwapMetricsDriver::SwapMetricsUpdateResult
+ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
++#if !defined(OS_BSD)
+ base::VmStatInfo vmstat;
+ if (!base::GetVmStatInfo(&vmstat)) {
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
+@@ -55,12 +56,15 @@ SwapMetricsDriverImplLinux::UpdateMetricsInternal(base
+
+ if (interval.is_zero())
+ return SwapMetricsDriver::SwapMetricsUpdateResult::
+- kSwapMetricsUpdateSuccess;
++ kSwapMetricsUpdateSuccess;
+
+ delegate_->OnSwapInCount(in_counts, interval);
+ delegate_->OnSwapOutCount(out_counts, interval);
+
+ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateSuccess;
++#else
++ return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
++#endif
+ }
+
+ } // namespace content
diff --git a/www/iridium/files/patch-content_browser_ppapi__plugin__process__host.cc b/www/iridium/files/patch-content_browser_ppapi__plugin__process__host.cc
new file mode 100644
index 000000000000..dd7271ca2db7
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_ppapi__plugin__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/ppapi_plugin_process_host.cc.orig 2020-02-03 21:53:31 UTC
++++ content/browser/ppapi_plugin_process_host.cc
+@@ -365,7 +365,7 @@ bool PpapiPluginProcessHost::Init(const PepperPluginIn
+ base::CommandLine::StringType plugin_launcher =
+ browser_command_line.GetSwitchValueNative(switches::kPpapiPluginLauncher);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = plugin_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF :
+ ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-content_browser_ppapi__plugin__process__host__receiver__bindings.cc b/www/iridium/files/patch-content_browser_ppapi__plugin__process__host__receiver__bindings.cc
new file mode 100644
index 000000000000..41c5edc15175
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_ppapi__plugin__process__host__receiver__bindings.cc
@@ -0,0 +1,20 @@
+--- content/browser/ppapi_plugin_process_host_receiver_bindings.cc.orig 2019-12-17 19:34:30 UTC
++++ content/browser/ppapi_plugin_process_host_receiver_bindings.cc
+@@ -8,7 +8,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/mojom/font_service.mojom.h" // nogncheck
+ #include "content/browser/font_service.h" // nogncheck
+ #endif
+@@ -17,7 +17,7 @@ namespace content {
+
+ void PpapiPluginProcessHost::BindHostReceiver(
+ mojo::GenericPendingReceiver receiver) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (auto font_receiver = receiver.As<font_service::mojom::FontService>())
+ ConnectToFontService(std::move(font_receiver));
+ #endif
diff --git a/www/iridium/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc b/www/iridium/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
new file mode 100644
index 000000000000..3d6112bc698b
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_input_input__device__change__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/input/input_device_change_observer.cc.orig 2019-09-09 21:55:16 UTC
++++ content/browser/renderer_host/input/input_device_change_observer.cc
+@@ -10,7 +10,7 @@
+
+ #if defined(OS_WIN)
+ #include "ui/events/devices/input_device_observer_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/events/devices/device_data_manager.h"
+ #elif defined(OS_ANDROID)
+ #include "ui/events/devices/input_device_observer_android.h"
+@@ -22,7 +22,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ render_view_host_impl_ = rvhi;
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->AddObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::DeviceDataManager::GetInstance()->AddObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->AddObserver(this);
+@@ -32,7 +32,7 @@ InputDeviceChangeObserver::InputDeviceChangeObserver(R
+ InputDeviceChangeObserver::~InputDeviceChangeObserver() {
+ #if defined(OS_WIN)
+ ui::InputDeviceObserverWin::GetInstance()->RemoveObserver(this);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ ui::DeviceDataManager::GetInstance()->RemoveObserver(this);
+ #elif defined(OS_ANDROID)
+ ui::InputDeviceObserverAndroid::GetInstance()->RemoveObserver(this);
diff --git a/www/iridium/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc b/www/iridium/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
new file mode 100644
index 000000000000..7e10ee7c69a9
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_pepper_pepper__file__io__host.cc
@@ -0,0 +1,20 @@
+--- content/browser/renderer_host/pepper/pepper_file_io_host.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/renderer_host/pepper/pepper_file_io_host.cc
+@@ -433,7 +433,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
+ base::File::Error error_code) {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Quarantining a file before its contents are available is only supported on
+ // Windows and Linux.
+ if (!FileOpenForWrite(open_flags_) || error_code != base::File::FILE_OK) {
+@@ -454,7 +454,7 @@ void PepperFileIOHost::OnLocalFileOpened(
+ #endif
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ void PepperFileIOHost::OnLocalFileQuarantined(
+ ppapi::host::ReplyMessageContext reply_context,
+ const base::FilePath& path,
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.cc b/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.cc
new file mode 100644
index 000000000000..91932a38a5e5
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_message_filter.cc.orig 2019-12-16 21:50:47 UTC
++++ content/browser/renderer_host/render_message_filter.cc
+@@ -70,7 +70,7 @@
+ #if defined(OS_MACOSX)
+ #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/linux_util.h"
+ #include "base/threading/platform_thread.h"
+ #endif
+@@ -149,7 +149,7 @@ void RenderMessageFilter::CreateFullscreenWidget(
+ std::move(callback).Run(route_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriorityOnFileThread(
+ base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority) {
+@@ -170,7 +170,7 @@ void RenderMessageFilter::SetThreadPriorityOnFileThrea
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void RenderMessageFilter::SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) {
+ constexpr base::TaskTraits kTraits = {
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.h b/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.h
new file mode 100644
index 000000000000..f50e2f2912d6
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__message__filter.h
@@ -0,0 +1,19 @@
+--- content/browser/renderer_host/render_message_filter.h.orig 2019-12-16 21:50:47 UTC
++++ content/browser/renderer_host/render_message_filter.h
+@@ -87,14 +87,14 @@ class CONTENT_EXPORT RenderMessageFilter
+ mojo::PendingRemote<mojom::Widget> widget,
+ CreateFullscreenWidgetCallback callback) override;
+ void HasGpuProcess(HasGpuProcessCallback callback) override;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t ns_tid,
+ base::ThreadPriority priority) override;
+ #endif
+
+ void OnResolveProxy(const GURL& url, IPC::Message* reply_msg);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriorityOnFileThread(base::PlatformThreadId ns_tid,
+ base::ThreadPriority priority);
+ #endif
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.cc b/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.cc
new file mode 100644
index 000000000000..f27d90720f9b
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.cc
@@ -0,0 +1,47 @@
+--- content/browser/renderer_host/render_process_host_impl.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/renderer_host/render_process_host_impl.cc
+@@ -241,7 +241,7 @@
+ #include "content/browser/gpu/gpu_data_manager_impl.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/resource.h>
+ #include <sys/time.h>
+
+@@ -1176,7 +1176,7 @@ static constexpr size_t kUnknownPlatformProcessLimit =
+ // to indicate failure and std::numeric_limits<size_t>::max() to indicate
+ // unlimited.
+ size_t GetPlatformProcessLimit() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct rlimit limit;
+ if (getrlimit(RLIMIT_NPROC, &limit) != 0)
+ return kUnknownPlatformProcessLimit;
+@@ -1187,7 +1187,7 @@ size_t GetPlatformProcessLimit() {
+ #else
+ // TODO(https://crbug.com/104689): Implement on other platforms.
+ return kUnknownPlatformProcessLimit;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+ #endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
+
+@@ -1256,7 +1256,7 @@ class RenderProcessHostImpl::IOThreadHostImpl
+ return;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (auto font_receiver = receiver.As<font_service::mojom::FontService>()) {
+ ConnectToFontService(std::move(font_receiver));
+ return;
+@@ -1651,7 +1651,7 @@ bool RenderProcessHostImpl::Init() {
+ renderer_prefix =
+ browser_command_line.GetSwitchValueNative(switches::kRendererCmdPrefix);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int flags = renderer_prefix.empty() ? ChildProcessHost::CHILD_ALLOW_SELF
+ : ChildProcessHost::CHILD_NORMAL;
+ #elif defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.h b/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.h
new file mode 100644
index 000000000000..616427da0032
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__process__host__impl.h
@@ -0,0 +1,15 @@
+--- content/browser/renderer_host/render_process_host_impl.h.orig 2020-03-16 18:40:31 UTC
++++ content/browser/renderer_host/render_process_host_impl.h
+@@ -458,10 +458,10 @@ class CONTENT_EXPORT RenderProcessHostImpl
+ is_for_guests_only_ = is_for_guests_only;
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ // Launch the zygote early in the browser startup.
+ static void EarlyZygoteLaunch();
+-#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ // Called when a video capture stream or an audio stream is added or removed
+ // and used to determine if the process should be backgrounded or not.
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__view__host__impl.cc b/www/iridium/files/patch-content_browser_renderer__host_render__view__host__impl.cc
new file mode 100644
index 000000000000..06332b50ef27
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__view__host__impl.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_view_host_impl.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/renderer_host/render_view_host_impl.cc
+@@ -206,7 +206,7 @@ void RenderViewHostImpl::GetPlatformSpecificPrefs(
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CYVSCROLL);
+ prefs->arrow_bitmap_width_horizontal_scroll_bar_in_dips =
+ display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXHSCROLL);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ prefs->system_font_family_name = gfx::Font().GetFontName();
+ #endif
+ }
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc b/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
new file mode 100644
index 000000000000..99de1314b9ec
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__aura.cc
@@ -0,0 +1,29 @@
+--- content/browser/renderer_host/render_widget_host_view_aura.cc.orig 2020-03-16 18:40:31 UTC
++++ content/browser/renderer_host/render_widget_host_view_aura.cc
+@@ -115,7 +115,7 @@
+ #include "content/browser/accessibility/browser_accessibility_auralinux.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+ #endif
+@@ -2171,7 +2171,7 @@ bool RenderWidgetHostViewAura::NeedsInputGrab() {
+ }
+
+ bool RenderWidgetHostViewAura::NeedsMouseCapture() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ return NeedsInputGrab();
+ #endif
+ return false;
+@@ -2340,7 +2340,7 @@ void RenderWidgetHostViewAura::ForwardKeyboardEventWit
+ if (!target_host)
+ return;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* keybinding_delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
diff --git a/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc b/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
new file mode 100644
index 000000000000..7321b9e2f949
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_renderer__host_render__widget__host__view__event__handler.cc
@@ -0,0 +1,11 @@
+--- content/browser/renderer_host/render_widget_host_view_event_handler.cc.orig 2020-02-03 21:53:31 UTC
++++ content/browser/renderer_host/render_widget_host_view_event_handler.cc
+@@ -611,7 +611,7 @@ bool RenderWidgetHostViewEventHandler::CanRendererHand
+ if (event->type() == ui::ET_MOUSE_EXITED) {
+ if (mouse_locked || selection_popup)
+ return false;
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ // Don't forward the mouse leave message which is received when the context
+ // menu is displayed by the page. This confuses the page and causes state
+ // changes.
diff --git a/www/iridium/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc b/www/iridium/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc
new file mode 100644
index 000000000000..68b512d069c4
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_scheduler_responsiveness_jank__monitor.cc
@@ -0,0 +1,11 @@
+--- content/browser/scheduler/responsiveness/jank_monitor.cc.orig 2020-02-03 21:53:31 UTC
++++ content/browser/scheduler/responsiveness/jank_monitor.cc
+@@ -321,7 +321,7 @@ void JankMonitor::ThreadExecutionState::DidRunTaskOrEv
+ // in context menus, among others). Simply ignore the mismatches for now.
+ // See https://crbug.com/929813 for the details of why the mismatch
+ // happens.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ task_execution_metadata_.clear();
+ #endif
+ return;
diff --git a/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc b/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
new file mode 100644
index 000000000000..906761601b4b
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.cc
@@ -0,0 +1,29 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.cc.orig 2019-03-11 22:00:58 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.cc
+@@ -15,7 +15,7 @@
+
+ #include "ui/events/platform/platform_event_source.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/env.h"
+ #include "ui/events/event.h"
+ #endif
+@@ -39,7 +39,7 @@ NativeEventObserver::~NativeEventObserver() {
+ DeregisterObserver();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void NativeEventObserver::RegisterObserver() {
+ aura::Env::GetInstance()->AddWindowEventDispatcherObserver(this);
+ }
+@@ -61,7 +61,7 @@ void NativeEventObserver::OnWindowEventDispatcherFinis
+ did_run_event_callback_.Run(info.unique_id);
+ events_being_processed_.pop_back();
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ void NativeEventObserver::RegisterObserver() {
diff --git a/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h b/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
new file mode 100644
index 000000000000..03b31b8d904e
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_scheduler_responsiveness_native__event__observer.h
@@ -0,0 +1,47 @@
+--- content/browser/scheduler/responsiveness/native_event_observer.h.orig 2019-03-11 22:00:58 UTC
++++ content/browser/scheduler/responsiveness/native_event_observer.h
+@@ -14,7 +14,7 @@
+ #include "content/public/browser/native_event_processor_observer_mac.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/aura/window_event_dispatcher_observer.h"
+ #endif
+
+@@ -39,7 +39,7 @@ namespace responsiveness {
+ class CONTENT_EXPORT NativeEventObserver
+ #if defined(OS_MACOSX)
+ : public NativeEventProcessorObserver
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ : public aura::WindowEventDispatcherObserver
+ #elif defined(OS_WIN)
+ : public base::MessagePumpForUI::Observer
+@@ -56,7 +56,7 @@ class CONTENT_EXPORT NativeEventObserver
+ NativeEventObserver(WillRunEventCallback will_run_event_callback,
+ DidRunEventCallback did_run_event_callback);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ~NativeEventObserver() override;
+ #else
+ virtual ~NativeEventObserver();
+@@ -68,7 +68,7 @@ class CONTENT_EXPORT NativeEventObserver
+ // Exposed for tests.
+ void WillRunNativeEvent(const void* opaque_identifier) override;
+ void DidRunNativeEvent(const void* opaque_identifier) override;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // aura::WindowEventDispatcherObserver overrides:
+ void OnWindowEventDispatcherStartedProcessing(
+ aura::WindowEventDispatcher* dispatcher,
+@@ -85,7 +85,7 @@ class CONTENT_EXPORT NativeEventObserver
+ void RegisterObserver();
+ void DeregisterObserver();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct EventInfo {
+ const void* unique_id;
+ };
diff --git a/www/iridium/files/patch-content_browser_scheduler_responsiveness_watcher.cc b/www/iridium/files/patch-content_browser_scheduler_responsiveness_watcher.cc
new file mode 100644
index 000000000000..ebeeac2a51c1
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_scheduler_responsiveness_watcher.cc
@@ -0,0 +1,20 @@
+--- content/browser/scheduler/responsiveness/watcher.cc.orig 2020-02-03 21:52:46 UTC
++++ content/browser/scheduler/responsiveness/watcher.cc
+@@ -101,7 +101,7 @@ void Watcher::DidRunTask(const base::PendingTask* task
+ // in context menus, among others). Simply ignore the mismatches for now.
+ // See https://crbug.com/929813 for the details of why the mismatch
+ // happens.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ return currently_running_metadata_ui_.clear();
+ #endif
+ DCHECK_LE(*mismatched_task_identifiers, 1);
+@@ -170,7 +170,7 @@ void Watcher::DidRunEventOnUIThread(const void* opaque
+ mismatched_event_identifiers_ui_ += 1;
+ // See comment in DidRunTask() for why |currently_running_metadata_ui_| may
+ // be reset.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX) && defined(USE_OZONE)
++#if !defined(OS_CHROMEOS) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(USE_OZONE)
+ return currently_running_metadata_ui_.clear();
+ #endif
+ DCHECK_LE(mismatched_event_identifiers_ui_, 1);
diff --git a/www/iridium/files/patch-content_browser_utility__process__host.cc b/www/iridium/files/patch-content_browser_utility__process__host.cc
new file mode 100644
index 000000000000..8360a7efdc5e
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_utility__process__host.cc
@@ -0,0 +1,11 @@
+--- content/browser/utility_process_host.cc.orig 2020-03-16 18:40:32 UTC
++++ content/browser/utility_process_host.cc
+@@ -210,7 +210,7 @@ UtilityProcessHost::UtilityProcessHost()
+
+ UtilityProcessHost::UtilityProcessHost(std::unique_ptr<Client> client)
+ : sandbox_type_(service_manager::SandboxType::kUtility),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ child_flags_(ChildProcessHost::CHILD_ALLOW_SELF),
+ #else
+ child_flags_(ChildProcessHost::CHILD_NORMAL),
diff --git a/www/iridium/files/patch-content_browser_utility__process__host__receiver__bindings.cc b/www/iridium/files/patch-content_browser_utility__process__host__receiver__bindings.cc
new file mode 100644
index 000000000000..a69a1ccfe8b3
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_utility__process__host__receiver__bindings.cc
@@ -0,0 +1,20 @@
+--- content/browser/utility_process_host_receiver_bindings.cc.orig 2020-02-26 13:18:37 UTC
++++ content/browser/utility_process_host_receiver_bindings.cc
+@@ -8,7 +8,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/mojom/font_service.mojom.h" // nogncheck
+ #include "content/browser/font_service.h" // nogncheck
+ #endif
+@@ -17,7 +17,7 @@ namespace content {
+
+ void UtilityProcessHost::BindHostReceiver(
+ mojo::GenericPendingReceiver receiver) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (auto font_receiver = receiver.As<font_service::mojom::FontService>()) {
+ ConnectToFontService(std::move(font_receiver));
+ return;
diff --git a/www/iridium/files/patch-content_browser_v8__snapshot__files.cc b/www/iridium/files/patch-content_browser_v8__snapshot__files.cc
new file mode 100644
index 000000000000..957c743c222c
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_v8__snapshot__files.cc
@@ -0,0 +1,11 @@
+--- content/browser/v8_snapshot_files.cc.orig 2020-02-24 18:39:15 UTC
++++ content/browser/v8_snapshot_files.cc
+@@ -10,7 +10,7 @@
+ namespace content {
+
+ std::map<std::string, base::FilePath> GetV8SnapshotFilesToPreload() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #if defined(USE_V8_CONTEXT_SNAPSHOT)
+ return {{kV8ContextSnapshotDataDescriptor,
+ base::FilePath(FILE_PATH_LITERAL("v8_context_snapshot.bin"))}};
diff --git a/www/iridium/files/patch-content_browser_webui_shared__resources__data__source.cc b/www/iridium/files/patch-content_browser_webui_shared__resources__data__source.cc
new file mode 100644
index 000000000000..cb181bd0c0b3
--- /dev/null
+++ b/www/iridium/files/patch-content_browser_webui_shared__resources__data__source.cc
@@ -0,0 +1,17 @@
+--- content/browser/webui/shared_resources_data_source.cc.orig 2020-03-16 18:39:50 UTC
++++ content/browser/webui/shared_resources_data_source.cc
+@@ -131,12 +131,12 @@ const std::map<int, std::string> CreateMojoResourceIdT
+ "mojo/mojo/public/mojom/base/text_direction.mojom.html"},
+ {IDR_MOJO_TEXT_DIRECTION_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/text_direction.mojom-lite.js"},
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ {IDR_MOJO_TIME_MOJOM_HTML,
+ "mojo/mojo/public/mojom/base/time.mojom.html"},
+ {IDR_MOJO_TIME_MOJOM_LITE_JS,
+ "mojo/mojo/public/mojom/base/time.mojom-lite.js"},
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ };
+ }
+
diff --git a/www/iridium/files/patch-content_common_BUILD.gn b/www/iridium/files/patch-content_common_BUILD.gn
new file mode 100644
index 000000000000..3d0913b5242b
--- /dev/null
+++ b/www/iridium/files/patch-content_common_BUILD.gn
@@ -0,0 +1,15 @@
+--- content/common/BUILD.gn.orig 2020-03-16 18:40:32 UTC
++++ content/common/BUILD.gn
+@@ -356,6 +356,12 @@ source_set("common") {
+ libs += [ "android" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "sandbox_init_linux.cc",
++ ]
++ }
++
+ if (is_debug && !is_component_build && enable_plugins) {
+ # Content depends on the PPAPI message logging stuff; if this isn't here,
+ # some unit test binaries won't compile. This only worked in release mode
diff --git a/www/iridium/files/patch-content_common_common__sandbox__support__linux.cc b/www/iridium/files/patch-content_common_common__sandbox__support__linux.cc
new file mode 100644
index 000000000000..95e576060511
--- /dev/null
+++ b/www/iridium/files/patch-content_common_common__sandbox__support__linux.cc
@@ -0,0 +1,10 @@
+--- content/common/common_sandbox_support_linux.cc.orig 2019-03-11 22:00:58 UTC
++++ content/common/common_sandbox_support_linux.cc
+@@ -5,6 +5,7 @@
+ #include "content/public/common/common_sandbox_support_linux.h"
+
+ #include <sys/stat.h>
++#include <unistd.h>
+
+ #include <limits>
+ #include <memory>
diff --git a/www/iridium/files/patch-content_common_user__agent.cc b/www/iridium/files/patch-content_common_user__agent.cc
new file mode 100644
index 000000000000..d842b3145b5d
--- /dev/null
+++ b/www/iridium/files/patch-content_common_user__agent.cc
@@ -0,0 +1,17 @@
+--- content/common/user_agent.cc.orig 2020-03-16 18:40:32 UTC
++++ content/common/user_agent.cc
+@@ -140,6 +140,14 @@ std::string BuildOSCpuInfo(bool include_android_build_
+ #endif
+ );
+
++#if defined(OS_BSD)
++#if defined(__x86_64__)
++ base::StringAppendF(&os_cpu, "; Linux x86_64");
++#else
++ base::StringAppendF(&os_cpu, "; Linux i686");
++#endif
++#endif
++
+ return os_cpu;
+ }
+
diff --git a/www/iridium/files/patch-content_gpu_BUILD.gn b/www/iridium/files/patch-content_gpu_BUILD.gn
new file mode 100644
index 000000000000..538b4bc2f7bc
--- /dev/null
+++ b/www/iridium/files/patch-content_gpu_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/gpu/BUILD.gn.orig 2020-03-16 18:40:32 UTC
++++ content/gpu/BUILD.gn
+@@ -128,7 +128,7 @@ target(link_target_type, "gpu_sources") {
+
+ # Use DRI on desktop Linux builds.
+ if (current_cpu != "s390x" && current_cpu != "ppc64" && is_desktop_linux &&
+- (!is_chromecast || is_cast_desktop_build)) {
++ (!is_chromecast || is_cast_desktop_build) && !is_bsd) {
+ configs += [ "//build/config/linux/dri" ]
+ }
+ }
diff --git a/www/iridium/files/patch-content_gpu_gpu__main.cc b/www/iridium/files/patch-content_gpu_gpu__main.cc
new file mode 100644
index 000000000000..ba08acddf473
--- /dev/null
+++ b/www/iridium/files/patch-content_gpu_gpu__main.cc
@@ -0,0 +1,56 @@
+--- content/gpu/gpu_main.cc.orig 2020-03-16 18:40:32 UTC
++++ content/gpu/gpu_main.cc
+@@ -84,7 +84,7 @@
+ #include "ui/gfx/x/x11_switches.h" // nogncheck
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/gpu/gpu_sandbox_hook_linux.h"
+ #include "content/public/common/sandbox_init.h"
+ #include "services/service_manager/sandbox/linux/sandbox_linux.h"
+@@ -109,7 +109,7 @@ namespace content {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread*,
+ const gpu::GPUInfo*,
+ const gpu::GpuPreferences&);
+@@ -177,7 +177,7 @@ class ContentSandboxHelper : public gpu::GpuSandboxHel
+ bool EnsureSandboxInitialized(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) override {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ return StartSandboxLinux(watchdog_thread, gpu_info, gpu_prefs);
+ #elif defined(OS_WIN)
+ return StartSandboxWindows(sandbox_info_);
+@@ -301,7 +301,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+ main_thread_task_executor =
+ std::make_unique<base::SingleThreadTaskExecutor>(
+ gpu_preferences.message_pump_type);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #error "Unsupported Linux platform."
+ #elif defined(OS_MACOSX)
+ // Cross-process CoreAnimation requires a CFRunLoop to function at all, and
+@@ -442,7 +442,7 @@ int GpuMain(const MainFunctionParams& parameters) {
+
+ namespace {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdog_thread,
+ const gpu::GPUInfo* gpu_info,
+ const gpu::GpuPreferences& gpu_prefs) {
+@@ -479,7 +479,7 @@ bool StartSandboxLinux(gpu::GpuWatchdogThread* watchdo
+
+ return res;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ bool StartSandboxWindows(const sandbox::SandboxInterfaceInfo* sandbox_info) {
diff --git a/www/iridium/files/patch-content_gpu_gpu__sandbox__hook__linux.cc b/www/iridium/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..55ec485ae8ec
--- /dev/null
+++ b/www/iridium/files/patch-content_gpu_gpu__sandbox__hook__linux.cc
@@ -0,0 +1,58 @@
+--- content/gpu/gpu_sandbox_hook_linux.cc.orig 2020-03-16 18:39:50 UTC
++++ content/gpu/gpu_sandbox_hook_linux.cc
+@@ -97,8 +97,9 @@ static const char kLibV4lEncPluginPath[] =
+ "/usr/lib/libv4l/plugins/libv4l-encplugin.so";
+ #endif
+
+-constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE;
++constexpr int dlopen_flag = RTLD_NOW | RTLD_GLOBAL;
+
++#if !defined(OS_BSD)
+ void AddV4L2GpuWhitelist(
+ std::vector<BrokerFilePermission>* permissions,
+ const service_manager::SandboxSeccompBPF::Options& options) {
+@@ -333,8 +334,10 @@ std::vector<BrokerFilePermission> FilePermissionsForGp
+ AddStandardGpuWhiteList(&permissions);
+ return permissions;
+ }
++#endif
+
+ void LoadArmGpuLibraries() {
++#if !defined(OS_BSD)
+ // Preload the Mali library.
+ if (UseChromecastSandboxWhitelist()) {
+ for (const char* path : kWhitelistedChromecastPaths) {
+@@ -349,6 +352,7 @@ void LoadArmGpuLibraries() {
+ // Preload the Tegra V4L2 (video decode acceleration) library.
+ dlopen(kLibTegraPath, dlopen_flag);
+ }
++#endif
+ }
+
+ bool LoadAmdGpuLibraries() {
+@@ -404,6 +408,7 @@ bool LoadLibrariesForGpu(
+ return true;
+ }
+
++#if !defined(OS_BSD)
+ sandbox::syscall_broker::BrokerCommandSet CommandSetForGPU(
+ const service_manager::SandboxLinux::Options& options) {
+ sandbox::syscall_broker::BrokerCommandSet command_set;
+@@ -425,13 +430,17 @@ bool BrokerProcessPreSandboxHook(
+ service_manager::SetProcessTitleFromCommandLine(nullptr);
+ return true;
+ }
++#endif
+
+ } // namespace
+
+ bool GpuProcessPreSandboxHook(service_manager::SandboxLinux::Options options) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ service_manager::SandboxLinux::GetInstance()->StartBrokerProcess(
+ CommandSetForGPU(options), FilePermissionsForGpu(options),
+ base::BindOnce(BrokerProcessPreSandboxHook), options);
++#endif
+
+ if (!LoadLibrariesForGpu(options))
+ return false;
diff --git a/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc b/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
new file mode 100644
index 000000000000..8708f1d34421
--- /dev/null
+++ b/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.cc
@@ -0,0 +1,29 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.cc.orig 2020-02-03 21:52:46 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.cc
+@@ -19,7 +19,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #include "mojo/public/cpp/bindings/pending_remote.h"
+ #endif
+@@ -34,7 +34,7 @@ typedef struct CGFont* CGFontRef;
+ namespace content {
+
+ PpapiBlinkPlatformImpl::PpapiBlinkPlatformImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ ChildThread::Get()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -52,7 +52,7 @@ PpapiBlinkPlatformImpl::~PpapiBlinkPlatformImpl() {
+ void PpapiBlinkPlatformImpl::Shutdown() {}
+
+ blink::WebSandboxSupport* PpapiBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h b/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
new file mode 100644
index 000000000000..d246feb0e6c4
--- /dev/null
+++ b/www/iridium/files/patch-content_ppapi__plugin_ppapi__blink__platform__impl.h
@@ -0,0 +1,25 @@
+--- content/ppapi_plugin/ppapi_blink_platform_impl.h.orig 2019-10-21 19:06:32 UTC
++++ content/ppapi_plugin/ppapi_blink_platform_impl.h
+@@ -13,7 +13,7 @@
+ #include "build/build_config.h"
+ #include "content/child/blink_platform_impl.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+ #endif
+@@ -36,11 +36,11 @@ class PpapiBlinkPlatformImpl : public BlinkPlatformImp
+ blink::WebThemeEngine* ThemeEngine() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/www/iridium/files/patch-content_public_app_content__main__delegate.cc b/www/iridium/files/patch-content_public_app_content__main__delegate.cc
new file mode 100644
index 000000000000..22a460c346ac
--- /dev/null
+++ b/www/iridium/files/patch-content_public_app_content__main__delegate.cc
@@ -0,0 +1,18 @@
+--- content/public/app/content_main_delegate.cc.orig 2020-03-16 18:40:32 UTC
++++ content/public/app/content_main_delegate.cc
+@@ -39,13 +39,13 @@ bool ContentMainDelegate::DelaySandboxInitialization(
+ return false;
+ }
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+
+ void ContentMainDelegate::ZygoteStarting(
+ std::vector<std::unique_ptr<service_manager::ZygoteForkDelegate>>*
+ delegates) {}
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ int ContentMainDelegate::TerminateForFatalInitializationError() {
+ CHECK(false);
diff --git a/www/iridium/files/patch-content_public_app_content__main__delegate.h b/www/iridium/files/patch-content_public_app_content__main__delegate.h
new file mode 100644
index 000000000000..06f339f70e30
--- /dev/null
+++ b/www/iridium/files/patch-content_public_app_content__main__delegate.h
@@ -0,0 +1,20 @@
+--- content/public/app/content_main_delegate.h.orig 2020-03-16 18:40:32 UTC
++++ content/public/app/content_main_delegate.h
+@@ -72,7 +72,7 @@ class CONTENT_EXPORT ContentMainDelegate {
+ // want it at all.
+ virtual bool DelaySandboxInitialization(const std::string& process_type);
+
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ // Tells the embedder that the zygote process is starting, and allows it to
+ // specify one or more zygote delegates if it wishes by storing them in
+ // |*delegates|.
+@@ -82,7 +82,7 @@ class CONTENT_EXPORT ContentMainDelegate {
+
+ // Called every time the zygote process forks.
+ virtual void ZygoteForked() {}
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Fatal errors during initialization are reported by this function, so that
+ // the embedder can implement graceful exit by displaying some message and
diff --git a/www/iridium/files/patch-content_public_common_child__process__host.h b/www/iridium/files/patch-content_public_common_child__process__host.h
new file mode 100644
index 000000000000..bf91f4c4d0d2
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_child__process__host.h
@@ -0,0 +1,11 @@
+--- content/public/common/child_process_host.h.orig 2020-02-03 21:52:46 UTC
++++ content/public/common/child_process_host.h
+@@ -80,7 +80,7 @@ class CONTENT_EXPORT ChildProcessHost : public IPC::Se
+ // No special behavior requested.
+ CHILD_NORMAL = 0,
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Indicates that the child execed after forking may be execced from
+ // /proc/self/exe rather than using the "real" app path. This prevents
+ // autoupdate from confusing us if it changes the file out from under us.
diff --git a/www/iridium/files/patch-content_public_common_common__param__traits__macros.h b/www/iridium/files/patch-content_public_common_common__param__traits__macros.h
new file mode 100644
index 000000000000..3fa7b395b5ef
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_common__param__traits__macros.h
@@ -0,0 +1,11 @@
+--- content/public/common/common_param_traits_macros.h.orig 2020-03-16 18:40:32 UTC
++++ content/public/common/common_param_traits_macros.h
+@@ -326,7 +326,7 @@ IPC_STRUCT_TRAITS_BEGIN(blink::mojom::RendererPreferen
+ IPC_STRUCT_TRAITS_MEMBER(accept_languages)
+ IPC_STRUCT_TRAITS_MEMBER(disable_client_blocked_error_page)
+ IPC_STRUCT_TRAITS_MEMBER(plugin_fullscreen_allowed)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(system_font_family_name)
+ #endif
+ #if defined(OS_WIN)
diff --git a/www/iridium/files/patch-content_public_common_content__features.cc b/www/iridium/files/patch-content_public_common_content__features.cc
new file mode 100644
index 000000000000..ebaa5f3fdb2a
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_content__features.cc
@@ -0,0 +1,29 @@
+--- content/public/common/content_features.cc.orig 2020-03-16 18:40:32 UTC
++++ content/public/common/content_features.cc
+@@ -48,7 +48,7 @@ const base::Feature kAudioServiceLaunchOnStartup{
+ const base::Feature kAudioServiceOutOfProcess{
+ "AudioServiceOutOfProcess",
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+ base::FEATURE_DISABLED_BY_DEFAULT
+@@ -693,7 +693,7 @@ const base::Feature kWebAssemblyThreads {
+ };
+
+ // Enable WebAssembly trap handler.
+-#if (defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
++#if (defined(OS_BSD) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)) && \
+ defined(ARCH_CPU_X86_64)
+ const base::Feature kWebAssemblyTrapHandler{"WebAssemblyTrapHandler",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+@@ -723,7 +723,7 @@ const base::Feature kWebAuth{"WebAuthentication",
+ // https://w3c.github.io/webauthn
+ const base::Feature kWebAuthCable {
+ "WebAuthenticationCable",
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #else
+ base::FEATURE_ENABLED_BY_DEFAULT
diff --git a/www/iridium/files/patch-content_public_common_content__switches.cc b/www/iridium/files/patch-content_public_common_content__switches.cc
new file mode 100644
index 000000000000..4f1ae111a366
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_content__switches.cc
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.cc.orig 2020-03-16 18:40:32 UTC
++++ content/public/common/content_switches.cc
+@@ -997,7 +997,7 @@ const char kEnableAggressiveDOMStorageFlushing[] =
+ // Enable indication that browser is controlled by automation.
+ const char kEnableAutomation[] = "enable-automation";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ // Allows sending text-to-speech requests to speech-dispatcher, a common
+ // Linux speech service. Because it's buggy, the user must explicitly
+ // enable it so that visiting a random webpage can't cause instability.
diff --git a/www/iridium/files/patch-content_public_common_content__switches.h b/www/iridium/files/patch-content_public_common_content__switches.h
new file mode 100644
index 000000000000..1a705f45ae7f
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_content__switches.h
@@ -0,0 +1,11 @@
+--- content/public/common/content_switches.h.orig 2020-03-16 18:40:32 UTC
++++ content/public/common/content_switches.h
+@@ -278,7 +278,7 @@ CONTENT_EXPORT extern const char kRemoteDebuggingSocke
+ CONTENT_EXPORT extern const char kRendererWaitForJavaDebugger[];
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_FREEBSD)
+ CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
+ #endif
+
diff --git a/www/iridium/files/patch-content_public_common_use__zoom__for__dsf__policy.cc b/www/iridium/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
new file mode 100644
index 000000000000..b448c3f07db5
--- /dev/null
+++ b/www/iridium/files/patch-content_public_common_use__zoom__for__dsf__policy.cc
@@ -0,0 +1,11 @@
+--- content/public/common/use_zoom_for_dsf_policy.cc.orig 2019-03-11 22:00:58 UTC
++++ content/public/common/use_zoom_for_dsf_policy.cc
+@@ -25,7 +25,7 @@ const base::Feature kUseZoomForDsfEnabledByDefault{
+ #endif
+
+ bool IsUseZoomForDSFEnabledByDefault() {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return true;
+ #elif defined(OS_WIN) || defined(OS_ANDROID)
+ return base::FeatureList::IsEnabled(kUseZoomForDsfEnabledByDefault);
diff --git a/www/iridium/files/patch-content_public_test_browser__test__base.cc b/www/iridium/files/patch-content_public_test_browser__test__base.cc
new file mode 100644
index 000000000000..dd60982ba019
--- /dev/null
+++ b/www/iridium/files/patch-content_public_test_browser__test__base.cc
@@ -0,0 +1,31 @@
+--- content/public/test/browser_test_base.cc.orig 2020-04-03 04:11:32 UTC
++++ content/public/test/browser_test_base.cc
+@@ -71,7 +71,7 @@
+ #include "ui/gl/gl_implementation.h"
+ #include "ui/gl/gl_switches.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/platform_window/common/platform_window_defaults.h" // nogncheck
+ #endif
+
+@@ -98,6 +98,10 @@
+ #include "ui/views/test/event_generator_delegate_mac.h"
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#endif
++
+ #if defined(OS_POSIX)
+ #include "base/process/process_handle.h"
+ #endif
+@@ -184,7 +188,7 @@ BrowserTestBase::BrowserTestBase()
+ "a new browser test suite that runs on Android, please add it to "
+ "//build/android/pylib/gtest/gtest_test_instance.py.";
+ g_instance_already_created = true;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ui::test::EnableTestConfigForPlatformWindows();
+ #endif
+
diff --git a/www/iridium/files/patch-content_public_test_content__browser__test.cc b/www/iridium/files/patch-content_public_test_content__browser__test.cc
new file mode 100644
index 000000000000..cc6012d2f89e
--- /dev/null
+++ b/www/iridium/files/patch-content_public_test_content__browser__test.cc
@@ -0,0 +1,29 @@
+--- content/public/test/content_browser_test.cc.orig 2020-04-06 08:25:58 UTC
++++ content/public/test/content_browser_test.cc
+@@ -26,7 +26,7 @@
+ #include "base/mac/foundation_util.h"
+ #endif
+
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
+@@ -83,7 +83,7 @@ void ContentBrowserTest::SetUp() {
+ #endif
+
+ // LinuxInputMethodContextFactory has to be initialized.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ ui::InitializeInputMethodForTesting();
+ #endif
+
+@@ -96,7 +96,7 @@ void ContentBrowserTest::TearDown() {
+ BrowserTestBase::TearDown();
+
+ // LinuxInputMethodContextFactory has to be shutdown.
+-#if !defined(OS_CHROMEOS) && defined(OS_LINUX)
++#if (!defined(OS_CHROMEOS) && defined(OS_LINUX)) || defined(OS_BSD)
+ ui::ShutdownInputMethodForTesting();
+ #endif
+ }
diff --git a/www/iridium/files/patch-content_public_test_mock__render__thread.cc b/www/iridium/files/patch-content_public_test_mock__render__thread.cc
new file mode 100644
index 000000000000..5b12d835bc18
--- /dev/null
+++ b/www/iridium/files/patch-content_public_test_mock__render__thread.cc
@@ -0,0 +1,11 @@
+--- content/public/test/mock_render_thread.cc.orig 2019-12-16 21:51:26 UTC
++++ content/public/test/mock_render_thread.cc
+@@ -73,7 +73,7 @@ class MockRenderMessageFilterImpl : public mojom::Rend
+ std::move(callback).Run(false);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SetThreadPriority(int32_t platform_thread_id,
+ base::ThreadPriority thread_priority) override {}
+ #endif
diff --git a/www/iridium/files/patch-content_renderer_media_audio_audio__device__factory.cc b/www/iridium/files/patch-content_renderer_media_audio_audio__device__factory.cc
new file mode 100644
index 000000000000..c1a03f802347
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_media_audio_audio__device__factory.cc
@@ -0,0 +1,11 @@
+--- content/renderer/media/audio/audio_device_factory.cc.orig 2019-06-04 18:55:23 UTC
++++ content/renderer/media/audio/audio_device_factory.cc
+@@ -35,7 +35,7 @@ AudioDeviceFactory* AudioDeviceFactory::factory_ = nul
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Due to driver deadlock issues on Windows (http://crbug/422522) there is a
+ // chance device authorization response is never received from the browser side.
+ // In this case we will time out, to avoid renderer hang forever waiting for
diff --git a/www/iridium/files/patch-content_renderer_render__process__impl.cc b/www/iridium/files/patch-content_renderer_render__process__impl.cc
new file mode 100644
index 000000000000..c0badaab0886
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_render__process__impl.cc
@@ -0,0 +1,20 @@
+--- content/renderer/render_process_impl.cc.orig 2020-03-16 18:40:32 UTC
++++ content/renderer/render_process_impl.cc
+@@ -43,7 +43,7 @@
+ #if defined(OS_WIN)
+ #include "base/win/win_util.h"
+ #endif
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #include "v8/include/v8-wasm-trap-handler-posix.h"
+ #endif
+ namespace {
+@@ -161,7 +161,7 @@ RenderProcessImpl::RenderProcessImpl()
+
+ SetV8FlagIfNotFeature(features::kWebAssemblyTrapHandler,
+ "--no-wasm-trap-handler");
+-#if defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ if (base::FeatureList::IsEnabled(features::kWebAssemblyTrapHandler)) {
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ if (!command_line->HasSwitch(
diff --git a/www/iridium/files/patch-content_renderer_render__thread__impl.cc b/www/iridium/files/patch-content_renderer_render__thread__impl.cc
new file mode 100644
index 000000000000..c231b5944895
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_render__thread__impl.cc
@@ -0,0 +1,51 @@
+--- content/renderer/render_thread_impl.cc.orig 2020-03-16 18:40:32 UTC
++++ content/renderer/render_thread_impl.cc
+@@ -172,12 +172,21 @@
+ #include "mojo/public/cpp/bindings/message_dumper.h"
+ #endif
+
++#if !defined(OS_BSD)
+ #if defined(OS_MACOSX)
+ #include <malloc/malloc.h>
+ #else
+ #include <malloc.h>
+ #endif
++#endif
+
++#if defined(OS_BSD)
++#include <stddef.h>
++#include <stdint.h>
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#endif
++
+ using base::ThreadRestrictions;
+ using blink::WebDocument;
+ using blink::WebFrame;
+@@ -731,7 +740,7 @@ void RenderThreadImpl::Init() {
+ DCHECK(parsed_num_raster_threads) << string_value;
+ DCHECK_GT(num_raster_threads, 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ categorized_worker_pool_->SetBackgroundingCallback(
+ main_thread_scheduler_->DefaultTaskRunner(),
+ base::BindOnce(
+@@ -754,7 +763,7 @@ void RenderThreadImpl::Init() {
+ base::DiscardableMemoryAllocator::SetInstance(
+ discardable_memory_allocator_.get());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (base::FeatureList::IsEnabled(
+ blink::features::kBlinkCompositorUseDisplayThreadPriority)) {
+ render_message_filter()->SetThreadPriority(
+@@ -1136,7 +1145,7 @@ media::GpuVideoAcceleratorFactories* RenderThreadImpl:
+ !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames);
+ #else
+ cmd_line->HasSwitch(switches::kEnableGpuMemoryBufferVideoFrames);
+-#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ const bool enable_media_stream_gpu_memory_buffers =
+ enable_gpu_memory_buffers &&
+ base::FeatureList::IsEnabled(
diff --git a/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.cc b/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.cc
new file mode 100644
index 000000000000..716ffe45a392
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.cc
@@ -0,0 +1,47 @@
+--- content/renderer/renderer_blink_platform_impl.cc.orig 2020-03-16 18:40:32 UTC
++++ content/renderer/renderer_blink_platform_impl.cc
+@@ -98,7 +98,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -173,7 +173,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ if (RenderThreadImpl::current()) {
+ io_runner_ = RenderThreadImpl::current()->GetIOTaskRunner();
+ thread_safe_sender_ = RenderThreadImpl::current()->thread_safe_sender();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ RenderThreadImpl::current()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -183,7 +183,7 @@ RendererBlinkPlatformImpl::RendererBlinkPlatformImpl(
+ #endif
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ if (sandboxEnabled()) {
+ #if defined(OS_MACOSX)
+ sandbox_support_ = std::make_unique<WebSandboxSupportMac>();
+@@ -265,7 +265,7 @@ RendererBlinkPlatformImpl::CreateNetworkURLLoaderFacto
+
+ void RendererBlinkPlatformImpl::SetDisplayThreadPriority(
+ base::PlatformThreadId thread_id) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (RenderThreadImpl* render_thread = RenderThreadImpl::current()) {
+ render_thread->render_message_filter()->SetThreadPriority(
+ thread_id, base::ThreadPriority::DISPLAY);
+@@ -278,7 +278,7 @@ blink::BlameContext* RendererBlinkPlatformImpl::GetTop
+ }
+
+ blink::WebSandboxSupport* RendererBlinkPlatformImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ // These platforms do not require sandbox support.
diff --git a/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.h b/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.h
new file mode 100644
index 000000000000..5aa4c9e85488
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_renderer__blink__platform__impl.h
@@ -0,0 +1,29 @@
+--- content/renderer/renderer_blink_platform_impl.h.orig 2020-02-03 21:53:31 UTC
++++ content/renderer/renderer_blink_platform_impl.h
+@@ -30,7 +30,7 @@
+ #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
+ #include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -218,7 +218,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+
+ scoped_refptr<base::SingleThreadTaskRunner> io_runner_;
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+
+@@ -242,7 +242,7 @@ class CONTENT_EXPORT RendererBlinkPlatformImpl : publi
+ mojo::PendingRemote<blink::mojom::CodeCacheHost> code_cache_host_remote_;
+ mojo::SharedRemote<blink::mojom::CodeCacheHost> code_cache_host_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/www/iridium/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc b/www/iridium/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
new file mode 100644
index 000000000000..3c78e664138b
--- /dev/null
+++ b/www/iridium/files/patch-content_renderer_renderer__main__platform__delegate__linux.cc
@@ -0,0 +1,19 @@
+--- content/renderer/renderer_main_platform_delegate_linux.cc.orig 2020-03-16 18:39:50 UTC
++++ content/renderer/renderer_main_platform_delegate_linux.cc
+@@ -30,6 +30,7 @@ void RendererMainPlatformDelegate::PlatformUninitializ
+ }
+
+ bool RendererMainPlatformDelegate::EnableSandbox() {
++#if !defined(OS_BSD)
+ // The setuid sandbox is started in the zygote process: zygote_main_linux.cc
+ // https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox.md
+ //
+@@ -65,7 +66,7 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
+ CHECK_EQ(errno, EPERM);
+ }
+ #endif // __x86_64__
+-
++#endif // ! OS_BSD
+ return true;
+ }
+
diff --git a/www/iridium/files/patch-content_shell_BUILD.gn b/www/iridium/files/patch-content_shell_BUILD.gn
new file mode 100644
index 000000000000..6a640a666c6a
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/shell/BUILD.gn.orig 2020-03-16 18:40:32 UTC
++++ content/shell/BUILD.gn
+@@ -932,7 +932,7 @@ group("content_shell_crash_test") {
+ if (is_win) {
+ data_deps += [ "//build/win:copy_cdb_to_output" ]
+ }
+- if (is_posix) {
++ if (is_posix && !is_bsd) {
+ data_deps += [
+ "//third_party/breakpad:dump_syms",
+ "//third_party/breakpad:minidump_stackwalk",
diff --git a/www/iridium/files/patch-content_shell_app_shell__main__delegate.cc b/www/iridium/files/patch-content_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..9e3e50211c22
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_app_shell__main__delegate.cc
@@ -0,0 +1,20 @@
+--- content/shell/app/shell_main_delegate.cc.orig 2020-03-16 18:40:32 UTC
++++ content/shell/app/shell_main_delegate.cc
+@@ -306,7 +306,7 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit
+ }
+
+ void ShellMainDelegate::PreSandboxStartup() {
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
+@@ -325,7 +325,7 @@ void ShellMainDelegate::PreSandboxStartup() {
+ // Reporting for sub-processes will be initialized in ZygoteForked.
+ if (process_type != service_manager::switches::kZygoteProcess) {
+ crash_reporter::InitializeCrashpad(process_type.empty(), process_type);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ crash_reporter::SetFirstChanceExceptionHandler(
+ v8::TryHandleWebAssemblyTrapPosix);
+ #endif
diff --git a/www/iridium/files/patch-content_shell_browser_shell__browser__context.cc b/www/iridium/files/patch-content_shell_browser_shell__browser__context.cc
new file mode 100644
index 000000000000..d9388fc9f1d2
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_browser_shell__browser__context.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_context.cc.orig 2019-10-21 19:06:33 UTC
++++ content/shell/browser/shell_browser_context.cc
+@@ -32,7 +32,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -107,7 +107,7 @@ void ShellBrowserContext::InitWhileIOAllowed() {
+ #if defined(OS_WIN)
+ CHECK(base::PathService::Get(base::DIR_LOCAL_APP_DATA, &path_));
+ path_ = path_.Append(std::wstring(L"content_shell"));
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(
+ base::nix::GetXDGDirectory(env.get(),
diff --git a/www/iridium/files/patch-content_shell_browser_shell__browser__main__parts.cc b/www/iridium/files/patch-content_shell_browser_shell__browser__main__parts.cc
new file mode 100644
index 000000000000..dc97f7778f08
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_browser_shell__browser__main__parts.cc
@@ -0,0 +1,20 @@
+--- content/shell/browser/shell_browser_main_parts.cc.orig 2019-12-16 21:51:26 UTC
++++ content/shell/browser/shell_browser_main_parts.cc
+@@ -47,7 +47,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+ #if defined(OS_CHROMEOS)
+@@ -123,7 +123,7 @@ int ShellBrowserMainParts::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_BSD) || defined(OS_LINUX))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__context.cc b/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
new file mode 100644
index 000000000000..09235357330e
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__context.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_context.cc.orig 2020-02-03 21:52:46 UTC
++++ content/shell/browser/web_test/web_test_browser_context.cc
+@@ -27,7 +27,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
diff --git a/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc b/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
new file mode 100644
index 000000000000..7aa29e2df609
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_browser_web__test_web__test__browser__main__parts.cc
@@ -0,0 +1,11 @@
+--- content/shell/browser/web_test/web_test_browser_main_parts.cc.orig 2019-09-09 21:55:17 UTC
++++ content/shell/browser/web_test/web_test_browser_main_parts.cc
+@@ -36,7 +36,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
diff --git a/www/iridium/files/patch-content_shell_test__runner_test__runner.cc b/www/iridium/files/patch-content_shell_test__runner_test__runner.cc
new file mode 100644
index 000000000000..c2e390ce3a41
--- /dev/null
+++ b/www/iridium/files/patch-content_shell_test__runner_test__runner.cc
@@ -0,0 +1,29 @@
+--- content/shell/test_runner/test_runner.cc.orig 2020-03-16 18:40:32 UTC
++++ content/shell/test_runner/test_runner.cc
+@@ -62,7 +62,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/skia_util.h"
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "third_party/blink/public/platform/web_font_render_style.h"
+ #endif
+
+@@ -1532,7 +1532,7 @@ void TestRunner::Reset() {
+ drag_image_.reset();
+
+ blink::WebSecurityPolicy::ClearOriginAccessList();
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ blink::WebFontRenderStyle::SetSubpixelPositioning(false);
+ #endif
+
+@@ -2111,7 +2111,7 @@ void TestRunner::AddOriginAccessAllowListEntry(
+ }
+
+ void TestRunner::SetTextSubpixelPositioning(bool value) {
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Since FontConfig doesn't provide a variable to control subpixel
+ // positioning, we'll fall back to setting it globally for all fonts.
+ blink::WebFontRenderStyle::SetSubpixelPositioning(value);
diff --git a/www/iridium/files/patch-content_test_content__test__suite.cc b/www/iridium/files/patch-content_test_content__test__suite.cc
new file mode 100644
index 000000000000..de8be8785a7f
--- /dev/null
+++ b/www/iridium/files/patch-content_test_content__test__suite.cc
@@ -0,0 +1,18 @@
+--- content/test/content_test_suite.cc.orig 2019-12-16 21:50:48 UTC
++++ content/test/content_test_suite.cc
+@@ -84,6 +84,7 @@ void ContentTestSuite::Initialize() {
+ // to initialize GL, so don't do it here.
+ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+ bool is_child_process = command_line->HasSwitch(switches::kTestChildProcess);
++#if !defined(OS_BSD)
+ if (!is_child_process) {
+ gl::GLSurfaceTestSupport::InitializeNoExtensionsOneOff();
+ auto* gpu_feature_info = gpu::GetTestGpuThreadHolder()->GetGpuFeatureInfo();
+@@ -91,6 +92,7 @@ void ContentTestSuite::Initialize() {
+ gpu_feature_info->disabled_extensions);
+ gl::init::InitializeExtensionSettingsOneOffPlatform();
+ }
++#endif
+ testing::TestEventListeners& listeners =
+ testing::UnitTest::GetInstance()->listeners();
+ listeners.Append(new TestInitializationListener);
diff --git a/www/iridium/files/patch-content_utility_BUILD.gn b/www/iridium/files/patch-content_utility_BUILD.gn
new file mode 100644
index 000000000000..6c7ec5a20c2c
--- /dev/null
+++ b/www/iridium/files/patch-content_utility_BUILD.gn
@@ -0,0 +1,11 @@
+--- content/utility/BUILD.gn.orig 2020-03-18 12:50:25 UTC
++++ content/utility/BUILD.gn
+@@ -78,7 +78,7 @@ jumbo_source_set("utility") {
+ deps += [ "//services/proxy_resolver:lib" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ deps += [ "//content/utility/soda:soda_sandbox_hook" ]
+ }
+ }
diff --git a/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc b/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
new file mode 100644
index 000000000000..37e61a50af20
--- /dev/null
+++ b/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.cc
@@ -0,0 +1,29 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.cc.orig 2019-12-16 21:50:48 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.cc
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_MACOSX)
+ #include "content/child/child_process_sandbox_support_impl_mac.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "content/child/child_process_sandbox_support_impl_linux.h"
+ #endif
+
+@@ -17,7 +17,7 @@ namespace content {
+
+ UtilityBlinkPlatformWithSandboxSupportImpl::
+ UtilityBlinkPlatformWithSandboxSupportImpl() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::PendingRemote<font_service::mojom::FontService> font_service;
+ UtilityThread::Get()->BindHostReceiver(
+ font_service.InitWithNewPipeAndPassReceiver());
+@@ -34,7 +34,7 @@ UtilityBlinkPlatformWithSandboxSupportImpl::
+
+ blink::WebSandboxSupport*
+ UtilityBlinkPlatformWithSandboxSupportImpl::GetSandboxSupport() {
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ return sandbox_support_.get();
+ #else
+ return nullptr;
diff --git a/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h b/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
new file mode 100644
index 000000000000..23f525c1b117
--- /dev/null
+++ b/www/iridium/files/patch-content_utility_utility__blink__platform__with__sandbox__support__impl.h
@@ -0,0 +1,24 @@
+--- content/utility/utility_blink_platform_with_sandbox_support_impl.h.orig 2019-12-16 21:50:48 UTC
++++ content/utility/utility_blink_platform_with_sandbox_support_impl.h
+@@ -11,7 +11,7 @@
+ #include "build/build_config.h"
+ #include "third_party/blink/public/platform/platform.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "components/services/font/public/cpp/font_loader.h" // nogncheck
+ #include "third_party/skia/include/core/SkRefCnt.h" // nogncheck
+ #endif
+@@ -33,10 +33,10 @@ class UtilityBlinkPlatformWithSandboxSupportImpl : pub
+ blink::WebSandboxSupport* GetSandboxSupport() override;
+
+ private:
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ std::unique_ptr<blink::WebSandboxSupport> sandbox_support_;
+ #endif
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ sk_sp<font_service::FontLoader> font_loader_;
+ #endif
+
diff --git a/www/iridium/files/patch-device_bluetooth_BUILD.gn b/www/iridium/files/patch-device_bluetooth_BUILD.gn
new file mode 100644
index 000000000000..222316adc8f5
--- /dev/null
+++ b/www/iridium/files/patch-device_bluetooth_BUILD.gn
@@ -0,0 +1,11 @@
+--- device/bluetooth/BUILD.gn.orig 2020-03-16 18:39:51 UTC
++++ device/bluetooth/BUILD.gn
+@@ -275,7 +275,7 @@ component("bluetooth") {
+ ]
+ }
+
+- if (is_chromeos || is_linux) {
++ if (is_chromeos || (is_linux && !is_bsd)) {
+ if (use_dbus) {
+ sources += [
+ "bluez/bluetooth_adapter_bluez.cc",
diff --git a/www/iridium/files/patch-device_gamepad_gamepad__provider.cc b/www/iridium/files/patch-device_gamepad_gamepad__provider.cc
new file mode 100644
index 000000000000..7c9a18a60c34
--- /dev/null
+++ b/www/iridium/files/patch-device_gamepad_gamepad__provider.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/gamepad_provider.cc.orig 2020-03-16 18:39:51 UTC
++++ device/gamepad/gamepad_provider.cc
+@@ -147,7 +147,7 @@ void GamepadProvider::Initialize(std::unique_ptr<Gamep
+
+ if (!polling_thread_)
+ polling_thread_.reset(new base::Thread("Gamepad polling thread"));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, the data fetcher needs to watch file descriptors, so the message
+ // loop needs to be a libevent loop.
+ const base::MessagePumpType kMessageLoopType = base::MessagePumpType::IO;
diff --git a/www/iridium/files/patch-device_gamepad_hid__writer__linux.cc b/www/iridium/files/patch-device_gamepad_hid__writer__linux.cc
new file mode 100644
index 000000000000..f962ad16a8f5
--- /dev/null
+++ b/www/iridium/files/patch-device_gamepad_hid__writer__linux.cc
@@ -0,0 +1,11 @@
+--- device/gamepad/hid_writer_linux.cc.orig 2019-10-31 07:37:06 UTC
++++ device/gamepad/hid_writer_linux.cc
+@@ -4,6 +4,8 @@
+
+ #include "device/gamepad/hid_writer_linux.h"
+
++#include <unistd.h>
++
+ #include "base/posix/eintr_wrapper.h"
+
+ namespace device {
diff --git a/www/iridium/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc b/www/iridium/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
new file mode 100644
index 000000000000..697ace21a29a
--- /dev/null
+++ b/www/iridium/files/patch-extensions_browser_api_declarative__webrequest_webrequest__action.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/declarative_webrequest/webrequest_action.cc.orig 2019-10-21 19:06:34 UTC
++++ extensions/browser/api/declarative_webrequest/webrequest_action.cc
+@@ -27,7 +27,11 @@
+ #include "extensions/common/extension.h"
+ #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
+ #include "net/http/http_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using extension_web_request_api_helpers::EventResponseDelta;
+
diff --git a/www/iridium/files/patch-extensions_browser_api_messaging_message__service.cc b/www/iridium/files/patch-extensions_browser_api_messaging_message__service.cc
new file mode 100644
index 000000000000..7ded2d7c1140
--- /dev/null
+++ b/www/iridium/files/patch-extensions_browser_api_messaging_message__service.cc
@@ -0,0 +1,34 @@
+--- extensions/browser/api/messaging/message_service.cc.orig 2020-02-03 21:52:46 UTC
++++ extensions/browser/api/messaging/message_service.cc
+@@ -61,7 +61,7 @@ namespace {
+
+ const char kReceivingEndDoesntExistError[] =
+ "Could not establish connection. Receiving end does not exist.";
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ const char kMissingPermissionError[] =
+ "Access to native messaging requires nativeMessaging permission.";
+ const char kProhibitedByPoliciesError[] =
+@@ -391,7 +391,7 @@ void MessageService::OpenChannelToNativeApp(
+ if (!opener_port->IsValidPort())
+ return;
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ bool has_permission = extension->permissions_data()->HasAPIPermission(
+ APIPermission::kNativeMessaging);
+ if (!has_permission) {
+@@ -441,11 +441,11 @@ void MessageService::OpenChannelToNativeApp(
+ channel->opener->IncrementLazyKeepaliveCount();
+
+ AddChannel(std::move(channel), receiver_port_id);
+-#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#else // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ const char kNativeMessagingNotSupportedError[] =
+ "Native Messaging is not supported on this platform.";
+ opener_port->DispatchOnDisconnect(kNativeMessagingNotSupportedError);
+-#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX))
++#endif // !(defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD))
+ }
+
+ void MessageService::OpenChannelToTab(const ChannelEndpoint& source,
diff --git a/www/iridium/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc b/www/iridium/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
new file mode 100644
index 000000000000..aa2f5369b993
--- /dev/null
+++ b/www/iridium/files/patch-extensions_browser_api_networking__private_networking__private__delegate__factory.cc
@@ -0,0 +1,20 @@
+--- extensions/browser/api/networking_private/networking_private_delegate_factory.cc.orig 2019-03-11 22:00:58 UTC
++++ extensions/browser/api/networking_private/networking_private_delegate_factory.cc
+@@ -11,7 +11,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "extensions/browser/api/networking_private/networking_private_chromeos.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "extensions/browser/api/networking_private/networking_private_linux.h"
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ #include "components/wifi/wifi_service.h"
+@@ -61,7 +61,7 @@ KeyedService* NetworkingPrivateDelegateFactory::BuildS
+ NetworkingPrivateDelegate* delegate;
+ #if defined(OS_CHROMEOS)
+ delegate = new NetworkingPrivateChromeOS(browser_context);
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ delegate = new NetworkingPrivateLinux();
+ #elif defined(OS_WIN) || defined(OS_MACOSX)
+ std::unique_ptr<wifi::WiFiService> wifi_service(wifi::WiFiService::Create());
diff --git a/www/iridium/files/patch-extensions_browser_api_web__request_form__data__parser.cc b/www/iridium/files/patch-extensions_browser_api_web__request_form__data__parser.cc
new file mode 100644
index 000000000000..aebaba727ff9
--- /dev/null
+++ b/www/iridium/files/patch-extensions_browser_api_web__request_form__data__parser.cc
@@ -0,0 +1,14 @@
+--- extensions/browser/api/web_request/form_data_parser.cc.orig 2019-03-11 22:00:58 UTC
++++ extensions/browser/api/web_request/form_data_parser.cc
+@@ -15,7 +15,11 @@
+ #include "base/values.h"
+ #include "net/base/escape.h"
+ #include "net/http/http_request_headers.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::DictionaryValue;
+ using base::ListValue;
diff --git a/www/iridium/files/patch-extensions_browser_browser__context__keyed__service__factories.cc b/www/iridium/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
new file mode 100644
index 000000000000..d640fe45fcf4
--- /dev/null
+++ b/www/iridium/files/patch-extensions_browser_browser__context__keyed__service__factories.cc
@@ -0,0 +1,11 @@
+--- extensions/browser/browser_context_keyed_service_factories.cc.orig 2020-02-03 21:52:46 UTC
++++ extensions/browser/browser_context_keyed_service_factories.cc
+@@ -71,7 +71,7 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt()
+ HidDeviceManager::GetFactoryInstance();
+ IdleManagerFactory::GetInstance();
+ ManagementAPI::GetFactoryInstance();
+-#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_BSD)
+ NetworkingPrivateEventRouterFactory::GetInstance();
+ #endif
+ PowerAPI::GetFactoryInstance();
diff --git a/www/iridium/files/patch-extensions_common_api___permission__features.json b/www/iridium/files/patch-extensions_common_api___permission__features.json
new file mode 100644
index 000000000000..554abd741ba8
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_api___permission__features.json
@@ -0,0 +1,29 @@
+--- extensions/common/api/_permission_features.json.orig 2020-02-03 21:53:31 UTC
++++ extensions/common/api/_permission_features.json
+@@ -135,7 +135,7 @@
+ {
+ "channel": "stable",
+ "extension_types": ["platform_app"],
+- "platforms": ["chromeos", "win", "mac", "linux"],
++ "platforms": ["chromeos", "win", "mac", "linux", "bsd"],
+ "whitelist": [
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/387169
+ "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE", // http://crbug.com/387169
+@@ -468,7 +468,7 @@
+ }, {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ "0DE0F05680A4A056BCEC864ED8DDA84296F82B40", // http://crbug.com/434651
+ "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80", // http://crbug.com/293683
+@@ -499,7 +499,7 @@
+ "networkingPrivate": {
+ "channel": "stable",
+ "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
+- "platforms": ["chromeos", "mac", "win", "linux"],
++ "platforms": ["chromeos", "mac", "win", "linux", "bsd"],
+ "whitelist": [
+ // DO NOT ADD ANY MORE ENTRIES HERE.
+ // networkingPrivate is being migrated to networking.onc.
diff --git a/www/iridium/files/patch-extensions_common_api_runtime.json b/www/iridium/files/patch-extensions_common_api_runtime.json
new file mode 100644
index 000000000000..9d5dea52dcbc
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_api_runtime.json
@@ -0,0 +1,11 @@
+--- extensions/common/api/runtime.json.orig 2020-02-03 21:53:31 UTC
++++ extensions/common/api/runtime.json
+@@ -68,7 +68,7 @@
+ "id": "PlatformOs",
+ "type": "string",
+ "description": "The operating system chrome is running on.",
+- "enum": ["mac", "win", "android", "cros", "linux", "openbsd"]
++ "enum": ["mac", "win", "android", "cros", "linux", "freebsd", "openbsd"]
+ },
+ {
+ "id": "PlatformArch",
diff --git a/www/iridium/files/patch-extensions_common_feature__switch.cc b/www/iridium/files/patch-extensions_common_feature__switch.cc
new file mode 100644
index 000000000000..9cac45bedcb2
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_feature__switch.cc
@@ -0,0 +1,16 @@
+--- extensions/common/feature_switch.cc.orig 2019-10-21 19:06:34 UTC
++++ extensions/common/feature_switch.cc
+@@ -42,11 +42,11 @@ class CommonSwitches {
+ FeatureSwitch::DEFAULT_ENABLED),
+ load_media_router_component_extension(
+ kLoadMediaRouterComponentExtensionFlag,
+-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
++#if BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_BSD)
+ FeatureSwitch::DEFAULT_ENABLED)
+ #else
+ FeatureSwitch::DEFAULT_DISABLED)
+-#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
++#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) || defined(OS_BSD)
+ {
+ }
+
diff --git a/www/iridium/files/patch-extensions_common_features_feature.cc b/www/iridium/files/patch-extensions_common_features_feature.cc
new file mode 100644
index 000000000000..e97794f406b1
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_features_feature.cc
@@ -0,0 +1,11 @@
+--- extensions/common/features/feature.cc.orig 2019-07-24 18:58:27 UTC
++++ extensions/common/features/feature.cc
+@@ -20,7 +20,7 @@ namespace extensions {
+ Feature::Platform Feature::GetCurrentPlatform() {
+ #if defined(OS_CHROMEOS)
+ return CHROMEOS_PLATFORM;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return LINUX_PLATFORM;
+ #elif defined(OS_MACOSX)
+ return MACOSX_PLATFORM;
diff --git a/www/iridium/files/patch-extensions_common_image__util.cc b/www/iridium/files/patch-extensions_common_image__util.cc
new file mode 100644
index 000000000000..7048ea59ebd3
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_image__util.cc
@@ -0,0 +1,14 @@
+--- extensions/common/image_util.cc.orig 2020-02-03 21:52:47 UTC
++++ extensions/common/image_util.cc
+@@ -18,7 +18,11 @@
+ #include "base/strings/stringprintf.h"
+ #include "base/time/time.h"
+ #include "base/timer/elapsed_timer.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+ #include "third_party/skia/include/core/SkBitmap.h"
+ #include "third_party/skia/include/core/SkCanvas.h"
+ #include "third_party/skia/include/core/SkColor.h"
diff --git a/www/iridium/files/patch-extensions_common_stack__frame.cc b/www/iridium/files/patch-extensions_common_stack__frame.cc
new file mode 100644
index 000000000000..cb1f991f448f
--- /dev/null
+++ b/www/iridium/files/patch-extensions_common_stack__frame.cc
@@ -0,0 +1,14 @@
+--- extensions/common/stack_frame.cc.orig 2019-03-11 22:00:58 UTC
++++ extensions/common/stack_frame.cc
+@@ -7,7 +7,11 @@
+ #include <string>
+
+ #include "base/strings/utf_string_conversions.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ namespace extensions {
+
diff --git a/www/iridium/files/patch-extensions_renderer_bindings_api__binding__util.cc b/www/iridium/files/patch-extensions_renderer_bindings_api__binding__util.cc
new file mode 100644
index 000000000000..e5e060248182
--- /dev/null
+++ b/www/iridium/files/patch-extensions_renderer_bindings_api__binding__util.cc
@@ -0,0 +1,11 @@
+--- extensions/renderer/bindings/api_binding_util.cc.orig 2019-03-11 22:00:58 UTC
++++ extensions/renderer/bindings/api_binding_util.cc
+@@ -129,6 +129,8 @@ std::string GetPlatformString() {
+ return "mac";
+ #elif defined(OS_WIN)
+ return "win";
++#elif defined(OS_BSD)
++ return "bsd";
+ #else
+ NOTREACHED();
+ return std::string();
diff --git a/www/iridium/files/patch-extensions_shell_app_shell__main__delegate.cc b/www/iridium/files/patch-extensions_shell_app_shell__main__delegate.cc
new file mode 100644
index 000000000000..196003fc999d
--- /dev/null
+++ b/www/iridium/files/patch-extensions_shell_app_shell__main__delegate.cc
@@ -0,0 +1,20 @@
+--- extensions/shell/app/shell_main_delegate.cc.orig 2019-09-09 21:55:17 UTC
++++ extensions/shell/app/shell_main_delegate.cc
+@@ -38,7 +38,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #elif defined(OS_MACOSX)
+ #include "base/base_paths_mac.h"
+@@ -70,7 +70,7 @@ base::FilePath GetDataPath() {
+ return cmd_line->GetSwitchValuePath(switches::kContentShellDataPath);
+
+ base::FilePath data_dir;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ data_dir = base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir);
diff --git a/www/iridium/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc b/www/iridium/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc
new file mode 100644
index 000000000000..194f3950299b
--- /dev/null
+++ b/www/iridium/files/patch-extensions_shell_browser_api_runtime_shell__runtime__api__delegate.cc
@@ -0,0 +1,11 @@
+--- extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc.orig 2019-09-16 09:48:37 UTC
++++ extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
+@@ -45,7 +45,7 @@ void ShellRuntimeAPIDelegate::OpenURL(const GURL& unin
+ bool ShellRuntimeAPIDelegate::GetPlatformInfo(PlatformInfo* info) {
+ #if defined(OS_CHROMEOS)
+ info->os = api::runtime::PLATFORM_OS_CROS;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ info->os = api::runtime::PLATFORM_OS_LINUX;
+ #endif
+ return true;
diff --git a/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.cc b/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
new file mode 100644
index 000000000000..7333dad7d6bf
--- /dev/null
+++ b/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.cc
@@ -0,0 +1,20 @@
+--- extensions/shell/browser/shell_extensions_api_client.cc.orig 2019-09-09 21:55:17 UTC
++++ extensions/shell/browser/shell_extensions_api_client.cc
+@@ -16,7 +16,7 @@
+ #include "extensions/shell/browser/shell_virtual_keyboard_delegate.h"
+ #include "extensions/shell/browser/shell_web_view_guest_delegate.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "extensions/shell/browser/api/file_system/shell_file_system_delegate.h"
+ #endif
+
+@@ -52,7 +52,7 @@ ShellExtensionsAPIClient::CreateDisplayInfoProvider()
+ return std::make_unique<ShellDisplayInfoProvider>();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* ShellExtensionsAPIClient::GetFileSystemDelegate() {
+ if (!file_system_delegate_)
+ file_system_delegate_ = std::make_unique<ShellFileSystemDelegate>();
diff --git a/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.h b/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.h
new file mode 100644
index 000000000000..31f01db1d1d5
--- /dev/null
+++ b/www/iridium/files/patch-extensions_shell_browser_shell__extensions__api__client.h
@@ -0,0 +1,19 @@
+--- extensions/shell/browser/shell_extensions_api_client.h.orig 2019-09-09 21:55:17 UTC
++++ extensions/shell/browser/shell_extensions_api_client.h
+@@ -32,14 +32,14 @@ class ShellExtensionsAPIClient : public ExtensionsAPIC
+ content::BrowserContext* browser_context) const override;
+ std::unique_ptr<DisplayInfoProvider> CreateDisplayInfoProvider()
+ const override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ FileSystemDelegate* GetFileSystemDelegate() override;
+ #endif
+ MessagingDelegate* GetMessagingDelegate() override;
+ FeedbackPrivateDelegate* GetFeedbackPrivateDelegate() override;
+
+ private:
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ std::unique_ptr<FileSystemDelegate> file_system_delegate_;
+ #endif
+ std::unique_ptr<MessagingDelegate> messaging_delegate_;
diff --git a/www/iridium/files/patch-google__apis_gcm_engine_heartbeat__manager.cc b/www/iridium/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
new file mode 100644
index 000000000000..7a7e1a0192c2
--- /dev/null
+++ b/www/iridium/files/patch-google__apis_gcm_engine_heartbeat__manager.cc
@@ -0,0 +1,53 @@
+--- google_apis/gcm/engine/heartbeat_manager.cc.orig 2020-03-16 18:39:51 UTC
++++ google_apis/gcm/engine/heartbeat_manager.cc
+@@ -31,13 +31,13 @@ const int kMinClientHeartbeatIntervalMs = 1000 * 30;
+ // Minimum time spent sleeping before we force a new heartbeat.
+ const int kMinSuspendTimeMs = 1000 * 10; // 10 seconds.
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // The period at which to check if the heartbeat time has passed. Used to
+ // protect against platforms where the timer is delayed by the system being
+ // suspended. Only needed on linux because the other OSes provide a standard
+ // way to be notified of system suspend and resume events.
+ const int kHeartbeatMissedCheckMs = 1000 * 60 * 5; // 5 minutes.
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+
+ } // namespace
+
+@@ -191,7 +191,7 @@ void HeartbeatManager::RestartTimer() {
+ base::BindRepeating(&HeartbeatManager::OnHeartbeatTriggered,
+ weak_ptr_factory_.GetWeakPtr()));
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Windows, Mac, Android, iOS, and Chrome OS all provide a way to be notified
+ // when the system is suspending or resuming. The only one that does not is
+ // Linux so we need to poll to check for missed heartbeats.
+@@ -200,7 +200,7 @@ void HeartbeatManager::RestartTimer() {
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::CheckForMissedHeartbeat() {
+@@ -216,14 +216,14 @@ void HeartbeatManager::CheckForMissedHeartbeat() {
+ return;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Otherwise check again later.
+ io_task_runner_->PostDelayedTask(
+ FROM_HERE,
+ base::BindOnce(&HeartbeatManager::CheckForMissedHeartbeat,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kHeartbeatMissedCheckMs));
+-#endif // defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#endif // (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ }
+
+ void HeartbeatManager::UpdateHeartbeatInterval() {
diff --git a/www/iridium/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc b/www/iridium/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..3756044745e9
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/common/gpu_memory_buffer_support.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/command_buffer/common/gpu_memory_buffer_support.cc
+@@ -50,7 +50,7 @@ bool IsImageSizeValidForGpuMemoryBufferFormat(const gf
+ uint32_t GetPlatformSpecificTextureTarget() {
+ #if defined(OS_MACOSX)
+ return GL_TEXTURE_RECTANGLE_ARB;
+-#elif defined(OS_ANDROID) || defined(OS_LINUX)
++#elif defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ return GL_TEXTURE_EXTERNAL_OES;
+ #elif defined(OS_WIN) || defined(OS_FUCHSIA)
+ return GL_TEXTURE_2D;
+@@ -72,7 +72,7 @@ GPU_EXPORT uint32_t GetBufferTextureTarget(gfx::Buffer
+
+ GPU_EXPORT bool NativeBufferNeedsPlatformSpecificTextureTarget(
+ gfx::BufferFormat format) {
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ // Always use GL_TEXTURE_2D as the target for RGB textures.
+ // https://crbug.com/916728
+ if (format == gfx::BufferFormat::R_8 || format == gfx::BufferFormat::RG_88 ||
diff --git a/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
new file mode 100644
index 000000000000..04701c95d5c1
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.cc
@@ -0,0 +1,100 @@
+--- gpu/command_buffer/service/external_vk_image_backing.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/command_buffer/service/external_vk_image_backing.cc
+@@ -27,7 +27,7 @@
+ #include "ui/gl/buildflags.h"
+ #include "ui/gl/gl_context.h"
+
+-#if defined(OS_LINUX) && BUILDFLAG(USE_DAWN)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(USE_DAWN)
+ #include "gpu/command_buffer/service/external_vk_image_dawn_representation.h"
+ #endif
+
+@@ -35,7 +35,7 @@
+ #include "gpu/vulkan/fuchsia/vulkan_fuchsia_ext.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586
+ #endif
+
+@@ -630,7 +630,7 @@ std::unique_ptr<SharedImageRepresentationDawn>
+ ExternalVkImageBacking::ProduceDawn(SharedImageManager* manager,
+ MemoryTypeTracker* tracker,
+ WGPUDevice wgpuDevice) {
+-#if defined(OS_LINUX) && BUILDFLAG(USE_DAWN)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(USE_DAWN)
+ if (!wgpu_format_) {
+ DLOG(ERROR) << "Format not supported for Dawn";
+ return nullptr;
+@@ -653,14 +653,14 @@ ExternalVkImageBacking::ProduceDawn(SharedImageManager
+ return std::make_unique<ExternalVkImageDawnRepresentation>(
+ manager, this, tracker, wgpuDevice, wgpu_format_.value(), memory_fd,
+ image_info.fAlloc.fSize, memory_type_index_.value());
+-#else // !defined(OS_LINUX) || !BUILDFLAG(USE_DAWN)
++#else // (!defined(OS_LINUX) && !defined(OS_BSD)) || !BUILDFLAG(USE_DAWN)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+ #endif
+ }
+
+ GLuint ExternalVkImageBacking::ProduceGLTextureInternal() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ GrVkImageInfo image_info;
+ bool result = backend_texture_.getVkImageInfo(&image_info);
+ DCHECK(result);
+@@ -710,7 +710,7 @@ GLuint ExternalVkImageBacking::ProduceGLTextureInterna
+ #elif defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return 0;
+-#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA)
++#else // !defined(OS_LINUX) && !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ #error Unsupported OS
+ #endif
+ }
+@@ -724,7 +724,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ return nullptr;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!texture_) {
+ GLuint texture_service_id = ProduceGLTextureInternal();
+ if (!texture_service_id)
+@@ -755,7 +755,7 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageMa
+ #elif defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+-#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA)
++#else // !defined(OS_LINUX) && !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ #error Unsupported OS
+ #endif
+ }
+@@ -770,7 +770,7 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
+ return nullptr;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!texture_passthrough_) {
+ GLuint texture_service_id = ProduceGLTextureInternal();
+ if (!texture_service_id)
+@@ -790,7 +790,7 @@ ExternalVkImageBacking::ProduceGLTexturePassthrough(
+ #elif defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return nullptr;
+-#else // !defined(OS_LINUX) && !defined(OS_FUCHSIA)
++#else // !defined(OS_LINUX) && !defined(OS_BSD) && !defined(OS_FUCHSIA)
+ #error Unsupported OS
+ #endif
+ }
+@@ -808,7 +808,7 @@ ExternalVkImageBacking::ProduceSkia(
+ tracker);
+ }
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int ExternalVkImageBacking::GetMemoryFd(const GrVkImageInfo& image_info) {
+ VkMemoryGetFdInfoKHR get_fd_info;
+ get_fd_info.sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR;
diff --git a/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.h b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.h
new file mode 100644
index 000000000000..38283056309d
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__backing.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/service/external_vk_image_backing.h.orig 2020-03-16 18:40:32 UTC
++++ gpu/command_buffer/service/external_vk_image_backing.h
+@@ -132,7 +132,7 @@ class ExternalVkImageBacking final : public ClearTrack
+ base::Optional<WGPUTextureFormat> wgpu_format,
+ base::Optional<uint32_t> memory_type_index);
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Extract file descriptor from image
+ int GetMemoryFd(const GrVkImageInfo& image_info);
+ #endif
diff --git a/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
new file mode 100644
index 000000000000..b94f6df0650f
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_service_external__vk__image__gl__representation.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/service/external_vk_image_gl_representation.cc.orig 2020-02-03 21:53:31 UTC
++++ gpu/command_buffer/service/external_vk_image_gl_representation.cc
+@@ -179,7 +179,7 @@ GLuint ExternalVkImageGLRepresentationShared::ImportVk
+ #if defined(OS_FUCHSIA)
+ NOTIMPLEMENTED_LOG_ONCE();
+ return 0;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ if (handle.vk_handle_type() !=
+ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT) {
+ DLOG(ERROR) << "Importing semaphore handle of unexpected type:"
+@@ -194,7 +194,7 @@ GLuint ExternalVkImageGLRepresentationShared::ImportVk
+ fd.release());
+
+ return gl_semaphore;
+-#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX)
++#else // !defined(OS_FUCHSIA) && !defined(OS_LINUX) && !defined(OS_BSD)
+ #error Unsupported OS
+ #endif
+ }
diff --git a/www/iridium/files/patch-gpu_command__buffer_service_program__manager.cc b/www/iridium/files/patch-gpu_command__buffer_service_program__manager.cc
new file mode 100644
index 000000000000..9309b4a0c7ce
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_service_program__manager.cc
@@ -0,0 +1,14 @@
+--- gpu/command_buffer/service/program_manager.cc.orig 2019-03-11 22:00:59 UTC
++++ gpu/command_buffer/service/program_manager.cc
+@@ -30,7 +30,11 @@
+ #include "gpu/command_buffer/service/program_cache.h"
+ #include "gpu/command_buffer/service/shader_manager.h"
+ #include "gpu/config/gpu_preferences.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/progress_reporter.h"
+
diff --git a/www/iridium/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc b/www/iridium/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
new file mode 100644
index 000000000000..efb8db3c0dc3
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_tests_gl__copy__texture__CHROMIUM__unittest.cc
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc.orig 2020-03-16 18:39:51 UTC
++++ gpu/command_buffer/tests/gl_copy_texture_CHROMIUM_unittest.cc
+@@ -642,7 +642,7 @@ class GLCopyTextureCHROMIUMES3Test : public GLCopyText
+
+ bool ShouldSkipNorm16() const {
+ DCHECK(!ShouldSkipTest());
+-#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)) && \
++#if (defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)) && \
+ (defined(ARCH_CPU_X86) || defined(ARCH_CPU_X86_64))
+ // Make sure it's tested; it is safe to assume that the flag is always true
+ // on desktop.
diff --git a/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.cc b/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
new file mode 100644
index 000000000000..9867201456bf
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.cc
@@ -0,0 +1,20 @@
+--- gpu/command_buffer/tests/gl_test_utils.cc.orig 2020-03-16 18:39:51 UTC
++++ gpu/command_buffer/tests/gl_test_utils.cc
+@@ -23,7 +23,7 @@
+ #include "ui/gl/gl_version_info.h"
+ #include "ui/gl/init/gl_factory.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gl/gl_image_native_pixmap.h"
+ #endif
+
+@@ -445,7 +445,7 @@ void GpuCommandBufferTestEGL::RestoreGLDefault() {
+ window_system_binding_info_ = gl::GLWindowSystemBindingInfo();
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ scoped_refptr<gl::GLImageNativePixmap>
+ GpuCommandBufferTestEGL::CreateGLImageNativePixmap(gfx::BufferFormat format,
+ gfx::Size size,
diff --git a/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.h b/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.h
new file mode 100644
index 000000000000..2a43e73c2793
--- /dev/null
+++ b/www/iridium/files/patch-gpu_command__buffer_tests_gl__test__utils.h
@@ -0,0 +1,11 @@
+--- gpu/command_buffer/tests/gl_test_utils.h.orig 2019-10-21 19:06:35 UTC
++++ gpu/command_buffer/tests/gl_test_utils.h
+@@ -120,7 +120,7 @@ class GpuCommandBufferTestEGL {
+ return gfx::HasExtension(gl_extensions_, extension);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Create GLImageNativePixmap filled in with the given pixels.
+ scoped_refptr<gl::GLImageNativePixmap> CreateGLImageNativePixmap(
+ gfx::BufferFormat format,
diff --git a/www/iridium/files/patch-gpu_config_gpu__control__list.cc b/www/iridium/files/patch-gpu_config_gpu__control__list.cc
new file mode 100644
index 000000000000..e666e762ba6a
--- /dev/null
+++ b/www/iridium/files/patch-gpu_config_gpu__control__list.cc
@@ -0,0 +1,32 @@
+--- gpu/config/gpu_control_list.cc.orig 2020-02-03 21:52:47 UTC
++++ gpu/config/gpu_control_list.cc
+@@ -16,7 +16,11 @@
+ #include "base/values.h"
+ #include "build/build_config.h"
+ #include "gpu/config/gpu_util.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif // defined(OS_BSD)
+
+ namespace gpu {
+ namespace {
+@@ -213,7 +217,7 @@ bool GpuControlList::More::GLVersionInfoMismatch(
+ GpuControlList::GLType GpuControlList::More::GetDefaultGLType() {
+ #if defined(OS_CHROMEOS)
+ return kGLTypeGL;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kGLTypeGL;
+ #elif defined(OS_MACOSX)
+ return kGLTypeGL;
+@@ -713,7 +717,7 @@ GpuControlList::OsType GpuControlList::GetOsType() {
+ return kOsAndroid;
+ #elif defined(OS_FUCHSIA)
+ return kOsFuchsia;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return kOsLinux;
+ #elif defined(OS_MACOSX)
+ return kOsMacosx;
diff --git a/www/iridium/files/patch-gpu_config_gpu__test__config.cc b/www/iridium/files/patch-gpu_config_gpu__test__config.cc
new file mode 100644
index 000000000000..c5c6e5e16c76
--- /dev/null
+++ b/www/iridium/files/patch-gpu_config_gpu__test__config.cc
@@ -0,0 +1,11 @@
+--- gpu/config/gpu_test_config.cc.orig 2019-03-11 22:00:59 UTC
++++ gpu/config/gpu_test_config.cc
+@@ -25,7 +25,7 @@ namespace {
+ GPUTestConfig::OS GetCurrentOS() {
+ #if defined(OS_CHROMEOS)
+ return GPUTestConfig::kOsChromeOS;
+-#elif defined(OS_LINUX) || defined(OS_OPENBSD)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return GPUTestConfig::kOsLinux;
+ #elif defined(OS_WIN)
+ int32_t major_version = 0;
diff --git a/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc b/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
new file mode 100644
index 000000000000..d06bde69aa2d
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.cc
@@ -0,0 +1,47 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.cc
+@@ -14,7 +14,7 @@
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/client_native_pixmap_factory.h"
+ #include "ui/gfx/linux/client_native_pixmap_factory_dmabuf.h"
+ #endif
+@@ -24,7 +24,7 @@
+ #include "ui/ozone/public/ozone_platform.h"
+ #endif
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.h"
+ #endif
+
+@@ -42,7 +42,7 @@ namespace gpu {
+ GpuMemoryBufferSupport::GpuMemoryBufferSupport() {
+ #if defined(USE_OZONE)
+ client_native_pixmap_factory_ = ui::CreateClientNativePixmapFactoryOzone();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ client_native_pixmap_factory_.reset(
+ gfx::CreateClientNativePixmapFactoryDmabuf());
+ #endif
+@@ -56,7 +56,7 @@ GpuMemoryBufferSupport::GetNativeGpuMemoryBufferType()
+ return gfx::IO_SURFACE_BUFFER;
+ #elif defined(OS_ANDROID)
+ return gfx::ANDROID_HARDWARE_BUFFER;
+-#elif defined(OS_LINUX) || defined(USE_OZONE)
++#elif defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ return gfx::NATIVE_PIXMAP;
+ #elif defined(OS_WIN)
+ return gfx::DXGI_SHARED_HANDLE;
+@@ -181,7 +181,7 @@ GpuMemoryBufferSupport::CreateGpuMemoryBufferImplFromH
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ std::move(handle), size, format, usage, std::move(callback));
+ #endif
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(USE_OZONE) || defined(OS_BSD)
+ case gfx::NATIVE_PIXMAP:
+ return GpuMemoryBufferImplNativePixmap::CreateFromHandle(
+ client_native_pixmap_factory(), std::move(handle), size, format,
diff --git a/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h b/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
new file mode 100644
index 000000000000..dc652a126740
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_common_gpu__memory__buffer__support.h
@@ -0,0 +1,29 @@
+--- gpu/ipc/common/gpu_memory_buffer_support.h.orig 2019-12-16 21:50:48 UTC
++++ gpu/ipc/common/gpu_memory_buffer_support.h
+@@ -16,7 +16,7 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ namespace gfx {
+ class ClientNativePixmapFactory;
+ }
+@@ -38,7 +38,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ bool IsNativeGpuMemoryBufferConfigurationSupported(gfx::BufferFormat format,
+ gfx::BufferUsage usage);
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ gfx::ClientNativePixmapFactory* client_native_pixmap_factory() {
+ return client_native_pixmap_factory_.get();
+ }
+@@ -62,7 +62,7 @@ class GPU_EXPORT GpuMemoryBufferSupport {
+ GpuMemoryBufferImpl::DestructionCallback callback);
+
+ private:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ std::unique_ptr<gfx::ClientNativePixmapFactory> client_native_pixmap_factory_;
+ #endif
+
diff --git a/www/iridium/files/patch-gpu_ipc_service_gpu__init.cc b/www/iridium/files/patch-gpu_ipc_service_gpu__init.cc
new file mode 100644
index 000000000000..2dff9b7c455a
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_service_gpu__init.cc
@@ -0,0 +1,136 @@
+--- gpu/ipc/service/gpu_init.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/ipc/service/gpu_init.cc
+@@ -109,7 +109,7 @@ void InitializePlatformOverlaySettings(GPUInfo* gpu_in
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)) || defined(OS_BSD)
+ bool CanAccessNvidiaDeviceFile() {
+ bool res = true;
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+@@ -120,7 +120,7 @@ bool CanAccessNvidiaDeviceFile() {
+ }
+ return res;
+ }
+-#endif // OS_LINUX && !OS_CHROMEOS && !BUILDFLAG(IS_CHROMECAST)
++#endif // (OS_LINUX && !OS_CHROMEOS && !BUILDFLAG(IS_CHROMECAST)) || defined(OS_BSD)
+
+ class GpuWatchdogInit {
+ public:
+@@ -170,7 +170,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ gpu_info_.subpixel_font_rendering = true;
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (gpu_info_.gpu.vendor_id == 0x10de && // NVIDIA
+ gpu_info_.gpu.driver_vendor == "NVIDIA" && !CanAccessNvidiaDeviceFile())
+ return false;
+@@ -221,7 +221,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ delayed_watchdog_enable = true;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreSandbox is mainly for resource handling and not related to the GPU
+ // driver, it doesn't need the GPU watchdog. The loadLibrary may take long
+ // time that killing and restarting the GPU process will not help.
+@@ -266,7 +266,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ }
+
+ bool attempted_startsandbox = false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // On Chrome OS ARM Mali, GPU driver userspace creates threads when
+ // initializing a GL context, so start the sandbox early.
+ // TODO(zmo): Need to collect OS version before this.
+@@ -275,7 +275,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ watchdog_thread_.get(), &gpu_info_, gpu_preferences_);
+ attempted_startsandbox = true;
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) && !defined(OS_BSD)
+
+ base::TimeTicks before_initialize_one_off = base::TimeTicks::Now();
+
+@@ -299,14 +299,14 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ }
+ if (gl_initialized && use_swiftshader &&
+ gl::GetGLImplementation() != gl::kGLImplementationSwiftShaderGL) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
+ << "on Linux";
+ return false;
+ #else
+ gl::init::ShutdownGL(true);
+ gl_initialized = false;
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ }
+
+ if (!gl_initialized) {
+@@ -332,7 +332,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) && !defined(OS_BSD)
+ // The ContentSandboxHelper is currently the only one implementation of
+ // gpu::GpuSandboxHelper and it has no dependency. Except on Linux where
+ // VaapiWrapper checks the GL implementation to determine which display
+@@ -370,7 +370,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ command_line, gpu_feature_info_,
+ gpu_preferences_.disable_software_rasterizer, false);
+ if (use_swiftshader) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
+ << "on Linux";
+ return false;
+@@ -384,7 +384,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ << "failed";
+ return false;
+ }
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ }
+ } else { // use_swiftshader == true
+ switch (gpu_preferences_.use_vulkan) {
+@@ -440,7 +440,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -459,7 +459,7 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandL
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
+@@ -637,7 +637,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+
+ InitializePlatformOverlaySettings(&gpu_info_);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Driver may create a compatibility profile context when collect graphics
+ // information on Linux platform. Try to collect graphics information
+ // based on core profile context after disabling platform extensions.
+@@ -657,7 +657,7 @@ void GpuInit::InitializeInProcess(base::CommandLine* c
+ }
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ if (use_swiftshader) {
+ AdjustInfoToSwiftShader();
diff --git a/www/iridium/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc b/www/iridium/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
new file mode 100644
index 000000000000..af39329a6e9d
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_service_gpu__memory__buffer__factory.cc
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_memory_buffer_factory.cc.orig 2019-07-24 18:58:27 UTC
++++ gpu/ipc/service/gpu_memory_buffer_factory.cc
+@@ -12,7 +12,7 @@
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_io_surface.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ #include "gpu/ipc/service/gpu_memory_buffer_factory_native_pixmap.h"
+ #endif
+
+@@ -34,7 +34,7 @@ GpuMemoryBufferFactory::CreateNativeType(
+ return std::make_unique<GpuMemoryBufferFactoryIOSurface>();
+ #elif defined(OS_ANDROID)
+ return std::make_unique<GpuMemoryBufferFactoryAndroidHardwareBuffer>();
+-#elif defined(OS_LINUX) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return std::make_unique<GpuMemoryBufferFactoryNativePixmap>(
+ vulkan_context_provider);
+ #elif defined(OS_WIN)
diff --git a/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc b/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
new file mode 100644
index 000000000000..bcadfa7d9e7b
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.cc
@@ -0,0 +1,56 @@
+--- gpu/ipc/service/gpu_watchdog_thread.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.cc
+@@ -63,7 +63,7 @@ void GpuWatchdogTimeoutHistogram(GpuWatchdogTimeoutEve
+ base::UmaHistogramEnumeration("GPU.WatchdogThread.V1.Timeout", timeout_event);
+ }
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ const base::FilePath::CharType kTtyFilePath[] =
+ FILE_PATH_LITERAL("/sys/class/tty/tty0/active");
+ #endif
+@@ -81,7 +81,7 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
+ arm_cpu_time_(),
+ #endif
+ suspension_counter_(this)
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ ,
+ host_tty_(-1)
+ #endif
+@@ -103,7 +103,7 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
+ DCHECK(result);
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ tty_file_ = base::OpenFile(base::FilePath(kTtyFilePath), "r");
+ UpdateActiveTTY();
+ host_tty_ = active_tty_;
+@@ -251,7 +251,7 @@ GpuWatchdogThreadImplV1::~GpuWatchdogThreadImplV1() {
+
+ base::PowerMonitor::RemoveObserver(this);
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ if (tty_file_)
+ fclose(tty_file_);
+ #endif
+@@ -434,7 +434,7 @@ void GpuWatchdogThreadImplV1::DeliberatelyTerminateToR
+ return;
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ // Don't crash if we're not on the TTY of our host X11 server.
+ UpdateActiveTTY();
+ if (host_tty_ != -1 && active_tty_ != -1 && host_tty_ != active_tty_) {
+@@ -609,7 +609,7 @@ base::ThreadTicks GpuWatchdogThreadImplV1::GetWatchedT
+ }
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ void GpuWatchdogThreadImplV1::UpdateActiveTTY() {
+ last_active_tty_ = active_tty_;
+
diff --git a/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.h b/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
new file mode 100644
index 000000000000..e81e9e60d43d
--- /dev/null
+++ b/www/iridium/files/patch-gpu_ipc_service_gpu__watchdog__thread.h
@@ -0,0 +1,20 @@
+--- gpu/ipc/service/gpu_watchdog_thread.h.orig 2020-03-16 18:40:32 UTC
++++ gpu/ipc/service/gpu_watchdog_thread.h
+@@ -207,7 +207,7 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV1
+ base::ThreadTicks GetWatchedThreadTime();
+ #endif
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ void UpdateActiveTTY();
+ #endif
+
+@@ -265,7 +265,7 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV1
+ // whether GpuWatchdogThreadEvent::kGpuWatchdogStart has been recorded.
+ bool is_watchdog_start_histogram_recorded = false;
+
+-#if defined(USE_X11)
++#if defined(USE_X11) && !defined(OS_BSD)
+ FILE* tty_file_;
+ int host_tty_;
+ int active_tty_ = -1;
diff --git a/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.cc b/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.cc
new file mode 100644
index 000000000000..a6794bea5437
--- /dev/null
+++ b/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.cc
@@ -0,0 +1,32 @@
+--- gpu/vulkan/vulkan_function_pointers.cc.orig 2020-03-16 18:40:32 UTC
++++ gpu/vulkan/vulkan_function_pointers.cc
+@@ -782,7 +782,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ }
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ if (gfx::HasExtension(enabled_extensions,
+ VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME)) {
+ vkGetSemaphoreFdKHRFn = reinterpret_cast<PFN_vkGetSemaphoreFdKHR>(
+@@ -801,9 +801,9 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (gfx::HasExtension(enabled_extensions,
+ VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME)) {
+ vkGetMemoryFdKHRFn = reinterpret_cast<PFN_vkGetMemoryFdKHR>(
+@@ -823,7 +823,7 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointer
+ return false;
+ }
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ if (gfx::HasExtension(enabled_extensions,
diff --git a/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.h b/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.h
new file mode 100644
index 000000000000..5684a3f44924
--- /dev/null
+++ b/www/iridium/files/patch-gpu_vulkan_vulkan__function__pointers.h
@@ -0,0 +1,45 @@
+--- gpu/vulkan/vulkan_function_pointers.h.orig 2020-03-16 18:40:32 UTC
++++ gpu/vulkan/vulkan_function_pointers.h
+@@ -180,15 +180,15 @@ struct VulkanFunctionPointers {
+ vkGetAndroidHardwareBufferPropertiesANDROIDFn = nullptr;
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHRFn = nullptr;
+ PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHRFn = nullptr;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ PFN_vkGetMemoryFdKHR vkGetMemoryFdKHRFn = nullptr;
+ PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHRFn = nullptr;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ PFN_vkImportSemaphoreZirconHandleFUCHSIA
+@@ -378,18 +378,18 @@ struct VulkanFunctionPointers {
+ ->vkGetAndroidHardwareBufferPropertiesANDROIDFn
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #define vkGetSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkGetSemaphoreFdKHRFn
+ #define vkImportSemaphoreFdKHR \
+ gpu::GetVulkanFunctionPointers()->vkImportSemaphoreFdKHRFn
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #define vkGetMemoryFdKHR gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHRFn
+ #define vkGetMemoryFdPropertiesKHR \
+ gpu::GetVulkanFunctionPointers()->vkGetMemoryFdPropertiesKHRFn
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_FUCHSIA)
+ #define vkImportSemaphoreZirconHandleFUCHSIA \
diff --git a/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.cc b/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.cc
new file mode 100644
index 000000000000..86931c284dea
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.cc
@@ -0,0 +1,29 @@
+--- headless/lib/browser/headless_content_browser_client.cc.orig 2020-03-16 18:39:51 UTC
++++ headless/lib/browser/headless_content_browser_client.cc
+@@ -157,7 +157,7 @@ HeadlessContentBrowserClient::GetGeneratedCodeCacheSet
+ return content::GeneratedCodeCacheSettings(true, 0, context->GetPath());
+ }
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void HeadlessContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -168,7 +168,7 @@ void HeadlessContentBrowserClient::GetAdditionalMapped
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(HEADLESS_USE_BREAKPAD)
+ }
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ void HeadlessContentBrowserClient::AppendExtraCommandLineSwitches(
+ base::CommandLine* command_line,
+@@ -231,7 +231,7 @@ void HeadlessContentBrowserClient::AppendExtraCommandL
+ process_type, child_process_id);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Processes may only query perf_event_open with the BPF sandbox disabled.
+ if (old_command_line.HasSwitch(::switches::kEnableThreadInstructionCount) &&
+ old_command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
diff --git a/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.h b/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.h
new file mode 100644
index 000000000000..f29e51b1a4f7
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_browser_headless__content__browser__client.h
@@ -0,0 +1,11 @@
+--- headless/lib/browser/headless_content_browser_client.h.orig 2020-03-16 18:39:51 UTC
++++ headless/lib/browser/headless_content_browser_client.h
+@@ -29,7 +29,7 @@ class HeadlessContentBrowserClient : public content::C
+ override;
+ content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
+ content::BrowserContext* context) override;
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
diff --git a/www/iridium/files/patch-headless_lib_browser_headless__request__context__manager.cc b/www/iridium/files/patch-headless_lib_browser_headless__request__context__manager.cc
new file mode 100644
index 000000000000..dbae7f502c62
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_browser_headless__request__context__manager.cc
@@ -0,0 +1,29 @@
+--- headless/lib/browser/headless_request_context_manager.cc.orig 2019-12-16 21:51:26 UTC
++++ headless/lib/browser/headless_request_context_manager.cc
+@@ -26,7 +26,7 @@ namespace headless {
+
+ namespace {
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ static char kProductName[] = "HeadlessChrome";
+ #endif
+
+@@ -56,7 +56,7 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTraffic
+ return traffic_annotation;
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ ::network::mojom::CryptConfigPtr BuildCryptConfigOnce(
+ const base::FilePath& user_data_path) {
+ static bool done_once = false;
+@@ -197,7 +197,7 @@ HeadlessRequestContextManager::HeadlessRequestContextM
+ proxy_config_monitor_ = std::make_unique<HeadlessProxyConfigMonitor>(
+ base::ThreadTaskRunnerHandle::Get());
+ }
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ auto crypt_config = BuildCryptConfigOnce(user_data_path_);
+ if (crypt_config)
+ content::GetNetworkService()->SetCryptConfig(std::move(crypt_config));
diff --git a/www/iridium/files/patch-headless_lib_headless__content__main__delegate.cc b/www/iridium/files/patch-headless_lib_headless__content__main__delegate.cc
new file mode 100644
index 000000000000..b6d23a82eac8
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_headless__content__main__delegate.cc
@@ -0,0 +1,20 @@
+--- headless/lib/headless_content_main_delegate.cc.orig 2020-03-16 18:39:51 UTC
++++ headless/lib/headless_content_main_delegate.cc
+@@ -405,7 +405,7 @@ int HeadlessContentMainDelegate::RunProcess(
+ }
+ #endif // !defined(CHROME_MULTIPLE_DLL_CHILD)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void SIGTERMProfilingShutdown(int signal) {
+ content::Profiling::Stop();
+ struct sigaction sigact;
+@@ -440,7 +440,7 @@ void HeadlessContentMainDelegate::ZygoteForked() {
+ breakpad::InitCrashReporter(process_type);
+ #endif
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ HeadlessContentMainDelegate* HeadlessContentMainDelegate::GetInstance() {
diff --git a/www/iridium/files/patch-headless_lib_headless__content__main__delegate.h b/www/iridium/files/patch-headless_lib_headless__content__main__delegate.h
new file mode 100644
index 000000000000..ea587103f60e
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_headless__content__main__delegate.h
@@ -0,0 +1,11 @@
+--- headless/lib/headless_content_main_delegate.h.orig 2020-03-16 18:39:51 UTC
++++ headless/lib/headless_content_main_delegate.h
+@@ -60,7 +60,7 @@ class HEADLESS_EXPORT HeadlessContentMainDelegate
+
+ HeadlessBrowserImpl* browser() const { return browser_.get(); }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void ZygoteForked() override;
+ #endif
+
diff --git a/www/iridium/files/patch-headless_lib_headless__macros.h b/www/iridium/files/patch-headless_lib_headless__macros.h
new file mode 100644
index 000000000000..0e99c3066d6d
--- /dev/null
+++ b/www/iridium/files/patch-headless_lib_headless__macros.h
@@ -0,0 +1,13 @@
+--- headless/lib/headless_macros.h.orig 2019-03-11 22:00:59 UTC
++++ headless/lib/headless_macros.h
+@@ -7,8 +7,8 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+ #define HEADLESS_USE_BREAKPAD
+-#endif // defined(OS_POSIX) && !defined(OS_MACOSX)
++#endif // defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD)
+
+ #endif // HEADLESS_LIB_HEADLESS_MACROS_H_
diff --git a/www/iridium/files/patch-ipc_ipc__channel.h b/www/iridium/files/patch-ipc_ipc__channel.h
new file mode 100644
index 000000000000..81baee2eca8d
--- /dev/null
+++ b/www/iridium/files/patch-ipc_ipc__channel.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_channel.h.orig 2020-02-03 21:53:32 UTC
++++ ipc/ipc_channel.h
+@@ -282,7 +282,7 @@ class COMPONENT_EXPORT(IPC) Channel : public Sender {
+ static std::string GenerateUniqueRandomChannelID();
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sandboxed processes live in a PID namespace, so when sending the IPC hello
+ // message from client to server we need to send the PID from the global
+ // PID namespace.
diff --git a/www/iridium/files/patch-ipc_ipc__channel__common.cc b/www/iridium/files/patch-ipc_ipc__channel__common.cc
new file mode 100644
index 000000000000..9a59e5cfaff6
--- /dev/null
+++ b/www/iridium/files/patch-ipc_ipc__channel__common.cc
@@ -0,0 +1,20 @@
+--- ipc/ipc_channel_common.cc.orig 2020-02-03 21:52:47 UTC
++++ ipc/ipc_channel_common.cc
+@@ -10,7 +10,7 @@
+
+ namespace IPC {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+ int g_global_pid = 0;
+@@ -26,7 +26,7 @@ int Channel::GetGlobalPid() {
+ return g_global_pid;
+ }
+
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ std::unique_ptr<Channel> Channel::CreateClient(
diff --git a/www/iridium/files/patch-ipc_ipc__channel__mojo.cc b/www/iridium/files/patch-ipc_ipc__channel__mojo.cc
new file mode 100644
index 000000000000..54e779282f74
--- /dev/null
+++ b/www/iridium/files/patch-ipc_ipc__channel__mojo.cc
@@ -0,0 +1,15 @@
+--- ipc/ipc_channel_mojo.cc.orig 2020-02-03 21:52:47 UTC
++++ ipc/ipc_channel_mojo.cc
+@@ -74,10 +74,10 @@ class MojoChannelFactory : public ChannelFactory {
+ };
+
+ base::ProcessId GetSelfPID() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (int global_pid = Channel::GetGlobalPid())
+ return global_pid;
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+ #if defined(OS_NACL)
+ return -1;
+ #else
diff --git a/www/iridium/files/patch-ipc_ipc__message__utils.cc b/www/iridium/files/patch-ipc_ipc__message__utils.cc
new file mode 100644
index 000000000000..00d57043fb58
--- /dev/null
+++ b/www/iridium/files/patch-ipc_ipc__message__utils.cc
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.cc.orig 2019-07-24 18:58:29 UTC
++++ ipc/ipc_message_utils.cc
+@@ -355,7 +355,7 @@ void ParamTraits<unsigned int>::Log(const param_type&
+ l->append(base::NumberToString(p));
+ }
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ void ParamTraits<long>::Log(const param_type& p, std::string* l) {
+ l->append(base::NumberToString(p));
diff --git a/www/iridium/files/patch-ipc_ipc__message__utils.h b/www/iridium/files/patch-ipc_ipc__message__utils.h
new file mode 100644
index 000000000000..39fc150c1a08
--- /dev/null
+++ b/www/iridium/files/patch-ipc_ipc__message__utils.h
@@ -0,0 +1,11 @@
+--- ipc/ipc_message_utils.h.orig 2020-02-03 21:53:32 UTC
++++ ipc/ipc_message_utils.h
+@@ -209,7 +209,7 @@ struct ParamTraits<unsigned int> {
+ // 3) Android 64 bit and Fuchsia also have int64_t typedef'd to long.
+ // Since we want to support Android 32<>64 bit IPC, as long as we don't have
+ // these traits for 32 bit ARM then that'll catch any errors.
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ (defined(OS_ANDROID) && defined(ARCH_CPU_64_BITS))
+ template <>
+ struct ParamTraits<long> {
diff --git a/www/iridium/files/patch-media_BUILD.gn b/www/iridium/files/patch-media_BUILD.gn
new file mode 100644
index 000000000000..2e46acb021a0
--- /dev/null
+++ b/www/iridium/files/patch-media_BUILD.gn
@@ -0,0 +1,12 @@
+--- media/BUILD.gn.orig 2020-03-16 18:40:33 UTC
++++ media/BUILD.gn
+@@ -63,6 +63,9 @@ config("media_config") {
+ defines += [ "DLOPEN_PULSEAUDIO" ]
+ }
+ }
++ if (use_sndio) {
++ defines += [ "USE_SNDIO" ]
++ }
+ if (use_cras) {
+ defines += [ "USE_CRAS" ]
+ }
diff --git a/www/iridium/files/patch-media_audio_BUILD.gn b/www/iridium/files/patch-media_audio_BUILD.gn
new file mode 100644
index 000000000000..a37b99f54c9c
--- /dev/null
+++ b/www/iridium/files/patch-media_audio_BUILD.gn
@@ -0,0 +1,22 @@
+--- media/audio/BUILD.gn.orig 2020-03-16 18:40:33 UTC
++++ media/audio/BUILD.gn
+@@ -232,8 +232,18 @@ source_set("audio") {
+ ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !use_sndio) {
+ sources += [ "linux/audio_manager_linux.cc" ]
++ }
++ if (use_sndio) {
++ libs += [ "sndio" ]
++ sources += [
++ "openbsd/audio_manager_openbsd.cc",
++ "sndio/sndio_input.cc",
++ "sndio/sndio_input.h",
++ "sndio/sndio_output.cc",
++ "sndio/sndio_output.h"
++ ]
+ }
+
+ if (use_alsa) {
diff --git a/www/iridium/files/patch-media_audio_alsa_audio__manager__alsa.cc b/www/iridium/files/patch-media_audio_alsa_audio__manager__alsa.cc
new file mode 100644
index 000000000000..313dd1df12eb
--- /dev/null
+++ b/www/iridium/files/patch-media_audio_alsa_audio__manager__alsa.cc
@@ -0,0 +1,54 @@
+--- media/audio/alsa/audio_manager_alsa.cc.orig 2019-04-30 22:22:52 UTC
++++ media/audio/alsa/audio_manager_alsa.cc
+@@ -92,7 +92,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ int card = -1;
+
+ // Loop through the sound cards to get ALSA device hints.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && card >= 0) {
++#endif
+ void** hints = NULL;
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+@@ -104,7 +106,9 @@ void AudioManagerAlsa::GetAlsaAudioDevices(StreamType
+ DLOG(WARNING) << "GetAlsaAudioDevices: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+ }
+
+ void AudioManagerAlsa::GetAlsaDevicesInfo(AudioManagerAlsa::StreamType type,
+@@ -187,7 +191,11 @@ bool AudioManagerAlsa::IsAlsaDeviceAvailable(
+ // goes through software conversion if needed (e.g. incompatible
+ // sample rate).
+ // TODO(joi): Should we prefer "hw" instead?
++#ifdef OS_LINUX
+ static const char kDeviceTypeDesired[] = "plughw";
++#else
++ static const char kDeviceTypeDesired[] = "plug";
++#endif
+ return strncmp(kDeviceTypeDesired, device_name,
+ base::size(kDeviceTypeDesired) - 1) == 0;
+ }
+@@ -209,7 +217,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ // Loop through the sound cards.
+ // Don't use snd_device_name_hint(-1,..) since there is a access violation
+ // inside this ALSA API with libasound.so.2.0.0.
++#if defined(OS_LINUX)
+ while (!wrapper_->CardNext(&card) && (card >= 0) && !has_device) {
++#endif
+ int error = wrapper_->DeviceNameHint(card, kPcmInterfaceName, &hints);
+ if (!error) {
+ for (void** hint_iter = hints; *hint_iter != NULL; hint_iter++) {
+@@ -233,7 +243,9 @@ bool AudioManagerAlsa::HasAnyAlsaAudioDevice(
+ DLOG(WARNING) << "HasAnyAudioDevice: unable to get device hints: "
+ << wrapper_->StrError(error);
+ }
++#if defined(OS_LINUX)
+ }
++#endif
+
+ return has_device;
+ }
diff --git a/www/iridium/files/patch-media_audio_audio__input__device.cc b/www/iridium/files/patch-media_audio_audio__input__device.cc
new file mode 100644
index 000000000000..f96c5ac063c2
--- /dev/null
+++ b/www/iridium/files/patch-media_audio_audio__input__device.cc
@@ -0,0 +1,11 @@
+--- media/audio/audio_input_device.cc.orig 2019-03-17 21:43:40 UTC
++++ media/audio/audio_input_device.cc
+@@ -248,7 +248,7 @@ void AudioInputDevice::OnStreamCreated(
+ // also a risk of false positives if we are suspending when starting the stream
+ // here. See comments in AliveChecker and PowerObserverHelper for details and
+ // todos.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const bool stop_at_first_alive_notification = true;
+ const bool pause_check_during_suspend = false;
+ #else
diff --git a/www/iridium/files/patch-media_audio_audio__manager.cc b/www/iridium/files/patch-media_audio_audio__manager.cc
new file mode 100644
index 000000000000..5720491adf54
--- /dev/null
+++ b/www/iridium/files/patch-media_audio_audio__manager.cc
@@ -0,0 +1,29 @@
+--- media/audio/audio_manager.cc.orig 2019-03-11 22:00:59 UTC
++++ media/audio/audio_manager.cc
+@@ -48,7 +48,7 @@ class AudioManagerHelper {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ void set_app_name(const std::string& app_name) { app_name_ = app_name; }
+ const std::string& app_name() const { return app_name_; }
+ #endif
+@@ -59,7 +59,7 @@ class AudioManagerHelper {
+ std::unique_ptr<base::win::ScopedCOMInitializer> com_initializer_for_testing_;
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ std::string app_name_;
+ #endif
+
+@@ -128,7 +128,7 @@ std::unique_ptr<AudioManager> AudioManager::CreateForT
+ return Create(std::move(audio_thread), GetHelper()->fake_log_factory());
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ void AudioManager::SetGlobalAppName(const std::string& app_name) {
+ GetHelper()->set_app_name(app_name);
diff --git a/www/iridium/files/patch-media_audio_audio__manager.h b/www/iridium/files/patch-media_audio_audio__manager.h
new file mode 100644
index 000000000000..817c3d812b8e
--- /dev/null
+++ b/www/iridium/files/patch-media_audio_audio__manager.h
@@ -0,0 +1,11 @@
+--- media/audio/audio_manager.h.orig 2019-03-11 22:00:59 UTC
++++ media/audio/audio_manager.h
+@@ -60,7 +60,7 @@ class MEDIA_EXPORT AudioManager {
+ static std::unique_ptr<AudioManager> CreateForTesting(
+ std::unique_ptr<AudioThread> audio_thread);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Sets the name of the audio source as seen by external apps. Only actually
+ // used with PulseAudio as of this writing.
+ static void SetGlobalAppName(const std::string& app_name);
diff --git a/www/iridium/files/patch-media_base_audio__latency.cc b/www/iridium/files/patch-media_base_audio__latency.cc
new file mode 100644
index 000000000000..d2289293450b
--- /dev/null
+++ b/www/iridium/files/patch-media_base_audio__latency.cc
@@ -0,0 +1,11 @@
+--- media/base/audio_latency.cc.orig 2019-03-11 22:00:59 UTC
++++ media/base/audio_latency.cc
+@@ -106,7 +106,7 @@ int AudioLatency::GetRtcBufferSize(int sample_rate, in
+ return frames_per_buffer;
+ }
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // On Linux, MacOS and Fuchsia, the low level IO implementations on the
+ // browser side supports all buffer size the clients want. We use the native
+ // peer connection buffer size (10ms) to achieve best possible performance.
diff --git a/www/iridium/files/patch-media_base_media__switches.cc b/www/iridium/files/patch-media_base_media__switches.cc
new file mode 100644
index 000000000000..ed61b97adc9d
--- /dev/null
+++ b/www/iridium/files/patch-media_base_media__switches.cc
@@ -0,0 +1,11 @@
+--- media/base/media_switches.cc.orig 2020-03-17 10:01:08 UTC
++++ media/base/media_switches.cc
+@@ -331,7 +331,7 @@ const base::Feature kFallbackAfterDecodeError{"Fallbac
+ const base::Feature kGlobalMediaControls {
+ "GlobalMediaControls",
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+ base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/www/iridium/files/patch-media_base_scopedfd__helper.h b/www/iridium/files/patch-media_base_scopedfd__helper.h
new file mode 100644
index 000000000000..5b097ec108c3
--- /dev/null
+++ b/www/iridium/files/patch-media_base_scopedfd__helper.h
@@ -0,0 +1,23 @@
+--- media/base/scopedfd_helper.h.orig 2019-09-09 21:55:20 UTC
++++ media/base/scopedfd_helper.h
+@@ -11,17 +11,17 @@
+ namespace media {
+
+ // Theoretically, we can test on defined(OS_POSIX) || defined(OS_FUCHSIA), but
+-// since the only current user is V4L2 we are limiting the scope to OS_LINUX so
++// since the only current user is V4L2 we are limiting the scope to OS_LINUX || OS_BSD so
+ // the binary size does not inflate on non-using systems. Feel free to adapt
+ // this and BUILD.gn as our needs evolve.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+
+ // Return a new vector containing duplicates of |fds|, or PCHECKs in case of an
+ // error.
+ MEDIA_EXPORT std::vector<base::ScopedFD> DuplicateFDs(
+ const std::vector<base::ScopedFD>& fds);
+
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ } // namespace media
+
diff --git a/www/iridium/files/patch-media_base_video__frame.cc b/www/iridium/files/patch-media_base_video__frame.cc
new file mode 100644
index 000000000000..430d0f3c5bb5
--- /dev/null
+++ b/www/iridium/files/patch-media_base_video__frame.cc
@@ -0,0 +1,74 @@
+--- media/base/video_frame.cc.orig 2019-12-16 21:50:49 UTC
++++ media/base/video_frame.cc
+@@ -57,7 +57,7 @@ std::string VideoFrame::StorageTypeToString(
+ return "OWNED_MEMORY";
+ case VideoFrame::STORAGE_SHMEM:
+ return "SHMEM";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ case VideoFrame::STORAGE_DMABUFS:
+ return "DMABUFS";
+ #endif
+@@ -74,7 +74,7 @@ std::string VideoFrame::StorageTypeToString(
+ // static
+ bool VideoFrame::IsStorageTypeMappable(VideoFrame::StorageType storage_type) {
+ return
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This is not strictly needed but makes explicit that, at VideoFrame
+ // level, DmaBufs are not mappable from userspace.
+ storage_type != VideoFrame::STORAGE_DMABUFS &&
+@@ -257,7 +257,7 @@ static base::Optional<VideoFrameLayout> GetDefaultLayo
+ return VideoFrameLayout::CreateWithPlanes(format, coded_size, planes);
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // This class allows us to embed a vector<ScopedFD> into a scoped_refptr, and
+ // thus to have several VideoFrames share the same set of DMABUF FDs.
+ class VideoFrame::DmabufHolder
+@@ -275,7 +275,7 @@ class VideoFrame::DmabufHolder
+ friend class base::RefCountedThreadSafe<DmabufHolder>;
+ ~DmabufHolder() = default;
+ };
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // static
+ bool VideoFrame::IsValidConfig(VideoPixelFormat format,
+@@ -588,7 +588,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapExternalGpuM
+ return frame;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // static
+ scoped_refptr<VideoFrame> VideoFrame::WrapExternalDmabufs(
+ const VideoFrameLayout& layout,
+@@ -724,7 +724,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
+ }
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(frame->dmabuf_fds_);
+ // If there are any |dmabuf_fds_| plugged in, we should refer them too.
+ wrapping_frame->dmabuf_fds_ = frame->dmabuf_fds_;
+@@ -1050,7 +1050,7 @@ VideoFrame::mailbox_holder(size_t texture_index) const
+ : mailbox_holders_[texture_index];
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const std::vector<base::ScopedFD>& VideoFrame::DmabufFds() const {
+ DCHECK_EQ(storage_type_, STORAGE_DMABUFS);
+
+@@ -1133,7 +1133,7 @@ VideoFrame::VideoFrame(const VideoFrameLayout& layout,
+ storage_type_(storage_type),
+ visible_rect_(Intersection(visible_rect, gfx::Rect(layout.coded_size()))),
+ natural_size_(natural_size),
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ dmabuf_fds_(base::MakeRefCounted<DmabufHolder>()),
+ #endif
+ timestamp_(timestamp),
diff --git a/www/iridium/files/patch-media_base_video__frame.h b/www/iridium/files/patch-media_base_video__frame.h
new file mode 100644
index 000000000000..d37ffac67837
--- /dev/null
+++ b/www/iridium/files/patch-media_base_video__frame.h
@@ -0,0 +1,50 @@
+--- media/base/video_frame.h.orig 2020-03-16 18:40:33 UTC
++++ media/base/video_frame.h
+@@ -39,9 +39,9 @@
+ #include "base/mac/scoped_cftyperef.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/scoped_file.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace gfx {
+ class GpuMemoryBuffer;
+@@ -80,7 +80,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ STORAGE_UNOWNED_MEMORY = 2, // External, non owned data pointers.
+ STORAGE_OWNED_MEMORY = 3, // VideoFrame has allocated its own data buffer.
+ STORAGE_SHMEM = 4, // Backed by unsafe (writable) shared memory.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(mcasas): Consider turning this type into STORAGE_NATIVE
+ // based on the idea of using this same enum value for both DMA
+ // buffers on Linux and CVPixelBuffers on Mac (which currently use
+@@ -245,7 +245,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ ReleaseMailboxCB mailbox_holder_release_cb,
+ base::TimeDelta timestamp);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Wraps provided dmabufs
+ // (https://www.kernel.org/doc/html/latest/driver-api/dma-buf.html) with a
+ // VideoFrame. The frame will take ownership of |dmabuf_fds|, and will
+@@ -480,7 +480,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // mailbox, the caller must wait for the included sync point.
+ const gpu::MailboxHolder& mailbox_holder(size_t texture_index) const;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Returns a vector containing the backing DmaBufs for this frame. The number
+ // of returned DmaBufs will be equal or less than the number of planes of
+ // the frame. If there are less, this means that the last FD contains the
+@@ -662,7 +662,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCounte
+ // GPU memory buffer, if this frame is STORAGE_GPU_MEMORY_BUFFER.
+ std::unique_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ class DmabufHolder;
+
+ // Dmabufs for the frame, used when storage is STORAGE_DMABUFS. Size is either
diff --git a/www/iridium/files/patch-media_capture_video_create__video__capture__device__factory.cc b/www/iridium/files/patch-media_capture_video_create__video__capture__device__factory.cc
new file mode 100644
index 000000000000..ab3b5a40d144
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_create__video__capture__device__factory.cc
@@ -0,0 +1,20 @@
+--- media/capture/video/create_video_capture_device_factory.cc.orig 2019-10-21 19:06:36 UTC
++++ media/capture/video/create_video_capture_device_factory.cc
+@@ -10,7 +10,7 @@
+ #include "media/capture/video/fake_video_capture_device_factory.h"
+ #include "media/capture/video/file_video_capture_device_factory.h"
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ #include "media/capture/video/linux/video_capture_device_factory_linux.h"
+ #elif defined(OS_CHROMEOS)
+ #include "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
+@@ -82,7 +82,7 @@ CreateChromeOSVideoCaptureDeviceFactory(
+ std::unique_ptr<VideoCaptureDeviceFactory>
+ CreatePlatformSpecificVideoCaptureDeviceFactory(
+ scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return std::make_unique<VideoCaptureDeviceFactoryLinux>(ui_task_runner);
+ #elif defined(OS_CHROMEOS)
+ return CreateChromeOSVideoCaptureDeviceFactory(ui_task_runner, {});
diff --git a/www/iridium/files/patch-media_capture_video_fake__video__capture__device__factory.cc b/www/iridium/files/patch-media_capture_video_fake__video__capture__device__factory.cc
new file mode 100644
index 000000000000..76d95eebd304
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_fake__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/fake_video_capture_device_factory.cc.orig 2019-12-16 21:50:49 UTC
++++ media/capture/video/fake_video_capture_device_factory.cc
+@@ -208,7 +208,7 @@ void FakeVideoCaptureDeviceFactory::GetDeviceDescripto
+ for (const auto& entry : devices_config_) {
+ device_descriptors->emplace_back(
+ base::StringPrintf("fake_device_%d", entry_index), entry.device_id,
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #elif defined(OS_MACOSX)
+ VideoCaptureApi::MACOSX_AVFOUNDATION
diff --git a/www/iridium/files/patch-media_capture_video_file__video__capture__device__factory.cc b/www/iridium/files/patch-media_capture_video_file__video__capture__device__factory.cc
new file mode 100644
index 000000000000..b1cc42128fa5
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_file__video__capture__device__factory.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/file_video_capture_device_factory.cc.orig 2019-04-30 22:22:52 UTC
++++ media/capture/video/file_video_capture_device_factory.cc
+@@ -54,7 +54,7 @@ void FileVideoCaptureDeviceFactory::GetDeviceDescripto
+ #elif defined(OS_MACOSX)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::MACOSX_AVFOUNDATION
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ command_line_file_path.value(), kFileVideoCaptureDeviceName,
+ VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE
+ #else
diff --git a/www/iridium/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc b/www/iridium/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
new file mode 100644
index 000000000000..3de31922be93
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_linux_v4l2__capture__delegate.cc
@@ -0,0 +1,26 @@
+--- media/capture/video/linux/v4l2_capture_delegate.cc.orig 2019-03-11 22:00:59 UTC
++++ media/capture/video/linux/v4l2_capture_delegate.cc
+@@ -4,8 +4,10 @@
+
+ #include "media/capture/video/linux/v4l2_capture_delegate.h"
+
++#if !defined(OS_BSD)
+ #include <linux/version.h>
+ #include <linux/videodev2.h>
++#endif
+ #include <poll.h>
+ #include <sys/fcntl.h>
+ #include <sys/ioctl.h>
+@@ -24,10 +26,10 @@
+
+ using media::mojom::MeteringMode;
+
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
++// #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
+ // 16 bit depth, Realsense F200.
+ #define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
+-#endif
++// #endif
+
+ // TODO(aleksandar.stojiljkovic): Wrap this with kernel version check once the
+ // format is introduced to kernel.
diff --git a/www/iridium/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc b/www/iridium/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
new file mode 100644
index 000000000000..7dcb8b174ae1
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_video__capture__buffer__pool__impl.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_buffer_pool_impl.cc.orig 2019-12-16 21:50:49 UTC
++++ media/capture/video/video_capture_buffer_pool_impl.cc
+@@ -59,7 +59,7 @@ VideoCaptureBufferPoolImpl::CreateSharedMemoryViaRawFi
+ int buffer_id) {
+ // This requires platforms where base::SharedMemoryHandle is backed by a
+ // file descriptor.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::AutoLock lock(lock_);
+
+ VideoCaptureBufferTracker* tracker = GetTracker(buffer_id);
diff --git a/www/iridium/files/patch-media_capture_video_video__capture__device__client.cc b/www/iridium/files/patch-media_capture_video_video__capture__device__client.cc
new file mode 100644
index 000000000000..b36124fab651
--- /dev/null
+++ b/www/iridium/files/patch-media_capture_video_video__capture__device__client.cc
@@ -0,0 +1,11 @@
+--- media/capture/video/video_capture_device_client.cc.orig 2019-12-16 21:50:49 UTC
++++ media/capture/video/video_capture_device_client.cc
+@@ -297,7 +297,7 @@ void VideoCaptureDeviceClient::OnIncomingCapturedData(
+ // see http://linuxtv.org/downloads/v4l-dvb-apis/packed-rgb.html.
+ // Windows RGB24 defines blue at lowest byte,
+ // see https://msdn.microsoft.com/en-us/library/windows/desktop/dd407253
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ fourcc_format = libyuv::FOURCC_RAW;
+ #elif defined(OS_WIN)
+ fourcc_format = libyuv::FOURCC_24BG;
diff --git a/www/iridium/files/patch-media_filters_vp9__parser.h b/www/iridium/files/patch-media_filters_vp9__parser.h
new file mode 100644
index 000000000000..5e1f90d692b3
--- /dev/null
+++ b/www/iridium/files/patch-media_filters_vp9__parser.h
@@ -0,0 +1,10 @@
+--- media/filters/vp9_parser.h.orig 2019-03-11 22:00:59 UTC
++++ media/filters/vp9_parser.h
+@@ -14,6 +14,7 @@
+
+ #include <stddef.h>
+ #include <stdint.h>
++#include <unistd.h>
+ #include <sys/types.h>
+
+ #include <memory>
diff --git a/www/iridium/files/patch-media_formats_common_offset__byte__queue.cc b/www/iridium/files/patch-media_formats_common_offset__byte__queue.cc
new file mode 100644
index 000000000000..38994431f986
--- /dev/null
+++ b/www/iridium/files/patch-media_formats_common_offset__byte__queue.cc
@@ -0,0 +1,20 @@
+--- media/formats/common/offset_byte_queue.cc.orig 2019-03-11 22:00:59 UTC
++++ media/formats/common/offset_byte_queue.cc
+@@ -46,13 +46,13 @@ void OffsetByteQueue::PeekAt(int64_t offset, const uin
+ *size = tail() - offset;
+ }
+
+-bool OffsetByteQueue::Trim(int64_t max_offset) {
+- if (max_offset < head_) return true;
+- if (max_offset > tail()) {
++bool OffsetByteQueue::Trim(int64_t _max_offset) {
++ if (_max_offset < head_) return true;
++ if (_max_offset > tail()) {
+ Pop(size_);
+ return false;
+ }
+- Pop(max_offset - head_);
++ Pop(_max_offset - head_);
+ return true;
+ }
+
diff --git a/www/iridium/files/patch-media_formats_common_offset__byte__queue.h b/www/iridium/files/patch-media_formats_common_offset__byte__queue.h
new file mode 100644
index 000000000000..659dd9dfe9b3
--- /dev/null
+++ b/www/iridium/files/patch-media_formats_common_offset__byte__queue.h
@@ -0,0 +1,22 @@
+--- media/formats/common/offset_byte_queue.h.orig 2019-03-11 22:00:59 UTC
++++ media/formats/common/offset_byte_queue.h
+@@ -36,15 +36,15 @@ class MEDIA_EXPORT OffsetByteQueue {
+ // a null |buf| and a |size| of zero.
+ void PeekAt(int64_t offset, const uint8_t** buf, int* size);
+
+- // Marks the bytes up to (but not including) |max_offset| as ready for
++ // Marks the bytes up to (but not including) |_max_offset| as ready for
+ // deletion. This is relatively inexpensive, but will not necessarily reduce
+ // the resident buffer size right away (or ever).
+ //
+ // Returns true if the full range of bytes were successfully trimmed,
+- // including the case where |max_offset| is less than the current head.
+- // Returns false if |max_offset| > tail() (although all bytes currently
++ // including the case where |_max_offset| is less than the current head.
++ // Returns false if |_max_offset| > tail() (although all bytes currently
+ // buffered are still cleared).
+- bool Trim(int64_t max_offset);
++ bool Trim(int64_t _max_offset);
+
+ // The head and tail positions, in terms of the file's absolute offsets.
+ // tail() is an exclusive bound.
diff --git a/www/iridium/files/patch-media_formats_mp2t_es__parser__adts.cc b/www/iridium/files/patch-media_formats_mp2t_es__parser__adts.cc
new file mode 100644
index 000000000000..a9a96b393d53
--- /dev/null
+++ b/www/iridium/files/patch-media_formats_mp2t_es__parser__adts.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_adts.cc.orig 2019-04-30 22:22:52 UTC
++++ media/formats/mp2t/es_parser_adts.cc
+@@ -62,11 +62,11 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - kADTSHeaderMinSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - kADTSHeaderMinSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (!isAdtsSyncWord(cur_buf))
+ continue;
+@@ -106,7 +106,7 @@ bool EsParserAdts::LookForAdtsFrame(AdtsFrame* adts_fr
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/www/iridium/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc b/www/iridium/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
new file mode 100644
index 000000000000..cd5710c554b0
--- /dev/null
+++ b/www/iridium/files/patch-media_formats_mp2t_es__parser__mpeg1audio.cc
@@ -0,0 +1,26 @@
+--- media/formats/mp2t/es_parser_mpeg1audio.cc.orig 2019-03-11 22:00:59 UTC
++++ media/formats/mp2t/es_parser_mpeg1audio.cc
+@@ -108,11 +108,11 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ const uint8_t* es;
+ es_queue_->Peek(&es, &es_size);
+
+- int max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
+- if (max_offset <= 0)
++ int _max_offset = es_size - MPEG1AudioStreamParser::kHeaderSize;
++ if (_max_offset <= 0)
+ return false;
+
+- for (int offset = 0; offset < max_offset; offset++) {
++ for (int offset = 0; offset < _max_offset; offset++) {
+ const uint8_t* cur_buf = &es[offset];
+ if (cur_buf[0] != 0xff)
+ continue;
+@@ -153,7 +153,7 @@ bool EsParserMpeg1Audio::LookForMpeg1AudioFrame(
+ return true;
+ }
+
+- es_queue_->Pop(max_offset);
++ es_queue_->Pop(_max_offset);
+ return false;
+ }
+
diff --git a/www/iridium/files/patch-media_gpu_buffer__validation.cc b/www/iridium/files/patch-media_gpu_buffer__validation.cc
new file mode 100644
index 000000000000..7f3005140bd8
--- /dev/null
+++ b/www/iridium/files/patch-media_gpu_buffer__validation.cc
@@ -0,0 +1,48 @@
+--- media/gpu/buffer_validation.cc.orig 2019-12-17 19:41:51 UTC
++++ media/gpu/buffer_validation.cc
+@@ -12,15 +12,15 @@
+ #include "ui/gfx/geometry/size.h"
+ #include "ui/gfx/gpu_memory_buffer.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/types.h>
+ #include <unistd.h>
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace media {
+
+ bool GetFileSize(const int fd, size_t* size) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (fd < 0) {
+ VLOGF(1) << "Invalid file descriptor";
+ return false;
+@@ -46,7 +46,7 @@ bool GetFileSize(const int fd, size_t* size) {
+ #else
+ NOTIMPLEMENTED();
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool VerifyGpuMemoryBufferHandle(media::VideoPixelFormat pixel_format,
+@@ -56,7 +56,7 @@ bool VerifyGpuMemoryBufferHandle(media::VideoPixelForm
+ VLOGF(1) << "Unexpected GpuMemoryBufferType: " << gmb_handle.type;
+ return false;
+ }
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const size_t num_planes = media::VideoFrame::NumPlanes(pixel_format);
+ if (num_planes != gmb_handle.native_pixmap_handle.planes.size() ||
+ num_planes == 0) {
+@@ -108,7 +108,7 @@ bool VerifyGpuMemoryBufferHandle(media::VideoPixelForm
+ #else
+ NOTIMPLEMENTED();
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ } // namespace media
diff --git a/www/iridium/files/patch-media_media__options.gni b/www/iridium/files/patch-media_media__options.gni
new file mode 100644
index 000000000000..f2783c3581d2
--- /dev/null
+++ b/www/iridium/files/patch-media_media__options.gni
@@ -0,0 +1,12 @@
+--- media/media_options.gni.orig 2020-03-16 18:40:33 UTC
++++ media/media_options.gni
+@@ -119,6 +119,9 @@ declare_args() {
+ # Enables runtime selection of ALSA library for audio.
+ use_alsa = false
+
++ # Enable runtime selection of sndio(7)
++ use_sndio = false
++
+ # Alsa should be used on non-Android, non-Mac POSIX systems.
+ # Alsa should be used on desktop Chromecast and audio-only Chromecast builds.
+ if (is_posix && !is_android && !is_mac &&
diff --git a/www/iridium/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc b/www/iridium/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc
new file mode 100644
index 000000000000..b208560a307d
--- /dev/null
+++ b/www/iridium/files/patch-media_mojo_clients_mojo__video__encode__accelerator.cc
@@ -0,0 +1,11 @@
+--- media/mojo/clients/mojo_video_encode_accelerator.cc.orig 2020-03-16 18:40:33 UTC
++++ media/mojo/clients/mojo_video_encode_accelerator.cc
+@@ -132,7 +132,7 @@ void MojoVideoEncodeAccelerator::Encode(scoped_refptr<
+ frame->layout().num_planes());
+ DCHECK(vea_.is_bound());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(crbug.com/1003197): Remove this once we stop supporting STORAGE_DMABUF
+ // in VideoEncodeAccelerator.
+ if (frame->storage_type() == VideoFrame::STORAGE_DMABUFS) {
diff --git a/www/iridium/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc b/www/iridium/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc
new file mode 100644
index 000000000000..46396d067968
--- /dev/null
+++ b/www/iridium/files/patch-media_mojo_mojom_video__frame__mojom__traits.cc
@@ -0,0 +1,32 @@
+--- media/mojo/mojom/video_frame_mojom_traits.cc.orig 2020-02-24 18:39:18 UTC
++++ media/mojo/mojom/video_frame_mojom_traits.cc
+@@ -20,9 +20,9 @@
+ #include "ui/gfx/mojom/buffer_types_mojom_traits.h"
+ #include "ui/gfx/mojom/color_space_mojom_traits.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/posix/eintr_wrapper.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace mojo {
+
+@@ -60,7 +60,7 @@ media::mojom::VideoFrameDataPtr MakeVideoFrameData(
+ mojo_frame->PlaneOffset(media::VideoFrame::kVPlane)));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (input->storage_type() == media::VideoFrame::STORAGE_DMABUFS) {
+ std::vector<mojo::ScopedHandle> dmabuf_fds;
+
+@@ -161,7 +161,7 @@ bool StructTraits<media::mojom::VideoFrameDataView,
+ shared_buffer_data.u_offset(), shared_buffer_data.v_offset(),
+ shared_buffer_data.y_stride(), shared_buffer_data.u_stride(),
+ shared_buffer_data.v_stride(), timestamp);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (data.is_dmabuf_data()) {
+ media::mojom::DmabufVideoFrameDataDataView dmabuf_data;
+ data.GetDmabufDataDataView(&dmabuf_data);
diff --git a/www/iridium/files/patch-media_mojo_services_gpu__mojo__media__client.cc b/www/iridium/files/patch-media_mojo_services_gpu__mojo__media__client.cc
new file mode 100644
index 000000000000..ea181aa1b1f3
--- /dev/null
+++ b/www/iridium/files/patch-media_mojo_services_gpu__mojo__media__client.cc
@@ -0,0 +1,20 @@
+--- media/mojo/services/gpu_mojo_media_client.cc.orig 2020-03-16 18:40:33 UTC
++++ media/mojo/services/gpu_mojo_media_client.cc
+@@ -64,7 +64,7 @@ namespace media {
+ namespace {
+
+ #if defined(OS_ANDROID) || defined(OS_CHROMEOS) || defined(OS_MACOSX) || \
+- defined(OS_WIN) || defined(OS_LINUX)
++ defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ gpu::CommandBufferStub* GetCommandBufferStub(
+ scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner,
+ base::WeakPtr<MediaGpuChannelManager> media_gpu_channel_manager,
+@@ -263,7 +263,7 @@ std::unique_ptr<VideoDecoder> GpuMojoMediaClient::Crea
+ command_buffer_id->route_id));
+ }
+
+-#elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX)
++#elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ video_decoder = VdaVideoDecoder::Create(
+ task_runner, gpu_task_runner_, media_log->Clone(), target_color_space,
+ gpu_preferences_, gpu_workarounds_,
diff --git a/www/iridium/files/patch-media_video_fake__gpu__memory__buffer.cc b/www/iridium/files/patch-media_video_fake__gpu__memory__buffer.cc
new file mode 100644
index 000000000000..684c9adbd4b4
--- /dev/null
+++ b/www/iridium/files/patch-media_video_fake__gpu__memory__buffer.cc
@@ -0,0 +1,47 @@
+--- media/video/fake_gpu_memory_buffer.cc.orig 2019-12-17 19:43:52 UTC
++++ media/video/fake_gpu_memory_buffer.cc
+@@ -6,7 +6,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+@@ -44,7 +44,7 @@ class FakeGpuMemoryBufferImpl : public gpu::GpuMemoryB
+
+ } // namespace
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::ScopedFD GetDummyFD() {
+ base::ScopedFD fd(open("/dev/zero", O_RDWR));
+ DCHECK(fd.is_valid());
+@@ -67,7 +67,7 @@ FakeGpuMemoryBuffer::FakeGpuMemoryBuffer(const gfx::Si
+ // Set a dummy id since this is for testing only.
+ handle_.id = gfx::GpuMemoryBufferId(0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Set a dummy fd since this is for testing only.
+ handle_.native_pixmap_handle.planes.push_back(
+ gfx::NativePixmapPlane(size_.width(), 0, y_plane_size, GetDummyFD()));
+@@ -76,7 +76,7 @@ FakeGpuMemoryBuffer::FakeGpuMemoryBuffer(const gfx::Si
+ size_.width(), handle_.native_pixmap_handle.planes[0].size,
+ uv_plane_size, GetDummyFD()));
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ FakeGpuMemoryBuffer::~FakeGpuMemoryBuffer() = default;
+@@ -135,7 +135,7 @@ gfx::GpuMemoryBufferHandle FakeGpuMemoryBuffer::CloneH
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::NATIVE_PIXMAP;
+ handle.id = handle_.id;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ handle.native_pixmap_handle =
+ gfx::CloneHandleForIPC(handle_.native_pixmap_handle);
+ #endif
diff --git a/www/iridium/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc b/www/iridium/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
new file mode 100644
index 000000000000..3941ed5af217
--- /dev/null
+++ b/www/iridium/files/patch-media_video_gpu__memory__buffer__video__frame__pool.cc
@@ -0,0 +1,11 @@
+--- media/video/gpu_memory_buffer_video_frame_pool.cc.orig 2020-02-03 21:53:32 UTC
++++ media/video/gpu_memory_buffer_video_frame_pool.cc
+@@ -572,7 +572,7 @@ void GpuMemoryBufferVideoFramePool::PoolImpl::CreateHa
+ }
+
+ bool is_software_backed_video_frame = !video_frame->HasTextures();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ is_software_backed_video_frame &= !video_frame->HasDmaBufs();
+ #endif
+
diff --git a/www/iridium/files/patch-media_webrtc_webrtc__switches.cc b/www/iridium/files/patch-media_webrtc_webrtc__switches.cc
new file mode 100644
index 000000000000..68078dc67afd
--- /dev/null
+++ b/www/iridium/files/patch-media_webrtc_webrtc__switches.cc
@@ -0,0 +1,11 @@
+--- media/webrtc/webrtc_switches.cc.orig 2020-02-03 21:52:48 UTC
++++ media/webrtc/webrtc_switches.cc
+@@ -50,7 +50,7 @@ namespace media {
+
+ bool IsWebRtcApmInAudioServiceEnabled() {
+ #if defined(OS_WIN) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return base::FeatureList::IsEnabled(features::kWebRtcApmInAudioService) &&
+ !base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kForceDisableWebRtcApmInAudioService);
diff --git a/www/iridium/files/patch-mojo_public_c_system_thunks.cc b/www/iridium/files/patch-mojo_public_c_system_thunks.cc
new file mode 100644
index 000000000000..dec03d588689
--- /dev/null
+++ b/www/iridium/files/patch-mojo_public_c_system_thunks.cc
@@ -0,0 +1,49 @@
+--- mojo/public/c/system/thunks.cc.orig 2020-02-03 21:52:48 UTC
++++ mojo/public/c/system/thunks.cc
+@@ -15,7 +15,7 @@
+ #include "build/build_config.h"
+ #include "mojo/public/c/system/core.h"
+
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
+ #include "base/optional.h"
+@@ -58,7 +58,7 @@ namespace mojo {
+ class CoreLibraryInitializer {
+ public:
+ CoreLibraryInitializer(const MojoInitializeOptions* options) {
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ bool application_provided_path = false;
+ base::Optional<base::FilePath> library_path;
+ if (options && options->struct_size >= sizeof(*options) &&
+@@ -77,7 +77,7 @@ class CoreLibraryInitializer {
+
+ if (!library_path) {
+ // Default to looking for the library in the current working directory.
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ const base::FilePath::CharType kDefaultLibraryPathValue[] =
+ FILE_PATH_LITERAL("./libmojo_core.so");
+ #elif defined(OS_WIN)
+@@ -127,16 +127,16 @@ class CoreLibraryInitializer {
+
+ CHECK_GT(g_thunks.size, 0u)
+ << "Invalid mojo_core library: " << library_path->value();
+-#else // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#else // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ NOTREACHED()
+ << "Dynamic mojo_core loading is not supported on this platform.";
+-#endif // defined(OS_CHROMEOS) || defined(OS_LINUX)
++#endif // defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ ~CoreLibraryInitializer() = default;
+
+ private:
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ base::Optional<base::ScopedNativeLibrary> library_;
+ #endif
+
diff --git a/www/iridium/files/patch-mojo_public_js_mojo__bindings__resources.grd b/www/iridium/files/patch-mojo_public_js_mojo__bindings__resources.grd
new file mode 100644
index 000000000000..b0970950923b
--- /dev/null
+++ b/www/iridium/files/patch-mojo_public_js_mojo__bindings__resources.grd
@@ -0,0 +1,11 @@
+--- mojo/public/js/mojo_bindings_resources.grd.orig 2020-03-16 18:39:53 UTC
++++ mojo/public/js/mojo_bindings_resources.grd
+@@ -70,7 +70,7 @@
+ use_base_dir="false"
+ type="BINDATA"
+ compress="gzip" />
+- <if expr="is_win or is_macosx or is_linux">
++ <if expr="is_win or is_macosx or is_posix">
+ <include name="IDR_MOJO_TIME_MOJOM_HTML"
+ file="${root_gen_dir}/mojo/public/mojom/base/time.mojom.html"
+ use_base_dir="false"
diff --git a/www/iridium/files/patch-net_BUILD.gn b/www/iridium/files/patch-net_BUILD.gn
new file mode 100644
index 000000000000..2696770beb1c
--- /dev/null
+++ b/www/iridium/files/patch-net_BUILD.gn
@@ -0,0 +1,46 @@
+--- net/BUILD.gn.orig 2020-03-16 18:40:33 UTC
++++ net/BUILD.gn
+@@ -103,7 +103,7 @@ net_configs = [
+ "//build/config/compiler:wexit_time_destructors",
+ ]
+
+-if (is_linux) {
++if (is_linux && !is_bsd) {
+ net_configs += [ "//build/config/linux:libresolv" ]
+ }
+
+@@ -1247,6 +1247,16 @@ component("net") {
+ ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "base/address_tracker_linux.cc",
++ "base/address_tracker_linux.h",
++ "base/network_change_notifier_linux.cc",
++ "base/network_change_notifier_linux.h",
++ "base/network_interfaces_linux.cc"
++ ]
++ }
++
+ if (is_mac) {
+ sources += [
+ "base/network_notification_thread_mac.cc",
+@@ -1373,7 +1383,7 @@ component("net") {
+ }
+ }
+
+- if (is_android || is_chromeos) {
++ if (is_android || is_chromeos || is_bsd) {
+ sources += [
+ "base/network_change_notifier_posix.cc",
+ "base/network_change_notifier_posix.h",
+@@ -1406,7 +1416,7 @@ component("net") {
+ }
+
+ # Use getifaddrs() on POSIX platforms, except Linux and Android.
+- if (is_posix && !is_linux && !is_android) {
++ if (is_posix && ((!is_linux && !is_android) || (is_bsd))) {
+ sources += [
+ "base/network_interfaces_getifaddrs.cc",
+ "base/network_interfaces_getifaddrs.h",
diff --git a/www/iridium/files/patch-net_base_address__tracker__linux.cc b/www/iridium/files/patch-net_base_address__tracker__linux.cc
new file mode 100644
index 000000000000..01047dcf1d20
--- /dev/null
+++ b/www/iridium/files/patch-net_base_address__tracker__linux.cc
@@ -0,0 +1,88 @@
+--- net/base/address_tracker_linux.cc.orig 2020-03-03 18:53:55 UTC
++++ net/base/address_tracker_linux.cc
+@@ -5,7 +5,9 @@
+ #include "net/base/address_tracker_linux.h"
+
+ #include <errno.h>
++#if !defined(OS_BSD)
+ #include <linux/if.h>
++#endif
+ #include <stdint.h>
+ #include <sys/ioctl.h>
+ #include <utility>
+@@ -177,6 +179,7 @@ AddressTrackerLinux::AddressTrackerLinux(
+ AddressTrackerLinux::~AddressTrackerLinux() = default;
+
+ void AddressTrackerLinux::Init() {
++#if !defined(OS_FREEBSD)
+ netlink_fd_.reset(socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE));
+ if (!netlink_fd_.is_valid()) {
+ PLOG(ERROR) << "Could not create NETLINK socket";
+@@ -272,6 +275,7 @@ void AddressTrackerLinux::AbortAndForceOnline() {
+ connection_type_initialized_cv_.Broadcast();
+ }
+
++#if !defined(OS_BSD)
+ AddressTrackerLinux::AddressMap AddressTrackerLinux::GetAddressMap() const {
+ AddressTrackerAutoLock lock(*this, address_map_lock_);
+ return address_map_;
+@@ -290,6 +294,7 @@ bool AddressTrackerLinux::IsInterfaceIgnored(int inter
+ const char* interface_name = get_interface_name_(interface_index, buf);
+ return ignored_interfaces_.find(interface_name) != ignored_interfaces_.end();
+ }
++#endif // !OS_BSD
+
+ NetworkChangeNotifier::ConnectionType
+ AddressTrackerLinux::GetCurrentConnectionType() {
+@@ -348,6 +353,7 @@ void AddressTrackerLinux::HandleMessage(const char* bu
+ bool* address_changed,
+ bool* link_changed,
+ bool* tunnel_changed) {
++#if !defined(OS_FREEBSD)
+ DCHECK(buffer);
+ // Note that NLMSG_NEXT decrements |length| to reflect the number of bytes
+ // remaining in |buffer|.
+@@ -460,6 +466,10 @@ void AddressTrackerLinux::HandleMessage(const char* bu
+ break;
+ }
+ }
++#else // !OS_FREEBSD
++ NOTIMPLEMENTED();
++ AbortAndForceOnline();
++#endif // !OS_FREEBSD
+ }
+
+ void AddressTrackerLinux::OnFileCanReadWithoutBlocking() {
+@@ -487,31 +497,7 @@ bool AddressTrackerLinux::IsTunnelInterfaceName(const
+ }
+
+ void AddressTrackerLinux::UpdateCurrentConnectionType() {
+- AddressTrackerLinux::AddressMap address_map = GetAddressMap();
+- std::unordered_set<int> online_links = GetOnlineLinks();
+-
+- // Strip out tunnel interfaces from online_links
+- for (auto it = online_links.cbegin(); it != online_links.cend();) {
+- if (IsTunnelInterface(*it)) {
+- it = online_links.erase(it);
+- } else {
+- ++it;
+- }
+- }
+-
+- NetworkInterfaceList networks;
+- NetworkChangeNotifier::ConnectionType type =
+- NetworkChangeNotifier::CONNECTION_NONE;
+- if (GetNetworkListImpl(&networks, 0, online_links, address_map,
+- get_interface_name_)) {
+- type = NetworkChangeNotifier::ConnectionTypeFromInterfaceList(networks);
+- } else {
+- type = online_links.empty() ? NetworkChangeNotifier::CONNECTION_NONE
+- : NetworkChangeNotifier::CONNECTION_UNKNOWN;
+- }
+-
+- AddressTrackerAutoLock lock(*this, connection_type_lock_);
+- current_connection_type_ = type;
++ NOTIMPLEMENTED();
+ }
+
+ int AddressTrackerLinux::GetThreadsWaitingForConnectionTypeInitForTesting() {
diff --git a/www/iridium/files/patch-net_base_address__tracker__linux.h b/www/iridium/files/patch-net_base_address__tracker__linux.h
new file mode 100644
index 000000000000..50b6ecbc20fb
--- /dev/null
+++ b/www/iridium/files/patch-net_base_address__tracker__linux.h
@@ -0,0 +1,12 @@
+--- net/base/address_tracker_linux.h.orig 2019-03-11 22:01:00 UTC
++++ net/base/address_tracker_linux.h
+@@ -7,9 +7,6 @@
+
+ #include <sys/socket.h> // Needed to include netlink.
+ // Mask superfluous definition of |struct net|. This is fixed in Linux 2.6.38.
+-#define net net_kernel
+-#include <linux/rtnetlink.h>
+-#undef net
+ #include <stddef.h>
+
+ #include <map>
diff --git a/www/iridium/files/patch-net_base_address__tracker__linux__unittest.cc b/www/iridium/files/patch-net_base_address__tracker__linux__unittest.cc
new file mode 100644
index 000000000000..58a442e0f159
--- /dev/null
+++ b/www/iridium/files/patch-net_base_address__tracker__linux__unittest.cc
@@ -0,0 +1,14 @@
+--- net/base/address_tracker_linux_unittest.cc.orig 2019-03-11 22:01:00 UTC
++++ net/base/address_tracker_linux_unittest.cc
+@@ -4,7 +4,11 @@
+
+ #include "net/base/address_tracker_linux.h"
+
++#if defined(__linux__)
+ #include <linux/if.h>
++#else
++#include <net/if.h>
++#endif
+
+ #include <memory>
+ #include <unordered_set>
diff --git a/www/iridium/files/patch-net_base_features.cc b/www/iridium/files/patch-net_base_features.cc
new file mode 100644
index 000000000000..306de5e6d980
--- /dev/null
+++ b/www/iridium/files/patch-net_base_features.cc
@@ -0,0 +1,11 @@
+--- net/base/features.cc.orig 2020-03-17 10:02:15 UTC
++++ net/base/features.cc
+@@ -88,7 +88,7 @@ const base::FeatureParam<int>
+ #if BUILDFLAG(BUILTIN_CERT_VERIFIER_FEATURE_SUPPORTED)
+ const base::Feature kCertVerifierBuiltinFeature {
+ "CertVerifierBuiltin",
+-#if defined(OS_CHROMEOS) || defined(OS_LINUX)
++#if defined(OS_CHROMEOS) || defined(OS_LINUX) || defined(OS_BSD)
+ base::FEATURE_ENABLED_BY_DEFAULT
+ #else
+ base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/www/iridium/files/patch-net_base_network__change__notifier.cc b/www/iridium/files/patch-net_base_network__change__notifier.cc
new file mode 100644
index 000000000000..b570610a6483
--- /dev/null
+++ b/www/iridium/files/patch-net_base_network__change__notifier.cc
@@ -0,0 +1,28 @@
+--- net/base/network_change_notifier.cc.orig 2020-02-03 21:52:49 UTC
++++ net/base/network_change_notifier.cc
+@@ -35,7 +35,7 @@
+ #include "net/base/network_change_notifier_linux.h"
+ #elif defined(OS_MACOSX)
+ #include "net/base/network_change_notifier_mac.h"
+-#elif defined(OS_CHROMEOS) || defined(OS_ANDROID)
++#elif defined(OS_CHROMEOS) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "net/base/network_change_notifier_posix.h"
+ #elif defined(OS_FUCHSIA)
+ #include "net/base/network_change_notifier_fuchsia.h"
+@@ -229,7 +229,7 @@ std::unique_ptr<NetworkChangeNotifier> NetworkChangeNo
+ // service in a separate process.
+ return std::make_unique<NetworkChangeNotifierPosix>(initial_type,
+ initial_subtype);
+-#elif defined(OS_CHROMEOS)
++#elif defined(OS_CHROMEOS) || defined(OS_BSD)
+ return std::make_unique<NetworkChangeNotifierPosix>(initial_type,
+ initial_subtype);
+ #elif defined(OS_LINUX)
+@@ -241,7 +241,6 @@ std::unique_ptr<NetworkChangeNotifier> NetworkChangeNo
+ return std::make_unique<NetworkChangeNotifierFuchsia>(
+ 0 /* required_features */);
+ #else
+- NOTIMPLEMENTED();
+ return NULL;
+ #endif
+ }
diff --git a/www/iridium/files/patch-net_base_network__interfaces__posix.h b/www/iridium/files/patch-net_base_network__interfaces__posix.h
new file mode 100644
index 000000000000..44b17ad3eafa
--- /dev/null
+++ b/www/iridium/files/patch-net_base_network__interfaces__posix.h
@@ -0,0 +1,11 @@
+--- net/base/network_interfaces_posix.h.orig 2019-03-11 22:01:00 UTC
++++ net/base/network_interfaces_posix.h
+@@ -8,6 +8,8 @@
+ // This file provides some basic functionality shared between
+ // network_interfaces_linux.cc and network_interfaces_getifaddrs.cc.
+
++#include <sys/socket.h>
++
+ #include <string>
+
+ struct sockaddr;
diff --git a/www/iridium/files/patch-net_disk__cache_blockfile_disk__format.h b/www/iridium/files/patch-net_disk__cache_blockfile_disk__format.h
new file mode 100644
index 000000000000..655e5cca978c
--- /dev/null
+++ b/www/iridium/files/patch-net_disk__cache_blockfile_disk__format.h
@@ -0,0 +1,12 @@
+--- net/disk_cache/blockfile/disk_format.h.orig 2019-03-11 22:01:01 UTC
++++ net/disk_cache/blockfile/disk_format.h
+@@ -149,7 +149,9 @@ struct RankingsNode {
+ };
+ #pragma pack(pop)
+
++#if !defined(OS_BSD)
+ static_assert(sizeof(RankingsNode) == 36, "bad RankingsNode");
++#endif
+
+ } // namespace disk_cache
+
diff --git a/www/iridium/files/patch-net_dns_address__sorter__posix.cc b/www/iridium/files/patch-net_dns_address__sorter__posix.cc
new file mode 100644
index 000000000000..f462de801f4a
--- /dev/null
+++ b/www/iridium/files/patch-net_dns_address__sorter__posix.cc
@@ -0,0 +1,12 @@
+--- net/dns/address_sorter_posix.cc.orig 2019-03-11 22:01:01 UTC
++++ net/dns/address_sorter_posix.cc
+@@ -13,7 +13,9 @@
+ #include <sys/socket.h> // Must be included before ifaddrs.h.
+ #include <ifaddrs.h>
+ #include <net/if.h>
++#include <net/if_var.h>
+ #include <netinet/in_var.h>
++#include <netinet6/in6_var.h>
+ #include <string.h>
+ #include <sys/ioctl.h>
+ #endif
diff --git a/www/iridium/files/patch-net_dns_dns__config__service__posix__unittest.cc b/www/iridium/files/patch-net_dns_dns__config__service__posix__unittest.cc
new file mode 100644
index 000000000000..21bd683f8187
--- /dev/null
+++ b/www/iridium/files/patch-net_dns_dns__config__service__posix__unittest.cc
@@ -0,0 +1,47 @@
+--- net/dns/dns_config_service_posix_unittest.cc.orig 2019-06-04 18:55:27 UTC
++++ net/dns/dns_config_service_posix_unittest.cc
+@@ -2,8 +2,6 @@
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
+
+-#include <resolv.h>
+-
+ #include <memory>
+
+ #include "base/cancelable_callback.h"
+@@ -50,7 +48,7 @@ const char* const kNameserversIPv4[] = {
+ "1.0.0.1",
+ };
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char* const kNameserversIPv6[] = {
+ NULL,
+ "2001:DB8:0::42",
+@@ -86,7 +84,7 @@ void InitializeResState(res_state res) {
+ ++res->nscount;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Install IPv6 addresses, replacing the corresponding IPv4 addresses.
+ unsigned nscount6 = 0;
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+@@ -107,7 +105,7 @@ void InitializeResState(res_state res) {
+ }
+
+ void CloseResState(res_state res) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (int i = 0; i < res->nscount; ++i) {
+ if (res->_u._ext.nsaddrs[i] != NULL)
+ free(res->_u._ext.nsaddrs[i]);
+@@ -132,7 +130,7 @@ void InitializeExpectedConfig(DnsConfig* config) {
+ config->nameservers.push_back(IPEndPoint(ip, NS_DEFAULTPORT + i));
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ for (unsigned i = 0; i < base::size(kNameserversIPv6) && i < MAXNS; ++i) {
+ if (!kNameserversIPv6[i])
+ continue;
diff --git a/www/iridium/files/patch-net_dns_dns__reloader.cc b/www/iridium/files/patch-net_dns_dns__reloader.cc
new file mode 100644
index 000000000000..34eb7a2e01ca
--- /dev/null
+++ b/www/iridium/files/patch-net_dns_dns__reloader.cc
@@ -0,0 +1,13 @@
+--- net/dns/dns_reloader.cc.orig 2019-03-11 22:01:01 UTC
++++ net/dns/dns_reloader.cc
+@@ -7,6 +7,10 @@
+ #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+
++#if defined(OS_FREEBSD)
++#include <netinet/in.h>
++#endif
++
+ #include <resolv.h>
+
+ #include "base/lazy_instance.h"
diff --git a/www/iridium/files/patch-net_dns_dns__util.cc b/www/iridium/files/patch-net_dns_dns__util.cc
new file mode 100644
index 000000000000..be75a59fbd52
--- /dev/null
+++ b/www/iridium/files/patch-net_dns_dns__util.cc
@@ -0,0 +1,11 @@
+--- net/dns/dns_util.cc.orig 2019-10-21 19:06:38 UTC
++++ net/dns/dns_util.cc
+@@ -38,6 +38,8 @@ const uint16_t kFlagNamePointer = 0xc000;
+
+ } // namespace
+
++#include <sys/socket.h>
++
+ #if defined(OS_POSIX)
+ #include <netinet/in.h>
+ #if !defined(OS_NACL)
diff --git a/www/iridium/files/patch-net_dns_host__resolver__proc.cc b/www/iridium/files/patch-net_dns_host__resolver__proc.cc
new file mode 100644
index 000000000000..752211dde398
--- /dev/null
+++ b/www/iridium/files/patch-net_dns_host__resolver__proc.cc
@@ -0,0 +1,11 @@
+--- net/dns/host_resolver_proc.cc.orig 2020-02-03 21:52:49 UTC
++++ net/dns/host_resolver_proc.cc
+@@ -159,7 +159,7 @@ int SystemHostResolverCall(const std::string& host,
+ base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+ base::BlockingType::WILL_BLOCK);
+
+-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
++#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_BSD) && \
+ !defined(OS_ANDROID) && !defined(OS_FUCHSIA)
+ DnsReloaderMaybeReload();
+ #endif
diff --git a/www/iridium/files/patch-net_features.gni b/www/iridium/files/patch-net_features.gni
new file mode 100644
index 000000000000..cb5adcfbf764
--- /dev/null
+++ b/www/iridium/files/patch-net_features.gni
@@ -0,0 +1,11 @@
+--- net/features.gni.orig 2019-09-09 21:55:21 UTC
++++ net/features.gni
+@@ -23,7 +23,7 @@ declare_args() {
+ disable_brotli_filter = false
+
+ # Multicast DNS.
+- enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios
++ enable_mdns = is_win || is_linux || is_fuchsia || is_mac || is_ios || is_bsd
+
+ # Reporting not used on iOS.
+ enable_reporting = !is_ios
diff --git a/www/iridium/files/patch-net_http_http__auth__gssapi__posix.cc b/www/iridium/files/patch-net_http_http__auth__gssapi__posix.cc
new file mode 100644
index 000000000000..f4c603544da0
--- /dev/null
+++ b/www/iridium/files/patch-net_http_http__auth__gssapi__posix.cc
@@ -0,0 +1,14 @@
+--- net/http/http_auth_gssapi_posix.cc.orig 2020-02-03 21:52:49 UTC
++++ net/http/http_auth_gssapi_posix.cc
+@@ -367,8 +367,9 @@ base::NativeLibrary GSSAPISharedLibrary::LoadSharedLib
+ static const char* const kDefaultLibraryNames[] = {
+ #if defined(OS_MACOSX)
+ "/System/Library/Frameworks/GSS.framework/GSS"
+-#elif defined(OS_OPENBSD)
+- "libgssapi.so" // Heimdal - OpenBSD
++#elif defined(OS_BSD)
++ "libgssapi_krb5.so.2", // MIT Kerberos - FreeBSD
++ "libgssapi.so" // Heimdal - OpenBSD, FreeBSD
+ #else
+ "libgssapi_krb5.so.2", // MIT Kerberos - FC, Suse10, Debian
+ "libgssapi.so.4", // Heimdal - Suse10, MDK
diff --git a/www/iridium/files/patch-net_http_http__auth__gssapi__posix.h b/www/iridium/files/patch-net_http_http__auth__gssapi__posix.h
new file mode 100644
index 000000000000..e333287758ee
--- /dev/null
+++ b/www/iridium/files/patch-net_http_http__auth__gssapi__posix.h
@@ -0,0 +1,12 @@
+--- net/http/http_auth_gssapi_posix.h.orig 2019-09-09 21:55:21 UTC
++++ net/http/http_auth_gssapi_posix.h
+@@ -21,6 +21,9 @@
+ #include <GSS/gssapi.h>
+ #elif defined(OS_FREEBSD)
+ #include <gssapi/gssapi.h>
++#ifndef GSS_C_DELEG_POLICY_FLAG
++#define GSS_C_DELEG_POLICY_FLAG 32768
++#endif
+ #else
+ #include <gssapi.h>
+ #endif
diff --git a/www/iridium/files/patch-net_nqe_network__quality__estimator.cc b/www/iridium/files/patch-net_nqe_network__quality__estimator.cc
new file mode 100644
index 000000000000..e23051d78497
--- /dev/null
+++ b/www/iridium/files/patch-net_nqe_network__quality__estimator.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator.cc.orig 2020-03-16 18:40:33 UTC
++++ net/nqe/network_quality_estimator.cc
+@@ -100,7 +100,7 @@ nqe::internal::NetworkID DoGetCurrentNetworkID() {
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_ETHERNET:
+ break;
+ case NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI:
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ network_id.id = GetWifiSSID();
+ #endif
+ break;
diff --git a/www/iridium/files/patch-net_nqe_network__quality__estimator__unittest.cc b/www/iridium/files/patch-net_nqe_network__quality__estimator__unittest.cc
new file mode 100644
index 000000000000..6851ab0d6bc3
--- /dev/null
+++ b/www/iridium/files/patch-net_nqe_network__quality__estimator__unittest.cc
@@ -0,0 +1,11 @@
+--- net/nqe/network_quality_estimator_unittest.cc.orig 2020-03-16 18:39:54 UTC
++++ net/nqe/network_quality_estimator_unittest.cc
+@@ -2107,7 +2107,7 @@ TEST_F(NetworkQualityEstimatorTest, TestGlobalSocketWa
+ // TestTCPSocketRTT requires kernel support for tcp_info struct, and so it is
+ // enabled only on certain platforms.
+ // ChromeOS is disabled due to crbug.com/986904
+-#if (defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID)) && \
++#if (defined(TCP_INFO) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)) && \
+ !defined(OS_CHROMEOS)
+ #define MAYBE_TestTCPSocketRTT TestTCPSocketRTT
+ #else
diff --git a/www/iridium/files/patch-net_proxy__resolution_proxy__config__service__linux.cc b/www/iridium/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
new file mode 100644
index 000000000000..cd644766442f
--- /dev/null
+++ b/www/iridium/files/patch-net_proxy__resolution_proxy__config__service__linux.cc
@@ -0,0 +1,39 @@
+--- net/proxy_resolution/proxy_config_service_linux.cc.orig 2020-03-16 18:40:33 UTC
++++ net/proxy_resolution/proxy_config_service_linux.cc
+@@ -6,7 +6,9 @@
+
+ #include <errno.h>
+ #include <limits.h>
++#if !defined(OS_BSD)
+ #include <sys/inotify.h>
++#endif
+ #include <unistd.h>
+
+ #include <map>
+@@ -511,6 +513,7 @@ int StringToIntOrDefault(base::StringPiece value, int
+ return default_value;
+ }
+
++#if !defined(OS_BSD)
+ // This is the KDE version that reads kioslaverc and simulates gsettings.
+ // Doing this allows the main Delegate code, as well as the unit tests
+ // for it, to stay the same - and the settings map fairly well besides.
+@@ -1000,6 +1003,7 @@ class SettingGetterImplKDE : public ProxyConfigService
+
+ DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
+ };
++#endif
+
+ } // namespace
+
+@@ -1214,8 +1218,10 @@ ProxyConfigServiceLinux::Delegate::Delegate(
+ case base::nix::DESKTOP_ENVIRONMENT_KDE3:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE4:
+ case base::nix::DESKTOP_ENVIRONMENT_KDE5:
++#if !defined(OS_BSD)
+ setting_getter_.reset(new SettingGetterImplKDE(env_var_getter_.get()));
+ break;
++#endif
+ case base::nix::DESKTOP_ENVIRONMENT_XFCE:
+ case base::nix::DESKTOP_ENVIRONMENT_OTHER:
+ break;
diff --git a/www/iridium/files/patch-net_proxy__resolution_proxy__resolution__service.cc b/www/iridium/files/patch-net_proxy__resolution_proxy__resolution__service.cc
new file mode 100644
index 000000000000..ef8a51424888
--- /dev/null
+++ b/www/iridium/files/patch-net_proxy__resolution_proxy__resolution__service.cc
@@ -0,0 +1,29 @@
+--- net/proxy_resolution/proxy_resolution_service.cc.orig 2020-02-03 21:52:49 UTC
++++ net/proxy_resolution/proxy_resolution_service.cc
+@@ -49,7 +49,7 @@
+ #elif defined(OS_MACOSX)
+ #include "net/proxy_resolution/proxy_config_service_mac.h"
+ #include "net/proxy_resolution/proxy_resolver_mac.h"
+-#elif defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#elif (defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
+ #include "net/proxy_resolution/proxy_config_service_linux.h"
+ #elif defined(OS_ANDROID)
+ #include "net/proxy_resolution/proxy_config_service_android.h"
+@@ -63,7 +63,7 @@ namespace net {
+ namespace {
+
+ #if defined(OS_WIN) || defined(OS_IOS) || defined(OS_MACOSX) || \
+- (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++ ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ constexpr net::NetworkTrafficAnnotationTag kSystemProxyConfigTrafficAnnotation =
+ net::DefineNetworkTrafficAnnotation("proxy_config_system", R"(
+ semantics {
+@@ -1556,7 +1556,7 @@ ProxyResolutionService::CreateSystemProxyConfigService
+ << "profile_io_data.cc::CreateProxyConfigService and this should "
+ << "be used only for examples.";
+ return std::make_unique<UnsetProxyConfigService>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<ProxyConfigServiceLinux> linux_config_service(
+ new ProxyConfigServiceLinux());
+
diff --git a/www/iridium/files/patch-net_socket_socket__posix.cc b/www/iridium/files/patch-net_socket_socket__posix.cc
new file mode 100644
index 000000000000..6b1297662465
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/socket_posix.cc.orig 2019-12-16 21:51:27 UTC
++++ net/socket/socket_posix.cc
+@@ -517,7 +517,7 @@ void SocketPosix::ReadCompleted() {
+ }
+
+ int SocketPosix::DoWrite(IOBuffer* buf, int buf_len) {
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Disable SIGPIPE for this write. Although Chromium globally disables
+ // SIGPIPE, the net stack may be used in other consumers which do not do
+ // this. MSG_NOSIGNAL is a Linux-only API. On OS X, this is a setsockopt on
diff --git a/www/iridium/files/patch-net_socket_socks5__client__socket.cc b/www/iridium/files/patch-net_socket_socks5__client__socket.cc
new file mode 100644
index 000000000000..1df3deefc418
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_socks5__client__socket.cc
@@ -0,0 +1,13 @@
+--- net/socket/socks5_client_socket.cc.orig 2019-04-30 22:22:55 UTC
++++ net/socket/socks5_client_socket.cc
+@@ -4,6 +4,10 @@
+
+ #include "net/socket/socks5_client_socket.h"
+
++#if defined(OS_BSD)
++#include <netinet/in.h>
++#endif
++
+ #include <utility>
+
+ #include "base/bind.h"
diff --git a/www/iridium/files/patch-net_socket_tcp__socket__posix.cc b/www/iridium/files/patch-net_socket_tcp__socket__posix.cc
new file mode 100644
index 000000000000..d2a7091eac8d
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_tcp__socket__posix.cc
@@ -0,0 +1,20 @@
+--- net/socket/tcp_socket_posix.cc.orig 2019-03-17 15:46:01 UTC
++++ net/socket/tcp_socket_posix.cc
+@@ -88,6 +88,17 @@ bool SetTCPKeepAlive(int fd, bool enable, int delay) {
+ PLOG(ERROR) << "Failed to set TCP_KEEPALIVE on fd: " << fd;
+ return false;
+ }
++#elif defined(OS_BSD)
++ // Set seconds until first TCP keep alive.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPIDLE on fd: " << fd;
++ return false;
++ }
++ // Set seconds between TCP keep alives.
++ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &delay, sizeof(delay))) {
++ PLOG(ERROR) << "Failed to set TCP_KEEPINTVL on fd: " << fd;
++ return false;
++ }
+ #endif
+ return true;
+ }
diff --git a/www/iridium/files/patch-net_socket_udp__socket__posix.cc b/www/iridium/files/patch-net_socket_udp__socket__posix.cc
new file mode 100644
index 000000000000..c0cfba258179
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_udp__socket__posix.cc
@@ -0,0 +1,108 @@
+--- net/socket/udp_socket_posix.cc.orig 2019-09-09 21:55:22 UTC
++++ net/socket/udp_socket_posix.cc
+@@ -69,7 +69,7 @@ const int kActivityMonitorMinimumSamplesForThroughputE
+ const base::TimeDelta kActivityMonitorMsThreshold =
+ base::TimeDelta::FromMilliseconds(100);
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // When enabling multicast using setsockopt(IP_MULTICAST_IF) MacOS
+ // requires passing IPv4 address instead of interface index. This function
+ // resolves IPv4 address by interface index. The |address| is returned in
+@@ -98,7 +98,7 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index
+ return OK;
+ }
+
+-#endif // OS_MACOSX
++#endif // OS_MACOSX || OS_BSD
+
+ #if defined(OS_MACOSX) && !defined(OS_IOS)
+
+@@ -644,13 +644,13 @@ int UDPSocketPosix::SetDoNotFragment() {
+ }
+
+ void UDPSocketPosix::SetMsgConfirm(bool confirm) {
+-#if !defined(OS_MACOSX) && !defined(OS_IOS)
++#if !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ if (confirm) {
+ sendto_flags_ |= MSG_CONFIRM;
+ } else {
+ sendto_flags_ &= ~MSG_CONFIRM;
+ }
+-#endif // !defined(OS_MACOSX) && !defined(OS_IOS)
++#endif // !defined(OS_MACOSX) && !defined(OS_IOS) && !defined(OS_BSD)
+ }
+
+ int UDPSocketPosix::AllowAddressReuse() {
+@@ -665,17 +665,20 @@ int UDPSocketPosix::SetBroadcast(bool broadcast) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ int value = broadcast ? 1 : 0;
+ int rv;
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // SO_REUSEPORT on OSX permits multiple processes to each receive
+ // UDP multicast or broadcast datagrams destined for the bound
+ // port.
+ // This is only being set on OSX because its behavior is platform dependent
+ // and we are playing it safe by only setting it on platforms where things
+ // break.
++ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value));
++ if (rv != 0)
++ return MapSystemError(errno);
+ rv = setsockopt(socket_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value));
+ if (rv != 0)
+ return MapSystemError(errno);
+-#endif // defined(OS_MACOSX)
++#endif // defined(OS_MACOSX) || defined(OS_BSD)
+ rv = setsockopt(socket_, SOL_SOCKET, SO_BROADCAST, &value, sizeof(value));
+
+ return rv == 0 ? OK : MapSystemError(errno);
+@@ -935,7 +938,7 @@ int UDPSocketPosix::SetMulticastOptions() {
+ if (multicast_interface_ != 0) {
+ switch (addr_family_) {
+ case AF_INET: {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -947,7 +950,11 @@ int UDPSocketPosix::SetMulticastOptions() {
+ mreq.imr_address.s_addr = htonl(INADDR_ANY);
+ #endif // !defined(OS_MACOSX)
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_MULTICAST_IF,
++#if defined(OS_BSD)
++ reinterpret_cast<const char*>(&mreq.imr_interface.s_addr), sizeof(mreq.imr_interface.s_addr));
++#else
+ reinterpret_cast<const char*>(&mreq), sizeof(mreq));
++#endif
+ if (rv)
+ return MapSystemError(errno);
+ break;
+@@ -1009,7 +1016,7 @@ int UDPSocketPosix::JoinGroup(const IPAddress& group_a
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ ip_mreq mreq = {};
+ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
+ &mreq.imr_interface.s_addr);
+@@ -1057,9 +1064,18 @@ int UDPSocketPosix::LeaveGroup(const IPAddress& group_
+ case IPAddress::kIPv4AddressSize: {
+ if (addr_family_ != AF_INET)
+ return ERR_ADDRESS_INVALID;
++#if defined(OS_BSD)
++ ip_mreq mreq = {};
++ int error = GetIPv4AddressFromIndex(socket_, multicast_interface_,
++ &mreq.imr_interface.s_addr);
++
++ if (error != OK)
++ return error;
++#else
+ ip_mreqn mreq = {};
+ mreq.imr_ifindex = multicast_interface_;
+ mreq.imr_address.s_addr = INADDR_ANY;
++#endif
+ memcpy(&mreq.imr_multiaddr, group_address.bytes().data(),
+ IPAddress::kIPv4AddressSize);
+ int rv = setsockopt(socket_, IPPROTO_IP, IP_DROP_MEMBERSHIP,
diff --git a/www/iridium/files/patch-net_socket_udp__socket__posix.h b/www/iridium/files/patch-net_socket_udp__socket__posix.h
new file mode 100644
index 000000000000..373c468ca84d
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_udp__socket__posix.h
@@ -0,0 +1,11 @@
+--- net/socket/udp_socket_posix.h.orig 2019-06-07 19:57:25 UTC
++++ net/socket/udp_socket_posix.h
+@@ -33,7 +33,7 @@
+
+ #if defined(__ANDROID__) && defined(__aarch64__)
+ #define HAVE_SENDMMSG 1
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define HAVE_SENDMMSG 1
+ #else
+ #define HAVE_SENDMMSG 0
diff --git a/www/iridium/files/patch-net_socket_unix__domain__client__socket__posix.cc b/www/iridium/files/patch-net_socket_unix__domain__client__socket__posix.cc
new file mode 100644
index 000000000000..9f9ad02d0d9c
--- /dev/null
+++ b/www/iridium/files/patch-net_socket_unix__domain__client__socket__posix.cc
@@ -0,0 +1,11 @@
+--- net/socket/unix_domain_client_socket_posix.cc.orig 2019-06-07 19:59:03 UTC
++++ net/socket/unix_domain_client_socket_posix.cc
+@@ -56,7 +56,7 @@ bool UnixDomainClientSocket::FillAddress(const std::st
+ return true;
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Convert the path given into abstract socket name. It must start with
+ // the '\0' character, so we are adding it. |addr_len| must specify the
+ // length of the structure exactly, as potentially the socket name may
diff --git a/www/iridium/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc b/www/iridium/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
new file mode 100644
index 000000000000..3e87bd2fcfd9
--- /dev/null
+++ b/www/iridium/files/patch-net_tools_cert__verify__tool_cert__verify__tool.cc
@@ -0,0 +1,20 @@
+--- net/tools/cert_verify_tool/cert_verify_tool.cc.orig 2020-03-16 18:39:54 UTC
++++ net/tools/cert_verify_tool/cert_verify_tool.cc
+@@ -29,7 +29,7 @@
+ #include "net/url_request/url_request_context_builder.h"
+ #include "net/url_request/url_request_context_getter.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "net/proxy_resolution/proxy_config.h"
+ #include "net/proxy_resolution/proxy_config_service_fixed.h"
+ #endif
+@@ -51,7 +51,7 @@ void SetUpOnNetworkThread(
+ base::WaitableEvent* initialization_complete_event) {
+ net::URLRequestContextBuilder url_request_context_builder;
+ url_request_context_builder.set_user_agent(GetUserAgent());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ //
diff --git a/www/iridium/files/patch-net_tools_quic_quic__http__proxy__backend.cc b/www/iridium/files/patch-net_tools_quic_quic__http__proxy__backend.cc
new file mode 100644
index 000000000000..65d641ec320d
--- /dev/null
+++ b/www/iridium/files/patch-net_tools_quic_quic__http__proxy__backend.cc
@@ -0,0 +1,11 @@
+--- net/tools/quic/quic_http_proxy_backend.cc.orig 2019-10-21 19:06:39 UTC
++++ net/tools/quic/quic_http_proxy_backend.cc
+@@ -161,7 +161,7 @@ void QuicHttpProxyBackend::InitializeURLRequestContext
+ // Enable HTTP2, but disable QUIC on the backend
+ context_builder.SetSpdyAndQuicEnabled(true /* http2 */, false /* quic */);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, use a fixed ProxyConfigService, since the default one
+ // depends on glib.
+ context_builder.set_proxy_config_service(
diff --git a/www/iridium/files/patch-net_traffic__annotation_network__traffic__annotation.h b/www/iridium/files/patch-net_traffic__annotation_network__traffic__annotation.h
new file mode 100644
index 000000000000..7f70fcc54ea6
--- /dev/null
+++ b/www/iridium/files/patch-net_traffic__annotation_network__traffic__annotation.h
@@ -0,0 +1,20 @@
+--- net/traffic_annotation/network_traffic_annotation.h.orig 2019-09-16 09:58:42 UTC
++++ net/traffic_annotation/network_traffic_annotation.h
+@@ -356,7 +356,7 @@ struct MutablePartialNetworkTrafficAnnotationTag {
+ } // namespace net
+
+ // Placeholder for unannotated usages.
+-#if !defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if !defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_BSD)
+ #define TRAFFIC_ANNOTATION_WITHOUT_PROTO(ANNOTATION_ID) \
+ net::DefineNetworkTrafficAnnotation(ANNOTATION_ID, "No proto yet.")
+ #endif
+@@ -367,7 +367,7 @@ struct MutablePartialNetworkTrafficAnnotationTag {
+ //
+ // On Linux and Windows, use MISSING_TRAFFIC_ANNOTATION or
+ // TRAFFIC_ANNOTATION_FOR_TESTS.
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ #define NO_TRAFFIC_ANNOTATION_YET \
+ net::DefineNetworkTrafficAnnotation("undefined", "Nothing here yet.")
+
diff --git a/www/iridium/files/patch-net_url__request_url__fetcher.cc b/www/iridium/files/patch-net_url__request_url__fetcher.cc
new file mode 100644
index 000000000000..36e2fa9c37e2
--- /dev/null
+++ b/www/iridium/files/patch-net_url__request_url__fetcher.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_fetcher.cc.orig 2019-10-30 16:19:14 UTC
++++ net/url_request/url_fetcher.cc
+@@ -11,7 +11,7 @@ namespace net {
+
+ URLFetcher::~URLFetcher() = default;
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // static
+ std::unique_ptr<URLFetcher> URLFetcher::Create(
+ const GURL& url,
diff --git a/www/iridium/files/patch-net_url__request_url__fetcher.h b/www/iridium/files/patch-net_url__request_url__fetcher.h
new file mode 100644
index 000000000000..bd4fbd669d4c
--- /dev/null
+++ b/www/iridium/files/patch-net_url__request_url__fetcher.h
@@ -0,0 +1,11 @@
+--- net/url_request/url_fetcher.h.orig 2019-10-30 16:19:33 UTC
++++ net/url_request/url_fetcher.h
+@@ -113,7 +113,7 @@ class NET_EXPORT URLFetcher {
+ // The unannotated Create() methods are not available on desktop Linux +
+ // Windows. They are available on other platforms, since we only audit network
+ // annotations on Linux & Windows.
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // |url| is the URL to send the request to. It must be valid.
+ // |request_type| is the type of request to make.
+ // |d| the object that will receive the callback on fetch completion.
diff --git a/www/iridium/files/patch-net_url__request_url__request__context.cc b/www/iridium/files/patch-net_url__request_url__request__context.cc
new file mode 100644
index 000000000000..fd2e091f9f61
--- /dev/null
+++ b/www/iridium/files/patch-net_url__request_url__request__context.cc
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context.cc.orig 2020-03-16 18:39:54 UTC
++++ net/url_request/url_request_context.cc
+@@ -89,7 +89,7 @@ const HttpNetworkSession::Context* URLRequestContext::
+ return &network_session->context();
+ }
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ std::unique_ptr<URLRequest> URLRequestContext::CreateRequest(
+ const GURL& url,
+ RequestPriority priority,
diff --git a/www/iridium/files/patch-net_url__request_url__request__context.h b/www/iridium/files/patch-net_url__request_url__request__context.h
new file mode 100644
index 000000000000..cc9af1e29180
--- /dev/null
+++ b/www/iridium/files/patch-net_url__request_url__request__context.h
@@ -0,0 +1,11 @@
+--- net/url_request/url_request_context.h.orig 2020-03-16 18:40:33 UTC
++++ net/url_request/url_request_context.h
+@@ -82,7 +82,7 @@ class NET_EXPORT URLRequestContext
+ // session.
+ const HttpNetworkSession::Context* GetNetworkSessionContext() const;
+
+-#if (!defined(OS_WIN) && !defined(OS_LINUX)) || defined(OS_CHROMEOS)
++#if (!defined(OS_WIN) && !defined(OS_LINUX) && !defined(OS_BSD)) || defined(OS_CHROMEOS)
+ // This function should not be used in Chromium, please use the version with
+ // NetworkTrafficAnnotationTag in the future.
+ //
diff --git a/www/iridium/files/patch-net_url__request_url__request__context__builder.cc b/www/iridium/files/patch-net_url__request_url__request__context__builder.cc
new file mode 100644
index 000000000000..0144efb4a529
--- /dev/null
+++ b/www/iridium/files/patch-net_url__request_url__request__context__builder.cc
@@ -0,0 +1,20 @@
+--- net/url_request/url_request_context_builder.cc.orig 2020-03-16 18:40:33 UTC
++++ net/url_request/url_request_context_builder.cc
+@@ -507,7 +507,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ }
+
+ if (!proxy_resolution_service_) {
+-#if !defined(OS_LINUX) && !defined(OS_ANDROID)
++#if !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ // TODO(willchan): Switch to using this code when
+ // ProxyResolutionService::CreateSystemProxyConfigService()'s signature
+ // doesn't suck.
+@@ -516,7 +516,7 @@ std::unique_ptr<URLRequestContext> URLRequestContextBu
+ ProxyResolutionService::CreateSystemProxyConfigService(
+ base::ThreadTaskRunnerHandle::Get().get());
+ }
+-#endif // !defined(OS_LINUX) && !defined(OS_ANDROID)
++#endif // !defined(OS_LINUX) && !defined(OS_ANDROID) && !defined(OS_BSD)
+ proxy_resolution_service_ = CreateProxyResolutionService(
+ std::move(proxy_config_service_), context.get(),
+ context->host_resolver(), context->network_delegate(),
diff --git a/www/iridium/files/patch-pdf_pdfium_pdfium__engine.cc b/www/iridium/files/patch-pdf_pdfium_pdfium__engine.cc
new file mode 100644
index 000000000000..c1b3c3d2c8a3
--- /dev/null
+++ b/www/iridium/files/patch-pdf_pdfium_pdfium__engine.cc
@@ -0,0 +1,56 @@
+--- pdf/pdfium/pdfium_engine.cc.orig 2020-03-16 18:40:33 UTC
++++ pdf/pdfium/pdfium_engine.cc
+@@ -52,7 +52,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "v8/include/v8.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "pdf/pdfium/pdfium_font_linux.h"
+ #endif
+
+@@ -377,7 +377,7 @@ void InitializeSDK(bool enable_v8) {
+ config.m_v8EmbedderSlot = gin::kEmbedderPDFium;
+ FPDF_InitLibraryWithConfig(&config);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ InitializeLinuxFontMapper();
+ #endif
+
+@@ -411,7 +411,7 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client,
+ IFSDK_PAUSE::user = nullptr;
+ IFSDK_PAUSE::NeedToPauseNow = Pause_NeedToPauseNow;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // PreviewModeClient does not know its pp::Instance.
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+@@ -878,7 +878,7 @@ pp::Buffer_Dev PDFiumEngine::PrintPagesAsRasterPdf(
+
+ KillFormFocus();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+
+@@ -2861,7 +2861,7 @@ bool PDFiumEngine::ContinuePaint(int progressive_index
+ DCHECK(image_data);
+
+ last_progressive_start_time_ = base::Time::Now();
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+
+@@ -3357,7 +3357,7 @@ void PDFiumEngine::SetCurrentPage(int index) {
+ FORM_DoPageAAction(old_page, form(), FPDFPAGE_AACTION_CLOSE);
+ }
+ most_visible_page_ = index;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SetLastInstance(client_->GetPluginInstance());
+ #endif
+ if (most_visible_page_ != -1 && called_do_document_action_) {
diff --git a/www/iridium/files/patch-ppapi_proxy_file__io__resource.cc b/www/iridium/files/patch-ppapi_proxy_file__io__resource.cc
new file mode 100644
index 000000000000..bd63ba366842
--- /dev/null
+++ b/www/iridium/files/patch-ppapi_proxy_file__io__resource.cc
@@ -0,0 +1,48 @@
+--- ppapi/proxy/file_io_resource.cc.orig 2020-03-16 18:39:54 UTC
++++ ppapi/proxy/file_io_resource.cc
+@@ -284,17 +284,19 @@ int32_t FileIOResource::Write(int64_t offset,
+
+ if (check_quota_) {
+ int64_t increase = 0;
+- uint64_t max_offset = 0;
++ uint64_t _max_offset = 0;
++ // (rene) avoid name collission with /usr/include/vm/vm_map.h on FreeBSD
++ // which also defines max_offset
+ bool append = (open_flags_ & PP_FILEOPENFLAG_APPEND) != 0;
+ if (append) {
+ increase = bytes_to_write;
+ } else {
+- uint64_t max_offset = offset + bytes_to_write;
+- if (max_offset >
++ uint64_t _max_offset = offset + bytes_to_write;
++ if (_max_offset >
+ static_cast<uint64_t>(std::numeric_limits<int64_t>::max())) {
+ return PP_ERROR_FAILED; // amount calculation would overflow.
+ }
+- increase = static_cast<int64_t>(max_offset) - max_written_offset_;
++ increase = static_cast<int64_t>(_max_offset) - max_written_offset_;
+ }
+
+ if (increase > 0) {
+@@ -318,7 +320,7 @@ int32_t FileIOResource::Write(int64_t offset,
+ if (append)
+ append_mode_write_amount_ += bytes_to_write;
+ else
+- max_written_offset_ = max_offset;
++ max_written_offset_ = _max_offset;
+ }
+ }
+ return WriteValidated(offset, buffer, bytes_to_write, callback);
+@@ -594,9 +596,9 @@ void FileIOResource::OnRequestWriteQuotaComplete(
+ } else {
+ DCHECK_LE(offset + bytes_to_write - max_written_offset_, granted);
+
+- int64_t max_offset = offset + bytes_to_write;
+- if (max_written_offset_ < max_offset)
+- max_written_offset_ = max_offset;
++ int64_t _max_offset = offset + bytes_to_write;
++ if (max_written_offset_ < _max_offset)
++ max_written_offset_ = _max_offset;
+ }
+
+ if (callback->is_blocking()) {
diff --git a/www/iridium/files/patch-ppapi_proxy_flash__resource.cc b/www/iridium/files/patch-ppapi_proxy_flash__resource.cc
new file mode 100644
index 000000000000..a45deba61a6e
--- /dev/null
+++ b/www/iridium/files/patch-ppapi_proxy_flash__resource.cc
@@ -0,0 +1,11 @@
+--- ppapi/proxy/flash_resource.cc.orig 2019-09-16 10:01:18 UTC
++++ ppapi/proxy/flash_resource.cc
+@@ -136,7 +136,7 @@ double FlashResource::GetLocalTimeZoneOffset(PP_Instan
+ // require filesystem access prohibited by the sandbox.
+ // TODO(shess): Figure out why OSX needs the access, the sandbox warmup should
+ // handle it. http://crbug.com/149006
+-#if defined(OS_LINUX) || defined(OS_MACOSX)
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD)
+ int32_t result = SyncCall<PpapiPluginMsg_Flash_GetLocalTimeZoneOffsetReply>(
+ BROWSER,
+ PpapiHostMsg_Flash_GetLocalTimeZoneOffset(PPTimeToTime(t)),
diff --git a/www/iridium/files/patch-printing_cups__config__helper.py b/www/iridium/files/patch-printing_cups__config__helper.py
new file mode 100644
index 000000000000..0795067ee45f
--- /dev/null
+++ b/www/iridium/files/patch-printing_cups__config__helper.py
@@ -0,0 +1,11 @@
+--- printing/cups_config_helper.py.orig 2019-12-16 21:50:51 UTC
++++ printing/cups_config_helper.py
+@@ -67,7 +67,7 @@ def main():
+ mode = sys.argv[1]
+ if len(sys.argv) > 2 and sys.argv[2]:
+ sysroot = sys.argv[2]
+- cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
++ cups_config = os.path.join(sysroot, 'bin', 'cups-config')
+ if not os.path.exists(cups_config):
+ print('cups-config not found: %s' % cups_config)
+ return 1
diff --git a/www/iridium/files/patch-remoting_base_chromoting__event.cc b/www/iridium/files/patch-remoting_base_chromoting__event.cc
new file mode 100644
index 000000000000..93df172fe5e5
--- /dev/null
+++ b/www/iridium/files/patch-remoting_base_chromoting__event.cc
@@ -0,0 +1,11 @@
+--- remoting/base/chromoting_event.cc.orig 2019-09-09 21:55:22 UTC
++++ remoting/base/chromoting_event.cc
+@@ -188,7 +188,7 @@ void ChromotingEvent::AddSystemInfo() {
+ SetString(kCpuKey, base::SysInfo::OperatingSystemArchitecture());
+ SetString(kOsVersionKey, base::SysInfo::OperatingSystemVersion());
+ SetString(kWebAppVersionKey, STRINGIZE(VERSION));
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ Os os = Os::CHROMOTING_LINUX;
+ #elif defined(OS_CHROMEOS)
+ Os os = Os::CHROMOTING_CHROMEOS;
diff --git a/www/iridium/files/patch-remoting_client_display_sys__opengl.h b/www/iridium/files/patch-remoting_client_display_sys__opengl.h
new file mode 100644
index 000000000000..cb1787f42c60
--- /dev/null
+++ b/www/iridium/files/patch-remoting_client_display_sys__opengl.h
@@ -0,0 +1,11 @@
+--- remoting/client/display/sys_opengl.h.orig 2019-03-11 22:01:01 UTC
++++ remoting/client/display/sys_opengl.h
+@@ -9,7 +9,7 @@
+
+ #if defined(OS_IOS)
+ #include <OpenGLES/ES3/gl.h>
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define GL_GLEXT_PROTOTYPES
+ #include <GL/gl.h>
+ #include <GL/glext.h>
diff --git a/www/iridium/files/patch-remoting_host_evaluate__capability.cc b/www/iridium/files/patch-remoting_host_evaluate__capability.cc
new file mode 100644
index 000000000000..565d577bd91b
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_evaluate__capability.cc
@@ -0,0 +1,11 @@
+--- remoting/host/evaluate_capability.cc.orig 2019-03-11 22:01:01 UTC
++++ remoting/host/evaluate_capability.cc
+@@ -50,7 +50,7 @@ base::FilePath BuildHostBinaryPath() {
+ }
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (path.BaseName().value() ==
+ FILE_PATH_LITERAL("chrome-remote-desktop-host")) {
+ return path;
diff --git a/www/iridium/files/patch-remoting_host_host__attributes.cc b/www/iridium/files/patch-remoting_host_host__attributes.cc
new file mode 100644
index 000000000000..d2a35b8d8d01
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_host__attributes.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_attributes.cc.orig 2019-09-09 21:55:22 UTC
++++ remoting/host/host_attributes.cc
+@@ -124,7 +124,7 @@ std::string GetHostAttributes() {
+ media::InitializeMediaFoundation()) {
+ result.push_back("HWEncoder");
+ }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ result.push_back("HWEncoder");
+ #endif
+
diff --git a/www/iridium/files/patch-remoting_host_host__details.cc b/www/iridium/files/patch-remoting_host_host__details.cc
new file mode 100644
index 000000000000..2467708caed9
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_host__details.cc
@@ -0,0 +1,11 @@
+--- remoting/host/host_details.cc.orig 2019-09-09 21:55:22 UTC
++++ remoting/host/host_details.cc
+@@ -22,7 +22,7 @@ std::string GetHostOperatingSystemName() {
+ return "Mac";
+ #elif defined(OS_CHROMEOS)
+ return "ChromeOS";
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return "Linux";
+ #elif defined(OS_ANDROID)
+ return "Android";
diff --git a/www/iridium/files/patch-remoting_host_host__main.cc b/www/iridium/files/patch-remoting_host_host__main.cc
new file mode 100644
index 000000000000..72f86cb90395
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_host__main.cc
@@ -0,0 +1,27 @@
+--- remoting/host/host_main.cc.orig 2019-10-30 16:20:58 UTC
++++ remoting/host/host_main.cc
+@@ -49,9 +49,9 @@ int DesktopProcessMain();
+ int FileChooserMain();
+ int RdpDesktopSessionMain();
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ int XSessionChooserMain();
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ namespace {
+
+@@ -146,10 +146,10 @@ MainRoutineFn SelectMainRoutine(const std::string& pro
+ } else if (process_type == kProcessTypeRdpDesktopSession) {
+ main_routine = &RdpDesktopSessionMain;
+ #endif // defined(OS_WIN)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ } else if (process_type == kProcessTypeXSessionChooser) {
+ main_routine = &XSessionChooserMain;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ return main_routine;
diff --git a/www/iridium/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc b/www/iridium/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
new file mode 100644
index 000000000000..ca1e5dce0129
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_it2me_it2me__native__messaging__host__main.cc
@@ -0,0 +1,35 @@
+--- remoting/host/it2me/it2me_native_messaging_host_main.cc.orig 2020-02-03 21:52:49 UTC
++++ remoting/host/it2me/it2me_native_messaging_host_main.cc
+@@ -29,12 +29,12 @@
+ #include "remoting/host/switches.h"
+ #include "remoting/host/usage_stats_consent.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+
+ #include "base/linux_util.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_MACOSX)
+ #include "base/mac/mac_util.h"
+@@ -112,7 +112,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+
+ remoting::LoadResources("");
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Required in order for us to run multiple X11 threads.
+ XInitThreads();
+
+@@ -128,7 +128,7 @@ int It2MeNativeMessagingHostMain(int argc, char** argv
+ // Need to prime the host OS version value for linux to prevent IO on the
+ // network thread. base::GetLinuxDistro() caches the result.
+ base::GetLinuxDistro();
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ base::File read_file;
+ base::File write_file;
diff --git a/www/iridium/files/patch-remoting_host_me2me__desktop__environment.cc b/www/iridium/files/patch-remoting_host_me2me__desktop__environment.cc
new file mode 100644
index 000000000000..af1299dd2bdf
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_me2me__desktop__environment.cc
@@ -0,0 +1,11 @@
+--- remoting/host/me2me_desktop_environment.cc.orig 2019-09-09 21:55:22 UTC
++++ remoting/host/me2me_desktop_environment.cc
+@@ -129,7 +129,7 @@ bool Me2MeDesktopEnvironment::InitializeSecurity(
+
+ // Otherwise, if the session is shared with the local user start monitoring
+ // the local input and create the in-session UI.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool want_user_interface = false;
+ #elif defined(OS_MACOSX)
+ // Don't try to display any UI on top of the system's login screen as this
diff --git a/www/iridium/files/patch-remoting_host_remoting__me2me__host.cc b/www/iridium/files/patch-remoting_host_remoting__me2me__host.cc
new file mode 100644
index 000000000000..4773f4846b88
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_remoting__me2me__host.cc
@@ -0,0 +1,108 @@
+--- remoting/host/remoting_me2me_host.cc.orig 2020-03-16 18:40:33 UTC
++++ remoting/host/remoting_me2me_host.cc
+@@ -118,13 +118,13 @@
+ #include "remoting/host/mac/permission_utils.h"
+ #endif // defined(OS_MACOSX)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <gtk/gtk.h>
+ #include "base/linux_util.h"
+ #include "remoting/host/audio_capturer_linux.h"
+ #include "remoting/host/linux/certificate_watcher.h"
+ #include "ui/gfx/x/x11.h"
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_WIN)
+ #include <commctrl.h>
+@@ -159,11 +159,11 @@ const char kApplicationName[] = "chromoting";
+ const char kStdinConfigPath[] = "-";
+ #endif // !defined(REMOTING_MULTI_PROCESS)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The command line switch used to pass name of the pipe to capture audio on
+ // linux.
+ const char kAudioPipeSwitchName[] = "audio-pipe-name";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ // The command line switch used to pass name of the unix domain socket used to
+@@ -357,7 +357,7 @@ class HostProcess : public ConfigWatcher::Delegate,
+
+ std::unique_ptr<ChromotingHostContext> context_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Watch for certificate changes and kill the host when changes occur
+ std::unique_ptr<CertificateWatcher> cert_watcher_;
+ #endif
+@@ -582,10 +582,10 @@ bool HostProcess::InitWithCommandLine(const base::Comm
+ enable_window_capture_ = cmd_line->HasSwitch(kWindowIdSwitchName);
+ if (enable_window_capture_) {
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ LOG(WARNING) << "Window capturing is not fully supported on Linux or "
+ "Windows.";
+-#endif // defined(OS_LINUX) || defined(OS_WIN)
++#endif // defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+
+ // uint32_t is large enough to hold window IDs on all platforms.
+ uint32_t window_id;
+@@ -780,7 +780,7 @@ void HostProcess::CreateAuthenticatorFactory() {
+ DCHECK(third_party_auth_config_.token_url.is_valid());
+ DCHECK(third_party_auth_config_.token_validation_url.is_valid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!cert_watcher_) {
+ cert_watcher_.reset(new CertificateWatcher(
+ base::Bind(&HostProcess::ShutdownHost, this, kSuccessExitCode),
+@@ -866,7 +866,7 @@ void HostProcess::StartOnUiThread() {
+ base::Bind(&HostProcess::OnPolicyUpdate, base::Unretained(this)),
+ base::Bind(&HostProcess::OnPolicyError, base::Unretained(this)));
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // If an audio pipe is specific on the command-line then initialize
+ // AudioCapturerLinux to capture from it.
+ base::FilePath audio_pipe_name = base::CommandLine::ForCurrentProcess()->
+@@ -875,7 +875,7 @@ void HostProcess::StartOnUiThread() {
+ remoting::AudioCapturerLinux::InitializePipeReader(
+ context_->audio_task_runner(), audio_pipe_name);
+ }
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ #if defined(OS_POSIX)
+ base::FilePath security_key_socket_name =
+@@ -930,7 +930,7 @@ void HostProcess::ShutdownOnUiThread() {
+ // It is now safe for the HostProcess to be deleted.
+ self_ = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Cause the global AudioPipeReader to be freed, otherwise the audio
+ // thread will remain in-use and prevent the process from exiting.
+ // TODO(wez): DesktopEnvironmentFactory should own the pipe reader.
+@@ -1529,7 +1529,7 @@ void HostProcess::StartHost() {
+ host_->AddExtension(std::make_unique<TestEchoExtension>());
+
+ // TODO(simonmorris): Get the maximum session duration from a policy.
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ host_->SetMaximumSessionDuration(base::TimeDelta::FromHours(20));
+ #endif
+
+@@ -1698,7 +1698,7 @@ void HostProcess::OnCrash(const std::string& function_
+ int HostProcessMain() {
+ HOST_LOG << "Starting host process: version " << STRINGIZE(VERSION);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ kReportOfflineReasonSwitchName)) {
+ // Required in order for us to run multiple X11 threads.
diff --git a/www/iridium/files/patch-remoting_host_switches.cc b/www/iridium/files/patch-remoting_host_switches.cc
new file mode 100644
index 000000000000..feb1d19fe0ec
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_switches.cc
@@ -0,0 +1,14 @@
+--- remoting/host/switches.cc.orig 2019-10-30 16:21:28 UTC
++++ remoting/host/switches.cc
+@@ -21,9 +21,9 @@ const char kProcessTypeHost[] = "host";
+ const char kProcessTypeRdpDesktopSession[] = "rdp_desktop_session";
+ const char kProcessTypeEvaluateCapability[] = "evaluate_capability";
+ const char kProcessTypeFileChooser[] = "file_chooser";
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ const char kProcessTypeXSessionChooser[] = "xsession_chooser";
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ const char kEvaluateCapabilitySwitchName[] = "evaluate-type";
+
diff --git a/www/iridium/files/patch-remoting_host_switches.h b/www/iridium/files/patch-remoting_host_switches.h
new file mode 100644
index 000000000000..39fcdf4bebb2
--- /dev/null
+++ b/www/iridium/files/patch-remoting_host_switches.h
@@ -0,0 +1,14 @@
+--- remoting/host/switches.h.orig 2019-10-30 16:21:42 UTC
++++ remoting/host/switches.h
+@@ -34,9 +34,9 @@ extern const char kProcessTypeHost[];
+ extern const char kProcessTypeRdpDesktopSession[];
+ extern const char kProcessTypeEvaluateCapability[];
+ extern const char kProcessTypeFileChooser[];
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ extern const char kProcessTypeXSessionChooser[];
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ extern const char kEvaluateCapabilitySwitchName[];
+
diff --git a/www/iridium/files/patch-remoting_resources_remoting__strings.grd b/www/iridium/files/patch-remoting_resources_remoting__strings.grd
new file mode 100644
index 000000000000..34c07b2c400d
--- /dev/null
+++ b/www/iridium/files/patch-remoting_resources_remoting__strings.grd
@@ -0,0 +1,20 @@
+--- remoting/resources/remoting_strings.grd.orig 2020-02-03 21:53:32 UTC
++++ remoting/resources/remoting_strings.grd
+@@ -1393,7 +1393,7 @@ If '<ph name="SERVICE_SCRIPT_NAME">$3<ex>org.chromium.
+ Open Screen Recording Preferences
+ </message>
+ </if>
+- <if expr="is_linux">
++ <if expr="is_posix">
+ <message name="IDS_SESSION_DIALOG_MESSAGE" desc="The message to show at the top of the session-selection dialog.">
+ Select a session to launch within your Chrome Remote Desktop environment. (Note that some session types may not support running within Chrome Remote Desktop and on the local console simultaneously.)
+ </message>
+@@ -1409,7 +1409,7 @@ If '<ph name="SERVICE_SCRIPT_NAME">$3<ex>org.chromium.
+ <message name="IDS_SESSION_DIALOG_DEFAULT_SESSION_COMMENT" desc="The comment for the entry to launch the default session.">
+ Launch the default XSession
+ </message>
+- </if> <!-- is_linux -->
++ </if> <!-- is_posix -->
+ </messages>
+ </release>
+ </grit>
diff --git a/www/iridium/files/patch-sandbox_features.gni b/www/iridium/files/patch-sandbox_features.gni
new file mode 100644
index 000000000000..b5a277f82178
--- /dev/null
+++ b/www/iridium/files/patch-sandbox_features.gni
@@ -0,0 +1,11 @@
+--- sandbox/features.gni.orig 2020-03-16 18:39:54 UTC
++++ sandbox/features.gni
+@@ -8,7 +8,7 @@ import("//build/config/nacl/config.gni")
+ # currently.
+ # Do not disable seccomp_bpf anywhere without talking to
+ # security@chromium.org!
+-use_seccomp_bpf = (is_linux || is_android) &&
++use_seccomp_bpf = (is_linux || is_android) && !is_bsd &&
+ (current_cpu == "x86" || current_cpu == "x64" ||
+ current_cpu == "arm" || current_cpu == "arm64" ||
+ current_cpu == "mipsel" || current_cpu == "mips64el")
diff --git a/www/iridium/files/patch-sandbox_linux_BUILD.gn b/www/iridium/files/patch-sandbox_linux_BUILD.gn
new file mode 100644
index 000000000000..d9c24596c644
--- /dev/null
+++ b/www/iridium/files/patch-sandbox_linux_BUILD.gn
@@ -0,0 +1,47 @@
+--- sandbox/linux/BUILD.gn.orig 2020-04-10 00:39:11 UTC
++++ sandbox/linux/BUILD.gn
+@@ -12,12 +12,12 @@ if (is_android) {
+ }
+
+ declare_args() {
+- compile_suid_client = is_linux
++ compile_suid_client = is_linux && !is_bsd
+
+- compile_credentials = is_linux
++ compile_credentials = is_linux && !is_bsd
+
+ # On Android, use plain GTest.
+- use_base_test_suite = is_linux
++ use_base_test_suite = is_linux && !is_bsd
+ }
+
+ if (is_nacl_nonsfi) {
+@@ -373,7 +373,7 @@ component("sandbox_services") {
+ public_deps += [ ":sandbox_services_headers" ]
+ }
+
+- if (is_nacl_nonsfi) {
++ if (is_nacl_nonsfi || is_bsd) {
+ cflags = [ "-fgnu-inline-asm" ]
+
+ sources -= [
+@@ -381,6 +381,8 @@ component("sandbox_services") {
+ "services/init_process_reaper.h",
+ "services/scoped_process.cc",
+ "services/scoped_process.h",
++ "services/syscall_wrappers.cc",
++ "services/syscall_wrappers.h",
+ "services/yama.cc",
+ "services/yama.h",
+ "syscall_broker/broker_channel.cc",
+@@ -399,6 +401,10 @@ component("sandbox_services") {
+ "syscall_broker/broker_process.h",
+ "syscall_broker/broker_simple_message.cc",
+ "syscall_broker/broker_simple_message.h",
++ ]
++ sources += [
++ "services/libc_interceptor.cc",
++ "services/libc_interceptor.h",
+ ]
+ } else if (!is_android) {
+ sources += [
diff --git a/www/iridium/files/patch-sandbox_linux_services_init__process__reaper.cc b/www/iridium/files/patch-sandbox_linux_services_init__process__reaper.cc
new file mode 100644
index 000000000000..ce19163df699
--- /dev/null
+++ b/www/iridium/files/patch-sandbox_linux_services_init__process__reaper.cc
@@ -0,0 +1,15 @@
+--- sandbox/linux/services/init_process_reaper.cc.orig 2019-03-11 22:01:01 UTC
++++ sandbox/linux/services/init_process_reaper.cc
+@@ -1,6 +1,7 @@
+ // Copyright 2013 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "sandbox/linux/services/init_process_reaper.h"
+
+@@ -100,3 +101,4 @@ bool CreateInitProcessReaper(base::OnceClosure post_fo
+ }
+
+ } // namespace sandbox.
++#endif
diff --git a/www/iridium/files/patch-sandbox_linux_services_libc__interceptor.cc b/www/iridium/files/patch-sandbox_linux_services_libc__interceptor.cc
new file mode 100644
index 000000000000..6046b28b1771
--- /dev/null
+++ b/www/iridium/files/patch-sandbox_linux_services_libc__interceptor.cc
@@ -0,0 +1,21 @@
+--- sandbox/linux/services/libc_interceptor.cc.orig 2020-03-16 18:39:54 UTC
++++ sandbox/linux/services/libc_interceptor.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <time.h>
+@@ -92,7 +94,7 @@ bool ReadTimeStruct(base::PickleIterator* iter,
+ } else {
+ base::AutoLock lock(g_timezones_lock.Get());
+ auto ret_pair = g_timezones.Get().insert(timezone);
+- output->tm_zone = ret_pair.first->c_str();
++ output->tm_zone = (char *)ret_pair.first->c_str();
+ }
+
+ return true;
diff --git a/www/iridium/files/patch-services_audio_BUILD.gn b/www/iridium/files/patch-services_audio_BUILD.gn
new file mode 100644
index 000000000000..32423e1a0600
--- /dev/null
+++ b/www/iridium/files/patch-services_audio_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/audio/BUILD.gn.orig 2020-03-16 18:39:54 UTC
++++ services/audio/BUILD.gn
+@@ -82,7 +82,7 @@ source_set("audio") {
+ "//services/service_manager/sandbox",
+ ]
+
+- if (is_linux) {
++ if ((is_linux) && (!is_bsd)) {
+ sources += [
+ "audio_sandbox_hook_linux.cc",
+ "audio_sandbox_hook_linux.h",
diff --git a/www/iridium/files/patch-services_device_geolocation_location__arbitrator.cc b/www/iridium/files/patch-services_device_geolocation_location__arbitrator.cc
new file mode 100644
index 000000000000..17db61b295df
--- /dev/null
+++ b/www/iridium/files/patch-services_device_geolocation_location__arbitrator.cc
@@ -0,0 +1,11 @@
+--- services/device/geolocation/location_arbitrator.cc.orig 2020-02-03 21:53:32 UTC
++++ services/device/geolocation/location_arbitrator.cc
+@@ -157,7 +157,7 @@ LocationArbitrator::NewNetworkLocationProvider(
+
+ std::unique_ptr<LocationProvider>
+ LocationArbitrator::NewSystemLocationProvider() {
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ return nullptr;
+ #else
+ return device::NewSystemLocationProvider();
diff --git a/www/iridium/files/patch-services_device_hid_BUILD.gn b/www/iridium/files/patch-services_device_hid_BUILD.gn
new file mode 100644
index 000000000000..01a7f29e58fa
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_BUILD.gn
@@ -0,0 +1,22 @@
+--- services/device/hid/BUILD.gn.orig 2019-06-04 18:55:28 UTC
++++ services/device/hid/BUILD.gn
+@@ -51,6 +51,19 @@ source_set("hid") {
+ deps += [ "//device/udev_linux" ]
+ }
+
++ if (is_bsd) {
++ sources -= [
++ "hid_connection_linux.cc",
++ "hid_connection_linux.h",
++ ]
++ sources += [
++ "hid_connection_freebsd.cc",
++ "hid_connection_freebsd.h",
++ "hid_service_freebsd.cc",
++ "hid_service_freebsd.h",
++ ]
++ }
++
+ if (is_chromeos) {
+ deps += [ "//chromeos/dbus/permission_broker" ]
+ }
diff --git a/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.cc b/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.cc
new file mode 100644
index 000000000000..42e0cc8b1986
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.cc
@@ -0,0 +1,243 @@
+--- services/device/hid/hid_connection_freebsd.cc.orig 2019-05-04 09:19:19 UTC
++++ services/device/hid/hid_connection_freebsd.cc
+@@ -0,0 +1,240 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_connection_freebsd.h"
++
++#include <dev/usb/usbhid.h>
++#include <dev/usb/usb_ioctl.h>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/location.h"
++#include "base/numerics/safe_math.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/strings/stringprintf.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_restrictions.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_service.h"
++
++namespace device {
++
++class HidConnectionFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::ScopedFD fd,
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::WeakPtr<HidConnectionFreeBSD> connection)
++ : fd_(std::move(fd)),
++ connection_(connection),
++ origin_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++ // Report buffers must always have room for the report ID.
++ report_buffer_size_ = device_info->max_input_report_size() + 1;
++ has_report_id_ = device_info->has_report_id();
++ }
++
++ ~BlockingTaskHelper() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
++
++ // Starts the FileDescriptorWatcher that reads input events from the device.
++ // Must be called on a thread that has a base::MessageLoopForIO.
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::internal::AssertBlockingAllowed();
++
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ fd_.get(), base::Bind(&BlockingTaskHelper::OnFileCanReadWithoutBlocking,
++ base::Unretained(this)));
++ }
++
++ void Write(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++
++ auto data = buffer->front();
++ size_t size = buffer->size();
++ // if report id is 0, it shouldn't be included
++ if (data[0] == 0) {
++ data++;
++ size--;
++ }
++
++ ssize_t result = HANDLE_EINTR(write(fd_.get(), data, size));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Write failed";
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), false));
++ } else {
++ if (static_cast<size_t>(result) != size)
++ HID_LOG(EVENT) << "Incomplete HID write: " << result << " != " << size;
++ origin_task_runner_->PostTask(FROM_HERE, base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ void GetFeatureReport(uint8_t report_id,
++ scoped_refptr<base::RefCountedBytes> buffer,
++ ReadCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_GET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to get feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else if (result == 0) {
++ HID_LOG(EVENT) << "Get feature result too short.";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false, nullptr, 0));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true, buffer, result));
++ }
++ }
++
++ void SendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_report_type = UHID_FEATURE_REPORT;
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ // FreeBSD does not require report id if it's not used
++ if (buffer->front()[0] == 0) {
++ ugd.ugd_data = buffer->front() + 1;
++ ugd.ugd_maxlen = buffer->size() - 1;
++ } else {
++ ugd.ugd_data = buffer->front();
++ ugd.ugd_maxlen = buffer->size();
++ }
++ int result = HANDLE_EINTR(
++ ioctl(fd_.get(), USB_SET_REPORT, &ugd));
++ if (result < 0) {
++ HID_PLOG(EVENT) << "Failed to send feature report";
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), false));
++ } else {
++ origin_task_runner_->PostTask(FROM_HERE,
++ base::BindOnce(std::move(callback), true));
++ }
++ }
++
++ private:
++ void OnFileCanReadWithoutBlocking() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ scoped_refptr<base::RefCountedBytes> buffer(new base::RefCountedBytes(report_buffer_size_));
++ unsigned char* data = buffer->front();
++ size_t length = report_buffer_size_;
++ if (!has_report_id_) {
++ // FreeBSD will not prefix the buffer with a report ID if report IDs are not
++ // used by the device. Prefix the buffer with 0.
++ *data++ = 0;
++ length--;
++ }
++
++ ssize_t bytes_read = HANDLE_EINTR(read(fd_.get(), data, length));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_PLOG(EVENT) << "Read failed";
++ // This assumes that the error is unrecoverable and disables reading
++ // from the device until it has been re-opened.
++ // TODO(reillyg): Investigate starting and stopping the file descriptor
++ // watcher in response to pending read requests so that per-request
++ // errors can be returned to the client.
++ file_watcher_.reset();
++ }
++ return;
++ }
++ if (!has_report_id_) {
++ // Behave as if the byte prefixed above as the the report ID was read.
++ bytes_read++;
++ }
++
++ origin_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&HidConnectionFreeBSD::ProcessInputReport,
++ connection_, buffer, bytes_read));
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++ base::ScopedFD fd_;
++ size_t report_buffer_size_;
++ bool has_report_id_;
++ base::WeakPtr<HidConnectionFreeBSD> connection_;
++ const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidConnectionFreeBSD::HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
++ : HidConnection(device_info),
++ blocking_task_runner_(std::move(blocking_task_runner)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(std::move(fd), device_info,
++ weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE, base::BindOnce(&BlockingTaskHelper::Start,
++ base::Unretained(helper_.get())));
++}
++
++HidConnectionFreeBSD::~HidConnectionFreeBSD() {}
++
++void HidConnectionFreeBSD::PlatformClose() {
++ // By closing the device on the blocking task runner 1) the requirement that
++ // base::ScopedFD is destroyed on a thread where I/O is allowed is satisfied
++ // and 2) any tasks posted to this task runner that refer to this file will
++ // complete before it is closed.
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++void HidConnectionFreeBSD::PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::Write, base::Unretained(helper_.get()),
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) {
++ // The first byte of the destination buffer is the report ID being requested
++ // and is overwritten by the feature report.
++ DCHECK_GT(device_info()->max_feature_report_size(), 0u);
++ scoped_refptr<base::RefCountedBytes> buffer(
++ new base::RefCountedBytes(device_info()->max_feature_report_size() + 1));
++ if (report_id != 0)
++ buffer->data()[0] = report_id;
++
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::GetFeatureReport,
++ base::Unretained(helper_.get()), report_id,
++ buffer, std::move(callback)));
++}
++
++void HidConnectionFreeBSD::PlatformSendFeatureReport(
++ scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::BindOnce(&BlockingTaskHelper::SendFeatureReport,
++ base::Unretained(helper_.get()), buffer, std::move(callback)));
++}
++
++} // namespace device
diff --git a/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.h b/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.h
new file mode 100644
index 000000000000..0b6704917991
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_hid__connection__freebsd.h
@@ -0,0 +1,71 @@
+--- services/device/hid/hid_connection_freebsd.h.orig 2019-05-01 15:21:27 UTC
++++ services/device/hid/hid_connection_freebsd.h
+@@ -0,0 +1,68 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++#define DEVICE_HID_HID_CONNECTION_FREEBSD_H_
++
++#include <stddef.h>
++#include <stdint.h>
++
++#include "base/files/scoped_file.h"
++#include "base/macros.h"
++#include "base/memory/ptr_util.h"
++#include "base/memory/ref_counted_memory.h"
++#include "base/memory/weak_ptr.h"
++#include "base/sequence_checker.h"
++#include "services/device/hid/hid_connection.h"
++
++namespace base {
++class SequencedTaskRunner;
++}
++
++namespace net {
++class IOBuffer;
++}
++
++namespace device {
++
++class HidConnectionFreeBSD : public HidConnection {
++ public:
++ HidConnectionFreeBSD(
++ scoped_refptr<HidDeviceInfo> device_info,
++ base::ScopedFD fd,
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
++
++ private:
++ friend class base::RefCountedThreadSafe<HidConnectionFreeBSD>;
++ class BlockingTaskHelper;
++
++ ~HidConnectionFreeBSD() override;
++
++ // HidConnection implementation.
++ void PlatformClose() override;
++ void PlatformWrite(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++ void PlatformGetFeatureReport(uint8_t report_id,
++ ReadCallback callback) override;
++ void PlatformSendFeatureReport(scoped_refptr<base::RefCountedBytes> buffer,
++ WriteCallback callback) override;
++
++ // |helper_| lives on the sequence to which |blocking_task_runner_| posts
++ // tasks so all calls must be posted there including this object's
++ // destruction.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ base::WeakPtrFactory<HidConnectionFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidConnectionFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_CONNECTION_FREEBSD_H_
diff --git a/www/iridium/files/patch-services_device_hid_hid__service.cc b/www/iridium/files/patch-services_device_hid_hid__service.cc
new file mode 100644
index 000000000000..cadfcbe6b358
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_hid__service.cc
@@ -0,0 +1,20 @@
+--- services/device/hid/hid_service.cc.orig 2019-03-11 22:01:01 UTC
++++ services/device/hid/hid_service.cc
+@@ -16,6 +16,8 @@
+
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ #include "services/device/hid/hid_service_linux.h"
++#elif defined(OS_BSD)
++#include "services/device/hid/hid_service_freebsd.h"
+ #elif defined(OS_MACOSX)
+ #include "services/device/hid/hid_service_mac.h"
+ #elif defined(OS_WIN)
+@@ -36,6 +38,8 @@ constexpr base::TaskTraits HidService::kBlockingTaskTr
+ std::unique_ptr<HidService> HidService::Create() {
+ #if defined(OS_LINUX) && defined(USE_UDEV)
+ return base::WrapUnique(new HidServiceLinux());
++#elif defined(OS_BSD)
++ return base::WrapUnique(new HidServiceFreeBSD());
+ #elif defined(OS_MACOSX)
+ return base::WrapUnique(new HidServiceMac());
+ #elif defined(OS_WIN)
diff --git a/www/iridium/files/patch-services_device_hid_hid__service__freebsd.cc b/www/iridium/files/patch-services_device_hid_hid__service__freebsd.cc
new file mode 100644
index 000000000000..1ede85233d94
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_hid__service__freebsd.cc
@@ -0,0 +1,386 @@
+--- services/device/hid/hid_service_freebsd.cc.orig 2020-03-17 15:11:01 UTC
++++ services/device/hid/hid_service_freebsd.cc
+@@ -0,0 +1,383 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "services/device/hid/hid_service_freebsd.h"
++
++#include <dev/usb/usb_ioctl.h>
++#include <stdint.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++
++#include <set>
++#include <string>
++#include <vector>
++
++#include "base/bind.h"
++#include "base/files/file_descriptor_watcher_posix.h"
++#include "base/files/file_enumerator.h"
++#include "base/files/file_util.h"
++#include "base/files/file.h"
++#include "base/location.h"
++#include "base/logging.h"
++#include "base/posix/eintr_wrapper.h"
++#include "base/single_thread_task_runner.h"
++#include "base/stl_util.h"
++#include "base/strings/pattern.h"
++#include "base/strings/stringprintf.h"
++#include "base/strings/sys_string_conversions.h"
++#include "base/strings/string_util.h"
++#include "base/strings/string_split.h"
++#include "base/task/post_task.h"
++#include "base/threading/scoped_blocking_call.h"
++#include "base/threading/thread_task_runner_handle.h"
++#include "components/device_event_log/device_event_log.h"
++#include "services/device/hid/hid_connection_freebsd.h"
++
++const int kMaxPermissionChecks = 5;
++
++namespace device {
++
++struct HidServiceFreeBSD::ConnectParams {
++ ConnectParams(scoped_refptr<HidDeviceInfo> device_info,
++ ConnectCallback callback)
++ : device_info(std::move(device_info)),
++ callback(std::move(callback)),
++ task_runner(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner(
++ base::CreateSequencedTaskRunner(kBlockingTaskTraits)) {}
++ ~ConnectParams() {}
++
++ scoped_refptr<HidDeviceInfo> device_info;
++ ConnectCallback callback;
++ scoped_refptr<base::SequencedTaskRunner> task_runner;
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
++ base::ScopedFD fd;
++};
++
++class HidServiceFreeBSD::BlockingTaskHelper {
++ public:
++ BlockingTaskHelper(base::WeakPtr<HidServiceFreeBSD> service)
++ : service_(std::move(service)),
++ task_runner_(base::ThreadTaskRunnerHandle::Get()) {
++ DETACH_FROM_SEQUENCE(sequence_checker_);
++
++ timer_.reset(new base::RepeatingTimer());
++ devd_buffer_ = new net::IOBufferWithSize(1024);
++ }
++
++ ~BlockingTaskHelper() {
++ }
++
++ void Start() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const base::FilePath kDevRoot("/dev");
++ const std::string kUHIDPattern("/dev/uhid*");
++
++ base::FileEnumerator enumerator(kDevRoot, false, base::FileEnumerator::FILES);
++ do {
++ const base::FilePath next_device_path(enumerator.Next());
++ const std::string next_device = next_device_path.value();
++ if (next_device.empty())
++ break;
++
++ if (base::MatchPattern(next_device, kUHIDPattern))
++ OnDeviceAdded(next_device.substr(5));
++ } while (true);
++
++ SetupDevdMonitor();
++
++ task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&HidServiceFreeBSD::FirstEnumerationComplete, service_));
++ }
++
++ bool HaveReadWritePermissions(std::string device_id) {
++ std::string device_node = "/dev/" + device_id;
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid())
++ return false;
++
++ return true;
++ }
++
++ void OnDeviceAdded(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ std::string device_node = "/dev/" + device_id;
++ uint16_t vendor_id = 0xffff;
++ uint16_t product_id = 0xffff;
++ std::string product_name = "";
++ std::string serial_number = "";
++
++ std::vector<uint8_t> report_descriptor;
++
++ base::internal::AssertBlockingAllowed();
++
++ base::FilePath device_path(device_node);
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(ERROR) << "Failed to open '" << device_node
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ return;
++ }
++
++ base::ScopedFD fd;
++ fd.reset(device_file.TakePlatformFile());
++
++ struct usb_gen_descriptor ugd;
++ ugd.ugd_data = NULL;
++ ugd.ugd_maxlen = 0xffff;
++ int result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor size";
++ return;
++ }
++
++ report_descriptor.resize(ugd.ugd_actlen);
++
++ ugd.ugd_data = report_descriptor.data();
++ ugd.ugd_maxlen = ugd.ugd_actlen;
++ result = HANDLE_EINTR(
++ ioctl(fd.get(), USB_GET_REPORT_DESC, &ugd));
++
++ if (result < 0) {
++ HID_LOG(ERROR) << "Failed to get report descriptor";
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info(new HidDeviceInfo(
++ device_id,
++ /*physical_device_id*/"",
++ vendor_id,
++ product_id,
++ product_name,
++ serial_number,
++ device::mojom::HidBusType::kHIDBusTypeUSB,
++ report_descriptor,
++ device_node));
++
++ task_runner_->PostTask(FROM_HERE, base::Bind(&HidServiceFreeBSD::AddDevice,
++ service_, device_info));
++ }
++
++ void OnDeviceRemoved(std::string device_id) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ task_runner_->PostTask(
++ FROM_HERE, base::Bind(&HidServiceFreeBSD::RemoveDevice, service_,
++ device_id));
++ }
++
++ private:
++
++ void CheckPendingPermissionChange() {
++ base::internal::AssertBlockingAllowed();
++ std::map<std::string, int>::iterator it;
++ for (it = permissions_checks_attempts_.begin(); it != permissions_checks_attempts_.end();) {
++ std::string device_name = it->first;
++ bool keep = true;
++ if (HaveReadWritePermissions(device_name)) {
++ OnDeviceAdded(device_name);
++ keep = false;
++ }
++ else if (it->second-- <= 0) {
++ HID_LOG(ERROR) << "Still don't have write permissions to '" << device_name
++ << "' after " << kMaxPermissionChecks << " attempts";
++ keep = false;
++ }
++
++ if (keep)
++ ++it;
++ else
++ permissions_checks_attempts_.erase(it++);
++ }
++
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++
++ void SetupDevdMonitor() {
++ base::internal::AssertBlockingAllowed();
++
++ int devd_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
++ if (devd_fd < 0)
++ return;
++
++ struct sockaddr_un sa;
++
++ sa.sun_family = AF_UNIX;
++ strlcpy(sa.sun_path, "/var/run/devd.seqpacket.pipe", sizeof(sa.sun_path));
++ if (connect(devd_fd, (struct sockaddr *) &sa, sizeof(sa)) < 0) {
++ close(devd_fd);
++ return;
++ }
++
++ devd_fd_.reset(devd_fd);
++ file_watcher_ = base::FileDescriptorWatcher::WatchReadable(
++ devd_fd_.get(), base::Bind(&BlockingTaskHelper::OnDevdMessageCanBeRead,
++ base::Unretained(this)));
++ }
++
++ void OnDevdMessageCanBeRead() {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++ ssize_t bytes_read = HANDLE_EINTR(recv(devd_fd_.get(), devd_buffer_->data(),
++ devd_buffer_->size() - 1, MSG_WAITALL));
++ if (bytes_read < 0) {
++ if (errno != EAGAIN) {
++ HID_LOG(ERROR) << "Read failed";
++ file_watcher_.reset();
++ }
++ return;
++ }
++
++ devd_buffer_->data()[bytes_read] = 0;
++ char *data = devd_buffer_->data();
++ // It may take some time for devd to change permissions
++ // on /dev/uhidX node. So do not fail immediately if
++ // open fail. Retry each second for kMaxPermissionChecks
++ // times before giving up entirely
++ if (base::StartsWith(data, "+uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '+'
++ if (HaveReadWritePermissions(device_name))
++ OnDeviceAdded(parts[0].substr(1));
++ else {
++ // Do not re-add to checks
++ if (permissions_checks_attempts_.find(device_name) == permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.insert(std::pair<std::string, int>(device_name, kMaxPermissionChecks));
++ timer_->Start(FROM_HERE, base::TimeDelta::FromSeconds(1),
++ this, &BlockingTaskHelper::CheckPendingPermissionChange);
++ }
++ }
++ }
++ }
++
++ if (base::StartsWith(data, "-uhid", base::CompareCase::SENSITIVE)) {
++ std::vector<std::string> parts = base::SplitString(
++ data, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
++ if (!parts.empty()) {
++ std::string device_name = parts[0].substr(1); // skip '-'
++ auto it = permissions_checks_attempts_.find(device_name);
++ if (it != permissions_checks_attempts_.end()) {
++ permissions_checks_attempts_.erase(it);
++ if (permissions_checks_attempts_.empty())
++ timer_->Stop();
++ }
++ OnDeviceRemoved(parts[0].substr(1));
++ }
++ }
++ }
++
++ SEQUENCE_CHECKER(sequence_checker_);
++
++ // This weak pointer is only valid when checked on this task runner.
++ base::WeakPtr<HidServiceFreeBSD> service_;
++ scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ std::unique_ptr<base::FileDescriptorWatcher::Controller> file_watcher_;
++ std::unique_ptr<base::RepeatingTimer> timer_;
++ base::ScopedFD devd_fd_;
++ scoped_refptr<net::IOBufferWithSize> devd_buffer_;
++ std::map<std::string, int> permissions_checks_attempts_;
++
++ DISALLOW_COPY_AND_ASSIGN(BlockingTaskHelper);
++};
++
++HidServiceFreeBSD::HidServiceFreeBSD()
++ : task_runner_(base::ThreadTaskRunnerHandle::Get()),
++ blocking_task_runner_(
++ base::CreateSequencedTaskRunner(kBlockingTaskTraits)),
++ weak_factory_(this) {
++ helper_ = std::make_unique<BlockingTaskHelper>(weak_factory_.GetWeakPtr());
++ blocking_task_runner_->PostTask(
++ FROM_HERE,
++ base::Bind(&BlockingTaskHelper::Start, base::Unretained(helper_.get())));
++}
++
++HidServiceFreeBSD::~HidServiceFreeBSD() {
++ blocking_task_runner_->DeleteSoon(FROM_HERE, helper_.release());
++}
++
++base::WeakPtr<HidService> HidServiceFreeBSD::GetWeakPtr() {
++ return weak_factory_.GetWeakPtr();
++}
++
++// static
++void HidServiceFreeBSD::OpenOnBlockingThread(
++ std::unique_ptr<ConnectParams> params) {
++ base::ScopedBlockingCall scoped_blocking_call(
++ FROM_HERE, base::BlockingType::MAY_BLOCK);
++ scoped_refptr<base::SequencedTaskRunner> task_runner = params->task_runner;
++
++ base::FilePath device_path(params->device_info->device_node());
++ base::File device_file;
++ int flags =
++ base::File::FLAG_OPEN | base::File::FLAG_READ | base::File::FLAG_WRITE;
++ device_file.Initialize(device_path, flags);
++ if (!device_file.IsValid()) {
++ HID_LOG(EVENT) << "Failed to open '" << params->device_info->device_node()
++ << "': "
++ << base::File::ErrorToString(device_file.error_details());
++ task_runner->PostTask(FROM_HERE,
++ base::BindOnce(std::move(params->callback), nullptr));
++ return;
++ }
++ params->fd.reset(device_file.TakePlatformFile());
++ task_runner->PostTask(FROM_HERE, base::BindOnce(&HidServiceFreeBSD::FinishOpen,
++ std::move(params)));
++}
++
++void HidServiceFreeBSD::Connect(const std::string& device_guid,
++ ConnectCallback callback) {
++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
++
++ const auto& map_entry = devices().find(device_guid);
++ if (map_entry == devices().end()) {
++ base::ThreadTaskRunnerHandle::Get()->PostTask(
++ FROM_HERE, base::BindOnce(std::move(callback), nullptr));
++ return;
++ }
++
++ scoped_refptr<HidDeviceInfo> device_info = map_entry->second;
++
++ auto params = std::make_unique<ConnectParams>(device_info, std::move(callback));
++ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner =
++ params->blocking_task_runner;
++
++ blocking_task_runner->PostTask(
++ FROM_HERE, base::BindOnce(&HidServiceFreeBSD::OpenOnBlockingThread,
++ std::move(params)));
++}
++
++// static
++void HidServiceFreeBSD::FinishOpen(std::unique_ptr<ConnectParams> params) {
++ DCHECK(params->fd.is_valid());
++
++ if (!base::SetNonBlocking(params->fd.get())) {
++ HID_PLOG(ERROR) << "Failed to set the non-blocking flag on the device fd";
++ std::move(params->callback).Run(nullptr);
++ }
++
++ std::move(params->callback).Run(base::MakeRefCounted<HidConnectionFreeBSD>(
++ std::move(params->device_info),
++ std::move(params->fd),
++ std::move(params->blocking_task_runner)
++ ));
++}
++
++} // namespace device
diff --git a/www/iridium/files/patch-services_device_hid_hid__service__freebsd.h b/www/iridium/files/patch-services_device_hid_hid__service__freebsd.h
new file mode 100644
index 000000000000..593c762ba5a1
--- /dev/null
+++ b/www/iridium/files/patch-services_device_hid_hid__service__freebsd.h
@@ -0,0 +1,50 @@
+--- services/device/hid/hid_service_freebsd.h.orig 2020-03-17 15:11:01 UTC
++++ services/device/hid/hid_service_freebsd.h
+@@ -0,0 +1,47 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef DEVICE_HID_HID_SERVICE_FREEBSD_H_
++#define DEVICE_HID_HID_SERVICE_FREEBSD_H_
++
++#include <string>
++
++#include "base/macros.h"
++#include "base/memory/ref_counted.h"
++#include "base/memory/weak_ptr.h"
++#include "base/timer/timer.h"
++#include "services/device/hid/hid_service.h"
++#include "net/base/io_buffer.h"
++
++namespace device {
++
++class HidServiceFreeBSD : public HidService {
++ public:
++ HidServiceFreeBSD();
++ ~HidServiceFreeBSD() override;
++
++ void Connect(const std::string& device_guid,
++ ConnectCallback connect) override;
++ base::WeakPtr<HidService> GetWeakPtr() override;
++
++ private:
++ struct ConnectParams;
++ class BlockingTaskHelper;
++
++ static void OpenOnBlockingThread(std::unique_ptr<ConnectParams> params);
++ static void FinishOpen(std::unique_ptr<ConnectParams> params);
++
++ const scoped_refptr<base::SequencedTaskRunner> task_runner_;
++ const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
++ // |helper_| lives on the sequence |blocking_task_runner_| posts to and holds
++ // a weak reference back to the service that owns it.
++ std::unique_ptr<BlockingTaskHelper> helper_;
++ base::WeakPtrFactory<HidServiceFreeBSD> weak_factory_;
++
++ DISALLOW_COPY_AND_ASSIGN(HidServiceFreeBSD);
++};
++
++} // namespace device
++
++#endif // DEVICE_HID_HID_SERVICE_FREEBSD_H_
diff --git a/www/iridium/files/patch-services_device_serial_BUILD.gn b/www/iridium/files/patch-services_device_serial_BUILD.gn
new file mode 100644
index 000000000000..81589aec985e
--- /dev/null
+++ b/www/iridium/files/patch-services_device_serial_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/serial/BUILD.gn.orig 2019-03-11 22:01:01 UTC
++++ services/device/serial/BUILD.gn
+@@ -4,7 +4,7 @@
+
+ import("//build/config/features.gni")
+
+-if (is_win || (is_linux && use_udev) || is_mac) {
++if (is_win || (is_linux && use_udev) || is_mac || is_bsd) {
+ config("platform_support") {
+ visibility = [ ":serial" ]
+ if (is_win) {
diff --git a/www/iridium/files/patch-services_device_serial_serial__io__handler__posix.cc b/www/iridium/files/patch-services_device_serial_serial__io__handler__posix.cc
new file mode 100644
index 000000000000..e05dd930bc94
--- /dev/null
+++ b/www/iridium/files/patch-services_device_serial_serial__io__handler__posix.cc
@@ -0,0 +1,11 @@
+--- services/device/serial/serial_io_handler_posix.cc.orig 2019-04-30 22:22:56 UTC
++++ services/device/serial/serial_io_handler_posix.cc
+@@ -66,7 +66,7 @@ bool BitrateToSpeedConstant(int bitrate, speed_t* spee
+ BITRATE_TO_SPEED_CASE(9600)
+ BITRATE_TO_SPEED_CASE(19200)
+ BITRATE_TO_SPEED_CASE(38400)
+-#if !defined(OS_MACOSX)
++#if !defined(OS_MACOSX) && !defined(OS_BSD)
+ BITRATE_TO_SPEED_CASE(57600)
+ BITRATE_TO_SPEED_CASE(115200)
+ BITRATE_TO_SPEED_CASE(230400)
diff --git a/www/iridium/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc b/www/iridium/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
new file mode 100644
index 000000000000..cff5f136f844
--- /dev/null
+++ b/www/iridium/files/patch-services_device_time__zone__monitor_time__zone__monitor__linux.cc
@@ -0,0 +1,14 @@
+--- services/device/time_zone_monitor/time_zone_monitor_linux.cc.orig 2020-03-16 18:39:54 UTC
++++ services/device/time_zone_monitor/time_zone_monitor_linux.cc
+@@ -127,7 +127,11 @@ class TimeZoneMonitorLinuxImpl
+ // false positives are harmless, assuming the false positive rate is
+ // reasonable.
+ const char* const kFilesToWatch[] = {
++#if defined(OS_BSD)
++ "/etc/localtime",
++#else
+ "/etc/localtime", "/etc/timezone", "/etc/TZ",
++#endif
+ };
+ for (size_t index = 0; index < base::size(kFilesToWatch); ++index) {
+ file_path_watchers_.push_back(std::make_unique<base::FilePathWatcher>());
diff --git a/www/iridium/files/patch-services_device_usb_BUILD.gn b/www/iridium/files/patch-services_device_usb_BUILD.gn
new file mode 100644
index 000000000000..7c3ad6a76957
--- /dev/null
+++ b/www/iridium/files/patch-services_device_usb_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/device/usb/BUILD.gn.orig 2019-09-09 21:55:22 UTC
++++ services/device/usb/BUILD.gn
+@@ -110,7 +110,7 @@ static_library("usb") {
+ ]
+ }
+
+- if (is_android || is_chromeos || is_linux) {
++ if ((is_android || is_chromeos || is_linux) && !is_bsd) {
+ sources += [
+ "usb_device_handle_usbfs.cc",
+ "usb_device_handle_usbfs.h",
diff --git a/www/iridium/files/patch-services_network_BUILD.gn b/www/iridium/files/patch-services_network_BUILD.gn
new file mode 100644
index 000000000000..be4d33bb2644
--- /dev/null
+++ b/www/iridium/files/patch-services_network_BUILD.gn
@@ -0,0 +1,10 @@
+--- services/network/BUILD.gn.orig 2020-03-16 18:40:34 UTC
++++ services/network/BUILD.gn
+@@ -260,7 +260,6 @@ jumbo_component("network_service") {
+
+ if (is_linux) {
+ deps += [
+- "//sandbox/linux:sandbox_services",
+ "//services/service_manager/sandbox:sandbox",
+ ]
+ }
diff --git a/www/iridium/files/patch-services_network_network__context.cc b/www/iridium/files/patch-services_network_network__context.cc
new file mode 100644
index 000000000000..888674c04595
--- /dev/null
+++ b/www/iridium/files/patch-services_network_network__context.cc
@@ -0,0 +1,11 @@
+--- services/network/network_context.cc.orig 2020-03-16 18:40:34 UTC
++++ services/network/network_context.cc
+@@ -1758,7 +1758,7 @@ URLRequestContextOwner NetworkContext::MakeURLRequestC
+
+ net::CookieCryptoDelegate* crypto_delegate = nullptr;
+ if (params_->enable_encrypted_cookies) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)
+ DCHECK(network_service_->os_crypt_config_set())
+ << "NetworkService::SetCryptConfig must be called before creating a "
+ "NetworkContext with encrypted cookies.";
diff --git a/www/iridium/files/patch-services_network_network__sandbox__hook__linux.cc b/www/iridium/files/patch-services_network_network__sandbox__hook__linux.cc
new file mode 100644
index 000000000000..b7b7be5079f4
--- /dev/null
+++ b/www/iridium/files/patch-services_network_network__sandbox__hook__linux.cc
@@ -0,0 +1,18 @@
+--- services/network/network_sandbox_hook_linux.cc.orig 2019-03-11 22:01:01 UTC
++++ services/network/network_sandbox_hook_linux.cc
+@@ -14,6 +14,7 @@ using sandbox::syscall_broker::MakeBrokerCommandSet;
+ namespace network {
+
+ bool NetworkPreSandboxHook(service_manager::SandboxLinux::Options options) {
++#if !defined(OS_BSD)
+ auto* instance = service_manager::SandboxLinux::GetInstance();
+
+ // TODO(tsepez): remove universal permission under filesytem root.
+@@ -32,6 +33,7 @@ bool NetworkPreSandboxHook(service_manager::SandboxLin
+ service_manager::SandboxLinux::PreSandboxHook(), options);
+
+ instance->EngageNamespaceSandboxIfPossible();
++#endif // defined(OS_BSD)
+ return true;
+ }
+
diff --git a/www/iridium/files/patch-services_network_network__service.cc b/www/iridium/files/patch-services_network_network__service.cc
new file mode 100644
index 000000000000..1e69f01166a8
--- /dev/null
+++ b/www/iridium/files/patch-services_network_network__service.cc
@@ -0,0 +1,20 @@
+--- services/network/network_service.cc.orig 2020-03-16 18:40:34 UTC
++++ services/network/network_service.cc
+@@ -63,7 +63,7 @@
+ #include "third_party/boringssl/src/include/openssl/cpu.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !BUILDFLAG(IS_CHROMECAST)
+ #include "components/os_crypt/key_storage_config_linux.h"
+ #endif
+
+@@ -627,7 +627,7 @@ void NetworkService::OnCertDBChanged() {
+ net::CertDatabase::GetInstance()->NotifyObserversCertDBChanged();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void NetworkService::SetCryptConfig(mojom::CryptConfigPtr crypt_config) {
+ #if !BUILDFLAG(IS_CHROMECAST)
+ DCHECK(!os_crypt_config_set_);
diff --git a/www/iridium/files/patch-services_network_network__service.h b/www/iridium/files/patch-services_network_network__service.h
new file mode 100644
index 000000000000..5f21c0217c3a
--- /dev/null
+++ b/www/iridium/files/patch-services_network_network__service.h
@@ -0,0 +1,11 @@
+--- services/network/network_service.h.orig 2020-03-16 18:40:34 UTC
++++ services/network/network_service.h
+@@ -150,7 +150,7 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkService
+ base::span<const uint8_t> config,
+ mojom::NetworkService::UpdateLegacyTLSConfigCallback callback) override;
+ void OnCertDBChanged() override;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void SetCryptConfig(mojom::CryptConfigPtr crypt_config) override;
+ #endif
+ #if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS))
diff --git a/www/iridium/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc b/www/iridium/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
new file mode 100644
index 000000000000..4c391c6c24c4
--- /dev/null
+++ b/www/iridium/files/patch-services_resource__coordinator_memory__instrumentation_queued__request__dispatcher.cc
@@ -0,0 +1,20 @@
+--- services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc.orig 2019-09-09 21:55:22 UTC
++++ services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc
+@@ -43,7 +43,7 @@ namespace {
+ uint32_t CalculatePrivateFootprintKb(const mojom::RawOSMemDump& os_dump,
+ uint32_t shared_resident_kb) {
+ DCHECK(os_dump.platform_private_footprint);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ uint64_t rss_anon_bytes = os_dump.platform_private_footprint->rss_anon_bytes;
+ uint64_t vm_swap_bytes = os_dump.platform_private_footprint->vm_swap_bytes;
+ return (rss_anon_bytes + vm_swap_bytes) / 1024;
+@@ -82,7 +82,7 @@ memory_instrumentation::mojom::OSMemDumpPtr CreatePubl
+ os_dump->is_peak_rss_resettable = internal_os_dump.is_peak_rss_resettable;
+ os_dump->private_footprint_kb =
+ CalculatePrivateFootprintKb(internal_os_dump, shared_resident_kb);
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ os_dump->private_footprint_swap_kb =
+ internal_os_dump.platform_private_footprint->vm_swap_bytes / 1024;
+ #endif
diff --git a/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h b/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
new file mode 100644
index 000000000000..f8b2542dae6e
--- /dev/null
+++ b/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics.h
@@ -0,0 +1,32 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h.orig 2019-07-24 18:58:35 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h
+@@ -28,9 +28,9 @@ class COMPONENT_EXPORT(
+ mojom::RawOSMemDump*);
+ static std::vector<mojom::VmRegionPtr> GetProcessMemoryMaps(base::ProcessId);
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ static void SetProcSmapsForTesting(FILE*);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(OSMetricsTest, ParseProcSmaps);
+@@ -44,7 +44,7 @@ class COMPONENT_EXPORT(
+ static std::vector<mojom::VmRegionPtr> GetProcessModules(base::ProcessId);
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // Provides information on the dump state of resident pages.
+ enum class MappedAndResidentPagesDumpState {
+ // Access to /proc/<pid>/pagemap can be denied for android devices running
+@@ -68,7 +68,7 @@ class COMPONENT_EXPORT(
+ // TODO(chiniforooshan): move to /base/process/process_metrics_linux.cc after
+ // making sure that peak RSS is useful.
+ static size_t GetPeakResidentSetSize(base::ProcessId pid);
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ };
+
+ } // namespace memory_instrumentation
diff --git a/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc b/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
new file mode 100644
index 000000000000..b38e937afd6f
--- /dev/null
+++ b/www/iridium/files/patch-services_resource__coordinator_public_cpp_memory__instrumentation_os__metrics__linux.cc
@@ -0,0 +1,103 @@
+--- services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc.orig 2019-07-24 18:58:35 UTC
++++ services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics_linux.cc
+@@ -22,8 +22,10 @@
+ #include "build/build_config.h"
+ #include "services/resource_coordinator/public/cpp/memory_instrumentation/os_metrics.h"
+
++#if !defined(OS_BSD)
+ // Symbol with virtual address of the start of ELF header of the current binary.
+ extern char __ehdr_start;
++#endif
+
+ namespace memory_instrumentation {
+
+@@ -86,6 +88,7 @@ struct ModuleData {
+
+ ModuleData GetMainModuleData() {
+ ModuleData module_data;
++#if !defined(OS_BSD)
+ Dl_info dl_info;
+ if (dladdr(&__ehdr_start, &dl_info)) {
+ base::debug::ElfBuildIdBuffer build_id;
+@@ -96,6 +99,7 @@ ModuleData GetMainModuleData() {
+ module_data.build_id = std::string(build_id, build_id_length);
+ }
+ }
++#endif
+ return module_data;
+ }
+
+@@ -143,14 +147,14 @@ bool ParseSmapsHeader(const char* header_line,
+ // Build ID is needed to symbolize heap profiles, and is generated only on
+ // official builds. Build ID is only added for the current library (chrome)
+ // since it is racy to read other libraries which can be unmapped any time.
+-#if defined(OFFICIAL_BUILD)
++#if defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+ if (!region->mapped_file.empty() &&
+ base::StartsWith(main_module_data.path, region->mapped_file,
+ base::CompareCase::SENSITIVE) &&
+ !main_module_data.build_id.empty()) {
+ region->module_debugid = main_module_data.build_id;
+ }
+-#endif // defined(OFFICIAL_BUILD)
++#endif // defined(OFFICIAL_BUILD) && !defined(OS_BSD)
+
+ return res;
+ }
+@@ -239,6 +243,7 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+ mojom::RawOSMemDump* dump) {
+ // TODO(chiniforooshan): There is no need to read both /statm and /status
+ // files. Refactor to get everything from /status using ProcessMetric.
++#if !defined(OS_BSD)
+ auto statm_file = GetProcPidDir(pid).Append("statm");
+ auto autoclose = base::ScopedFD(open(statm_file.value().c_str(), O_RDONLY));
+ int statm_fd = autoclose.get();
+@@ -253,6 +258,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ if (!success)
+ return false;
++#else
++ uint64_t resident_pages = 0;
++ uint64_t shared_pages = 0;
++#endif
+
+ auto process_metrics = CreateProcessMetrics(pid);
+
+@@ -293,6 +302,10 @@ bool OSMetrics::FillOSMemoryDump(base::ProcessId pid,
+
+ // static
+ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMaps(base::ProcessId pid) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return std::vector<VmRegionPtr>();
++#else
+ std::vector<VmRegionPtr> maps;
+ uint32_t res = 0;
+ if (g_proc_smaps_for_testing) {
+@@ -310,6 +323,7 @@ std::vector<VmRegionPtr> OSMetrics::GetProcessMemoryMa
+ return std::vector<VmRegionPtr>();
+
+ return maps;
++#endif
+ }
+
+ // static
+@@ -317,6 +331,10 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ const size_t start_address,
+ const size_t end_address,
+ std::vector<uint8_t>* accessed_pages_bitmap) {
++#if defined(OS_BSD)
++ NOTIMPLEMENTED();
++ return OSMetrics::MappedAndResidentPagesDumpState::kFailure;
++#else
+ const char* kPagemap = "/proc/self/pagemap";
+
+ base::ScopedFILE pagemap_file(fopen(kPagemap, "r"));
+@@ -358,6 +376,7 @@ OSMetrics::MappedAndResidentPagesDumpState OSMetrics::
+ }
+ }
+ return OSMetrics::MappedAndResidentPagesDumpState::kSuccess;
++#endif
+ }
+
+ // static
diff --git a/www/iridium/files/patch-services_service__manager_embedder_main.cc b/www/iridium/files/patch-services_service__manager_embedder_main.cc
new file mode 100644
index 000000000000..9c935b9f16e1
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_embedder_main.cc
@@ -0,0 +1,11 @@
+--- services/service_manager/embedder/main.cc.orig 2019-10-21 19:06:40 UTC
++++ services/service_manager/embedder/main.cc
+@@ -272,7 +272,7 @@ int Main(const MainParams& params) {
+ #endif
+ base::EnableTerminationOnOutOfMemory();
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The various desktop environments set this environment variable that
+ // allows the dbus client library to connect directly to the bus. When this
+ // variable is not set (test environments like xvfb-run), the dbus client
diff --git a/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.cc b/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.cc
new file mode 100644
index 000000000000..56f27b3a6704
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.cc
@@ -0,0 +1,19 @@
+--- services/service_manager/embedder/set_process_title_linux.cc.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/embedder/set_process_title_linux.cc
+@@ -49,6 +49,8 @@
+ extern char** environ;
+
+ static char** g_main_argv = NULL;
++
++#if !defined(OS_FREEBSD)
+ static char* g_orig_argv0 = NULL;
+
+ void setproctitle(const char* fmt, ...) {
+@@ -101,6 +103,7 @@ void setproctitle(const char* fmt, ...) {
+ va_end(ap);
+ g_main_argv[1] = NULL;
+ }
++#endif
+
+ // A version of this built into glibc would not need this function, since
+ // it could stash the argv pointer in __libc_start_main(). But we need it.
diff --git a/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.h b/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.h
new file mode 100644
index 000000000000..0e1eb1ce1d32
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_embedder_set__process__title__linux.h
@@ -0,0 +1,20 @@
+--- services/service_manager/embedder/set_process_title_linux.h.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/embedder/set_process_title_linux.h
+@@ -5,6 +5,9 @@
+ #ifndef SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+ #define SERVICES_SERVICE_MANAGER_EMBEDDER_SET_PROCESS_TITLE_LINUX_H_
+
++#include "build/build_config.h"
++
++#if !defined(OS_FREEBSD)
+ // Set the process title that will show in "ps" and similar tools. Takes
+ // printf-style format string and arguments. After calling setproctitle()
+ // the original main() argv[] array should not be used. By default, the
+@@ -14,6 +17,7 @@
+ // This signature and naming is to be compatible with most other Unix
+ // implementations of setproctitle().
+ void setproctitle(const char* fmt, ...);
++#endif
+
+ // Initialize state needed for setproctitle() on Linux. Pass the argv pointer
+ // from main() to setproctitle_init() before calling setproctitle().
diff --git a/www/iridium/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn b/www/iridium/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
new file mode 100644
index 000000000000..4e2b8913bd0b
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_public_cpp_service__executable_BUILD.gn
@@ -0,0 +1,14 @@
+--- services/service_manager/public/cpp/service_executable/BUILD.gn.orig 2019-04-30 22:22:56 UTC
++++ services/service_manager/public/cpp/service_executable/BUILD.gn
+@@ -29,6 +29,11 @@ source_set("support") {
+ "//sandbox/linux:seccomp_bpf",
+ ]
+ }
++ if (is_bsd) {
++ deps -= [
++ "//sandbox/linux:seccomp_bpf"
++ ]
++ }
+ }
+
+ source_set("switches") {
diff --git a/www/iridium/files/patch-services_service__manager_sandbox_BUILD.gn b/www/iridium/files/patch-services_service__manager_sandbox_BUILD.gn
new file mode 100644
index 000000000000..79967079b24d
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_sandbox_BUILD.gn
@@ -0,0 +1,11 @@
+--- services/service_manager/sandbox/BUILD.gn.orig 2020-03-16 18:40:34 UTC
++++ services/service_manager/sandbox/BUILD.gn
+@@ -26,7 +26,7 @@ component("sandbox") {
+ "//base",
+ "//sandbox:common",
+ ]
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/bpf_audio_policy_linux.cc",
+ "linux/bpf_audio_policy_linux.h",
diff --git a/www/iridium/files/patch-services_service__manager_zygote_common_zygote__features.gni b/www/iridium/files/patch-services_service__manager_zygote_common_zygote__features.gni
new file mode 100644
index 000000000000..d6dc2aed4fb6
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_common_zygote__features.gni
@@ -0,0 +1,8 @@
+--- services/service_manager/zygote/common/zygote_features.gni.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/zygote/common/zygote_features.gni
+@@ -2,4 +2,4 @@
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-use_zygote_handle = is_posix && !is_android && !is_mac
++use_zygote_handle = is_posix && !is_android && !is_mac && !is_bsd
diff --git a/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc b/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
new file mode 100644
index 000000000000..95e322cffb48
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.cc
@@ -0,0 +1,40 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.cc.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.cc
+@@ -72,6 +72,7 @@ ZygoteHostImpl* ZygoteHostImpl::GetInstance() {
+ }
+
+ void ZygoteHostImpl::Init(const base::CommandLine& command_line) {
++#if !defined(OS_BSD)
+ if (command_line.HasSwitch(service_manager::switches::kNoSandbox)) {
+ return;
+ }
+@@ -122,6 +123,7 @@ void ZygoteHostImpl::Init(const base::CommandLine& com
+ "you can try using --"
+ << service_manager::switches::kNoSandbox << ".";
+ }
++#endif
+ }
+
+ void ZygoteHostImpl::AddZygotePid(pid_t pid) {
+@@ -146,6 +148,7 @@ pid_t ZygoteHostImpl::LaunchZygote(
+ base::CommandLine* cmd_line,
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds) {
++#if !defined(OS_BSD)
+ int fds[2];
+ CHECK_EQ(0, socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds));
+ CHECK(base::UnixDomainSocket::EnableReceiveProcessId(fds[0]));
+@@ -210,9 +213,12 @@ pid_t ZygoteHostImpl::LaunchZygote(
+
+ AddZygotePid(pid);
+ return pid;
++#else
++ return 0;
++#endif
+ }
+
+-#if !defined(OS_OPENBSD)
++#if !defined(OS_BSD)
+ void ZygoteHostImpl::AdjustRendererOOMScore(base::ProcessHandle pid,
+ int score) {
+ // 1) You can't change the oom_score_adj of a non-dumpable process
diff --git a/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h b/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
new file mode 100644
index 000000000000..2d846ba1732e
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_host_zygote__host__impl__linux.h
@@ -0,0 +1,13 @@
+--- services/service_manager/zygote/host/zygote_host_impl_linux.h.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/zygote/host/zygote_host_impl_linux.h
+@@ -44,8 +44,10 @@ class COMPONENT_EXPORT(SERVICE_MANAGER_ZYGOTE) ZygoteH
+ base::ScopedFD* control_fd,
+ base::FileHandleMappingVector additional_remapped_fds);
+
++#if !defined(OS_BSD)
+ void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) override;
++#endif
+ bool HasZygote() { return !zygote_pids_.empty(); }
+
+ private:
diff --git a/www/iridium/files/patch-services_service__manager_zygote_zygote__host__linux.h b/www/iridium/files/patch-services_service__manager_zygote_zygote__host__linux.h
new file mode 100644
index 000000000000..bdf4e5ff2926
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_zygote__host__linux.h
@@ -0,0 +1,16 @@
+--- services/service_manager/zygote/zygote_host_linux.h.orig 2019-03-11 22:01:02 UTC
++++ services/service_manager/zygote/zygote_host_linux.h
+@@ -30,11 +30,13 @@ class ZygoteHost {
+ // after the first render has been forked.
+ virtual int GetRendererSandboxStatus() const = 0;
+
++#if !defined(OS_BSD)
+ // Adjust the OOM score of the given renderer's PID. The allowed
+ // range for the score is [0, 1000], where higher values are more
+ // likely to be killed by the OOM killer.
+ virtual void AdjustRendererOOMScore(base::ProcessHandle process_handle,
+ int score) = 0;
++#endif
+ };
+
+ } // namespace service_manager
diff --git a/www/iridium/files/patch-services_service__manager_zygote_zygote__linux.cc b/www/iridium/files/patch-services_service__manager_zygote_zygote__linux.cc
new file mode 100644
index 000000000000..3a2ff8db55e7
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_zygote__linux.cc
@@ -0,0 +1,15 @@
+--- services/service_manager/zygote/zygote_linux.cc.orig 2019-06-04 18:55:28 UTC
++++ services/service_manager/zygote/zygote_linux.cc
+@@ -1,6 +1,7 @@
+ // Copyright (c) 2012 The Chromium Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+ // found in the LICENSE file.
++#if 0
+
+ #include "services/service_manager/zygote/zygote_linux.h"
+
+@@ -657,3 +658,4 @@ bool Zygote::HandleGetSandboxStatus(int fd, base::Pick
+ }
+
+ } // namespace service_manager
++#endif
diff --git a/www/iridium/files/patch-services_service__manager_zygote_zygote__main__linux.cc b/www/iridium/files/patch-services_service__manager_zygote_zygote__main__linux.cc
new file mode 100644
index 000000000000..c1871f137977
--- /dev/null
+++ b/www/iridium/files/patch-services_service__manager_zygote_zygote__main__linux.cc
@@ -0,0 +1,48 @@
+--- services/service_manager/zygote/zygote_main_linux.cc.orig 2020-02-03 21:53:32 UTC
++++ services/service_manager/zygote/zygote_main_linux.cc
+@@ -11,7 +11,9 @@
+ #include <stddef.h>
+ #include <stdint.h>
+ #include <string.h>
++#if !defined(OS_BSD)
+ #include <sys/prctl.h>
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+@@ -99,6 +101,7 @@ static bool CreateInitProcessReaper(
+ // created through the setuid sandbox.
+ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox,
+ base::OnceClosure post_fork_parent_callback) {
++#if !defined(OS_BSD)
+ DCHECK(setuid_sandbox);
+ DCHECK(setuid_sandbox->IsSuidSandboxChild());
+
+@@ -131,6 +134,9 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxCli
+
+ CHECK(service_manager::SandboxDebugHandling::SetDumpableStatusAndHandlers());
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ static void DropAllCapabilities(int proc_fd) {
+@@ -176,6 +182,7 @@ static void EnterLayerOneSandbox(service_manager::Sand
+
+ bool ZygoteMain(
+ std::vector<std::unique_ptr<ZygoteForkDelegate>> fork_delegates) {
++#if !defined(OS_BSD)
+ sandbox::SetAmZygoteOrRenderer(true, GetSandboxFD());
+
+ auto* linux_sandbox = service_manager::SandboxLinux::GetInstance();
+@@ -238,6 +245,9 @@ bool ZygoteMain(
+
+ // This function call can return multiple times, once per fork().
+ return zygote.ProcessRequests();
++#else
++ return false;
++#endif
+ }
+
+ } // namespace service_manager
diff --git a/www/iridium/files/patch-services_tracing_public_cpp_perfetto_trace__time.cc b/www/iridium/files/patch-services_tracing_public_cpp_perfetto_trace__time.cc
new file mode 100644
index 000000000000..61e7cb3830ad
--- /dev/null
+++ b/www/iridium/files/patch-services_tracing_public_cpp_perfetto_trace__time.cc
@@ -0,0 +1,23 @@
+--- services/tracing/public/cpp/perfetto/trace_time.cc.orig 2020-03-17 10:13:47 UTC
++++ services/tracing/public/cpp/perfetto/trace_time.cc
+@@ -13,13 +13,17 @@ namespace tracing {
+
+ int64_t TraceBootTicksNow() {
+ // On Windows and Mac, TRACE_TIME_TICKS_NOW() behaves like boottime already.
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ struct timespec ts;
++#if defined(OS_BSD)
++ int res = clock_gettime(CLOCK_UPTIME, &ts);
++#else
+ int res = clock_gettime(CLOCK_BOOTTIME, &ts);
++#endif
+ if (res != -1)
+ return static_cast<int64_t>(perfetto::base::FromPosixTimespec(ts).count());
+ #endif
+ return TRACE_TIME_TICKS_NOW().since_origin().InNanoseconds();
+ }
+
+-} // namespace tracing
+\ No newline at end of file
++} // namespace tracing
diff --git a/www/iridium/files/patch-services_tracing_public_cpp_stack__sampling_tracing__sampler__profiler.cc b/www/iridium/files/patch-services_tracing_public_cpp_stack__sampling_tracing__sampler__profiler.cc
new file mode 100644
index 000000000000..06d34c96b6cd
--- /dev/null
+++ b/www/iridium/files/patch-services_tracing_public_cpp_stack__sampling_tracing__sampler__profiler.cc
@@ -0,0 +1,11 @@
+--- services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc.orig 2020-03-17 10:16:22 UTC
++++ services/tracing/public/cpp/stack_sampling/tracing_sampler_profiler.cc
+@@ -362,7 +362,7 @@ TracingSamplerProfiler::TracingProfileBuilder::GetCall
+ }
+ #endif
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // Linux ELF module IDs are 160bit integers, which we need to mangle
+ // down to 128bit integers to match the id that Breakpad outputs.
+ // Example on version '66.0.3359.170' x64:
diff --git a/www/iridium/files/patch-services_video__capture_broadcasting__receiver.cc b/www/iridium/files/patch-services_video__capture_broadcasting__receiver.cc
new file mode 100644
index 000000000000..31c7ab5e263a
--- /dev/null
+++ b/www/iridium/files/patch-services_video__capture_broadcasting__receiver.cc
@@ -0,0 +1,20 @@
+--- services/video_capture/broadcasting_receiver.cc.orig 2019-12-16 21:51:28 UTC
++++ services/video_capture/broadcasting_receiver.cc
+@@ -40,7 +40,7 @@ void CloneSharedBufferHandle(const mojo::ScopedSharedB
+ void CloneSharedBufferToRawFileDescriptorHandle(
+ const mojo::ScopedSharedBufferHandle& source,
+ media::mojom::VideoBufferHandlePtr* target) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // |source| is unwrapped to a |PlatformSharedMemoryRegion|, from whence a file
+ // descriptor can be extracted which is then mojo-wrapped.
+ base::subtle::PlatformSharedMemoryRegion platform_region =
+@@ -183,7 +183,7 @@ void BroadcastingReceiver::BufferContext::
+ ConvertRawFileDescriptorToSharedBuffer() {
+ DCHECK(buffer_handle_->is_shared_memory_via_raw_file_descriptor());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The conversion unwraps the descriptor from its mojo handle to the raw file
+ // descriptor (ie, an int). This is used to create a
+ // PlatformSharedMemoryRegion which is then wrapped as a
diff --git a/www/iridium/files/patch-skia_ext_SkMemory__new__handler.cpp b/www/iridium/files/patch-skia_ext_SkMemory__new__handler.cpp
new file mode 100644
index 000000000000..e41e957b73ea
--- /dev/null
+++ b/www/iridium/files/patch-skia_ext_SkMemory__new__handler.cpp
@@ -0,0 +1,20 @@
+--- skia/ext/SkMemory_new_handler.cpp.orig 2019-03-11 22:01:02 UTC
++++ skia/ext/SkMemory_new_handler.cpp
+@@ -77,7 +77,7 @@ static void* malloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = malloc(size);
+ #else
+ // It's the responsibility of the caller to check the return value.
+@@ -97,7 +97,7 @@ static void* calloc_nothrow(size_t size) {
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it
+ // doesn't work as intended everywhere.
+ void* result;
+-#if defined(OS_IOS)
++#if defined(OS_IOS) || defined(OS_BSD)
+ result = calloc(1, size);
+ #else
+ // It's the responsibility of the caller to check the return value.
diff --git a/www/iridium/files/patch-third__party_angle_BUILD.gn b/www/iridium/files/patch-third__party_angle_BUILD.gn
new file mode 100644
index 000000000000..330949cb3773
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/angle/BUILD.gn.orig 2020-03-16 18:42:05 UTC
++++ third_party/angle/BUILD.gn
+@@ -384,6 +384,7 @@ angle_static_library("angle_gpu_info_util") {
+ "X11",
+ "Xi",
+ "Xext",
++ "GL",
+ ]
+ }
+ }
diff --git a/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
new file mode 100644
index 000000000000..3d393c5b6483
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__internal.h
@@ -0,0 +1,16 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_internal.h.orig 2019-03-11 22:07:59 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_internal.h
+@@ -14,8 +14,13 @@
+ namespace angle
+ {
+
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices);
++
+ // Defined in SystemInfo_libpci when GPU_INFO_USE_LIBPCI is defined.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices);
++#if defined(__FreeBSD__)
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices);
++#endif
+ // Defined in SystemInfo_x11 when GPU_INFO_USE_X11 is defined.
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version);
+
diff --git a/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
new file mode 100644
index 000000000000..8c7b858de64b
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__libpci.cpp
@@ -0,0 +1,90 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp.orig 2019-03-11 22:07:59 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp
+@@ -12,6 +12,11 @@
+ #include <pci/pci.h>
+ #include <unistd.h>
+
++#if defined(__FreeBSD__)
++#include <fcntl.h>
++#include <sys/pciio.h>
++#endif
++
+ #include "common/angleutils.h"
+ #include "common/debug.h"
+
+@@ -82,6 +87,75 @@ struct LibPCI : private angle::NonCopyable
+ };
+
+ } // anonymous namespace
++
++#if defined(__FreeBSD__)
++// Adds an entry per PCI GPU found and fills the device and vendor ID.
++bool GetPCIDevicesFreeBSD(std::vector<GPUDeviceInfo> *devices)
++{
++ int fd;
++ struct pci_conf_io conf;
++ struct pci_conf *matches;
++ uint32_t offset = 0;
++
++ fd = open("/dev/pci", O_RDONLY);
++ if (fd < 0)
++ return false;
++
++ matches = new struct pci_conf[32];
++ conf.generation = 0;
++ do {
++ conf.pat_buf_len = 0;
++ conf.num_patterns = 0;
++ conf.patterns = NULL;
++ conf.match_buf_len = 32 * sizeof(struct pci_conf);
++ conf.num_matches = 32;
++ conf.matches = matches;
++ conf.offset = offset;
++ conf.status = PCI_GETCONF_ERROR;
++ if (ioctl(fd, PCIOCGETCONF, &conf) < 0) {
++ if (errno == ENODEV)
++ break;
++ }
++ /* PCI_GETCONF_LIST_CHANGED would require us to start over. */
++ if (conf.status == PCI_GETCONF_ERROR || conf.status == PCI_GETCONF_LIST_CHANGED) {
++ break;
++ }
++
++ for (unsigned int i = 0; i < conf.num_matches; i++) {
++ uint16_t device_class = (matches[i].pc_class << 8) | matches[i].pc_subclass;
++
++ // Skip non-GPU devices
++ switch (device_class)
++ {
++ case PCI_CLASS_DISPLAY_VGA:
++ case PCI_CLASS_DISPLAY_XGA:
++ case PCI_CLASS_DISPLAY_3D:
++ break;
++ default:
++ continue;
++ }
++
++ // Skip unknown devices
++ if (matches[i].pc_vendor == 0 || matches[i].pc_device == 0) {
++ continue;
++ }
++
++ GPUDeviceInfo info;
++ info.vendorId = matches[i].pc_vendor;
++ info.deviceId = matches[i].pc_device;
++
++ devices->push_back(info);
++ }
++ offset += conf.num_matches;
++ } while (conf.status == PCI_GETCONF_MORE_DEVS);
++
++ delete[] matches;
++
++ close(fd);
++
++ return true;
++}
++#endif
+
+ // Adds an entry per PCI GPU found and fills the device and vendor ID.
+ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo> *devices)
diff --git a/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
new file mode 100644
index 000000000000..d69b549c46b1
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__linux.cpp
@@ -0,0 +1,21 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp.orig 2019-03-11 22:07:59 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_linux.cpp
+@@ -71,10 +71,18 @@ bool GetPCIDevicesWithLibPCI(std::vector<GPUDeviceInfo
+
+ bool GetSystemInfo(SystemInfo *info)
+ {
++#if defined(__FreeBSD__)
++ if (!CollectMesaCardInfo(&(info->gpus)))
++ {
++ if (!GetPCIDevicesFreeBSD(&(info->gpus)))
++ return false;
++ }
++#else
+ if (!GetPCIDevicesWithLibPCI(&(info->gpus)))
+ {
+ return false;
+ }
++#endif
+
+ if (info->gpus.size() == 0)
+ {
diff --git a/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
new file mode 100644
index 000000000000..6b9bc94938ad
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_gpu__info__util_SystemInfo__x11.cpp
@@ -0,0 +1,55 @@
+--- third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp.orig 2019-03-11 22:07:59 UTC
++++ third_party/angle/src/gpu_info_util/SystemInfo_x11.cpp
+@@ -8,6 +8,8 @@
+
+ #include "gpu_info_util/SystemInfo_internal.h"
+
++#include <GL/glx.h>
++#include <GL/glxext.h>
+ #include <X11/Xlib.h>
+
+ #include "common/debug.h"
+@@ -18,8 +20,43 @@
+ # error SystemInfo_x11.cpp compiled without GPU_INFO_USE_X11
+ #endif
+
++#define GLX_RENDERER_VENDOR_ID_MESA 0x8183
++#define GLX_RENDERER_DEVICE_ID_MESA 0x8184
++
+ namespace angle
+ {
++
++bool CollectMesaCardInfo(std::vector<GPUDeviceInfo> *devices)
++{
++
++ unsigned int vid[3], did[3];
++
++ Display *display = XOpenDisplay(NULL);
++ if (!display) {
++ return false;
++ }
++
++ PFNGLXQUERYRENDERERINTEGERMESAPROC queryInteger =
++ (PFNGLXQUERYRENDERERINTEGERMESAPROC) glXGetProcAddressARB((const GLubyte *)
++ "glXQueryRendererIntegerMESA");
++
++ if (!queryInteger)
++ return false;
++
++ bool vendor_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_VENDOR_ID_MESA, vid);
++ bool device_ret =
++ queryInteger(display, 0, 0, GLX_RENDERER_DEVICE_ID_MESA, did);
++
++ if (vendor_ret && device_ret) {
++ GPUDeviceInfo info;
++ info.vendorId = vid[0];
++ info.deviceId = did[0];
++ devices->push_back(info);
++ }
++
++ return true;
++}
+
+ bool GetNvidiaDriverVersionWithXNVCtrl(std::string *version)
+ {
diff --git a/www/iridium/files/patch-third__party_angle_src_libANGLE_Display.cpp b/www/iridium/files/patch-third__party_angle_src_libANGLE_Display.cpp
new file mode 100644
index 000000000000..48998ce95915
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_libANGLE_Display.cpp
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/Display.cpp.orig 2020-03-16 18:42:05 UTC
++++ third_party/angle/src/libANGLE/Display.cpp
+@@ -286,7 +286,7 @@ rx::DisplayImpl *CreateDisplayFromAttribs(EGLAttrib di
+ {
+ impl = rx::CreateVulkanWin32Display(state);
+ }
+-# elif defined(ANGLE_PLATFORM_LINUX)
++# elif defined(ANGLE_PLATFORM_POSIX)
+ if (rx::IsVulkanXcbDisplayAvailable())
+ {
+ impl = rx::CreateVulkanXcbDisplay(state);
diff --git a/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h b/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
new file mode 100644
index 000000000000..380c2f0a1a4f
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_driver__utils.h
@@ -0,0 +1,11 @@
+--- third_party/angle/src/libANGLE/renderer/driver_utils.h.orig 2020-03-16 18:42:06 UTC
++++ third_party/angle/src/libANGLE/renderer/driver_utils.h
+@@ -122,7 +122,7 @@ inline bool IsWindows()
+
+ inline bool IsLinux()
+ {
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ return true;
+ #else
+ return false;
diff --git a/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_vulkan_DisplayVk__api.h b/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_vulkan_DisplayVk__api.h
new file mode 100644
index 000000000000..aa021274cc80
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_src_libANGLE_renderer_vulkan_DisplayVk__api.h
@@ -0,0 +1,15 @@
+--- third_party/angle/src/libANGLE/renderer/vulkan/DisplayVk_api.h.orig 2020-02-03 21:54:48 UTC
++++ third_party/angle/src/libANGLE/renderer/vulkan/DisplayVk_api.h
+@@ -19,10 +19,10 @@ bool IsVulkanWin32DisplayAvailable();
+ DisplayImpl *CreateVulkanWin32Display(const egl::DisplayState &state);
+ #endif // defined(ANGLE_PLATFORM_WINDOWS)
+
+-#if defined(ANGLE_PLATFORM_LINUX)
++#if defined(ANGLE_PLATFORM_POSIX)
+ bool IsVulkanXcbDisplayAvailable();
+ DisplayImpl *CreateVulkanXcbDisplay(const egl::DisplayState &state);
+-#endif // defined(ANGLE_PLATFORM_LINUX)
++#endif // defined(ANGLE_PLATFORM_POSIX)
+
+ #if defined(ANGLE_PLATFORM_ANDROID)
+ bool IsVulkanAndroidDisplayAvailable();
diff --git a/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c b/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
new file mode 100644
index 000000000000..c03540dc02ea
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_loader.c
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/loader.c.orig 2020-02-03 21:54:58 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/loader.c
+@@ -238,7 +238,7 @@ void *loader_device_heap_realloc(const struct loader_d
+ }
+
+ // Environment variables
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+
+ static inline bool IsHighIntegrity() {
+ return geteuid() != getuid() || getegid() != getgid();
diff --git a/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h b/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
new file mode 100644
index 000000000000..674705f68fd5
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_third__party_vulkan-loader_src_loader_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h.orig 2019-03-11 22:08:05 UTC
++++ third_party/angle/third_party/vulkan-loader/src/loader/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/www/iridium/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h b/www/iridium/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
new file mode 100644
index 000000000000..824788f6aa33
--- /dev/null
+++ b/www/iridium/files/patch-third__party_angle_third__party_vulkan-validation-layers_src_layers_vk__loader__platform.h
@@ -0,0 +1,11 @@
+--- third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h.orig 2019-03-11 22:08:06 UTC
++++ third_party/angle/third_party/vulkan-validation-layers/src/layers/vk_loader_platform.h
+@@ -31,7 +31,7 @@
+ #include "vulkan/vk_platform.h"
+ #include "vulkan/vk_sdk_platform.h"
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ /* Linux-specific common code: */
+
+ // Headers:
diff --git a/www/iridium/files/patch-third__party_blink_renderer_BUILD.gn b/www/iridium/files/patch-third__party_blink_renderer_BUILD.gn
new file mode 100644
index 000000000000..3ee19aa5429f
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_BUILD.gn
@@ -0,0 +1,13 @@
+--- third_party/blink/renderer/BUILD.gn.orig 2020-03-16 18:40:34 UTC
++++ third_party/blink/renderer/BUILD.gn
+@@ -45,8 +45,8 @@ config("inside_blink") {
+ "-Wconversion",
+ "-Wno-float-conversion",
+ "-Wno-sign-conversion",
+- "-Wno-implicit-float-conversion",
+- "-Wno-implicit-int-conversion",
++# "-Wno-implicit-float-conversion",
++# "-Wno-implicit-int-conversion",
+ ]
+
+ if (!is_chromeos || default_toolchain != "//build/toolchain/cros:target") {
diff --git a/www/iridium/files/patch-third__party_blink_renderer_controller_blink__initializer.cc b/www/iridium/files/patch-third__party_blink_renderer_controller_blink__initializer.cc
new file mode 100644
index 000000000000..f2b1624738c8
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_controller_blink__initializer.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/controller/blink_initializer.cc.orig 2020-03-17 10:17:22 UTC
++++ third_party/blink/renderer/controller/blink_initializer.cc
+@@ -69,7 +69,7 @@
+ #include "third_party/blink/renderer/controller/memory_usage_monitor_posix.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX) || \
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_WIN)
+ #include "third_party/blink/renderer/controller/highest_pmf_reporter.h"
+ #include "third_party/blink/renderer/controller/user_level_memory_pressure_signal_generator.h"
+@@ -146,7 +146,7 @@ void InitializeCommon(Platform* platform, mojo::Binder
+ CrashMemoryMetricsReporterImpl::Instance();
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX) || \
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_WIN)
+ // Initialize UserLevelMemoryPressureSignalGenerator so it starts monitoring.
+ if (UserLevelMemoryPressureSignalGenerator::Enabled())
diff --git a/www/iridium/files/patch-third__party_blink_renderer_controller_memory__usage__monitor__posix.h b/www/iridium/files/patch-third__party_blink_renderer_controller_memory__usage__monitor__posix.h
new file mode 100644
index 000000000000..0c30711ac49d
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_controller_memory__usage__monitor__posix.h
@@ -0,0 +1,47 @@
+--- third_party/blink/renderer/controller/memory_usage_monitor_posix.h.orig 2020-03-17 10:18:29 UTC
++++ third_party/blink/renderer/controller/memory_usage_monitor_posix.h
+@@ -12,7 +12,7 @@
+ #include "third_party/blink/renderer/controller/controller_export.h"
+ #include "third_party/blink/renderer/controller/memory_usage_monitor.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/blink/public/mojom/memory_usage_monitor_linux.mojom-blink.h"
+ #endif
+
+@@ -21,7 +21,7 @@ namespace blink {
+ // MemoryUsageMonitor implementation for Android and Linux.
+ class CONTROLLER_EXPORT MemoryUsageMonitorPosix
+ : public MemoryUsageMonitor
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ public mojom::blink::MemoryUsageMonitorLinux
+ #endif
+@@ -29,7 +29,7 @@ class CONTROLLER_EXPORT MemoryUsageMonitorPosix
+ public:
+ MemoryUsageMonitorPosix() = default;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static void Bind(
+ mojo::PendingReceiver<mojom::blink::MemoryUsageMonitorLinux> receiver);
+ #endif
+@@ -47,7 +47,7 @@ class CONTROLLER_EXPORT MemoryUsageMonitorPosix
+ uint64_t* vm_size,
+ uint64_t* vm_hwm_size);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // mojom::MemoryUsageMonitorLinux implementations:
+ void SetProcFiles(base::File statm_file, base::File status_file) override;
+ #endif
+@@ -65,7 +65,7 @@ class CONTROLLER_EXPORT MemoryUsageMonitorPosix
+ base::ScopedFD statm_fd_;
+ base::ScopedFD status_fd_;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ mojo::Receiver<mojom::blink::MemoryUsageMonitorLinux> receiver_{this};
+ #endif
+ };
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc b/www/iridium/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
new file mode 100644
index 000000000000..1ba55b799c74
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_editing_editing__behavior.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/editing/editing_behavior.cc.orig 2020-03-16 18:39:56 UTC
++++ third_party/blink/renderer/core/editing/editing_behavior.cc
+@@ -274,7 +274,7 @@ bool EditingBehavior::ShouldInsertCharacter(const Keyb
+ // unexpected behaviour
+ if (ch < ' ')
+ return false;
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // According to XKB map no keyboard combinations with ctrl key are mapped to
+ // printable characters, however we need the filter as the DomKey/text could
+ // contain printable characters.
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc b/www/iridium/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
new file mode 100644
index 000000000000..af22ef50a74c
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_html_canvas_canvas__async__blob__creator.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc.orig 2020-02-03 21:52:51 UTC
++++ third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
+@@ -41,7 +41,7 @@ constexpr base::TimeDelta kEncodeRowSlackBeforeDeadlin
+ base::TimeDelta::FromMicroseconds(100);
+
+ /* The value is based on user statistics on Nov 2017. */
+-#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN))
++#if (defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)) || defined(OS_BSD)
+ const double kIdleTaskStartTimeoutDelayMs = 1000.0;
+ #else
+ const double kIdleTaskStartTimeoutDelayMs = 4000.0; // For ChromeOS, Mobile
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc b/www/iridium/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
new file mode 100644
index 000000000000..d05dcc105788
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_html_forms_internal__popup__menu.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/html/forms/internal_popup_menu.cc.orig 2020-03-16 18:40:35 UTC
++++ third_party/blink/renderer/core/html/forms/internal_popup_menu.cc
+@@ -122,7 +122,7 @@ class InternalPopupMenu::ItemIterationContext {
+ is_in_group_(false),
+ buffer_(buffer) {
+ DCHECK(buffer_);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On other platforms, the <option> background color is the same as the
+ // <select> background color. On Linux, that makes the <option>
+ // background color very dark, so by default, try to use a lighter
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc b/www/iridium/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
new file mode 100644
index 000000000000..5f3d6ec67939
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_inspector_inspector__memory__agent.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/inspector/inspector_memory_agent.cc.orig 2019-09-09 21:55:24 UTC
++++ third_party/blink/renderer/core/inspector/inspector_memory_agent.cc
+@@ -184,7 +184,7 @@ InspectorMemoryAgent::GetSamplingProfileById(uint32_t
+
+ Vector<String> InspectorMemoryAgent::Symbolize(
+ const WebVector<void*>& addresses) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // TODO(alph): Move symbolization to the client.
+ Vector<void*> addresses_to_symbolize;
+ for (size_t i = 0; i < addresses.size(); i++) {
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_layout_layout__view.cc b/www/iridium/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
new file mode 100644
index 000000000000..eb2c92cf0610
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_layout_layout__view.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/layout/layout_view.cc.orig 2020-03-16 18:40:35 UTC
++++ third_party/blink/renderer/core/layout/layout_view.cc
+@@ -59,7 +59,7 @@
+ #include "third_party/blink/renderer/platform/instrumentation/tracing/traced_value.h"
+ #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -326,7 +326,7 @@ void LayoutView::UpdateLayout() {
+ DCHECK(!layout_state_);
+ LayoutState root_layout_state(*this);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // The font code in FontPlatformData does not have a direct connection to the
+ // document, the frame or anything from which we could retrieve the device
+ // scale factor. After using zoom for DSF, the GraphicsContext does only ever
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc b/www/iridium/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
new file mode 100644
index 000000000000..8414327a53f4
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_paint_paint__layer.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/core/paint/paint_layer.cc.orig 2020-03-16 18:40:35 UTC
++++ third_party/blink/renderer/core/paint/paint_layer.cc
+@@ -106,7 +106,7 @@ namespace {
+ static CompositingQueryMode g_compositing_query_mode =
+ kCompositingQueriesAreOnlyAllowedInCertainDocumentLifecyclePhases;
+
+-#ifdef OS_LINUX
++#if defined(OS_LINUX) || defined(OS_BSD)
+ struct SameSizeAsPaintLayer : DisplayItemClient {
+ // The bit fields may fit into the machine word of DisplayItemClient which
+ // has only 8-bit data.
diff --git a/www/iridium/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc b/www/iridium/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
new file mode 100644
index 000000000000..2d02c5dfa4c2
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_core_scroll_scrollbar__theme__aura.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc.orig 2020-03-16 18:39:56 UTC
++++ third_party/blink/renderer/core/scroll/scrollbar_theme_aura.cc
+@@ -137,7 +137,7 @@ bool ScrollbarThemeAura::SupportsDragSnapBack() const
+ // Disable snapback on desktop Linux to better integrate with the desktop
+ // behavior. Typically, Linux apps do not implement scrollbar snapback (this
+ // is true for at least GTK and QT apps).
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ return false;
+ #endif
+
+@@ -301,7 +301,7 @@ ScrollbarPart ScrollbarThemeAura::PartsToInvalidateOnT
+
+ bool ScrollbarThemeAura::ShouldCenterOnThumb(const Scrollbar& scrollbar,
+ const WebMouseEvent& event) {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS))
++#if ((defined(OS_BSD) || defined(OS_LINUX)) && !defined(OS_CHROMEOS))
+ if (event.button == WebPointerProperties::Button::kMiddle)
+ return true;
+ #endif
diff --git a/www/iridium/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc b/www/iridium/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc
new file mode 100644
index 000000000000..14dc2ef5bb1a
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_modules_mediastream_processed__local__audio__source.cc
@@ -0,0 +1,11 @@
+--- third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc.orig 2020-03-16 18:39:56 UTC
++++ third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
+@@ -444,7 +444,7 @@ void ProcessedLocalAudioSource::CaptureUsingProcessor(
+ bool key_pressed) {
+ #if defined(OS_WIN) || defined(OS_MACOSX)
+ DCHECK_LE(volume, 1.0);
+-#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_OPENBSD)
++#elif (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // We have a special situation on Linux where the microphone volume can be
+ // "higher than maximum". The input volume slider in the sound preference
+ // allows the user to set a scaling that is higher than 100%. It means that
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_BUILD.gn b/www/iridium/files/patch-third__party_blink_renderer_platform_BUILD.gn
new file mode 100644
index 000000000000..6c239154d0c0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_BUILD.gn
@@ -0,0 +1,10 @@
+--- third_party/blink/renderer/platform/BUILD.gn.orig 2020-03-16 18:40:35 UTC
++++ third_party/blink/renderer/platform/BUILD.gn
+@@ -100,6 +100,7 @@ executable("character_data_generator") {
+ "//build/win:default_exe_manifest",
+ "//third_party/icu",
+ ]
++ libs = [ "cxxrt" ]
+ }
+
+ # This isn't strictly necessary since we can just add the deps to "platform",
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
new file mode 100644
index 000000000000..086b16ed616f
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.cc.orig 2020-02-03 21:52:52 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.cc
+@@ -76,7 +76,7 @@ static const char kColorEmojiLocale[] = "und-Zsye";
+
+ SkFontMgr* FontCache::static_font_manager_ = nullptr;
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float FontCache::device_scale_factor_ = 1.0;
+ #endif
+
+@@ -115,7 +115,7 @@ FontCache::FontCache()
+ FontPlatformData* FontCache::SystemFontPlatformData(
+ const FontDescription& font_description) {
+ const AtomicString& family = FontCache::SystemFontFamily();
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ if (family.IsEmpty() || family == font_family_names::kSystemUi)
+ return nullptr;
+ #else
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
new file mode 100644
index 000000000000..ea74c8b323ef
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__cache.h
@@ -0,0 +1,58 @@
+--- third_party/blink/renderer/platform/fonts/font_cache.h.orig 2020-02-03 21:52:52 UTC
++++ third_party/blink/renderer/platform/fonts/font_cache.h
+@@ -58,7 +58,7 @@
+ #include "third_party/skia/include/core/SkFontMgr.h"
+ #include "third_party/skia/include/core/SkRefCnt.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/font_fallback_linux.h"
+ #endif
+
+@@ -166,7 +166,7 @@ class PLATFORM_EXPORT FontCache {
+ sk_sp<SkFontMgr> FontManager() { return font_manager_; }
+ static void SetFontManager(sk_sp<SkFontMgr>);
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ // These are needed for calling QueryRenderStyleForStrike, since
+ // gfx::GetFontRenderParams makes distinctions based on DSF.
+ static float DeviceScaleFactor() { return device_scale_factor_; }
+@@ -241,11 +241,11 @@ class PLATFORM_EXPORT FontCache {
+ const FontDescription&);
+ #endif // defined(OS_ANDROID)
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static bool GetFontForCharacter(UChar32,
+ const char* preferred_locale,
+ gfx::FallbackFontData*);
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FontDataFromFontPlatformData(
+ const FontPlatformData*,
+@@ -317,12 +317,12 @@ class PLATFORM_EXPORT FontCache {
+ const FontFaceCreationParams&,
+ std::string& name);
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ static AtomicString GetFamilyNameForCharacter(SkFontMgr*,
+ UChar32,
+ const FontDescription&,
+ FontFallbackPriority);
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ scoped_refptr<SimpleFontData> FallbackOnStandardFontStyle(
+ const FontDescription&,
+@@ -356,7 +356,7 @@ class PLATFORM_EXPORT FontCache {
+ std::unique_ptr<FallbackFamilyStyleCache> fallback_params_cache_;
+ #endif // defined(OS_WIN)
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ static float device_scale_factor_;
+ #endif
+
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
new file mode 100644
index 000000000000..3c38c7f4dc44
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__description.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_description.cc.orig 2019-12-16 21:50:53 UTC
++++ third_party/blink/renderer/platform/fonts/font_description.cc
+@@ -38,7 +38,7 @@
+ #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
+ #include "third_party/blink/renderer/platform/wtf/text/string_hasher.h"
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/font_cache.h"
+ #endif
+
+@@ -225,7 +225,7 @@ FontCacheKey FontDescription::CacheKey(
+ static_cast<unsigned>(fields_.orientation_) << 1 | // bit 2-3
+ static_cast<unsigned>(fields_.subpixel_text_position_); // bit 1
+
+-#if defined(OS_LINUX) || defined(OS_CHROMEOS)
++#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_BSD)
+ float device_scale_factor_for_key = FontCache::DeviceScaleFactor();
+ #else
+ float device_scale_factor_for_key = 1.0f;
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
new file mode 100644
index 000000000000..4445ec96128b
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__metrics.cc
@@ -0,0 +1,29 @@
+--- third_party/blink/renderer/platform/fonts/font_metrics.cc.orig 2019-07-24 18:58:42 UTC
++++ third_party/blink/renderer/platform/fonts/font_metrics.cc
+@@ -38,7 +38,7 @@
+
+ namespace blink {
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // This is the largest VDMX table which we'll try to load and parse.
+ static const size_t kMaxVDMXTableSize = 1024 * 1024; // 1 MB
+ #endif
+@@ -60,7 +60,7 @@ void FontMetrics::AscentDescentWithHacks(
+ int vdmx_ascent = 0, vdmx_descent = 0;
+ bool is_vdmx_valid = false;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Manually digging up VDMX metrics is only applicable when bytecode hinting
+ // using FreeType. With DirectWrite or CoreText, no bytecode hinting is ever
+ // done. This code should be pushed into FreeType (hinted font metrics).
+@@ -106,7 +106,7 @@ void FontMetrics::AscentDescentWithHacks(
+ visual_overflow_inflation_for_ascent = 1;
+ if (descent < metrics.fDescent) {
+ visual_overflow_inflation_for_descent = 1;
+-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ // When subpixel positioning is enabled, if the descent is rounded down,
+ // the descent part of the glyph may be truncated when displayed in a
+ // 'overflow: hidden' container. To avoid that, borrow 1 unit from the
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
new file mode 100644
index 000000000000..4766c40ab521
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_font__unique__name__lookup.cc
@@ -0,0 +1,20 @@
+--- third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc.orig 2019-06-04 18:55:30 UTC
++++ third_party/blink/renderer/platform/fonts/font_unique_name_lookup.cc
+@@ -8,7 +8,7 @@
+ #if defined(OS_ANDROID)
+ #include "third_party/blink/public/mojom/font_unique_name_lookup/font_unique_name_lookup.mojom-blink.h"
+ #include "third_party/blink/renderer/platform/fonts/android/font_unique_name_lookup_android.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "third_party/blink/renderer/platform/fonts/linux/font_unique_name_lookup_linux.h"
+ #elif defined(OS_WIN)
+ #include "third_party/blink/renderer/platform/fonts/win/font_unique_name_lookup_win.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<FontUniqueNameLookup>
+ FontUniqueNameLookup::GetPlatformUniqueNameLookup() {
+ #if defined(OS_ANDROID)
+ return std::make_unique<FontUniqueNameLookupAndroid>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<FontUniqueNameLookupLinux>();
+ #elif defined(OS_WIN)
+ return std::make_unique<FontUniqueNameLookupWin>();
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
new file mode 100644
index 000000000000..01d7699e4ddb
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_fonts_skia_font__cache__skia.cc
@@ -0,0 +1,38 @@
+--- third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc.orig 2019-09-09 21:55:26 UTC
++++ third_party/blink/renderer/platform/fonts/skia/font_cache_skia.cc
+@@ -59,7 +59,7 @@ AtomicString ToAtomicString(const SkString& str) {
+ return AtomicString::FromUTF8(str.c_str(), str.size());
+ }
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ // This function is called on android or when we are emulating android fonts on
+ // linux and the embedder has overriden the default fontManager with
+ // WebFontRendering::setSkiaFontMgr.
+@@ -82,7 +82,7 @@ AtomicString FontCache::GetFamilyNameForCharacter(
+ typeface->getFamilyName(&skia_family_name);
+ return ToAtomicString(skia_family_name);
+ }
+-#endif // defined(OS_ANDROID) || defined(OS_LINUX)
++#endif // defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+
+ void FontCache::PlatformInit() {}
+
+@@ -227,7 +227,7 @@ sk_sp<SkTypeface> FontCache::CreateTypeface(
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // On linux if the fontManager has been overridden then we should be calling
+ // the embedder provided font Manager rather than calling
+ // SkTypeface::CreateFromName which may redirect the call to the default font
+@@ -254,7 +254,7 @@ std::unique_ptr<FontPlatformData> FontCache::CreateFon
+ std::string name;
+
+ sk_sp<SkTypeface> typeface;
+-#if defined(OS_ANDROID) || defined(OS_LINUX)
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD)
+ if (alternate_name == AlternateFontName::kLocalUniqueFace &&
+ RuntimeEnabledFeatures::FontSrcLocalMatchingEnabled()) {
+ typeface = CreateTypefaceFromUniqueName(creation_params);
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
new file mode 100644
index 000000000000..27b83fe51ce9
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_container__annotations.h
@@ -0,0 +1,27 @@
+--- third_party/blink/renderer/platform/wtf/container_annotations.h.orig 2019-06-04 18:55:30 UTC
++++ third_party/blink/renderer/platform/wtf/container_annotations.h
+@@ -10,7 +10,7 @@
+
+ // TODO(ochang): Remove the ARCH_CPU_X86_64 condition to enable this for X86
+ // once the crashes there have been fixed: http://crbug.com/461406
+-#if defined(ADDRESS_SANITIZER) && defined(OS_LINUX) && defined(ARCH_CPU_X86_64)
++#if defined(ADDRESS_SANITIZER) && (defined(OS_LINUX) || defined(OS_BSD)) && defined(ARCH_CPU_X86_64)
+ #define ANNOTATE_CONTIGUOUS_CONTAINER
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize) \
+ if (buffer) { \
+@@ -35,13 +35,13 @@
+ ANNOTATE_NEW_BUFFER(buffer, newCapacity, bufferSize);
+ // Annotations require buffers to begin on an 8-byte boundary.
+
+-#else // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#else // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #define ANNOTATE_NEW_BUFFER(buffer, capacity, newSize)
+ #define ANNOTATE_DELETE_BUFFER(buffer, capacity, oldSize)
+ #define ANNOTATE_CHANGE_SIZE(buffer, capacity, oldSize, newSize)
+ #define ANNOTATE_CHANGE_CAPACITY(buffer, oldCapacity, bufferSize, newCapacity)
+
+-#endif // ADDRESS_SANITIZER && OS_LINUX && ARCH_CPU_X86_64
++#endif // ADDRESS_SANITIZER && (OS_LINUX || OS_BSD) && ARCH_CPU_X86_64
+
+ #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_WTF_CONTAINER_ANNOTATIONS_H_
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
new file mode 100644
index 000000000000..24a812ce5223
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_stack__util.cc
@@ -0,0 +1,14 @@
+--- third_party/blink/renderer/platform/wtf/stack_util.cc.orig 2019-06-04 18:55:30 UTC
++++ third_party/blink/renderer/platform/wtf/stack_util.cc
+@@ -17,6 +17,11 @@
+ extern "C" void* __libc_stack_end; // NOLINT
+ #endif
+
++#if defined(OS_FREEBSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
++#endif
++
+ namespace WTF {
+
+ size_t GetUnderestimatedStackSize() {
diff --git a/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
new file mode 100644
index 000000000000..1ab0c14a5a4e
--- /dev/null
+++ b/www/iridium/files/patch-third__party_blink_renderer_platform_wtf_threading__pthreads.cc
@@ -0,0 +1,22 @@
+--- third_party/blink/renderer/platform/wtf/threading_pthreads.cc.orig 2019-12-16 21:50:53 UTC
++++ third_party/blink/renderer/platform/wtf/threading_pthreads.cc
+@@ -50,12 +50,17 @@
+ #include <objc/objc-auto.h>
+ #endif
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <unistd.h>
++#endif
++
++#if defined(OS_BSD)
++#include <sys/signal.h>
++#include <pthread_np.h>
+ #endif
+
+ namespace WTF {
diff --git a/www/iridium/files/patch-third__party_boringssl_BUILD.gn b/www/iridium/files/patch-third__party_boringssl_BUILD.gn
new file mode 100644
index 000000000000..8a3c15eac37d
--- /dev/null
+++ b/www/iridium/files/patch-third__party_boringssl_BUILD.gn
@@ -0,0 +1,36 @@
+--- third_party/boringssl/BUILD.gn.orig 2019-12-16 21:51:04 UTC
++++ third_party/boringssl/BUILD.gn
+@@ -71,7 +71,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x64") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86_64
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86_64
+ } else {
+ public_configs = [ ":no_asm_config" ]
+@@ -79,13 +79,13 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ } else if (current_cpu == "x86") {
+ if (is_mac) {
+ sources += crypto_sources_mac_x86
+- } else if (is_linux || is_android) {
++ } else if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_x86
+ } else {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_arm
+ } else if (is_ios) {
+ sources += crypto_sources_ios_arm
+@@ -93,7 +93,7 @@ if (is_win && !is_msan && current_cpu != "arm64") {
+ public_configs = [ ":no_asm_config" ]
+ }
+ } else if (current_cpu == "arm64") {
+- if (is_linux || is_android) {
++ if (is_linux || is_bsd || is_android) {
+ sources += crypto_sources_linux_aarch64
+ } else if (is_ios) {
+ sources += crypto_sources_ios_aarch64
diff --git a/www/iridium/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c b/www/iridium/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
new file mode 100644
index 000000000000..5856c89852d1
--- /dev/null
+++ b/www/iridium/files/patch-third__party_boringssl_src_crypto_cpu-aarch64-linux.c
@@ -0,0 +1,73 @@
+--- third_party/boringssl/src/crypto/cpu-aarch64-linux.c.orig 2020-03-03 18:55:22 UTC
++++ third_party/boringssl/src/crypto/cpu-aarch64-linux.c
+@@ -14,49 +14,45 @@
+
+ #include <openssl/cpu.h>
+
+-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \
+- !defined(OPENSSL_STATIC_ARMCAP)
++#if defined(OPENSSL_AARCH64)
+
+-#include <sys/auxv.h>
+-
+ #include <openssl/arm_arch.h>
+
+ #include "internal.h"
+
+-
+ extern uint32_t OPENSSL_armcap_P;
+
+-void OPENSSL_cpuid_setup(void) {
+- unsigned long hwcap = getauxval(AT_HWCAP);
++#include <sys/types.h>
++#include <machine/armreg.h>
+
+- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
+- // these values.
+- static const unsigned long kNEON = 1 << 1;
+- static const unsigned long kAES = 1 << 3;
+- static const unsigned long kPMULL = 1 << 4;
+- static const unsigned long kSHA1 = 1 << 5;
+- static const unsigned long kSHA256 = 1 << 6;
++#ifndef ID_AA64ISAR0_AES_VAL
++#define ID_AA64ISAR0_AES_VAL ID_AA64ISAR0_AES
++#endif
++#ifndef ID_AA64ISAR0_SHA1_VAL
++#define ID_AA64ISAR0_SHA1_VAL ID_AA64ISAR0_SHA1
++#endif
++#ifndef ID_AA64ISAR0_SHA2_VAL
++#define ID_AA64ISAR0_SHA2_VAL ID_AA64ISAR0_SHA2
++#endif
+
+- if ((hwcap & kNEON) == 0) {
+- // Matching OpenSSL, if NEON is missing, don't report other features
+- // either.
+- return;
+- }
++void OPENSSL_cpuid_setup(void) {
++ uint64_t id_aa64isar0;
+
++ id_aa64isar0 = READ_SPECIALREG(id_aa64isar0_el1);
++
+ OPENSSL_armcap_P |= ARMV7_NEON;
+
+- if (hwcap & kAES) {
++ if (ID_AA64ISAR0_AES_VAL(id_aa64isar0) >= ID_AA64ISAR0_AES_BASE) {
+ OPENSSL_armcap_P |= ARMV8_AES;
+ }
+- if (hwcap & kPMULL) {
++ if (ID_AA64ISAR0_AES_VAL(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) {
+ OPENSSL_armcap_P |= ARMV8_PMULL;
+ }
+- if (hwcap & kSHA1) {
++ if (ID_AA64ISAR0_SHA1_VAL(id_aa64isar0) == ID_AA64ISAR0_SHA1_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+ }
+- if (hwcap & kSHA256) {
++ if(ID_AA64ISAR0_SHA2_VAL(id_aa64isar0) >= ID_AA64ISAR0_SHA2_BASE) {
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
+ }
+-
+-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
++#endif // OPENSSL_AARCH64
diff --git a/www/iridium/files/patch-third__party_boringssl_src_crypto_ex__data.c b/www/iridium/files/patch-third__party_boringssl_src_crypto_ex__data.c
new file mode 100644
index 000000000000..6f2127918315
--- /dev/null
+++ b/www/iridium/files/patch-third__party_boringssl_src_crypto_ex__data.c
@@ -0,0 +1,13 @@
+--- third_party/boringssl/src/crypto/ex_data.c.orig 2019-03-11 22:07:58 UTC
++++ third_party/boringssl/src/crypto/ex_data.c
+@@ -186,7 +186,9 @@ int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int index,
+ }
+ }
+
+- sk_void_set(ad->sk, index, val);
++ // expression result unused; should this cast be to 'void'?
++ // seems it should, feel free to investigate those #def
++ (void) sk_void_set(ad->sk, index, val);
+ return 1;
+ }
+
diff --git a/www/iridium/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h b/www/iridium/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
new file mode 100644
index 000000000000..b0aaa7abccb6
--- /dev/null
+++ b/www/iridium/files/patch-third__party_breakpad_breakpad_src_common_simple__string__dictionary.h
@@ -0,0 +1,11 @@
+--- third_party/breakpad/breakpad/src/common/simple_string_dictionary.h.orig 2019-03-11 22:07:58 UTC
++++ third_party/breakpad/breakpad/src/common/simple_string_dictionary.h
+@@ -33,7 +33,7 @@
+ #include <assert.h>
+ #include <string.h>
+
+-#include "common/basictypes.h"
++#include "third_party/breakpad/breakpad/src/common/basictypes.h"
+
+ namespace google_breakpad {
+
diff --git a/www/iridium/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h b/www/iridium/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
new file mode 100644
index 000000000000..0a76ed7ccadc
--- /dev/null
+++ b/www/iridium/files/patch-third__party_cacheinvalidation_src_google_cacheinvalidation_include_types.h
@@ -0,0 +1,11 @@
+--- third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h.orig 2019-03-11 22:01:15 UTC
++++ third_party/cacheinvalidation/src/google/cacheinvalidation/include/types.h
+@@ -334,6 +334,8 @@ class Status {
+ */
+ PERMANENT_FAILURE
+ };
++
++ Status() : code_(SUCCESS), message_() {}
+
+ /* Creates a new Status object given the code and message. */
+ Status(Code code, const string& message) : code_(code), message_(message) {}
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni b/www/iridium/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
new file mode 100644
index 000000000000..97991dfed588
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_build_crashpad__buildconfig.gni
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/build/crashpad_buildconfig.gni.orig 2020-02-03 21:53:08 UTC
++++ third_party/crashpad/crashpad/build/crashpad_buildconfig.gni
+@@ -38,7 +38,7 @@ if (crashpad_is_in_chromium) {
+ crashpad_is_mac = is_mac
+ crashpad_is_ios = is_ios
+ crashpad_is_win = is_win
+- crashpad_is_linux = is_linux
++ crashpad_is_linux = is_linux && !is_bsd
+ crashpad_is_android = is_android
+ crashpad_is_fuchsia = is_fuchsia
+
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_client_BUILD.gn b/www/iridium/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
new file mode 100644
index 000000000000..acb48dc27344
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_client_BUILD.gn
@@ -0,0 +1,15 @@
+--- third_party/crashpad/crashpad/client/BUILD.gn.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/client/BUILD.gn
+@@ -71,6 +71,12 @@ static_library("client") {
+ sources += [ "crashpad_client_fuchsia.cc" ]
+ }
+
++ if (crashpad_is_posix) {
++ sources += [
++ "crashpad_client_posix.cc",
++ ]
++ }
++
+ if (crashpad_is_linux || crashpad_is_android || crashpad_is_fuchsia) {
+ sources += [ "crash_report_database_generic.cc" ]
+ }
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
new file mode 100644
index 000000000000..9cafc79f1aff
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_client_crashpad__client__posix.cc
@@ -0,0 +1,41 @@
+--- third_party/crashpad/crashpad/client/crashpad_client_posix.cc.orig 2019-03-17 01:47:14 UTC
++++ third_party/crashpad/crashpad/client/crashpad_client_posix.cc
+@@ -0,0 +1,38 @@
++// Copyright 2017 The Crashpad Authors. All rights reserved.
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++#include "client/crashpad_client.h"
++
++#include "base/logging.h"
++
++namespace crashpad {
++
++CrashpadClient::CrashpadClient() {}
++
++CrashpadClient::~CrashpadClient() {}
++
++bool CrashpadClient::StartHandler(
++ const base::FilePath& handler,
++ const base::FilePath& database,
++ const base::FilePath& metrics_dir,
++ const std::string& url,
++ const std::map<std::string, std::string>& annotations,
++ const std::vector<std::string>& arguments,
++ bool restartable,
++ bool asynchronous_start) {
++ NOTREACHED(); // TODO(scottmg): https://crashpad.chromium.org/bug/196
++ return false;
++}
++
++} // namespace crashpad
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
new file mode 100644
index 000000000000..ead0b25e172c
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_address__types.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/address_types.h.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/misc/address_types.h
+@@ -25,7 +25,7 @@
+ #include <mach/mach_types.h>
+ #elif defined(OS_WIN)
+ #include "util/win/address_types.h"
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "util/linux/address_types.h"
+ #elif defined(OS_FUCHSIA)
+ #include <zircon/types.h>
+@@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t;
+ using VMAddress = WinVMAddress;
+ using VMSize = WinVMSize;
+
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ using VMAddress = LinuxVMAddress;
+ using VMSize = LinuxVMSize;
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
new file mode 100644
index 000000000000..be1a55b8d574
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_capture__context.h
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/misc/capture_context.h.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/misc/capture_context.h
+@@ -21,7 +21,7 @@
+ #include <mach/mach.h>
+ #elif defined(OS_WIN)
+ #include <windows.h>
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include <ucontext.h>
+ #elif defined(OS_FUCHSIA)
+ #include <signal.h>
+@@ -35,7 +35,7 @@ using NativeCPUContext = x86_thread_state;
+ #endif
+ #elif defined(OS_WIN)
+ using NativeCPUContext = CONTEXT;
+-#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ using NativeCPUContext = ucontext_t;
+ #endif // OS_MACOSX
+
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
new file mode 100644
index 000000000000..f1804888aee1
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_metrics.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/metrics.cc.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/misc/metrics.cc
+@@ -25,7 +25,7 @@
+ #define METRICS_OS_NAME "Win"
+ #elif defined(OS_ANDROID)
+ #define METRICS_OS_NAME "Android"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define METRICS_OS_NAME "Linux"
+ #elif defined(OS_FUCHSIA)
+ #define METRICS_OS_NAME "Fuchsia"
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
new file mode 100644
index 000000000000..d7a1ca9a0fd0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_misc_uuid.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/misc/uuid.cc.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/misc/uuid.cc
+@@ -95,7 +95,7 @@ bool UUID::InitializeWithNew() {
+ InitializeFromBytes(uuid);
+ return true;
+ #elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
+- defined(OS_FUCHSIA)
++ defined(OS_FUCHSIA) || defined(OS_BSD)
+ // Linux, Android, and Fuchsia do not provide a UUID generator in a
+ // widely-available system library. On Linux and Android, uuid_generate()
+ // from libuuid is not available everywhere.
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
new file mode 100644
index 000000000000..e7dc2e3561db
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_close__multiple.cc
@@ -0,0 +1,29 @@
+--- third_party/crashpad/crashpad/util/posix/close_multiple.cc.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/posix/close_multiple.cc
+@@ -31,7 +31,7 @@
+ #include "util/file/directory_reader.h"
+ #include "util/misc/implicit_cast.h"
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ #include <sys/sysctl.h>
+ #endif
+
+@@ -72,7 +72,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) {
+ // This is an advantage over looping over all possible file descriptors, because
+ // no attempt needs to be made to close file descriptors that are not open.
+ bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) {
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ static constexpr char kFDDir[] = "/dev/fd";
+ #elif defined(OS_LINUX) || defined(OS_ANDROID)
+ static constexpr char kFDDir[] = "/proc/self/fd";
+@@ -146,7 +146,7 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd)
+ // while the system is running, but it’s still a better upper bound than the
+ // current RLIMIT_NOFILE value.
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // See 10.11.6 xnu-3248.60.10/bsd/kern/kern_resource.c maxfilesperproc,
+ // referenced by dosetrlimit().
+ int oid[] = {CTL_KERN, KERN_MAXFILESPERPROC};
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
new file mode 100644
index 000000000000..42ba7366e3cb
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_drop__privileges.cc
@@ -0,0 +1,11 @@
+--- third_party/crashpad/crashpad/util/posix/drop_privileges.cc.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+@@ -23,7 +23,7 @@ void DropPrivileges() {
+ gid_t gid = getgid();
+ uid_t uid = getuid();
+
+-#if defined(OS_MACOSX)
++#if defined(OS_MACOSX) || defined(OS_BSD)
+ // Based on the POSIX.1-2008 2013 edition documentation for setreuid() and
+ // setregid(), setreuid() and setregid() alone should be sufficient to drop
+ // privileges. The standard specifies that the saved ID should be set to the
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
new file mode 100644
index 000000000000..911ec6d61ccd
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_signals.cc
@@ -0,0 +1,40 @@
+--- third_party/crashpad/crashpad/util/posix/signals.cc.orig 2019-12-16 21:51:05 UTC
++++ third_party/crashpad/crashpad/util/posix/signals.cc
+@@ -45,10 +45,10 @@ constexpr int kCrashSignals[] = {
+ #if defined(SIGEMT)
+ SIGEMT,
+ #endif // defined(SIGEMT)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGXCPU,
+ SIGXFSZ,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ // These are the non-core-generating but terminating signals.
+@@ -85,9 +85,9 @@ constexpr int kTerminateSignals[] = {
+ SIGXCPU,
+ SIGXFSZ,
+ #endif // defined(OS_MACOSX)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ SIGIO,
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ };
+
+ bool InstallHandlers(const std::vector<int>& signals,
+@@ -224,8 +224,12 @@ bool Signals::WillSignalReraiseAutonomously(const sigi
+ // remains. See 10.12.3 xnu-3789.41.3/bsd/kern/kern_sig.c
+ // psignal_internal().
+ (code > 0 &&
++#if defined(SI_ASYNCIO)
+ code != SI_ASYNCIO &&
++#endif
++#if defined(SI_MESGQ)
+ code != SI_MESGQ &&
++#endif
+ code != SI_QUEUE &&
+ code != SI_TIMER &&
+ code != SI_USER &&
diff --git a/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
new file mode 100644
index 000000000000..63645eb0d883
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crashpad_crashpad_util_posix_symbolic__constants__posix.cc
@@ -0,0 +1,20 @@
+--- third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc.orig 2019-03-11 22:01:15 UTC
++++ third_party/crashpad/crashpad/util/posix/symbolic_constants_posix.cc
+@@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = {
+ "INFO",
+ "USR1",
+ "USR2",
+-#elif defined(OS_LINUX) || defined(OS_ANDROID)
++#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #if defined(ARCH_CPU_MIPS_FAMILY)
+ "HUP",
+ "INT",
+@@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = {
+ #endif // defined(ARCH_CPU_MIPS_FAMILY)
+ #endif
+ };
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ // NSIG is 64 to account for real-time signals.
+ static_assert(base::size(kSignalNames) == 32, "kSignalNames length");
+ #else
diff --git a/www/iridium/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h b/www/iridium/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
new file mode 100644
index 000000000000..0dd0f21d8d58
--- /dev/null
+++ b/www/iridium/files/patch-third__party_crc32c_src_src_crc32c__arm64__linux__check.h
@@ -0,0 +1,57 @@
+--- third_party/crc32c/src/src/crc32c_arm64_linux_check.h.orig 2020-03-03 18:55:23 UTC
++++ third_party/crc32c/src/src/crc32c_arm64_linux_check.h
+@@ -7,8 +7,6 @@
+ #ifndef CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+ #define CRC32C_CRC32C_ARM_LINUX_CHECK_H_
+
+-// X86-specific code checking for the availability of SSE4.2 instructions.
+-
+ #include <cstddef>
+ #include <cstdint>
+
+@@ -16,30 +14,25 @@
+
+ #if HAVE_ARM64_CRC32C
+
+-#if HAVE_STRONG_GETAUXVAL
+-#include <sys/auxv.h>
+-#elif HAVE_WEAK_GETAUXVAL
+-// getauxval() is not available on Android until API level 20. Link it as a weak
+-// symbol.
+-extern "C" unsigned long getauxval(unsigned long type) __attribute__((weak));
++#include <sys/types.h>
++#include <machine/armreg.h>
+
+-#define AT_HWCAP 16
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
++#ifndef ID_AA64ISAR0_AES_VAL
++#define ID_AA64ISAR0_AES_VAL ID_AA64ISAR0_AES
++#endif
++#ifndef ID_AA64ISAR0_CRC32_VAL
++#define ID_AA64ISAR0_CRC32_VAL ID_AA64ISAR0_CRC32
++#endif
+
+ namespace crc32c {
+
+-inline bool CanUseArm64Linux() {
+-#if HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+- // From 'arch/arm64/include/uapi/asm/hwcap.h' in Linux kernel source code.
+- constexpr unsigned long kHWCAP_PMULL = 1 << 4;
+- constexpr unsigned long kHWCAP_CRC32 = 1 << 7;
+- unsigned long hwcap = (&getauxval != nullptr) ? getauxval(AT_HWCAP) : 0;
+- return (hwcap & (kHWCAP_PMULL | kHWCAP_CRC32)) ==
+- (kHWCAP_PMULL | kHWCAP_CRC32);
+-#else
+- return false;
+-#endif // HAVE_STRONG_GETAUXVAL || HAVE_WEAK_GETAUXVAL
+-}
++ inline bool CanUseArm64Linux() {
++ uint64_t id_aa64isar0;
++
++ id_aa64isar0 = READ_SPECIALREG(id_aa64isar0_el1);
++ return ((ID_AA64ISAR0_AES_VAL(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) &&
++ (ID_AA64ISAR0_CRC32_VAL(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE));
++ }
+
+ } // namespace crc32c
+
diff --git a/www/iridium/files/patch-third__party_ffmpeg_libavutil_mem.c b/www/iridium/files/patch-third__party_ffmpeg_libavutil_mem.c
new file mode 100644
index 000000000000..23d1e5344a09
--- /dev/null
+++ b/www/iridium/files/patch-third__party_ffmpeg_libavutil_mem.c
@@ -0,0 +1,12 @@
+--- third_party/ffmpeg/libavutil/mem.c.orig 2019-03-11 22:08:00 UTC
++++ third_party/ffmpeg/libavutil/mem.c
+@@ -32,9 +32,6 @@
+ #include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
+-#if HAVE_MALLOC_H
+-#include <malloc.h>
+-#endif
+
+ #include "avassert.h"
+ #include "avutil.h"
diff --git a/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc b/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
new file mode 100644
index 000000000000..ba45bf4dc184
--- /dev/null
+++ b/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest-port.cc
@@ -0,0 +1,43 @@
+--- third_party/googletest/src/googletest/src/gtest-port.cc.orig 2020-03-16 18:42:08 UTC
++++ third_party/googletest/src/googletest/src/gtest-port.cc
+@@ -64,6 +64,11 @@
+ # endif
+ #endif
+
++#if GTEST_OS_FREEBSD
++#include <sys/sysctl.h>
++#include <sys/user.h>
++#endif
++
+ #if GTEST_OS_QNX
+ # include <devctl.h>
+ # include <fcntl.h>
+@@ -138,6 +143,28 @@ size_t GetThreadCount() {
+ } else {
+ return 0;
+ }
++}
++
++#elif GTEST_OS_FREEBSD
++
++#define KP_NLWP(kp) (kp.ki_numthreads)
++
++// Return the number of threads running in the process, or 0 to indicate that
++// we cannot detect it.
++size_t GetThreadCount() {
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ struct kinfo_proc(info);
++ size_t size = sizeof(info);
++ if (sysctl(mib, miblen, &info, &size, NULL, 0)) {
++ return 0;
++ }
++ return KP_NLWP(info);
+ }
+
+ #elif GTEST_OS_DRAGONFLY || GTEST_OS_FREEBSD || GTEST_OS_GNU_KFREEBSD || \
diff --git a/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest.cc b/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest.cc
new file mode 100644
index 000000000000..e56b6079f8f5
--- /dev/null
+++ b/www/iridium/files/patch-third__party_googletest_src_googletest_src_gtest.cc
@@ -0,0 +1,10 @@
+--- third_party/googletest/src/googletest/src/gtest.cc.orig 2020-03-16 18:42:08 UTC
++++ third_party/googletest/src/googletest/src/gtest.cc
+@@ -118,6 +118,7 @@
+
+ #if GTEST_CAN_STREAM_RESULTS_
+ # include <arpa/inet.h> // NOLINT
++# include <sys/socket.h> // NOLINT
+ # include <netdb.h> // NOLINT
+ # include <sys/socket.h> // NOLINT
+ # include <sys/types.h> // NOLINT
diff --git a/www/iridium/files/patch-third__party_harfbuzz-ng_harfbuzz.gni b/www/iridium/files/patch-third__party_harfbuzz-ng_harfbuzz.gni
new file mode 100644
index 000000000000..eb8e42c94bca
--- /dev/null
+++ b/www/iridium/files/patch-third__party_harfbuzz-ng_harfbuzz.gni
@@ -0,0 +1,20 @@
+--- third_party/harfbuzz-ng/harfbuzz.gni.orig 2019-05-04 09:19:19 UTC
++++ third_party/harfbuzz-ng/harfbuzz.gni
+@@ -3,10 +3,11 @@
+ # found in the LICENSE file.
+
+ declare_args() {
+- # Blink uses a cutting-edge version of Harfbuzz; most Linux distros do not
+- # contain a new enough version of the code to work correctly. However,
+- # ChromeOS chroots (i.e, real ChromeOS builds for devices) do contain a
+- # new enough version of the library, and so this variable exists so that
+- # ChromeOS can build against the system lib and keep binary sizes smaller.
+- use_system_harfbuzz = false
++ # Blink uses a cutting-edge version of Harfbuzz (version listed in
++ # third_party/harfbuzz-ng/README.chromium); most Linux distros do not contain
++ # a new enough version of the code to work correctly. However, ChromeOS
++ # chroots (i.e. real ChromeOS builds for devices) do contain a new enough
++ # version of the library, and so this variable exists so that ChromeOS can
++ # build against the system lib and keep binary sizes smaller.
++ use_system_harfbuzz = true
+ }
diff --git a/www/iridium/files/patch-third__party_leveldatabase_env__chromium.cc b/www/iridium/files/patch-third__party_leveldatabase_env__chromium.cc
new file mode 100644
index 000000000000..74a2d6efc9a1
--- /dev/null
+++ b/www/iridium/files/patch-third__party_leveldatabase_env__chromium.cc
@@ -0,0 +1,14 @@
+--- third_party/leveldatabase/env_chromium.cc.orig 2020-03-16 18:40:42 UTC
++++ third_party/leveldatabase/env_chromium.cc
+@@ -40,7 +40,11 @@
+ #include "third_party/leveldatabase/leveldb_chrome.h"
+ #include "third_party/leveldatabase/leveldb_features.h"
+ #include "third_party/leveldatabase/src/include/leveldb/options.h"
++#if defined(OS_BSD)
++#include <re2/re2.h>
++#else
+ #include "third_party/re2/src/re2/re2.h"
++#endif
+
+ using base::FilePath;
+ using base::trace_event::MemoryAllocatorDump;
diff --git a/www/iridium/files/patch-third__party_libXNVCtrl_NVCtrl.c b/www/iridium/files/patch-third__party_libXNVCtrl_NVCtrl.c
new file mode 100644
index 000000000000..3d2353cdedae
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libXNVCtrl_NVCtrl.c
@@ -0,0 +1,25 @@
+--- third_party/libXNVCtrl/NVCtrl.c.orig 2019-03-11 22:01:15 UTC
++++ third_party/libXNVCtrl/NVCtrl.c
+@@ -27,10 +27,6 @@
+ * libXNVCtrl library properly protects the Display connection.
+ */
+
+-#if !defined(XTHREADS)
+-#define XTHREADS
+-#endif /* XTHREADS */
+-
+ #define NEED_EVENTS
+ #define NEED_REPLIES
+ #include <stdint.h>
+@@ -39,6 +35,11 @@
+ #include <X11/Xutil.h>
+ #include <X11/extensions/Xext.h>
+ #include <X11/extensions/extutil.h>
++
++#if !defined(XTHREADS)
++#define XTHREADS
++#endif /* XTHREADS */
++
+ #include "NVCtrlLib.h"
+ #include "nv_control.h"
+
diff --git a/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
new file mode 100644
index 000000000000..0815f041a8db
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_memory_singleton.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h.orig 2019-03-11 22:08:01 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/memory/singleton.h
+@@ -56,7 +56,7 @@ template <class T> boost::once_flag Singleton<T>::flag
+ #include "phonenumbers/base/logging.h"
+ #include "phonenumbers/base/thread_checker.h"
+
+-#if !defined(__linux__) && !defined(__APPLE__)
++#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
new file mode 100644
index 000000000000..b09577e3c1d7
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_synchronization_lock.h
@@ -0,0 +1,11 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h.orig 2019-10-21 19:09:13 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/synchronization/lock.h
+@@ -63,7 +63,7 @@ class Lock { (private)
+ // Dummy lock implementation on non-POSIX platforms. If you are running on a
+ // different platform and care about thread-safety, please compile with
+ // -DI18N_PHONENUMBERS_USE_BOOST.
+-#elif !defined(__linux__) && !defined(__APPLE__)
++#elif !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__)
+
+ namespace i18n {
+ namespace phonenumbers {
diff --git a/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
new file mode 100644
index 000000000000..86849dfe63cd
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libphonenumber_dist_cpp_src_phonenumbers_base_thread__checker.h
@@ -0,0 +1,19 @@
+--- third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h.orig 2019-03-11 22:08:01 UTC
++++ third_party/libphonenumber/dist/cpp/src/phonenumbers/base/thread_checker.h
+@@ -23,6 +23,7 @@
+ // user of the library know that it can't be used in a thread-safe manner when
+ // it is not depending on Boost.
+ #if !defined(__linux__) && !defined(__APPLE__) && \
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
+ !defined(I18N_PHONENUMBERS_NO_THREAD_SAFETY)
+ #error Building without Boost, please provide \
+ -DI18N_PHONENUMBERS_NO_THREAD_SAFETY
+@@ -31,7 +32,7 @@
+ #endif
+
+ #if !defined(NDEBUG) && !defined(I18N_PHONENUMBERS_USE_BOOST) && \
+- (defined(__linux__) || defined(__apple__))
++ (defined(__linux__) || defined(__apple__)) || defined(__FreeBSD__) || defined(__OpenBSD__)
+
+ #include <pthread.h>
+
diff --git a/www/iridium/files/patch-third__party_libpng_pnglibconf.h b/www/iridium/files/patch-third__party_libpng_pnglibconf.h
new file mode 100644
index 000000000000..81996a0cfa58
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libpng_pnglibconf.h
@@ -0,0 +1,14 @@
+--- third_party/libpng/pnglibconf.h.orig 2020-03-03 18:53:28 UTC
++++ third_party/libpng/pnglibconf.h
+@@ -230,8 +230,11 @@
+ * This is necessary to build multiple copies of libpng. We need this while pdfium builds
+ * its own copy of libpng.
+ */
++/* Need to disable prefixing to unbundle chromium's libpng. */
++#if 0
+ #define PNG_PREFIX
+ #include "pngprefix.h"
++#endif
+ /* end of chromium prefixing */
+
+ #endif /* PNGLCONF_H */
diff --git a/www/iridium/files/patch-third__party_libyuv_include_libyuv_row.h b/www/iridium/files/patch-third__party_libyuv_include_libyuv_row.h
new file mode 100644
index 000000000000..25761a9d90ec
--- /dev/null
+++ b/www/iridium/files/patch-third__party_libyuv_include_libyuv_row.h
@@ -0,0 +1,37 @@
+--- third_party/libyuv/include/libyuv/row.h.orig 2019-03-11 22:08:01 UTC
++++ third_party/libyuv/include/libyuv/row.h
+@@ -157,10 +157,14 @@ extern "C" {
+ #define HAS_ARGBSHADEROW_SSE2
+ #define HAS_ARGBSUBTRACTROW_SSE2
+ #define HAS_ARGBUNATTENUATEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_SSSE3
++#endif
+ #define HAS_COMPUTECUMULATIVESUMROW_SSE2
+ #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_SSSE3
++#endif
+ #define HAS_RGBCOLORTABLEROW_X86
+ #define HAS_SOBELROW_SSE2
+ #define HAS_SOBELTOPLANEROW_SSE2
+@@ -206,7 +210,9 @@ extern "C" {
+ #define HAS_I422TORGB565ROW_AVX2
+ #define HAS_I422TORGBAROW_AVX2
+ #define HAS_I444TOARGBROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_INTERPOLATEROW_AVX2
++#endif
+ #define HAS_J422TOARGBROW_AVX2
+ #define HAS_MERGEUVROW_AVX2
+ #define HAS_MIRRORROW_AVX2
+@@ -231,7 +237,9 @@ extern "C" {
+ #define HAS_ARGBMULTIPLYROW_AVX2
+ #define HAS_ARGBSUBTRACTROW_AVX2
+ #define HAS_ARGBUNATTENUATEROW_AVX2
++#if !(defined(__i386__) && defined(__GNUC__))
+ #define HAS_BLENDPLANEROW_AVX2
++#endif
+
+ #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
+ defined(_MSC_VER)
diff --git a/www/iridium/files/patch-third__party_nasm_config_config-linux.h b/www/iridium/files/patch-third__party_nasm_config_config-linux.h
new file mode 100644
index 000000000000..6846af2fe7c7
--- /dev/null
+++ b/www/iridium/files/patch-third__party_nasm_config_config-linux.h
@@ -0,0 +1,29 @@
+--- third_party/nasm/config/config-linux.h.orig 2019-04-30 22:25:54 UTC
++++ third_party/nasm/config/config-linux.h
+@@ -117,7 +117,7 @@
+ #define HAVE_ACCESS 1
+
+ /* Define to 1 if you have the `canonicalize_file_name' function. */
+-#define HAVE_CANONICALIZE_FILE_NAME 1
++/* #undef HAVE_CANONICALIZE_FILE_NAME */
+
+ /* Define to 1 if you have the `cpu_to_le16' intrinsic function. */
+ /* #undef HAVE_CPU_TO_LE16 */
+@@ -161,7 +161,7 @@
+ #define HAVE_DECL_STRSEP 1
+
+ /* Define to 1 if you have the <endian.h> header file. */
+-#define HAVE_ENDIAN_H 1
++/* #undef HAVE_ENDIAN_H */
+
+ /* Define to 1 if you have the `faccessat' function. */
+ #define HAVE_FACCESSAT 1
+@@ -322,7 +322,7 @@
+ #define HAVE_SYSCONF 1
+
+ /* Define to 1 if you have the <sys/endian.h> header file. */
+-/* #undef HAVE_SYS_ENDIAN_H */
++#define HAVE_SYS_ENDIAN_H 1
+
+ /* Define to 1 if you have the <sys/mman.h> header file. */
+ #define HAVE_SYS_MMAN_H 1
diff --git a/www/iridium/files/patch-third__party_node_node.py b/www/iridium/files/patch-third__party_node_node.py
new file mode 100644
index 000000000000..d31ac51040e3
--- /dev/null
+++ b/www/iridium/files/patch-third__party_node_node.py
@@ -0,0 +1,10 @@
+--- third_party/node/node.py.orig 2019-03-11 22:01:16 UTC
++++ third_party/node/node.py
+@@ -12,6 +12,7 @@ import sys
+ def GetBinaryPath():
+ return os_path.join(os_path.dirname(__file__), *{
+ 'Darwin': ('mac', 'node-darwin-x64', 'bin', 'node'),
++ 'FreeBSD': ('freebsd', 'node-freebsd-x64', 'bin', 'node'),
+ 'Linux': ('linux', 'node-linux-x64', 'bin', 'node'),
+ 'Windows': ('win', 'node.exe'),
+ }[platform.system()])
diff --git a/www/iridium/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp b/www/iridium/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
new file mode 100644
index 000000000000..0e9aa30717ed
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_core_fxcrt_cfx__datetime.cpp
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/cfx_datetime.cpp.orig 2019-07-29 13:55:20 UTC
++++ third_party/pdfium/core/fxcrt/cfx_datetime.cpp
+@@ -9,7 +9,7 @@
+ #include "build/build_config.h"
+ #include "core/fxcrt/fx_system.h"
+
+-#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || \
++#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_BSD) || \
+ defined(OS_ASMJS) || defined(__wasm__)
+ #include <sys/time.h>
+ #include <time.h>
diff --git a/www/iridium/files/patch-third__party_pdfium_core_fxcrt_fx__system.h b/www/iridium/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
new file mode 100644
index 000000000000..05d6c3e28de0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_core_fxcrt_fx__system.h
@@ -0,0 +1,11 @@
+--- third_party/pdfium/core/fxcrt/fx_system.h.orig 2019-07-24 19:03:29 UTC
++++ third_party/pdfium/core/fxcrt/fx_system.h
+@@ -26,7 +26,7 @@
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+ #elif defined(_WIN64)
+ #define _FX_PLATFORM_ _FX_PLATFORM_WINDOWS_
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_LINUX_
+ #elif defined(__APPLE__)
+ #define _FX_PLATFORM_ _FX_PLATFORM_APPLE_
diff --git a/www/iridium/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp b/www/iridium/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
new file mode 100644
index 000000000000..272bf7a50bf9
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_core_fxge_fx__ge__linux.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/core/fxge/fx_ge_linux.cpp.orig 2020-03-16 18:42:12 UTC
++++ third_party/pdfium/core/fxge/fx_ge_linux.cpp
+@@ -155,9 +155,8 @@ std::unique_ptr<SystemFontInfoIface> SystemFontInfoIfa
+ const char** pUserPaths) {
+ auto pInfo = pdfium::MakeUnique<CFX_LinuxFontInfo>();
+ if (!pInfo->ParseFontCfg(pUserPaths)) {
+- pInfo->AddPath("/usr/share/fonts");
+- pInfo->AddPath("/usr/share/X11/fonts/Type1");
+- pInfo->AddPath("/usr/share/X11/fonts/TTF");
++ pInfo->AddPath("/usr/local/share/fonts/Type1");
++ pInfo->AddPath("/usr/local/share/fonts/TTF");
+ pInfo->AddPath("/usr/local/share/fonts");
+ }
+ return std::move(pInfo);
diff --git a/www/iridium/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp b/www/iridium/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
new file mode 100644
index 000000000000..292afa1968d0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_fxjs_cjs__publicmethods.cpp
@@ -0,0 +1,106 @@
+--- third_party/pdfium/fxjs/cjs_publicmethods.cpp.orig 2019-06-04 18:58:01 UTC
++++ third_party/pdfium/fxjs/cjs_publicmethods.cpp
+@@ -86,6 +86,103 @@ constexpr const wchar_t* kDateFormats[] = {L"m/d",
+ constexpr const wchar_t* kTimeFormats[] = {L"HH:MM", L"h:MM tt", L"HH:MM:ss",
+ L"h:MM:ss tt"};
+
++#if defined(__FreeBSD__)
++/*
++ * cvt.c - IEEE floating point formatting routines for FreeBSD
++ * from GNU libc-4.6.27
++ */
++
++/*
++ * ap_ecvt converts to decimal
++ * the number of digits is specified by ndigit
++ * decpt is set to the position of the decimal point
++ * sign is set to 0 for positive, 1 for negative
++ */
++
++#define NDIG 80
++
++static char *
++ ap_cvt(double arg, int ndigits, int *decpt, int *sign, int eflag)
++{
++ register int r2;
++ double fi, fj;
++ register char *p, *p1;
++ static char buf[NDIG];
++
++ if (ndigits >= NDIG - 1)
++ ndigits = NDIG - 2;
++ r2 = 0;
++ *sign = 0;
++ p = &buf[0];
++ if (arg < 0) {
++ *sign = 1;
++ arg = -arg;
++ }
++ arg = modf(arg, &fi);
++ p1 = &buf[NDIG];
++ /*
++ * Do integer part
++ */
++ if (fi != 0) {
++ p1 = &buf[NDIG];
++ while (fi != 0) {
++ fj = modf(fi / 10, &fi);
++ *--p1 = (int) ((fj + .03) * 10) + '0';
++ r2++;
++ }
++ while (p1 < &buf[NDIG])
++ *p++ = *p1++;
++ }
++ else if (arg > 0) {
++ while ((fj = arg * 10) < 1) {
++ arg = fj;
++ r2--;
++ }
++ }
++ p1 = &buf[ndigits];
++ if (eflag == 0)
++ p1 += r2;
++ *decpt = r2;
++ if (p1 < &buf[0]) {
++ buf[0] = '\0';
++ return (buf);
++ }
++ while (p <= p1 && p < &buf[NDIG]) {
++ arg *= 10;
++ arg = modf(arg, &fj);
++ *p++ = (int) fj + '0';
++ }
++ if (p1 >= &buf[NDIG]) {
++ buf[NDIG - 1] = '\0';
++ return (buf);
++ }
++ p = p1;
++ *p1 += 5;
++ while (*p1 > '9') {
++ *p1 = '0';
++ if (p1 > buf)
++ ++ * --p1;
++ else {
++ *p1 = '1';
++ (*decpt)++;
++ if (eflag == 0) {
++ if (p > buf)
++ *p = '0';
++ p++;
++ }
++ }
++ }
++ *p = '\0';
++ return (buf);
++}
++
++static char *
++ fcvt(double arg, int ndigits, int *decpt, int *sign)
++{
++ return (ap_cvt(arg, ndigits, decpt, sign, 0));
++}
++#endif // defined(__FreeBSD__)
++
+ template <typename T>
+ T StrTrim(const T& str) {
+ T result = str;
diff --git a/www/iridium/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp b/www/iridium/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
new file mode 100644
index 000000000000..425ec0a4bc9a
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_fxjs_fx__date__helpers.cpp
@@ -0,0 +1,22 @@
+--- third_party/pdfium/fxjs/fx_date_helpers.cpp.orig 2019-07-24 19:03:29 UTC
++++ third_party/pdfium/fxjs/fx_date_helpers.cpp
+@@ -35,6 +35,11 @@ double GetLocalTZA() {
+ return 0;
+ time_t t = 0;
+ FXSYS_time(&t);
++#ifdef __FreeBSD__
++ struct tm lt;
++ localtime_r(&t, &lt);
++ return (double)(-(lt.tm_gmtoff * 1000));
++#else
+ FXSYS_localtime(&t);
+ #if defined(OS_WIN)
+ // In gcc 'timezone' is a global variable declared in time.h. In VC++, that
+@@ -43,6 +48,7 @@ double GetLocalTZA() {
+ _get_timezone(&timezone);
+ #endif
+ return (double)(-(timezone * 1000));
++#endif // __FreeBSD__
+ }
+
+ int GetDaylightSavingTA(double d) {
diff --git a/www/iridium/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp b/www/iridium/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
new file mode 100644
index 000000000000..af4bafcfee40
--- /dev/null
+++ b/www/iridium/files/patch-third__party_pdfium_xfa_fgas_font_cfx__fontsourceenum__file.cpp
@@ -0,0 +1,14 @@
+--- third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp.orig 2019-07-24 19:03:30 UTC
++++ third_party/pdfium/xfa/fgas/font/cfx_fontsourceenum_file.cpp
+@@ -16,9 +16,8 @@ constexpr char kFolderSeparator = '/';
+
+ constexpr const char* kFontFolders[] = {
+ #if _FX_PLATFORM_ == _FX_PLATFORM_LINUX_
+- "/usr/share/fonts",
+- "/usr/share/X11/fonts/Type1",
+- "/usr/share/X11/fonts/TTF",
++ "/usr/local/share/fonts/Type1",
++ "/usr/local/share/fonts/TTF",
+ "/usr/local/share/fonts",
+ #elif defined(OS_MACOSX)
+ "~/Library/Fonts",
diff --git a/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_build__config.h b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
new file mode 100644
index 000000000000..02a9c66ed8e5
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_build__config.h
@@ -0,0 +1,70 @@
+--- third_party/perfetto/include/perfetto/base/build_config.h.orig 2020-03-16 18:42:11 UTC
++++ third_party/perfetto/include/perfetto/base/build_config.h
+@@ -28,6 +28,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -37,6 +38,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -50,15 +52,27 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_NACL() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_IOS() 0
++#elif defined(__FreeBSD__)
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 1
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_NACL() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_IOS() 0
+ #elif defined(_WIN32)
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -68,6 +82,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 1
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
+@@ -77,6 +92,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 1
+@@ -86,6 +102,7 @@
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MACOSX() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() 0
++#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FREEBSD() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WASM() 0
+ #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_FUCHSIA() 0
diff --git a/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h
new file mode 100644
index 000000000000..c8947d13ecbf
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_thread__utils.h
@@ -0,0 +1,24 @@
+--- third_party/perfetto/include/perfetto/base/thread_utils.h.orig 2020-03-16 18:42:11 UTC
++++ third_party/perfetto/include/perfetto/base/thread_utils.h
+@@ -33,6 +33,9 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+ #endif
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++#include <pthread_np.h>
++#endif
+
+ namespace perfetto {
+ namespace base {
+@@ -41,6 +44,11 @@ namespace base {
+ using PlatformThreadId = pid_t;
+ inline PlatformThreadId GetThreadId() {
+ return gettid();
++}
++#elif PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++using PlatformThreadId = pid_t;
++inline PlatformThreadId GetThreadId() {
++ return pthread_getthreadid_np();
+ }
+ #elif PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX)
+ using PlatformThreadId = pid_t;
diff --git a/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_time.h b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_time.h
new file mode 100644
index 000000000000..7750793e8235
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_include_perfetto_base_time.h
@@ -0,0 +1,20 @@
+--- third_party/perfetto/include/perfetto/base/time.h.orig 2020-03-16 18:42:11 UTC
++++ third_party/perfetto/include/perfetto/base/time.h
+@@ -141,6 +141,9 @@ inline TimeNanos GetTimeInternalNs(clockid_t clk_id) {
+ // Return ns from boot. Conversely to GetWallTimeNs, this clock counts also time
+ // during suspend (when supported).
+ inline TimeNanos GetBootTimeNs() {
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ return GetTimeInternalNs(kWallTimeClockSource);
++#else
+ // Determine if CLOCK_BOOTTIME is available on the first call.
+ static const clockid_t kBootTimeClockSource = [] {
+ struct timespec ts = {};
+@@ -148,6 +151,7 @@ inline TimeNanos GetBootTimeNs() {
+ return res == 0 ? CLOCK_BOOTTIME : kWallTimeClockSource;
+ }();
+ return GetTimeInternalNs(kBootTimeClockSource);
++#endif
+ }
+
+ inline TimeNanos GetWallTimeNs() {
diff --git a/www/iridium/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h b/www/iridium/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h
new file mode 100644
index 000000000000..e49d012bec39
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_include_perfetto_ext_base_event__fd.h
@@ -0,0 +1,13 @@
+--- third_party/perfetto/include/perfetto/ext/base/event_fd.h.orig 2019-09-16 11:03:16 UTC
++++ third_party/perfetto/include/perfetto/ext/base/event_fd.h
+@@ -20,8 +20,8 @@
+ #include "perfetto/base/build_config.h"
+ #include "perfetto/ext/base/scoped_file.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+- PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
++#if !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD) && (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID))
+ #define PERFETTO_USE_EVENTFD() 1
+ #else
+ #define PERFETTO_USE_EVENTFD() 0
diff --git a/www/iridium/files/patch-third__party_perfetto_src_base_thread__task__runner.cc b/www/iridium/files/patch-third__party_perfetto_src_base_thread__task__runner.cc
new file mode 100644
index 000000000000..1196437c938c
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_src_base_thread__task__runner.cc
@@ -0,0 +1,20 @@
+--- third_party/perfetto/src/base/thread_task_runner.cc.orig 2020-03-19 11:48:14 UTC
++++ third_party/perfetto/src/base/thread_task_runner.cc
+@@ -27,7 +27,7 @@
+ #include "perfetto/base/logging.h"
+ #include "perfetto/ext/base/unix_task_runner.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) && !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)) || \
+ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
+ #include <sys/prctl.h>
+ #endif
+@@ -84,6 +84,8 @@ void ThreadTaskRunner::RunTaskThread(
+ if (!name_.empty()) {
+ #if PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX)
+ pthread_setname_np(name_.c_str());
++#elif PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
++ pthread_set_name_np(pthread_self(), name_.c_str());
+ #elif PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
+ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
+ prctl(PR_SET_NAME, name_.c_str());
diff --git a/www/iridium/files/patch-third__party_perfetto_src_base_unix__socket.cc b/www/iridium/files/patch-third__party_perfetto_src_base_unix__socket.cc
new file mode 100644
index 000000000000..f14075502887
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_src_base_unix__socket.cc
@@ -0,0 +1,20 @@
+--- third_party/perfetto/src/base/unix_socket.cc.orig 2020-03-16 18:42:11 UTC
++++ third_party/perfetto/src/base/unix_socket.cc
+@@ -37,7 +37,7 @@
+ #include "perfetto/ext/base/string_utils.h"
+ #include "perfetto/ext/base/utils.h"
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX)
++#if PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) || PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)
+ #include <sys/ucred.h>
+ #endif
+
+@@ -601,7 +601,7 @@ void UnixSocket::ReadPeerCredentials() {
+ if (sock_raw_.family() != SockFamily::kUnix)
+ return;
+
+-#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
++#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) && !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD)) || \
+ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
+ struct ucred user_cred;
+ socklen_t len = sizeof(user_cred);
diff --git a/www/iridium/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc b/www/iridium/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
new file mode 100644
index 000000000000..f778d36188f5
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_src_tracing_core_tracing__service__impl.cc
@@ -0,0 +1,10 @@
+--- third_party/perfetto/src/tracing/core/tracing_service_impl.cc.orig 2020-03-16 18:42:12 UTC
++++ third_party/perfetto/src/tracing/core/tracing_service_impl.cc
+@@ -2306,6 +2306,7 @@ void TracingServiceImpl::SnapshotClocks(std::vector<Tr
+
+ #if !PERFETTO_BUILDFLAG(PERFETTO_OS_MACOSX) && \
+ !PERFETTO_BUILDFLAG(PERFETTO_OS_WIN) && \
++ !PERFETTO_BUILDFLAG(PERFETTO_OS_FREEBSD) && \
+ !PERFETTO_BUILDFLAG(PERFETTO_OS_NACL)
+ struct {
+ clockid_t id;
diff --git a/www/iridium/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc b/www/iridium/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
new file mode 100644
index 000000000000..7bc926acd7a0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_perfetto_src_tracing_core_virtual__destructors.cc
@@ -0,0 +1,28 @@
+Backport of:
+
+From 46f0abc66c1d78c60a0415c5cb46852ef3bfa9bb Mon Sep 17 00:00:00 2001
+From: Nico Weber <thakis@chromium.org>
+Date: Sat, 8 Feb 2020 21:26:53 -0500
+Subject: [PATCH] Fix compile error emitted by trunk clang
+
+../../third_party/perfetto/src/tracing/core/virtual_destructors.cc:33:35:
+error: destructor cannot be declared using a type alias
+ 'perfetto::TracingService::ConsumerEndpoint' (aka
+ 'perfetto::ConsumerEndpoint') of the class name
+TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+
+Bug: chromium:1050372
+
+--- third_party/perfetto/src/tracing/core/virtual_destructors.cc.orig 2020-08-29 15:07:40 UTC
++++ third_party/perfetto/src/tracing/core/virtual_destructors.cc
+@@ -30,8 +30,8 @@ namespace perfetto {
+ Consumer::~Consumer() = default;
+ Producer::~Producer() = default;
+ TracingService::~TracingService() = default;
+-TracingService::ConsumerEndpoint::~ConsumerEndpoint() = default;
+-TracingService::ProducerEndpoint::~ProducerEndpoint() = default;
++ConsumerEndpoint::~ConsumerEndpoint() = default;
++ProducerEndpoint::~ProducerEndpoint() = default;
+ SharedMemory::~SharedMemory() = default;
+ SharedMemory::Factory::~Factory() = default;
+ SharedMemoryArbiter::~SharedMemoryArbiter() = default;
diff --git a/www/iridium/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h b/www/iridium/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
new file mode 100644
index 000000000000..2f151107c8c2
--- /dev/null
+++ b/www/iridium/files/patch-third__party_protobuf_src_google_protobuf_stubs_platform__macros.h
@@ -0,0 +1,11 @@
+--- third_party/protobuf/src/google/protobuf/stubs/platform_macros.h.orig 2019-10-21 19:07:25 UTC
++++ third_party/protobuf/src/google/protobuf/stubs/platform_macros.h
+@@ -118,7 +118,7 @@ GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+ #undef GOOGLE_PROTOBUF_PLATFORM_ERROR
+
+-#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__OpenBSD__)
++#if defined(GOOGLE_PROTOBUF_OS_ANDROID) || defined(GOOGLE_PROTOBUF_OS_IPHONE) || defined(__FreeBSD__)
+ // Android ndk does not support the __thread keyword very well yet. Here
+ // we use pthread_key_create()/pthread_getspecific()/... methods for
+ // TLS support on android.
diff --git a/www/iridium/files/patch-third__party_skia_src_core_SkCpu.cpp b/www/iridium/files/patch-third__party_skia_src_core_SkCpu.cpp
new file mode 100644
index 000000000000..4d7db67f8556
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_src_core_SkCpu.cpp
@@ -0,0 +1,19 @@
+--- third_party/skia/src/core/SkCpu.cpp.orig 2019-07-24 19:03:35 UTC
++++ third_party/skia/src/core/SkCpu.cpp
+@@ -76,6 +76,8 @@
+ #include <sys/auxv.h>
+
+ static uint32_t read_cpu_features() {
++return 0;
++#if 0
+ const uint32_t kHWCAP_CRC32 = (1<< 7),
+ kHWCAP_ASIMDHP = (1<<10);
+
+@@ -112,6 +114,7 @@
+ }
+ }
+ return features;
++#endif
+ }
+
+ #elif defined(SK_CPU_ARM32) && __has_include(<sys/auxv.h>) && \
diff --git a/www/iridium/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h b/www/iridium/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
new file mode 100644
index 000000000000..4621798922e7
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_src_gpu_GrAutoLocaleSetter.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/gpu/GrAutoLocaleSetter.h.orig 2019-03-11 22:08:28 UTC
++++ third_party/skia/src/gpu/GrAutoLocaleSetter.h
+@@ -27,7 +27,7 @@
+ #define HAVE_XLOCALE 0
+ #endif
+
+-#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION)
++#if defined(SK_BUILD_FOR_ANDROID) || defined(__UCLIBC__) || defined(_NEWLIB_VERSION) || defined(__FreeBSD__)
+ #define HAVE_LOCALE_T 0
+ #else
+ #define HAVE_LOCALE_T 1
diff --git a/www/iridium/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp b/www/iridium/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
new file mode 100644
index 000000000000..1241cb9d733b
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_src_images_SkJpegEncoder.cpp
@@ -0,0 +1,41 @@
+--- third_party/skia/src/images/SkJpegEncoder.cpp.orig 2019-09-09 21:57:02 UTC
++++ third_party/skia/src/images/SkJpegEncoder.cpp
+@@ -76,9 +76,14 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ return (transform_scanline_proc) nullptr;
+ };
+
++#ifdef JCS_EXTENSIONS
+ J_COLOR_SPACE jpegColorType = JCS_EXT_RGBA;
++#else
++ J_COLOR_SPACE jpegColorType = JCS_RGB;
++#endif
+ int numComponents = 0;
+ switch (srcInfo.colorType()) {
++#ifdef JCS_EXTENSIONS
+ case kRGBA_8888_SkColorType:
+ fProc = chooseProc8888();
+ jpegColorType = JCS_EXT_RGBA;
+@@ -89,6 +94,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_BGRA;
+ numComponents = 4;
+ break;
++#endif
+ case kRGB_565_SkColorType:
+ fProc = transform_scanline_565;
+ jpegColorType = JCS_RGB;
+@@ -108,6 +114,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_GRAYSCALE;
+ numComponents = 1;
+ break;
++#ifdef JCS_EXTENSIONS
+ case kRGBA_F16_SkColorType:
+ if (kUnpremul_SkAlphaType == srcInfo.alphaType() &&
+ options.fAlphaOption == SkJpegEncoder::AlphaOption::kBlendOnBlack) {
+@@ -118,6 +125,7 @@ bool SkJpegEncoderMgr::setParams(const SkImageInfo& sr
+ jpegColorType = JCS_EXT_RGBA;
+ numComponents = 4;
+ break;
++#endif
+ default:
+ return false;
+ }
diff --git a/www/iridium/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp b/www/iridium/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
new file mode 100644
index 000000000000..ce10a392a3de
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_src_ports_SkOSFile__stdio.cpp
@@ -0,0 +1,11 @@
+--- third_party/skia/src/ports/SkOSFile_stdio.cpp.orig 2020-02-03 21:54:56 UTC
++++ third_party/skia/src/ports/SkOSFile_stdio.cpp
+@@ -132,7 +132,7 @@ void sk_fflush(FILE* f) {
+
+ void sk_fsync(FILE* f) {
+ #if !defined(_WIN32) && !defined(SK_BUILD_FOR_ANDROID) && !defined(__UCLIBC__) \
+- && !defined(_NEWLIB_VERSION)
++ && !defined(_NEWLIB_VERSION) && !defined(__FreeBSD__)
+ int fd = fileno(f);
+ fsync(fd);
+ #endif
diff --git a/www/iridium/files/patch-third__party_skia_src_sksl_SkSLString.h b/www/iridium/files/patch-third__party_skia_src_sksl_SkSLString.h
new file mode 100644
index 000000000000..a6806cbac266
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_src_sksl_SkSLString.h
@@ -0,0 +1,11 @@
+--- third_party/skia/src/sksl/SkSLString.h.orig 2019-12-16 21:56:18 UTC
++++ third_party/skia/src/sksl/SkSLString.h
+@@ -17,6 +17,8 @@
+ #include "include/core/SkString.h"
+ #endif
+
++#include <stdarg.h>
++
+ namespace SkSL {
+
+ // Represents a (not necessarily null-terminated) slice of a string.
diff --git a/www/iridium/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h b/www/iridium/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
new file mode 100644
index 000000000000..7357a76fa0f9
--- /dev/null
+++ b/www/iridium/files/patch-third__party_skia_third__party_vulkanmemoryallocator_include_vk__mem__alloc.h
@@ -0,0 +1,11 @@
+--- third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h.orig 2020-04-24 08:05:43 UTC
++++ third_party/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h
+@@ -2232,7 +2232,7 @@ remove them if not needed.
+ #include <mutex> // for std::mutex
+ #include <atomic> // for std::atomic
+
+-#if !defined(_WIN32) && !defined(__APPLE__)
++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h> // for aligned_alloc()
+ #endif
+
diff --git a/www/iridium/files/patch-third__party_sqlite_BUILD.gn b/www/iridium/files/patch-third__party_sqlite_BUILD.gn
new file mode 100644
index 000000000000..9bc2ed01d5e2
--- /dev/null
+++ b/www/iridium/files/patch-third__party_sqlite_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/sqlite/BUILD.gn.orig 2019-09-09 21:55:43 UTC
++++ third_party/sqlite/BUILD.gn
+@@ -262,7 +262,7 @@ config("sqlite_warnings") {
+ ]
+ }
+ }
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ cflags += [
+ # SQLite doesn't believe in compiler warnings, preferring testing.
+ # http://www.sqlite.org/faq.html#q17
diff --git a/www/iridium/files/patch-third__party_swiftshader_BUILD.gn b/www/iridium/files/patch-third__party_swiftshader_BUILD.gn
new file mode 100644
index 000000000000..7869c319cc9c
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_BUILD.gn
@@ -0,0 +1,24 @@
+--- third_party/swiftshader/BUILD.gn.orig 2020-03-16 18:42:12 UTC
++++ third_party/swiftshader/BUILD.gn
+@@ -136,9 +136,6 @@ config("swiftshader_config") {
+ ldflags = [ "-Wl,--gc-sections" ]
+
+ if (target_cpu == "mipsel") {
+- ldflags += [
+- "-Wl,--hash-style=sysv",
+- ]
+ if (mips_arch_variant == "r1") {
+ ldflags += [
+ "-mips32",
+@@ -150,11 +147,8 @@ config("swiftshader_config") {
+ }
+ } else if (target_cpu == "mips64el") {
+ ldflags += [
+- "-Wl,--hash-style=sysv",
+ "-mips64r2",
+ ]
+- } else {
+- ldflags += [ "-Wl,--hash-style=both" ]
+ }
+
+ # A bug in the gold linker prevents using ICF on 32-bit (crbug.com/729532)
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_Common_Configurator.cpp b/www/iridium/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
new file mode 100644
index 000000000000..a1e1ccf4a0f1
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_Common_Configurator.cpp
@@ -0,0 +1,12 @@
+--- third_party/swiftshader/src/Common/Configurator.cpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/Common/Configurator.cpp
+@@ -42,6 +42,9 @@ namespace sw
+
+ bool Configurator::readFile()
+ {
++#if defined(__FreeBSD__)
++ return false;
++#endif
+ #if defined(__unix__)
+ if(access(path.c_str(), R_OK) != 0)
+ {
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp b/www/iridium/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
new file mode 100644
index 000000000000..96aca3af105f
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_Common_MutexLock.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/MutexLock.hpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/Common/MutexLock.hpp
+@@ -17,7 +17,7 @@
+
+ #include "Thread.hpp"
+
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__)
+ // Use a pthread mutex on Linux. Since many processes may use SwiftShader
+ // at the same time it's best to just have the scheduler overhead.
+ #include <pthread.h>
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp b/www/iridium/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
new file mode 100644
index 000000000000..fa03cd628462
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_Common_SharedLibrary.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/Common/SharedLibrary.hpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/Common/SharedLibrary.hpp
+@@ -97,7 +97,7 @@ void *loadLibrary(const std::string &libraryDirectory,
+
+ inline void *getLibraryHandle(const char *path)
+ {
+- #ifdef __ANDROID__
++ #if defined( __ANDROID__) || defined(__FreeBSD__)
+ // bionic doesn't support RTLD_NOLOAD before L
+ return dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ #else
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp b/www/iridium/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
new file mode 100644
index 000000000000..888c476a9108
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_Main_SwiftConfig.cpp
@@ -0,0 +1,14 @@
+--- third_party/swiftshader/src/Main/SwiftConfig.cpp.orig 2019-09-09 21:57:01 UTC
++++ third_party/swiftshader/src/Main/SwiftConfig.cpp
+@@ -764,7 +764,11 @@ namespace sw
+ struct stat status;
+ int lastModified = ini.getInteger("LastModified", "Time", 0);
+
++#if !defined(__FreeBSD__)
+ bool noConfig = stat("SwiftShader.ini", &status) != 0;
++#else
++ bool noConfig = false;
++#endif
+ newConfig = !noConfig && abs((int)status.st_mtime - lastModified) > 1;
+
+ if(disableServerOverride)
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
new file mode 100644
index 000000000000..7577231bc5a8
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Display.cpp
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Display.cpp.orig 2019-10-21 19:09:15 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Display.cpp
+@@ -690,7 +690,7 @@ bool Display::isValidWindow(EGLNativeWindowType window
+ return status != 0;
+ }
+ return false;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ return false; // Non X11 linux is headless only
+ #elif defined(__APPLE__)
+ return sw::OSX::IsValidWindow(window);
+@@ -868,7 +868,7 @@ sw::Format Display::getDisplayFormat() const
+ {
+ return sw::FORMAT_X8R8G8B8;
+ }
+- #elif defined(__linux__) // Non X11 linux is headless only
++ #elif defined(__linux__) || defined(__FreeBSD__) // Non X11 linux is headless only
+ return sw::FORMAT_A8B8G8R8;
+ #elif defined(__APPLE__)
+ return sw::FORMAT_A8B8G8R8;
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
new file mode 100644
index 000000000000..a21bb4acad17
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_Surface.cpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp.orig 2019-10-21 19:09:15 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/Surface.cpp
+@@ -362,7 +362,7 @@ bool WindowSurface::checkForResize()
+
+ int windowWidth = windowAttributes.width;
+ int windowHeight = windowAttributes.height;
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ // Non X11 linux is headless only
+ int windowWidth = 100;
+ int windowHeight = 100;
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
new file mode 100644
index 000000000000..3ca2cc4d69af
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.cpp
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp.orig 2020-02-03 21:54:55 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.cpp
+@@ -153,7 +153,7 @@ EGLDisplay EGLAPIENTRY GetDisplay(EGLNativeDisplayType
+ // FIXME: Check if display_id is the default display
+ }
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD)) && !defined(__ANDROID__)
+ #if defined(USE_X11)
+ if(!libX11)
+ #endif // Non X11 linux is headless only
+@@ -216,7 +216,7 @@ const char *EGLAPIENTRY QueryString(EGLDisplay dpy, EG
+ {
+ return success(
+ "EGL_KHR_client_get_all_proc_addresses "
+-#if defined(__linux__) && !defined(__ANDROID__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ "EGL_KHR_platform_gbm "
+ #endif
+ #if defined(USE_X11)
+@@ -1298,7 +1298,7 @@ EGLDisplay EGLAPIENTRY GetPlatformDisplay(EGLenum plat
+ {
+ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLAttrib *attrib_list = %p)", platform, native_display, attrib_list);
+
+- #if defined(__linux__) && !defined(__ANDROID__)
++ #if (defined(__linux__) || defined(__FreeBSD__)) && !defined(__ANDROID__)
+ switch(platform)
+ {
+ #if defined(USE_X11)
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
new file mode 100644
index 000000000000..59c1f562fb03
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libEGL_libEGL.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/OpenGL/libEGL/libEGL.hpp
+@@ -100,7 +100,7 @@ class LibEGL (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libEGL_lib[] = {"libEGL_swiftshader.so", "libEGL_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
+ #else
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
new file mode 100644
index 000000000000..1f68f9ed3be6
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLES__CM_libGLES__CM.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+@@ -261,7 +261,7 @@ class LibGLES_CM (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLES_CM_lib[] = {"libGLESv1_CM_swiftshader.so", "libGLESv1_CM_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
+ #else
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
new file mode 100644
index 000000000000..7a1936b0dce0
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_OpenGL_libGLESv2_libGLESv2.hpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp.orig 2019-03-11 22:08:03 UTC
++++ third_party/swiftshader/src/OpenGL/libGLESv2/libGLESv2.hpp
+@@ -286,7 +286,7 @@ class LibGLESv2 (private)
+ #endif
+ #elif defined(__ANDROID__)
+ const char *libGLESv2_lib[] = {"libGLESv2_swiftshader.so", "libGLESv2_swiftshader.so"};
+- #elif defined(__linux__)
++ #elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(__LP64__)
+ const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
+ #else
diff --git a/www/iridium/files/patch-third__party_swiftshader_src_Vulkan_VkDebug.cpp b/www/iridium/files/patch-third__party_swiftshader_src_Vulkan_VkDebug.cpp
new file mode 100644
index 000000000000..c4eeb77baf0d
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_src_Vulkan_VkDebug.cpp
@@ -0,0 +1,53 @@
+--- third_party/swiftshader/src/Vulkan/VkDebug.cpp.orig 2020-04-03 04:13:08 UTC
++++ third_party/swiftshader/src/Vulkan/VkDebug.cpp
+@@ -29,12 +29,17 @@
+ # include <sys/sysctl.h>
+ # include <unistd.h>
+ #endif
++#if defined(__FreeBSD__)
++# include <sys/sysctl.h>
++# include <sys/user.h>
++# include <unistd.h>
++#endif
+
+ namespace {
+
+ bool IsUnderDebugger()
+ {
+-#if defined(PTRACE) && !defined(__APPLE__) && !defined(__MACH__)
++#if defined(PTRACE) && !defined(__APPLE__) && !defined(__MACH__) && !defined(__FreeBSD__)
+ static bool checked = false;
+ static bool res = false;
+
+@@ -56,7 +61,7 @@ bool IsUnderDebugger()
+ return res;
+ #elif defined(_WIN32) || defined(_WIN64)
+ return IsDebuggerPresent() != 0;
+-#elif defined(__APPLE__) || defined(__MACH__)
++#elif defined(__APPLE__) || defined(__MACH__) || defined(__FreeBSD__)
+ // Code comes from the Apple Technical Q&A QA1361
+
+ // Tell sysctl what info we're requestion. Specifically we're asking for
+@@ -71,14 +76,22 @@ bool IsUnderDebugger()
+ struct kinfo_proc info;
+ size_t size = sizeof(info);
+
++# if defined(__FreeBSD__)
++ info.ki_flag = 0;
++# else
+ info.kp_proc.p_flag = 0;
++# endif
+
+ // Get the info we're requesting, if sysctl fails then info.kp_proc.p_flag will remain 0.
+ res = sysctl(request, sizeof(request) / sizeof(*request), &info, &size, NULL, 0);
+ ASSERT_MSG(res == 0, "syscl returned %d", res);
+
+ // We're being debugged if the P_TRACED flag is set
++# if defined(__FreeBSD__)
++ return ((info.ki_flag & P_TRACED) != 0);
++# else
+ return ((info.kp_proc.p_flag & P_TRACED) != 0);
++# endif
+ #else
+ return false;
+ #endif
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..32c68edfca31
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_config.h
@@ -0,0 +1,152 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h.orig 2020-03-16 18:42:15 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h
+@@ -8,15 +8,15 @@
+ #define BUG_REPORT_URL "https://bugs.llvm.org/"
+
+ /* Define to 1 to enable backtraces, and to 0 otherwise. */
+-#define ENABLE_BACKTRACES 0
++#define ENABLE_BACKTRACES 1
+
+ /* Define to 1 to enable crash overrides, and to 0 otherwise. */
+-#define ENABLE_CRASH_OVERRIDES 0
++#define ENABLE_CRASH_OVERRIDES 1
+
+ /* Define to 1 if you have the `backtrace' function. */
+-/* #undef HAVE_BACKTRACE */
++#define HAVE_BACKTRACE 1
+
+-/* #undef BACKTRACE_HEADER */
++#define BACKTRACE_HEADER <execinfo.h>
+
+ /* Define to 1 if you have the <CrashReporterClient.h> header file. */
+ /* #undef HAVE_CRASHREPORTERCLIENT_H */
+@@ -26,7 +26,7 @@
+
+ /* Define to 1 if you have the declaration of `arc4random', and to 0 if you
+ don't. */
+-#define HAVE_DECL_ARC4RANDOM 0
++#define HAVE_DECL_ARC4RANDOM 1
+
+ /* Define to 1 if you have the declaration of `FE_ALL_EXCEPT', and to 0 if you
+ don't. */
+@@ -50,7 +50,7 @@
+ #define HAVE_DLOPEN 1
+
+ /* Define if dladdr() is available on this platform. */
+-/* #undef HAVE_DLADDR */
++#define HAVE_DLADDR 1
+
+ /* Define to 1 if you have the <errno.h> header file. */
+ #define HAVE_ERRNO_H 1
+@@ -89,7 +89,7 @@
+ #define HAVE_ISATTY 1
+
+ /* Define to 1 if you have the `edit' library (-ledit). */
+-/* #undef HAVE_LIBEDIT */
++#define HAVE_LIBEDIT 1
+
+ /* Define to 1 if you have the `pfm' library (-lpfm). */
+ /* #undef HAVE_LIBPFM */
+@@ -107,25 +107,25 @@
+ /* #undef HAVE_PTHREAD_SETNAME_NP */
+
+ /* Define to 1 if you have the `z' library (-lz). */
+-/* #undef HAVE_LIBZ */
++#define HAVE_LIBZ 1
+
+ /* Define to 1 if you have the <link.h> header file. */
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+
+ /* Define to 1 if you have the `mallctl' function. */
+-/* #undef HAVE_MALLCTL */
++#define HAVE_MALLCTL 1
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+-#define HAVE_MALLOC_H 1
++/* #undef HAVE_MALLOC_H */
+
+ /* Define to 1 if you have the <malloc/malloc.h> header file. */
+ /* #undef HAVE_MALLOC_MALLOC_H */
+@@ -137,7 +137,7 @@
+ #define HAVE_POSIX_FALLOCATE 1
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+-/* #undef HAVE_POSIX_SPAWN */
++#define HAVE_POSIX_SPAWN 1
+
+ /* Define to 1 if you have the `pread' function. */
+ #define HAVE_PREAD 1
+@@ -158,16 +158,16 @@
+ #define HAVE_REALPATH 1
+
+ /* Define to 1 if you have the `sbrk' function. */
+-#define HAVE_SBRK 1
++/* #undef HAVE_SBRK */
+
+ /* Define to 1 if you have the `setenv' function. */
+ #define HAVE_SETENV 1
+
+ /* Define to 1 if you have the `sched_getaffinity' function. */
+-#define HAVE_SCHED_GETAFFINITY 1
++/* #undef HAVE_SCHED_GETAFFINITY */
+
+ /* Define to 1 if you have the `CPU_COUNT' macro. */
+-#define HAVE_CPU_COUNT 1
++/* #undef HAVE_CPU_COUNT */
+
+ /* Define to 1 if you have the `setrlimit' function. */
+ #define HAVE_SETRLIMIT 1
+@@ -209,13 +209,13 @@
+ #define HAVE_SYS_TYPES_H 1
+
+ /* Define if the setupterm() function is supported this platform. */
+-/* #undef HAVE_TERMINFO */
++#define HAVE_TERMINFO 1
+
+ /* Define if the xar_open() function is supported this platform. */
+ /* #undef HAVE_LIBXAR */
+
+ /* Define to 1 if you have the <termios.h> header file. */
+-/* #undef HAVE_TERMIOS_H */
++#define HAVE_TERMIOS_H 1
+
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #define HAVE_UNISTD_H 1
+@@ -224,7 +224,7 @@
+ /* #undef HAVE_VALGRIND_VALGRIND_H */
+
+ /* Define to 1 if you have the <zlib.h> header file. */
+-/* #undef HAVE_ZLIB_H */
++#define HAVE_ZLIB_H 1
+
+ /* Have host's _alloca */
+ /* #undef HAVE__ALLOCA */
+@@ -298,7 +298,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -310,7 +310,7 @@
+ #endif
+
+ /* Define if zlib compression is available */
+-#define LLVM_ENABLE_ZLIB 0
++#define LLVM_ENABLE_ZLIB 1
+
+ /* Define if overriding target triple is enabled */
+ /* #undef LLVM_TARGET_TRIPLE_ENV */
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
new file mode 100644
index 000000000000..4405e311225b
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-7.0_configs_linux_include_llvm_Config_llvm-config.h
@@ -0,0 +1,20 @@
+--- third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h.orig 2019-09-09 21:57:03 UTC
++++ third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/llvm-config.h
+@@ -38,7 +38,7 @@
+ #elif defined(__arm__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-linux-gnu"
++#define LLVM_DEFAULT_TARGET_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_DEFAULT_TARGET_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
+@@ -63,7 +63,7 @@
+ #elif defined(__arm__)
+ #define LLVM_HOST_TRIPLE "armv7-linux-gnueabihf"
+ #elif defined(__aarch64__)
+-#define LLVM_HOST_TRIPLE "aarch64-linux-gnu"
++#define LLVM_HOST_TRIPLE "aarch64-portbld-freebsd"
+ #elif defined(__mips__)
+ #define LLVM_HOST_TRIPLE "mipsel-linux-gnu"
+ #elif defined(__mips64)
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
new file mode 100644
index 000000000000..d5afa9c50345
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_build_Linux_include_llvm_Config_config.h
@@ -0,0 +1,29 @@
+--- third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h.orig 2019-03-11 22:08:30 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h
+@@ -121,7 +121,7 @@
+ #define HAVE_LINK_H 1
+
+ /* Define to 1 if you have the `lseek64' function. */
+-#define HAVE_LSEEK64 1
++/* #undef HAVE_LSEEK64 */
+
+ /* Define to 1 if you have the <mach/mach.h> header file. */
+ /* #undef HAVE_MACH_MACH_H */
+@@ -130,7 +130,7 @@
+ /* #undef HAVE_MALLCTL */
+
+ /* Define to 1 if you have the `mallinfo' function. */
+-#define HAVE_MALLINFO 1
++/* #undef HAVE_MALLINFO */
+
+ /* Define to 1 if you have the <malloc.h> header file. */
+ #define HAVE_MALLOC_H 1
+@@ -154,7 +154,7 @@
+ /* #undef HAVE_NDIR_H */
+
+ /* Define to 1 if you have the `posix_fallocate' function. */
+-#define HAVE_POSIX_FALLOCATE 1
++/* #undef HAVE_POSIX_FALLOCATE */
+
+ /* Define to 1 if you have the `posix_spawn' function. */
+ #define HAVE_POSIX_SPAWN 1
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
new file mode 100644
index 000000000000..28c940535747
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_llvm-subzero_lib_Support_Unix_Process.inc
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc.orig 2019-03-11 22:08:30 UTC
++++ third_party/swiftshader/third_party/llvm-subzero/lib/Support/Unix/Process.inc
+@@ -35,7 +35,7 @@
+ // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for
+ // <stdlib.h> instead. Unix.h includes this for us already.
+ #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \
+- !defined(__OpenBSD__) && !defined(__Bitrig__)
++ !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__Bitrig__)
+ #include <malloc.h>
+ #endif
+ #if defined(HAVE_MALLCTL)
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_memory.cpp b/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_memory.cpp
new file mode 100644
index 000000000000..f34425cdd42e
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_memory.cpp
@@ -0,0 +1,11 @@
+--- third_party/swiftshader/third_party/marl/src/memory.cpp.orig 2019-12-22 15:09:53 UTC
++++ third_party/swiftshader/third_party/marl/src/memory.cpp
+@@ -19,7 +19,7 @@
+
+ #include <cstring>
+
+-#if defined(__linux__) || defined(__APPLE__)
++#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
+ #include <sys/mman.h>
+ #include <unistd.h>
+ namespace {
diff --git a/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_thread.cpp b/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_thread.cpp
new file mode 100644
index 000000000000..927560e4f971
--- /dev/null
+++ b/www/iridium/files/patch-third__party_swiftshader_third__party_marl_src_thread.cpp
@@ -0,0 +1,22 @@
+--- third_party/swiftshader/third_party/marl/src/thread.cpp.orig 2019-12-22 15:09:09 UTC
++++ third_party/swiftshader/third_party/marl/src/thread.cpp
+@@ -27,6 +27,10 @@
+ #include <mach/thread_act.h>
+ #include <pthread.h>
+ #include <unistd.h>
++#elif defined(__FreeBSD__)
++#include <pthread.h>
++#include <pthread_np.h>
++#include <unistd.h>
+ #else
+ #include <pthread.h>
+ #include <unistd.h>
+@@ -85,6 +89,8 @@ void Thread::setName(const char* fmt, ...) {
+
+ #if defined(__APPLE__)
+ pthread_setname_np(name);
++#elif defined(__FreeBSD__)
++ pthread_set_name_np(pthread_self(), name);
+ #elif !defined(__Fuchsia__)
+ pthread_setname_np(pthread_self(), name);
+ #endif
diff --git a/www/iridium/files/patch-third__party_usrsctp_BUILD.gn b/www/iridium/files/patch-third__party_usrsctp_BUILD.gn
new file mode 100644
index 000000000000..e12616cdc188
--- /dev/null
+++ b/www/iridium/files/patch-third__party_usrsctp_BUILD.gn
@@ -0,0 +1,20 @@
+--- third_party/usrsctp/BUILD.gn.orig 2019-03-11 22:01:18 UTC
++++ third_party/usrsctp/BUILD.gn
+@@ -116,11 +116,16 @@ static_library("usrsctp") {
+ "-UINET6",
+ ]
+
+- if (is_linux || is_android) {
++ if ((is_linux && !is_bsd) || is_android ) {
+ defines += [
+ "__Userspace_os_Linux",
+ "_GNU_SOURCE",
+ ]
++ } else if (is_bsd) {
++ defines += [
++ "__Userspace_os_FreeBSD",
++ ]
++ cflags += [ "-U__FreeBSD__" ]
+ } else if (is_mac || is_ios) {
+ defines += [
+ "HAVE_SA_LEN",
diff --git a/www/iridium/files/patch-third__party_webrtc_BUILD.gn b/www/iridium/files/patch-third__party_webrtc_BUILD.gn
new file mode 100644
index 000000000000..431b2f75d72c
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_BUILD.gn
@@ -0,0 +1,12 @@
+--- third_party/webrtc/BUILD.gn.orig 2020-03-16 18:42:13 UTC
++++ third_party/webrtc/BUILD.gn
+@@ -171,6 +171,9 @@ config("common_inherited_config") {
+ if (is_linux) {
+ defines += [ "WEBRTC_LINUX" ]
+ }
++ if (is_bsd) {
++ defines += [ "WEBRTC_BSD" ]
++ }
+ if (is_mac) {
+ defines += [ "WEBRTC_MAC" ]
+ }
diff --git a/www/iridium/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn b/www/iridium/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
new file mode 100644
index 000000000000..a9fe31ec37b8
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_modules_audio__device_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/modules/audio_device/BUILD.gn.orig 2020-03-16 18:42:14 UTC
++++ third_party/webrtc/modules/audio_device/BUILD.gn
+@@ -259,7 +259,7 @@ rtc_library("audio_device_impl") {
+ if (rtc_use_dummy_audio_file_devices) {
+ defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ]
+ } else {
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "linux/alsasymboltable_linux.cc",
+ "linux/alsasymboltable_linux.h",
diff --git a/www/iridium/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/www/iridium/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 000000000000..41cae80d56bd
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,10 @@
+--- third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2019-09-09 21:57:05 UTC
++++ third_party/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -13,6 +13,7 @@
+ #include <string.h>
+
+ #include <algorithm>
++#include <cstdlib>
+ #include <utility>
+
+ #include "absl/algorithm/container.h"
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_byte__order.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_byte__order.h
new file mode 100644
index 000000000000..0f3e3413f1ae
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_byte__order.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/byte_order.h.orig 2019-06-04 18:58:09 UTC
++++ third_party/webrtc/rtc_base/byte_order.h
+@@ -89,7 +89,7 @@
+ #endif // defined(WEBRTC_ARCH_LITTLE_ENDIAN)
+
+ #elif defined(WEBRTC_POSIX)
+-#include <endian.h>
++#include <sys/endian.h>
+ #else
+ #error "Missing byte order functions for this arch."
+ #endif // defined(WEBRTC_MAC)
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
new file mode 100644
index 000000000000..b4945de800d2
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_ifaddrs__converter.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/ifaddrs_converter.h.orig 2019-03-11 22:08:15 UTC
++++ third_party/webrtc/rtc_base/ifaddrs_converter.h
+@@ -14,6 +14,8 @@
+ #if defined(WEBRTC_ANDROID)
+ #include "rtc_base/ifaddrs_android.h"
+ #else
++#include <sys/types.h>
++#include <sys/socket.h>
+ #include <ifaddrs.h>
+ #endif // WEBRTC_ANDROID
+
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.cc b/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.cc
new file mode 100644
index 000000000000..5fe1396d3154
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.cc
@@ -0,0 +1,12 @@
+--- third_party/webrtc/rtc_base/ip_address.cc.orig 2019-03-11 22:08:15 UTC
++++ third_party/webrtc/rtc_base/ip_address.cc
+@@ -11,6 +11,9 @@
+ #if defined(WEBRTC_POSIX)
+ #include <netinet/in.h>
+ #include <sys/socket.h>
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
+ #ifdef OPENBSD
+ #include <netinet/in_systm.h>
+ #endif
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.h
new file mode 100644
index 000000000000..3db51306bd94
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_ip__address.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/ip_address.h.orig 2019-03-11 22:08:15 UTC
++++ third_party/webrtc/rtc_base/ip_address.h
+@@ -17,6 +17,10 @@
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+ #endif
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#include <sys/socket.h>
++#endif
+ #if defined(WEBRTC_WIN)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_network.cc b/www/iridium/files/patch-third__party_webrtc_rtc__base_network.cc
new file mode 100644
index 000000000000..e45c76f40a22
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_network.cc
@@ -0,0 +1,29 @@
+--- third_party/webrtc/rtc_base/network.cc.orig 2019-12-16 21:56:20 UTC
++++ third_party/webrtc/rtc_base/network.cc
+@@ -14,7 +14,7 @@
+ // linux/if.h can't be included at the same time as the posix sys/if.h, and
+ // it's transitively required by linux/route.h, so include that version on
+ // linux instead of the standard posix one.
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/if.h>
+ #include <linux/route.h>
+ #elif !defined(__native_client__)
+@@ -767,7 +767,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_
+ }
+ #endif // WEBRTC_WIN
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ bool IsDefaultRoute(const std::string& network_name) {
+ FILE* f = fopen("/proc/net/route", "r");
+ if (!f) {
+@@ -810,7 +810,7 @@ bool BasicNetworkManager::IsIgnoredNetwork(const Netwo
+ strncmp(network.name().c_str(), "vboxnet", 7) == 0) {
+ return true;
+ }
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ // Make sure this is a default route, if we're ignoring non-defaults.
+ if (ignore_non_default_routes_ && !IsDefaultRoute(network.name())) {
+ return true;
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_network.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_network.h
new file mode 100644
index 000000000000..46d64c258e37
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_network.h
@@ -0,0 +1,13 @@
+--- third_party/webrtc/rtc_base/network.h.orig 2019-12-16 21:56:20 UTC
++++ third_party/webrtc/rtc_base/network.h
+@@ -26,6 +26,10 @@
+ #include "rtc_base/system/rtc_export.h"
+ #include "rtc_base/third_party/sigslot/sigslot.h"
+
++#if defined(WEBRTC_BSD)
++#include <sys/types.h>
++#endif
++
+ #if defined(WEBRTC_POSIX)
+ struct ifaddrs;
+ #endif // defined(WEBRTC_POSIX)
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc b/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
new file mode 100644
index 000000000000..939381fc9f1a
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.cc
@@ -0,0 +1,47 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.cc.orig 2020-03-16 18:42:14 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.cc
+@@ -51,7 +51,7 @@
+ #include "rtc_base/null_socket_server.h"
+ #include "rtc_base/time_utils.h"
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <linux/sockios.h>
+ #endif
+
+@@ -70,7 +70,7 @@ typedef void* SockOptArg;
+
+ #endif // WEBRTC_POSIX
+
+-#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__)
++#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__native_client__)
+
+ int64_t GetSocketRecvTimestamp(int socket) {
+ struct timeval tv_ioctl;
+@@ -290,7 +290,7 @@ int PhysicalSocket::GetOption(Option opt, int* value)
+ socklen_t optlen = sizeof(*value);
+ int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+ if (ret != -1 && opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ *value = (*value != IP_PMTUDISC_DONT) ? 1 : 0;
+ #endif
+ }
+@@ -303,7 +303,7 @@ int PhysicalSocket::SetOption(Option opt, int value) {
+ if (TranslateOption(opt, &slevel, &sopt) == -1)
+ return -1;
+ if (opt == OPT_DONTFRAGMENT) {
+-#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
++#if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) && !defined(WEBRTC_BSD)
+ value = (value) ? IP_PMTUDISC_DO : IP_PMTUDISC_DONT;
+ #endif
+ }
+@@ -533,7 +533,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* s
+ *slevel = IPPROTO_IP;
+ *sopt = IP_DONTFRAGMENT;
+ break;
+-#elif defined(WEBRTC_MAC) || defined(BSD) || defined(__native_client__)
++#elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) || defined(__native_client__)
+ RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported.";
+ return -1;
+ #elif defined(WEBRTC_POSIX)
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
new file mode 100644
index 000000000000..3fe92f247ce2
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_physical__socket__server.h
@@ -0,0 +1,11 @@
+--- third_party/webrtc/rtc_base/physical_socket_server.h.orig 2019-03-11 22:08:16 UTC
++++ third_party/webrtc/rtc_base/physical_socket_server.h
+@@ -11,7 +11,7 @@
+ #ifndef RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+ #define RTC_BASE_PHYSICAL_SOCKET_SERVER_H_
+
+-#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX)
++#if defined(WEBRTC_POSIX) && defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ #include <sys/epoll.h>
+ #define WEBRTC_USE_EPOLL 1
+ #endif
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc b/www/iridium/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
new file mode 100644
index 000000000000..9d0e6fdcc5fd
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_platform__thread__types.cc
@@ -0,0 +1,39 @@
+--- third_party/webrtc/rtc_base/platform_thread_types.cc.orig 2019-12-16 21:56:20 UTC
++++ third_party/webrtc/rtc_base/platform_thread_types.cc
+@@ -11,7 +11,11 @@
+ #include "rtc_base/platform_thread_types.h"
+
+ #if defined(WEBRTC_LINUX)
++#if !defined(__FreeBSD__)
+ #include <sys/prctl.h>
++#else
++#include <pthread_np.h>
++#endif
+ #include <sys/syscall.h>
+ #endif
+
+@@ -27,6 +31,8 @@ PlatformThreadId CurrentThreadId() {
+ return gettid();
+ #elif defined(WEBRTC_FUCHSIA)
+ return zx_thread_self();
++#elif defined(__FreeBSD__)
++ return pthread_getthreadid_np();
+ #elif defined(WEBRTC_LINUX)
+ return syscall(__NR_gettid);
+ #elif defined(__EMSCRIPTEN__)
+@@ -57,6 +63,7 @@ bool IsThreadRefEqual(const PlatformThreadRef& a, cons
+ }
+
+ void SetCurrentThreadName(const char* name) {
++#if !defined(__FreeBSD__)
+ #if defined(WEBRTC_WIN)
+ // For details see:
+ // https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-set-a-thread-name-in-native-code
+@@ -81,6 +88,7 @@ void SetCurrentThreadName(const char* name) {
+ prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(name)); // NOLINT
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ pthread_setname_np(name);
++#endif
+ #endif
+ }
+
diff --git a/www/iridium/files/patch-third__party_webrtc_rtc__base_third__party_sigslot_sigslot.h b/www/iridium/files/patch-third__party_webrtc_rtc__base_third__party_sigslot_sigslot.h
new file mode 100644
index 000000000000..3d7e07133d72
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_rtc__base_third__party_sigslot_sigslot.h
@@ -0,0 +1,19 @@
+--- third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h.orig 2020-03-03 18:55:31 UTC
++++ third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h
+@@ -178,6 +178,8 @@ class multi_threaded_local {
+ #endif // _SIGSLOT_HAS_WIN32_THREADS
+
+ #ifdef _SIGSLOT_HAS_POSIX_THREADS
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wthread-safety-analysis"
+ // The multi threading policies only get compiled in if they are enabled.
+ class multi_threaded_global {
+ public:
+@@ -201,6 +203,7 @@ class multi_threaded_local {
+ private:
+ pthread_mutex_t m_mutex;
+ };
++#pragma GCC diagnostic pop
+ #endif // _SIGSLOT_HAS_POSIX_THREADS
+
+ template <class mt_policy>
diff --git a/www/iridium/files/patch-third__party_webrtc_system__wrappers_BUILD.gn b/www/iridium/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
new file mode 100644
index 000000000000..bb0b3df2b288
--- /dev/null
+++ b/www/iridium/files/patch-third__party_webrtc_system__wrappers_BUILD.gn
@@ -0,0 +1,11 @@
+--- third_party/webrtc/system_wrappers/BUILD.gn.orig 2019-09-09 21:57:06 UTC
++++ third_party/webrtc/system_wrappers/BUILD.gn
+@@ -58,8 +58,6 @@ rtc_static_library("system_wrappers") {
+ if (!build_with_chromium) {
+ deps += [ ":cpu_features_linux" ]
+ }
+-
+- libs += [ "rt" ]
+ }
+
+ if (is_win) {
diff --git a/www/iridium/files/patch-third__party_yasm_yasm__assemble.gni b/www/iridium/files/patch-third__party_yasm_yasm__assemble.gni
new file mode 100644
index 000000000000..a54244fd5e3e
--- /dev/null
+++ b/www/iridium/files/patch-third__party_yasm_yasm__assemble.gni
@@ -0,0 +1,157 @@
+--- third_party/yasm/yasm_assemble.gni.orig 2020-03-16 18:40:14 UTC
++++ third_party/yasm/yasm_assemble.gni
+@@ -1,105 +1,23 @@
+-# Copyright 2014 The Chromium Authors. All rights reserved.
++# Copyright 2016 The Chromium Authors. All rights reserved.
+ # Use of this source code is governed by a BSD-style license that can be
+ # found in the LICENSE file.
+
+-# This provides the yasm_assemble() template which uses YASM to assemble
+-# assembly files.
+-#
+-# Files to be assembled with YASM should have an extension of .asm.
+-#
+-# Parameters
+-#
+-# yasm_flags (optional)
+-# [list of strings] Pass additional flags into YASM. These are appended
+-# to the command line. Note that the target machine type and system is
+-# already set up based on the current toolchain so you don't need to
+-# specify these things (see below).
+-#
+-# Example: yasm_flags = [ "--force-strict" ]
+-#
+-# include_dirs (optional)
+-# [list of dir names] List of additional include dirs. Note that the
+-# source root and the root generated file dir is always added, just like
+-# our C++ build sets up.
+-#
+-# Example: include_dirs = [ "//some/other/path", target_gen_dir ]
+-#
+-# defines (optional)
+-# [list of strings] List of defines, as with the native code defines.
+-#
+-# Example: defines = [ "FOO", "BAR=1" ]
+-#
+-# inputs, deps, visibility (optional)
+-# These have the same meaning as in an action.
+-#
+-# Example
+-#
+-# yasm_assemble("my_yasm_target") {
+-# sources = [
+-# "ultra_optimized_awesome.asm",
+-# ]
+-# include_dirs = [ "assembly_include" ]
+-# }
+-
+-if (is_mac || is_ios) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-fmacho32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fmacho64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_posix || is_fuchsia) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-felf32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-DPIC",
+- "-felf64",
+- "-m",
+- "amd64",
+- ]
+- }
+-} else if (is_win) {
+- if (current_cpu == "x86") {
+- _yasm_flags = [
+- "-DPREFIX",
+- "-fwin32",
+- "-m",
+- "x86",
+- ]
+- } else if (current_cpu == "x64") {
+- _yasm_flags = [
+- "-fwin64",
+- "-m",
+- "amd64",
+- ]
+- }
++if (current_cpu == "x86") {
++ _yasm_flags = [
++ "-felf32",
++ "-m",
++ "x86",
++ ]
++} else if (current_cpu == "x64") {
++ _yasm_flags = [
++ "-DPIC",
++ "-felf64",
++ "-m",
++ "amd64",
++ ]
+ }
+
+-if (is_win) {
+- asm_obj_extension = "obj"
+-} else {
+- asm_obj_extension = "o"
+-}
+-
+ template("yasm_assemble") {
+- assert(defined(invoker.sources), "Need sources defined for $target_name")
+-
+- # Only depend on YASM on x86 systems. Force compilation of .asm files for
+- # ARM to fail.
+- assert(current_cpu == "x86" || current_cpu == "x64")
+-
+ action_name = "${target_name}_action"
+ source_set_name = target_name
+
+@@ -114,22 +32,12 @@ template("yasm_assemble") {
+ inputs = invoker.inputs
+ }
+
+- # Executable (first in the args). The binary might be in the root build dir
+- # (no cross-compiling) or in a toolchain-specific subdirectory of that
+- # (when cross-compiling).
+- yasm_label = "//third_party/yasm($host_toolchain)"
+- args = [ "./" + # Force current dir.
+- rebase_path(get_label_info(yasm_label, "root_out_dir") + "/yasm",
+- root_build_dir) ]
+-
+- # Deps.
+- deps = [ yasm_label ]
++ deps = []
+ if (defined(invoker.deps)) {
+ deps += invoker.deps
+ }
+
+- # Flags.
+- args += _yasm_flags
++ args = [ "yasm" ] + _yasm_flags
+ if (defined(invoker.yasm_flags)) {
+ args += invoker.yasm_flags
+ }
+@@ -184,9 +92,6 @@ template("yasm_assemble") {
+ }
+
+ sources = get_target_outputs(":$action_name")
+-
+- # Do not publicize any header to remove build dependency.
+- public = []
+
+ deps = [ ":$action_name" ]
+ }
diff --git a/www/iridium/files/patch-tools_gn_build_gen.py b/www/iridium/files/patch-tools_gn_build_gen.py
new file mode 100644
index 000000000000..1461138a4fd5
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_build_gen.py
@@ -0,0 +1,24 @@
+--- tools/gn/build/gen.py.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/build/gen.py
+@@ -73,6 +73,9 @@ class Platform(object):
+ def is_haiku(self):
+ return self._platform == 'haiku'
+
++ def is_freebsd(self):
++ return self._platform == 'freebsd'
++
+ def is_posix(self):
+ return self._platform in ['linux', 'freebsd', 'darwin', 'aix', 'openbsd', 'haiku']
+
+@@ -351,6 +354,11 @@ def WriteGNNinja(path, platform, host, options):
+ elif platform.is_haiku():
+ cflags.append('-fPIC')
+ cflags.extend(['-D_BSD_SOURCE'])
++ elif platform.is_freebsd():
++ cflags.extend(['-Wno-deprecated-register', '-Wno-parentheses-equality'])
++ ldflags.extend(['-pthread'])
++ libs.extend(['-lexecinfo', '-lkvm', '-lutil'])
++ include_dirs += ['/usr/local/include']
+
+ if platform.is_posix() and not platform.is_haiku():
+ ldflags.append('-pthread')
diff --git a/www/iridium/files/patch-tools_gn_src_base_files_file__posix.cc b/www/iridium/files/patch-tools_gn_src_base_files_file__posix.cc
new file mode 100644
index 000000000000..26958b7bf8f1
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_base_files_file__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/src/base/files/file_posix.cc.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/base/files/file_posix.cc
+@@ -372,7 +372,7 @@ void File::DoInitialize(const FilePath& path, uint32_t
+ bool File::Flush() {
+ DCHECK(IsValid());
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !HANDLE_EINTR(fdatasync(file_.get()));
+ #else
+ return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/www/iridium/files/patch-tools_gn_src_base_files_file__util.h b/www/iridium/files/patch-tools_gn_src_base_files_file__util.h
new file mode 100644
index 000000000000..910d80aa09c6
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_base_files_file__util.h
@@ -0,0 +1,11 @@
+--- tools/gn/src/base/files/file_util.h.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/base/files/file_util.h
+@@ -325,7 +325,7 @@ bool VerifyPathControlledByAdmin(const base::FilePath&
+ // the directory |path|, in the number of FilePath::CharType, or -1 on failure.
+ int GetMaximumPathComponentLength(const base::FilePath& path);
+
+-#if defined(OS_LINUX) || defined(OS_AIX)
++#if defined(OS_LINUX) || defined(OS_AIX) || defined(OS_BSD)
+ // Broad categories of file systems as returned by statfs() on Linux.
+ enum FileSystemType {
+ FILE_SYSTEM_UNKNOWN, // statfs failed.
diff --git a/www/iridium/files/patch-tools_gn_src_base_files_file__util__posix.cc b/www/iridium/files/patch-tools_gn_src_base_files_file__util__posix.cc
new file mode 100644
index 000000000000..b5476cba713c
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_base_files_file__util__posix.cc
@@ -0,0 +1,11 @@
+--- tools/gn/src/base/files/file_util_posix.cc.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/base/files/file_util_posix.cc
+@@ -210,7 +210,7 @@ bool ReplaceFile(const FilePath& from_path,
+ }
+
+ bool CreateLocalNonBlockingPipe(int fds[2]) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return pipe2(fds, O_CLOEXEC | O_NONBLOCK) == 0;
+ #else
+ int raw_fds[2];
diff --git a/www/iridium/files/patch-tools_gn_src_base_files_scoped__file.cc b/www/iridium/files/patch-tools_gn_src_base_files_scoped__file.cc
new file mode 100644
index 000000000000..acc59789e438
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_base_files_scoped__file.cc
@@ -0,0 +1,11 @@
+--- tools/gn/src/base/files/scoped_file.cc.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/base/files/scoped_file.cc
+@@ -30,7 +30,7 @@ void ScopedFDCloseTraits::Free(int fd) {
+ // a single open directory would bypass the entire security model.
+ int ret = IGNORE_EINTR(close(fd));
+
+-#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || \
++#if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_FUCHSIA) || defined(OS_BSD) || \
+ defined(OS_ANDROID)
+ // NB: Some file descriptors can return errors from close() e.g. network
+ // filesystems such as NFS and Linux input devices. On Linux, macOS, and
diff --git a/www/iridium/files/patch-tools_gn_src_gn_exec__process.cc b/www/iridium/files/patch-tools_gn_src_gn_exec__process.cc
new file mode 100644
index 000000000000..761ee60ca826
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_gn_exec__process.cc
@@ -0,0 +1,13 @@
+--- tools/gn/src/gn/exec_process.cc.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/gn/exec_process.cc
+@@ -30,6 +30,10 @@
+ #include "base/posix/file_descriptor_shuffle.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <signal.h>
++#endif
++
+ namespace internal {
+
+ #if defined(OS_WIN)
diff --git a/www/iridium/files/patch-tools_gn_src_util_sys__info.cc b/www/iridium/files/patch-tools_gn_src_util_sys__info.cc
new file mode 100644
index 000000000000..8b5fbb9cdb14
--- /dev/null
+++ b/www/iridium/files/patch-tools_gn_src_util_sys__info.cc
@@ -0,0 +1,11 @@
+--- tools/gn/src/util/sys_info.cc.orig 2020-03-16 18:48:21 UTC
++++ tools/gn/src/util/sys_info.cc
+@@ -28,6 +28,8 @@ std::string OperatingSystemArchitecture() {
+ arch = "x86";
+ } else if (arch == "amd64") {
+ arch = "x86_64";
++ } else if (arch == "arm64") {
++ arch = "aarch64";
+ } else if (std::string(info.sysname) == "AIX") {
+ arch = "ppc64";
+ }
diff --git a/www/iridium/files/patch-tools_json__schema__compiler_feature__compiler.py b/www/iridium/files/patch-tools_json__schema__compiler_feature__compiler.py
new file mode 100644
index 000000000000..fda74ee7deec
--- /dev/null
+++ b/www/iridium/files/patch-tools_json__schema__compiler_feature__compiler.py
@@ -0,0 +1,10 @@
+--- tools/json_schema_compiler/feature_compiler.py.orig 2020-02-03 21:53:12 UTC
++++ tools/json_schema_compiler/feature_compiler.py
+@@ -218,6 +218,7 @@ FEATURE_GRAMMAR = (
+ 'enum_map': {
+ 'chromeos': 'Feature::CHROMEOS_PLATFORM',
+ 'linux': 'Feature::LINUX_PLATFORM',
++ 'bsd': 'Feature::LINUX_PLATFORM',
+ 'mac': 'Feature::MACOSX_PLATFORM',
+ 'win': 'Feature::WIN_PLATFORM',
+ }
diff --git a/www/iridium/files/patch-tools_json__schema__compiler_model.py b/www/iridium/files/patch-tools_json__schema__compiler_model.py
new file mode 100644
index 000000000000..054250e781d5
--- /dev/null
+++ b/www/iridium/files/patch-tools_json__schema__compiler_model.py
@@ -0,0 +1,11 @@
+--- tools/json_schema_compiler/model.py.orig 2019-12-16 21:51:07 UTC
++++ tools/json_schema_compiler/model.py
+@@ -605,7 +605,7 @@ class Platforms(object):
+ """
+ CHROMEOS = _PlatformInfo("chromeos")
+ CHROMEOS_TOUCH = _PlatformInfo("chromeos_touch")
+- LINUX = _PlatformInfo("linux")
++ LINUX = _PlatformInfo("bsd")
+ MAC = _PlatformInfo("mac")
+ WIN = _PlatformInfo("win")
+
diff --git a/www/iridium/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn b/www/iridium/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
new file mode 100644
index 000000000000..ac82f274b479
--- /dev/null
+++ b/www/iridium/files/patch-tools_perf_chrome__telemetry__build_BUILD.gn
@@ -0,0 +1,11 @@
+--- tools/perf/chrome_telemetry_build/BUILD.gn.orig 2020-03-16 18:40:43 UTC
++++ tools/perf/chrome_telemetry_build/BUILD.gn
+@@ -46,7 +46,7 @@ group("telemetry_chrome_test") {
+ data_deps += [ "//chrome:reorder_imports" ]
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ data_deps += [
+ "//third_party/breakpad:dump_syms($host_toolchain)",
+ "//third_party/crashpad/crashpad/tools:crashpad_database_util",
diff --git a/www/iridium/files/patch-tools_variations_fieldtrial__to__struct.py b/www/iridium/files/patch-tools_variations_fieldtrial__to__struct.py
new file mode 100644
index 000000000000..940d72d03d24
--- /dev/null
+++ b/www/iridium/files/patch-tools_variations_fieldtrial__to__struct.py
@@ -0,0 +1,10 @@
+--- tools/variations/fieldtrial_to_struct.py.orig 2020-03-16 18:40:14 UTC
++++ tools/variations/fieldtrial_to_struct.py
+@@ -35,6 +35,7 @@ _platforms = [
+ 'android_weblayer',
+ 'android_webview',
+ 'chromeos',
++ 'freebsd',
+ 'fuchsia',
+ 'ios',
+ 'linux',
diff --git a/www/iridium/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc b/www/iridium/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
new file mode 100644
index 000000000000..40534eb32dbb
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_dragdrop_os__exchange__data__provider__factory.cc
@@ -0,0 +1,20 @@
+--- ui/base/dragdrop/os_exchange_data_provider_factory.cc.orig 2019-07-24 18:59:18 UTC
++++ ui/base/dragdrop/os_exchange_data_provider_factory.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(USE_X11)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+ #elif defined(OS_MACOSX)
+ #include "ui/base/dragdrop/os_exchange_data_provider_builder_mac.h"
+@@ -23,7 +23,7 @@ std::unique_ptr<OSExchangeData::Provider>
+ OSExchangeDataProviderFactory::CreateProvider() {
+ #if defined(USE_X11)
+ return std::make_unique<OSExchangeDataProviderAuraX11>();
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ return std::make_unique<OSExchangeDataProviderAura>();
+ #elif defined(OS_MACOSX)
+ return ui::BuildOSExchangeDataProviderMac();
diff --git a/www/iridium/files/patch-ui_base_ime_init_input__method__initializer.cc b/www/iridium/files/patch-ui_base_ime_init_input__method__initializer.cc
new file mode 100644
index 000000000000..8f3c47ebd01b
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_ime_init_input__method__initializer.cc
@@ -0,0 +1,38 @@
+--- ui/base/ime/init/input_method_initializer.cc.orig 2019-06-04 18:55:49 UTC
++++ ui/base/ime/init/input_method_initializer.cc
+@@ -8,7 +8,7 @@
+
+ #if defined(OS_CHROMEOS)
+ #include "ui/base/ime/ime_bridge.h"
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "base/logging.h"
+ #include "ui/base/ime/linux/fake_input_method_context_factory.h"
+ #elif defined(OS_WIN)
+@@ -18,7 +18,7 @@
+
+ namespace {
+
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const ui::LinuxInputMethodContextFactory*
+ g_linux_input_method_context_factory_for_testing;
+ #endif
+@@ -46,7 +46,7 @@ void ShutdownInputMethod() {
+ void InitializeInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Initialize();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ if (!g_linux_input_method_context_factory_for_testing)
+ g_linux_input_method_context_factory_for_testing =
+ new FakeInputMethodContextFactory();
+@@ -67,7 +67,7 @@ void InitializeInputMethodForTesting() {
+ void ShutdownInputMethodForTesting() {
+ #if defined(OS_CHROMEOS)
+ IMEBridge::Shutdown();
+-#elif defined(USE_AURA) && defined(OS_LINUX)
++#elif defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxInputMethodContextFactory* factory =
+ LinuxInputMethodContextFactory::instance();
+ CHECK(!factory || factory == g_linux_input_method_context_factory_for_testing)
diff --git a/www/iridium/files/patch-ui_base_resource_resource__bundle.cc b/www/iridium/files/patch-ui_base_resource_resource__bundle.cc
new file mode 100644
index 000000000000..91e1320a26f5
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_resource_resource__bundle.cc
@@ -0,0 +1,20 @@
+--- ui/base/resource/resource_bundle.cc.orig 2020-03-16 18:40:15 UTC
++++ ui/base/resource/resource_bundle.cc
+@@ -822,7 +822,7 @@ void ResourceBundle::ReloadFonts() {
+ }
+
+ ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
+-#if defined(OS_WIN) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_BSD)
+ return max_scale_factor_;
+ #else
+ return GetSupportedScaleFactors().back();
+@@ -875,7 +875,7 @@ void ResourceBundle::InitSharedInstance(Delegate* dele
+ // On platforms other than iOS, 100P is always a supported scale factor.
+ // For Windows we have a separate case in this function.
+ supported_scale_factors.push_back(SCALE_FACTOR_100P);
+-#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ supported_scale_factors.push_back(SCALE_FACTOR_200P);
+ #endif
+ #endif
diff --git a/www/iridium/files/patch-ui_base_resource_resource__bundle__freebsd.cc b/www/iridium/files/patch-ui_base_resource_resource__bundle__freebsd.cc
new file mode 100644
index 000000000000..ea5ade19da2e
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_resource_resource__bundle__freebsd.cc
@@ -0,0 +1,24 @@
+--- ui/base/resource/resource_bundle_freebsd.cc.orig 2019-03-17 01:47:14 UTC
++++ ui/base/resource/resource_bundle_freebsd.cc
+@@ -0,0 +1,21 @@
++// Copyright 2017 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ui/base/resource/resource_bundle.h"
++
++#include "base/logging.h"
++#include "base/macros.h"
++#include "ui/gfx/image/image.h"
++
++namespace ui {
++
++void ResourceBundle::LoadCommonResources() {
++ LoadChromeResources();
++}
++
++gfx::Image& ResourceBundle::GetNativeImageNamed(int resource_id) {
++ return GetImageNamed(resource_id);
++}
++
++} // namespace ui
diff --git a/www/iridium/files/patch-ui_base_ui__base__features.cc b/www/iridium/files/patch-ui_base_ui__base__features.cc
new file mode 100644
index 000000000000..aa850d8e1146
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_ui__base__features.cc
@@ -0,0 +1,20 @@
+--- ui/base/ui_base_features.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/base/ui_base_features.cc
+@@ -113,7 +113,7 @@ const base::Feature kEnableAutomaticUiAdjustmentsForTo
+ "EnableAutomaticUiAdjustmentsForTouch", base::FEATURE_ENABLED_BY_DEFAULT};
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ // Enables stylus appearing as touch when in contact with digitizer.
+ const base::Feature kDirectManipulationStylus = {
+ "DirectManipulationStylus",
+@@ -123,7 +123,7 @@ const base::Feature kDirectManipulationStylus = {
+ base::FEATURE_DISABLED_BY_DEFAULT
+ #endif
+ };
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Disable the FormControlsRefresh feature for all platforms. See
+ // crbug.com/1057669.
diff --git a/www/iridium/files/patch-ui_base_ui__base__features.h b/www/iridium/files/patch-ui_base_ui__base__features.h
new file mode 100644
index 000000000000..d86c205b8c2e
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_ui__base__features.h
@@ -0,0 +1,15 @@
+--- ui/base/ui_base_features.h.orig 2020-03-16 18:40:43 UTC
++++ ui/base/ui_base_features.h
+@@ -61,10 +61,10 @@ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kEnableAutomaticUiAdjustmentsForTouch;
+ #endif // defined(OS_WIN) || defined(OS_CHROMEOS)
+
+-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+ COMPONENT_EXPORT(UI_BASE_FEATURES)
+ extern const base::Feature kDirectManipulationStylus;
+-#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
++#endif // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
+
+ // Used to enable the new controls UI.
+ COMPONENT_EXPORT(UI_BASE_FEATURES)
diff --git a/www/iridium/files/patch-ui_base_webui_web__ui__util.cc b/www/iridium/files/patch-ui_base_webui_web__ui__util.cc
new file mode 100644
index 000000000000..422ea71485b9
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_webui_web__ui__util.cc
@@ -0,0 +1,11 @@
+--- ui/base/webui/web_ui_util.cc.orig 2020-03-16 18:40:15 UTC
++++ ui/base/webui/web_ui_util.cc
+@@ -236,7 +236,7 @@ std::string GetFontFamily() {
+
+ // TODO(dnicoara) Remove Ozone check when PlatformFont support is introduced
+ // into Ozone: crbug.com/320050
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS) && !defined(USE_OZONE)
+ font_family = ui::ResourceBundle::GetSharedInstance().GetFont(
+ ui::ResourceBundle::BaseFont).GetFontName() + ", " + font_family;
+ #endif
diff --git a/www/iridium/files/patch-ui_base_x_x11__shm__image__pool__base.cc b/www/iridium/files/patch-ui_base_x_x11__shm__image__pool__base.cc
new file mode 100644
index 000000000000..7546426f2036
--- /dev/null
+++ b/www/iridium/files/patch-ui_base_x_x11__shm__image__pool__base.cc
@@ -0,0 +1,43 @@
+--- ui/base/x/x11_shm_image_pool_base.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/base/x/x11_shm_image_pool_base.cc
+@@ -16,6 +16,7 @@
+ #include "base/environment.h"
+ #include "base/location.h"
+ #include "base/strings/string_util.h"
++#include "base/system/sys_info.h"
+ #include "base/threading/thread_task_runner_handle.h"
+ #include "build/build_config.h"
+ #include "net/base/url_util.h"
+@@ -44,10 +45,14 @@ constexpr float kShmResizeShrinkThreshold =
+ 1.0f / (kShmResizeThreshold * kShmResizeThreshold);
+
+ std::size_t MaxShmSegmentSizeImpl() {
++#if defined(OS_BSD)
++ return base::SysInfo::MaxSharedMemorySize();
++#else
+ struct shminfo info;
+ if (shmctl(0, IPC_INFO, reinterpret_cast<struct shmid_ds*>(&info)) == -1)
+ return 0;
+ return info.shmmax;
++#endif
+ }
+
+ std::size_t MaxShmSegmentSize() {
+@@ -199,7 +204,7 @@ bool XShmImagePoolBase::Resize(const gfx::Size& pixel_
+ shmctl(state.shminfo_.shmid, IPC_RMID, nullptr);
+ return false;
+ }
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, a shmid can still be attached after IPC_RMID if otherwise
+ // kept alive. Detach before XShmAttach to prevent a memory leak in case
+ // the process dies.
+@@ -209,7 +214,7 @@ bool XShmImagePoolBase::Resize(const gfx::Size& pixel_
+ if (!XShmAttach(display_, &state.shminfo_))
+ return false;
+ state.shmem_attached_to_server_ = true;
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ // The Linux-specific shmctl behavior above may not be portable, so we're
+ // forced to do IPC_RMID after the server has attached to the segment.
+ // XShmAttach is asynchronous, so we must also sync.
diff --git a/www/iridium/files/patch-ui_compositor_compositor.cc b/www/iridium/files/patch-ui_compositor_compositor.cc
new file mode 100644
index 000000000000..f89ddbcf2b9f
--- /dev/null
+++ b/www/iridium/files/patch-ui_compositor_compositor.cc
@@ -0,0 +1,11 @@
+--- ui/compositor/compositor.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/compositor/compositor.cc
+@@ -669,7 +669,7 @@ void Compositor::OnFrameTokenChanged(uint32_t frame_to
+ NOTREACHED();
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void Compositor::OnCompleteSwapWithNewSize(const gfx::Size& size) {
+ for (auto& observer : observer_list_)
+ observer.OnCompositingCompleteSwapWithNewSize(this, size);
diff --git a/www/iridium/files/patch-ui_compositor_compositor.h b/www/iridium/files/patch-ui_compositor_compositor.h
new file mode 100644
index 000000000000..89e662bc3e66
--- /dev/null
+++ b/www/iridium/files/patch-ui_compositor_compositor.h
@@ -0,0 +1,11 @@
+--- ui/compositor/compositor.h.orig 2020-03-16 18:40:43 UTC
++++ ui/compositor/compositor.h
+@@ -380,7 +380,7 @@ class COMPOSITOR_EXPORT Compositor : public cc::LayerT
+ void OnFirstSurfaceActivation(const viz::SurfaceInfo& surface_info) override;
+ void OnFrameTokenChanged(uint32_t frame_token) override;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ void OnCompleteSwapWithNewSize(const gfx::Size& size);
+ #endif
+
diff --git a/www/iridium/files/patch-ui_compositor_compositor__observer.h b/www/iridium/files/patch-ui_compositor_compositor__observer.h
new file mode 100644
index 000000000000..deab6a8328f8
--- /dev/null
+++ b/www/iridium/files/patch-ui_compositor_compositor__observer.h
@@ -0,0 +1,16 @@
+--- ui/compositor/compositor_observer.h.orig 2019-12-17 19:56:41 UTC
++++ ui/compositor/compositor_observer.h
+@@ -42,11 +42,11 @@ class COMPOSITOR_EXPORT CompositorObserver {
+ // Called when a child of the compositor is resizing.
+ virtual void OnCompositingChildResizing(Compositor* compositor) {}
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Called when a swap with new size is completed.
+ virtual void OnCompositingCompleteSwapWithNewSize(ui::Compositor* compositor,
+ const gfx::Size& size) {}
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ // Called at the top of the compositor's destructor, to give observers a
+ // chance to remove themselves.
diff --git a/www/iridium/files/patch-ui_compositor_host_host__context__factory__private.cc b/www/iridium/files/patch-ui_compositor_host_host__context__factory__private.cc
new file mode 100644
index 000000000000..b7be4b020629
--- /dev/null
+++ b/www/iridium/files/patch-ui_compositor_host_host__context__factory__private.cc
@@ -0,0 +1,11 @@
+--- ui/compositor/host/host_context_factory_private.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/compositor/host/host_context_factory_private.cc
+@@ -29,7 +29,7 @@ namespace {
+
+ static const char* kBrowser = "Browser";
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ class HostDisplayClient : public viz::HostDisplayClient {
+ public:
+ explicit HostDisplayClient(ui::Compositor* compositor)
diff --git a/www/iridium/files/patch-ui_events_devices_x11_device__data__manager__x11.cc b/www/iridium/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
new file mode 100644
index 000000000000..df1fa86b3c0d
--- /dev/null
+++ b/www/iridium/files/patch-ui_events_devices_x11_device__data__manager__x11.cc
@@ -0,0 +1,19 @@
+--- ui/events/devices/x11/device_data_manager_x11.cc.orig 2019-09-09 21:55:46 UTC
++++ ui/events/devices/x11/device_data_manager_x11.cc
+@@ -826,6 +826,8 @@ void DeviceDataManagerX11::SetDisabledKeyboardAllowedK
+ }
+
+ void DeviceDataManagerX11::DisableDevice(int deviceid) {
++ NOTIMPLEMENTED();
++#if !defined(OS_BSD)
+ blocked_devices_.set(deviceid, true);
+ // TODO(rsadam@): Support blocking touchscreen devices.
+ std::vector<InputDevice> keyboards = GetKeyboardDevices();
+@@ -836,6 +838,7 @@ void DeviceDataManagerX11::DisableDevice(int deviceid)
+ keyboards.erase(it);
+ DeviceDataManager::OnKeyboardDevicesUpdated(keyboards);
+ }
++#endif
+ }
+
+ void DeviceDataManagerX11::EnableDevice(int deviceid) {
diff --git a/www/iridium/files/patch-ui_events_event__switches.cc b/www/iridium/files/patch-ui_events_event__switches.cc
new file mode 100644
index 000000000000..565f70395687
--- /dev/null
+++ b/www/iridium/files/patch-ui_events_event__switches.cc
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.cc.orig 2019-03-11 22:01:19 UTC
++++ ui/events/event_switches.cc
+@@ -14,7 +14,7 @@ namespace switches {
+ const char kCompensateForUnstablePinchZoom[] =
+ "compensate-for-unstable-pinch-zoom";
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ // Tells chrome to interpret events from these devices as touch events. Only
+ // available with XInput 2 (i.e. X server 1.8 or above). The id's of the
+ // devices can be retrieved from 'xinput list'.
diff --git a/www/iridium/files/patch-ui_events_event__switches.h b/www/iridium/files/patch-ui_events_event__switches.h
new file mode 100644
index 000000000000..e7351a731084
--- /dev/null
+++ b/www/iridium/files/patch-ui_events_event__switches.h
@@ -0,0 +1,11 @@
+--- ui/events/event_switches.h.orig 2019-03-11 22:01:19 UTC
++++ ui/events/event_switches.h
+@@ -13,7 +13,7 @@ namespace switches {
+
+ EVENTS_BASE_EXPORT extern const char kCompensateForUnstablePinchZoom[];
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_FREEBSD)
+ EVENTS_BASE_EXPORT extern const char kTouchDevices[];
+ EVENTS_BASE_EXPORT extern const char kPenDevices[];
+ #endif
diff --git a/www/iridium/files/patch-ui_events_keycodes_dom_keycode__converter.cc b/www/iridium/files/patch-ui_events_keycodes_dom_keycode__converter.cc
new file mode 100644
index 000000000000..2bae1687515b
--- /dev/null
+++ b/www/iridium/files/patch-ui_events_keycodes_dom_keycode__converter.cc
@@ -0,0 +1,11 @@
+--- ui/events/keycodes/dom/keycode_converter.cc.orig 2020-03-16 18:40:15 UTC
++++ ui/events/keycodes/dom/keycode_converter.cc
+@@ -20,7 +20,7 @@ namespace {
+ #if defined(OS_WIN)
+ #define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+ { usb, win, code }
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #define DOM_CODE(usb, evdev, xkb, win, mac, code, id) \
+ { usb, xkb, code }
+ #elif defined(OS_MACOSX)
diff --git a/www/iridium/files/patch-ui_gfx_BUILD.gn b/www/iridium/files/patch-ui_gfx_BUILD.gn
new file mode 100644
index 000000000000..be500c1b94d5
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gfx/BUILD.gn.orig 2020-03-16 18:40:43 UTC
++++ ui/gfx/BUILD.gn
+@@ -578,7 +578,7 @@ jumbo_source_set("memory_buffer_sources") {
+ deps += [ "//build/config/linux/libdrm" ]
+ }
+
+- if (is_linux || is_android) {
++ if ((is_linux || is_android) && !is_bsd) {
+ deps += [ "//third_party/libsync" ]
+ }
+
diff --git a/www/iridium/files/patch-ui_gfx_canvas__skia.cc b/www/iridium/files/patch-ui_gfx_canvas__skia.cc
new file mode 100644
index 000000000000..5d99916e4eb1
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_canvas__skia.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/canvas_skia.cc.orig 2020-02-03 21:53:13 UTC
++++ ui/gfx/canvas_skia.cc
+@@ -206,7 +206,7 @@ void Canvas::DrawStringRectWithFlags(const base::strin
+ Range range = StripAcceleratorChars(flags, &adjusted_text);
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On Linux, eliding really means fading the end of the string. But only
+ // for LTR text. RTL text is still elided (on the left) with "...".
+ if (elide_text) {
diff --git a/www/iridium/files/patch-ui_gfx_codec_jpeg__codec.cc b/www/iridium/files/patch-ui_gfx_codec_jpeg__codec.cc
new file mode 100644
index 000000000000..1bd5ac55ec9e
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_codec_jpeg__codec.cc
@@ -0,0 +1,20 @@
+--- ui/gfx/codec/jpeg_codec.cc.orig 2019-03-11 22:01:19 UTC
++++ ui/gfx/codec/jpeg_codec.cc
+@@ -207,6 +207,7 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // Choose an output colorspace and return if it is an unsupported one.
+ // Same as JPEGCodec::Encode(), libjpeg-turbo supports all input formats
+ // used by Chromium (i.e. RGBA and BGRA) and we just map the input
+@@ -223,6 +224,9 @@ bool JPEGCodec::Decode(const unsigned char* input, siz
+ NOTREACHED() << "Invalid pixel format";
+ return false;
+ }
++#else
++ cinfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
diff --git a/www/iridium/files/patch-ui_gfx_font__fallback__linux.cc b/www/iridium/files/patch-ui_gfx_font__fallback__linux.cc
new file mode 100644
index 000000000000..26597a5d4cb2
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_font__fallback__linux.cc
@@ -0,0 +1,13 @@
+--- ui/gfx/font_fallback_linux.cc.orig 2019-12-16 21:51:34 UTC
++++ ui/gfx/font_fallback_linux.cc
+@@ -24,6 +24,10 @@
+ #include "ui/gfx/linux/fontconfig_util.h"
+ #include "ui/gfx/platform_font.h"
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ namespace gfx {
+
+ namespace {
diff --git a/www/iridium/files/patch-ui_gfx_font__list.cc b/www/iridium/files/patch-ui_gfx_font__list.cc
new file mode 100644
index 000000000000..542476a0c3e2
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_font__list.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/font_list.cc.orig 2019-03-11 22:01:19 UTC
++++ ui/gfx/font_list.cc
+@@ -24,7 +24,7 @@ base::LazyInstance<scoped_refptr<gfx::FontListImpl>>::
+ bool g_default_impl_initialized = false;
+
+ bool IsFontFamilyAvailable(const std::string& family, SkFontMgr* fontManager) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return !!fontManager->legacyMakeTypeface(family.c_str(), SkFontStyle());
+ #else
+ sk_sp<SkFontStyleSet> set(fontManager->matchFamily(family.c_str()));
diff --git a/www/iridium/files/patch-ui_gfx_font__names__testing.cc b/www/iridium/files/patch-ui_gfx_font__names__testing.cc
new file mode 100644
index 000000000000..2c268488ae30
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_font__names__testing.cc
@@ -0,0 +1,29 @@
+--- ui/gfx/font_names_testing.cc.orig 2020-04-06 08:38:05 UTC
++++ ui/gfx/font_names_testing.cc
+@@ -22,7 +22,7 @@ Note that we have to support the full range from Jelly
+ dessert.
+ */
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ const char kTestFontName[] = "Arimo";
+ #elif defined(OS_ANDROID)
+ const char kTestFontName[] = "sans-serif";
+@@ -30,7 +30,7 @@ const char kTestFontName[] = "sans-serif";
+ const char kTestFontName[] = "Arial";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ const char kSymbolFontName[] = "DejaVu Sans";
+ #elif defined(OS_ANDROID)
+ const char kSymbolFontName[] = "monospace";
+@@ -40,7 +40,7 @@ const char kSymbolFontName[] = "Segoe UI Symbol";
+ const char kSymbolFontName[] = "Symbol";
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ const char kCJKFontName[] = "Noto Sans CJK JP";
+ #elif defined(OS_ANDROID)
+ const char kCJKFontName[] = "serif";
diff --git a/www/iridium/files/patch-ui_gfx_font__render__params.h b/www/iridium/files/patch-ui_gfx_font__render__params.h
new file mode 100644
index 000000000000..5f0bb35c60b5
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_font__render__params.h
@@ -0,0 +1,18 @@
+--- ui/gfx/font_render_params.h.orig 2019-07-24 18:59:22 UTC
++++ ui/gfx/font_render_params.h
+@@ -111,13 +111,13 @@ GFX_EXPORT FontRenderParams GetFontRenderParams(
+ const FontRenderParamsQuery& query,
+ std::string* family_out);
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are
+ // changing Fontconfig's configuration.
+ GFX_EXPORT void ClearFontRenderParamsCacheForTest();
+ #endif
+
+-#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \
++#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD) || \
+ defined(OS_FUCHSIA)
+ // Gets the device scale factor to query the FontRenderParams.
+ GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
diff --git a/www/iridium/files/patch-ui_gfx_font__util.cc b/www/iridium/files/patch-ui_gfx_font__util.cc
new file mode 100644
index 000000000000..70270c4ee997
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_font__util.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/font_util.cc.orig 2019-12-17 19:58:26 UTC
++++ ui/gfx/font_util.cc
+@@ -6,7 +6,7 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <fontconfig/fontconfig.h>
+ #include "ui/gfx/linux/fontconfig_util.h"
+ #endif
+@@ -24,11 +24,11 @@ void InitializeFonts() {
+ // background (resources have not yet been granted to cast) since it prevents
+ // the long delay the user would have seen on first rendering.
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Ensures the config is created on this thread.
+ FcConfig* config = GetGlobalFontConfig();
+ DCHECK(config);
+-#endif // OS_LINUX
++#endif // OS_LINUX || OS_BSD
+
+ #if defined(OS_WIN)
+ gfx::win::InitializeDirectWrite();
diff --git a/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.cc b/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.cc
new file mode 100644
index 000000000000..fe42d4a3bace
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.cc
@@ -0,0 +1,11 @@
+--- ui/gfx/gpu_memory_buffer.cc.orig 2019-12-17 19:59:38 UTC
++++ ui/gfx/gpu_memory_buffer.cc
+@@ -28,7 +28,7 @@ GpuMemoryBufferHandle GpuMemoryBufferHandle::Clone() c
+ handle.region = region.Duplicate();
+ handle.offset = offset;
+ handle.stride = stride;
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ handle.native_pixmap_handle = CloneHandleForIPC(native_pixmap_handle);
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ NOTIMPLEMENTED();
diff --git a/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.h b/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.h
new file mode 100644
index 000000000000..a05a77674080
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_gpu__memory__buffer.h
@@ -0,0 +1,20 @@
+--- ui/gfx/gpu_memory_buffer.h.orig 2020-02-03 21:53:13 UTC
++++ ui/gfx/gpu_memory_buffer.h
+@@ -15,7 +15,7 @@
+ #include "ui/gfx/geometry/rect.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(USE_OZONE) || defined(OS_LINUX)
++#if defined(USE_OZONE) || defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ #include "ui/gfx/mac/io_surface.h"
+@@ -65,7 +65,7 @@ struct GFX_EXPORT GpuMemoryBufferHandle {
+ base::UnsafeSharedMemoryRegion region;
+ uint32_t offset;
+ int32_t stride;
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ NativePixmapHandle native_pixmap_handle;
+ #elif defined(OS_MACOSX) && !defined(OS_IOS)
+ ScopedRefCountedIOSurfaceMachPort mach_port;
diff --git a/www/iridium/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h b/www/iridium/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
new file mode 100644
index 000000000000..22be111486c5
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_ipc_gfx__param__traits__macros.h
@@ -0,0 +1,44 @@
+--- ui/gfx/ipc/gfx_param_traits_macros.h.orig 2019-10-21 19:07:29 UTC
++++ ui/gfx/ipc/gfx_param_traits_macros.h
+@@ -18,7 +18,7 @@
+ #include "ui/gfx/selection_bound.h"
+ #include "ui/gfx/swap_result.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "ui/gfx/native_pixmap_handle.h"
+ #endif
+
+@@ -51,7 +51,7 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferHandle)
+ IPC_STRUCT_TRAITS_MEMBER(region)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(native_pixmap_handle)
+ #elif defined(OS_MACOSX)
+ IPC_STRUCT_TRAITS_MEMBER(mach_port)
+@@ -66,12 +66,12 @@ IPC_STRUCT_TRAITS_BEGIN(gfx::GpuMemoryBufferId)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_END()
+
+-#if defined(OS_LINUX) || defined(OS_FUCHSIA)
++#if defined(OS_LINUX) || defined(OS_FUCHSIA) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapPlane)
+ IPC_STRUCT_TRAITS_MEMBER(stride)
+ IPC_STRUCT_TRAITS_MEMBER(offset)
+ IPC_STRUCT_TRAITS_MEMBER(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(fd)
+ #elif defined(OS_FUCHSIA)
+ IPC_STRUCT_TRAITS_MEMBER(vmo)
+@@ -80,7 +80,7 @@ IPC_STRUCT_TRAITS_END()
+
+ IPC_STRUCT_TRAITS_BEGIN(gfx::NativePixmapHandle)
+ IPC_STRUCT_TRAITS_MEMBER(planes)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ IPC_STRUCT_TRAITS_MEMBER(modifier)
+ #endif
+ #if defined(OS_FUCHSIA)
diff --git a/www/iridium/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc b/www/iridium/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
new file mode 100644
index 000000000000..1741c4d863e8
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_linux_client__native__pixmap__dmabuf.cc
@@ -0,0 +1,25 @@
+--- ui/gfx/linux/client_native_pixmap_dmabuf.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/gfx/linux/client_native_pixmap_dmabuf.cc
+@@ -5,7 +5,9 @@
+ #include "ui/gfx/linux/client_native_pixmap_dmabuf.h"
+
+ #include <fcntl.h>
++#if !defined(__FreeBSD__)
+ #include <linux/version.h>
++#endif
+ #include <stddef.h>
+ #include <sys/ioctl.h>
+ #include <sys/mman.h>
+@@ -26,11 +28,7 @@
+ #include "ui/gfx/buffer_format_util.h"
+ #include "ui/gfx/switches.h"
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
+-#include <linux/dma-buf.h>
+-#else
+-#include <linux/types.h>
+-
++#if defined(__FreeBSD__)
+ struct dma_buf_sync {
+ __u64 flags;
+ };
diff --git a/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc b/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc
new file mode 100644
index 000000000000..a2a977047d43
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.cc
@@ -0,0 +1,75 @@
+--- ui/gfx/mojom/buffer_types_mojom_traits.cc.orig 2019-10-30 16:33:03 UTC
++++ ui/gfx/mojom/buffer_types_mojom_traits.cc
+@@ -24,15 +24,15 @@ bool StructTraits<gfx::mojom::BufferUsageAndFormatData
+ return data.ReadUsage(&out->usage) && data.ReadFormat(&out->format);
+ }
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ mojo::ScopedHandle StructTraits<
+ gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane>::buffer_handle(gfx::NativePixmapPlane& plane) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return mojo::WrapPlatformFile(plane.fd.release());
+ #elif defined(OS_FUCHSIA)
+ return mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(plane.vmo)));
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool StructTraits<
+@@ -45,7 +45,7 @@ bool StructTraits<
+
+ mojo::PlatformHandle handle =
+ mojo::UnwrapPlatformHandle(data.TakeBufferHandle());
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ if (!handle.is_fd())
+ return false;
+ out->fd = handle.TakeFD();
+@@ -53,7 +53,7 @@ bool StructTraits<
+ if (!handle.is_handle())
+ return false;
+ out->vmo = zx::vmo(handle.TakeHandle());
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ return true;
+ }
+@@ -62,7 +62,7 @@ bool StructTraits<
+ gfx::mojom::NativePixmapHandleDataView,
+ gfx::NativePixmapHandle>::Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ out->modifier = data.modifier();
+ #endif
+
+@@ -75,7 +75,7 @@ bool StructTraits<
+
+ return data.ReadPlanes(&out->planes);
+ }
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+
+ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTraits<
+ gfx::mojom::GpuMemoryBufferHandleDataView,
+@@ -88,7 +88,7 @@ gfx::mojom::GpuMemoryBufferPlatformHandlePtr StructTra
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewSharedMemoryHandle(
+ std::move(handle.region));
+ case gfx::NATIVE_PIXMAP:
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ return gfx::mojom::GpuMemoryBufferPlatformHandle::NewNativePixmapHandle(
+ std::move(handle.native_pixmap_handle));
+ #else
+@@ -164,7 +164,7 @@ bool StructTraits<gfx::mojom::GpuMemoryBufferHandleDat
+ out->type = gfx::SHARED_MEMORY_BUFFER;
+ out->region = std::move(platform_handle->get_shared_memory_handle());
+ return true;
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ case gfx::mojom::GpuMemoryBufferPlatformHandleDataView::Tag::
+ NATIVE_PIXMAP_HANDLE:
+ out->type = gfx::NATIVE_PIXMAP;
diff --git a/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h b/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h
new file mode 100644
index 000000000000..b7e56d150e01
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_mojom_buffer__types__mojom__traits.h
@@ -0,0 +1,29 @@
+--- ui/gfx/mojom/buffer_types_mojom_traits.h.orig 2019-12-16 21:51:08 UTC
++++ ui/gfx/mojom/buffer_types_mojom_traits.h
+@@ -194,7 +194,7 @@ struct StructTraits<gfx::mojom::GpuMemoryBufferIdDataV
+ }
+ };
+
+-#if defined(OS_LINUX) || defined(USE_OZONE)
++#if defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+ template <>
+ struct StructTraits<gfx::mojom::NativePixmapPlaneDataView,
+ gfx::NativePixmapPlane> {
+@@ -220,7 +220,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ return pixmap_handle.planes;
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static uint64_t modifier(const gfx::NativePixmapHandle& pixmap_handle) {
+ return pixmap_handle.modifier;
+ }
+@@ -244,7 +244,7 @@ struct StructTraits<gfx::mojom::NativePixmapHandleData
+ static bool Read(gfx::mojom::NativePixmapHandleDataView data,
+ gfx::NativePixmapHandle* out);
+ };
+-#endif // defined(OS_LINUX) || defined(USE_OZONE)
++#endif // defined(OS_LINUX) || defined(OS_BSD) || defined(USE_OZONE)
+
+ template <>
+ struct StructTraits<gfx::mojom::GpuMemoryBufferHandleDataView,
diff --git a/www/iridium/files/patch-ui_gfx_native__pixmap__handle.cc b/www/iridium/files/patch-ui_gfx_native__pixmap__handle.cc
new file mode 100644
index 000000000000..20952718c93d
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_native__pixmap__handle.cc
@@ -0,0 +1,64 @@
+--- ui/gfx/native_pixmap_handle.cc.orig 2020-02-24 18:39:44 UTC
++++ ui/gfx/native_pixmap_handle.cc
+@@ -8,11 +8,15 @@
+
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include <drm_fourcc.h>
+ #include "base/posix/eintr_wrapper.h"
+ #endif
+
++#if defined(OS_BSD)
++#include <unistd.h>
++#endif
++
+ #if defined(OS_FUCHSIA)
+ #include <lib/zx/vmo.h>
+ #include "base/fuchsia/fuchsia_logging.h"
+@@ -20,7 +24,7 @@
+
+ namespace gfx {
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ static_assert(NativePixmapHandle::kNoModifier == DRM_FORMAT_MOD_INVALID,
+ "gfx::NativePixmapHandle::kNoModifier should be an alias for"
+ "DRM_FORMAT_MOD_INVALID");
+@@ -31,7 +35,7 @@ NativePixmapPlane::NativePixmapPlane() : stride(0), of
+ NativePixmapPlane::NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -42,7 +46,7 @@ NativePixmapPlane::NativePixmapPlane(int stride,
+ : stride(stride),
+ offset(offset),
+ size(size)
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ fd(std::move(fd))
+ #elif defined(OS_FUCHSIA)
+@@ -70,7 +74,7 @@ NativePixmapHandle& NativePixmapHandle::operator=(Nati
+ NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
+ NativePixmapHandle clone;
+ for (auto& plane : handle.planes) {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ DCHECK(plane.fd.is_valid());
+ base::ScopedFD fd_dup(HANDLE_EINTR(dup(plane.fd.get())));
+ if (!fd_dup.is_valid()) {
+@@ -96,7 +100,7 @@ NativePixmapHandle CloneHandleForIPC(const NativePixma
+ #endif
+ }
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ clone.modifier = handle.modifier;
+ #endif
+
diff --git a/www/iridium/files/patch-ui_gfx_native__pixmap__handle.h b/www/iridium/files/patch-ui_gfx_native__pixmap__handle.h
new file mode 100644
index 000000000000..6306e267fbeb
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_native__pixmap__handle.h
@@ -0,0 +1,38 @@
+--- ui/gfx/native_pixmap_handle.h.orig 2019-10-21 19:07:29 UTC
++++ ui/gfx/native_pixmap_handle.h
+@@ -15,7 +15,7 @@
+ #include "build/build_config.h"
+ #include "ui/gfx/gfx_export.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/files/scoped_file.h"
+ #endif
+
+@@ -32,7 +32,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ NativePixmapPlane(int stride,
+ int offset,
+ uint64_t size
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ ,
+ base::ScopedFD fd
+ #elif defined(OS_FUCHSIA)
+@@ -53,7 +53,7 @@ struct GFX_EXPORT NativePixmapPlane {
+ // This is necessary to map the buffers.
+ uint64_t size;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // File descriptor for the underlying memory object (usually dmabuf).
+ base::ScopedFD fd;
+ #elif defined(OS_FUCHSIA)
+@@ -82,7 +82,7 @@ struct GFX_EXPORT NativePixmapHandle {
+
+ std::vector<NativePixmapPlane> planes;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The modifier is retrieved from GBM library and passed to EGL driver.
+ // Generally it's platform specific, and we don't need to modify it in
+ // Chromium code. Also one per plane per entry.
diff --git a/www/iridium/files/patch-ui_gfx_render__text.cc b/www/iridium/files/patch-ui_gfx_render__text.cc
new file mode 100644
index 000000000000..446317a3101a
--- /dev/null
+++ b/www/iridium/files/patch-ui_gfx_render__text.cc
@@ -0,0 +1,46 @@
+--- ui/gfx/render_text.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/gfx/render_text.cc
+@@ -1169,32 +1169,33 @@ void RenderText::SetDisplayOffset(int horizontal_offse
+ const int extra_content = GetContentWidth() - display_rect_.width();
+ const int cursor_width = cursor_enabled_ ? 1 : 0;
+
+- int min_offset = 0;
+- int max_offset = 0;
++ // avoid collisions with vm_map.h on FreeBSD --cmt
++ int _min_offset = 0;
++ int _max_offset = 0;
+ if (extra_content > 0) {
+ switch (GetCurrentHorizontalAlignment()) {
+ case ALIGN_LEFT:
+- min_offset = -extra_content;
++ _min_offset = -extra_content;
+ break;
+ case ALIGN_RIGHT:
+- max_offset = extra_content;
++ _max_offset = extra_content;
+ break;
+ case ALIGN_CENTER:
+ // The extra space reserved for cursor at the end of the text is ignored
+ // when centering text. So, to calculate the valid range for offset, we
+ // exclude that extra space, calculate the range, and add it back to the
+ // range (if cursor is enabled).
+- min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
+- max_offset = (extra_content - cursor_width) / 2;
++ _min_offset = -(extra_content - cursor_width + 1) / 2 - cursor_width;
++ _max_offset = (extra_content - cursor_width) / 2;
+ break;
+ default:
+ break;
+ }
+ }
+- if (horizontal_offset < min_offset)
+- horizontal_offset = min_offset;
+- else if (horizontal_offset > max_offset)
+- horizontal_offset = max_offset;
++ if (horizontal_offset < _min_offset)
++ horizontal_offset = _min_offset;
++ else if (horizontal_offset > _max_offset)
++ horizontal_offset = _max_offset;
+
+ cached_bounds_and_offset_valid_ = true;
+ display_offset_.set_x(horizontal_offset);
diff --git a/www/iridium/files/patch-ui_gl_BUILD.gn b/www/iridium/files/patch-ui_gl_BUILD.gn
new file mode 100644
index 000000000000..39f08eacf39a
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_BUILD.gn
@@ -0,0 +1,11 @@
+--- ui/gl/BUILD.gn.orig 2020-03-16 18:40:43 UTC
++++ ui/gl/BUILD.gn
+@@ -233,7 +233,7 @@ jumbo_component("gl") {
+ ]
+ }
+
+- if (is_posix && !is_fuchsia && !is_mac) {
++ if (is_posix && !is_fuchsia && !is_mac && !is_bsd) {
+ # Windows has USE_EGL but doesn't support base::FileDescriptor.
+ # libsync isn't supported or needed on MacOSX.
+ # Fuchsia is excluded due to a libsync dependency and because it's
diff --git a/www/iridium/files/patch-ui_gl_generate__bindings.py b/www/iridium/files/patch-ui_gl_generate__bindings.py
new file mode 100644
index 000000000000..c3ea0a6c23a3
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_generate__bindings.py
@@ -0,0 +1,12 @@
+--- ui/gl/generate_bindings.py.orig 2020-03-16 18:40:43 UTC
++++ ui/gl/generate_bindings.py
+@@ -2777,6 +2777,9 @@ GLX_FUNCTIONS = [
+ 'arguments':
+ 'Display* dpy, GLXDrawable drawable, int32_t* numerator, '
+ 'int32_t* denominator' },
++{ 'return_type': '__GLXextFuncPtr',
++ 'names': ['glXGetProcAddressARB'],
++ 'arguments': 'const GLubyte* procName', },
+ { 'return_type': 'void',
+ 'names': ['glXGetSelectedEvent'],
+ 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
diff --git a/www/iridium/files/patch-ui_gl_gl__bindings__api__autogen__glx.h b/www/iridium/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
new file mode 100644
index 000000000000..c51dba36aabe
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_gl__bindings__api__autogen__glx.h
@@ -0,0 +1,10 @@
+--- ui/gl/gl_bindings_api_autogen_glx.h.orig 2019-03-11 22:01:19 UTC
++++ ui/gl/gl_bindings_api_autogen_glx.h
+@@ -88,6 +88,7 @@ bool glXGetMscRateOMLFn(Display* dpy,
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) override;
++__GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) override;
+ void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) override;
diff --git a/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.cc b/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.cc
new file mode 100644
index 000000000000..4aeda03a0414
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.cc
@@ -0,0 +1,61 @@
+--- ui/gl/gl_bindings_autogen_glx.cc.orig 2020-02-24 18:39:44 UTC
++++ ui/gl/gl_bindings_autogen_glx.cc
+@@ -115,6 +115,8 @@ void DriverGLX::InitializeExtensionBindings() {
+
+ ext.b_GLX_ARB_create_context =
+ gfx::HasExtension(extensions, "GLX_ARB_create_context");
++ ext.b_GLX_ARB_get_proc_address =
++ gfx::HasExtension(extensions, "GLX_ARB_get_proc_address");
+ ext.b_GLX_EXT_swap_control =
+ gfx::HasExtension(extensions, "GLX_EXT_swap_control");
+ ext.b_GLX_EXT_texture_from_pixmap =
+@@ -145,6 +147,11 @@ void DriverGLX::InitializeExtensionBindings() {
+ GetGLProcAddress("glXCreateContextAttribsARB"));
+ }
+
++ if (ext.b_GLX_ARB_get_proc_address) {
++ fn.glXGetProcAddressARBFn = reinterpret_cast<glXGetProcAddressARBProc>(
++ GetGLProcAddress("glXGetProcAddressARB"));
++ }
++
+ if (ext.b_GLX_SGIX_fbconfig) {
+ fn.glXGetFBConfigFromVisualSGIXFn =
+ reinterpret_cast<glXGetFBConfigFromVisualSGIXProc>(
+@@ -346,6 +353,10 @@ bool GLXApiBase::glXGetMscRateOMLFn(Display* dpy,
+ return driver_->fn.glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr GLXApiBase::glXGetProcAddressARBFn(const GLubyte* procName) {
++ return driver_->fn.glXGetProcAddressARBFn(procName);
++}
++
+ void GLXApiBase::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -647,6 +658,11 @@ bool TraceGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ return glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
+ }
+
++__GLXextFuncPtr TraceGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glXGetProcAddressARB")
++ return glx_api_->glXGetProcAddressARBFn(procName);
++}
++
+ void TraceGLXApi::glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) {
+@@ -1068,6 +1084,14 @@ bool LogGLXApi::glXGetMscRateOMLFn(Display* dpy,
+ << static_cast<const void*>(denominator) << ")");
+ bool result =
+ glx_api_->glXGetMscRateOMLFn(dpy, drawable, numerator, denominator);
++ GL_SERVICE_LOG("GL_RESULT: " << result);
++ return result;
++}
++
++__GLXextFuncPtr LogGLXApi::glXGetProcAddressARBFn(const GLubyte* procName) {
++ GL_SERVICE_LOG("glXGetProcAddressARB"
++ << "(" << static_cast<const void*>(procName) << ")");
++ __GLXextFuncPtr result = glx_api_->glXGetProcAddressARBFn(procName);
+ GL_SERVICE_LOG("GL_RESULT: " << result);
+ return result;
+ }
diff --git a/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.h b/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.h
new file mode 100644
index 000000000000..e95b9179865e
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_gl__bindings__autogen__glx.h
@@ -0,0 +1,43 @@
+--- ui/gl/gl_bindings_autogen_glx.h.orig 2019-03-11 22:01:19 UTC
++++ ui/gl/gl_bindings_autogen_glx.h
+@@ -104,6 +104,8 @@ typedef bool(GL_BINDING_CALL* glXGetMscRateOMLProc)(Di
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator);
++typedef __GLXextFuncPtr(GL_BINDING_CALL* glXGetProcAddressARBProc)(
++ const GLubyte* procName);
+ typedef void(GL_BINDING_CALL* glXGetSelectedEventProc)(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask);
+@@ -166,6 +168,7 @@ typedef void(GL_BINDING_CALL* glXWaitXProc)(void);
+
+ struct ExtensionsGLX {
+ bool b_GLX_ARB_create_context;
++ bool b_GLX_ARB_get_proc_address;
+ bool b_GLX_EXT_swap_control;
+ bool b_GLX_EXT_texture_from_pixmap;
+ bool b_GLX_MESA_copy_sub_buffer;
+@@ -203,6 +206,7 @@ struct ProcsGLX {
+ glXGetFBConfigFromVisualSGIXProc glXGetFBConfigFromVisualSGIXFn;
+ glXGetFBConfigsProc glXGetFBConfigsFn;
+ glXGetMscRateOMLProc glXGetMscRateOMLFn;
++ glXGetProcAddressARBProc glXGetProcAddressARBFn;
+ glXGetSelectedEventProc glXGetSelectedEventFn;
+ glXGetSyncValuesOMLProc glXGetSyncValuesOMLFn;
+ glXGetVisualFromFBConfigProc glXGetVisualFromFBConfigFn;
+@@ -310,6 +314,7 @@ class GL_EXPORT GLXApi {
+ GLXDrawable drawable,
+ int32_t* numerator,
+ int32_t* denominator) = 0;
++ virtual __GLXextFuncPtr glXGetProcAddressARBFn(const GLubyte* procName) = 0;
+ virtual void glXGetSelectedEventFn(Display* dpy,
+ GLXDrawable drawable,
+ unsigned long* mask) = 0;
+@@ -394,6 +399,7 @@ class GL_EXPORT GLXApi {
+ ::gl::g_current_glx_context->glXGetFBConfigFromVisualSGIXFn
+ #define glXGetFBConfigs ::gl::g_current_glx_context->glXGetFBConfigsFn
+ #define glXGetMscRateOML ::gl::g_current_glx_context->glXGetMscRateOMLFn
++#define glXGetProcAddressARB ::gl::g_current_glx_context->glXGetProcAddressARBFn
+ #define glXGetSelectedEvent ::gl::g_current_glx_context->glXGetSelectedEventFn
+ #define glXGetSyncValuesOML ::gl::g_current_glx_context->glXGetSyncValuesOMLFn
+ #define glXGetVisualFromFBConfig \
diff --git a/www/iridium/files/patch-ui_gl_gl__fence.cc b/www/iridium/files/patch-ui_gl_gl__fence.cc
new file mode 100644
index 000000000000..5ba84b4bdb36
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_gl__fence.cc
@@ -0,0 +1,11 @@
+--- ui/gl/gl_fence.cc.orig 2019-03-11 22:01:19 UTC
++++ ui/gl/gl_fence.cc
+@@ -18,7 +18,7 @@
+ #include "ui/gl/gl_fence_apple.h"
+ #endif
+
+-#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX)
++#if defined(USE_EGL) && defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
+ #define USE_GL_FENCE_ANDROID_NATIVE_FENCE_SYNC
+ #include "ui/gl/gl_fence_android_native_fence_sync.h"
+ #include "ui/gl/gl_surface_egl.h"
diff --git a/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.cc b/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.cc
new file mode 100644
index 000000000000..7295d4c6df5e
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.cc
@@ -0,0 +1,43 @@
+--- ui/gl/sync_control_vsync_provider.cc.orig 2019-04-30 22:23:42 UTC
++++ ui/gl/sync_control_vsync_provider.cc
+@@ -11,7 +11,7 @@
+ #include "base/trace_event/trace_event.h"
+ #include "build/build_config.h"
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // These constants define a reasonable range for a calculated refresh interval.
+ // Calculating refreshes out of this range will be considered a fatal error.
+ const int64_t kMinVsyncIntervalUs = base::Time::kMicrosecondsPerSecond / 400;
+@@ -26,7 +26,7 @@ const double kRelativeIntervalDifferenceThreshold = 0.
+ namespace gl {
+
+ SyncControlVSyncProvider::SyncControlVSyncProvider() : gfx::VSyncProvider() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // On platforms where we can't get an accurate reading on the refresh
+ // rate we fall back to the assumption that we're displaying 60 frames
+ // per second.
+@@ -48,7 +48,7 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ base::TimeTicks* timebase_out,
+ base::TimeDelta* interval_out) {
+ TRACE_EVENT0("gpu", "SyncControlVSyncProvider::GetVSyncParameters");
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // The actual clock used for the system time returned by glXGetSyncValuesOML
+ // is unspecified. In practice, the clock used is likely to be either
+ // CLOCK_REALTIME or CLOCK_MONOTONIC, so we compare the returned time to the
+@@ -156,11 +156,11 @@ bool SyncControlVSyncProvider::GetVSyncParametersIfAva
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ bool SyncControlVSyncProvider::SupportGetVSyncParametersIfAvailable() const {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
diff --git a/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.h b/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.h
new file mode 100644
index 000000000000..4321d70a7288
--- /dev/null
+++ b/www/iridium/files/patch-ui_gl_sync__control__vsync__provider.h
@@ -0,0 +1,34 @@
+--- ui/gl/sync_control_vsync_provider.h.orig 2019-03-11 22:01:19 UTC
++++ ui/gl/sync_control_vsync_provider.h
+@@ -26,11 +26,11 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ bool SupportGetVSyncParametersIfAvailable() const override;
+
+ static constexpr bool IsSupported() {
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return true;
+ #else
+ return false;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+ }
+
+ protected:
+@@ -41,7 +41,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ virtual bool GetMscRate(int32_t* numerator, int32_t* denominator) = 0;
+
+ private:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ base::TimeTicks last_timebase_;
+ uint64_t last_media_stream_counter_ = 0;
+ base::TimeDelta last_good_interval_;
+@@ -52,7 +52,7 @@ class SyncControlVSyncProvider : public gfx::VSyncProv
+ // from configuration change (monitor reconfiguration, moving windows
+ // between monitors, suspend and resume, etc.).
+ base::queue<base::TimeDelta> last_computed_intervals_;
+-#endif // defined(OS_LINUX)
++#endif // defined(OS_LINUX) || defined(OS_BSD)
+
+ DISALLOW_COPY_AND_ASSIGN(SyncControlVSyncProvider);
+ };
diff --git a/www/iridium/files/patch-ui_message__center_public_cpp_message__center__constants.h b/www/iridium/files/patch-ui_message__center_public_cpp_message__center__constants.h
new file mode 100644
index 000000000000..8f993bfbfbc6
--- /dev/null
+++ b/www/iridium/files/patch-ui_message__center_public_cpp_message__center__constants.h
@@ -0,0 +1,11 @@
+--- ui/message_center/public/cpp/message_center_constants.h.orig 2019-06-04 18:55:50 UTC
++++ ui/message_center/public/cpp/message_center_constants.h
+@@ -105,7 +105,7 @@ const int kButtonHorizontalPadding = 16; // In DIPs.
+ const int kButtonIconTopPadding = 11; // In DIPs.
+ const int kButtonIconToTitlePadding = 16; // In DIPs.
+
+-#if !defined(OS_LINUX) || defined(USE_AURA)
++#if (!defined(OS_LINUX) && !defined(OS_BSD)) || defined(USE_AURA)
+ constexpr SkColor kButtonSeparatorColor = SkColorSetRGB(234, 234, 234);
+ constexpr SkColor kHoveredButtonBackgroundColor = SkColorSetRGB(243, 243, 243);
+ #endif
diff --git a/www/iridium/files/patch-ui_message__center_views_message__popup__view.cc b/www/iridium/files/patch-ui_message__center_views_message__popup__view.cc
new file mode 100644
index 000000000000..7037f8a47604
--- /dev/null
+++ b/www/iridium/files/patch-ui_message__center_views_message__popup__view.cc
@@ -0,0 +1,11 @@
+--- ui/message_center/views/message_popup_view.cc.orig 2019-12-16 21:51:34 UTC
++++ ui/message_center/views/message_popup_view.cc
+@@ -101,7 +101,7 @@ void MessagePopupView::AutoCollapse() {
+ void MessagePopupView::Show() {
+ views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
+ params.z_order = ui::ZOrderLevel::kFloatingWindow;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ // Make the widget explicitly activatable as TYPE_POPUP is not activatable by
+ // default but we need focus for the inline reply textarea.
+ params.activatable = views::Widget::InitParams::ACTIVATABLE_YES;
diff --git a/www/iridium/files/patch-ui_native__theme_native__theme.h b/www/iridium/files/patch-ui_native__theme_native__theme.h
new file mode 100644
index 000000000000..af4951e7fb10
--- /dev/null
+++ b/www/iridium/files/patch-ui_native__theme_native__theme.h
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme.h.orig 2019-10-21 19:07:29 UTC
++++ ui/native_theme/native_theme.h
+@@ -49,7 +49,7 @@ class NATIVE_THEME_EXPORT NativeTheme {
+ // The part to be painted / sized.
+ enum Part {
+ kCheckbox,
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ kFrameTopArea,
+ #endif
+ kInnerSpinButton,
diff --git a/www/iridium/files/patch-ui_native__theme_native__theme__base.cc b/www/iridium/files/patch-ui_native__theme_native__theme__base.cc
new file mode 100644
index 000000000000..96f69fe1f796
--- /dev/null
+++ b/www/iridium/files/patch-ui_native__theme_native__theme__base.cc
@@ -0,0 +1,11 @@
+--- ui/native_theme/native_theme_base.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/native_theme/native_theme_base.cc
+@@ -256,7 +256,7 @@ void NativeThemeBase::Paint(cc::PaintCanvas* canvas,
+ case kCheckbox:
+ PaintCheckbox(canvas, state, rect, extra.button, color_scheme);
+ break;
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ case kFrameTopArea:
+ PaintFrameTopArea(canvas, state, rect, extra.frame_top_area,
+ color_scheme);
diff --git a/www/iridium/files/patch-ui_platform__window_platform__window__init__properties.h b/www/iridium/files/patch-ui_platform__window_platform__window__init__properties.h
new file mode 100644
index 000000000000..78b9f0444781
--- /dev/null
+++ b/www/iridium/files/patch-ui_platform__window_platform__window__init__properties.h
@@ -0,0 +1,20 @@
+--- ui/platform_window/platform_window_init_properties.h.orig 2020-02-24 18:40:16 UTC
++++ ui/platform_window/platform_window_init_properties.h
+@@ -41,7 +41,7 @@ enum class PlatformWindowOpacity {
+
+ class WorkspaceExtensionDelegate;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ class X11ExtensionDelegate;
+ #endif
+
+@@ -82,7 +82,7 @@ struct COMPONENT_EXPORT(PLATFORM_WINDOW) PlatformWindo
+
+ WorkspaceExtensionDelegate* workspace_extension_delegate = nullptr;
+
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ bool prefer_dark_theme = false;
+ gfx::ImageSkia* icon = nullptr;
+ base::Optional<int> background_color;
diff --git a/www/iridium/files/patch-ui_strings_app__locale__settings.grd b/www/iridium/files/patch-ui_strings_app__locale__settings.grd
new file mode 100644
index 000000000000..9341a0bc5305
--- /dev/null
+++ b/www/iridium/files/patch-ui_strings_app__locale__settings.grd
@@ -0,0 +1,11 @@
+--- ui/strings/app_locale_settings.grd.orig 2020-03-16 18:40:15 UTC
++++ ui/strings/app_locale_settings.grd
+@@ -216,7 +216,7 @@
+ 75%
+ </message>
+ </if>
+- <if expr="(is_linux or is_android or is_bsd) and not chromeos">
++ <if expr="is_posix and not chromeos">
+ <!-- The font used in Web UI (e.g. History). Note that these are only
+ backups. We try to use the system font if possible. -->
+ <message name="IDS_WEB_FONT_FAMILY" use_name_for_id="true">
diff --git a/www/iridium/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc b/www/iridium/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
new file mode 100644
index 000000000000..4cdcd2b4bfd1
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_bubble_bubble__dialog__delegate__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/bubble/bubble_dialog_delegate_view.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/views/bubble/bubble_dialog_delegate_view.cc
+@@ -174,7 +174,7 @@ Widget* BubbleDialogDelegateView::CreateBubble(
+ bubble_delegate->SetAnchorView(bubble_delegate->GetAnchorView());
+ Widget* bubble_widget = CreateBubbleWidget(bubble_delegate);
+
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_MACOSX) || defined(OS_BSD)
+ // Linux clips bubble windows that extend outside their parent window bounds.
+ // Mac never adjusts.
+ bubble_delegate->set_adjust_if_offscreen(false);
diff --git a/www/iridium/files/patch-ui_views_controls_label.cc b/www/iridium/files/patch-ui_views_controls_label.cc
new file mode 100644
index 000000000000..f6f9790bdbae
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_controls_label.cc
@@ -0,0 +1,20 @@
+--- ui/views/controls/label.cc.orig 2020-02-03 21:53:40 UTC
++++ ui/views/controls/label.cc
+@@ -695,7 +695,7 @@ bool Label::OnMousePressed(const ui::MouseEvent& event
+ GetFocusManager()->SetFocusedView(this);
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (event.IsOnlyMiddleMouseButton() && GetFocusManager() && !had_focus)
+ GetFocusManager()->SetFocusedView(this);
+ #endif
+@@ -880,7 +880,7 @@ bool Label::PasteSelectionClipboard() {
+ }
+
+ void Label::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ if (!GetObscured()) {
+ ui::ScopedClipboardWriter(ui::ClipboardBuffer::kSelection)
+ .WriteText(GetSelectedText());
diff --git a/www/iridium/files/patch-ui_views_controls_textfield_textfield.cc b/www/iridium/files/patch-ui_views_controls_textfield_textfield.cc
new file mode 100644
index 000000000000..f22c358d52d8
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_controls_textfield_textfield.cc
@@ -0,0 +1,73 @@
+--- ui/views/controls/textfield/textfield.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/views/controls/textfield/textfield.cc
+@@ -60,7 +60,7 @@
+ #include "base/win/win_util.h"
+ #endif
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ #include "base/strings/utf_string_conversions.h"
+ #include "ui/base/ime/linux/text_edit_command_auralinux.h"
+ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h"
+@@ -183,14 +183,14 @@ ui::TextEditCommand GetCommandForKeyEvent(const ui::Ke
+ #endif
+ return ui::TextEditCommand::DELETE_BACKWARD;
+ }
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift)
+ return ui::TextEditCommand::DELETE_TO_BEGINNING_OF_LINE;
+ #endif
+ return ui::TextEditCommand::DELETE_WORD_BACKWARD;
+ case ui::VKEY_DELETE:
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Only erase by line break on Linux and ChromeOS.
+ if (shift && control)
+ return ui::TextEditCommand::DELETE_TO_END_OF_LINE;
+@@ -258,7 +258,7 @@ bool IsControlKeyModifier(int flags) {
+ // Control-modified key combination, but we cannot extend it to other platforms
+ // as Control has different meanings and behaviors.
+ // https://crrev.com/2580483002/#msg46
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ return flags & ui::EF_CONTROL_DOWN;
+ #else
+ return false;
+@@ -730,7 +730,7 @@ bool Textfield::OnMousePressed(const ui::MouseEvent& e
+ #endif
+ }
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (!handled && !had_focus && event.IsOnlyMiddleMouseButton())
+ RequestFocusWithPointer(ui::EventPointerType::POINTER_TYPE_MOUSE);
+ #endif
+@@ -776,7 +776,7 @@ bool Textfield::OnKeyPressed(const ui::KeyEvent& event
+ if (!textfield)
+ return handled;
+
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+ std::vector<ui::TextEditCommandAuraLinux> commands;
+@@ -923,7 +923,7 @@ void Textfield::AboutToRequestFocusFromTabTraversal(bo
+ }
+
+ bool Textfield::SkipDefaultKeyEventProcessing(const ui::KeyEvent& event) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ // Skip any accelerator handling that conflicts with custom keybindings.
+ ui::TextEditKeyBindingsDelegateAuraLinux* delegate =
+ ui::GetTextEditKeyBindingsDelegate();
+@@ -2182,7 +2182,7 @@ bool Textfield::PasteSelectionClipboard() {
+ }
+
+ void Textfield::UpdateSelectionClipboard() {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ if (text_input_type_ != ui::TEXT_INPUT_TYPE_PASSWORD) {
+ ui::ScopedClipboardWriter(ui::ClipboardBuffer::kSelection)
+ .WriteText(GetSelectedText());
diff --git a/www/iridium/files/patch-ui_views_corewm_tooltip__aura.cc b/www/iridium/files/patch-ui_views_corewm_tooltip__aura.cc
new file mode 100644
index 000000000000..af036b2cf5d1
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_corewm_tooltip__aura.cc
@@ -0,0 +1,11 @@
+--- ui/views/corewm/tooltip_aura.cc.orig 2019-12-16 21:51:34 UTC
++++ ui/views/corewm/tooltip_aura.cc
+@@ -43,7 +43,7 @@ constexpr int kVerticalPaddingBottom = 5;
+
+ // TODO(varkha): Update if native widget can be transparent on Linux.
+ bool CanUseTranslucentTooltipWidget() {
+-#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_WIN)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_WIN) || defined(OS_BSD)
+ return false;
+ #else
+ return true;
diff --git a/www/iridium/files/patch-ui_views_examples_widget__example.cc b/www/iridium/files/patch-ui_views_examples_widget__example.cc
new file mode 100644
index 000000000000..ae3eee7d03ac
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_examples_widget__example.cc
@@ -0,0 +1,11 @@
+--- ui/views/examples/widget_example.cc.orig 2020-02-03 21:53:14 UTC
++++ ui/views/examples/widget_example.cc
+@@ -70,7 +70,7 @@ void WidgetExample::CreateExampleView(View* container)
+ BuildButton(container, "Popup widget", POPUP);
+ BuildButton(container, "Dialog widget", DIALOG);
+ BuildButton(container, "Modal Dialog", MODAL_DIALOG);
+-#if defined(OS_LINUX)
++#if defined(OS_LINUX) || defined(OS_BSD)
+ // Windows does not support TYPE_CONTROL top-level widgets.
+ BuildButton(container, "Child widget", CHILD);
+ #endif
diff --git a/www/iridium/files/patch-ui_views_selection__controller.cc b/www/iridium/files/patch-ui_views_selection__controller.cc
new file mode 100644
index 000000000000..9504c67a2803
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_selection__controller.cc
@@ -0,0 +1,11 @@
+--- ui/views/selection_controller.cc.orig 2019-12-16 21:51:09 UTC
++++ ui/views/selection_controller.cc
+@@ -22,7 +22,7 @@ SelectionController::SelectionController(SelectionCont
+ delegate_(delegate),
+ handles_selection_clipboard_(false) {
+ // On Linux, update the selection clipboard on a text selection.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && !defined(OS_CHROMEOS)
+ set_handles_selection_clipboard(true);
+ #endif
+
diff --git a/www/iridium/files/patch-ui_views_style_platform__style.cc b/www/iridium/files/patch-ui_views_style_platform__style.cc
new file mode 100644
index 000000000000..28a000e3e6de
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_style_platform__style.cc
@@ -0,0 +1,11 @@
+--- ui/views/style/platform_style.cc.orig 2020-02-03 21:53:14 UTC
++++ ui/views/style/platform_style.cc
+@@ -74,7 +74,7 @@ gfx::Range PlatformStyle::RangeToDeleteBackwards(const
+
+ #endif // OS_MACOSX
+
+-#if !BUILDFLAG(ENABLE_DESKTOP_AURA) || !defined(OS_LINUX)
++#if !BUILDFLAG(ENABLE_DESKTOP_AURA) || (!defined(OS_LINUX) && !defined(OS_BSD))
+ // static
+ std::unique_ptr<Border> PlatformStyle::CreateThemedLabelButtonBorder(
+ LabelButton* button) {
diff --git a/www/iridium/files/patch-ui_views_views__delegate.cc b/www/iridium/files/patch-ui_views_views__delegate.cc
new file mode 100644
index 000000000000..6ed6c077584f
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_views__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.cc.orig 2020-02-03 21:53:14 UTC
++++ ui/views/views_delegate.cc
+@@ -85,7 +85,7 @@ HICON ViewsDelegate::GetSmallWindowIcon() const {
+ bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const {
+ return false;
+ }
+-#elif defined(OS_LINUX) && BUILDFLAG(ENABLE_DESKTOP_AURA)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(ENABLE_DESKTOP_AURA)
+ gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const {
+ return nullptr;
+ }
diff --git a/www/iridium/files/patch-ui_views_views__delegate.h b/www/iridium/files/patch-ui_views_views__delegate.h
new file mode 100644
index 000000000000..b5bdee958617
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_views__delegate.h
@@ -0,0 +1,11 @@
+--- ui/views/views_delegate.h.orig 2020-02-03 21:53:14 UTC
++++ ui/views/views_delegate.h
+@@ -131,7 +131,7 @@ class VIEWS_EXPORT ViewsDelegate {
+ // Returns true if the window passed in is in the Windows 8 metro
+ // environment.
+ virtual bool IsWindowInMetro(gfx::NativeWindow window) const;
+-#elif defined(OS_LINUX) && BUILDFLAG(ENABLE_DESKTOP_AURA)
++#elif (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(ENABLE_DESKTOP_AURA)
+ virtual gfx::ImageSkia* GetDefaultWindowIcon() const;
+ #endif
+
diff --git a/www/iridium/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc b/www/iridium/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
new file mode 100644
index 000000000000..ab44393b52fb
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_widget_desktop__aura_desktop__window__tree__host__platform.cc
@@ -0,0 +1,11 @@
+--- ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+@@ -747,7 +747,7 @@ void DesktopWindowTreeHostPlatform::AddAdditionalInitP
+ // DesktopWindowTreeHost:
+
+ // Linux subclasses this host and adds some Linux specific bits.
+-#if !defined(OS_LINUX)
++#if !defined(OS_LINUX) && !defined(OS_BSD)
+ // static
+ DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
+ internal::NativeWidgetDelegate* native_widget_delegate,
diff --git a/www/iridium/files/patch-ui_views_widget_native__widget__aura.cc b/www/iridium/files/patch-ui_views_widget_native__widget__aura.cc
new file mode 100644
index 000000000000..61706964d7c0
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_widget_native__widget__aura.cc
@@ -0,0 +1,27 @@
+--- ui/views/widget/native_widget_aura.cc.orig 2020-03-16 18:40:43 UTC
++++ ui/views/widget/native_widget_aura.cc
+@@ -64,7 +64,7 @@
+ #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
+ #endif
+
+-#if BUILDFLAG(ENABLE_DESKTOP_AURA) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_DESKTOP_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/views/linux_ui/linux_ui.h"
+ #include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h"
+ #endif
+@@ -1099,13 +1099,13 @@ void Widget::CloseAllSecondaryWidgets() {
+ EnumThreadWindows(GetCurrentThreadId(), WindowCallbackProc, 0);
+ #endif
+
+-#if BUILDFLAG(ENABLE_DESKTOP_AURA) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_DESKTOP_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ DesktopWindowTreeHostLinux::CleanUpWindowList(CloseWindow);
+ #endif
+ }
+
+ const ui::NativeTheme* Widget::GetNativeTheme() const {
+-#if BUILDFLAG(ENABLE_DESKTOP_AURA) && defined(OS_LINUX)
++#if BUILDFLAG(ENABLE_DESKTOP_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ const LinuxUI* linux_ui = LinuxUI::instance();
+ if (linux_ui) {
+ ui::NativeTheme* native_theme =
diff --git a/www/iridium/files/patch-ui_views_window_custom__frame__view.cc b/www/iridium/files/patch-ui_views_window_custom__frame__view.cc
new file mode 100644
index 000000000000..4c35d22da5da
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_window_custom__frame__view.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/custom_frame_view.cc.orig 2019-09-09 21:55:47 UTC
++++ ui/views/window/custom_frame_view.cc
+@@ -287,7 +287,7 @@ int CustomFrameView::NonClientTopBorderHeight() const
+ int CustomFrameView::CaptionButtonY() const {
+ // Maximized buttons start at window top so that even if their images aren't
+ // drawn flush with the screen edge, they still obey Fitts' Law.
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS) || defined(OS_BSD)
+ return FrameBorderThickness();
+ #else
+ return frame_->IsMaximized() ? FrameBorderThickness() : kFrameShadowThickness;
diff --git a/www/iridium/files/patch-ui_views_window_dialog__delegate.cc b/www/iridium/files/patch-ui_views_window_dialog__delegate.cc
new file mode 100644
index 000000000000..b92881838304
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_window_dialog__delegate.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/dialog_delegate.cc.orig 2020-02-03 21:53:40 UTC
++++ ui/views/window/dialog_delegate.cc
+@@ -59,7 +59,7 @@ Widget* DialogDelegate::CreateDialogWidget(WidgetDeleg
+
+ // static
+ bool DialogDelegate::CanSupportCustomFrame(gfx::NativeView parent) {
+-#if defined(OS_LINUX) && BUILDFLAG(ENABLE_DESKTOP_AURA)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(ENABLE_DESKTOP_AURA)
+ // The new style doesn't support unparented dialogs on Linux desktop.
+ return parent != nullptr;
+ #elif defined(OS_WIN)
diff --git a/www/iridium/files/patch-ui_views_window_frame__background.cc b/www/iridium/files/patch-ui_views_window_frame__background.cc
new file mode 100644
index 000000000000..18a363a65e8f
--- /dev/null
+++ b/www/iridium/files/patch-ui_views_window_frame__background.cc
@@ -0,0 +1,11 @@
+--- ui/views/window/frame_background.cc.orig 2020-02-03 21:53:14 UTC
++++ ui/views/window/frame_background.cc
+@@ -107,7 +107,7 @@ void FrameBackground::PaintMaximized(gfx::Canvas* canv
+ const View* view) const {
+ // Fill the top with the frame color first so we have a constant background
+ // for areas not covered by the theme image.
+-#if defined(OS_LINUX) && BUILDFLAG(ENABLE_DESKTOP_AURA)
++#if (defined(OS_LINUX) || defined(OS_BSD)) && BUILDFLAG(ENABLE_DESKTOP_AURA)
+ auto* native_theme = view->GetNativeTheme();
+ ui::NativeTheme::ExtraParams params;
+ params.frame_top_area.use_custom_frame = use_custom_frame_;
diff --git a/www/iridium/files/patch-ui_webui_resources_js_cr.js b/www/iridium/files/patch-ui_webui_resources_js_cr.js
new file mode 100644
index 000000000000..2df5b1190a27
--- /dev/null
+++ b/www/iridium/files/patch-ui_webui_resources_js_cr.js
@@ -0,0 +1,14 @@
+--- ui/webui/resources/js/cr.js.orig 2019-12-16 21:51:34 UTC
++++ ui/webui/resources/js/cr.js
+@@ -437,6 +437,11 @@ var cr = cr || function(global) {
+ get isMac() {
+ return /Mac/.test(navigator.platform);
+ },
++
++ /** Whether this is on *BSD. */
++ get isBSD() {
++ return /BSD/.test(navigator.userAgent);
++ },
+
+ /** Whether this is on the Windows platform or not. */
+ get isWindows() {
diff --git a/www/iridium/files/patch-ui_webui_resources_js_icon.js b/www/iridium/files/patch-ui_webui_resources_js_icon.js
new file mode 100644
index 000000000000..26d3260b5cff
--- /dev/null
+++ b/www/iridium/files/patch-ui_webui_resources_js_icon.js
@@ -0,0 +1,11 @@
+--- ui/webui/resources/js/icon.js.orig 2019-10-21 19:07:29 UTC
++++ ui/webui/resources/js/icon.js
+@@ -16,7 +16,7 @@ cr.define('cr.icon', function() {
+ // supports SCALE_FACTOR_100P on all non-iOS platforms.
+ supportedScaleFactors.push(1);
+ }
+- if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux) {
++ if (cr.isMac || cr.isChromeOS || cr.isWindows || cr.isLinux || cr.isBSD) {
+ // All desktop platforms support zooming which also updates the renderer's
+ // device scale factors (a.k.a devicePixelRatio), and these platforms have
+ // high DPI assets for 2x. Let the renderer pick the closest image for
diff --git a/www/iridium/files/patch-v8_BUILD.gn b/www/iridium/files/patch-v8_BUILD.gn
new file mode 100644
index 000000000000..0fe25aa48094
--- /dev/null
+++ b/www/iridium/files/patch-v8_BUILD.gn
@@ -0,0 +1,32 @@
+--- v8/BUILD.gn.orig 2020-03-16 18:42:16 UTC
++++ v8/BUILD.gn
+@@ -3616,7 +3616,7 @@ v8_component("v8_libbase") {
+ }
+ }
+
+- if (is_linux) {
++ if (is_linux && !is_bsd) {
+ sources += [
+ "src/base/debug/stack_trace_posix.cc",
+ "src/base/platform/platform-linux.cc",
+@@ -3636,6 +3636,12 @@ v8_component("v8_libbase") {
+ "dl",
+ "rt",
+ ]
++ } else if (is_bsd) {
++ sources += [
++ "src/base/debug/stack_trace_posix.cc",
++ "src/base/platform/platform-freebsd.cc",
++ ]
++ libs = [ "rt", "execinfo" ]
+ } else if (is_android) {
+ if (current_toolchain == host_toolchain) {
+ libs = [
+@@ -3891,6 +3897,7 @@ if (current_toolchain == v8_snapshot_toolchain) {
+ "src/snapshot/mksnapshot.cc",
+ "src/snapshot/snapshot-empty.cc",
+ ]
++ libs = ["execinfo"]
+
+ configs = [ ":internal_config" ]
+
diff --git a/www/iridium/files/patch-v8_include_v8config.h b/www/iridium/files/patch-v8_include_v8config.h
new file mode 100644
index 000000000000..18b8adbb56b8
--- /dev/null
+++ b/www/iridium/files/patch-v8_include_v8config.h
@@ -0,0 +1,21 @@
+--- v8/include/v8config.h.orig 2020-03-03 18:55:34 UTC
++++ v8/include/v8config.h
+@@ -273,7 +273,18 @@
+ # define V8_HAS_ATTRIBUTE_WARN_UNUSED_RESULT \
+ (__has_attribute(warn_unused_result))
+
++// Work around Clang bug present in 9.0.1, at least.
++//
++// Clang stores alignment as a 32-bit unsigned integer, but V8 only uses
++// V8_ASSUME_ALIGNED() for a 4GB (2^32) alignment
++// (kPtrComprIsolateRootAlignment). As such, the alignment overflows and
++// becomes zero, triggering an internal Clang assertion that alignment must not
++// be zero.
++#if 0
+ # define V8_HAS_BUILTIN_ASSUME_ALIGNED (__has_builtin(__builtin_assume_aligned))
++#else
++# define V8_HAS_BUILTIN_ASSUME_ALIGNED 0
++#endif
+ # define V8_HAS_BUILTIN_BSWAP16 (__has_builtin(__builtin_bswap16))
+ # define V8_HAS_BUILTIN_BSWAP32 (__has_builtin(__builtin_bswap32))
+ # define V8_HAS_BUILTIN_BSWAP64 (__has_builtin(__builtin_bswap64))
diff --git a/www/iridium/files/patch-v8_src_api_api.cc b/www/iridium/files/patch-v8_src_api_api.cc
new file mode 100644
index 000000000000..f32636389a90
--- /dev/null
+++ b/www/iridium/files/patch-v8_src_api_api.cc
@@ -0,0 +1,11 @@
+--- v8/src/api/api.cc.orig 2020-03-16 18:42:16 UTC
++++ v8/src/api/api.cc
+@@ -5657,7 +5657,7 @@ bool v8::V8::Initialize() {
+ return true;
+ }
+
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
+ void* context) {
+ #if V8_TARGET_ARCH_X64 && !V8_OS_ANDROID
diff --git a/www/iridium/files/patch-v8_src_base_cpu.cc b/www/iridium/files/patch-v8_src_base_cpu.cc
new file mode 100644
index 000000000000..c11e6a384aa0
--- /dev/null
+++ b/www/iridium/files/patch-v8_src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- v8/src/base/cpu.cc.orig 2019-12-16 21:56:22 UTC
++++ v8/src/base/cpu.cc
+@@ -422,6 +422,7 @@ CPU::CPU()
+
+ #if V8_OS_LINUX
+
++#if V8_OS_LINUX
+ CPUInfo cpu_info;
+
+ // Extract implementor from the "CPU implementer" field.
+@@ -455,6 +456,7 @@ CPU::CPU()
+ }
+ delete[] part;
+ }
++#endif
+
+ // Extract architecture from the "CPU Architecture" field.
+ // The list is well-known, unlike the the output of
diff --git a/www/iridium/files/patch-v8_src_base_platform_platform-freebsd.cc b/www/iridium/files/patch-v8_src_base_platform_platform-freebsd.cc
new file mode 100644
index 000000000000..14e3ac15e039
--- /dev/null
+++ b/www/iridium/files/patch-v8_src_base_platform_platform-freebsd.cc
@@ -0,0 +1,13 @@
+--- v8/src/base/platform/platform-freebsd.cc.orig 2020-03-24 16:12:11 UTC
++++ v8/src/base/platform/platform-freebsd.cc
+@@ -81,8 +81,8 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLib
+ lib_name = std::string(path);
+ }
+ result.push_back(SharedLibraryAddress(
+- lib_name, reinterpret_cast<uintptr_t>(map->kve_start),
+- reinterpret_cast<uintptr_t>(map->kve_end)));
++ lib_name, static_cast<uintptr_t>(map->kve_start),
++ static_cast<uintptr_t>(map->kve_end)));
+ }
+
+ start += ssize;
diff --git a/www/iridium/files/patch-v8_src_base_platform_platform-posix.cc b/www/iridium/files/patch-v8_src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..e60a94f246f1
--- /dev/null
+++ b/www/iridium/files/patch-v8_src_base_platform_platform-posix.cc
@@ -0,0 +1,24 @@
+--- v8/src/base/platform/platform-posix.cc.orig 2020-02-03 21:55:00 UTC
++++ v8/src/base/platform/platform-posix.cc
+@@ -427,7 +427,7 @@ bool OS::DiscardSystemPages(void* address, size_t size
+
+ // static
+ bool OS::HasLazyCommits() {
+-#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX || V8_OS_FREEBSD
+ return true;
+ #else
+ // TODO(bbudge) Return true for all POSIX platforms.
+@@ -558,6 +558,12 @@ int OS::GetCurrentThreadId() {
+ return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+ return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++ return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++ return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++ return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+ return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/www/iridium/files/patch-weblayer_app_content__main__delegate__impl.cc b/www/iridium/files/patch-weblayer_app_content__main__delegate__impl.cc
new file mode 100644
index 000000000000..ef8149182926
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_app_content__main__delegate__impl.cc
@@ -0,0 +1,11 @@
+--- weblayer/app/content_main_delegate_impl.cc.orig 2020-03-17 10:35:42 UTC
++++ weblayer/app/content_main_delegate_impl.cc
+@@ -146,7 +146,7 @@ bool ContentMainDelegateImpl::BasicStartupComplete(int
+ }
+
+ void ContentMainDelegateImpl::PreSandboxStartup() {
+-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
++#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_BSD))
+ // Create an instance of the CPU class to parse /proc/cpuinfo and cache
+ // cpu_brand info.
+ base::CPU cpu_info;
diff --git a/www/iridium/files/patch-weblayer_browser_browser__main__parts__impl.cc b/www/iridium/files/patch-weblayer_browser_browser__main__parts__impl.cc
new file mode 100644
index 000000000000..ca6a91a131c6
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_browser_browser__main__parts__impl.cc
@@ -0,0 +1,20 @@
+--- weblayer/browser/browser_main_parts_impl.cc.orig 2020-03-16 18:40:43 UTC
++++ weblayer/browser/browser_main_parts_impl.cc
+@@ -41,7 +41,7 @@
+ #if defined(USE_AURA) && defined(USE_X11)
+ #include "ui/events/devices/x11/touch_factory_x11.h" // nogncheck
+ #endif
+-#if !defined(OS_CHROMEOS) && defined(USE_AURA) && defined(OS_LINUX)
++#if !defined(OS_CHROMEOS) && defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ #include "ui/base/ime/init/input_method_initializer.h"
+ #endif
+
+@@ -109,7 +109,7 @@ int BrowserMainPartsImpl::PreEarlyInitialization() {
+ #if defined(USE_X11)
+ ui::SetDefaultX11ErrorHandlers();
+ #endif
+-#if defined(USE_AURA) && defined(OS_LINUX)
++#if defined(USE_AURA) && (defined(OS_LINUX) || defined(OS_BSD))
+ ui::InitializeInputMethodForTesting();
+ #endif
+ #if defined(OS_ANDROID)
diff --git a/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.cc b/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.cc
new file mode 100644
index 000000000000..cdb4c7b0f2a0
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.cc
@@ -0,0 +1,38 @@
+--- weblayer/browser/content_browser_client_impl.cc.orig 2020-03-16 18:40:43 UTC
++++ weblayer/browser/content_browser_client_impl.cc
+@@ -72,7 +72,7 @@
+ #include "weblayer/browser/safe_browsing/safe_browsing_service.h"
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ #include "content/public/common/content_descriptors.h"
+ #endif
+
+@@ -247,7 +247,7 @@ ContentBrowserClientImpl::CreateNetworkContext(
+
+ void ContentBrowserClientImpl::OnNetworkServiceCreated(
+ network::mojom::NetworkService* network_service) {
+-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
++#if (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || defined(OS_BSD)
+ network::mojom::CryptConfigPtr config = network::mojom::CryptConfig::New();
+ content::GetNetworkService()->SetCryptConfig(std::move(config));
+ #endif
+@@ -426,7 +426,7 @@ SafeBrowsingService* ContentBrowserClientImpl::GetSafe
+ }
+ #endif
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ void ContentBrowserClientImpl::GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+@@ -460,7 +460,7 @@ void ContentBrowserClientImpl::GetAdditionalMappedFile
+ mappings->Share(service_manager::kCrashDumpSignal, crash_signal_fd);
+ #endif // defined(OS_ANDROID)
+ }
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ bool ContentBrowserClientImpl::ShouldOverrideUrlLoading(
diff --git a/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.h b/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.h
new file mode 100644
index 000000000000..41c6b7a9b08d
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_browser_content__browser__client__impl.h
@@ -0,0 +1,17 @@
+--- weblayer/browser/content_browser_client_impl.h.orig 2020-03-16 18:40:43 UTC
++++ weblayer/browser/content_browser_client_impl.h
+@@ -85,12 +85,12 @@ class ContentBrowserClientImpl : public content::Conte
+ service_manager::BinderMapWithContext<content::RenderFrameHost*>* map)
+ override;
+
+-#if defined(OS_LINUX) || defined(OS_ANDROID)
++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+ void GetAdditionalMappedFilesForChildProcess(
+ const base::CommandLine& command_line,
+ int child_process_id,
+ content::PosixFileDescriptorInfo* mappings) override;
+-#endif // defined(OS_LINUX) || defined(OS_ANDROID)
++#endif // defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_BSD)
+
+ #if defined(OS_ANDROID)
+ bool ShouldOverrideUrlLoading(int frame_tree_node_id,
diff --git a/www/iridium/files/patch-weblayer_browser_system__network__context__manager.cc b/www/iridium/files/patch-weblayer_browser_system__network__context__manager.cc
new file mode 100644
index 000000000000..4ac2c36b5362
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_browser_system__network__context__manager.cc
@@ -0,0 +1,11 @@
+--- weblayer/browser/system_network_context_manager.cc.orig 2020-03-17 10:36:11 UTC
++++ weblayer/browser/system_network_context_manager.cc
+@@ -102,7 +102,7 @@ SystemNetworkContextManager::CreateSystemNetworkContex
+
+ network_context_params->context_name = std::string("system");
+ network_context_params->primary_network_context = true;
+-#if defined(OS_LINUX) || defined(OS_WIN)
++#if defined(OS_LINUX) || defined(OS_WIN) || defined(OS_BSD)
+ // We're not configuring the cookie encryption on these platforms yet.
+ network_context_params->enable_encrypted_cookies = false;
+ #endif
diff --git a/www/iridium/files/patch-weblayer_common_weblayer__paths.cc b/www/iridium/files/patch-weblayer_common_weblayer__paths.cc
new file mode 100644
index 000000000000..54019d8cc261
--- /dev/null
+++ b/www/iridium/files/patch-weblayer_common_weblayer__paths.cc
@@ -0,0 +1,20 @@
+--- weblayer/common/weblayer_paths.cc.orig 2020-03-16 18:40:15 UTC
++++ weblayer/common/weblayer_paths.cc
+@@ -17,7 +17,7 @@
+
+ #if defined(OS_WIN)
+ #include "base/base_paths_win.h"
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ #include "base/nix/xdg_util.h"
+ #endif
+
+@@ -35,7 +35,7 @@ bool GetDefaultUserDataDirectory(base::FilePath* resul
+ return false;
+ *result = result->AppendASCII("weblayer");
+ return true;
+-#elif defined(OS_LINUX)
++#elif defined(OS_LINUX) || defined(OS_BSD)
+ std::unique_ptr<base::Environment> env(base::Environment::Create());
+ base::FilePath config_dir(base::nix::GetXDGDirectory(
+ env.get(), base::nix::kXdgConfigHomeEnvVar, base::nix::kDotConfigDir));
diff --git a/www/iridium/files/sndio_input.cc b/www/iridium/files/sndio_input.cc
new file mode 100644
index 000000000000..6c7bc8b8025b
--- /dev/null
+++ b/www/iridium/files/sndio_input.cc
@@ -0,0 +1,201 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/message_loop/message_loop.h"
+#include "media/base/audio_timestamp_helper.h"
+#include "media/audio/openbsd/audio_manager_openbsd.h"
+#include "media/audio/audio_manager.h"
+#include "media/audio/sndio/sndio_input.h"
+
+namespace media {
+
+static const SampleFormat kSampleFormat = kSampleFormatS16;
+
+void SndioAudioInputStream::OnMoveCallback(void *arg, int delta)
+{
+ SndioAudioInputStream* self = static_cast<SndioAudioInputStream*>(arg);
+
+ self->hw_delay += delta;
+}
+
+void *SndioAudioInputStream::ThreadEntry(void *arg) {
+ SndioAudioInputStream* self = static_cast<SndioAudioInputStream*>(arg);
+
+ self->ThreadLoop();
+ return NULL;
+}
+
+SndioAudioInputStream::SndioAudioInputStream(AudioManagerBase* manager,
+ const std::string& device_name,
+ const AudioParameters& params)
+ : manager(manager),
+ params(params),
+ audio_bus(AudioBus::Create(params)),
+ state(kClosed) {
+}
+
+SndioAudioInputStream::~SndioAudioInputStream() {
+ if (state != kClosed)
+ Close();
+}
+
+bool SndioAudioInputStream::Open() {
+ struct sio_par par;
+ int sig;
+
+ if (state != kClosed)
+ return false;
+
+ if (params.format() != AudioParameters::AUDIO_PCM_LINEAR &&
+ params.format() != AudioParameters::AUDIO_PCM_LOW_LATENCY) {
+ LOG(WARNING) << "Unsupported audio format.";
+ return false;
+ }
+
+ sio_initpar(&par);
+ par.rate = params.sample_rate();
+ par.rchan = params.channels();
+ par.bits = SampleFormatToBitsPerChannel(kSampleFormat);
+ par.bps = par.bits / 8;
+ par.sig = sig = par.bits != 8 ? 1 : 0;
+ par.le = SIO_LE_NATIVE;
+ par.appbufsz = params.frames_per_buffer();
+
+ hdl = sio_open(SIO_DEVANY, SIO_REC, 0);
+
+ if (hdl == NULL) {
+ LOG(ERROR) << "Couldn't open audio device.";
+ return false;
+ }
+
+ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
+ LOG(ERROR) << "Couldn't set audio parameters.";
+ goto bad_close;
+ }
+
+ if (par.rate != (unsigned int)params.sample_rate() ||
+ par.rchan != (unsigned int)params.channels() ||
+ par.bits != (unsigned int)SampleFormatToBitsPerChannel(kSampleFormat) ||
+ par.sig != (unsigned int)sig ||
+ (par.bps > 1 && par.le != SIO_LE_NATIVE) ||
+ (par.bits != par.bps * 8)) {
+ LOG(ERROR) << "Unsupported audio parameters.";
+ goto bad_close;
+ }
+ state = kStopped;
+ buffer = new char[audio_bus->frames() * params.GetBytesPerFrame(kSampleFormat)];
+ sio_onmove(hdl, &OnMoveCallback, this);
+ return true;
+bad_close:
+ sio_close(hdl);
+ return false;
+}
+
+void SndioAudioInputStream::Start(AudioInputCallback* cb) {
+
+ StartAgc();
+
+ state = kRunning;
+ hw_delay = 0;
+ callback = cb;
+ sio_start(hdl);
+ if (pthread_create(&thread, NULL, &ThreadEntry, this) != 0) {
+ LOG(ERROR) << "Failed to create real-time thread for recording.";
+ sio_stop(hdl);
+ state = kStopped;
+ }
+}
+
+void SndioAudioInputStream::Stop() {
+
+ if (state == kStopped)
+ return;
+
+ state = kStopWait;
+ pthread_join(thread, NULL);
+ sio_stop(hdl);
+ state = kStopped;
+
+ StopAgc();
+}
+
+void SndioAudioInputStream::Close() {
+
+ if (state == kClosed)
+ return;
+
+ if (state == kRunning)
+ Stop();
+
+ state = kClosed;
+ delete [] buffer;
+ sio_close(hdl);
+
+ manager->ReleaseInputStream(this);
+}
+
+double SndioAudioInputStream::GetMaxVolume() {
+ // Not supported
+ return 0.0;
+}
+
+void SndioAudioInputStream::SetVolume(double volume) {
+ // Not supported. Do nothing.
+}
+
+double SndioAudioInputStream::GetVolume() {
+ // Not supported.
+ return 0.0;
+}
+
+bool SndioAudioInputStream::IsMuted() {
+ // Not supported.
+ return false;
+}
+
+void SndioAudioInputStream::SetOutputDeviceForAec(
+ const std::string& output_device_id) {
+ // Not supported.
+}
+
+void SndioAudioInputStream::ThreadLoop(void) {
+ size_t todo, n;
+ char *data;
+ unsigned int nframes;
+ double normalized_volume = 0.0;
+
+ nframes = audio_bus->frames();
+
+ while (state == kRunning && !sio_eof(hdl)) {
+
+ GetAgcVolume(&normalized_volume);
+
+ // read one block
+ todo = nframes * params.GetBytesPerFrame(kSampleFormat);
+ data = buffer;
+ while (todo > 0) {
+ n = sio_read(hdl, data, todo);
+ if (n == 0)
+ return; // unrecoverable I/O error
+ todo -= n;
+ data += n;
+ }
+ hw_delay -= nframes;
+
+ // convert frames count to TimeDelta
+ const base::TimeDelta delay = AudioTimestampHelper::FramesToTime(hw_delay,
+ params.sample_rate());
+
+ // push into bus
+ audio_bus->FromInterleaved(buffer, nframes, SampleFormatToBytesPerChannel(kSampleFormat));
+
+ // invoke callback
+ callback->OnData(audio_bus.get(), base::TimeTicks::Now() - delay, 1.);
+ }
+}
+
+} // namespace media
diff --git a/www/iridium/files/sndio_input.h b/www/iridium/files/sndio_input.h
new file mode 100644
index 000000000000..d868e0469db5
--- /dev/null
+++ b/www/iridium/files/sndio_input.h
@@ -0,0 +1,91 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_
+#define MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_
+
+#include <stdint.h>
+#include <string>
+#include <sndio.h>
+
+#include "base/compiler_specific.h"
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/time/time.h"
+#include "media/audio/agc_audio_stream.h"
+#include "media/audio/audio_io.h"
+#include "media/audio/audio_device_description.h"
+#include "media/base/audio_parameters.h"
+
+namespace media {
+
+class AudioManagerBase;
+
+// Implementation of AudioOutputStream using sndio(7)
+class SndioAudioInputStream : public AgcAudioStream<AudioInputStream> {
+ public:
+ // Pass this to the constructor if you want to attempt auto-selection
+ // of the audio recording device.
+ static const char kAutoSelectDevice[];
+
+ // Create a PCM Output stream for the SNDIO device identified by
+ // |device_name|. If unsure of what to use for |device_name|, use
+ // |kAutoSelectDevice|.
+ SndioAudioInputStream(AudioManagerBase* audio_manager,
+ const std::string& device_name,
+ const AudioParameters& params);
+
+ ~SndioAudioInputStream() override;
+
+ // Implementation of AudioInputStream.
+ bool Open() override;
+ void Start(AudioInputCallback* callback) override;
+ void Stop() override;
+ void Close() override;
+ double GetMaxVolume() override;
+ void SetVolume(double volume) override;
+ double GetVolume() override;
+ bool IsMuted() override;
+ void SetOutputDeviceForAec(const std::string& output_device_id) override;
+
+ private:
+
+ enum StreamState {
+ kClosed, // Not opened yet
+ kStopped, // Device opened, but not started yet
+ kRunning, // Started, device playing
+ kStopWait // Stopping, waiting for the real-time thread to exit
+ };
+
+ // C-style call-backs
+ static void OnMoveCallback(void *arg, int delta);
+ static void* ThreadEntry(void *arg);
+
+ // Continuously moves data from the device to the consumer
+ void ThreadLoop();
+ // Our creator, the audio manager needs to be notified when we close.
+ AudioManagerBase* manager;
+ // Parameters of the source
+ AudioParameters params;
+ // We store data here for consumer
+ std::unique_ptr<AudioBus> audio_bus;
+ // Call-back that consumes recorded data
+ AudioInputCallback* callback; // Valid during a recording session.
+ // Handle of the audio device
+ struct sio_hdl* hdl;
+ // Current state of the stream
+ enum StreamState state;
+ // High priority thread running ThreadLoop()
+ pthread_t thread;
+ // Number of frames buffered in the hardware
+ int hw_delay;
+ // Temporary buffer where data is stored sndio-compatible format
+ char* buffer;
+
+ DISALLOW_COPY_AND_ASSIGN(SndioAudioInputStream);
+};
+
+} // namespace media
+
+#endif // MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_
diff --git a/www/iridium/files/sndio_output.cc b/www/iridium/files/sndio_output.cc
new file mode 100644
index 000000000000..a6719f9aac8d
--- /dev/null
+++ b/www/iridium/files/sndio_output.cc
@@ -0,0 +1,183 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/logging.h"
+#include "base/time/time.h"
+#include "base/time/default_tick_clock.h"
+#include "media/audio/audio_manager_base.h"
+#include "media/base/audio_timestamp_helper.h"
+#include "media/audio/sndio/sndio_output.h"
+
+namespace media {
+
+static const SampleFormat kSampleFormat = kSampleFormatS16;
+
+void SndioAudioOutputStream::OnMoveCallback(void *arg, int delta) {
+ SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg);
+
+ self->hw_delay -= delta;
+}
+
+void SndioAudioOutputStream::OnVolCallback(void *arg, unsigned int vol) {
+ SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg);
+
+ self->vol = vol;
+}
+
+void *SndioAudioOutputStream::ThreadEntry(void *arg) {
+ SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg);
+
+ self->ThreadLoop();
+ return NULL;
+}
+
+SndioAudioOutputStream::SndioAudioOutputStream(const AudioParameters& params,
+ AudioManagerBase* manager)
+ : manager(manager),
+ params(params),
+ audio_bus(AudioBus::Create(params)),
+ state(kClosed),
+ mutex(PTHREAD_MUTEX_INITIALIZER) {
+}
+
+SndioAudioOutputStream::~SndioAudioOutputStream() {
+ if (state != kClosed)
+ Close();
+}
+
+bool SndioAudioOutputStream::Open() {
+ struct sio_par par;
+ int sig;
+
+ if (params.format() != AudioParameters::AUDIO_PCM_LINEAR &&
+ params.format() != AudioParameters::AUDIO_PCM_LOW_LATENCY) {
+ LOG(WARNING) << "Unsupported audio format.";
+ return false;
+ }
+ sio_initpar(&par);
+ par.rate = params.sample_rate();
+ par.pchan = params.channels();
+ par.bits = SampleFormatToBitsPerChannel(kSampleFormat);
+ par.bps = par.bits / 8;
+ par.sig = sig = par.bits != 8 ? 1 : 0;
+ par.le = SIO_LE_NATIVE;
+ par.appbufsz = params.frames_per_buffer();
+
+ hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0);
+ if (hdl == NULL) {
+ LOG(ERROR) << "Couldn't open audio device.";
+ return false;
+ }
+ if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) {
+ LOG(ERROR) << "Couldn't set audio parameters.";
+ goto bad_close;
+ }
+ if (par.rate != (unsigned int)params.sample_rate() ||
+ par.pchan != (unsigned int)params.channels() ||
+ par.bits != (unsigned int)SampleFormatToBitsPerChannel(kSampleFormat) ||
+ par.sig != (unsigned int)sig ||
+ (par.bps > 1 && par.le != SIO_LE_NATIVE) ||
+ (par.bits != par.bps * 8)) {
+ LOG(ERROR) << "Unsupported audio parameters.";
+ goto bad_close;
+ }
+ state = kStopped;
+ volpending = 0;
+ vol = 0;
+ buffer = new char[audio_bus->frames() * params.GetBytesPerFrame(kSampleFormat)];
+ sio_onmove(hdl, &OnMoveCallback, this);
+ sio_onvol(hdl, &OnVolCallback, this);
+ return true;
+ bad_close:
+ sio_close(hdl);
+ return false;
+}
+
+void SndioAudioOutputStream::Close() {
+ if (state == kClosed)
+ return;
+ if (state == kRunning)
+ Stop();
+ state = kClosed;
+ delete [] buffer;
+ sio_close(hdl);
+ manager->ReleaseOutputStream(this); // Calls the destructor
+}
+
+void SndioAudioOutputStream::Start(AudioSourceCallback* callback) {
+ state = kRunning;
+ hw_delay = 0;
+ source = callback;
+ sio_start(hdl);
+ if (pthread_create(&thread, NULL, &ThreadEntry, this) != 0) {
+ LOG(ERROR) << "Failed to create real-time thread.";
+ sio_stop(hdl);
+ state = kStopped;
+ }
+}
+
+void SndioAudioOutputStream::Stop() {
+ if (state == kStopped)
+ return;
+ state = kStopWait;
+ pthread_join(thread, NULL);
+ sio_stop(hdl);
+ state = kStopped;
+}
+
+void SndioAudioOutputStream::SetVolume(double v) {
+ pthread_mutex_lock(&mutex);
+ vol = v * SIO_MAXVOL;
+ volpending = 1;
+ pthread_mutex_unlock(&mutex);
+}
+
+void SndioAudioOutputStream::GetVolume(double* v) {
+ pthread_mutex_lock(&mutex);
+ *v = vol * (1. / SIO_MAXVOL);
+ pthread_mutex_unlock(&mutex);
+}
+
+// This stream is always used with sub second buffer sizes, where it's
+// sufficient to simply always flush upon Start().
+void SndioAudioOutputStream::Flush() {}
+
+void SndioAudioOutputStream::ThreadLoop(void) {
+ int avail, count, result;
+
+ while (state == kRunning) {
+ // Update volume if needed
+ pthread_mutex_lock(&mutex);
+ if (volpending) {
+ volpending = 0;
+ sio_setvol(hdl, vol);
+ }
+ pthread_mutex_unlock(&mutex);
+
+ // Get data to play
+ const base::TimeDelta delay = AudioTimestampHelper::FramesToTime(hw_delay,
+ params.sample_rate());
+ count = source->OnMoreData(delay, base::TimeTicks::Now(), 0, audio_bus.get());
+ audio_bus->ToInterleaved(count, SampleFormatToBytesPerChannel(kSampleFormat), buffer);
+ if (count == 0) {
+ // We have to submit something to the device
+ count = audio_bus->frames();
+ memset(buffer, 0, count * params.GetBytesPerFrame(kSampleFormat));
+ LOG(WARNING) << "No data to play, running empty cycle.";
+ }
+
+ // Submit data to the device
+ avail = count * params.GetBytesPerFrame(kSampleFormat);
+ result = sio_write(hdl, buffer, avail);
+ if (result == 0) {
+ LOG(WARNING) << "Audio device disconnected.";
+ break;
+ }
+
+ // Update hardware pointer
+ hw_delay += count;
+ }
+}
+
+} // namespace media
diff --git a/www/iridium/files/sndio_output.h b/www/iridium/files/sndio_output.h
new file mode 100644
index 000000000000..ead220ca96e7
--- /dev/null
+++ b/www/iridium/files/sndio_output.h
@@ -0,0 +1,86 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_
+#define MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_
+
+#include <pthread.h>
+#include <sndio.h>
+
+#include "base/time/tick_clock.h"
+#include "base/time/time.h"
+#include "media/audio/audio_io.h"
+
+namespace media {
+
+class AudioManagerBase;
+
+// Implementation of AudioOutputStream using sndio(7)
+class SndioAudioOutputStream : public AudioOutputStream {
+ public:
+ // The manager is creating this object
+ SndioAudioOutputStream(const AudioParameters& params,
+ AudioManagerBase* manager);
+ virtual ~SndioAudioOutputStream();
+
+ // Implementation of AudioOutputStream.
+ bool Open() override;
+ void Close() override;
+ void Start(AudioSourceCallback* callback) override;
+ void Stop() override;
+ void SetVolume(double volume) override;
+ void GetVolume(double* volume) override;
+ void Flush() override;
+
+ friend void sndio_onmove(void *arg, int delta);
+ friend void sndio_onvol(void *arg, unsigned int vol);
+ friend void *sndio_threadstart(void *arg);
+
+ private:
+ enum StreamState {
+ kClosed, // Not opened yet
+ kStopped, // Device opened, but not started yet
+ kRunning, // Started, device playing
+ kStopWait // Stopping, waiting for the real-time thread to exit
+ };
+
+ // C-style call-backs
+ static void OnMoveCallback(void *arg, int delta);
+ static void OnVolCallback(void *arg, unsigned int vol);
+ static void* ThreadEntry(void *arg);
+
+ // Continuously moves data from the producer to the device
+ void ThreadLoop(void);
+
+ // Our creator, the audio manager needs to be notified when we close.
+ AudioManagerBase* manager;
+ // Parameters of the source
+ AudioParameters params;
+ // Source stores data here
+ std::unique_ptr<AudioBus> audio_bus;
+ // Call-back that produces data to play
+ AudioSourceCallback* source;
+ // Handle of the audio device
+ struct sio_hdl* hdl;
+ // Current state of the stream
+ enum StreamState state;
+ // High priority thread running ThreadLoop()
+ pthread_t thread;
+ // Protects vol, volpending and hw_delay
+ pthread_mutex_t mutex;
+ // Current volume in the 0..SIO_MAXVOL range
+ int vol;
+ // Set to 1 if volumes must be refreshed in the realtime thread
+ int volpending;
+ // Number of frames buffered in the hardware
+ int hw_delay;
+ // Temporary buffer where data is stored sndio-compatible format
+ char* buffer;
+
+ DISALLOW_COPY_AND_ASSIGN(SndioAudioOutputStream);
+};
+
+} // namespace media
+
+#endif // MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_
diff --git a/www/iridium/pkg-descr b/www/iridium/pkg-descr
new file mode 100644
index 000000000000..50b29c6098d7
--- /dev/null
+++ b/www/iridium/pkg-descr
@@ -0,0 +1,7 @@
+Iridium is a free, open, and libre browser modification of the Chromium
+code base, with privacy being enhanced in several key areas.
+
+Automatic transmission of partial queries, keywords, metrics to central
+services is inhibited and only occurs with consent.
+
+WWW: https://iridiumbrowser.de/
diff --git a/www/iridium/pkg-plist b/www/iridium/pkg-plist
new file mode 100644
index 000000000000..d71c983aceb2
--- /dev/null
+++ b/www/iridium/pkg-plist
@@ -0,0 +1,1101 @@
+bin/iridium
+%%DATADIR%%/iridium
+%%DATADIR%%/chrome_100_percent.pak
+%%DATADIR%%/chrome_200_percent.pak
+%%DATADIR%%/headless_lib.pak
+%%DATADIR%%/icudtl.dat
+%%DATADIR%%/libEGL.so
+%%DATADIR%%/libGLESv2.so
+%%DATADIR%%/libVkICD_mock_icd.so
+%%DATADIR%%/locales/am.pak
+%%DATADIR%%/locales/am.pak.info
+%%DATADIR%%/locales/ar.pak
+%%DATADIR%%/locales/ar.pak.info
+%%DATADIR%%/locales/bg.pak
+%%DATADIR%%/locales/bg.pak.info
+%%DATADIR%%/locales/bn.pak
+%%DATADIR%%/locales/bn.pak.info
+%%DATADIR%%/locales/ca.pak
+%%DATADIR%%/locales/ca.pak.info
+%%DATADIR%%/locales/cs.pak
+%%DATADIR%%/locales/cs.pak.info
+%%DATADIR%%/locales/da.pak
+%%DATADIR%%/locales/da.pak.info
+%%DATADIR%%/locales/de.pak
+%%DATADIR%%/locales/de.pak.info
+%%DATADIR%%/locales/el.pak
+%%DATADIR%%/locales/el.pak.info
+%%DATADIR%%/locales/en-GB.pak
+%%DATADIR%%/locales/en-GB.pak.info
+%%DATADIR%%/locales/en-US.pak
+%%DATADIR%%/locales/en-US.pak.info
+%%DATADIR%%/locales/es-419.pak
+%%DATADIR%%/locales/es-419.pak.info
+%%DATADIR%%/locales/es.pak
+%%DATADIR%%/locales/es.pak.info
+%%DATADIR%%/locales/et.pak
+%%DATADIR%%/locales/et.pak.info
+%%DATADIR%%/locales/fa.pak
+%%DATADIR%%/locales/fa.pak.info
+%%DATADIR%%/locales/fi.pak
+%%DATADIR%%/locales/fi.pak.info
+%%DATADIR%%/locales/fil.pak
+%%DATADIR%%/locales/fil.pak.info
+%%DATADIR%%/locales/fr.pak
+%%DATADIR%%/locales/fr.pak.info
+%%DATADIR%%/locales/gu.pak
+%%DATADIR%%/locales/gu.pak.info
+%%DATADIR%%/locales/he.pak
+%%DATADIR%%/locales/he.pak.info
+%%DATADIR%%/locales/hi.pak
+%%DATADIR%%/locales/hi.pak.info
+%%DATADIR%%/locales/hr.pak
+%%DATADIR%%/locales/hr.pak.info
+%%DATADIR%%/locales/hu.pak
+%%DATADIR%%/locales/hu.pak.info
+%%DATADIR%%/locales/id.pak
+%%DATADIR%%/locales/id.pak.info
+%%DATADIR%%/locales/it.pak
+%%DATADIR%%/locales/it.pak.info
+%%DATADIR%%/locales/ja.pak
+%%DATADIR%%/locales/ja.pak.info
+%%DATADIR%%/locales/kn.pak
+%%DATADIR%%/locales/kn.pak.info
+%%DATADIR%%/locales/ko.pak
+%%DATADIR%%/locales/ko.pak.info
+%%DATADIR%%/locales/lt.pak
+%%DATADIR%%/locales/lt.pak.info
+%%DATADIR%%/locales/lv.pak
+%%DATADIR%%/locales/lv.pak.info
+%%DATADIR%%/locales/ml.pak
+%%DATADIR%%/locales/ml.pak.info
+%%DATADIR%%/locales/mr.pak
+%%DATADIR%%/locales/mr.pak.info
+%%DATADIR%%/locales/ms.pak
+%%DATADIR%%/locales/ms.pak.info
+%%DATADIR%%/locales/nb.pak
+%%DATADIR%%/locales/nb.pak.info
+%%DATADIR%%/locales/nl.pak
+%%DATADIR%%/locales/nl.pak.info
+%%DATADIR%%/locales/pl.pak
+%%DATADIR%%/locales/pl.pak.info
+%%DATADIR%%/locales/pt-BR.pak
+%%DATADIR%%/locales/pt-BR.pak.info
+%%DATADIR%%/locales/pt-PT.pak
+%%DATADIR%%/locales/pt-PT.pak.info
+%%DATADIR%%/locales/ro.pak
+%%DATADIR%%/locales/ro.pak.info
+%%DATADIR%%/locales/ru.pak
+%%DATADIR%%/locales/ru.pak.info
+%%DATADIR%%/locales/sk.pak
+%%DATADIR%%/locales/sk.pak.info
+%%DATADIR%%/locales/sl.pak
+%%DATADIR%%/locales/sl.pak.info
+%%DATADIR%%/locales/sr.pak
+%%DATADIR%%/locales/sr.pak.info
+%%DATADIR%%/locales/sv.pak
+%%DATADIR%%/locales/sv.pak.info
+%%DATADIR%%/locales/sw.pak
+%%DATADIR%%/locales/sw.pak.info
+%%DATADIR%%/locales/ta.pak
+%%DATADIR%%/locales/ta.pak.info
+%%DATADIR%%/locales/te.pak
+%%DATADIR%%/locales/te.pak.info
+%%DATADIR%%/locales/th.pak
+%%DATADIR%%/locales/th.pak.info
+%%DATADIR%%/locales/tr.pak
+%%DATADIR%%/locales/tr.pak.info
+%%DATADIR%%/locales/uk.pak
+%%DATADIR%%/locales/uk.pak.info
+%%DATADIR%%/locales/vi.pak
+%%DATADIR%%/locales/vi.pak.info
+%%DATADIR%%/locales/zh-CN.pak
+%%DATADIR%%/locales/zh-CN.pak.info
+%%DATADIR%%/locales/zh-TW.pak
+%%DATADIR%%/locales/zh-TW.pak.info
+%%DATADIR%%/mksnapshot
+%%DATADIR%%/product_logo_48.png
+%%DATADIR%%/protoc
+%%DATADIR%%/resources.pak
+%%DATADIR%%/resources/inspector/.htaccess
+%%DATADIR%%/resources/inspector/Images/accelerometer-back.svg
+%%DATADIR%%/resources/inspector/Images/accelerometer-bottom.png
+%%DATADIR%%/resources/inspector/Images/accelerometer-front.svg
+%%DATADIR%%/resources/inspector/Images/accelerometer-left.png
+%%DATADIR%%/resources/inspector/Images/accelerometer-right.png
+%%DATADIR%%/resources/inspector/Images/accelerometer-top.png
+%%DATADIR%%/resources/inspector/Images/audits_logo.svg
+%%DATADIR%%/resources/inspector/Images/breakpoint.svg
+%%DATADIR%%/resources/inspector/Images/breakpointConditional.svg
+%%DATADIR%%/resources/inspector/Images/checkboxCheckmark.svg
+%%DATADIR%%/resources/inspector/Images/checker.png
+%%DATADIR%%/resources/inspector/Images/chevrons.svg
+%%DATADIR%%/resources/inspector/Images/chromeDisabledSelect.png
+%%DATADIR%%/resources/inspector/Images/chromeDisabledSelect_2x.png
+%%DATADIR%%/resources/inspector/Images/chromeLeft.png
+%%DATADIR%%/resources/inspector/Images/chromeMiddle.png
+%%DATADIR%%/resources/inspector/Images/chromeRight.png
+%%DATADIR%%/resources/inspector/Images/chromeSelect.png
+%%DATADIR%%/resources/inspector/Images/chromeSelect_2x.png
+%%DATADIR%%/resources/inspector/Images/cssoverview_icons_2x.png
+%%DATADIR%%/resources/inspector/Images/errorWave.svg
+%%DATADIR%%/resources/inspector/Images/ic_info_black_18dp.svg
+%%DATADIR%%/resources/inspector/Images/ic_warning_black_18dp.svg
+%%DATADIR%%/resources/inspector/Images/largeIcons.svg
+%%DATADIR%%/resources/inspector/Images/mediumIcons.svg
+%%DATADIR%%/resources/inspector/Images/navigationControls.png
+%%DATADIR%%/resources/inspector/Images/navigationControls_2x.png
+%%DATADIR%%/resources/inspector/Images/nodeIcon.png
+%%DATADIR%%/resources/inspector/Images/popoverArrows.png
+%%DATADIR%%/resources/inspector/Images/profileGroupIcon.png
+%%DATADIR%%/resources/inspector/Images/profileIcon.png
+%%DATADIR%%/resources/inspector/Images/profileSmallIcon.png
+%%DATADIR%%/resources/inspector/Images/radioDot.png
+%%DATADIR%%/resources/inspector/Images/radioDot-dark-theme.png
+%%DATADIR%%/resources/inspector/Images/resizeDiagonal.png
+%%DATADIR%%/resources/inspector/Images/resizeDiagonal_2x.png
+%%DATADIR%%/resources/inspector/Images/resizeHorizontal.png
+%%DATADIR%%/resources/inspector/Images/resizeHorizontal_2x.png
+%%DATADIR%%/resources/inspector/Images/resizeVertical.png
+%%DATADIR%%/resources/inspector/Images/resizeVertical_2x.png
+%%DATADIR%%/resources/inspector/Images/resourceCSSIcon.png
+%%DATADIR%%/resources/inspector/Images/resourceDocumentIcon.png
+%%DATADIR%%/resources/inspector/Images/resourceDocumentIconSmall.png
+%%DATADIR%%/resources/inspector/Images/resourceJSIcon.png
+%%DATADIR%%/resources/inspector/Images/resourcePlainIcon.png
+%%DATADIR%%/resources/inspector/Images/resourcePlainIconSmall.png
+%%DATADIR%%/resources/inspector/Images/resourcesTimeGraphIcon.png
+%%DATADIR%%/resources/inspector/Images/searchNext.png
+%%DATADIR%%/resources/inspector/Images/searchPrev.png
+%%DATADIR%%/resources/inspector/Images/securityIcons.svg
+%%DATADIR%%/resources/inspector/Images/smallIcons.svg
+%%DATADIR%%/resources/inspector/Images/speech.png
+%%DATADIR%%/resources/inspector/Images/toolbarResizerVertical.png
+%%DATADIR%%/resources/inspector/Images/touchCursor.png
+%%DATADIR%%/resources/inspector/Images/touchCursor_2x.png
+%%DATADIR%%/resources/inspector/Images/treeoutlineTriangles.svg
+%%DATADIR%%/resources/inspector/Images/whatsnew.png
+%%DATADIR%%/resources/inspector/InspectorBackendCommands.js
+%%DATADIR%%/resources/inspector/SupportedCSSProperties.js
+%%DATADIR%%/resources/inspector/Tests.js
+%%DATADIR%%/resources/inspector/accessibility/accessibility_module.js
+%%DATADIR%%/resources/inspector/accessibility/accessibility-legacy.js
+%%DATADIR%%/resources/inspector/accessibility/accessibility.js
+%%DATADIR%%/resources/inspector/accessibility/AccessibilityModel.js
+%%DATADIR%%/resources/inspector/accessibility/AccessibilityNodeView.js
+%%DATADIR%%/resources/inspector/accessibility/AccessibilitySidebarView.js
+%%DATADIR%%/resources/inspector/accessibility/AccessibilityStrings.js
+%%DATADIR%%/resources/inspector/accessibility/AccessibilitySubPane.js
+%%DATADIR%%/resources/inspector/accessibility/ARIAAttributesView.js
+%%DATADIR%%/resources/inspector/accessibility/ARIAMetadata.js
+%%DATADIR%%/resources/inspector/accessibility/ARIAProperties.js
+%%DATADIR%%/resources/inspector/accessibility/AXBreadcrumbsPane.js
+%%DATADIR%%/resources/inspector/accessibility_test_runner/accessibility_test_runner_module.js
+%%DATADIR%%/resources/inspector/animation/animation_module.js
+%%DATADIR%%/resources/inspector/animation/animation-legacy.js
+%%DATADIR%%/resources/inspector/animation/animation.js
+%%DATADIR%%/resources/inspector/animation/AnimationGroupPreviewUI.js
+%%DATADIR%%/resources/inspector/animation/AnimationModel.js
+%%DATADIR%%/resources/inspector/animation/AnimationScreenshotPopover.js
+%%DATADIR%%/resources/inspector/animation/AnimationTimeline.js
+%%DATADIR%%/resources/inspector/animation/AnimationUI.js
+%%DATADIR%%/resources/inspector/application_test_runner/application_test_runner_module.js
+%%DATADIR%%/resources/inspector/audits/audits_module.js
+%%DATADIR%%/resources/inspector/audits/audits-legacy.js
+%%DATADIR%%/resources/inspector/audits/audits.js
+%%DATADIR%%/resources/inspector/audits/AuditsController.js
+%%DATADIR%%/resources/inspector/audits/AuditsPanel.js
+%%DATADIR%%/resources/inspector/audits/AuditsProtocolService.js
+%%DATADIR%%/resources/inspector/audits/AuditsReportRenderer.js
+%%DATADIR%%/resources/inspector/audits/AuditsReportSelector.js
+%%DATADIR%%/resources/inspector/audits/AuditsStartView.js
+%%DATADIR%%/resources/inspector/audits/AuditsStatusView.js
+%%DATADIR%%/resources/inspector/audits/lighthouse/report-generator.js
+%%DATADIR%%/resources/inspector/audits/lighthouse/report.js
+%%DATADIR%%/resources/inspector/audits/RadioSetting.js
+%%DATADIR%%/resources/inspector/audits_test_runner/audits_test_runner_module.js
+%%DATADIR%%/resources/inspector/audits_worker.js
+%%DATADIR%%/resources/inspector/audits_worker/audits_worker_module.js
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ar-XB.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ar.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/bg.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ca.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/cs.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/da.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/de.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/el.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/en-GB.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/en-US.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/en-XA.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/en-XL.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/es-419.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/es.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/fi.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/fil.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/fr.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/he.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/hi.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/hr.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/hu.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/id.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/it.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ja.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ko.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/lt.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/lv.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/nl.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/no.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/pl.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/pt-PT.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/pt.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ro.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ru.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/sk.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/sl.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/sr-Latn.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/sr.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/sv.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/ta.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/te.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/th.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/tr.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/uk.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/vi.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/zh-HK.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/zh-TW.json
+%%DATADIR%%/resources/inspector/audits_worker/lighthouse/locales/zh.json
+%%DATADIR%%/resources/inspector/axe_core_test_runner/axe_core_test_runner_module.js
+%%DATADIR%%/resources/inspector/bindings_test_runner/bindings_test_runner_module.js
+%%DATADIR%%/resources/inspector/bindings/bindings.js
+%%DATADIR%%/resources/inspector/bindings/bindings-legacy.js
+%%DATADIR%%/resources/inspector/bindings/BlackboxManager.js
+%%DATADIR%%/resources/inspector/bindings/BreakpointManager.js
+%%DATADIR%%/resources/inspector/bindings/CompilerScriptMapping.js
+%%DATADIR%%/resources/inspector/bindings/ContentProviderBasedProject.js
+%%DATADIR%%/resources/inspector/bindings/CSSWorkspaceBinding.js
+%%DATADIR%%/resources/inspector/bindings/DebuggerLanguagePlugins.js
+%%DATADIR%%/resources/inspector/bindings/DebuggerWorkspaceBinding.js
+%%DATADIR%%/resources/inspector/bindings/DefaultScriptMapping.js
+%%DATADIR%%/resources/inspector/bindings/FileUtils.js
+%%DATADIR%%/resources/inspector/bindings/LiveLocation.js
+%%DATADIR%%/resources/inspector/bindings/NetworkProject.js
+%%DATADIR%%/resources/inspector/bindings/PresentationConsoleMessageHelper.js
+%%DATADIR%%/resources/inspector/bindings/ResourceMapping.js
+%%DATADIR%%/resources/inspector/bindings/ResourceScriptMapping.js
+%%DATADIR%%/resources/inspector/bindings/ResourceUtils.js
+%%DATADIR%%/resources/inspector/bindings/SASSSourceMapping.js
+%%DATADIR%%/resources/inspector/bindings/StylesSourceMapping.js
+%%DATADIR%%/resources/inspector/bindings/TempFile.js
+%%DATADIR%%/resources/inspector/bindings/language_plugins/CXXDWARFLanguagePlugin.js
+%%DATADIR%%/resources/inspector/browser_debugger/browser_debugger_module.js
+%%DATADIR%%/resources/inspector/browser_debugger/browser_debugger-legacy.js
+%%DATADIR%%/resources/inspector/browser_debugger/browser_debugger.js
+%%DATADIR%%/resources/inspector/browser_debugger/DOMBreakpointsSidebarPane.js
+%%DATADIR%%/resources/inspector/browser_debugger/EventListenerBreakpointsSidebarPane.js
+%%DATADIR%%/resources/inspector/browser_debugger/ObjectEventListenersSidebarPane.js
+%%DATADIR%%/resources/inspector/browser_debugger/XHRBreakpointsSidebarPane.js
+%%DATADIR%%/resources/inspector/browser_sdk/browser_sdk.js
+%%DATADIR%%/resources/inspector/browser_sdk/browser_sdk-legacy.js
+%%DATADIR%%/resources/inspector/browser_sdk/LogManager.js
+%%DATADIR%%/resources/inspector/changes/changes_module.js
+%%DATADIR%%/resources/inspector/changes/changes-legacy.js
+%%DATADIR%%/resources/inspector/changes/changes.js
+%%DATADIR%%/resources/inspector/changes/ChangesHighlighter.js
+%%DATADIR%%/resources/inspector/changes/ChangesSidebar.js
+%%DATADIR%%/resources/inspector/changes/ChangesTextEditor.js
+%%DATADIR%%/resources/inspector/changes/ChangesView.js
+%%DATADIR%%/resources/inspector/cm_headless/cm_headless.js
+%%DATADIR%%/resources/inspector/cm_headless/headlesscodemirror.js
+%%DATADIR%%/resources/inspector/cm_modes/clike.js
+%%DATADIR%%/resources/inspector/cm_modes/clojure.js
+%%DATADIR%%/resources/inspector/cm/cm_module.js
+%%DATADIR%%/resources/inspector/cm/active-line.js
+%%DATADIR%%/resources/inspector/cm/brace-fold.js
+%%DATADIR%%/resources/inspector/cm/closebrackets.js
+%%DATADIR%%/resources/inspector/cm/cm.js
+%%DATADIR%%/resources/inspector/cm/codemirror.js
+%%DATADIR%%/resources/inspector/cm/comment.js
+%%DATADIR%%/resources/inspector/cm/foldcode.js
+%%DATADIR%%/resources/inspector/cm/foldgutter.js
+%%DATADIR%%/resources/inspector/cm/mark-selection.js
+%%DATADIR%%/resources/inspector/cm/matchbrackets.js
+%%DATADIR%%/resources/inspector/cm/multiplex.js
+%%DATADIR%%/resources/inspector/cm/overlay.js
+%%DATADIR%%/resources/inspector/cm_modes/cm_modes_module.js
+%%DATADIR%%/resources/inspector/cm_modes/cm_modes.js
+%%DATADIR%%/resources/inspector/cm_modes/coffeescript.js
+%%DATADIR%%/resources/inspector/cm_modes/DefaultCodeMirrorMimeMode.js
+%%DATADIR%%/resources/inspector/cm_modes/jsx.js
+%%DATADIR%%/resources/inspector/cm_modes/livescript.js
+%%DATADIR%%/resources/inspector/cm_modes/markdown.js
+%%DATADIR%%/resources/inspector/cm_modes/php.js
+%%DATADIR%%/resources/inspector/cm_modes/python.js
+%%DATADIR%%/resources/inspector/cm_modes/shell.js
+%%DATADIR%%/resources/inspector/cm_web_modes/cm_web_modes_cm.js
+%%DATADIR%%/resources/inspector/cm_web_modes/cm_web_modes_headless.js
+%%DATADIR%%/resources/inspector/cm_web_modes/cm_web_modes_module.js
+%%DATADIR%%/resources/inspector/cm_web_modes/cm_web_modes.js
+%%DATADIR%%/resources/inspector/cm_web_modes/css.js
+%%DATADIR%%/resources/inspector/cm_web_modes/htmlembedded.js
+%%DATADIR%%/resources/inspector/cm_web_modes/htmlmixed.js
+%%DATADIR%%/resources/inspector/cm_web_modes/javascript.js
+%%DATADIR%%/resources/inspector/cm_web_modes/xml.js
+%%DATADIR%%/resources/inspector/color_picker/color_picker_module.js
+%%DATADIR%%/resources/inspector/color_picker/color_picker-legacy.js
+%%DATADIR%%/resources/inspector/color_picker/color_picker.js
+%%DATADIR%%/resources/inspector/color_picker/ContrastDetails.js
+%%DATADIR%%/resources/inspector/color_picker/ContrastInfo.js
+%%DATADIR%%/resources/inspector/color_picker/ContrastOverlay.js
+%%DATADIR%%/resources/inspector/color_picker/Spectrum.js
+%%DATADIR%%/resources/inspector/common/App.js
+%%DATADIR%%/resources/inspector/common/AppProvider.js
+%%DATADIR%%/resources/inspector/common/CharacterIdMap.js
+%%DATADIR%%/resources/inspector/common/Color.js
+%%DATADIR%%/resources/inspector/common/common.js
+%%DATADIR%%/resources/inspector/common/common-legacy.js
+%%DATADIR%%/resources/inspector/common/Console.js
+%%DATADIR%%/resources/inspector/common/ContentProvider.js
+%%DATADIR%%/resources/inspector/common/EventTarget.js
+%%DATADIR%%/resources/inspector/common/JavaScriptMetaData.js
+%%DATADIR%%/resources/inspector/common/Linkifier.js
+%%DATADIR%%/resources/inspector/common/Object.js
+%%DATADIR%%/resources/inspector/common/ParsedURL.js
+%%DATADIR%%/resources/inspector/common/Progress.js
+%%DATADIR%%/resources/inspector/common/QueryParamHandler.js
+%%DATADIR%%/resources/inspector/common/ResourceType.js
+%%DATADIR%%/resources/inspector/common/Revealer.js
+%%DATADIR%%/resources/inspector/common/Runnable.js
+%%DATADIR%%/resources/inspector/common/SegmentedRange.js
+%%DATADIR%%/resources/inspector/common/Settings.js
+%%DATADIR%%/resources/inspector/common/StaticContentProvider.js
+%%DATADIR%%/resources/inspector/common/StringOutputStream.js
+%%DATADIR%%/resources/inspector/common/TextDictionary.js
+%%DATADIR%%/resources/inspector/common/Throttler.js
+%%DATADIR%%/resources/inspector/common/Trie.js
+%%DATADIR%%/resources/inspector/common/UIString.js
+%%DATADIR%%/resources/inspector/common/Worker.js
+%%DATADIR%%/resources/inspector/components/components.js
+%%DATADIR%%/resources/inspector/components/components-legacy.js
+%%DATADIR%%/resources/inspector/components/DockController.js
+%%DATADIR%%/resources/inspector/components/ImagePreview.js
+%%DATADIR%%/resources/inspector/components/JSPresentationUtils.js
+%%DATADIR%%/resources/inspector/components/Linkifier.js
+%%DATADIR%%/resources/inspector/components/Reload.js
+%%DATADIR%%/resources/inspector/components/TargetDetachedDialog.js
+%%DATADIR%%/resources/inspector/console_counters/console_counters.js
+%%DATADIR%%/resources/inspector/console_counters/console_counters-legacy.js
+%%DATADIR%%/resources/inspector/console_counters/WarningErrorCounter.js
+%%DATADIR%%/resources/inspector/console/console_module.js
+%%DATADIR%%/resources/inspector/console/console-legacy.js
+%%DATADIR%%/resources/inspector/console/console.js
+%%DATADIR%%/resources/inspector/console/ConsoleContextSelector.js
+%%DATADIR%%/resources/inspector/console/ConsoleFilter.js
+%%DATADIR%%/resources/inspector/console/ConsolePanel.js
+%%DATADIR%%/resources/inspector/console/ConsolePinPane.js
+%%DATADIR%%/resources/inspector/console/ConsolePrompt.js
+%%DATADIR%%/resources/inspector/console/ConsoleSidebar.js
+%%DATADIR%%/resources/inspector/console/ConsoleView.js
+%%DATADIR%%/resources/inspector/console/ConsoleViewMessage.js
+%%DATADIR%%/resources/inspector/console/ConsoleViewport.js
+%%DATADIR%%/resources/inspector/console_test_runner/console_test_runner_module.js
+%%DATADIR%%/resources/inspector/cookie_table/cookie_table_module.js
+%%DATADIR%%/resources/inspector/cookie_table/cookie_table-legacy.js
+%%DATADIR%%/resources/inspector/cookie_table/cookie_table.js
+%%DATADIR%%/resources/inspector/cookie_table/CookiesTable.js
+%%DATADIR%%/resources/inspector/coverage/coverage_module.js
+%%DATADIR%%/resources/inspector/coverage/coverage-legacy.js
+%%DATADIR%%/resources/inspector/coverage/coverage.js
+%%DATADIR%%/resources/inspector/coverage/CoverageDecorationManager.js
+%%DATADIR%%/resources/inspector/coverage/CoverageListView.js
+%%DATADIR%%/resources/inspector/coverage/CoverageModel.js
+%%DATADIR%%/resources/inspector/coverage/CoverageView.js
+%%DATADIR%%/resources/inspector/coverage_test_runner/coverage_test_runner_module.js
+%%DATADIR%%/resources/inspector/cpu_profiler_test_runner/cpu_profiler_test_runner_module.js
+%%DATADIR%%/resources/inspector/css_overview/css_overview_module.js
+%%DATADIR%%/resources/inspector/css_overview/css_overview-legacy.js
+%%DATADIR%%/resources/inspector/css_overview/css_overview.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewCompletedView.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewController.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewModel.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewPanel.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewProcessingView.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewSidebarPanel.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewStartView.js
+%%DATADIR%%/resources/inspector/css_overview/CSSOverviewUnusedDeclarations.js
+%%DATADIR%%/resources/inspector/dagre_layout/dagre_layout_module.js
+%%DATADIR%%/resources/inspector/data_grid/data_grid_module.js
+%%DATADIR%%/resources/inspector/data_grid/data_grid-legacy.js
+%%DATADIR%%/resources/inspector/data_grid/data_grid.js
+%%DATADIR%%/resources/inspector/data_grid/DataGrid.js
+%%DATADIR%%/resources/inspector/data_grid/ShowMoreDataGridNode.js
+%%DATADIR%%/resources/inspector/data_grid/SortableDataGrid.js
+%%DATADIR%%/resources/inspector/data_grid/ViewportDataGrid.js
+%%DATADIR%%/resources/inspector/data_grid_test_runner/data_grid_test_runner_module.js
+%%DATADIR%%/resources/inspector/device_mode_test_runner/device_mode_test_runner_module.js
+%%DATADIR%%/resources/inspector/devices/devices_module.js
+%%DATADIR%%/resources/inspector/devtools_app.html
+%%DATADIR%%/resources/inspector/devtools_app.js
+%%DATADIR%%/resources/inspector/devtools_compatibility.js
+%%DATADIR%%/resources/inspector/devtools_extension_api.js
+%%DATADIR%%/resources/inspector/diff/diff_match_patch.js
+%%DATADIR%%/resources/inspector/diff/diff_module.js
+%%DATADIR%%/resources/inspector/diff/diff-legacy.js
+%%DATADIR%%/resources/inspector/diff/diff.js
+%%DATADIR%%/resources/inspector/diff/DiffWrapper.js
+%%DATADIR%%/resources/inspector/dom_extension/dom_extension.js
+%%DATADIR%%/resources/inspector/dom_extension/DOMExtension.js
+%%DATADIR%%/resources/inspector/elements/elements_module.js
+%%DATADIR%%/resources/inspector/elements/elements-legacy.js
+%%DATADIR%%/resources/inspector/elements/elements.js
+%%DATADIR%%/resources/inspector/elements/ClassesPaneWidget.js
+%%DATADIR%%/resources/inspector/elements/ColorSwatchPopoverIcon.js
+%%DATADIR%%/resources/inspector/elements/ComputedStyleModel.js
+%%DATADIR%%/resources/inspector/elements/ComputedStyleWidget.js
+%%DATADIR%%/resources/inspector/elements/DOMLinkifier.js
+%%DATADIR%%/resources/inspector/elements/DOMPath.js
+%%DATADIR%%/resources/inspector/elements/ElementsBreadcrumbs.js
+%%DATADIR%%/resources/inspector/elements/ElementsPanel.js
+%%DATADIR%%/resources/inspector/elements/ElementsSidebarPane.js
+%%DATADIR%%/resources/inspector/elements/ElementStatePaneWidget.js
+%%DATADIR%%/resources/inspector/elements/ElementsTreeElement.js
+%%DATADIR%%/resources/inspector/elements/ElementsTreeElementHighlighter.js
+%%DATADIR%%/resources/inspector/elements/ElementsTreeOutline.js
+%%DATADIR%%/resources/inspector/elements/EventListenersWidget.js
+%%DATADIR%%/resources/inspector/elements/InspectElementModeController.js
+%%DATADIR%%/resources/inspector/elements/MarkerDecorator.js
+%%DATADIR%%/resources/inspector/elements/MetricsSidebarPane.js
+%%DATADIR%%/resources/inspector/elements/NodeStackTraceWidget.js
+%%DATADIR%%/resources/inspector/elements/PlatformFontsWidget.js
+%%DATADIR%%/resources/inspector/elements/PropertiesWidget.js
+%%DATADIR%%/resources/inspector/elements/StylePropertyHighlighter.js
+%%DATADIR%%/resources/inspector/elements/StylePropertyTreeElement.js
+%%DATADIR%%/resources/inspector/elements/StylesSidebarPane.js
+%%DATADIR%%/resources/inspector/elements_test_runner/elements_test_runner_module.js
+%%DATADIR%%/resources/inspector/emulated_devices/MotoG4-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/MotoG4-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/Nexus5X-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/Nexus5X-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/Nexus6P-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/Nexus6P-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/emulated_devices_module.js
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-default-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-default-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-navigation-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-horizontal-navigation-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-default-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-default-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-keyboard-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-keyboard-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-navigation-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5-vertical-navigation-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-default-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-default-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-default-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-default-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-navigation-1x.png
+%%DATADIR%%/resources/inspector/emulated_devices/google-nexus-5x-vertical-navigation-2x.png
+%%DATADIR%%/resources/inspector/emulated_devices/iPad-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPad-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone5-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone5-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone6-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone6-portrait.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone6Plus-landscape.svg
+%%DATADIR%%/resources/inspector/emulated_devices/iPhone6Plus-portrait.svg
+%%DATADIR%%/resources/inspector/emulation/AdvancedApp.js
+%%DATADIR%%/resources/inspector/emulation/DeviceModeModel.js
+%%DATADIR%%/resources/inspector/emulation/DeviceModeToolbar.js
+%%DATADIR%%/resources/inspector/emulation/DeviceModeView.js
+%%DATADIR%%/resources/inspector/emulation/DeviceModeWrapper.js
+%%DATADIR%%/resources/inspector/emulation/DevicesSettingsTab.js
+%%DATADIR%%/resources/inspector/emulation/EmulatedDevices.js
+%%DATADIR%%/resources/inspector/emulation/emulation-legacy.js
+%%DATADIR%%/resources/inspector/emulation/emulation.js
+%%DATADIR%%/resources/inspector/emulation/GeolocationsSettingsTab.js
+%%DATADIR%%/resources/inspector/emulation/InspectedPagePlaceholder.js
+%%DATADIR%%/resources/inspector/emulation/MediaQueryInspector.js
+%%DATADIR%%/resources/inspector/emulation/SensorsView.js
+%%DATADIR%%/resources/inspector/event_listeners/event_listeners_module.js
+%%DATADIR%%/resources/inspector/event_listeners/event_listeners-legacy.js
+%%DATADIR%%/resources/inspector/event_listeners/event_listeners.js
+%%DATADIR%%/resources/inspector/event_listeners/EventListenersUtils.js
+%%DATADIR%%/resources/inspector/event_listeners/EventListenersView.js
+%%DATADIR%%/resources/inspector/extensions_test_runner/extensions_test_runner_module.js
+%%DATADIR%%/resources/inspector/extensions/ExtensionAPI.js
+%%DATADIR%%/resources/inspector/extensions/ExtensionPanel.js
+%%DATADIR%%/resources/inspector/extensions/extensions-legacy.js
+%%DATADIR%%/resources/inspector/extensions/extensions.js
+%%DATADIR%%/resources/inspector/extensions/ExtensionServer.js
+%%DATADIR%%/resources/inspector/extensions/ExtensionTraceProvider.js
+%%DATADIR%%/resources/inspector/extensions/ExtensionView.js
+%%DATADIR%%/resources/inspector/formatter_worker_entrypoint.js
+%%DATADIR%%/resources/inspector/formatter_worker/acorn/acorn.js
+%%DATADIR%%/resources/inspector/formatter_worker/acorn/acorn_loose.js
+%%DATADIR%%/resources/inspector/formatter_worker/AcornTokenizer.js
+%%DATADIR%%/resources/inspector/formatter_worker/CSSFormatter.js
+%%DATADIR%%/resources/inspector/formatter_worker/CSSRuleParser.js
+%%DATADIR%%/resources/inspector/formatter_worker/ESTreeWalker.js
+%%DATADIR%%/resources/inspector/formatter_worker/FormattedContentBuilder.js
+%%DATADIR%%/resources/inspector/formatter_worker/formatter_worker.js
+%%DATADIR%%/resources/inspector/formatter_worker/formatter_worker-legacy.js
+%%DATADIR%%/resources/inspector/formatter_worker/FormatterWorker.js
+%%DATADIR%%/resources/inspector/formatter_worker/HTMLFormatter.js
+%%DATADIR%%/resources/inspector/formatter_worker/IdentityFormatter.js
+%%DATADIR%%/resources/inspector/formatter_worker/JavaScriptFormatter.js
+%%DATADIR%%/resources/inspector/formatter_worker/JavaScriptOutline.js
+%%DATADIR%%/resources/inspector/formatter_worker/RelaxedJSONParser.js
+%%DATADIR%%/resources/inspector/formatter/formatter_module.js
+%%DATADIR%%/resources/inspector/formatter/formatter-legacy.js
+%%DATADIR%%/resources/inspector/formatter/formatter.js
+%%DATADIR%%/resources/inspector/formatter/FormatterWorkerPool.js
+%%DATADIR%%/resources/inspector/formatter/ScriptFormatter.js
+%%DATADIR%%/resources/inspector/formatter/SourceFormatter.js
+%%DATADIR%%/resources/inspector/har_importer/har_importer_module.js
+%%DATADIR%%/resources/inspector/har_importer/har_importer-legacy.js
+%%DATADIR%%/resources/inspector/har_importer/har_importer.js
+%%DATADIR%%/resources/inspector/har_importer/HARFormat.js
+%%DATADIR%%/resources/inspector/har_importer/HARImporter.js
+%%DATADIR%%/resources/inspector/heap_profiler_test_runner/heap_profiler_test_runner_module.js
+%%DATADIR%%/resources/inspector/heap_snapshot_model/heap_snapshot_model_module.js
+%%DATADIR%%/resources/inspector/heap_snapshot_model/heap_snapshot_model-legacy.js
+%%DATADIR%%/resources/inspector/heap_snapshot_model/heap_snapshot_model.js
+%%DATADIR%%/resources/inspector/heap_snapshot_model/HeapSnapshotModel.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker_entrypoint.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/AllocationProfile.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/heap_snapshot_worker_module.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/heap_snapshot_worker-legacy.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/heap_snapshot_worker.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/HeapSnapshot.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/HeapSnapshotLoader.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/HeapSnapshotWorker.js
+%%DATADIR%%/resources/inspector/heap_snapshot_worker/HeapSnapshotWorkerDispatcher.js
+%%DATADIR%%/resources/inspector/help/help_module.js
+%%DATADIR%%/resources/inspector/help/help-legacy.js
+%%DATADIR%%/resources/inspector/help/help.js
+%%DATADIR%%/resources/inspector/help/HelpImpl.js
+%%DATADIR%%/resources/inspector/help/ReleaseNoteText.js
+%%DATADIR%%/resources/inspector/help/ReleaseNoteView.js
+%%DATADIR%%/resources/inspector/host/host.js
+%%DATADIR%%/resources/inspector/host/host-legacy.js
+%%DATADIR%%/resources/inspector/host/InspectorFrontendHost.js
+%%DATADIR%%/resources/inspector/host/InspectorFrontendHostAPI.js
+%%DATADIR%%/resources/inspector/host/Platform.js
+%%DATADIR%%/resources/inspector/host/ResourceLoader.js
+%%DATADIR%%/resources/inspector/host/UserMetrics.js
+%%DATADIR%%/resources/inspector/inline_editor/BezierEditor.js
+%%DATADIR%%/resources/inspector/inline_editor/BezierUI.js
+%%DATADIR%%/resources/inspector/inline_editor/ColorSwatch.js
+%%DATADIR%%/resources/inspector/inline_editor/CSSShadowEditor.js
+%%DATADIR%%/resources/inspector/inline_editor/CSSShadowModel.js
+%%DATADIR%%/resources/inspector/inline_editor/inline_editor_module.js
+%%DATADIR%%/resources/inspector/inline_editor/inline_editor-legacy.js
+%%DATADIR%%/resources/inspector/inline_editor/inline_editor.js
+%%DATADIR%%/resources/inspector/inline_editor/SwatchPopoverHelper.js
+%%DATADIR%%/resources/inspector/input/input_module.js
+%%DATADIR%%/resources/inspector/input/input-legacy.js
+%%DATADIR%%/resources/inspector/input/input.js
+%%DATADIR%%/resources/inspector/input/InputModel.js
+%%DATADIR%%/resources/inspector/input/InputTimeline.js
+%%DATADIR%%/resources/inspector/inspector_main/inspector_main.js
+%%DATADIR%%/resources/inspector/inspector_main/inspector_main-legacy.js
+%%DATADIR%%/resources/inspector/inspector_main/InspectorMain.js
+%%DATADIR%%/resources/inspector/inspector_main/RenderingOptions.js
+%%DATADIR%%/resources/inspector/inspector.html
+%%DATADIR%%/resources/inspector/inspector.js
+%%DATADIR%%/resources/inspector/integration_test_runner.html
+%%DATADIR%%/resources/inspector/integration_test_runner.js
+%%DATADIR%%/resources/inspector/javascript_metadata/javascript_metadata_module.js
+%%DATADIR%%/resources/inspector/javascript_metadata/javascript_metadata-legacy.js
+%%DATADIR%%/resources/inspector/javascript_metadata/javascript_metadata.js
+%%DATADIR%%/resources/inspector/javascript_metadata/JavaScriptMetadata.js
+%%DATADIR%%/resources/inspector/javascript_metadata/NativeFunctions.js
+%%DATADIR%%/resources/inspector/js_app.html
+%%DATADIR%%/resources/inspector/js_app.js
+%%DATADIR%%/resources/inspector/js_main/js_main.js
+%%DATADIR%%/resources/inspector/js_main/js_main-legacy.js
+%%DATADIR%%/resources/inspector/js_main/JsMain.js
+%%DATADIR%%/resources/inspector/js_profiler/js_profiler_module.js
+%%DATADIR%%/resources/inspector/layer_viewer/layer_viewer_module.js
+%%DATADIR%%/resources/inspector/layer_viewer/layer_viewer-legacy.js
+%%DATADIR%%/resources/inspector/layer_viewer/layer_viewer.js
+%%DATADIR%%/resources/inspector/layer_viewer/LayerDetailsView.js
+%%DATADIR%%/resources/inspector/layer_viewer/Layers3DView.js
+%%DATADIR%%/resources/inspector/layer_viewer/LayerTreeOutline.js
+%%DATADIR%%/resources/inspector/layer_viewer/LayerViewHost.js
+%%DATADIR%%/resources/inspector/layer_viewer/PaintProfilerView.js
+%%DATADIR%%/resources/inspector/layer_viewer/TransformController.js
+%%DATADIR%%/resources/inspector/layers/layers_module.js
+%%DATADIR%%/resources/inspector/layers/layers-legacy.js
+%%DATADIR%%/resources/inspector/layers/layers.js
+%%DATADIR%%/resources/inspector/layers/LayerPaintProfilerView.js
+%%DATADIR%%/resources/inspector/layers/LayersPanel.js
+%%DATADIR%%/resources/inspector/layers/LayerTreeModel.js
+%%DATADIR%%/resources/inspector/layers_test_runner/layers_test_runner_module.js
+%%DATADIR%%/resources/inspector/main/ExecutionContextSelector.js
+%%DATADIR%%/resources/inspector/main/main-legacy.js
+%%DATADIR%%/resources/inspector/main/main.js
+%%DATADIR%%/resources/inspector/main/MainImpl.js
+%%DATADIR%%/resources/inspector/main/SimpleApp.js
+%%DATADIR%%/resources/inspector/media/media_module.js
+%%DATADIR%%/resources/inspector/mobile_throttling/mobile_throttling.js
+%%DATADIR%%/resources/inspector/mobile_throttling/mobile_throttling-legacy.js
+%%DATADIR%%/resources/inspector/mobile_throttling/MobileThrottlingSelector.js
+%%DATADIR%%/resources/inspector/mobile_throttling/NetworkPanelIndicator.js
+%%DATADIR%%/resources/inspector/mobile_throttling/NetworkThrottlingSelector.js
+%%DATADIR%%/resources/inspector/mobile_throttling/ThrottlingManager.js
+%%DATADIR%%/resources/inspector/mobile_throttling/ThrottlingPresets.js
+%%DATADIR%%/resources/inspector/mobile_throttling/ThrottlingSettingsTab.js
+%%DATADIR%%/resources/inspector/ndb_app.html
+%%DATADIR%%/resources/inspector/ndb_app.js
+%%DATADIR%%/resources/inspector/network/network_module.js
+%%DATADIR%%/resources/inspector/network/network-legacy.js
+%%DATADIR%%/resources/inspector/network/network.js
+%%DATADIR%%/resources/inspector/network/BinaryResourceView.js
+%%DATADIR%%/resources/inspector/network/BlockedURLsPane.js
+%%DATADIR%%/resources/inspector/network/EventSourceMessagesView.js
+%%DATADIR%%/resources/inspector/network/HARWriter.js
+%%DATADIR%%/resources/inspector/network/NetworkConfigView.js
+%%DATADIR%%/resources/inspector/network/NetworkDataGridNode.js
+%%DATADIR%%/resources/inspector/network/NetworkFrameGrouper.js
+%%DATADIR%%/resources/inspector/network/NetworkItemView.js
+%%DATADIR%%/resources/inspector/network/NetworkLogView.js
+%%DATADIR%%/resources/inspector/network/NetworkLogViewColumns.js
+%%DATADIR%%/resources/inspector/network/NetworkManageCustomHeadersView.js
+%%DATADIR%%/resources/inspector/network/NetworkOverview.js
+%%DATADIR%%/resources/inspector/network/NetworkPanel.js
+%%DATADIR%%/resources/inspector/network/NetworkSearchScope.js
+%%DATADIR%%/resources/inspector/network/NetworkTimeCalculator.js
+%%DATADIR%%/resources/inspector/network/NetworkWaterfallColumn.js
+%%DATADIR%%/resources/inspector/network/RequestCookiesView.js
+%%DATADIR%%/resources/inspector/network/RequestHeadersView.js
+%%DATADIR%%/resources/inspector/network/RequestHTMLView.js
+%%DATADIR%%/resources/inspector/network/RequestInitiatorView.js
+%%DATADIR%%/resources/inspector/network/RequestPreviewView.js
+%%DATADIR%%/resources/inspector/network/RequestResponseView.js
+%%DATADIR%%/resources/inspector/network/RequestTimingView.js
+%%DATADIR%%/resources/inspector/network/ResourceWebSocketFrameView.js
+%%DATADIR%%/resources/inspector/network/SignedExchangeInfoView.js
+%%DATADIR%%/resources/inspector/network_test_runner/network_test_runner_module.js
+%%DATADIR%%/resources/inspector/node_app.html
+%%DATADIR%%/resources/inspector/node_app.js
+%%DATADIR%%/resources/inspector/node_debugger/node_debugger_module.js
+%%DATADIR%%/resources/inspector/node_main/node_main-legacy.js
+%%DATADIR%%/resources/inspector/node_main/node_main.js
+%%DATADIR%%/resources/inspector/node_main/NodeConnectionsPanel.js
+%%DATADIR%%/resources/inspector/node_main/NodeMain.js
+%%DATADIR%%/resources/inspector/object_ui/object_ui_module.js
+%%DATADIR%%/resources/inspector/object_ui/object_ui-legacy.js
+%%DATADIR%%/resources/inspector/object_ui/object_ui.js
+%%DATADIR%%/resources/inspector/object_ui/CustomPreviewComponent.js
+%%DATADIR%%/resources/inspector/object_ui/JavaScriptAutocomplete.js
+%%DATADIR%%/resources/inspector/object_ui/ObjectPopoverHelper.js
+%%DATADIR%%/resources/inspector/object_ui/ObjectPropertiesSection.js
+%%DATADIR%%/resources/inspector/object_ui/RemoteObjectPreviewFormatter.js
+%%DATADIR%%/resources/inspector/object_ui/JavaScriptREPL.js
+%%DATADIR%%/resources/inspector/perf_ui/perf_ui_module.js
+%%DATADIR%%/resources/inspector/perf_ui/perf_ui-legacy.js
+%%DATADIR%%/resources/inspector/perf_ui/perf_ui.js
+%%DATADIR%%/resources/inspector/perf_ui/ChartViewport.js
+%%DATADIR%%/resources/inspector/perf_ui/FilmStripView.js
+%%DATADIR%%/resources/inspector/perf_ui/FlameChart.js
+%%DATADIR%%/resources/inspector/perf_ui/GCActionDelegate.js
+%%DATADIR%%/resources/inspector/perf_ui/LineLevelProfile.js
+%%DATADIR%%/resources/inspector/perf_ui/LiveHeapProfile.js
+%%DATADIR%%/resources/inspector/perf_ui/NetworkPriorities.js
+%%DATADIR%%/resources/inspector/perf_ui/OverviewGrid.js
+%%DATADIR%%/resources/inspector/perf_ui/PieChart.js
+%%DATADIR%%/resources/inspector/perf_ui/TimelineGrid.js
+%%DATADIR%%/resources/inspector/perf_ui/TimelineOverviewPane.js
+%%DATADIR%%/resources/inspector/performance_monitor/performance_monitor_module.js
+%%DATADIR%%/resources/inspector/performance_monitor/performance_monitor-legacy.js
+%%DATADIR%%/resources/inspector/performance_monitor/performance_monitor.js
+%%DATADIR%%/resources/inspector/performance_monitor/PerformanceMonitor.js
+%%DATADIR%%/resources/inspector/performance_test_runner/performance_test_runner_module.js
+%%DATADIR%%/resources/inspector/persistence/Automapping.js
+%%DATADIR%%/resources/inspector/persistence/EditFileSystemView.js
+%%DATADIR%%/resources/inspector/persistence/FileSystemWorkspaceBinding.js
+%%DATADIR%%/resources/inspector/persistence/IsolatedFileSystem.js
+%%DATADIR%%/resources/inspector/persistence/IsolatedFileSystemManager.js
+%%DATADIR%%/resources/inspector/persistence/NetworkPersistenceManager.js
+%%DATADIR%%/resources/inspector/persistence/persistence.js
+%%DATADIR%%/resources/inspector/persistence/persistence-legacy.js
+%%DATADIR%%/resources/inspector/persistence/PersistenceActions.js
+%%DATADIR%%/resources/inspector/persistence/PersistenceImpl.js
+%%DATADIR%%/resources/inspector/persistence/PersistenceUtils.js
+%%DATADIR%%/resources/inspector/persistence/PlatformFileSystem.js
+%%DATADIR%%/resources/inspector/persistence/WorkspaceSettingsTab.js
+%%DATADIR%%/resources/inspector/platform/platform.js
+%%DATADIR%%/resources/inspector/platform/utilities.js
+%%DATADIR%%/resources/inspector/profiler/profiler_module.js
+%%DATADIR%%/resources/inspector/profiler/profiler-legacy.js
+%%DATADIR%%/resources/inspector/profiler/profiler.js
+%%DATADIR%%/resources/inspector/profiler/BottomUpProfileDataGrid.js
+%%DATADIR%%/resources/inspector/profiler/ChildrenProvider.js
+%%DATADIR%%/resources/inspector/profiler/CPUProfileFlameChart.js
+%%DATADIR%%/resources/inspector/profiler/CPUProfileView.js
+%%DATADIR%%/resources/inspector/profiler/HeapProfilerPanel.js
+%%DATADIR%%/resources/inspector/profiler/HeapProfileView.js
+%%DATADIR%%/resources/inspector/profiler/HeapSnapshotDataGrids.js
+%%DATADIR%%/resources/inspector/profiler/HeapSnapshotGridNodes.js
+%%DATADIR%%/resources/inspector/profiler/HeapSnapshotProxy.js
+%%DATADIR%%/resources/inspector/profiler/HeapSnapshotView.js
+%%DATADIR%%/resources/inspector/profiler/HeapTimelineOverview.js
+%%DATADIR%%/resources/inspector/profiler/IsolateSelector.js
+%%DATADIR%%/resources/inspector/profiler/LiveHeapProfileView.js
+%%DATADIR%%/resources/inspector/profiler/ProfileDataGrid.js
+%%DATADIR%%/resources/inspector/profiler/ProfileHeader.js
+%%DATADIR%%/resources/inspector/profiler/ProfileLauncherView.js
+%%DATADIR%%/resources/inspector/profiler/ProfileSidebarTreeElement.js
+%%DATADIR%%/resources/inspector/profiler/ProfilesPanel.js
+%%DATADIR%%/resources/inspector/profiler/ProfileTypeRegistry.js
+%%DATADIR%%/resources/inspector/profiler/ProfileView.js
+%%DATADIR%%/resources/inspector/profiler/TopDownProfileDataGrid.js
+%%DATADIR%%/resources/inspector/protocol_monitor/protocol_monitor_module.js
+%%DATADIR%%/resources/inspector/protocol_monitor/protocol_monitor-legacy.js
+%%DATADIR%%/resources/inspector/protocol_monitor/protocol_monitor.js
+%%DATADIR%%/resources/inspector/protocol_monitor/ProtocolMonitor.js
+%%DATADIR%%/resources/inspector/protocol/InspectorBackend.js
+%%DATADIR%%/resources/inspector/protocol/NodeURL.js
+%%DATADIR%%/resources/inspector/protocol/protocol.js
+%%DATADIR%%/resources/inspector/protocol/protocol-legacy.js
+%%DATADIR%%/resources/inspector/quick_open/quick_open_module.js
+%%DATADIR%%/resources/inspector/quick_open/quick_open-legacy.js
+%%DATADIR%%/resources/inspector/quick_open/quick_open.js
+%%DATADIR%%/resources/inspector/quick_open/CommandMenu.js
+%%DATADIR%%/resources/inspector/quick_open/FilteredListWidget.js
+%%DATADIR%%/resources/inspector/quick_open/HelpQuickOpen.js
+%%DATADIR%%/resources/inspector/quick_open/QuickOpen.js
+%%DATADIR%%/resources/inspector/resources/resources_module.js
+%%DATADIR%%/resources/inspector/resources/resources-legacy.js
+%%DATADIR%%/resources/inspector/resources/resources.js
+%%DATADIR%%/resources/inspector/resources/ApplicationCacheItemsView.js
+%%DATADIR%%/resources/inspector/resources/ApplicationCacheModel.js
+%%DATADIR%%/resources/inspector/resources/ApplicationPanelSidebar.js
+%%DATADIR%%/resources/inspector/resources/AppManifestView.js
+%%DATADIR%%/resources/inspector/resources/BackgroundServiceModel.js
+%%DATADIR%%/resources/inspector/resources/BackgroundServiceView.js
+%%DATADIR%%/resources/inspector/resources/ClearStorageView.js
+%%DATADIR%%/resources/inspector/resources/CookieItemsView.js
+%%DATADIR%%/resources/inspector/resources/DatabaseModel.js
+%%DATADIR%%/resources/inspector/resources/DatabaseQueryView.js
+%%DATADIR%%/resources/inspector/resources/DatabaseTableView.js
+%%DATADIR%%/resources/inspector/resources/DOMStorageItemsView.js
+%%DATADIR%%/resources/inspector/resources/DOMStorageModel.js
+%%DATADIR%%/resources/inspector/resources/IndexedDBModel.js
+%%DATADIR%%/resources/inspector/resources/IndexedDBViews.js
+%%DATADIR%%/resources/inspector/resources/ResourcesPanel.js
+%%DATADIR%%/resources/inspector/resources/ServiceWorkerCacheViews.js
+%%DATADIR%%/resources/inspector/resources/ServiceWorkersView.js
+%%DATADIR%%/resources/inspector/resources/StorageItemsView.js
+%%DATADIR%%/resources/inspector/root.js
+%%DATADIR%%/resources/inspector/Runtime.js
+%%DATADIR%%/resources/inspector/screencast/InputModel.js
+%%DATADIR%%/resources/inspector/screencast/screencast.js
+%%DATADIR%%/resources/inspector/screencast/screencast-legacy.js
+%%DATADIR%%/resources/inspector/screencast/ScreencastApp.js
+%%DATADIR%%/resources/inspector/screencast/ScreencastView.js
+%%DATADIR%%/resources/inspector/sdk_test_runner/sdk_test_runner_module.js
+%%DATADIR%%/resources/inspector/sdk/ChildTargetManager.js
+%%DATADIR%%/resources/inspector/sdk/CompilerSourceMappingContentProvider.js
+%%DATADIR%%/resources/inspector/sdk/Connections.js
+%%DATADIR%%/resources/inspector/sdk/ConsoleModel.js
+%%DATADIR%%/resources/inspector/sdk/Cookie.js
+%%DATADIR%%/resources/inspector/sdk/CookieModel.js
+%%DATADIR%%/resources/inspector/sdk/CookieParser.js
+%%DATADIR%%/resources/inspector/sdk/CPUProfileDataModel.js
+%%DATADIR%%/resources/inspector/sdk/CPUProfilerModel.js
+%%DATADIR%%/resources/inspector/sdk/CSSMatchedStyles.js
+%%DATADIR%%/resources/inspector/sdk/CSSMedia.js
+%%DATADIR%%/resources/inspector/sdk/CSSMetadata.js
+%%DATADIR%%/resources/inspector/sdk/CSSModel.js
+%%DATADIR%%/resources/inspector/sdk/CSSProperty.js
+%%DATADIR%%/resources/inspector/sdk/CSSRule.js
+%%DATADIR%%/resources/inspector/sdk/CSSStyleDeclaration.js
+%%DATADIR%%/resources/inspector/sdk/CSSStyleSheetHeader.js
+%%DATADIR%%/resources/inspector/sdk/DebuggerModel.js
+%%DATADIR%%/resources/inspector/sdk/DOMDebuggerModel.js
+%%DATADIR%%/resources/inspector/sdk/DOMModel.js
+%%DATADIR%%/resources/inspector/sdk/EmulationModel.js
+%%DATADIR%%/resources/inspector/sdk/FilmStripModel.js
+%%DATADIR%%/resources/inspector/sdk/HARLog.js
+%%DATADIR%%/resources/inspector/sdk/HeapProfilerModel.js
+%%DATADIR%%/resources/inspector/sdk/IsolateManager.js
+%%DATADIR%%/resources/inspector/sdk/IssuesModel.js
+%%DATADIR%%/resources/inspector/sdk/LayerTreeBase.js
+%%DATADIR%%/resources/inspector/sdk/LogModel.js
+%%DATADIR%%/resources/inspector/sdk/NetworkLog.js
+%%DATADIR%%/resources/inspector/sdk/NetworkManager.js
+%%DATADIR%%/resources/inspector/sdk/NetworkRequest.js
+%%DATADIR%%/resources/inspector/sdk/OverlayModel.js
+%%DATADIR%%/resources/inspector/sdk/PaintProfiler.js
+%%DATADIR%%/resources/inspector/sdk/PerformanceMetricsModel.js
+%%DATADIR%%/resources/inspector/sdk/ProfileTreeModel.js
+%%DATADIR%%/resources/inspector/sdk/RemoteObject.js
+%%DATADIR%%/resources/inspector/sdk/Resource.js
+%%DATADIR%%/resources/inspector/sdk/ResourceTreeModel.js
+%%DATADIR%%/resources/inspector/sdk/RuntimeModel.js
+%%DATADIR%%/resources/inspector/sdk/ScreenCaptureModel.js
+%%DATADIR%%/resources/inspector/sdk/Script.js
+%%DATADIR%%/resources/inspector/sdk/sdk.js
+%%DATADIR%%/resources/inspector/sdk/sdk-legacy.js
+%%DATADIR%%/resources/inspector/sdk/SDKModel.js
+%%DATADIR%%/resources/inspector/sdk/SecurityOriginManager.js
+%%DATADIR%%/resources/inspector/sdk/ServerTiming.js
+%%DATADIR%%/resources/inspector/sdk/ServiceWorkerCacheModel.js
+%%DATADIR%%/resources/inspector/sdk/ServiceWorkerManager.js
+%%DATADIR%%/resources/inspector/sdk/SourceMap.js
+%%DATADIR%%/resources/inspector/sdk/SourceMapManager.js
+%%DATADIR%%/resources/inspector/sdk/TracingManager.js
+%%DATADIR%%/resources/inspector/sdk/TracingModel.js
+%%DATADIR%%/resources/inspector/sdk/wasm_source_map/pkg/wasm_source_map_bg.wasm
+%%DATADIR%%/resources/inspector/sdk/wasm_source_map/pkg/wasm_source_map.js
+%%DATADIR%%/resources/inspector/search/search_module.js
+%%DATADIR%%/resources/inspector/search/search-legacy.js
+%%DATADIR%%/resources/inspector/search/search.js
+%%DATADIR%%/resources/inspector/search/SearchConfig.js
+%%DATADIR%%/resources/inspector/search/SearchResultsPane.js
+%%DATADIR%%/resources/inspector/search/SearchView.js
+%%DATADIR%%/resources/inspector/security/security_module.js
+%%DATADIR%%/resources/inspector/security/security-legacy.js
+%%DATADIR%%/resources/inspector/security/security.js
+%%DATADIR%%/resources/inspector/security/SecurityModel.js
+%%DATADIR%%/resources/inspector/security/SecurityPanel.js
+%%DATADIR%%/resources/inspector/security_test_runner/security_test_runner_module.js
+%%DATADIR%%/resources/inspector/services/ServiceManager.js
+%%DATADIR%%/resources/inspector/services/services.js
+%%DATADIR%%/resources/inspector/services/services-legacy.js
+%%DATADIR%%/resources/inspector/settings/settings_module.js
+%%DATADIR%%/resources/inspector/settings/settings-legacy.js
+%%DATADIR%%/resources/inspector/settings/settings.js
+%%DATADIR%%/resources/inspector/settings/FrameworkBlackboxSettingsTab.js
+%%DATADIR%%/resources/inspector/settings/SettingsScreen.js
+%%DATADIR%%/resources/inspector/shell.js
+%%DATADIR%%/resources/inspector/snippets/snippets_module.js
+%%DATADIR%%/resources/inspector/snippets/snippets-legacy.js
+%%DATADIR%%/resources/inspector/snippets/snippets.js
+%%DATADIR%%/resources/inspector/snippets/ScriptSnippetFileSystem.js
+%%DATADIR%%/resources/inspector/snippets/SnippetsQuickOpen.js
+%%DATADIR%%/resources/inspector/source_frame/source_frame_module.js
+%%DATADIR%%/resources/inspector/source_frame/source_frame-legacy.js
+%%DATADIR%%/resources/inspector/source_frame/source_frame.js
+%%DATADIR%%/resources/inspector/source_frame/BinaryResourceViewFactory.js
+%%DATADIR%%/resources/inspector/source_frame/FontView.js
+%%DATADIR%%/resources/inspector/source_frame/ImageView.js
+%%DATADIR%%/resources/inspector/source_frame/JSONView.js
+%%DATADIR%%/resources/inspector/source_frame/PreviewFactory.js
+%%DATADIR%%/resources/inspector/source_frame/ResourceSourceFrame.js
+%%DATADIR%%/resources/inspector/source_frame/SourceCodeDiff.js
+%%DATADIR%%/resources/inspector/source_frame/SourceFrame.js
+%%DATADIR%%/resources/inspector/source_frame/SourcesTextEditor.js
+%%DATADIR%%/resources/inspector/source_frame/XMLView.js
+%%DATADIR%%/resources/inspector/sources/sources_module.js
+%%DATADIR%%/resources/inspector/sources/sources-legacy.js
+%%DATADIR%%/resources/inspector/sources/sources.js
+%%DATADIR%%/resources/inspector/sources/AddSourceMapURLDialog.js
+%%DATADIR%%/resources/inspector/sources/BreakpointEditDialog.js
+%%DATADIR%%/resources/inspector/sources/CallStackSidebarPane.js
+%%DATADIR%%/resources/inspector/sources/CoveragePlugin.js
+%%DATADIR%%/resources/inspector/sources/CSSPlugin.js
+%%DATADIR%%/resources/inspector/sources/DebuggerPausedMessage.js
+%%DATADIR%%/resources/inspector/sources/DebuggerPlugin.js
+%%DATADIR%%/resources/inspector/sources/EditingLocationHistoryManager.js
+%%DATADIR%%/resources/inspector/sources/FilePathScoreFunction.js
+%%DATADIR%%/resources/inspector/sources/FilteredUISourceCodeListProvider.js
+%%DATADIR%%/resources/inspector/sources/GoToLineQuickOpen.js
+%%DATADIR%%/resources/inspector/sources/GutterDiffPlugin.js
+%%DATADIR%%/resources/inspector/sources/InplaceFormatterEditorAction.js
+%%DATADIR%%/resources/inspector/sources/JavaScriptBreakpointsSidebarPane.js
+%%DATADIR%%/resources/inspector/sources/JavaScriptCompilerPlugin.js
+%%DATADIR%%/resources/inspector/sources/NavigatorView.js
+%%DATADIR%%/resources/inspector/sources/OpenFileQuickOpen.js
+%%DATADIR%%/resources/inspector/sources/OutlineQuickOpen.js
+%%DATADIR%%/resources/inspector/sources/Plugin.js
+%%DATADIR%%/resources/inspector/sources/ScopeChainSidebarPane.js
+%%DATADIR%%/resources/inspector/sources/ScriptFormatterEditorAction.js
+%%DATADIR%%/resources/inspector/sources/ScriptOriginPlugin.js
+%%DATADIR%%/resources/inspector/sources/SearchSourcesView.js
+%%DATADIR%%/resources/inspector/sources/SimpleHistoryManager.js
+%%DATADIR%%/resources/inspector/sources/SnippetsPlugin.js
+%%DATADIR%%/resources/inspector/sources/SourceMapNamesResolver.js
+%%DATADIR%%/resources/inspector/sources/SourcesNavigator.js
+%%DATADIR%%/resources/inspector/sources/SourcesPanel.js
+%%DATADIR%%/resources/inspector/sources/SourcesSearchScope.js
+%%DATADIR%%/resources/inspector/sources/SourcesView.js
+%%DATADIR%%/resources/inspector/sources/TabbedEditorContainer.js
+%%DATADIR%%/resources/inspector/sources/ThreadsSidebarPane.js
+%%DATADIR%%/resources/inspector/sources/UISourceCodeFrame.js
+%%DATADIR%%/resources/inspector/sources/WatchExpressionsSidebarPane.js
+%%DATADIR%%/resources/inspector/sources_test_runner/sources_test_runner_module.js
+%%DATADIR%%/resources/inspector/test_runner/test_runner.js
+%%DATADIR%%/resources/inspector/test_runner/TestRunner.js
+%%DATADIR%%/resources/inspector/text_editor/text_editor_module.js
+%%DATADIR%%/resources/inspector/text_editor/CodeMirrorTextEditor.js
+%%DATADIR%%/resources/inspector/text_editor/CodeMirrorUtils.js
+%%DATADIR%%/resources/inspector/text_editor/text_editor.js
+%%DATADIR%%/resources/inspector/text_editor/text_editor-legacy.js
+%%DATADIR%%/resources/inspector/text_editor/TextEditorAutocompleteController.js
+%%DATADIR%%/resources/inspector/text_utils/text_utils.js
+%%DATADIR%%/resources/inspector/text_utils/text_utils-legacy.js
+%%DATADIR%%/resources/inspector/text_utils/Text.js
+%%DATADIR%%/resources/inspector/text_utils/TextCursor.js
+%%DATADIR%%/resources/inspector/text_utils/TextRange.js
+%%DATADIR%%/resources/inspector/text_utils/TextUtils.js
+%%DATADIR%%/resources/inspector/third_party/wasmparser/WasmDis.js
+%%DATADIR%%/resources/inspector/third_party/wasmparser/WasmParser.js
+%%DATADIR%%/resources/inspector/timeline_model/timeline_model_module.js
+%%DATADIR%%/resources/inspector/timeline_model/timeline_model-legacy.js
+%%DATADIR%%/resources/inspector/timeline_model/timeline_model.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineFrameModel.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineIRModel.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineJSProfile.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineModel.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineModelFilter.js
+%%DATADIR%%/resources/inspector/timeline_model/TimelineProfileTree.js
+%%DATADIR%%/resources/inspector/timeline_model/TracingLayerTree.js
+%%DATADIR%%/resources/inspector/timeline/timeline_module.js
+%%DATADIR%%/resources/inspector/timeline/timeline-legacy.js
+%%DATADIR%%/resources/inspector/timeline/timeline.js
+%%DATADIR%%/resources/inspector/timeline/CountersGraph.js
+%%DATADIR%%/resources/inspector/timeline/EventsTimelineTreeView.js
+%%DATADIR%%/resources/inspector/timeline/ExtensionTracingSession.js
+%%DATADIR%%/resources/inspector/timeline/PerformanceModel.js
+%%DATADIR%%/resources/inspector/timeline/TimelineController.js
+%%DATADIR%%/resources/inspector/timeline/TimelineDetailsView.js
+%%DATADIR%%/resources/inspector/timeline/TimelineEventOverview.js
+%%DATADIR%%/resources/inspector/timeline/TimelineFilters.js
+%%DATADIR%%/resources/inspector/timeline/TimelineFlameChartDataProvider.js
+%%DATADIR%%/resources/inspector/timeline/TimelineFlameChartNetworkDataProvider.js
+%%DATADIR%%/resources/inspector/timeline/TimelineFlameChartView.js
+%%DATADIR%%/resources/inspector/timeline/TimelineHistoryManager.js
+%%DATADIR%%/resources/inspector/timeline/TimelineLayersView.js
+%%DATADIR%%/resources/inspector/timeline/TimelineLoader.js
+%%DATADIR%%/resources/inspector/timeline/TimelinePaintProfilerView.js
+%%DATADIR%%/resources/inspector/timeline/TimelinePanel.js
+%%DATADIR%%/resources/inspector/timeline/TimelineTreeView.js
+%%DATADIR%%/resources/inspector/timeline/TimelineUIUtils.js
+%%DATADIR%%/resources/inspector/timeline/UIDevtoolsController.js
+%%DATADIR%%/resources/inspector/timeline/UIDevtoolsUtils.js
+%%DATADIR%%/resources/inspector/toolbox_bootstrap/toolbox_bootstrap.js
+%%DATADIR%%/resources/inspector/toolbox.html
+%%DATADIR%%/resources/inspector/toolbox.js
+%%DATADIR%%/resources/inspector/ui/Action.js
+%%DATADIR%%/resources/inspector/ui/ActionDelegate.js
+%%DATADIR%%/resources/inspector/ui/ActionRegistry.js
+%%DATADIR%%/resources/inspector/ui/ARIAUtils.js
+%%DATADIR%%/resources/inspector/ui/Context.js
+%%DATADIR%%/resources/inspector/ui/ContextFlavorListener.js
+%%DATADIR%%/resources/inspector/ui/ContextMenu.js
+%%DATADIR%%/resources/inspector/ui/Dialog.js
+%%DATADIR%%/resources/inspector/ui/DropTarget.js
+%%DATADIR%%/resources/inspector/ui/EmptyWidget.js
+%%DATADIR%%/resources/inspector/ui/FilterBar.js
+%%DATADIR%%/resources/inspector/ui/FilterSuggestionBuilder.js
+%%DATADIR%%/resources/inspector/ui/ForwardedInputEventHandler.js
+%%DATADIR%%/resources/inspector/ui/Fragment.js
+%%DATADIR%%/resources/inspector/ui/Geometry.js
+%%DATADIR%%/resources/inspector/ui/GlassPane.js
+%%DATADIR%%/resources/inspector/ui/HistoryInput.js
+%%DATADIR%%/resources/inspector/ui/Icon.js
+%%DATADIR%%/resources/inspector/ui/Infobar.js
+%%DATADIR%%/resources/inspector/ui/InplaceEditor.js
+%%DATADIR%%/resources/inspector/ui/InspectorView.js
+%%DATADIR%%/resources/inspector/ui/KeyboardShortcut.js
+%%DATADIR%%/resources/inspector/ui/ListControl.js
+%%DATADIR%%/resources/inspector/ui/ListModel.js
+%%DATADIR%%/resources/inspector/ui/ListWidget.js
+%%DATADIR%%/resources/inspector/ui/Panel.js
+%%DATADIR%%/resources/inspector/ui/PopoverHelper.js
+%%DATADIR%%/resources/inspector/ui/ProgressIndicator.js
+%%DATADIR%%/resources/inspector/ui/RemoteDebuggingTerminatedScreen.js
+%%DATADIR%%/resources/inspector/ui/ReportView.js
+%%DATADIR%%/resources/inspector/ui/ResizerWidget.js
+%%DATADIR%%/resources/inspector/ui/RootView.js
+%%DATADIR%%/resources/inspector/ui/SearchableView.js
+%%DATADIR%%/resources/inspector/ui/SegmentedButton.js
+%%DATADIR%%/resources/inspector/ui/SettingsUI.js
+%%DATADIR%%/resources/inspector/ui/ShortcutRegistry.js
+%%DATADIR%%/resources/inspector/ui/ShortcutsScreen.js
+%%DATADIR%%/resources/inspector/ui/SoftContextMenu.js
+%%DATADIR%%/resources/inspector/ui/SoftDropDown.js
+%%DATADIR%%/resources/inspector/ui/SplitWidget.js
+%%DATADIR%%/resources/inspector/ui/SuggestBox.js
+%%DATADIR%%/resources/inspector/ui/SyntaxHighlighter.js
+%%DATADIR%%/resources/inspector/ui/TabbedPane.js
+%%DATADIR%%/resources/inspector/ui/TargetCrashedScreen.js
+%%DATADIR%%/resources/inspector/ui/TextEditor.js
+%%DATADIR%%/resources/inspector/ui/TextPrompt.js
+%%DATADIR%%/resources/inspector/ui/ThrottledWidget.js
+%%DATADIR%%/resources/inspector/ui/Toolbar.js
+%%DATADIR%%/resources/inspector/ui/Tooltip.js
+%%DATADIR%%/resources/inspector/ui/Treeoutline.js
+%%DATADIR%%/resources/inspector/ui/ui.js
+%%DATADIR%%/resources/inspector/ui/ui-legacy.js
+%%DATADIR%%/resources/inspector/ui/UIUtils.js
+%%DATADIR%%/resources/inspector/ui/View.js
+%%DATADIR%%/resources/inspector/ui/ViewManager.js
+%%DATADIR%%/resources/inspector/ui/Widget.js
+%%DATADIR%%/resources/inspector/ui/XElement.js
+%%DATADIR%%/resources/inspector/ui/XLink.js
+%%DATADIR%%/resources/inspector/ui/XWidget.js
+%%DATADIR%%/resources/inspector/ui/ZoomManager.js
+%%DATADIR%%/resources/inspector/ui/utils/append-style.js
+%%DATADIR%%/resources/inspector/ui/utils/create-shadow-root-with-core-styles.js
+%%DATADIR%%/resources/inspector/ui/utils/focus-changed.js
+%%DATADIR%%/resources/inspector/ui/utils/inject-core-styles.js
+%%DATADIR%%/resources/inspector/ui/utils/measured-scrollbar-width.js
+%%DATADIR%%/resources/inspector/ui/utils/register-custom-element.js
+%%DATADIR%%/resources/inspector/ui/utils/utils.js
+%%DATADIR%%/resources/inspector/wasmparser_worker_entrypoint.js
+%%DATADIR%%/resources/inspector/wasmparser_worker/wasmparser_worker.js
+%%DATADIR%%/resources/inspector/wasmparser_worker/WasmParserWorker.js
+%%DATADIR%%/resources/inspector/web_audio/web_audio_module.js
+%%DATADIR%%/resources/inspector/web_audio/web_audio-legacy.js
+%%DATADIR%%/resources/inspector/web_audio/web_audio.js
+%%DATADIR%%/resources/inspector/web_audio/AudioContextContentBuilder.js
+%%DATADIR%%/resources/inspector/web_audio/AudioContextSelector.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/EdgeView.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/GraphManager.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/GraphStyle.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/GraphView.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/NodeRendererUtility.js
+%%DATADIR%%/resources/inspector/web_audio/graph_visualizer/NodeView.js
+%%DATADIR%%/resources/inspector/web_audio/WebAudioModel.js
+%%DATADIR%%/resources/inspector/web_audio/WebAudioView.js
+%%DATADIR%%/resources/inspector/worker_app.html
+%%DATADIR%%/resources/inspector/worker_app.js
+%%DATADIR%%/resources/inspector/worker_main/worker_main-legacy.js
+%%DATADIR%%/resources/inspector/worker_main/worker_main.js
+%%DATADIR%%/resources/inspector/worker_main/WorkerMain.js
+%%DATADIR%%/resources/inspector/workspace_diff/workspace_diff_module.js
+%%DATADIR%%/resources/inspector/workspace_diff/workspace_diff-legacy.js
+%%DATADIR%%/resources/inspector/workspace_diff/workspace_diff.js
+%%DATADIR%%/resources/inspector/workspace_diff/WorkspaceDiff.js
+%%DATADIR%%/resources/inspector/workspace/FileManager.js
+%%DATADIR%%/resources/inspector/workspace/UISourceCode.js
+%%DATADIR%%/resources/inspector/workspace/workspace.js
+%%DATADIR%%/resources/inspector/workspace/workspace-legacy.js
+%%DATADIR%%/resources/inspector/workspace/WorkspaceImpl.js
+%%DATADIR%%/snapshot_blob.bin
+%%DATADIR%%/libvk_swiftshader.so
+%%DATADIR%%/swiftshader/libEGL.so
+%%DATADIR%%/swiftshader/libGLESv2.so
+%%DATADIR%%/v8_context_snapshot.bin
+%%DEBUG%%%%DATADIR%%/character_data_generator
+%%DEBUG%%%%DATADIR%%/libVkLayer_khronos_validation.so
+%%DEBUG%%%%DATADIR%%/libvulkan.so
+man/man1/iridium.1.gz
+share/applications/iridium-browser.desktop
+share/icons/hicolor/128x128/apps/iridium.png
+share/icons/hicolor/22x22/apps/iridium.png
+share/icons/hicolor/24x24/apps/iridium.png
+share/icons/hicolor/256x256/apps/iridium.png
+share/icons/hicolor/48x48/apps/iridium.png
+share/icons/hicolor/64x64/apps/iridium.png
diff --git a/www/moinmoin/Makefile b/www/moinmoin/Makefile
new file mode 100644
index 000000000000..cbd1c6c21db1
--- /dev/null
+++ b/www/moinmoin/Makefile
@@ -0,0 +1,91 @@
+# Created by: Hye-Shik Chang <perky@python.or.kr>
+# $FreeBSD$
+
+PORTNAME= moinmoin
+PORTVERSION= 1.9.10
+CATEGORIES= www python
+MASTER_SITES= https://static.moinmo.in/files/
+DISTNAME= moin-${PORTVERSION}
+
+MAINTAINER= python@FreeBSD.org
+COMMENT= Easy to use, full-featured and extensible wiki software package
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/docs/licenses/COPYING
+
+USES= cpe python:2.7 shebangfix
+USE_PYTHON= distutils
+
+NO_ARCH= yes
+CPE_VENDOR= moinmo
+PYDISTUTILS_PKGNAME= moin
+SHEBANG_FILES= wiki/server/moin*
+
+PLIST_SUB+= PYTHON_SITELIB=${PYTHON_SITELIBDIR:S|^${LOCALBASE}/||} \
+ DATADIR=share/moin
+SUB_FILES= pkg-install
+SUB_LIST= MOINDIR=${MOINDIR} MOINDEST=${MOINDEST} MOINVER=${MOINVER} \
+ HTDOCS=${PYTHON_SITELIBDIR}/MoinMoin/web/static/htdocs
+
+OPTIONS_DEFINE= RECAPTCHA VERIFYEMAIL
+OPTIONS_DEFAULT= RECAPTCHA VERIFYEMAIL
+OPTIONS_SUB= yes
+
+RECAPTCHA_DESC= reCAPTCHA v2 support
+VERIFYEMAIL_DESC= Support for verifying new account email addresses
+
+RECAPTCHA_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-recaptchav2
+VERIFYEMAIL_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-verifyemail
+
+CGIUSER?= www
+CGIGROUP?= www
+MOINDIR= ${PREFIX}/share/moin
+MOINDEST?= ${PREFIX}/www/wiki
+MOINVER?= ${PORTVERSION:S|.||g}
+MOINTYPE?= CGI
+
+PKGDEINSTALL= ${PKGINSTALL}
+
+.if ${MOINTYPE} == "STANDALONE"
+MOINSCRIPT= ${MOINDIR}/server/moin
+.elif ${MOINTYPE} == "FCGI"
+MOINSCRIPT= ${MOINDIR}/server/moin.fcgi
+.elif ${MOINTYPE} == "MOD_PYTHON"
+.elif ${MOINTYPE} == "CGI"
+MOINSCRIPT= ${MOINDIR}/server/moin.cgi
+.elif ${MOINTYPE} == "WSGI"
+MOINSCRIPT= ${MOINDIR}/server/moin.wsgi
+.else
+BROKEN= MOINTYPE must be a STANDALONE, FCGI, WSGI, MOD_PYTHON, or CGI
+.endif
+
+pre-everything::
+ @${ECHO}
+ @${ECHO} "Set MOINTYPE=(CGI|FCGI|WSGI|STANDALONE) to define"
+ @${ECHO} "type of installation. Default is CGI."
+ @${ECHO} "Use MOINDEST=/path to modify installation destination."
+ @${ECHO} "Default value for MOINDEST is ${PREFIX}/www/wiki."
+ @${ECHO}
+ @${ECHO} "To get correct permissions, please set CGIUSER, CGIGROUP"
+ @${ECHO} "per default it is set to www:www."
+ @${ECHO}
+
+instance: pre-everything apply-slist
+ @${ECHO_CMD} "Creating a new wiki instance in ${MOINDEST}."; \
+ if [ -f ${MOINDIR}/config/wikiconfig.py ]; then \
+ ${MKDIR} ${MOINDEST}; \
+ ${CP} -R ${MOINDIR}/data ${MOINDEST}; \
+ ${CP} -R ${MOINDIR}/underlay ${MOINDEST}; \
+ ${CHMOD} -R u+rw,go-ws ${MOINDEST}/data; \
+ ${INSTALL_SCRIPT} ${MOINDIR}/config/wikiconfig.py ${MOINDEST}; \
+ if [ ! -z ${MOINSCRIPT} ]; then \
+ ${INSTALL_SCRIPT} ${MOINSCRIPT} ${MOINDEST}; \
+ fi; \
+ ${CHOWN} -R ${CGIUSER}:${CGIGROUP} ${MOINDEST}; \
+ ${SH} ${PKGINSTALL} ${PKGNAME} INSTANCE ${MOINTYPE}; \
+ else \
+ ${ECHO_CMD} "You need to install moinmoin first before trying"; \
+ ${ECHO_CMD} "to add a new wiki instance."; \
+ fi
+
+.include <bsd.port.mk>
diff --git a/www/moinmoin/distinfo b/www/moinmoin/distinfo
new file mode 100644
index 000000000000..44f6c502c523
--- /dev/null
+++ b/www/moinmoin/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1536591873
+SHA256 (moin-1.9.10.tar.gz) = 4a264418e886082abd457c26991f4a8f4847cd1a2ffc11e10d66231da8a5053c
+SIZE (moin-1.9.10.tar.gz) = 37283678
diff --git a/www/moinmoin/files/extra-patch-recaptchav2 b/www/moinmoin/files/extra-patch-recaptchav2
new file mode 100644
index 000000000000..60241b7cf0cf
--- /dev/null
+++ b/www/moinmoin/files/extra-patch-recaptchav2
@@ -0,0 +1,299 @@
+# Based on https://gist.github.com/tfoote/675b98df53369e199dea
+
+--- MoinMoin/action/AttachFile.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/action/AttachFile.py
+@@ -44,6 +44,7 @@ from MoinMoin import config, packages
+ from MoinMoin.Page import Page
+ from MoinMoin.util import filesys, timefuncs
+ from MoinMoin.security.textcha import TextCha
++from MoinMoin.security.sec_recaptcha import ReCaptcha
+ from MoinMoin.events import FileAttachedEvent, FileRemovedEvent, send_event
+
+ action_name = __name__.split('.')[-1]
+@@ -654,6 +655,7 @@ def send_uploadform(pagename, request):
+ <dd><input type="checkbox" name="overwrite" value="1" %(overwrite_checked)s></dd>
+ </dl>
+ %(textcha)s
++%(recaptcha)s
+ <p>
+ <input type="hidden" name="action" value="%(action_name)s">
+ <input type="hidden" name="do" value="upload">
+@@ -671,6 +673,7 @@ def send_uploadform(pagename, request):
+ 'overwrite_checked': ('', 'checked')[request.form.get('overwrite', '0') == '1'],
+ 'upload_button': _('Upload'),
+ 'textcha': TextCha(request).render(),
++ 'recaptcha': ReCaptcha(request).render(),
+ 'ticket': wikiutil.createTicket(request),
+ })
+
+@@ -728,6 +731,8 @@ def _do_upload(pagename, request):
+ # but it could be extended to more/all attachment write access
+ if not TextCha(request).check_answer_from_form():
+ return _('TextCha: Wrong answer! Go back and try again...')
++ if not ReCaptcha(request).check_answer_from_form():
++ return _('ReCaptcha: Wrong answer! Go back and try again...')
+
+ form = request.form
+
+--- MoinMoin/action/CopyPage.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/action/CopyPage.py
+@@ -14,6 +14,7 @@ from MoinMoin.Page import Page
+ from MoinMoin.PageEditor import PageEditor
+ from MoinMoin.action import ActionBase
+ from MoinMoin.security.textcha import TextCha
++from MoinMoin.security.sec_recaptcha import ReCaptcha
+
+ class CopyPage(ActionBase):
+ """ Copy page action
+@@ -45,11 +46,14 @@ class CopyPage(ActionBase):
+
+ def do_action(self):
+ """ copy this page to "pagename" """
++ status = False
+ _ = self._
+ # Currently we only check TextCha for upload (this is what spammers ususally do),
+ # but it could be extended to more/all attachment write access
+ if not TextCha(self.request).check_answer_from_form():
+ return False, _('TextCha: Wrong answer! Go back and try again...')
++ if not ReCaptcha(self.request).check_answer_from_form():
++ return status, _('ReCaptcha: Wrong answer! Go back and try again...')
+
+ form = self.form
+ newpagename = form.get('newpagename', u'')
+@@ -90,6 +94,7 @@ class CopyPage(ActionBase):
+
+ d = {
+ 'textcha': TextCha(self.request).render(),
++ 'recaptcha': ReCaptcha(self.request).render(),
+ 'subpage': subpages,
+ 'subpages_checked': ('', 'checked')[self.request.args.get('subpages_checked', '0') == '1'],
+ 'subpage_label': _('Copy all /subpages too?'),
+@@ -105,6 +110,7 @@ class CopyPage(ActionBase):
+ <br>
+ <br>
+ %(textcha)s
++%(recaptcha)s
+ <table>
+ <tr>
+ <dd>
+@@ -140,6 +146,7 @@ class CopyPage(ActionBase):
+ else:
+ d = {
+ 'textcha': TextCha(self.request).render(),
++ 'recaptcha': ReCaptcha(self.request).render(),
+ 'pagename': wikiutil.escape(self.pagename, True),
+ 'newname_label': _("New name"),
+ 'comment_label': _("Optional reason for the copying"),
+@@ -147,6 +154,7 @@ class CopyPage(ActionBase):
+ }
+ return '''
+ %(textcha)s
++%(recaptcha)s
+ <table>
+ <tr>
+ <td class="label"><label>%(newname_label)s</label></td>
+--- MoinMoin/action/edit.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/action/edit.py
+@@ -163,6 +163,9 @@ def execute(pagename, request):
+ from MoinMoin.security.textcha import TextCha
+ if not TextCha(request).check_answer_from_form():
+ raise pg.SaveError(_('TextCha: Wrong answer! Try again below...'))
++ from MoinMoin.security.sec_recaptcha import ReCaptcha
++ if not ReCaptcha(request).check_answer_from_form():
++ raise pg.SaveError(_('ReCaptcha: Wrong answer! Try again below...'))
+ if request.cfg.comment_required and not comment:
+ raise pg.SaveError(_('Supplying a comment is mandatory. Write a comment below and try again...'))
+ savemsg = pg.saveText(savetext, rev, trivial=trivial, comment=comment)
+--- MoinMoin/action/Load.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/action/Load.py
+@@ -14,6 +14,7 @@ from MoinMoin.action import ActionBase, AttachFile
+ from MoinMoin.PageEditor import PageEditor
+ from MoinMoin.Page import Page
+ from MoinMoin.security.textcha import TextCha
++from MoinMoin.security.sec_recaptcha import ReCaptcha
+
+ class Load(ActionBase):
+ """ Load page action
+@@ -40,6 +41,8 @@ class Load(ActionBase):
+ # but it could be extended to more/all attachment write access
+ if not TextCha(request).check_answer_from_form():
+ return status, _('TextCha: Wrong answer! Go back and try again...')
++ if not ReCaptcha(request).check_answer_from_form():
++ return _('ReCaptcha: Wrong answer! Go back and try again...')
+
+ comment = form.get('comment', u'')
+ comment = wikiutil.clean_input(comment)
+@@ -97,6 +100,7 @@ class Load(ActionBase):
+ <dd><input type="text" name="comment" size="80" maxlength="200"></dd>
+ </dl>
+ %(textcha)s
++%(recaptcha)s
+ <p>
+ <input type="hidden" name="action" value="%(action_name)s">
+ <input type="hidden" name="do" value="upload">
+@@ -115,6 +119,7 @@ class Load(ActionBase):
+ 'buttons_html': buttons_html,
+ 'action_name': self.form_trigger,
+ 'textcha': TextCha(self.request).render(),
++ 'recaptcha': ReCaptcha(self.request).render(),
+ }
+
+ def execute(pagename, request):
+--- MoinMoin/action/newaccount.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/action/newaccount.py
+@@ -10,6 +10,7 @@ from MoinMoin import user, wikiutil
+ from MoinMoin.Page import Page
+ from MoinMoin.widget import html
+ from MoinMoin.security.textcha import TextCha
++from MoinMoin.security.sec_recaptcha import ReCaptcha
+ from MoinMoin.auth import MoinAuth
+
+
+@@ -26,6 +27,9 @@ def _create_user(request):
+ if not TextCha(request).check_answer_from_form():
+ return _('TextCha: Wrong answer! Go back and try again...')
+
++ if not ReCaptcha(request).check_answer_from_form():
++ return _('ReCaptcha: Wrong answer! Go back and try again...')
++
+ # Create user profile
+ theuser = user.User(request, auth_method="new-user")
+
+@@ -141,6 +145,17 @@ def _create_form(request):
+ if textcha:
+ td.append(textcha.render())
+ row.append(td)
++
++ recaptcha = ReCaptcha(request)
++ if recaptcha.is_enabled():
++ row = html.TR()
++ tbl.append(row)
++ row.append(html.TD().append(html.STRONG().append(
++ html.Text(_('ReCaptcha (required)')))))
++ td = html.TD()
++ if recaptcha:
++ td.append(recaptcha.render())
++ row.append(td)
+
+ row = html.TR()
+ tbl.append(row)
+--- MoinMoin/PageEditor.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/PageEditor.py
+@@ -422,6 +422,9 @@ If you don't want that, hit '''%(cancel_button_text)s'
+ from MoinMoin.security.textcha import TextCha
+ request.write(TextCha(request).render())
+
++ from MoinMoin.security.sec_recaptcha import ReCaptcha
++ request.write(ReCaptcha(request).render())
++
+ # Add textarea with page text
+ self.sendconfirmleaving()
+
+--- MoinMoin/PageGraphicalEditor.py.orig 2016-10-31 20:44:01 UTC
++++ MoinMoin/PageGraphicalEditor.py
+@@ -305,6 +305,9 @@ If you don't want that, hit '''%(cancel_button_text)s'
+ from MoinMoin.security.textcha import TextCha
+ request.write(TextCha(request).render())
+
++ from MoinMoin.security.sec_recaptcha import ReCaptcha
++ request.write(ReCaptcha(request).render())
++
+ self.sendconfirmleaving() # TODO update state of flgChange to make this work, see PageEditor
+
+ # Add textarea with page text
+--- MoinMoin/security/sec_recaptcha.py.orig 2018-05-02 03:24:23 UTC
++++ MoinMoin/security/sec_recaptcha.py
+@@ -0,0 +1,93 @@
++# -*- coding: iso-8859-1 -*-
++"""
++ MoinMoin - recaptcha support
++
++ Based heavily on the textcha support in textcha.py
++
++ @copyright: 2011 by Steve McIntyre
++ @copyright: 2018 by d42
++ @license: GNU GPL, see COPYING for details.
++"""
++import json
++import urllib
++import urllib2
++from textwrap import dedent
++
++from MoinMoin import log
++
++logging = log.getLogger(__name__)
++
++
++class ReCaptcha(object):
++ """ Recaptcha support """
++
++ VERIFY_URL = "https://www.google.com/recaptcha/api/siteverify"
++
++ def __init__(self, request):
++ """ Initialize the Recaptcha setup.
++
++ @param request: the request object
++ """
++ self.request = request
++ self.user_info = request.user.valid and request.user.name or request.remote_addr
++
++ self.site_key = getattr(request.cfg, "recaptcha_site_key", None)
++ self.secret_key = getattr(request.cfg, "recaptcha_secret_key", None)
++
++ def is_enabled(self):
++ """ check if we're configured, i.e. we have a key
++ """
++ return self.site_key and self.secret_key
++
++ def check_answer_from_form(self, form=None):
++ form = self.request.form if form is None else form
++
++ if not self.is_enabled():
++ return True
++
++ return self._submit(
++ response=form.get("g-recaptcha-response"),
++ remoteip=self.request.remote_addr
++ )
++
++ def _submit(self, response, remoteip):
++
++ def encode_if_necessary(s):
++ return s.encode("utf-8") if isinstance(s, unicode) else s
++
++ data = urllib.urlencode({
++ "secret": encode_if_necessary(self.secret_key),
++ "response": encode_if_necessary(response),
++ "remoteip": encode_if_necessary(remoteip),
++ })
++
++ request = urllib2.Request(
++ url=self.VERIFY_URL,
++ data=data,
++ headers={"Content-type": "application/x-www-form-urlencoded"}
++ )
++
++ try:
++ resp = urllib2.urlopen(request)
++ http_code = resp.getcode()
++ resp_json = json.loads(resp.read())
++ return resp_json["success"] if http_code == 200 else False
++ except urllib2.URLError as e:
++ logging.exception(e)
++ return False
++ finally:
++ resp.close()
++
++ def render(self, form=None):
++ """ Checks if ReCaptchas are enabled and returns HTML for one,
++ or an empty string if they are not enabled.
++
++ @return: unicode result html
++ """
++ if not self.is_enabled():
++ return u""
++
++ return dedent(u"""
++ <script src='//www.google.com/recaptcha/api.js'></script>
++ <div class="g-recaptcha" data-sitekey="{SITE_KEY}"></div>
++ """.format(SITE_KEY=self.site_key))
diff --git a/www/moinmoin/files/extra-patch-verifyemail b/www/moinmoin/files/extra-patch-verifyemail
new file mode 100644
index 000000000000..0b5da29c741a
--- /dev/null
+++ b/www/moinmoin/files/extra-patch-verifyemail
@@ -0,0 +1,232 @@
+Description: Add support for requiring new accounts to be verified by email
+Origin: http://moinmo.in/MoinMoinPatch/VerifyAccountCreationByEmail
+Author: Steve McIntyre
+Last-Update: 2013-09-04
+
+--- ./MoinMoin/action/newaccount.py 2014-10-17 12:45:32.000000000 -0700
++++ ./MoinMoin/action/newaccount.py 2016-01-15 13:53:33.209638000 -0800
+@@ -12,5 +12,27 @@
+ from MoinMoin.security.textcha import TextCha
+ from MoinMoin.auth import MoinAuth
++from MoinMoin.mail import sendmail
++import subprocess
+
++def _send_verification_mail(request, user):
++ _ = request.getText
++ querystr = {'action': 'verifyaccount',
++ 'i': user.id,
++ 'v': user.account_verification}
++ page = Page(request, "FrontPage")
++ pagelink = "%(link)s" % {'link': request.getQualifiedURL(page.url(request, querystr))}
++ subject = _('[%(sitename)s] account verification check for new user %(username)s') % {
++ 'sitename': request.page.cfg.sitename or request.url_root,
++ 'username': user.name,
++ }
++
++ text = "Please verify your account by visiting this URL:\n\n %(link)s\n\n" % {
++ 'link': pagelink}
++
++ mailok, msg = sendmail.sendmail(request, user.email, subject, text, request.cfg.mail_from)
++ if mailok:
++ return (1, _("Verification message sent to %(email)s" % {'email': user.email}))
++ else:
++ return (mailok, msg)
+
+ def _create_user(request):
+@@ -43,6 +65,16 @@
+
+ # Name required to be unique. Check if name belong to another user.
+- if user.getUserId(request, theuser.name):
+- return _("This user name already belongs to somebody else.")
++ userid = user.getUserId(request, theuser.name)
++ if userid:
++ if request.cfg.require_email_verification and theuser.account_verification:
++ resendlink = request.page.url(request, querystr={
++ 'action': 'newaccount',
++ 'i': userid,
++ 'resend': '1'})
++ return _('This user name already belongs to somebody else. If this is a new account'
++ ' and you need another verification link, try <a href="%s">'
++ 'sending another one</a>. ' % resendlink)
++ else:
++ return _("This user name already belongs to somebody else.")
+
+ # try to get the password and pw repeat
+@@ -73,16 +105,39 @@
+ theuser.email = email.strip()
+ if not theuser.email and 'email' not in request.cfg.user_form_remove:
+- return _("Please provide your email address. If you lose your"
+- " login information, you can get it by email.")
++ if request.cfg.require_email_verification:
++ return _("Please provide your email address. You will need it"
++ " to be able to confirm your registration.")
++ else:
++ return _("Please provide your email address. If you lose your"
++ " login information, you can get it by email.")
+
+ # Email should be unique - see also MoinMoin/script/accounts/moin_usercheck.py
+ if theuser.email and request.cfg.user_email_unique:
+- if user.get_by_email_address(request, theuser.email):
+- return _("This email already belongs to somebody else.")
++ emailuser = user.get_by_email_address(request, theuser.email)
++ if emailuser:
++ if request.cfg.require_email_verification and theuser.account_verification:
++ resendlink = request.page.url(request, querystr={
++ 'action': 'newaccount',
++ 'i': emailuser.id,
++ 'resend': '1'})
++ return _('This email already belongs to somebody else. If this is a new account'
++ ' and you need another verification link, try <a href="%s">'
++ 'sending another one</a>. ' % resendlink)
++ else:
++ return _("This email already belongs to somebody else.")
++
++ # Send verification links if desired
++ if request.cfg.require_email_verification:
++ mailok, msg = _send_verification_mail(request, theuser)
++ if mailok:
++ result = _("User account created! Use the link in your email (%s) to verify your account"
++ " then you will be able to use this account to login..." % theuser.email)
++ else:
++ request.theme.add_msg(_("Unable to send verification mail, %s. Account creation aborted." % msg), "error")
++ else:
++ result = _("User account created! You can use this account to login now...")
+
+ # save data
+ theuser.save()
+-
+- result = _("User account created! You can use this account to login now...")
+ return result
+
+@@ -171,7 +226,18 @@
+ submitted = form.has_key('create')
+
++ uid = request.values.get('i', None)
++ resend = request.values.get('resend', None)
++
+ if submitted: # user pressed create button
+ request.theme.add_msg(_create_user(request), "dialog")
+ return page.send_page()
++ if resend and uid:
++ theuser = user.User(request, id=uid)
++ mailok, msg = _send_verification_mail(request, theuser)
++ if mailok:
++ request.theme.add_msg(_("Verification message re-sent to %s" % theuser.email), "dialog")
++ else:
++ request.theme.add_msg(_("Unable to re-send verification message, %s" % msg), "dialog")
++ return page.send_page()
+ else: # show create form
+ request.theme.send_title(_("Create Account"), pagename=pagename)
+--- ./MoinMoin/action/verifyaccount.py 1969-12-31 16:00:00.000000000 -0800
++++ ./MoinMoin/action/verifyaccount.py 2016-01-15 13:53:33.209957000 -0800
+@@ -0,0 +1,64 @@
++# -*- coding: iso-8859-1 -*-
++"""
++ MoinMoin - verify account action
++
++ @copyright: 2012 Steve McIntyre
++ @license: GNU GPL, see COPYING for details.
++"""
++
++from MoinMoin import user, wikiutil
++from MoinMoin.Page import Page
++from MoinMoin.widget import html
++from MoinMoin.auth import MoinAuth
++
++def execute(pagename, request):
++ found = False
++ for auth in request.cfg.auth:
++ if isinstance(auth, MoinAuth):
++ found = True
++ break
++
++ if not found:
++ # we will not have linked, so forbid access
++ request.makeForbidden(403, 'No MoinAuth in auth list')
++ return
++
++ page = Page(request, "FrontPage")
++ _ = request.getText
++
++ if not request.cfg.require_email_verification:
++ result = _("Verification not configured!")
++ request.theme.add_msg(result, "error")
++ return page.send_page()
++
++ uid = request.values.get('i', None)
++ verify = request.values.get('v', None)
++
++ # Grab user profile
++ theuser = user.User(request, id=uid)
++
++ # Compare the verification code
++ if not theuser.valid:
++ result = _("Unable to verify user account i=%s v=%s") % (uid, verify)
++ request.theme.add_msg(result, "error")
++ return page.send_page()
++
++ if not theuser.account_verification:
++ result = _("User account has been verified!")
++ request.theme.add_msg(result, "error")
++ return page.send_page()
++
++ if theuser.account_verification != verify:
++ result = _("Unable to verify user account i=%s v=%s") % (uid, verify)
++ request.theme.add_msg(result, "error")
++ return page.send_page()
++
++ # All looks sane. Mark verification as done, save data
++ theuser.account_verification = ""
++ theuser.save()
++
++ loginlink = request.page.url(request, querystr={'action': 'login'})
++ result = _('User account verified! You can use this account to <a href="%s">login</a> now...' % loginlink)
++ request.theme.add_msg(result, "dialog")
++ return page.send_page()
++
+--- ./MoinMoin/auth/__init__.py 2014-10-17 12:45:32.000000000 -0700
++++ ./MoinMoin/auth/__init__.py 2016-01-15 13:53:33.210285000 -0800
+@@ -250,6 +250,13 @@
+ check_surge_protect(request, action='auth-name', username=username)
+
+- u = user.User(request, name=username, password=password, auth_method=self.name)
++ u = user.User(request, name=username, password=password, auth_method=self.name)
+ if u.valid:
++ try:
++ verification = u.account_verification
++ except:
++ verification = False
++ if request.cfg.require_email_verification and verification:
++ logging.debug("%s: could not authenticate user %r (not verified yet)" % (self.name, username))
++ return ContinueLogin(user_obj, _("User account not verified yet."))
+ logging.debug("%s: successfully authenticated user %r (valid)" % (self.name, u.name))
+ log_attempt("auth/login (moin)", True, request, username)
+--- ./MoinMoin/config/multiconfig.py 2014-10-17 12:45:32.000000000 -0700
++++ ./MoinMoin/config/multiconfig.py 2016-01-15 13:53:33.210918000 -0800
+@@ -1097,4 +1097,6 @@
+ ('userprefs_disabled', [],
+ "Disable the listed user preferences plugins."),
++ ('require_email_verification', False ,
++ "Require verification of new user accounts."),
+ )),
+ # ==========================================================================
+--- ./MoinMoin/user.py 2014-10-17 12:45:32.000000000 -0700
++++ ./MoinMoin/user.py 2016-01-15 13:53:33.211435000 -0800
+@@ -24,4 +24,5 @@
+ from copy import deepcopy
+ import md5crypt
++import uuid
+
+ try:
+@@ -523,4 +524,10 @@
+ if password is not None:
+ self.enc_password = encodePassword(self._cfg, password)
++ self.account_creation_date = str(time.time())
++ self.account_creation_host = self._request.remote_addr
++ if self._cfg.require_email_verification:
++ self.account_verification = uuid.uuid4()
++ else:
++ self.account_verification = ""
+
+ # "may" so we can say "if user.may.read(pagename):"
+
diff --git a/www/moinmoin/files/patch-setup.cfg b/www/moinmoin/files/patch-setup.cfg
new file mode 100644
index 000000000000..3255dbcefa1c
--- /dev/null
+++ b/www/moinmoin/files/patch-setup.cfg
@@ -0,0 +1,10 @@
+--- setup.cfg.orig 2018-09-09 18:10:20 UTC
++++ setup.cfg
+@@ -1,6 +1,6 @@
+ # MoinMoin - Distutils config
+ #
+-# Copyright (c) 2001 by Jürgen Hermann <jh@web.de>
++# Copyright (c) 2001 by Jurgen Hermann <jh@web.de>
+ # All rights reserved, see COPYING for details.
+
+ [bdist_rpm]
diff --git a/www/moinmoin/files/patch-setup.py b/www/moinmoin/files/patch-setup.py
new file mode 100644
index 000000000000..18960d14d2ca
--- /dev/null
+++ b/www/moinmoin/files/patch-setup.py
@@ -0,0 +1,10 @@
+--- setup.py.orig 2016-10-31 20:44:02 UTC
++++ setup.py
+@@ -26,6 +26,7 @@ def isbad(name):
+ return (name.startswith('.') or
+ name.startswith('#') or
+ name.endswith('.pickle') or
++ name.endswith('.orig') or
+ name == 'CVS')
+
+ def isgood(name):
diff --git a/www/moinmoin/files/pkg-install.in b/www/moinmoin/files/pkg-install.in
new file mode 100644
index 000000000000..601cf963bff0
--- /dev/null
+++ b/www/moinmoin/files/pkg-install.in
@@ -0,0 +1,148 @@
+#! /bin/sh
+
+destdir=%%MOINDEST%%
+htdocs=%%HTDOCS%%
+moinver=%%MOINVER%%
+
+case "x$2" in
+
+"xINSTANCE")
+
+ echo "************************************************************"
+
+ case "x$3" in
+
+ "xMOD_PYTHON")
+
+ echo "Since you chose MOINTYPE=MOD_PYTHON, you may want to"
+ echo "add something like that to your Apache configuration."
+ echo ""
+ echo ",-----"
+ echo " Alias /moin_static$moinver/ \"$htdocs/\""
+ echo " <Directory \"$htdocs/\">"
+ echo " Order deny,allow"
+ echo " Allow from all"
+ echo " </Directory>"
+ echo " Alias /mywiki $destdir"
+ echo " <Location \"/mywiki\">"
+ echo " SetHandler python-program"
+ echo " PythonPath \"['$destdir'] + sys.path\""
+ echo " PythonHandler MoinMoin.request.request_modpython::Request.run"
+ echo " PythonAutoReload On"
+ echo " PythonDebug On"
+ echo " </Location>"
+ echo "\`-----"
+ echo ""
+
+ ;;
+
+ "xCGI")
+
+ echo "Since you chose MOINTYPE=CGI, you may want to"
+ echo "add something like that to your Apache configuration."
+ echo ""
+
+ echo ",-----"
+ echo " Alias /moin_static$moinver/ \"$htdocs/\""
+ echo " <Directory \"$htdocs/\">"
+ echo " Order deny,allow"
+ echo " Allow from all"
+ echo " </Directory>"
+ echo " ScriptAlias /mywiki \"$destdir/moin.cgi\""
+ echo " <Directory \"$destdir/\">"
+ echo " Order deny,allow"
+ echo " Allow from all"
+ echo " </Directory>"
+ echo "\`-----"
+ echo ""
+
+ ;;
+
+ "xWSGI")
+
+ echo "Since you chose MOINTYPE=WSGI, you should "
+ echo "add something like that to your Apache configuration."
+ echo ""
+
+ echo ",-----"
+ echo " Alias /moin_static$moinver/ \"$htdocs/\""
+ echo " <Directory \"$htdocs/\">"
+ echo " Order deny,allow"
+ echo " Allow from all"
+ echo " </Directory>"
+ echo " WSGIScriptAlias /mywiki \"$destdir/moin.wsgi\""
+ echo "#If you use HTTP authorization enable the following also"
+ echo "#WSGIPassAuthorization On"
+ echo " <Directory \"$destdir/\">"
+ echo " Order deny,allow"
+ echo " Allow from all"
+ echo " </Directory>"
+ echo "\`-----"
+ echo ""
+
+ ;;
+
+ *)
+
+ ;;
+
+ esac
+
+ echo "You may need to modify wikiconfig.py in your wiki instance"
+ echo "directory (eg. $destdir)."
+ echo ""
+ echo "If you want to install additional wiki instances"
+ echo "call 'make instance' with appriopriate arguments."
+ echo "E.g.: make MOINTYPE=FCGI MOINDEST=%%PREFIX%%/www/wiki instance"
+ echo "************************************************************"
+
+ ;;
+
+"xPOST-INSTALL")
+
+ echo "************************************************************"
+ echo "Important: You have currently no wiki instance installed."
+ echo ""
+ echo "If you're installing from ports, just run 'make instance'"
+ echo "with appriopriate arguments."
+ echo "eg. make MOINTYPE=FCGI MOINDEST=%%PREFIX%%/www/wiki instance"
+ echo ""
+ echo "If you're installing from package, run these commands."
+ echo ""
+ echo "# Choose here one script depending on the type of wiki you"
+ echo "# want : moin.py (standalone), moin.fcg (FCGI), moin.wsgi (WSGI) or moin.cgi."
+ echo 'export MOINSCRIPT="moin.cgi"'
+ echo '# Defaults should be fine but you may want to modify these.'
+ echo 'export MOINDIR="%%MOINDIR%%"'
+ echo 'export MOINDEST="%%MOINDEST%%"'
+ echo '# Set this to your apache user and group.'
+ echo 'export CGIUSER="www"'
+ echo 'export CGIGROUP="www"'
+ echo ''
+ echo 'mkdir -p ${MOINDEST}/data'
+ echo 'mkdir -p ${MOINDEST}/underlay'
+ echo 'cp -R ${MOINDIR}/data ${MOINDEST}'
+ echo 'cp -R ${MOINDIR}/underlay ${MOINDEST}'
+ echo 'chmod -R u+rw,go-ws ${MOINDEST}/data'
+ echo 'install -m 0555 ${MOINDIR}/config/wikiconfig.py ${MOINDEST}'
+ echo 'test -z "${MOINSCRIPT}" || \'
+ echo ' install -m 0555 ${MOINDIR}/server/${MOINSCRIPT} ${MOINDEST}'
+ echo 'chown -R ${CGIUSER}:${CGIGROUP} ${MOINDEST}'
+ echo ""
+ echo "Note: export might not work with your shell, use"
+ echo "# setenv VAR 'value' instead"
+ echo "************************************************************"
+
+ ;;
+
+"xDEINSTALL")
+
+ echo "************************************************************"
+ echo "All shared files have been removed."
+ echo "To complete deinstallation, please remove all the wiki"
+ echo "instances you have created."
+ echo "************************************************************"
+
+ ;;
+
+esac
diff --git a/www/moinmoin/pkg-descr b/www/moinmoin/pkg-descr
new file mode 100644
index 000000000000..74c680a3560f
--- /dev/null
+++ b/www/moinmoin/pkg-descr
@@ -0,0 +1,5 @@
+MoinMoin is a Python clone of WikiWiki, which is a composition system;
+it's a discussion medium; it's a repository; it's a mail system;
+it's a tool for collaboration.
+
+WWW: https://moinmo.in/
diff --git a/www/moinmoin/pkg-plist b/www/moinmoin/pkg-plist
new file mode 100644
index 000000000000..8f4683a0fa18
--- /dev/null
+++ b/www/moinmoin/pkg-plist
@@ -0,0 +1,3555 @@
+bin/moin
+%%PYTHON_SITELIBDIR%%/MoinMoin/Page.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/Page.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/Page.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageEditor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageEditor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageEditor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageGraphicalEditor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageGraphicalEditor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/PageGraphicalEditor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/_template.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/_template.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/_template.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/AttachFile.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/AttachFile.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/AttachFile.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/CopyPage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/CopyPage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/CopyPage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/DeletePage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/DeletePage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/DeletePage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Despam.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Despam.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Despam.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LikePages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LikePages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LikePages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Load.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Load.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Load.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LocalSiteMap.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LocalSiteMap.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/LocalSiteMap.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/MyPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/MyPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/MyPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/PackagePages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/PackagePages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/PackagePages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenamePage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenamePage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenamePage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenderAsDocbook.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenderAsDocbook.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/RenderAsDocbook.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Save.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Save.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/Save.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SlideShow.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SlideShow.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SlideShow.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SpellCheck.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SpellCheck.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SpellCheck.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SubscribeUser.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SubscribeUser.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SubscribeUser.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SyncPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SyncPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/SyncPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/anywikidraw.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/anywikidraw.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/anywikidraw.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/backup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/backup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/backup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/bookmark.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/bookmark.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/bookmark.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/cache.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/cache.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/cache.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/chart.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/chart.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/chart.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/diff.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/diff.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/diff.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/edit.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/edit.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/edit.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fckdialog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fckdialog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fckdialog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fullsearch.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fullsearch.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/fullsearch.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/info.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/info.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/info.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/language_setup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/language_setup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/language_setup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/links.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/links.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/links.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/login.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/login.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/login.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/logout.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/logout.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/logout.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newaccount.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newaccount.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newaccount.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newpage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newpage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/newpage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/pollsistersites.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/pollsistersites.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/pollsistersites.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quicklink.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quicklink.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quicklink.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quickunlink.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quickunlink.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/quickunlink.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/recoverpass.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/recoverpass.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/recoverpass.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/refresh.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/refresh.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/refresh.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/revert.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/revert.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/revert.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/rss_rc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/rss_rc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/rss_rc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/serveopenid.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/serveopenid.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/serveopenid.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/showtags.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/showtags.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/showtags.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sisterpages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sisterpages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sisterpages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sitemap.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sitemap.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/sitemap.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/subscribe.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/subscribe.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/subscribe.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/supplementation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/supplementation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/supplementation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/thread_monitor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/thread_monitor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/thread_monitor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/titleindex.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/titleindex.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/titleindex.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/twikidraw.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/twikidraw.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/twikidraw.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/unsubscribe.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/unsubscribe.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/unsubscribe.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprefs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprefs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprefs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprofile.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprofile.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/action/userprofile.pyo
+%%VERIFYEMAIL%%%%PYTHON_SITELIBDIR%%/MoinMoin/action/verifyaccount.py
+%%VERIFYEMAIL%%%%PYTHON_SITELIBDIR%%/MoinMoin/action/verifyaccount.pyc
+%%VERIFYEMAIL%%%%PYTHON_SITELIBDIR%%/MoinMoin/action/verifyaccount.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/_PHPsessionParser.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/_PHPsessionParser.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/_PHPsessionParser.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/botbouncer.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/botbouncer.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/botbouncer.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/cas.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/cas.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/cas.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/http.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/http.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/http.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/interwiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/interwiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/interwiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/ldap_login.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/ldap_login.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/ldap_login.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/log.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/log.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/log.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/mysql_group.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/mysql_group.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/mysql_group.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_sreg.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_sreg.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_sreg.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_teams.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_teams.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/openidrp_ext/openidrp_teams.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/php_session.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/php_session.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/php_session.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/smb_mount.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/smb_mount.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/smb_mount.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/sslclientcert.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/sslclientcert.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/auth/sslclientcert.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/caching.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/caching.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/caching.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/multiconfig.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/multiconfig.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/config/multiconfig.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/conftest.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/conftest.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/conftest.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/text_html_text_moin_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/text_html_text_moin_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/converter/text_html_text_moin_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_dicts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_dicts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_dicts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_groups.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_groups.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/composite_groups.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_dicts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_dicts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_dicts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_groups.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_groups.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_groups.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_lazy_groups.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_lazy_groups.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/config_lazy_groups.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_dicts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_dicts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_dicts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_groups.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_groups.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/datastruct/backends/wiki_groups.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/error.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/error.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/error.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/emailnotify.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/emailnotify.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/emailnotify.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/jabbernotify.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/jabbernotify.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/jabbernotify.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/notification.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/notification.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/notification.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/xapian_index.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/xapian_index.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/events/xapian_index.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/EXIF.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/EXIF.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/EXIF.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_msword.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_msword.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_msword.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_octet_stream.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_octet_stream.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_octet_stream.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_pdf.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_pdf.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_pdf.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_excel.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_excel.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_excel.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_powerpoint.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_powerpoint.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_ms_powerpoint.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_presentation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_presentation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_presentation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_spreadsheet.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_spreadsheet.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_spreadsheet.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_text.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_text.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_oasis_opendocument_text.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_calc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_calc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_calc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_writer.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_writer.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/application_vnd_sun_xml_writer.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/audio.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/audio.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/audio.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image_jpeg.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image_jpeg.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/image_jpeg.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_rtf.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_rtf.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_rtf.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_xml.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_xml.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/text_xml.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/video.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/video.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/filter/video.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/dom_xml.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/dom_xml.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/dom_xml.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/groups.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/groups.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/groups.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/pagelinks.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/pagelinks.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/pagelinks.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_docbook.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_docbook.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_docbook.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_gedit.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_gedit.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_gedit.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html_percent.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html_percent.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_html_percent.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_plain.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_plain.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_plain.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_python.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_python.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_python.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_xml.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_xml.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/formatter/text_xml.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/Makefile
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/MoinMoin.pot
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/README
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ar.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/bg.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ca.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/cs.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/da.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/de.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/el.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/en.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/es.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/fa.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/fi.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/fr.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/gl.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/he.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/hi.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/hr.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/hu.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/id.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/it.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ja.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/jabberbot/JabberBot.pot
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/jabberbot/Makefile
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/jabberbot/pl.JabberBot.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ko.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ku.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/lt.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/lv.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/mk.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/mn.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/msgfmt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/msgfmt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/msgfmt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/nb.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/nl.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/pl.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/pt-br.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/pt.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ro.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/ru.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/sk.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/sl.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/sr.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/strings.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/strings.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/strings.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/sv.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/check_i18n.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/check_i18n.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/check_i18n.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/mail_i18n-maintainers.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/mail_i18n-maintainers2.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/markup15to16.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/markup15to16.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/markup15to16.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/mk_POTFILES.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/mk_POTFILES.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/mk_POTFILES.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/po2wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/po2wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/po2wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/prepend.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/prepend.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/prepend.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/recode.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/recode.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/recode.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/wiki2po.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/wiki2po.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tools/wiki2po.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/tr.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/uk.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/vi.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/zh-tw.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/i18n/zh.MoinMoin.po
+%%PYTHON_SITELIBDIR%%/MoinMoin/log.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/log.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/log.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/editlog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/editlog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/editlog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/eventlog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/eventlog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/logfile/eventlog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AbandonedPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AbandonedPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AbandonedPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Action.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Action.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Action.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AdvancedSearch.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AdvancedSearch.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AdvancedSearch.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachInfo.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachInfo.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachInfo.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachList.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachList.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/AttachList.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/BR.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/BR.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/BR.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditTemplates.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditTemplates.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditTemplates.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditedSystemPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditedSystemPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EditedSystemPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EmbedObject.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EmbedObject.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/EmbedObject.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FootNote.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FootNote.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FootNote.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearch.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearch.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearch.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearchCached.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearchCached.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/FullSearchCached.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText2.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText2.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/GetText2.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/HighlighterList.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/HighlighterList.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/HighlighterList.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Hits.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Hits.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Hits.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Include.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Include.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Include.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/InterWiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/InterWiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/InterWiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/LikePages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/LikePages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/LikePages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/MonthCalendar.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/MonthCalendar.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/MonthCalendar.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Navigation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Navigation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Navigation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/NewPage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/NewPage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/NewPage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/OrphanedPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/OrphanedPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/OrphanedPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageCount.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageCount.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageCount.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageHits.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageHits.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageHits.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageList.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageList.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageList.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageSize.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageSize.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/PageSize.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomPage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomPage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomPage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomQuote.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomQuote.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RandomQuote.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RecentChanges.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RecentChanges.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/RecentChanges.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/ShowSmileys.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/ShowSmileys.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/ShowSmileys.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/StatsChart.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/StatsChart.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/StatsChart.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemAdmin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemAdmin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemAdmin.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemInfo.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemInfo.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/SystemInfo.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TableOfContents.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TableOfContents.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TableOfContents.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TeudView.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TeudView.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/TeudView.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Verbatim.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Verbatim.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/Verbatim.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WantedPages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WantedPages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WantedPages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfig.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfig.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfig.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfigHelp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfigHelp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/WikiConfigHelp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/macro/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/mailimport.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/mailimport.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/mailimport.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/sendmail.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/sendmail.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/mail/sendmail.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/multiconfig.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/multiconfig.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/multiconfig.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/packages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/packages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/packages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_ParserBase.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_ParserBase.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_ParserBase.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_creole.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_creole.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/_creole.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/highlight.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/highlight.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/highlight.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_cplusplus.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_cplusplus.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_cplusplus.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_creole.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_creole.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_creole.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_csv.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_csv.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_csv.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_diff.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_diff.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_diff.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_docbook.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_docbook.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_docbook.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_irssi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_irssi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_irssi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_java.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_java.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_java.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_moin_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_moin_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_moin_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_pascal.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_pascal.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_pascal.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_python.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_python.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_python.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_rst.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_rst.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_rst.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_xslt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_xslt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/parser/text_xslt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/check.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/check.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/check.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/create.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/create.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/create.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/disable.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/disable.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/disable.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/homepage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/homepage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/homepage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/inactive.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/inactive.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/inactive.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/resetpw.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/resetpw.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/account/resetpw.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/show.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/show.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/cli/show.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/dump.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/dump.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/dump.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/eventlog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/eventlog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/eventlog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/package.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/package.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/export/package.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/irclog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/irclog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/irclog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/wikipage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/wikipage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/import/wikipage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/build.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/build.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/index/build.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleancache.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleancache.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleancache.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleanpage.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleanpage.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleanpage.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleansessions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleansessions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/cleansessions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/globaledit.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/globaledit.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/globaledit.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mailtranslators.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mailtranslators.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mailtranslators.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/makecache.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/makecache.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/makecache.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mkpagepacks.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mkpagepacks.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/mkpagepacks.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/reducewiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/reducewiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/maint/reducewiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050301.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050301.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050301.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050400.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050400.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050400.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050500.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050500.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050500.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050600.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050600.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050600.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050700.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050700.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050700.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050800.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050800.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1050800.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059997.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059997.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059997.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059998.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059998.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059998.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059999.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059999.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1059999.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060000.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060000.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060000.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060100.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060100.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060100.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060200.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060200.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060200.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060400.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060400.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060400.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060500.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060500.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060500.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060600.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060600.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060600.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060700.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060700.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060700.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060800.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060800.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060800.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060900.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060900.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1060900.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1069999.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1069999.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1069999.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070000.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070000.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070000.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070100.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070100.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070100.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070200.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070200.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070200.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1070300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080000.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080000.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080000.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080100.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080100.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080100.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080200.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080200.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080200.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080400.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080400.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080400.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080500.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080500.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080500.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080600.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080600.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080600.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080700.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080700.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080700.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080800.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080800.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080800.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080900.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080900.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1080900.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1089999.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1089999.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1089999.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090000.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090000.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090000.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090100.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090100.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090100.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090200.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090200.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090200.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090400.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090400.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090400.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090500.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090500.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090500.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090600.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090600.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090600.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090700.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090700.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090700.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090800.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090800.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090800.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090900.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090900.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1090900.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1091000.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1091000.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/1091000.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/_conv160a_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/data.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/data.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/data.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/migutil.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/migutil.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/migutil.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin158_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin158_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin158_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin160a_wiki.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin160a_wiki.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/text_moin160a_wiki.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/wikiutil160a.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/wikiutil160a.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/migration/wikiutil160a.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/moin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/moin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/moin.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig01.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig01.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig01.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig02.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig02.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig02.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig03.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig03.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig03.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig04.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig04.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig04.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig05.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig05.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig05.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig06.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig06.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig06.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig07.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig07.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig07.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig08.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig08.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig08.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig09.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig09.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig09.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig10.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig10.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig10.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig11.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig11.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/12_to_13_mig11.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/152_to_1050300.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/152_to_1050300.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/152_to_1050300.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/migration/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/print_stats.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/print_stats.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/print_stats.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/repair_language.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/repair_language.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/repair_language.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/HelloWorld.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/HelloWorld.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/HelloWorld.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/UpdateGroupTest.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/UpdateGroupTest.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/UpdateGroupTest.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/old/xmlrpc-tools/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/standalone.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/standalone.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/server/standalone.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/mailimport.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/mailimport.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/mailimport.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/remote.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/remote.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/remote.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/retrieve.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/retrieve.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/retrieve.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/write.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/write.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/script/xmlrpc/write.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/indexing.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/indexing.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/indexing.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/search.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/search.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/search.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/tokenizer.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/tokenizer.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/Xapian/tokenizer.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/builtin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/builtin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/builtin.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/expressions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/expressions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/queryparser/expressions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/results.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/results.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/search/results.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/antispam.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/antispam.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/antispam.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/autoadmin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/autoadmin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/autoadmin.pyo
+%%RECAPTCHA%%%%PYTHON_SITELIBDIR%%/MoinMoin/security/sec_recaptcha.py
+%%RECAPTCHA%%%%PYTHON_SITELIBDIR%%/MoinMoin/security/sec_recaptcha.pyc
+%%RECAPTCHA%%%%PYTHON_SITELIBDIR%%/MoinMoin/security/sec_recaptcha.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/textcha.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/textcha.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/security/textcha.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/chart.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/chart.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/chart.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/hitcounts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/hitcounts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/hitcounts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/languages.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/languages.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/languages.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/pagesize.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/pagesize.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/pagesize.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/useragents.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/useragents.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/stats/useragents.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/BasicAuthTransport.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/BasicAuthTransport.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/BasicAuthTransport.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/fcgi_app.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/fcgi_app.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/fcgi_app.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/scgi_app.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/scgi_app.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/client/scgi_app.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_base.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_base.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_base.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_fork.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_fork.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/ajp_fork.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/cgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/cgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/cgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_base.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_base.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_base.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_fork.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_fork.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_fork.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_single.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_single.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/fcgi_single.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/paste_factory.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/paste_factory.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/paste_factory.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/preforkserver.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/preforkserver.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/preforkserver.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_base.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_base.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_base.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_fork.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_fork.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/scgi_fork.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/singleserver.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/singleserver.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/singleserver.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadedserver.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadedserver.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadedserver.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadpool.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadpool.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/flup/server/threadpool.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/htmlmarkup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/htmlmarkup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/htmlmarkup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/md5crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/md5crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/md5crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/context.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/context.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/context.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/parsedatetime.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/parsedatetime.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/parsedatetime.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/base.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/base.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/base.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/de_DE.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/de_DE.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/de_DE.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_AU.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_AU.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_AU.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_US.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_US.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/en_US.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/es.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/es.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/es.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/fr_FR.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/fr_FR.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/fr_FR.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/icu.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/icu.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/icu.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/nl_NL.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/nl_NL.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/nl_NL.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/pt_BR.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/pt_BR.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/pt_BR.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/ru_RU.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/ru_RU.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/pdt_locales/ru_RU.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/warns.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/warns.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/parsedatetime/warns.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/stamp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/stamp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/_setup/stamp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apache.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apache.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apache.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apps.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apps.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/apps.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/context.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/context.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/context.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/exc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/exc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/exc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/models.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/models.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/models.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/utils.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/utils.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ext/django/utils.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/argon2.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/argon2.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/argon2.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/bcrypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/bcrypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/bcrypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/cisco.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/cisco.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/cisco.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/des_crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/des_crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/des_crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/digests.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/digests.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/digests.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/django.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/django.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/django.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/fshp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/fshp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/fshp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/ldap_digests.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/ldap_digests.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/ldap_digests.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/md5_crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/md5_crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/md5_crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/misc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/misc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/misc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mssql.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mssql.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mssql.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mysql.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mysql.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/mysql.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/oracle.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/oracle.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/oracle.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/pbkdf2.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/pbkdf2.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/pbkdf2.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/phpass.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/phpass.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/phpass.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/postgres.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/postgres.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/postgres.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/roundup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/roundup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/roundup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scram.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scram.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scram.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scrypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scrypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/scrypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha1_crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha1_crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha1_crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha2_crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha2_crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sha2_crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sun_md5_crypt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sun_md5_crypt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/sun_md5_crypt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/windows.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/windows.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/handlers/windows.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hash.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hash.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hash.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hosts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hosts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/hosts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ifc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ifc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/ifc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/pwd.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/pwd.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/pwd.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/registry.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/registry.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/registry.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/totp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/totp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/totp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/binary.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/binary.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/binary.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/_ordered_dict.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/_ordered_dict.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/compat/_ordered_dict.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/decor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/decor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/decor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/des.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/des.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/des.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/handlers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/handlers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/handlers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/md4.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/md4.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/md4.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/pbkdf2.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/pbkdf2.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/utils/pbkdf2.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/win32.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/win32.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/passlib/win32.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/cmdline.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/cmdline.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/cmdline.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/console.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/console.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/console.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filter.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filter.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filter.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filters/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filters/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/filters/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatter.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatter.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatter.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/_mapping.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/_mapping.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/_mapping.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/bbcode.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/bbcode.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/bbcode.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/img.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/img.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/img.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/irc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/irc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/irc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/latex.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/latex.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/latex.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/other.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/other.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/other.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/rtf.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/rtf.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/rtf.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/svg.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/svg.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/svg.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal256.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal256.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/formatters/terminal256.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexer.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexer.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexer.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_asy_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_asy_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_asy_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cl_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cl_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cl_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cocoa_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cocoa_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_cocoa_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_csound_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_csound_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_csound_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lasso_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lasso_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lasso_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lua_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lua_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_lua_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mapping.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mapping.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mapping.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mql_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mql_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_mql_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_openedge_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_openedge_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_openedge_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_php_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_php_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_php_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_postgres_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_postgres_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_postgres_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_scilab_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_scilab_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_scilab_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_sourcemod_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_sourcemod_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_sourcemod_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_stan_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_stan_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_stan_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_vim_builtins.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_vim_builtins.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/_vim_builtins.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/actionscript.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/actionscript.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/actionscript.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/agile.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/agile.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/agile.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/algebra.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/algebra.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/algebra.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ambient.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ambient.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ambient.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/apl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/apl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/apl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/archetype.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/archetype.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/archetype.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/asm.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/asm.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/asm.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/automation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/automation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/automation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/basic.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/basic.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/basic.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/business.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/business.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/business.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_cpp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_cpp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_cpp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_like.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_like.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/c_like.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/chapel.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/chapel.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/chapel.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/compiled.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/compiled.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/compiled.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/configs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/configs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/configs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/console.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/console.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/console.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/csound.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/csound.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/csound.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/css.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/css.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/css.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/d.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/d.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/d.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dalvik.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dalvik.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dalvik.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/data.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/data.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/data.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/diff.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/diff.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/diff.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dotnet.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dotnet.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dotnet.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dsls.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dsls.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dsls.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dylan.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dylan.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/dylan.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ecl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ecl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ecl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/eiffel.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/eiffel.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/eiffel.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/elm.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/elm.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/elm.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/erlang.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/erlang.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/erlang.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/esoteric.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/esoteric.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/esoteric.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ezhil.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ezhil.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ezhil.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/factor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/factor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/factor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fantom.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fantom.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fantom.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/felix.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/felix.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/felix.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fortran.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fortran.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/fortran.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/foxpro.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/foxpro.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/foxpro.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/functional.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/functional.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/functional.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/go.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/go.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/go.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/grammar_notation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/grammar_notation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/grammar_notation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graph.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graph.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graph.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graphics.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graphics.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/graphics.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haskell.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haskell.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haskell.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haxe.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haxe.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/haxe.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hdl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hdl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hdl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hexdump.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hexdump.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/hexdump.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/idl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/idl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/idl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/igor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/igor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/igor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/inferno.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/inferno.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/inferno.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/installers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/installers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/installers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/int_fiction.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/int_fiction.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/int_fiction.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/iolang.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/iolang.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/iolang.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/j.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/j.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/j.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/javascript.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/javascript.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/javascript.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/julia.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/julia.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/julia.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/jvm.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/jvm.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/jvm.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/lisp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/lisp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/lisp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/make.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/make.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/make.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/markup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/markup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/markup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/math.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/math.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/math.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/matlab.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/matlab.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/matlab.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ml.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ml.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ml.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modeling.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modeling.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modeling.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modula2.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modula2.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/modula2.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nimrod.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nimrod.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nimrod.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nit.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nit.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nit.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nix.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nix.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/nix.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/oberon.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/oberon.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/oberon.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/objective.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/objective.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/objective.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ooc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ooc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ooc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/other.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/other.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/other.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parasail.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parasail.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parasail.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parsers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parsers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/parsers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pascal.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pascal.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pascal.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pawn.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pawn.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/pawn.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/perl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/perl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/perl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/php.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/php.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/php.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/praat.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/praat.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/praat.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/prolog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/prolog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/prolog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/python.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/python.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/python.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/qvt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/qvt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/qvt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/r.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/r.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/r.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rdf.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rdf.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rdf.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rebol.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rebol.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rebol.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/resource.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/resource.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/resource.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/roboconf.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/roboconf.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/roboconf.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/robotframework.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/robotframework.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/robotframework.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ruby.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ruby.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/ruby.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rust.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rust.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/rust.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/scripting.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/scripting.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/scripting.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/shell.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/shell.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/shell.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/smalltalk.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/smalltalk.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/smalltalk.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/snobol.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/snobol.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/snobol.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/special.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/special.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/special.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/sql.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/sql.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/sql.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/supercollider.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/supercollider.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/supercollider.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/tcl.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/tcl.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/tcl.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/templates.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/templates.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/templates.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/testing.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/testing.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/testing.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/text.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/text.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/text.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textedit.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textedit.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textedit.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textfmts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textfmts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/textfmts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/theorem.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/theorem.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/theorem.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/trafficscript.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/trafficscript.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/trafficscript.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/urbi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/urbi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/urbi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/web.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/web.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/web.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/webmisc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/webmisc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/webmisc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/x10.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/x10.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/lexers/x10.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/modeline.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/modeline.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/modeline.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/plugin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/plugin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/plugin.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/regexopt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/regexopt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/regexopt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/scanner.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/scanner.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/scanner.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/sphinxext.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/sphinxext.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/sphinxext.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/style.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/style.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/style.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol_nu.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol_nu.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/algol_nu.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/arduino.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/arduino.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/arduino.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/autumn.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/autumn.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/autumn.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/borland.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/borland.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/borland.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/bw.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/bw.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/bw.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/colorful.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/colorful.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/colorful.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/default.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/default.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/default.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/emacs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/emacs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/emacs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/friendly.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/friendly.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/friendly.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/fruity.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/fruity.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/fruity.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/igor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/igor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/igor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/lovelace.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/lovelace.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/lovelace.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/manni.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/manni.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/manni.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/monokai.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/monokai.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/monokai.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/murphy.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/murphy.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/murphy.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/native.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/native.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/native.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_dark.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_dark.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_dark.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_light.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_light.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/paraiso_light.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/pastie.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/pastie.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/pastie.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/perldoc.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/perldoc.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/perldoc.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/rrt.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/rrt.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/rrt.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/tango.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/tango.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/tango.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/trac.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/trac.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/trac.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vim.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vim.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vim.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/vs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/xcode.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/xcode.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/styles/xcode.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/token.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/token.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/token.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/unistring.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/unistring.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/unistring.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/util.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/util.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/pygments/util.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/python_compatibility.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/python_compatibility.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/python_compatibility.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_compat.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_compat.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_compat.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_internal.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_internal.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_internal.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_reloader.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_reloader.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/_reloader.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/atom.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/atom.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/atom.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/cache.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/cache.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/cache.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/fixers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/fixers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/fixers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/iterio.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/iterio.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/iterio.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/jsrouting.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/jsrouting.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/jsrouting.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/limiter.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/limiter.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/limiter.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/lint.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/lint.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/lint.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/profiler.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/profiler.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/profiler.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/securecookie.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/securecookie.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/securecookie.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/sessions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/sessions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/sessions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/testtools.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/testtools.pyc
+@comment %%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/testtools.pycj
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/testtools.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/wrappers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/wrappers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/contrib/wrappers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/datastructures.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/datastructures.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/datastructures.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/console.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/console.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/console.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/repr.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/repr.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/repr.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/tbtools.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/tbtools.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/debug/tbtools.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/exceptions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/exceptions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/exceptions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/filesystem.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/filesystem.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/filesystem.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/formparser.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/formparser.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/formparser.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/http.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/http.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/http.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/local.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/local.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/local.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/posixemulation.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/posixemulation.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/posixemulation.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/routing.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/routing.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/routing.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/security.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/security.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/security.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/serving.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/serving.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/serving.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/test.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/test.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/test.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/testapp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/testapp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/testapp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/urls.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/urls.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/urls.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/useragents.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/useragents.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/useragents.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/utils.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/utils.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/utils.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wrappers.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wrappers.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wrappers.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wsgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wsgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/werkzeug/wsgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/_checkxapian.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/_checkxapian.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/_checkxapian.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/datastructures.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/datastructures.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/datastructures.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/errors.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/errors.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/errors.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldactions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldactions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldactions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldmappings.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldmappings.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/fieldmappings.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/highlight.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/highlight.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/highlight.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/indexerconnection.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/indexerconnection.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/indexerconnection.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/marshall.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/marshall.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/marshall.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/memutils.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/memutils.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/memutils.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/parsedate.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/parsedate.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/parsedate.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/replaylog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/replaylog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/replaylog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/schema.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/schema.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/schema.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/searchconnection.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/searchconnection.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/support/xappy/searchconnection.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/classic.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/classic.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/classic.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modern.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modern.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modern.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized_cms.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized_cms.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/modernized_cms.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/rightsidebar.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/rightsidebar.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/theme/rightsidebar.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/user.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/user.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/user.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/admin.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/admin.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/admin.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/login.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/login.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userform/login.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/changepass.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/changepass.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/changepass.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/notification.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/notification.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/notification.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oid.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oid.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oid.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oidserv.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oidserv.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/oidserv.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/prefs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/prefs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/prefs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/suid.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/suid.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/userprefs/suid.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/SubProcess.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/SubProcess.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/SubProcess.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/abuse.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/abuse.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/abuse.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/bdiff.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/bdiff.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/bdiff.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes_create.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes_create.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/chartypes_create.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/clock.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/clock.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/clock.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/daemon.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/daemon.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/daemon.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/dataset.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/dataset.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/dataset.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff3.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff3.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff3.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_text.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_text.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/diff_text.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/filesys.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/filesys.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/filesys.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/lock.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/lock.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/lock.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/moinoid.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/moinoid.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/moinoid.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/profile.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/profile.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/profile.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/pysupport.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/pysupport.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/pysupport.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/rpc_aggregator.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/rpc_aggregator.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/rpc_aggregator.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/thread_monitor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/thread_monitor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/thread_monitor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/timefuncs.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/timefuncs.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/timefuncs.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/web.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/web.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/util/web.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/version.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/version.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/version.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/_fallback_cgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/_fallback_cgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/_fallback_cgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/contexts.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/contexts.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/contexts.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/exceptions.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/exceptions.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/exceptions.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/flup_frontend.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/flup_frontend.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/flup_frontend.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/frontend.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/frontend.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/frontend.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/profile.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/profile.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/profile.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/request.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/request.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/request.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/serving.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/serving.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/serving.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/session.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/session.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/session.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/_documentation.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/_upgrade.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/_whatsnew.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/_whatsnew_history.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckcontextmenu.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdataprocessor.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdocumentfragment_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdocumentfragment_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdomrange.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdomrange_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdomrange_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckdomrangeiterator.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckeditingarea.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckelementpath.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckenterkey.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckevents.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckhtmliterator.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckicon.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckiecleanup.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckimagepreloader.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckkeystrokehandler.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckmenublock.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckmenublockpanel.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckmenuitem.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckpanel.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckspecialcombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckstyle.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbar.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarbreak_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarbreak_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarbutton.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarbuttonui.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarfontformatcombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarfontscombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarfontsizecombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarpanelbutton.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarspecialcombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fcktoolbarstylecombo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckw3crange.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckxml.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckxml_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/classes/fckxml_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fck_othercommands.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckblockquotecommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckcorestylecommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckfitwindow.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckindentcommands.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckjustifycommands.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fcklistcommands.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fcknamedcommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckpastewordcommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckremoveformatcommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckshowblocks.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fckstylecommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fcktablecommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/commandclasses/fcktextcolorcommand.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/fckconstants.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/fckeditorapi.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/fckjscoreextensions.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/fckscriptloader.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fck.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fck_contextmenu.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fck_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fck_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckbrowserinfo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckcodeformatter.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckcommands.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckconfig.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckdebug.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckdebug_empty.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckdialog.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckdocumentprocessor.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckdomtools.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcklanguagemanager.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcklisthandler.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcklistslib.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckplugins.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckregexlib.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckscayt.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckselection.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckselection_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckselection_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckstyles.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktablehandler.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktablehandler_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktablehandler_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktoolbaritems.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktoolbarset.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktools.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktools_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fcktools_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckundo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckurlparams.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckxhtml.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckxhtml_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckxhtml_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/_source/internals/fckxhtmlentities.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/behaviors/disablehandles.htc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/behaviors/showtableborders.htc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/fck_editorarea.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/fck_internal.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/fck_showtableborders_gecko.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_address.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_blockquote.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_div.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h1.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h4.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h5.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_h6.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_p.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/block_pre.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/fck_anchor.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/fck_flashlogo.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/fck_hiddenfield.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/fck_pagebreak.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/css/images/fck_plugin.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/common/fck_dialog_common.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/common/fck_dialog_common.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/common/images/locked.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/common/images/reset.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/common/images/unlocked.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_about.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_about/logo_fckeditor.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_about/logo_fredck.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_about/sponsors/spellchecker_net.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_anchor.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_button.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_checkbox.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_colorselector.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_div.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_docprops.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_docprops/fck_document_preview.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_flash.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_flash/fck_flash.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_flash/fck_flash_preview.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_form.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_hiddenfield.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_image.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_image/fck_image.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_image/fck_image_preview.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_link.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_link/fck_link.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_listprop.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_paste.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_radiobutton.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_replace.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_scayt.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_scayt/scayt_dialog.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_select.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_select/fck_select.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_smiley.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_source.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_specialchar.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_table.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_tablecell.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_template.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_template/images/template1.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_template/images/template2.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_template/images/template3.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_textarea.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dialog/fck_textfield.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dtd/fck_dtd_test.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dtd/fck_xhtml10strict.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/dtd/fck_xhtml10transitional.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/fckdebug.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/fckdialog.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/fckeditor.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/fckeditor.original.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/browser.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/browser.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmactualfolder.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmcreatefolder.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmfolders.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmresourceslist.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmresourcetype.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/frmupload.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/ButtonArrow.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/Folder.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/Folder32.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/FolderOpened.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/FolderOpened32.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/FolderUp.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/ai.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/avi.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/cs.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/dll.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/doc.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/exe.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/fla.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/gif.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/htm.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/html.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/js.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/png.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/swf.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/swt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/txt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/xls.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/xml.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/32/zip.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/ai.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/avi.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/bmp.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/cs.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/default.icon.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/dll.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/doc.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/exe.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/fla.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/gif.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/htm.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/html.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/jpg.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/js.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/mdb.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/mp3.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/pdf.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/png.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/ppt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/rdp.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/swf.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/swt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/txt.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/vsd.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/xls.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/xml.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/icons/zip.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/images/spacer.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/js/common.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/browser/default/js/fckxml.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/basexml.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/class_upload.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/commands.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/config.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/connector.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/io.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/upload.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/asp/util.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/aspx/config.ascx
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/aspx/connector.aspx
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/aspx/upload.aspx
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/ImageObject.cfc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_commands.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_connector.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_io.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_upload.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/cf_util.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/config.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/connector.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/image.cfc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/cfm/upload.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/lasso/config.lasso
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/lasso/connector.lasso
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/lasso/upload.lasso
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/basexml.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/commands.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/config.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/connector.cgi
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/io.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/upload.cgi
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/upload_fck.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/perl/util.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/basexml.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/commands.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/config.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/connector.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/io.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/phpcompat.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/upload.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/php/util.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/config.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/config.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/config.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/connector.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/connector.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/connector.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckcommands.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckcommands.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckcommands.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckconnector.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckconnector.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckconnector.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckoutput.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckoutput.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckoutput.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckutil.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckutil.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/fckutil.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/htaccess.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/upload.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/upload.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/upload.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/wsgi.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/wsgi.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/wsgi.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/zope.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/zope.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/py/zope.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/test.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/filemanager/connectors/uploadtest.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/anchor.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/arrow_ltr.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/arrow_rtl.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/angel_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/angry_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/broken_heart.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/cake.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/confused_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/cry_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/devil_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/embaressed_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/envelope.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/heart.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/kiss.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/lightbulb.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/omg_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/regular_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/sad_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/shades_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/teeth_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/thumbs_down.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/thumbs_up.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/tounge_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/smiley/msn/wink_smile.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/images/spacer.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/js/fckadobeair.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/js/fckeditorcode_gecko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/js/fckeditorcode_ie.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/_translationstatus.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/af.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ar.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/bg.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/bn.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/bs.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ca.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/cs.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/da.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/de.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/el.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/en-au.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/en-ca.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/en-uk.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/en.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/eo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/es.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/et.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/eu.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/fa.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/fi.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/fo.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/fr-ca.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/fr.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/gl.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/gu.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/he.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/hi.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/hr.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/hu.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/is.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/it.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ja.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/km.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ko.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/lt.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/lv.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/mn.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ms.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/nb.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/nl.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/no.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/pl.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/pt-br.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/pt.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ro.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/ru.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/sk.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/sl.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/sr-latn.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/sr.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/sv.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/th.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/tr.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/uk.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/vi.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/zh-cn.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/lang/zh.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/autogrow/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/bbcode/_sample/sample.config.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/bbcode/_sample/sample.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/bbcode/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/dragresizetable/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/fck_placeholder.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/de.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/en.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/es.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/fr.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/it.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/lang/pl.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/placeholder/placeholder.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/simplecommands/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/plugins/tablecommands/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/_fckviewstrips.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/fck_dialog.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/fck_dialog_ie6.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/fck_editor.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/fck_strip.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/dialog.sides.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/dialog.sides.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/dialog.sides.rtl.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/sprites.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/sprites.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.arrowright.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.buttonarrow.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.collapse.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.end.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.expand.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.separator.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/default/images/toolbar.start.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/fck_dialog.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/fck_dialog_ie6.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/fck_editor.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/fck_strip.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/dialog.sides.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/dialog.sides.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/dialog.sides.rtl.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/sprites.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/sprites.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.arrowright.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.bg.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.collapse.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.end.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.expand.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.separator.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/office2003/images/toolbar.start.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/fck_dialog.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/fck_dialog_ie6.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/fck_editor.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/fck_strip.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/dialog.sides.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/dialog.sides.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/dialog.sides.rtl.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/sprites.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/sprites.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.arrowright.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.buttonarrow.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.buttonbg.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.collapse.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.end.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.expand.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.separator.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/skins/silver/images/toolbar.start.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/wsc/ciframe.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/wsc/tmpFrameset.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/editor/wsc/w.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckconfig.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.afp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.asp
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.cfc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.lasso
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.pl
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor_php4.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckeditor_php5.php
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckpackager.xml
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckstyles.xml
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fcktemplates.xml
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/fckutils.cfm
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/FCKeditor/license.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/TWikiDrawPlugin/README
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/TWikiDrawPlugin/twikidraw.jar
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/anywikidraw/README
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/anywikidraw/lib/AnyWikiDrawForMoinMoin.jar
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/anywikidraw/lib/Splash.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/macro/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/macro/lang/en.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/macro/lang/it.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/macro/macro.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinattachment/attachment.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinattachment/fck_attachment.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinattachment/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinbehaviour/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinformat/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinimage/fck_image.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinimage/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinlink/fck_link.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinlink/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinunlink/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/moinurllib.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/placeholder/fck_placeholder.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/placeholder/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/placeholder/lang/en.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/placeholder/lang/it.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/placeholder/placeholder.gif
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/restrict_actions/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/selection/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/smiley/fck_smiley.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/smiley/fckplugin.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinFCKplugins/smiley/smile.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinfckconfig.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/applets/moinfckstyles.xml
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/css/common.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/css/msie.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/css/print.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/css/projection.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/css/screen.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/PythonPowered.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/alert.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/angry.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/attention.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/biggrin.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/checkmark.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/devil.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/draft.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/frown.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/icon-error.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/icon-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/idea.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-bottom.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-conflict.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-deleted.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-diff.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-edit.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-email.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-ftp.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-help.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-home.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-icon.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-inter.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-new.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-news.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-parent.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-print.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-raw.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-renamed.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-rss.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-search.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-show.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-subscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-telnet.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-top.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-unsubscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-updated.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-www.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-xml.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/moin-xml2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/ohwell.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/prio1.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/prio2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/prio3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/redface.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/sad.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/smile.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/smile2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/smile3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/smile4.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/star_off.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/star_on.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/thumbs-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/tired.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/classic/img/tongue.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/js/common.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/js/countdown.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/js/infobox.js
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/moindude.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/moinmoin.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/moinmoin_alpha.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/common/openid.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/favicon.ico
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/index.html
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/css/common.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/css/msie.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/css/print.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/css/projection.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/css/screen.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/PythonPowered.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/admon-caution.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/admon-important.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/admon-note.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/admon-tip.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/admon-warning.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/alert.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/angry.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/attention.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/biggrin.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/checkmark.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/devil.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/draft.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/frown.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/icon-error.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/icon-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/idea.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-bottom.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-conflict.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-deleted.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-diff.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-edit.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-email.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-ftp.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-help.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-home.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-icon.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-inter.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-new.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-news.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-parent.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-print.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-raw.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-renamed.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-rss.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-search.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-show.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-subscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-telnet.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-top.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-unsubscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-updated.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-www.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-xml.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/moin-xml2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/ohwell.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/prio1.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/prio2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/prio3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/redface.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/sad.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/smile.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/smile2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/smile3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/smile4.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/star_off.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/star_on.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/thumbs-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/tired.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modern/img/tongue.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/SlideShow.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/common.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/msie.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/print.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/projection.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/css/screen.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/PythonPowered.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/admon-caution.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/admon-important.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/admon-note.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/admon-tip.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/admon-warning.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/alert.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/angry.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/attention.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/biggrin.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/checkmark.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/devil.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/draft.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/frown.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/icon-error.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/icon-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/idea.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-action.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-bottom.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-conflict.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-deleted.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-diff.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-download.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-edit.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-email.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-ftp.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-help.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-home.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-icon.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-inter.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-jabber.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-new.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-news.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-parent.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-print.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-raw.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-readonly.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-renamed.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-rss.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-search.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-show.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-subscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-telnet.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-top.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-unsubscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-updated.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/moin-www.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/ohwell.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/prio1.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/prio2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/prio3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/redface.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/sad.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/smile.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/smile2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/smile3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/smile4.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/star_off.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/star_on.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/thumbs-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/tired.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/modernized/img/tongue.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/css/common.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/css/msie.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/css/print.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/css/projection.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/css/screen.css
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/PythonPowered.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/alert.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/angry.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/attention.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/biggrin.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/checkmark.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/devil.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/draft.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/frown.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/icon-error.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/icon-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/idea.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/logout.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-attach.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-bottom.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-conflict.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-deleted.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-diff.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-edit.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-email.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-ftp.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-help.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-home.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-icon.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-info.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-inter.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-new.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-news.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-parent.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-print.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-raw.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-renamed.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-rss.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-search.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-show.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-subscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-telnet.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-top.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-unsubscribe.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-updated.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-www.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-xml.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/moin-xml2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/ohwell.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/prio1.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/prio2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/prio3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/redface.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/sad.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/smile.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/smile2.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/smile3.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/smile4.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/star_off.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/star_on.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/thumbs-up.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/tired.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/rightsidebar/img/tongue.png
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/static/htdocs/robots.txt
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/utils.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/utils.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/web/utils.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/base.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/base.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/base.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/browser.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/browser.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/browser.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/dialog.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/dialog.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/dialog.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/html.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/html.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/widget/html.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikisync.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikisync.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikisync.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikiutil.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikiutil.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikiutil.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/marshal.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/marshal.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/marshal.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/util.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/util.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wikixml/util.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/wsgiapp.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/wsgiapp.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/wsgiapp.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/HelloWorld.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/HelloWorld.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/HelloWorld.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/ProcessMail.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/ProcessMail.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/ProcessMail.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/RemoteScript.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/RemoteScript.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/RemoteScript.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/UpdateGroup.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/UpdateGroup.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/UpdateGroup.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/WhoAmI.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/WhoAmI.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/WhoAmI.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/__init__.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/__init__.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/__init__.pyo
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/putClientInfo.py
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/putClientInfo.pyc
+%%PYTHON_SITELIBDIR%%/MoinMoin/xmlrpc/putClientInfo.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/__init__.py
+%%PYTHON_SITELIBDIR%%/jabberbot/__init__.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/__init__.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/bot.py
+%%PYTHON_SITELIBDIR%%/jabberbot/bot.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/bot.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/capat.py
+%%PYTHON_SITELIBDIR%%/jabberbot/capat.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/capat.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/commands.py
+%%PYTHON_SITELIBDIR%%/jabberbot/commands.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/commands.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/config.py
+%%PYTHON_SITELIBDIR%%/jabberbot/config.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/config.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/i18n.py
+%%PYTHON_SITELIBDIR%%/jabberbot/i18n.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/i18n.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/oob.py
+%%PYTHON_SITELIBDIR%%/jabberbot/oob.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/oob.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/xmlrpcbot.py
+%%PYTHON_SITELIBDIR%%/jabberbot/xmlrpcbot.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/xmlrpcbot.pyo
+%%PYTHON_SITELIBDIR%%/jabberbot/xmppbot.py
+%%PYTHON_SITELIBDIR%%/jabberbot/xmppbot.pyc
+%%PYTHON_SITELIBDIR%%/jabberbot/xmppbot.pyo
+%%DATADIR%%/config/logging/README
+%%DATADIR%%/config/logging/abuse
+%%DATADIR%%/config/logging/logfile
+%%DATADIR%%/config/logging/logfile_debug_auth
+%%DATADIR%%/config/logging/stderr
+%%DATADIR%%/config/more_samples/README
+%%DATADIR%%/config/more_samples/auth_session_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/auth_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/dicts_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/groups_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/jabber_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/ldap_2servers_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/ldap_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/mail_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/mailimportconf.py
+%%DATADIR%%/config/more_samples/openid_sreg_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/openid_teams_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/secrets_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/security_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/smb_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/ui_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/user_wikiconfig_snippet
+%%DATADIR%%/config/more_samples/xapian_wikiconfig_snippet
+%%DATADIR%%/config/wikiconfig.py
+%%DATADIR%%/config/wikifarm/farmconfig.py
+%%DATADIR%%/config/wikifarm/mywiki.py
+%%DATADIR%%/data/cache/README
+%%DATADIR%%/data/dict/dummy_dict
+%%DATADIR%%/data/edit-log
+%%DATADIR%%/data/event-log
+%%DATADIR%%/data/intermap.txt
+%%DATADIR%%/data/meta
+%%DATADIR%%/data/pages/BadContent/current
+%%DATADIR%%/data/pages/BadContent/revisions/00000001
+%%DATADIR%%/data/plugin/__init__.py
+%%DATADIR%%/data/plugin/action/__init__.py
+%%DATADIR%%/data/plugin/converter/__init__.py
+%%DATADIR%%/data/plugin/events/__init__.py
+%%DATADIR%%/data/plugin/filter/__init__.py
+%%DATADIR%%/data/plugin/formatter/__init__.py
+%%DATADIR%%/data/plugin/macro/__init__.py
+%%DATADIR%%/data/plugin/parser/__init__.py
+%%DATADIR%%/data/plugin/theme/__init__.py
+%%DATADIR%%/data/plugin/userprefs/__init__.py
+%%DATADIR%%/data/plugin/xmlrpc/__init__.py
+%%DATADIR%%/data/user/README
+%%DATADIR%%/server/moin
+%%DATADIR%%/server/moin.ajp
+%%DATADIR%%/server/moin.cgi
+%%DATADIR%%/server/moin.fcgi
+%%DATADIR%%/server/moin.scgi
+%%DATADIR%%/server/moin.wsgi
+%%DATADIR%%/server/test.wsgi
+%%DATADIR%%/server/wikiserverconfig.py
+%%DATADIR%%/underlay/pages/BadContent/current
+%%DATADIR%%/underlay/pages/BadContent/revisions/00000001
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/00_needs_fixing.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Brazilian_Portuguese--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Bulgarian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Chinese_Taiwan--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Croatian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Czech--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Danish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Dutch--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--course_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--not_translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/English--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Finnish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/French--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Galician--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Galician--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Galician--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Galician--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Galician--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--course_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/German--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hebrew--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hebrew--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hebrew--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hebrew--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hebrew--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hindi--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hindi--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hindi--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hindi--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hindi--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Hungarian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Indonesian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--course_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Italian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Japanese--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Korean--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Latvian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Lithuanian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Mongolian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--course_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Norwegian_Bokmal--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Persian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Polish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Portuguese--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Romanian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--course_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Russian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Serbian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Simplified_Chinese--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--essential_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovak--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Slovenian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Spanish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--admin_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--all_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--essential_category_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Swedish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Turkish--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--all_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--all_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--all_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--all_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--essential_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--essential_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--essential_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--optional_help_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--optional_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--optional_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--optional_template_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/attachments/Ukrainian--translated_system_pages.zip
+%%DATADIR%%/underlay/pages/LanguageSetup/current
+%%DATADIR%%/underlay/pages/LanguageSetup/revisions/00000001
diff --git a/www/node10/Makefile b/www/node10/Makefile
new file mode 100644
index 000000000000..17992d5c28e0
--- /dev/null
+++ b/www/node10/Makefile
@@ -0,0 +1,108 @@
+# $FreeBSD$
+
+PORTNAME= node
+PORTVERSION= 10.23.0
+DISTVERSIONPREFIX= v
+PORTREVISION= 1
+CATEGORIES= www
+MASTER_SITES= http://nodejs.org/dist/v${PORTVERSION}/
+PKGNAMESUFFIX= 10
+
+MAINTAINER= bhughes@FreeBSD.org
+COMMENT= V8 JavaScript for client and server
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BROKEN_SSL= libressl libressl-devel
+BROKEN_SSL_REASON= Node.js 10.x LTS requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
+
+OPTIONS_DEFINE= BUNDLED_SSL DOCS NLS DTRACE
+OPTIONS_DEFAULT= DTRACE
+OPTIONS_DEFAULT_FreeBSD_11= BUNDLED_SSL
+OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${OPSYS}_${OSREL:R}}
+OPTIONS_SUB= yes
+
+.if !exists(/usr/sbin/dtrace)
+OPTIONS_EXCLUDE+= DTRACE
+.endif
+
+OPTIONS_EXCLUDE_aarch64= DTRACE
+# dt_modtext:/usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c(820): arm not implemented
+OPTIONS_EXCLUDE_armv6= DTRACE
+OPTIONS_EXCLUDE_armv7= DTRACE
+OPTIONS_EXCLUDE_powerpc64= DTRACE
+OPTIONS_EXCLUDE_powerpc64le= DTRACE
+
+BUNDLED_SSL_DESC= Use node.js's bundled OpenSSL implementation
+BUNDLED_SSL_USES_OFF= ssl
+BUNDLED_SSL_CONFIGURE_OFF= --shared-openssl --openssl-use-def-ca-store
+BUNDLED_SSL_RUN_DEPENDS_OFF= ca_root_nss>=0:security/ca_root_nss
+
+NLS_CONFIGURE_ON= --with-intl=system-icu
+NLS_BUILD_DEPENDS= icu>=64.2:devel/icu
+NLS_LIB_DEPENDS= libicui18n.so:devel/icu
+
+DTRACE_CONFIGURE_ON= --with-dtrace
+
+USES= compiler:c++11-lib gmake python:2.7,build pkgconfig \
+ localbase shebangfix
+
+HAS_CONFIGURE= yes
+
+CONFLICTS_INSTALL= node12-[0-9]* node14-[0-9]* node-[0-9]*
+
+CONFIGURE_ARGS= --prefix=${PREFIX_RELDEST} \
+ --without-npm \
+ --shared-cares \
+ --shared-libuv \
+ --shared-nghttp2 \
+ --shared-zlib
+
+SHEBANG_FILES= tools/specialize_node_d.py tools/genv8constants.py
+
+PREFIX_RELDEST= ${PREFIX:S,^${DESTDIR},,}
+REINPLACE_ARGS= -i ''
+MAKE_ENV+= CC.host=${CC} CFLAGS.host="${CFLAGS}" \
+ CXX.host=${CXX} CXXFLAGS.host="${CXXFLAGS}" \
+ LINK.host=${CXX} LDFLAGS.host="${LDFLAGS}"
+
+BUILD_DEPENDS+= c-ares>=1.15.0:dns/c-ares\
+ libuv>=1.34.2:devel/libuv \
+ libnghttp2>=1.41.0:www/libnghttp2 \
+ objdump:devel/binutils
+LIB_DEPENDS+= libcares.so:dns/c-ares\
+ libuv.so:devel/libuv \
+ libnghttp2.so:www/libnghttp2
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1200085
+BROKEN_SSL+= base
+.endif
+
+.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64 && ${ARCH} != i386
+CONFIGURE_ARGS+=--openssl-no-asm
+.elif (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-common.gypi
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
+ ${WRKSRC}/deps/v8/gypfiles/v8.gyp
+
+post-configure:
+ # Post-process Makefile and *.mk files created by node-gyp and remove
+ # all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
+ # before all -I../deps/* for bundled code. This can cause build
+ # breakages if the dependency is installed in ${LOCALBASE}. The
+ # USES+=localbase # above will ensure that we pick up includes for real
+ # external dependencies.
+ ${FIND} ${WRKSRC}/out -type f -print0 \
+ | ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node
+
+.include <bsd.port.mk>
diff --git a/www/node10/distinfo b/www/node10/distinfo
new file mode 100644
index 000000000000..59cc4fe970b3
--- /dev/null
+++ b/www/node10/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1603979909
+SHA256 (node-v10.23.0.tar.gz) = d93041d1d1e75cef6c562c29b63333b2f39a16de3cb0310b695130cea2ae7f27
+SIZE (node-v10.23.0.tar.gz) = 46560417
diff --git a/www/node10/files/extra-patch-common.gypi b/www/node10/files/extra-patch-common.gypi
new file mode 100644
index 000000000000..8e817a2959c9
--- /dev/null
+++ b/www/node10/files/extra-patch-common.gypi
@@ -0,0 +1,13 @@
+--- common.gypi.orig 2019-10-01 15:32:40.000000000 +0200
++++ common.gypi 2019-10-16 12:47:09.236138000 +0200
+@@ -390,8 +390,8 @@
+ 'ldflags': [ '-m32' ],
+ }],
+ [ 'target_arch=="ppc64" and OS!="aix"', {
+- 'cflags': [ '-m64', '-mminimal-toc' ],
+- 'ldflags': [ '-m64' ],
++ 'cflags': [ '-m64' ],
++ 'ldflags': [ '-m64' ],
+ }],
+ [ 'target_arch=="s390x"', {
+ 'cflags': [ '-m64', '-march=z196' ],
diff --git a/www/node10/files/patch-common.gypi b/www/node10/files/patch-common.gypi
new file mode 100644
index 000000000000..3f24b48b797b
--- /dev/null
+++ b/www/node10/files/patch-common.gypi
@@ -0,0 +1,18 @@
+--- common.gypi.orig 2020-06-08 21:52:35 UTC
++++ common.gypi
+@@ -509,15 +509,6 @@
+ 'libraries': [ '-lelf' ],
+ }],
+ ['OS=="freebsd"', {
+- 'conditions': [
+- ['"0" < llvm_version < "4.0"', {
+- # Use this flag because on FreeBSD std::pairs copy constructor is non-trivial.
+- # Doesn't apply to llvm 4.0 (FreeBSD 11.1) or later.
+- # Refs: https://lists.freebsd.org/pipermail/freebsd-toolchain/2016-March/002094.html
+- # Refs: https://svnweb.freebsd.org/ports/head/www/node/Makefile?revision=444555&view=markup
+- 'cflags': [ '-D_LIBCPP_TRIVIAL_PAIR_COPY_CTOR=1' ],
+- }],
+- ],
+ 'ldflags': [
+ '-Wl,--export-dynamic',
+ ],
diff --git a/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl-cl.gypi b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl-cl.gypi
new file mode 100644
index 000000000000..814c284e473f
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl-cl.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/config/archs/linux-elf/asm/openssl-cl.gypi.orig 2020-06-02 14:43:34 UTC
++++ deps/openssl/config/archs/linux-elf/asm/openssl-cl.gypi
+@@ -25,12 +25,11 @@
+ ],
+ 'openssl_cflags_linux-elf': [
+ '-Wa,--noexecstack',
+- '-Wall -O3 -fomit-frame-pointer',
++ '-Wall -O3',
+ '-pthread',
+- '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '',
+ ],
+ 'openssl_cli_srcs_linux-elf': [
+ 'openssl/apps/asn1pars.c',
diff --git a/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl.gypi b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl.gypi
new file mode 100644
index 000000000000..a987849c6eec
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_asm_openssl.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/config/archs/linux-elf/asm/openssl.gypi.orig 2020-06-02 14:43:34 UTC
++++ deps/openssl/config/archs/linux-elf/asm/openssl.gypi
+@@ -722,12 +722,11 @@
+ ],
+ 'openssl_cflags_linux-elf': [
+ '-Wa,--noexecstack',
+- '-Wall -O3 -fomit-frame-pointer',
++ '-Wall -O3',
+ '-pthread',
+- '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '',
+ ],
+ },
+ 'include_dirs': [
diff --git a/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
new file mode 100644
index 000000000000..061ff03fb028
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi.orig 2019-05-28 21:32:15 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi
+@@ -7,12 +7,11 @@
+ 'OPENSSL_PIC',
+ ],
+ 'openssl_cflags_linux-elf': [
+- '-Wall -O3 -fomit-frame-pointer',
++ '-Wall -O3',
+ '-pthread',
+- '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '',
+ ],
+ 'openssl_cli_srcs_linux-elf': [
+ 'openssl/apps/asn1pars.c',
diff --git a/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
new file mode 100644
index 000000000000..f11e73db2996
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi.orig 2019-05-29 20:16:06 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi
+@@ -691,12 +691,11 @@
+ 'OPENSSL_PIC',
+ ],
+ 'openssl_cflags_linux-elf': [
+- '-Wall -O3 -fomit-frame-pointer',
++ '-Wall -O3',
+ '-pthread',
+- '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '',
+ ],
+ },
+ 'include_dirs': [
diff --git a/www/node10/files/patch-deps_openssl_config_bn__conf__asm.h b/www/node10/files/patch-deps_openssl_config_bn__conf__asm.h
new file mode 100644
index 000000000000..0d2a636e2676
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_bn__conf__asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/bn_conf_asm.h.orig 2018-05-11 12:01:43 UTC
++++ deps/openssl/config/bn_conf_asm.h
+@@ -21,8 +21,8 @@
+ # include "./archs/VC-WIN32/asm/crypto/include/internal/bn_conf.h"
+ #elif defined(_WIN32) && defined(_M_X64)
+ # include "./archs/VC-WIN64A/asm/crypto/include/internal/bn_conf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/asm/crypto/include/internal/bn_conf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/asm/crypto/include/internal/bn_conf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/asm/crypto/include/internal/bn_conf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_config_bn__conf__no-asm.h b/www/node10/files/patch-deps_openssl_config_bn__conf__no-asm.h
new file mode 100644
index 000000000000..54910b76feb6
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_bn__conf__no-asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/bn_conf_no-asm.h.orig 2019-05-28 21:32:16 UTC
++++ deps/openssl/config/bn_conf_no-asm.h
+@@ -23,8 +23,8 @@
+ # include "./archs/VC-WIN64A/no-asm/crypto/include/internal/bn_conf.h"
+ #elif defined(_WIN32) && defined(_M_ARM64)
+ # include "./archs/VC-WIN64-ARM/no-asm/crypto/include/internal/bn_conf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/no-asm/crypto/include/internal/bn_conf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/no-asm/crypto/include/internal/bn_conf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/no-asm/crypto/include/internal/bn_conf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_config_dso__conf__asm.h b/www/node10/files/patch-deps_openssl_config_dso__conf__asm.h
new file mode 100644
index 000000000000..d5d0e9d9b4ea
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_dso__conf__asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/dso_conf_asm.h.orig 2018-05-11 12:02:07 UTC
++++ deps/openssl/config/dso_conf_asm.h
+@@ -21,8 +21,8 @@
+ # include "./archs/VC-WIN32/asm/crypto/include/internal/dso_conf.h"
+ #elif defined(_WIN32) && defined(_M_X64)
+ # include "./archs/VC-WIN64A/asm/crypto/include/internal/dso_conf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/asm/crypto/include/internal/dso_conf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/asm/crypto/include/internal/dso_conf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/asm/crypto/include/internal/dso_conf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_config_dso__conf__no-asm.h b/www/node10/files/patch-deps_openssl_config_dso__conf__no-asm.h
new file mode 100644
index 000000000000..d8b36237d51c
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_dso__conf__no-asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/dso_conf_no-asm.h.orig 2019-05-28 21:32:16 UTC
++++ deps/openssl/config/dso_conf_no-asm.h
+@@ -23,8 +23,8 @@
+ # include "./archs/VC-WIN64A/no-asm/crypto/include/internal/dso_conf.h"
+ #elif defined(_WIN32) && defined(_M_ARM64)
+ # include "./archs/VC-WIN64-ARM/no-asm/crypto/include/internal/dso_conf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/no-asm/crypto/include/internal/dso_conf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/no-asm/crypto/include/internal/dso_conf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/no-asm/crypto/include/internal/dso_conf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_config_opensslconf__asm.h b/www/node10/files/patch-deps_openssl_config_opensslconf__asm.h
new file mode 100644
index 000000000000..814bd24dc300
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_opensslconf__asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/opensslconf_asm.h.orig 2018-05-11 11:27:00 UTC
++++ deps/openssl/config/opensslconf_asm.h
+@@ -108,8 +108,8 @@
+ # include "./archs/VC-WIN32/asm/include/openssl/opensslconf.h"
+ #elif defined(_WIN32) && defined(_M_X64)
+ # include "./archs/VC-WIN64A/asm/include/openssl/opensslconf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/asm/include/openssl/opensslconf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/asm/include/openssl/opensslconf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/asm/include/openssl/opensslconf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_config_opensslconf__no-asm.h b/www/node10/files/patch-deps_openssl_config_opensslconf__no-asm.h
new file mode 100644
index 000000000000..c6568e994ebe
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_config_opensslconf__no-asm.h
@@ -0,0 +1,13 @@
+--- deps/openssl/config/opensslconf_no-asm.h.orig 2019-05-28 21:32:16 UTC
++++ deps/openssl/config/opensslconf_no-asm.h
+@@ -18,8 +18,8 @@
+ # include "./archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h"
+ #elif defined(_WIN32) && defined(_M_ARM64)
+ # include "./archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h"
+-#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+-# include "./archs/BSD-x86/no-asm/include/openssl/opensslconf.h"
++//#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
++//# include "./archs/BSD-x86/no-asm/include/openssl/opensslconf.h"
+ #elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+ # include "./archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h"
+ #elif defined(__sun) && defined(__i386__)
diff --git a/www/node10/files/patch-deps_openssl_openssl-cl__no__asm.gypi b/www/node10/files/patch-deps_openssl_openssl-cl__no__asm.gypi
new file mode 100644
index 000000000000..4026ea3d537f
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_openssl-cl__no__asm.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/openssl-cl_no_asm.gypi.orig 2019-07-31 17:44:59 UTC
++++ deps/openssl/openssl-cl_no_asm.gypi
+@@ -1,4 +1,5 @@
+ {
++ 'defines': ['OPENSSL_NO_ASM'],
+ 'conditions': [
+ ['target_arch=="ppc" and OS=="aix"', {
+ 'includes': ['config/archs/aix-gcc/no-asm/openssl-cl.gypi'],
+@@ -43,7 +44,7 @@
+ 'includes': ['config/archs/linux-x86_64/no-asm/openssl-cl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl-cl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl-cl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node10/files/patch-deps_openssl_openssl__no__asm.gypi b/www/node10/files/patch-deps_openssl_openssl__no__asm.gypi
new file mode 100644
index 000000000000..a8cb353e9aab
--- /dev/null
+++ b/www/node10/files/patch-deps_openssl_openssl__no__asm.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/openssl_no_asm.gypi.orig 2019-07-31 17:45:01 UTC
++++ deps/openssl/openssl_no_asm.gypi
+@@ -44,7 +44,7 @@
+ 'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node10/files/patch-deps_v8_src_arm_cpu-arm.cc b/www/node10/files/patch-deps_v8_src_arm_cpu-arm.cc
new file mode 100644
index 000000000000..ceafdbfaa376
--- /dev/null
+++ b/www/node10/files/patch-deps_v8_src_arm_cpu-arm.cc
@@ -0,0 +1,22 @@
+--- deps/v8/src/arm/cpu-arm.cc.orig 2018-08-15 13:53:24 UTC
++++ deps/v8/src/arm/cpu-arm.cc
+@@ -7,6 +7,9 @@
+ #ifdef __QNXNTO__
+ #include <sys/mman.h> // for cache flushing.
+ #undef MAP_TYPE
++#elif defined(__FreeBSD__)
++#include <sys/types.h>
++#include <machine/sysarch.h> // for cache flushing.
+ #else
+ #include <sys/syscall.h> // for cache flushing.
+ #endif
+@@ -24,6 +27,9 @@ void CpuFeatures::FlushICache(void* star
+ #if !defined(USE_SIMULATOR)
+ #if V8_OS_QNX
+ msync(start, size, MS_SYNC | MS_INVALIDATE_ICACHE);
++#elif defined(__FreeBSD__)
++ struct arm_sync_icache_args args = { .addr = (uintptr_t)start, .len = size };
++ sysarch(ARM_SYNC_ICACHE, (void *)&args);
+ #else
+ register uint32_t beg asm("r0") = reinterpret_cast<uint32_t>(start);
+ register uint32_t end asm("r1") = beg + size;
diff --git a/www/node10/files/patch-deps_v8_src_base_platform_platform-freebsd.cc b/www/node10/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
new file mode 100644
index 000000000000..2247e5ad98e1
--- /dev/null
+++ b/www/node10/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
@@ -0,0 +1,50 @@
+--- deps/v8/src/base/platform/platform-freebsd.cc.orig 2018-08-15 13:53:24 UTC
++++ deps/v8/src/base/platform/platform-freebsd.cc
+@@ -86,5 +86,47 @@ std::vector<OS::SharedLibraryAddress> OS
+
+ void OS::SignalCodeMovingGC() {}
+
++#ifdef __arm__
++
++bool OS::ArmUsingHardFloat() {
++// GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
++// the Floating Point ABI used (PCS stands for Procedure Call Standard).
++// We use these as well as a couple of other defines to statically determine
++// what FP ABI used.
++// GCC versions 4.4 and below don't support hard-fp.
++// GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
++// __ARM_PCS_VFP.
++
++#define GCC_VERSION \
++ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
++#if GCC_VERSION >= 40600 && !defined(__clang__)
++#if defined(__ARM_PCS_VFP)
++ return true;
++#else
++ return false;
++#endif
++
++#elif GCC_VERSION < 40500 && !defined(__clang__)
++ return false;
++
++#else
++#if defined(__ARM_PCS_VFP)
++ return true;
++#elif defined(__ARM_PCS) || defined(__SOFTFP__) || defined(__SOFTFP) || \
++ !defined(__VFP_FP__)
++ return false;
++#else
++#error \
++ "Your version of compiler does not report the FP ABI compiled for." \
++ "Please report it on this issue" \
++ "http://code.google.com/p/v8/issues/detail?id=2140"
++
++#endif
++#endif
++#undef GCC_VERSION
++}
++
++#endif // def __arm__
++
+ } // namespace base
+ } // namespace v8
diff --git a/www/node10/files/patch-deps_v8_src_libsampler_sampler.cc b/www/node10/files/patch-deps_v8_src_libsampler_sampler.cc
new file mode 100644
index 000000000000..1548b15aae4b
--- /dev/null
+++ b/www/node10/files/patch-deps_v8_src_libsampler_sampler.cc
@@ -0,0 +1,19 @@
+--- deps/v8/src/libsampler/sampler.cc.orig 2019-03-05 15:16:28 UTC
++++ deps/v8/src/libsampler/sampler.cc
+@@ -550,9 +550,13 @@ void SignalHandler::FillRegisterState(void* context, R
+ state->sp = reinterpret_cast<void*>(mcontext.mc_rsp);
+ state->fp = reinterpret_cast<void*>(mcontext.mc_rbp);
+ #elif V8_HOST_ARCH_ARM
+- state->pc = reinterpret_cast<void*>(mcontext.mc_r15);
+- state->sp = reinterpret_cast<void*>(mcontext.mc_r13);
+- state->fp = reinterpret_cast<void*>(mcontext.mc_r11);
++ state->pc = reinterpret_cast<void*>(mcontext.__gregs[_REG_PC]);
++ state->sp = reinterpret_cast<void*>(mcontext.__gregs[_REG_SP]);
++ state->fp = reinterpret_cast<void*>(mcontext.__gregs[_REG_FP]);
++#elif V8_TARGET_ARCH_PPC_BE
++ state->pc = reinterpret_cast<void*>(mcontext.mc_srr0);
++ state->sp = reinterpret_cast<void*>(mcontext.mc_frame[1]);
++ state->fp = reinterpret_cast<void*>(mcontext.mc_frame[31]);
+ #endif // V8_HOST_ARCH_*
+ #elif V8_OS_NETBSD
+ #if V8_HOST_ARCH_IA32
diff --git a/www/node10/files/patch-icu68 b/www/node10/files/patch-icu68
new file mode 100644
index 000000000000..69dbad34273e
--- /dev/null
+++ b/www/node10/files/patch-icu68
@@ -0,0 +1,109 @@
+Regressed by https://github.com/unicode-org/icu/commit/c3fe7e09d844
+
+../deps/v8/src/objects/intl-objects.cc:246:22: error: use of undeclared identifier 'FALSE'
+ FALSE, &status);
+ ^
+../deps/v8/src/objects/intl-objects.cc:425:22: error: use of undeclared identifier 'FALSE'
+ FALSE, &status);
+ ^
+../deps/v8/src/objects/intl-objects.cc:660:22: error: use of undeclared identifier 'FALSE'
+ FALSE, &status);
+ ^
+../deps/v8/src/objects/intl-objects.cc:799:22: error: use of undeclared identifier 'FALSE'
+ FALSE, &status);
+ ^
+../deps/v8/src/runtime/runtime-intl.cc:88:66: error: use of undeclared identifier 'TRUE'
+ uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, TRUE, &error);
+ ^
+../deps/v8/src/runtime/runtime-intl.cc:135:66: error: use of undeclared identifier 'FALSE'
+ uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, FALSE, &error);
+ ^
+../deps/v8/src/runtime/runtime-intl.cc:167:22: error: use of undeclared identifier 'FALSE'
+ FALSE, &status);
+ ^
+../deps/v8/src/runtime/runtime-intl.cc:402:9: error: use of undeclared identifier 'FALSE'
+ FALSE, GetUCharBufferFromFlat(flat1, &sap1, length1), length1);
+ ^
+../deps/v8/src/runtime/runtime-intl.cc:404:9: error: use of undeclared identifier 'FALSE'
+ FALSE, GetUCharBufferFromFlat(flat2, &sap2, length2), length2);
+ ^
+
+--- deps/v8/src/objects/intl-objects.cc.orig 2020-09-15 13:25:38 UTC
++++ deps/v8/src/objects/intl-objects.cc
+@@ -243,7 +243,7 @@ void SetResolvedDateSettings(Isolate* isolate, const i
+ char result[ULOC_FULLNAME_CAPACITY];
+ status = U_ZERO_ERROR;
+ uloc_toLanguageTag(icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY,
+- FALSE, &status);
++ false, &status);
+ if (U_SUCCESS(status)) {
+ JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"),
+ factory->NewStringFromAsciiChecked(result),
+@@ -422,7 +422,7 @@ void SetResolvedNumericSettings(Isolate* isolate, cons
+ char result[ULOC_FULLNAME_CAPACITY];
+ UErrorCode status = U_ZERO_ERROR;
+ uloc_toLanguageTag(icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY,
+- FALSE, &status);
++ false, &status);
+ if (U_SUCCESS(status)) {
+ JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"),
+ factory->NewStringFromAsciiChecked(result),
+@@ -657,7 +657,7 @@ void SetResolvedCollatorSettings(Isolate* isolate,
+ char result[ULOC_FULLNAME_CAPACITY];
+ status = U_ZERO_ERROR;
+ uloc_toLanguageTag(icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY,
+- FALSE, &status);
++ false, &status);
+ if (U_SUCCESS(status)) {
+ JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"),
+ factory->NewStringFromAsciiChecked(result),
+@@ -796,7 +796,7 @@ void SetResolvedBreakIteratorSettings(Isolate* isolate
+ char result[ULOC_FULLNAME_CAPACITY];
+ status = U_ZERO_ERROR;
+ uloc_toLanguageTag(icu_locale.getName(), result, ULOC_FULLNAME_CAPACITY,
+- FALSE, &status);
++ false, &status);
+ if (U_SUCCESS(status)) {
+ JSObject::SetProperty(resolved, factory->NewStringFromStaticChars("locale"),
+ factory->NewStringFromAsciiChecked(result),
+--- deps/v8/src/runtime/runtime-intl.cc.orig 2020-09-15 13:25:38 UTC
++++ deps/v8/src/runtime/runtime-intl.cc
+@@ -85,7 +85,7 @@ RUNTIME_FUNCTION(Runtime_CanonicalizeLanguageTag) {
+ char result[ULOC_FULLNAME_CAPACITY];
+
+ // Force strict BCP47 rules.
+- uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, TRUE, &error);
++ uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, true, &error);
+
+ if (U_FAILURE(error) || error == U_STRING_NOT_TERMINATED_WARNING) {
+ return *factory->NewStringFromAsciiChecked(kInvalidTag);
+@@ -132,7 +132,7 @@ RUNTIME_FUNCTION(Runtime_AvailableLocalesOf) {
+
+ error = U_ZERO_ERROR;
+ // No need to force strict BCP47 rules.
+- uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, FALSE, &error);
++ uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, false, &error);
+ if (U_FAILURE(error) || error == U_STRING_NOT_TERMINATED_WARNING) {
+ // This shouldn't happen, but lets not break the user.
+ continue;
+@@ -164,7 +164,7 @@ RUNTIME_FUNCTION(Runtime_GetDefaultICULocale) {
+ char result[ULOC_FULLNAME_CAPACITY];
+ UErrorCode status = U_ZERO_ERROR;
+ uloc_toLanguageTag(default_locale.getName(), result, ULOC_FULLNAME_CAPACITY,
+- FALSE, &status);
++ false, &status);
+ if (U_SUCCESS(status)) {
+ return *factory->NewStringFromAsciiChecked(result);
+ }
+@@ -399,9 +399,9 @@ RUNTIME_FUNCTION(Runtime_InternalCompare) {
+ std::unique_ptr<uc16[]> sap1;
+ std::unique_ptr<uc16[]> sap2;
+ icu::UnicodeString string_val1(
+- FALSE, GetUCharBufferFromFlat(flat1, &sap1, length1), length1);
++ false, GetUCharBufferFromFlat(flat1, &sap1, length1), length1);
+ icu::UnicodeString string_val2(
+- FALSE, GetUCharBufferFromFlat(flat2, &sap2, length2), length2);
++ false, GetUCharBufferFromFlat(flat2, &sap2, length2), length2);
+ result = collator->compare(string_val1, string_val2, status);
+ }
+ if (U_FAILURE(status)) return isolate->ThrowIllegalOperation();
diff --git a/www/node10/files/patch-node.gypi b/www/node10/files/patch-node.gypi
new file mode 100644
index 000000000000..a28bd89c098d
--- /dev/null
+++ b/www/node10/files/patch-node.gypi
@@ -0,0 +1,12 @@
+--- node.gypi.orig 2019-07-31 17:45:05 UTC
++++ node.gypi
+@@ -316,6 +316,9 @@
+ ['openssl_fips != ""', {
+ 'defines': [ 'NODE_FIPS_MODE' ],
+ }],
++ ['openssl_no_asm==1', {
++ 'defines': [ 'OPENSSL_NO_ASM' ],
++ }],
+ [ 'node_shared_openssl=="false"', {
+ 'dependencies': [
+ './deps/openssl/openssl.gyp:openssl',
diff --git a/www/node10/pkg-descr b/www/node10/pkg-descr
new file mode 100644
index 000000000000..76a5a3c0625d
--- /dev/null
+++ b/www/node10/pkg-descr
@@ -0,0 +1,6 @@
+Node.js is a JavaScript runtime built on Chrome's V8 JavaScript
+engine. Node.js uses an event-driven, non-blocking I/O model that
+makes it lightweight and efficient. Node.js' package ecosystem,
+npm, is the largest ecosystem of open source libraries in the world.
+
+WWW: https://nodejs.org/
diff --git a/www/node10/pkg-message b/www/node10/pkg-message
new file mode 100644
index 000000000000..ddea08386149
--- /dev/null
+++ b/www/node10/pkg-message
@@ -0,0 +1,7 @@
+[
+{ type: install
+ message: <<EOM
+Note: If you need npm (Node Package Manager), please install www/npm.
+EOM
+}
+]
diff --git a/www/node10/pkg-plist b/www/node10/pkg-plist
new file mode 100644
index 000000000000..e6fc5c48f1b3
--- /dev/null
+++ b/www/node10/pkg-plist
@@ -0,0 +1,431 @@
+bin/node
+include/node/common.gypi
+include/node/config.gypi
+include/node/libplatform/libplatform.h
+include/node/libplatform/libplatform-export.h
+include/node/libplatform/v8-tracing.h
+include/node/node.h
+include/node/node_api.h
+include/node/node_api_types.h
+include/node/node_buffer.h
+include/node/node_object_wrap.h
+include/node/node_version.h
+%%BUNDLED_SSL%%include/node/openssl/aes.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/asn1.h
+%%BUNDLED_SSL%%include/node/openssl/asn1_mac.h
+%%BUNDLED_SSL%%include/node/openssl/asn1err.h
+%%BUNDLED_SSL%%include/node/openssl/asn1t.h
+%%BUNDLED_SSL%%include/node/openssl/async.h
+%%BUNDLED_SSL%%include/node/openssl/asyncerr.h
+%%BUNDLED_SSL%%include/node/openssl/bio.h
+%%BUNDLED_SSL%%include/node/openssl/bioerr.h
+%%BUNDLED_SSL%%include/node/openssl/blowfish.h
+%%BUNDLED_SSL%%include/node/openssl/bn.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/bnerr.h
+%%BUNDLED_SSL%%include/node/openssl/buffer.h
+%%BUNDLED_SSL%%include/node/openssl/buffererr.h
+%%BUNDLED_SSL%%include/node/openssl/camellia.h
+%%BUNDLED_SSL%%include/node/openssl/cast.h
+%%BUNDLED_SSL%%include/node/openssl/cmac.h
+%%BUNDLED_SSL%%include/node/openssl/cms.h
+%%BUNDLED_SSL%%include/node/openssl/cmserr.h
+%%BUNDLED_SSL%%include/node/openssl/comp.h
+%%BUNDLED_SSL%%include/node/openssl/comperr.h
+%%BUNDLED_SSL%%include/node/openssl/conf.h
+%%BUNDLED_SSL%%include/node/openssl/conf_api.h
+%%BUNDLED_SSL%%include/node/openssl/conferr.h
+%%BUNDLED_SSL%%include/node/openssl/crypto.h
+%%BUNDLED_SSL%%include/node/openssl/cryptoerr.h
+%%BUNDLED_SSL%%include/node/openssl/ct.h
+%%BUNDLED_SSL%%include/node/openssl/cterr.h
+%%BUNDLED_SSL%%include/node/openssl/des.h
+%%BUNDLED_SSL%%include/node/openssl/dh.h
+%%BUNDLED_SSL%%include/node/openssl/dherr.h
+%%BUNDLED_SSL%%include/node/openssl/dsa.h
+%%BUNDLED_SSL%%include/node/openssl/dsaerr.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/dtls1.h
+%%BUNDLED_SSL%%include/node/openssl/e_os2.h
+%%BUNDLED_SSL%%include/node/openssl/ebcdic.h
+%%BUNDLED_SSL%%include/node/openssl/ec.h
+%%BUNDLED_SSL%%include/node/openssl/ecdh.h
+%%BUNDLED_SSL%%include/node/openssl/ecdsa.h
+%%BUNDLED_SSL%%include/node/openssl/ecerr.h
+%%BUNDLED_SSL%%include/node/openssl/engine.h
+%%BUNDLED_SSL%%include/node/openssl/engineerr.h
+%%BUNDLED_SSL%%include/node/openssl/err.h
+%%BUNDLED_SSL%%include/node/openssl/evp.h
+%%BUNDLED_SSL%%include/node/openssl/evperr.h
+%%BUNDLED_SSL%%include/node/openssl/hmac.h
+%%BUNDLED_SSL%%include/node/openssl/idea.h
+%%BUNDLED_SSL%%include/node/openssl/kdf.h
+%%BUNDLED_SSL%%include/node/openssl/kdferr.h
+%%BUNDLED_SSL%%include/node/openssl/lhash.h
+%%BUNDLED_SSL%%include/node/openssl/md2.h
+%%BUNDLED_SSL%%include/node/openssl/md4.h
+%%BUNDLED_SSL%%include/node/openssl/md5.h
+%%BUNDLED_SSL%%include/node/openssl/mdc2.h
+%%BUNDLED_SSL%%include/node/openssl/modes.h
+%%BUNDLED_SSL%%include/node/openssl/obj_mac.h
+%%BUNDLED_SSL%%include/node/openssl/objects.h
+%%BUNDLED_SSL%%include/node/openssl/objectserr.h
+%%BUNDLED_SSL%%include/node/openssl/ocsp.h
+%%BUNDLED_SSL%%include/node/openssl/ocsperr.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/opensslv.h
+%%BUNDLED_SSL%%include/node/openssl/ossl_typ.h
+%%BUNDLED_SSL%%include/node/openssl/pem.h
+%%BUNDLED_SSL%%include/node/openssl/pem2.h
+%%BUNDLED_SSL%%include/node/openssl/pemerr.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs12.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs12err.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs7.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs7err.h
+%%BUNDLED_SSL%%include/node/openssl/rand.h
+%%BUNDLED_SSL%%include/node/openssl/rand_drbg.h
+%%BUNDLED_SSL%%include/node/openssl/randerr.h
+%%BUNDLED_SSL%%include/node/openssl/rc2.h
+%%BUNDLED_SSL%%include/node/openssl/rc4.h
+%%BUNDLED_SSL%%include/node/openssl/rc5.h
+%%BUNDLED_SSL%%include/node/openssl/ripemd.h
+%%BUNDLED_SSL%%include/node/openssl/rsa.h
+%%BUNDLED_SSL%%include/node/openssl/rsaerr.h
+%%BUNDLED_SSL%%include/node/openssl/safestack.h
+%%BUNDLED_SSL%%include/node/openssl/seed.h
+%%BUNDLED_SSL%%include/node/openssl/sha.h
+%%BUNDLED_SSL%%include/node/openssl/srp.h
+%%BUNDLED_SSL%%include/node/openssl/srtp.h
+%%BUNDLED_SSL%%include/node/openssl/ssl.h
+%%BUNDLED_SSL%%include/node/openssl/ssl2.h
+%%BUNDLED_SSL%%include/node/openssl/ssl3.h
+%%BUNDLED_SSL%%include/node/openssl/sslerr.h
+%%BUNDLED_SSL%%include/node/openssl/stack.h
+%%BUNDLED_SSL%%include/node/openssl/store.h
+%%BUNDLED_SSL%%include/node/openssl/storeerr.h
+%%BUNDLED_SSL%%include/node/openssl/symhacks.h
+%%BUNDLED_SSL%%include/node/openssl/tls1.h
+%%BUNDLED_SSL%%include/node/openssl/ts.h
+%%BUNDLED_SSL%%include/node/openssl/tserr.h
+%%BUNDLED_SSL%%include/node/openssl/txt_db.h
+%%BUNDLED_SSL%%include/node/openssl/ui.h
+%%BUNDLED_SSL%%include/node/openssl/uierr.h
+%%BUNDLED_SSL%%include/node/openssl/whrlpool.h
+%%BUNDLED_SSL%%include/node/openssl/x509.h
+%%BUNDLED_SSL%%include/node/openssl/x509_vfy.h
+%%BUNDLED_SSL%%include/node/openssl/x509err.h
+%%BUNDLED_SSL%%include/node/openssl/x509v3.h
+%%BUNDLED_SSL%%include/node/openssl/x509v3err.h
+include/node/v8-inspector-protocol.h
+include/node/v8-inspector.h
+include/node/v8-platform.h
+include/node/v8-profiler.h
+include/node/v8-testing.h
+include/node/v8-util.h
+include/node/v8-value-serializer-version.h
+include/node/v8-version.h
+include/node/v8-version-string.h
+include/node/v8.h
+include/node/v8config.h
+%%DTRACE%%lib/dtrace/node.d
+@(,,444) man/man1/node.1.gz
+%%PORTDOCS%%%%DOCSDIR%%/gdbinit
+%%PORTDOCS%%%%DOCSDIR%%/lldb_commands.py
+%%PORTDOCS%%%%DOCSDIR%%/lldbinit
+share/systemtap/tapset/node.stp
diff --git a/www/node12/Makefile b/www/node12/Makefile
new file mode 100644
index 000000000000..a14c7e50a3f5
--- /dev/null
+++ b/www/node12/Makefile
@@ -0,0 +1,111 @@
+# $FreeBSD$
+
+PORTNAME= node
+PORTVERSION= 12.20.0
+DISTVERSIONPREFIX= v
+CATEGORIES= www
+MASTER_SITES= http://nodejs.org/dist/v${PORTVERSION}/
+PKGNAMESUFFIX= 12
+
+MAINTAINER= bhughes@FreeBSD.org
+COMMENT= V8 JavaScript for client and server
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BROKEN_SSL= libressl libressl-devel
+BROKEN_SSL_REASON= Node.js 12.x LTS requires OpenSSL 1.1.x or the BUNDLED_SSL option enabled
+ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le
+
+OPTIONS_DEFINE= BUNDLED_SSL DOCS NLS DTRACE
+OPTIONS_DEFAULT= DTRACE
+OPTIONS_DEFAULT_FreeBSD_11= BUNDLED_SSL
+OPTIONS_DEFAULT+= ${OPTIONS_DEFAULT_${OPSYS}_${OSREL:R}}
+OPTIONS_SUB= yes
+
+.if !exists(/usr/sbin/dtrace)
+OPTIONS_EXCLUDE+= DTRACE
+.endif
+
+OPTIONS_EXCLUDE_aarch64= DTRACE
+# dt_modtext:/usr/src/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c(820): arm not implemented
+OPTIONS_EXCLUDE_armv6= DTRACE
+OPTIONS_EXCLUDE_armv7= DTRACE
+OPTIONS_EXCLUDE_powerpc64= DTRACE
+OPTIONS_EXCLUDE_powerpc64le= DTRACE
+
+BUNDLED_SSL_DESC= Use node.js's bundled OpenSSL implementation
+BUNDLED_SSL_USES_OFF= ssl
+BUNDLED_SSL_CONFIGURE_OFF= --shared-openssl --openssl-use-def-ca-store
+BUNDLED_SSL_RUN_DEPENDS_OFF= ca_root_nss>=0:security/ca_root_nss
+
+NLS_CONFIGURE_ON= --with-intl=system-icu
+NLS_BUILD_DEPENDS= icu>=67.1:devel/icu
+NLS_LIB_DEPENDS= libicui18n.so:devel/icu
+
+DTRACE_CONFIGURE_ON= --with-dtrace
+
+USES= compiler:c++11-lib gmake python:2.7,build pkgconfig \
+ localbase shebangfix
+
+HAS_CONFIGURE= yes
+
+CONFLICTS_INSTALL= node10-[0-9]* node14-[0-9]* node-[0-9]*
+
+CONFIGURE_ARGS= --prefix=${PREFIX_RELDEST} \
+ --without-npm \
+ --shared-cares \
+ --shared-libuv \
+ --shared-nghttp2 \
+ --shared-zlib
+
+SHEBANG_FILES= tools/specialize_node_d.py tools/genv8constants.py
+
+PREFIX_RELDEST= ${PREFIX:S,^${DESTDIR},,}
+REINPLACE_ARGS= -i ''
+MAKE_ENV+= CC.host=${CC} CFLAGS.host="${CFLAGS}" \
+ CXX.host=${CXX} CXXFLAGS.host="${CXXFLAGS}" \
+ LINK.host=${CXX} LDFLAGS.host="${LDFLAGS}"
+
+BUILD_DEPENDS+= c-ares>=1.16.1:dns/c-ares \
+ libuv>=1.40.0:devel/libuv \
+ libnghttp2>=1.41.0:www/libnghttp2 \
+ objdump:devel/binutils
+LIB_DEPENDS+= libcares.so:dns/c-ares\
+ libuv.so:devel/libuv \
+ libnghttp2.so:www/libnghttp2
+
+.include <bsd.port.options.mk>
+
+.if ${OPSYS} == FreeBSD && ${OSVERSION} < 1200085
+BROKEN_SSL+= base
+.endif
+
+.if ${ARCH} == armv6 || ${ARCH} == armv7
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-tools_v8__gypfiles_v8.gyp
+.elif (defined(PPC_ABI) && ${PPC_ABI} == ELFv2) || ${ARCH} == powerpc64le
+EXTRA_PATCHES= ${PATCHDIR}/extra-patch-common.gypi
+.endif
+
+.if ${PORT_OPTIONS:MBUNDLED_SSL} && ${ARCH} != amd64
+CONFIGURE_ARGS+=--openssl-no-asm
+.endif
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
+ ${WRKSRC}/tools/v8_gypfiles/v8.gyp
+
+post-configure:
+ # Post-process Makefile and *.mk files created by node-gyp and remove
+ # all occurrences of -I${LOCALBASE}/include. C*FLAGS include this
+ # before all -I../deps/* for bundled code. This can cause build
+ # breakages if the dependency is installed in ${LOCALBASE}. The
+ # USES+=localbase # above will ensure that we pick up includes for real
+ # external dependencies.
+ ${FIND} ${WRKSRC}/out -type f -print0 \
+ | ${XARGS} -0 ${REINPLACE_CMD} -e "s|-I${LOCALBASE}/include||g"
+
+post-install:
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/node
+
+.include <bsd.port.mk>
diff --git a/www/node12/distinfo b/www/node12/distinfo
new file mode 100644
index 000000000000..16457af7e4c4
--- /dev/null
+++ b/www/node12/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1606257052
+SHA256 (node-v12.20.0.tar.gz) = b91065ebe60981faa0e1f0a37d1788154141c710bb0521635a900895a7ce8dd8
+SIZE (node-v12.20.0.tar.gz) = 53497742
diff --git a/www/node12/files/extra-patch-common.gypi b/www/node12/files/extra-patch-common.gypi
new file mode 100644
index 000000000000..8e817a2959c9
--- /dev/null
+++ b/www/node12/files/extra-patch-common.gypi
@@ -0,0 +1,13 @@
+--- common.gypi.orig 2019-10-01 15:32:40.000000000 +0200
++++ common.gypi 2019-10-16 12:47:09.236138000 +0200
+@@ -390,8 +390,8 @@
+ 'ldflags': [ '-m32' ],
+ }],
+ [ 'target_arch=="ppc64" and OS!="aix"', {
+- 'cflags': [ '-m64', '-mminimal-toc' ],
+- 'ldflags': [ '-m64' ],
++ 'cflags': [ '-m64' ],
++ 'ldflags': [ '-m64' ],
+ }],
+ [ 'target_arch=="s390x"', {
+ 'cflags': [ '-m64', '-march=z196' ],
diff --git a/www/node12/files/extra-patch-tools_v8__gypfiles_v8.gyp b/www/node12/files/extra-patch-tools_v8__gypfiles_v8.gyp
new file mode 100644
index 000000000000..56c68f309309
--- /dev/null
+++ b/www/node12/files/extra-patch-tools_v8__gypfiles_v8.gyp
@@ -0,0 +1,11 @@
+--- tools/v8_gypfiles/v8.gyp.orig 2020-04-25 08:58:14 UTC
++++ tools/v8_gypfiles/v8.gyp
+@@ -809,7 +809,7 @@
+ }],
+ # Platforms that don't have Compare-And-Swap (CAS) support need to link atomic library
+ # to implement atomic memory access
+- ['v8_current_cpu in ["mips", "mipsel", "mips64", "mips64el", "ppc", "arm"]', {
++ ['v8_current_cpu in ["mips", "mipsel", "mips64", "mips64el", "ppc"]', {
+ 'link_settings': {
+ 'libraries': ['-latomic', ],
+ },
diff --git a/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi b/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
new file mode 100644
index 000000000000..aae558fe58db
--- /dev/null
+++ b/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl-cl.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi.orig 2019-08-06 20:46:23 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl-cl.gypi
+@@ -12,7 +12,7 @@
+ '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '-pthread',
+ ],
+ 'openssl_cli_srcs_linux-elf': [
+ 'openssl/apps/asn1pars.c',
diff --git a/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi b/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
new file mode 100644
index 000000000000..552266b703f0
--- /dev/null
+++ b/www/node12/files/patch-deps_openssl_config_archs_linux-elf_no-asm_openssl.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi.orig 2019-08-06 20:46:23 UTC
++++ deps/openssl/config/archs/linux-elf/no-asm/openssl.gypi
+@@ -696,7 +696,7 @@
+ '-Wall -O3 -fomit-frame-pointer',
+ ],
+ 'openssl_ex_libs_linux-elf': [
+- '-ldl -pthread',
++ '-pthread',
+ ],
+ },
+ 'include_dirs': [
diff --git a/www/node12/files/patch-deps_openssl_openssl-cl__no__asm.gypi b/www/node12/files/patch-deps_openssl_openssl-cl__no__asm.gypi
new file mode 100644
index 000000000000..5164a41cab19
--- /dev/null
+++ b/www/node12/files/patch-deps_openssl_openssl-cl__no__asm.gypi
@@ -0,0 +1,17 @@
+--- deps/openssl/openssl-cl_no_asm.gypi.orig 2020-10-06 18:05:13 UTC
++++ deps/openssl/openssl-cl_no_asm.gypi
+@@ -1,4 +1,5 @@
+ {
++ 'defines': ['OPENSSL_NO_ASM'],
+ 'conditions': [
+ ['target_arch=="ppc" and OS=="aix"', {
+ 'includes': ['config/archs/aix-gcc/no-asm/openssl-cl.gypi'],
+@@ -47,7 +48,7 @@
+ 'includes': ['config/archs/linux64-mips64/no-asm/openssl-cl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl-cl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl-cl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node12/files/patch-deps_openssl_openssl__no__asm.gypi b/www/node12/files/patch-deps_openssl_openssl__no__asm.gypi
new file mode 100644
index 000000000000..aba4a4ff4b66
--- /dev/null
+++ b/www/node12/files/patch-deps_openssl_openssl__no__asm.gypi
@@ -0,0 +1,11 @@
+--- deps/openssl/openssl_no_asm.gypi.orig 2020-10-06 18:05:13 UTC
++++ deps/openssl/openssl_no_asm.gypi
+@@ -48,7 +48,7 @@
+ 'includes': ['config/archs/linux64-mips64/no-asm/openssl.gypi'],
+ }, {
+ # Other architectures don't use assembly
+- 'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'],
++ 'includes': ['config/archs/linux-elf/no-asm/openssl.gypi'],
+ }],
+ ],
+ }
diff --git a/www/node12/files/patch-deps_v8_src_base_platform_platform-freebsd.cc b/www/node12/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
new file mode 100644
index 000000000000..d1f61a84b37b
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_base_platform_platform-freebsd.cc
@@ -0,0 +1,62 @@
+--- deps/v8/src/base/platform/platform-freebsd.cc.orig 2020-01-07 22:07:49 UTC
++++ deps/v8/src/base/platform/platform-freebsd.cc
+@@ -81,8 +81,8 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLib
+ lib_name = std::string(path);
+ }
+ result.push_back(SharedLibraryAddress(
+- lib_name, reinterpret_cast<uintptr_t>(map->kve_start),
+- reinterpret_cast<uintptr_t>(map->kve_end)));
++ lib_name, static_cast<uintptr_t>(map->kve_start),
++ static_cast<uintptr_t>(map->kve_end)));
+ }
+
+ start += ssize;
+@@ -93,6 +93,48 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLib
+ }
+
+ void OS::SignalCodeMovingGC() {}
++
++#ifdef __arm__
++
++bool OS::ArmUsingHardFloat() {
++// GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
++// the Floating Point ABI used (PCS stands for Procedure Call Standard).
++// We use these as well as a couple of other defines to statically determine
++// what FP ABI used.
++// GCC versions 4.4 and below don't support hard-fp.
++// GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
++// __ARM_PCS_VFP.
++
++#define GCC_VERSION \
++ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
++#if GCC_VERSION >= 40600 && !defined(__clang__)
++#if defined(__ARM_PCS_VFP)
++ return true;
++#else
++ return false;
++#endif
++
++#elif GCC_VERSION < 40500 && !defined(__clang__)
++ return false;
++
++#else
++#if defined(__ARM_PCS_VFP)
++ return true;
++#elif defined(__ARM_PCS) || defined(__SOFTFP__) || defined(__SOFTFP) || \
++ !defined(__VFP_FP__)
++ return false;
++#else
++#error \
++ "Your version of compiler does not report the FP ABI compiled for." \
++ "Please report it on this issue" \
++ "http://code.google.com/p/v8/issues/detail?id=2140"
++
++#endif
++#endif
++#undef GCC_VERSION
++}
++
++#endif // def __arm__
+
+ void OS::AdjustSchedulingParams() {}
+
diff --git a/www/node12/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc b/www/node12/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
new file mode 100644
index 000000000000..726f3e7a0d31
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_codegen_arm_cpu-arm.cc
@@ -0,0 +1,22 @@
+--- deps/v8/src/codegen/arm/cpu-arm.cc.orig 2019-08-20 17:14:50 UTC
++++ deps/v8/src/codegen/arm/cpu-arm.cc
+@@ -7,6 +7,9 @@
+ #ifdef __QNXNTO__
+ #include <sys/mman.h> // for cache flushing.
+ #undef MAP_TYPE // NOLINT
++#elif defined(__FreeBSD__)
++#include <sys/types.h>
++#include <machine/sysarch.h> // for cache flushing.
+ #else
+ #include <sys/syscall.h> // for cache flushing.
+ #endif
+@@ -25,6 +28,9 @@ V8_NOINLINE void CpuFeatures::FlushICache(void* start,
+ #if !defined(USE_SIMULATOR)
+ #if V8_OS_QNX
+ msync(start, size, MS_SYNC | MS_INVALIDATE_ICACHE);
++#elif defined(__FreeBSD__)
++ struct arm_sync_icache_args args = { .addr = (uintptr_t)start, .len = size };
++ sysarch(ARM_SYNC_ICACHE, (void *)&args);
+ #else
+ register uint32_t beg asm("r0") = reinterpret_cast<uint32_t>(start);
+ register uint32_t end asm("r1") = beg + size;
diff --git a/www/node12/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h b/www/node12/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
new file mode 100644
index 000000000000..044fd3a292f3
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_codegen_ppc_constants-ppc.h
@@ -0,0 +1,20 @@
+--- deps/v8/src/codegen/ppc/constants-ppc.h.orig 2019-09-09 16:27:17 UTC
++++ deps/v8/src/codegen/ppc/constants-ppc.h
+@@ -34,7 +34,7 @@
+ #define ABI_PASSES_HANDLES_IN_REGS 0
+ #endif
+
+-#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || V8_TARGET_LITTLE_ENDIAN || \
++#if !V8_HOST_ARCH_PPC || !V8_TARGET_ARCH_PPC64 || \
+ (defined(_CALL_ELF) && _CALL_ELF == 2)
+ #define ABI_RETURNS_OBJECT_PAIRS_IN_REGS 1
+ #else
+@@ -43,7 +43,7 @@
+
+ #if !V8_HOST_ARCH_PPC || \
+ (V8_TARGET_ARCH_PPC64 && \
+- (V8_TARGET_LITTLE_ENDIAN || (defined(_CALL_ELF) && _CALL_ELF == 2)))
++ (defined(_CALL_ELF) && _CALL_ELF == 2))
+ #define ABI_CALL_VIA_IP 1
+ #else
+ #define ABI_CALL_VIA_IP 0
diff --git a/www/node12/files/patch-deps_v8_src_compiler_backend_instruction-selector.cc b/www/node12/files/patch-deps_v8_src_compiler_backend_instruction-selector.cc
new file mode 100644
index 000000000000..2038a1e3c910
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_compiler_backend_instruction-selector.cc
@@ -0,0 +1,11 @@
+--- deps/v8/src/compiler/backend/instruction-selector.cc.orig 2020-07-22 15:26:52 UTC
++++ deps/v8/src/compiler/backend/instruction-selector.cc
+@@ -2788,7 +2788,7 @@ void InstructionSelector::VisitCall(Node* node, BasicB
+ switch (call_descriptor->kind()) {
+ case CallDescriptor::kCallAddress: {
+ int misc_field = static_cast<int>(call_descriptor->ParameterCount());
+-#if defined(_AIX)
++#if defined(_AIX) || (V8_TARGET_ARCH_PPC_BE && (!defined(_CALL_ELF) || _CALL_ELF == 1))
+ // Highest misc_field bit is used on AIX to indicate if a CFunction call
+ // has function descriptor or not.
+ misc_field |= call_descriptor->HasFunctionDescriptor()
diff --git a/www/node12/files/patch-deps_v8_src_compiler_backend_ppc_code-generator-ppc.cc b/www/node12/files/patch-deps_v8_src_compiler_backend_ppc_code-generator-ppc.cc
new file mode 100644
index 000000000000..8a2fd0d75a1a
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_compiler_backend_ppc_code-generator-ppc.cc
@@ -0,0 +1,11 @@
+--- deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc.orig 2020-04-21 11:38:50 UTC
++++ deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc
+@@ -1026,7 +1026,7 @@
+ Label start_call;
+ bool isWasmCapiFunction =
+ linkage()->GetIncomingDescriptor()->IsWasmCapiFunction();
+-#if defined(_AIX)
++#if defined(_AIX) || (V8_TARGET_ARCH_PPC_BE && (!defined(_CALL_ELF) || _CALL_ELF == 1))
+ // AIX/PPC64BE Linux uses a function descriptor
+ int kNumParametersMask = kHasFunctionDescriptorBitMask - 1;
+ num_parameters = kNumParametersMask & misc_field;
diff --git a/www/node12/files/patch-deps_v8_src_execution_simulator.h b/www/node12/files/patch-deps_v8_src_execution_simulator.h
new file mode 100644
index 000000000000..70b5ae1171bb
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_execution_simulator.h
@@ -0,0 +1,11 @@
+--- deps/v8/src/execution/simulator.h.orig 2019-11-21 21:14:01 UTC
++++ deps/v8/src/execution/simulator.h
+@@ -122,7 +122,7 @@
+
+ DISABLE_CFI_ICALL Return Call(Args... args) {
+ // When running without a simulator we call the entry directly.
+-#if V8_OS_AIX
++#if V8_OS_AIX || (V8_TARGET_ARCH_PPC_BE && (!defined(_CALL_ELF) || _CALL_ELF == 1))
+ // AIX ABI requires function descriptors (FD). Artificially create a pseudo
+ // FD to ensure correct dispatch to generated code. The 'volatile'
+ // declaration is required to avoid the compiler from not observing the
diff --git a/www/node12/files/patch-deps_v8_src_libsampler_sampler.cc b/www/node12/files/patch-deps_v8_src_libsampler_sampler.cc
new file mode 100644
index 000000000000..9c1992530cfd
--- /dev/null
+++ b/www/node12/files/patch-deps_v8_src_libsampler_sampler.cc
@@ -0,0 +1,19 @@
+--- deps/v8/src/libsampler/sampler.cc.orig 2019-08-20 17:14:50 UTC
++++ deps/v8/src/libsampler/sampler.cc
+@@ -477,9 +477,13 @@ void SignalHandler::FillRegisterState(void* context, R
+ state->sp = reinterpret_cast<void*>(mcontext.mc_rsp);
+ state->fp = reinterpret_cast<void*>(mcontext.mc_rbp);
+ #elif V8_HOST_ARCH_ARM
+- state->pc = reinterpret_cast<void*>(mcontext.mc_r15);
+- state->sp = reinterpret_cast<void*>(mcontext.mc_r13);
+- state->fp = reinterpret_cast<void*>(mcontext.mc_r11);
++ state->pc = reinterpret_cast<void*>(mcontext.__gregs[_REG_PC]);
++ state->sp = reinterpret_cast<void*>(mcontext.__gregs[_REG_SP]);
++ state->fp = reinterpret_cast<void*>(mcontext.__gregs[_REG_FP]);
++#elif V8_TARGET_ARCH_PPC_BE
++ state->pc = reinterpret_cast<void*>(mcontext.mc_srr0);
++ state->sp = reinterpret_cast<void*>(mcontext.mc_frame[1]);
++ state->fp = reinterpret_cast<void*>(mcontext.mc_frame[31]);
+ #endif // V8_HOST_ARCH_*
+ #elif V8_OS_NETBSD
+ #if V8_HOST_ARCH_IA32
diff --git a/www/node12/files/patch-node.gypi b/www/node12/files/patch-node.gypi
new file mode 100644
index 000000000000..57c16c71f210
--- /dev/null
+++ b/www/node12/files/patch-node.gypi
@@ -0,0 +1,12 @@
+--- node.gypi.orig 2020-05-26 11:53:34 UTC
++++ node.gypi
+@@ -323,6 +323,9 @@
+ ['openssl_fips != "" or openssl_is_fips=="true"', {
+ 'defines': [ 'NODE_FIPS_MODE' ],
+ }],
++ ['openssl_no_asm==1', {
++ 'defines': [ 'OPENSSL_NO_ASM' ],
++ }],
+ [ 'node_shared_openssl=="false"', {
+ 'dependencies': [
+ './deps/openssl/openssl.gyp:openssl',
diff --git a/www/node12/pkg-descr b/www/node12/pkg-descr
new file mode 100644
index 000000000000..76a5a3c0625d
--- /dev/null
+++ b/www/node12/pkg-descr
@@ -0,0 +1,6 @@
+Node.js is a JavaScript runtime built on Chrome's V8 JavaScript
+engine. Node.js uses an event-driven, non-blocking I/O model that
+makes it lightweight and efficient. Node.js' package ecosystem,
+npm, is the largest ecosystem of open source libraries in the world.
+
+WWW: https://nodejs.org/
diff --git a/www/node12/pkg-message b/www/node12/pkg-message
new file mode 100644
index 000000000000..ddea08386149
--- /dev/null
+++ b/www/node12/pkg-message
@@ -0,0 +1,7 @@
+[
+{ type: install
+ message: <<EOM
+Note: If you need npm (Node Package Manager), please install www/npm.
+EOM
+}
+]
diff --git a/www/node12/pkg-plist b/www/node12/pkg-plist
new file mode 100644
index 000000000000..5989720d1f0b
--- /dev/null
+++ b/www/node12/pkg-plist
@@ -0,0 +1,478 @@
+bin/node
+include/node/common.gypi
+include/node/config.gypi
+include/node/js_native_api.h
+include/node/js_native_api_types.h
+include/node/libplatform/libplatform.h
+include/node/libplatform/libplatform-export.h
+include/node/libplatform/v8-tracing.h
+include/node/node.h
+include/node/node_api.h
+include/node/node_api_types.h
+include/node/node_buffer.h
+include/node/node_object_wrap.h
+include/node/node_version.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/BSD-x86_64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN32/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64-ARM/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/VC-WIN64A/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/aix64-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-arm64-cc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin-i386-cc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/darwin64-x86_64-cc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-aarch64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-armv4/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-elf/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-mips64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-ppc64le/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x32/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux-x86_64/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux32-s390x/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/linux64-s390x/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris-x86-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/include/internal/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/crypto/include/internal/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/archs/solaris64-x86_64-gcc/no-asm/include/progs.h
+%%BUNDLED_SSL%%include/node/openssl/aes.h
+%%BUNDLED_SSL%%include/node/openssl/asn1.h
+%%BUNDLED_SSL%%include/node/openssl/asn1_mac.h
+%%BUNDLED_SSL%%include/node/openssl/asn1err.h
+%%BUNDLED_SSL%%include/node/openssl/asn1t.h
+%%BUNDLED_SSL%%include/node/openssl/async.h
+%%BUNDLED_SSL%%include/node/openssl/asyncerr.h
+%%BUNDLED_SSL%%include/node/openssl/bio.h
+%%BUNDLED_SSL%%include/node/openssl/bioerr.h
+%%BUNDLED_SSL%%include/node/openssl/blowfish.h
+%%BUNDLED_SSL%%include/node/openssl/bn.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/bn_conf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/bnerr.h
+%%BUNDLED_SSL%%include/node/openssl/buffer.h
+%%BUNDLED_SSL%%include/node/openssl/buffererr.h
+%%BUNDLED_SSL%%include/node/openssl/camellia.h
+%%BUNDLED_SSL%%include/node/openssl/cast.h
+%%BUNDLED_SSL%%include/node/openssl/cmac.h
+%%BUNDLED_SSL%%include/node/openssl/cms.h
+%%BUNDLED_SSL%%include/node/openssl/cmserr.h
+%%BUNDLED_SSL%%include/node/openssl/comp.h
+%%BUNDLED_SSL%%include/node/openssl/comperr.h
+%%BUNDLED_SSL%%include/node/openssl/conf.h
+%%BUNDLED_SSL%%include/node/openssl/conf_api.h
+%%BUNDLED_SSL%%include/node/openssl/conferr.h
+%%BUNDLED_SSL%%include/node/openssl/crypto.h
+%%BUNDLED_SSL%%include/node/openssl/cryptoerr.h
+%%BUNDLED_SSL%%include/node/openssl/ct.h
+%%BUNDLED_SSL%%include/node/openssl/cterr.h
+%%BUNDLED_SSL%%include/node/openssl/des.h
+%%BUNDLED_SSL%%include/node/openssl/dh.h
+%%BUNDLED_SSL%%include/node/openssl/dherr.h
+%%BUNDLED_SSL%%include/node/openssl/dsa.h
+%%BUNDLED_SSL%%include/node/openssl/dsaerr.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/dso_conf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/dtls1.h
+%%BUNDLED_SSL%%include/node/openssl/e_os2.h
+%%BUNDLED_SSL%%include/node/openssl/ebcdic.h
+%%BUNDLED_SSL%%include/node/openssl/ec.h
+%%BUNDLED_SSL%%include/node/openssl/ecdh.h
+%%BUNDLED_SSL%%include/node/openssl/ecdsa.h
+%%BUNDLED_SSL%%include/node/openssl/ecerr.h
+%%BUNDLED_SSL%%include/node/openssl/engine.h
+%%BUNDLED_SSL%%include/node/openssl/engineerr.h
+%%BUNDLED_SSL%%include/node/openssl/err.h
+%%BUNDLED_SSL%%include/node/openssl/evp.h
+%%BUNDLED_SSL%%include/node/openssl/evperr.h
+%%BUNDLED_SSL%%include/node/openssl/hmac.h
+%%BUNDLED_SSL%%include/node/openssl/idea.h
+%%BUNDLED_SSL%%include/node/openssl/kdf.h
+%%BUNDLED_SSL%%include/node/openssl/kdferr.h
+%%BUNDLED_SSL%%include/node/openssl/lhash.h
+%%BUNDLED_SSL%%include/node/openssl/md2.h
+%%BUNDLED_SSL%%include/node/openssl/md4.h
+%%BUNDLED_SSL%%include/node/openssl/md5.h
+%%BUNDLED_SSL%%include/node/openssl/mdc2.h
+%%BUNDLED_SSL%%include/node/openssl/modes.h
+%%BUNDLED_SSL%%include/node/openssl/obj_mac.h
+%%BUNDLED_SSL%%include/node/openssl/objects.h
+%%BUNDLED_SSL%%include/node/openssl/objectserr.h
+%%BUNDLED_SSL%%include/node/openssl/ocsp.h
+%%BUNDLED_SSL%%include/node/openssl/ocsperr.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf_asm.h
+%%BUNDLED_SSL%%include/node/openssl/opensslconf_no-asm.h
+%%BUNDLED_SSL%%include/node/openssl/opensslv.h
+%%BUNDLED_SSL%%include/node/openssl/ossl_typ.h
+%%BUNDLED_SSL%%include/node/openssl/pem2.h
+%%BUNDLED_SSL%%include/node/openssl/pem.h
+%%BUNDLED_SSL%%include/node/openssl/pemerr.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs12.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs12err.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs7.h
+%%BUNDLED_SSL%%include/node/openssl/pkcs7err.h
+%%BUNDLED_SSL%%include/node/openssl/rand.h
+%%BUNDLED_SSL%%include/node/openssl/rand_drbg.h
+%%BUNDLED_SSL%%include/node/openssl/randerr.h
+%%BUNDLED_SSL%%include/node/openssl/rc2.h
+%%BUNDLED_SSL%%include/node/openssl/rc4.h
+%%BUNDLED_SSL%%include/node/openssl/rc5.h
+%%BUNDLED_SSL%%include/node/openssl/ripemd.h
+%%BUNDLED_SSL%%include/node/openssl/rsa.h
+%%BUNDLED_SSL%%include/node/openssl/rsaerr.h
+%%BUNDLED_SSL%%include/node/openssl/safestack.h
+%%BUNDLED_SSL%%include/node/openssl/seed.h
+%%BUNDLED_SSL%%include/node/openssl/sha.h
+%%BUNDLED_SSL%%include/node/openssl/srp.h
+%%BUNDLED_SSL%%include/node/openssl/srtp.h
+%%BUNDLED_SSL%%include/node/openssl/ssl.h
+%%BUNDLED_SSL%%include/node/openssl/ssl2.h
+%%BUNDLED_SSL%%include/node/openssl/ssl3.h
+%%BUNDLED_SSL%%include/node/openssl/sslerr.h
+%%BUNDLED_SSL%%include/node/openssl/stack.h
+%%BUNDLED_SSL%%include/node/openssl/store.h
+%%BUNDLED_SSL%%include/node/openssl/storeerr.h
+%%BUNDLED_SSL%%include/node/openssl/symhacks.h
+%%BUNDLED_SSL%%include/node/openssl/tls1.h
+%%BUNDLED_SSL%%include/node/openssl/ts.h
+%%BUNDLED_SSL%%include/node/openssl/tserr.h
+%%BUNDLED_SSL%%include/node/openssl/txt_db.h
+%%BUNDLED_SSL%%include/node/openssl/ui.h
+%%BUNDLED_SSL%%include/node/openssl/uierr.h
+%%BUNDLED_SSL%%include/node/openssl/whrlpool.h
+%%BUNDLED_SSL%%include/node/openssl/x509.h
+%%BUNDLED_SSL%%include/node/openssl/x509_vfy.h
+%%BUNDLED_SSL%%include/node/openssl/x509err.h
+%%BUNDLED_SSL%%include/node/openssl/x509v3.h
+%%BUNDLED_SSL%%include/node/openssl/x509v3err.h
+include/node/v8-internal.h
+include/node/v8-platform.h
+include/node/v8-profiler.h
+include/node/v8-testing.h
+include/node/v8-util.h
+include/node/v8-value-serializer-version.h
+include/node/v8-version.h
+include/node/v8-version-string.h
+include/node/v8-wasm-trap-handler-posix.h
+include/node/v8-wasm-trap-handler-win.h
+include/node/v8.h
+include/node/v8config.h
+%%DTRACE%%lib/dtrace/node.d
+@(,,444) man/man1/node.1.gz
+%%PORTDOCS%%%%DOCSDIR%%/gdbinit
+%%PORTDOCS%%%%DOCSDIR%%/lldb_commands.py
+share/systemtap/tapset/node.stp
diff --git a/www/trac-OhlohWidgetsMacro/Makefile b/www/trac-OhlohWidgetsMacro/Makefile
new file mode 100644
index 000000000000..765040a3be29
--- /dev/null
+++ b/www/trac-OhlohWidgetsMacro/Makefile
@@ -0,0 +1,23 @@
+# Created by: Douglas Thrift <douglas@douglasthrift.net>
+# $FreeBSD$
+
+PORTNAME= OhlohWidgetsMacro
+PORTVERSION= 0.2
+PORTREVISION= 1
+CATEGORIES= www devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= douglas@douglasthrift.net
+COMMENT= Trac macro to embed Ohloh widgets
+
+LICENSE= MIT
+
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pycerberus>=0.3:devel/py-pycerberus@${PY_FLAVOR} \
+ tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-OhlohWidgetsMacro/distinfo b/www/trac-OhlohWidgetsMacro/distinfo
new file mode 100644
index 000000000000..5c01e4b2750b
--- /dev/null
+++ b/www/trac-OhlohWidgetsMacro/distinfo
@@ -0,0 +1,2 @@
+SHA256 (OhlohWidgetsMacro-0.2.tar.gz) = 0d39e0503d5460f88899267210a08cd0a6d190e8c3fc6b5f6108cc111f749cc2
+SIZE (OhlohWidgetsMacro-0.2.tar.gz) = 10359
diff --git a/www/trac-OhlohWidgetsMacro/files/patch-ohloh_widgets__macro.py b/www/trac-OhlohWidgetsMacro/files/patch-ohloh_widgets__macro.py
new file mode 100644
index 000000000000..138d86a6c075
--- /dev/null
+++ b/www/trac-OhlohWidgetsMacro/files/patch-ohloh_widgets__macro.py
@@ -0,0 +1,20 @@
+--- ohloh_widgets/macro.py.orig 2010-07-04 06:54:44 UTC
++++ ohloh_widgets/macro.py
+@@ -46,7 +46,7 @@ class OhlohWidgetMacro(MacroWithValidati
+ ![[OhlohWidget(project_id, widget_name)]]
+
+ The macro gets two parameters which you can get from Ohloh's widget page
+- for your project (!http://www.ohloh.net/p/<project name>/widgets) when you
++ for your project (!https://www.ohloh.net/p/<project name>/widgets) when you
+ look at the embeddable HTML snippet:
+
+ * project_id -- a 6 digit number which identifies your project
+@@ -70,7 +70,7 @@ class OhlohWidgetMacro(MacroWithValidati
+
+ def url(self, parameters):
+ query_string = ''
+- url_template = 'http://www.ohloh.net/p/%(project_id)d/widgets/%(widget_name)s.js'
++ url_template = 'https://www.ohloh.net/p/%(project_id)d/widgets/%(widget_name)s.js'
+ widget_name = parameters.widget_name
+ if '?' in widget_name:
+ parameters['widget_name'], query_parameters = widget_name.split('?', 1)
diff --git a/www/trac-OhlohWidgetsMacro/pkg-descr b/www/trac-OhlohWidgetsMacro/pkg-descr
new file mode 100644
index 000000000000..1c502c9418c3
--- /dev/null
+++ b/www/trac-OhlohWidgetsMacro/pkg-descr
@@ -0,0 +1,3 @@
+OhlohWidgetsMacro is a plugin for Trac which embeds Ohloh widgets.
+
+WWW: http://www.schwarz.eu/opensource/projects/ohloh_widgets_macro
diff --git a/www/trac-TracGoogleAnalytics/Makefile b/www/trac-TracGoogleAnalytics/Makefile
new file mode 100644
index 000000000000..3e7fb173b0a2
--- /dev/null
+++ b/www/trac-TracGoogleAnalytics/Makefile
@@ -0,0 +1,25 @@
+# Created by: Douglas Thrift
+# $FreeBSD$
+
+PORTNAME= TracGoogleAnalytics
+PORTVERSION= 0.2.4
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= douglas@douglasthrift.net
+COMMENT= Trac plugin to enable logging by Google Analytics
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+BUILD_DEPENDS= tracd:www/trac \
+ ${PYTHON_PKGNAMEPREFIX}Genshi>=0.5:textproc/py-genshi@${PY_FLAVOR}
+RUN_DEPENDS:= ${BUILD_DEPENDS}
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-TracGoogleAnalytics/distinfo b/www/trac-TracGoogleAnalytics/distinfo
new file mode 100644
index 000000000000..66d85f806630
--- /dev/null
+++ b/www/trac-TracGoogleAnalytics/distinfo
@@ -0,0 +1,2 @@
+SHA256 (TracGoogleAnalytics-0.2.4.tar.gz) = 79ee119aa187ef9d6aff4df599f91641dbc04ab816a432c5fb292e78113cc790
+SIZE (TracGoogleAnalytics-0.2.4.tar.gz) = 11292
diff --git a/www/trac-TracGoogleAnalytics/pkg-descr b/www/trac-TracGoogleAnalytics/pkg-descr
new file mode 100644
index 000000000000..2e482f1688b1
--- /dev/null
+++ b/www/trac-TracGoogleAnalytics/pkg-descr
@@ -0,0 +1,8 @@
+Previously known as Google Analytics Plugin, this plugin will enable
+your trac environment to be logged by Google Analytics.
+
+It adds the necessary javascript code to log your environment, plus, it
+also logs the downloads of regular filenames which end with a specific
+extension; these extensions are defined by you; and also external links.
+
+WWW: http://google.ufsoft.org/wiki/TracGoogleAnalytics
diff --git a/www/trac-accountmanager/Makefile b/www/trac-accountmanager/Makefile
new file mode 100644
index 000000000000..567687580483
--- /dev/null
+++ b/www/trac-accountmanager/Makefile
@@ -0,0 +1,37 @@
+# $FreeBSD$
+
+PORTNAME= accountmanager
+PORTVERSION= 0.5.${REV}
+PORTEPOCH= 1
+CATEGORIES= www devel python
+MASTER_SITES= http://trac-hacks.org/changeset/${REV}/accountmanagerplugin/trunk?old_path=/&format=zip&filename=
+PKGNAMEPREFIX= trac-
+DIST_SUBDIR= trac
+
+MAINTAINER= kuriyama@FreeBSD.org
+COMMENT= Account Manager Plugin for trac
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac
+
+FETCH_BEFORE_ARGS= -o ${DISTFILES}
+REV= 17339
+WRKSRC= ${WRKDIR}/accountmanagerplugin/trunk
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# --- trac.ini
+# [components]
+# acct_mgr.* = enabled
+#
+# [account-manager]
+# password_format = htpasswd
+# password_file = /var/trac/trac.htpasswd
+#
+# --- httpd.conf
+# SetEnv PYTHON_EGG_CACHE "/tmp/cache"
+
+.include <bsd.port.mk>
diff --git a/www/trac-accountmanager/distinfo b/www/trac-accountmanager/distinfo
new file mode 100644
index 000000000000..8c3012c0654c
--- /dev/null
+++ b/www/trac-accountmanager/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1557078449
+SHA256 (trac/accountmanager-0.5.17339.zip) = b3b56a81ca307e22662194907f1e246be00094ab867a8c6b9b16d9a9b1c7748f
+SIZE (trac/accountmanager-0.5.17339.zip) = 360825
diff --git a/www/trac-accountmanager/pkg-descr b/www/trac-accountmanager/pkg-descr
new file mode 100644
index 000000000000..e64be83c0873
--- /dev/null
+++ b/www/trac-accountmanager/pkg-descr
@@ -0,0 +1,4 @@
+Trac plugin to enable users to register new accounts or manage their
+existing account.
+
+WWW: https://trac-hacks.org/wiki/AccountManagerPlugin
diff --git a/www/trac-advancedticketworkflow/Makefile b/www/trac-advancedticketworkflow/Makefile
new file mode 100644
index 000000000000..2ee3371c0e86
--- /dev/null
+++ b/www/trac-advancedticketworkflow/Makefile
@@ -0,0 +1,22 @@
+# Created by: Martin Matuska <mm@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= advancedticketworkflow
+PORTVERSION= 0.10.3940
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= http://people.freebsd.org/~mm/trac/
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Advanced Ticket Workflow Plugin for Trac
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-advancedticketworkflow/distinfo b/www/trac-advancedticketworkflow/distinfo
new file mode 100644
index 000000000000..01337362eada
--- /dev/null
+++ b/www/trac-advancedticketworkflow/distinfo
@@ -0,0 +1,2 @@
+SHA256 (advancedticketworkflowplugin-0.10.3940.tar.gz) = 6f69eb4d698dbe36e335a85f29032911812fc1ff71932392fa588cbe9bab4618
+SIZE (advancedticketworkflowplugin-0.10.3940.tar.gz) = 3558
diff --git a/www/trac-advancedticketworkflow/pkg-descr b/www/trac-advancedticketworkflow/pkg-descr
new file mode 100644
index 000000000000..61375eb72721
--- /dev/null
+++ b/www/trac-advancedticketworkflow/pkg-descr
@@ -0,0 +1,5 @@
+AdvancedTicketWorkflowPlugin provides a number of advanced operations
+for customizable workflows that are similar to the operations provided
+in the customizeable workflow of the core system.
+
+WWW: https://trac-hacks.org/wiki/AdvancedTicketWorkflowPlugin
diff --git a/www/trac-autocomplete/Makefile b/www/trac-autocomplete/Makefile
new file mode 100644
index 000000000000..a380a5878170
--- /dev/null
+++ b/www/trac-autocomplete/Makefile
@@ -0,0 +1,23 @@
+# Created by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
+# $FreeBSD$
+
+PORTNAME= autocomplete
+PORTVERSION= 0.4.1
+PORTREVISION= 7
+CATEGORIES= www python
+MASTER_SITES= http://dist.codelabs.ru/fbsd/
+PKGNAMEPREFIX= trac-
+DISTNAME= autocompleteusersplugin-r${REL}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for autocompletion of user names in ticket fields
+
+RUN_DEPENDS= trac>=0.11:www/trac
+
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+WRKSRC= ${WRKDIR}/autocompleteusersplugin/0.11
+NO_ARCH= yes
+REL= 8451
+
+.include <bsd.port.mk>
diff --git a/www/trac-autocomplete/distinfo b/www/trac-autocomplete/distinfo
new file mode 100644
index 000000000000..d150eeac4abd
--- /dev/null
+++ b/www/trac-autocomplete/distinfo
@@ -0,0 +1,2 @@
+SHA256 (autocompleteusersplugin-r8451.zip) = 7d4f5e1547c0bae0b5e320b2d0f729ef9deebd6c52c1e82a4c4ca022ef182e8a
+SIZE (autocompleteusersplugin-r8451.zip) = 14217
diff --git a/www/trac-autocomplete/pkg-descr b/www/trac-autocomplete/pkg-descr
new file mode 100644
index 000000000000..df2f9bc5dfe9
--- /dev/null
+++ b/www/trac-autocomplete/pkg-descr
@@ -0,0 +1,4 @@
+The AutocompleteUsersPlugin allows AJAX completion of users
+for the owner and CC fields on new and existing tickets.
+
+WWW: https://trac-hacks.org/wiki/AutocompleteUsersPlugin
diff --git a/www/trac-ccselector/Makefile b/www/trac-ccselector/Makefile
new file mode 100644
index 000000000000..9560d63792d3
--- /dev/null
+++ b/www/trac-ccselector/Makefile
@@ -0,0 +1,23 @@
+# Created by: glarkin
+# $FreeBSD$
+
+PORTNAME= ccselector
+PORTVERSION= 0.0.2.4001
+PORTREVISION= 4
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Visually edit the Trac ticket CC field
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-ccselector/distinfo b/www/trac-ccselector/distinfo
new file mode 100644
index 000000000000..e48e5a9c3067
--- /dev/null
+++ b/www/trac-ccselector/distinfo
@@ -0,0 +1,2 @@
+SHA256 (ccselectorplugin-0.0.2.4001.zip) = f1f27c53b4e250557aa0acb3aab958876e9306bc9cb0ac3489ad8c4adc263c54
+SIZE (ccselectorplugin-0.0.2.4001.zip) = 7084
diff --git a/www/trac-ccselector/pkg-descr b/www/trac-ccselector/pkg-descr
new file mode 100644
index 000000000000..6888eb39d44b
--- /dev/null
+++ b/www/trac-ccselector/pkg-descr
@@ -0,0 +1,13 @@
+This plugin allows visual CC field editing.
+
+A pop-up window with bunch of checkboxes is opened, user checks
+boxes, email addresses are added and removed to CC field. There is
+a list of pre-defined addresses in cc_selector.js (these addresses
+will always be available). If you want to change this list you must
+edit cc_selector.js manually.
+
+Of course, you can always edit CC field without all this hassle -
+all addresses you entered manually will be shown, too - and can be
+removed with new, shiny checkboxes.
+
+WWW: https://trac-hacks.org/wiki/CcSelectorPlugin
diff --git a/www/trac-ccselector/pkg-message b/www/trac-ccselector/pkg-message
new file mode 100644
index 000000000000..9f16ca88d56e
--- /dev/null
+++ b/www/trac-ccselector/pkg-message
@@ -0,0 +1,13 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+cc_selector.* = enabled
+
+to your trac.ini to enable the visual CC field
+editor.
+EOM
+}
+]
diff --git a/www/trac-customfieldadmin/Makefile b/www/trac-customfieldadmin/Makefile
new file mode 100644
index 000000000000..5e069bec3102
--- /dev/null
+++ b/www/trac-customfieldadmin/Makefile
@@ -0,0 +1,30 @@
+# Created by: Greg Larkin <glarkin@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= customfieldadmin
+PORTVERSION= 0.2.2.6485
+PORTREVISION= 4
+PORTEPOCH= 1
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Web interface to administer Trac ticket custom fields
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE.txt
+
+RUN_DEPENDS= tracd:www/trac
+
+PORTSCOUT= skipv:0.2.6485
+
+USES= python:2.7 zip
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-customfieldadmin/distinfo b/www/trac-customfieldadmin/distinfo
new file mode 100644
index 000000000000..ee734b207b91
--- /dev/null
+++ b/www/trac-customfieldadmin/distinfo
@@ -0,0 +1,2 @@
+SHA256 (customfieldadminplugin-0.2.2.6485.zip) = e434dfab30bc9c6767cdf123cdc84d53f1d1e15ee05cdff70f7a53b02bb52977
+SIZE (customfieldadminplugin-0.2.2.6485.zip) = 14727
diff --git a/www/trac-customfieldadmin/pkg-descr b/www/trac-customfieldadmin/pkg-descr
new file mode 100644
index 000000000000..b4d4ca22529e
--- /dev/null
+++ b/www/trac-customfieldadmin/pkg-descr
@@ -0,0 +1,8 @@
+This plugin is a Web Admin panel for administrating custom fields -
+adding, modifying and deleting them without editing the trac.ini file
+directly.
+
+This plugin is a cooperation between CodeResort.com and Optaros.com,
+and is made freely available under a BSD license.
+
+WWW: http://trac-hacks.org/wiki/CustomFieldAdminPlugin
diff --git a/www/trac-customfieldadmin/pkg-message b/www/trac-customfieldadmin/pkg-message
new file mode 100644
index 000000000000..23b864ba68d6
--- /dev/null
+++ b/www/trac-customfieldadmin/pkg-message
@@ -0,0 +1,13 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+customfieldadmin.* = enabled
+
+to your trac.ini to enable the ticket custom field
+administrator.
+EOM
+}
+]
diff --git a/www/trac-datefield/Makefile b/www/trac-datefield/Makefile
new file mode 100644
index 000000000000..192015cb7335
--- /dev/null
+++ b/www/trac-datefield/Makefile
@@ -0,0 +1,23 @@
+# Created by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
+# $FreeBSD$
+
+PORTNAME= datefield
+PORTVERSION= 1.0.1
+PORTREVISION= 5
+CATEGORIES= www python
+MASTER_SITES= http://dist.codelabs.ru/fbsd/
+PKGNAMEPREFIX= trac-
+DISTNAME= datefieldplugin-r${REL}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for creating date fields
+
+RUN_DEPENDS= trac>=0.11:www/trac
+
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+WRKSRC= ${WRKDIR}/datefieldplugin/0.11
+REL= 7267
+
+.include <bsd.port.mk>
diff --git a/www/trac-datefield/distinfo b/www/trac-datefield/distinfo
new file mode 100644
index 000000000000..54e2fac2d5ea
--- /dev/null
+++ b/www/trac-datefield/distinfo
@@ -0,0 +1,2 @@
+SHA256 (datefieldplugin-r7267.zip) = 565869c98580bd2b64c180b0a466d640b2b36f55a85d2f46804a6c676c1a8abe
+SIZE (datefieldplugin-r7267.zip) = 105459
diff --git a/www/trac-datefield/pkg-descr b/www/trac-datefield/pkg-descr
new file mode 100644
index 000000000000..0b809dd1506c
--- /dev/null
+++ b/www/trac-datefield/pkg-descr
@@ -0,0 +1,4 @@
+This plugin allows for validating custom fields as dates in tickets
+and adds fancy date selector to these fields.
+
+WWW: https://trac-hacks.org/wiki/DateFieldPlugin
diff --git a/www/trac-defaultcc/Makefile b/www/trac-defaultcc/Makefile
new file mode 100644
index 000000000000..323b75563f2a
--- /dev/null
+++ b/www/trac-defaultcc/Makefile
@@ -0,0 +1,27 @@
+# Created by: Eygene Ryabinkin <rea@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= defaultcc
+PORTVERSION= 0.1
+PORTREVISION= 3
+CATEGORIES= www python
+MASTER_SITES= http://dist.codelabs.ru/fbsd/trac-${PORTNAME}/
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-r${REL}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin that adds default CC value for tickets
+
+LICENSE= GPLv2
+
+RUN_DEPENDS= trac>=0.11:www/trac
+
+USES= python:2.7 zip
+
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/trunk
+REL= 10605
+
+.include <bsd.port.mk>
diff --git a/www/trac-defaultcc/distinfo b/www/trac-defaultcc/distinfo
new file mode 100644
index 000000000000..e002ffb4ffa0
--- /dev/null
+++ b/www/trac-defaultcc/distinfo
@@ -0,0 +1,2 @@
+SHA256 (defaultccplugin-r10605.zip) = 5fbc6969327f7bdbc9e0fc8e97624e7af0ee740f501cd5cd203dec8905f594cf
+SIZE (defaultccplugin-r10605.zip) = 5043
diff --git a/www/trac-defaultcc/pkg-descr b/www/trac-defaultcc/pkg-descr
new file mode 100644
index 000000000000..149df70cb3dd
--- /dev/null
+++ b/www/trac-defaultcc/pkg-descr
@@ -0,0 +1,4 @@
+This plugin automatically adds a default CC list
+when a new ticket is created, based on its initial component.
+
+WWW: https://trac-hacks.org/wiki/DefaultCcPlugin
diff --git a/www/trac-devel/Makefile b/www/trac-devel/Makefile
new file mode 100644
index 000000000000..6b7eab14608f
--- /dev/null
+++ b/www/trac-devel/Makefile
@@ -0,0 +1,61 @@
+# $FreeBSD$
+
+PORTNAME= trac
+DISTVERSION= 1.3.3
+PORTREVISION= 1
+CATEGORIES= www devel python
+MASTER_SITES= http://ftp.edgewall.com/pub/trac/ \
+ ftp://ftp.edgewall.com/pub/trac/
+PKGNAMESUFFIX= -devel
+DISTNAME= Trac-${DISTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Enhanced wiki and issue tracking system for software projects
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Babel>=2.3.4:devel/py-babel@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Genshi>=0.7:textproc/py-genshi@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=2.10:devel/py-Jinja2@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Babel>=2.3.4:devel/py-babel@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Genshi>=0.7:textproc/py-genshi@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Jinja2>=2.10:devel/py-Jinja2@${PY_FLAVOR}
+
+CONFLICTS_INSTALL= trac
+
+USES= python:2.7 shebangfix
+SHEBANG_FILES= trac/tests/functional/better_twill.py trac/tests/functional/tester.py \
+ trac/tests/functional/testenv.py trac/tests/functional/compat.py \
+ trac/tests/functional/__init__.py contrib/emailfilter.py \
+ contrib/checkwiki.py contrib/htpasswd.py
+USE_PYTHON= distutils autoplist
+USE_RC_SUBR= tracd
+SUB_LIST= PYTHON_CMD=${PYTHON_CMD}
+
+PORTEXAMPLES= *
+PORTDATA= *
+
+NO_ARCH= yes
+
+OPTIONS_DEFINE= DOCUTILS PYGMENTS TZ SVN EXAMPLES
+OPTIONS_DEFAULT= DOCUTILS PYGMENTS TZ SVN SQLITE
+OPTIONS_RADIO= DATABASE
+OPTIONS_RADIO_DATABASE= PGSQL SQLITE
+DOCUTILS_DESC= Allow additional text markup
+PYGMENTS_DESC= Use generic syntax highlighter
+TZ_DESC= Process Time Zones
+
+DOCUTILS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}docutils>=0.14:textproc/py-docutils@${PY_FLAVOR}
+PYGMENTS_RUN_DEPENDS= ${PY_PYGMENTS}
+TZ_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pytz>0:devel/py-pytz@${PY_FLAVOR}
+PGSQL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}psycopg2>0:databases/py-psycopg2@${PY_FLAVOR}
+SQLITE_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR}
+SVN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}subversion-lts>0:devel/py-subversion@${PY_FLAVOR}
+
+post-install-EXAMPLES-on:
+ @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/sample-plugins
+ ${FIND} ${WRKSRC}/contrib -type f -maxdepth 1 -exec ${INSTALL_DATA} {} ${STAGEDIR}${EXAMPLESDIR}/ \;
+ (cd ${WRKSRC}/sample-plugins && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}/sample-plugins)
+
+.include <bsd.port.mk>
diff --git a/www/trac-devel/distinfo b/www/trac-devel/distinfo
new file mode 100644
index 000000000000..e2785ef48d8a
--- /dev/null
+++ b/www/trac-devel/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1544263946
+SHA256 (Trac-1.3.3.tar.gz) = 0ff793613de57851adbc2d45188d3263ac64b97ca39d8182e7a1ac226c396239
+SIZE (Trac-1.3.3.tar.gz) = 6466543
diff --git a/www/trac-devel/files/tracd.in b/www/trac-devel/files/tracd.in
new file mode 100644
index 000000000000..27756822a86a
--- /dev/null
+++ b/www/trac-devel/files/tracd.in
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# tracd startup
+#
+# $FreeBSD$
+
+# PROVIDE: tracd
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Add the following lines to /etc/rc.conf to enable or configure tracd:
+# tracd_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable tracd.
+# tracd_listen (str): The host name or IP address to bind tracd to.
+# By default tracd listens 0.0.0.0, i.e. all the
+# available addresses on all interfaces.
+# tracd_port (str): The port number to bind to, 80 by default.
+# tracd_pidfile (str): When daemonizing, file to which to write pid
+# if not to /var/run/tracd.pid.
+# tracd_envdir (str): Directory of the project environments. Set to
+# "/home/trac" by default.
+# tracd_env (str): The project environment name while using single
+# environment mode. The default is empty, meaning
+# multiproject mode.
+# tracd_args (str): Extra arguments passed to tracd startup
+# command. Empty by default.
+#
+
+. /etc/rc.subr
+
+name="tracd"
+rcvar=tracd_enable
+
+tracd_enable=${tracd_enable:-"NO"}
+tracd_listen=${tracd_listen:-"0.0.0.0"}
+tracd_port=${tracd_port:-"80"}
+tracd_pidfile=${tracd_pidfile:-"/var/run/tracd.pid"}
+tracd_envdir=${tracd_envdir:-"/home/trac"}
+tracd_env=${tracd_env:-""}
+tracd_args=${tracd_args:-""}
+
+load_rc_config ${name}
+
+command_args="--daemonize --hostname=${tracd_listen} --port=${tracd_port}"
+command_args="${command_args} --pidfile=${tracd_pidfile} ${tracd_args}"
+
+required_dirs=${tracd_envdir}
+pidfile=${tracd_pidfile}
+
+if [ -z "${tracd_env}" ]; then
+ _trac_env="--env-parent-dir ${tracd_envdir}"
+else
+ _trac_env="${tracd_envdir}/${tracd_env}"
+ command_args="${command_args} --single-env"
+fi
+
+command_args="%%PREFIX%%/bin/tracd ${command_args} ${_trac_env}"
+command="%%PYTHON_CMD%%"
+
+run_rc_command $1
diff --git a/www/trac-devel/pkg-descr b/www/trac-devel/pkg-descr
new file mode 100644
index 000000000000..b008fe05e687
--- /dev/null
+++ b/www/trac-devel/pkg-descr
@@ -0,0 +1,21 @@
+Trac uses a minimalistic approach to web-based software project management.
+Our mission; to help developers write great software while staying out of
+the way. Trac should impose as little as possible on a team's established
+development process and policies.
+
+All aspects of Trac have been designed with one single goal, to simplify
+tracking and communication of software issues, enhancements and monitoring
+overall progress.
+
+What is Trac?
+
+ * An integrated system for managing software projects
+ * An enhanced wiki
+ * A flexible web-based issue tracker
+ * An interface to the Subversion revision control system
+
+At the core of Trac lies an integrated wiki and issue/bug database. Using
+wiki markup, all objects managed by Trac can directly link to other
+issues/bug reports, code changesets, documentation and files.
+
+WWW: http://trac.edgewall.org/
diff --git a/www/trac-devel/pkg-message b/www/trac-devel/pkg-message
new file mode 100644
index 000000000000..8d8c58ec1add
--- /dev/null
+++ b/www/trac-devel/pkg-message
@@ -0,0 +1,17 @@
+[
+{ type: upgrade, maximum_version: 1
+ message: <<EOM
+From 0.12.x to 1.0.x
+---------------------
+You should be careful to check that the plugins you depend on have
+been ported to 1.0.x, as they most probably won't work without adaptation
+due to the numerous internal changes that occurred during 1.0.x development.
+
+See: http://trac.edgewall.org/wiki/TracDev/ApiChanges/1.0
+
+Consult the upgrade instructions at:
+
+ http://trac.edgewall.org/wiki/TracUpgrade
+EOM
+}
+]
diff --git a/www/trac-discussion/Makefile b/www/trac-discussion/Makefile
new file mode 100644
index 000000000000..4e0f712efc55
--- /dev/null
+++ b/www/trac-discussion/Makefile
@@ -0,0 +1,33 @@
+# $FreeBSD$
+
+PORTNAME= discussion
+PORTVERSION= 0.7
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Discussion forum plugin for Trac
+
+RUN_DEPENDS= tracd:www/trac \
+ trac-TracSpamFilter>=0.2.1:www/trac-spam-filter
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export http://trac-hacks.org/svn/discussionplugin/0.11/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && ${TAR} cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-discussion/distinfo b/www/trac-discussion/distinfo
new file mode 100644
index 000000000000..ed2839fda2bb
--- /dev/null
+++ b/www/trac-discussion/distinfo
@@ -0,0 +1,2 @@
+SHA256 (discussion-0.7.tar.gz) = 15022167b9435951b713ec02f15fff39171fa5b0098d4d8846e6c72f2f80f430
+SIZE (discussion-0.7.tar.gz) = 216576
diff --git a/www/trac-discussion/pkg-descr b/www/trac-discussion/pkg-descr
new file mode 100644
index 000000000000..087ff4501015
--- /dev/null
+++ b/www/trac-discussion/pkg-descr
@@ -0,0 +1,9 @@
+The DiscussionPlugin adds discussion forums to Trac. An arbitrary number
+of forums can be added, organised to forum groups. Users can create
+topics in forums and reply to them which together creates discussion
+threads. Threaded or flat view to topics and its replies is supported.
+Each forum has a list of moderators who can delete topics, replies,
+etc. Appending new forums and topics either as new replies shows up in
+timeline. Searching capability in topics and replies is supported too.
+
+WWW: https://trac-hacks.org/wiki/DiscussionPlugin
diff --git a/www/trac-downloads/Makefile b/www/trac-downloads/Makefile
new file mode 100644
index 000000000000..da4df7ff23e9
--- /dev/null
+++ b/www/trac-downloads/Makefile
@@ -0,0 +1,34 @@
+# $FreeBSD$
+
+PORTNAME= downloads
+PORTVERSION= ${TRAC_VERSION}.${PLUGIN_VERSION}.${SVN_REV}
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Trac plugin providing a downloads section
+
+RUN_DEPENDS= tracd:www/trac
+
+TRAC_VERSION= 0.12
+PLUGIN_VERSION= 0.3
+SVN_REV= 10047
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.if defined(BOOTSTRAP)
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ svn export -r ${SVN_REV} http://trac-hacks.org/svn/downloadsplugin/${TRAC_VERSION}/ ${WRKSRC}
+ ${MKDIR} ${_DISTDIR}
+ cd ${WRKDIR} && \
+ ${TAR} cfvz ${_DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-downloads/distinfo b/www/trac-downloads/distinfo
new file mode 100644
index 000000000000..93a6b4fb4166
--- /dev/null
+++ b/www/trac-downloads/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/downloadsplugin-0.12.0.3.10047.tar.gz) = 966b88e4f0b2cbd4da72e5bdec8c592670d2574771460be7780edb18c03e4e7a
+SIZE (trac/downloadsplugin-0.12.0.3.10047.tar.gz) = 18756
diff --git a/www/trac-downloads/files/patch-tracdownloads_consoleadmin.py b/www/trac-downloads/files/patch-tracdownloads_consoleadmin.py
new file mode 100644
index 000000000000..cda3e74bb169
--- /dev/null
+++ b/www/trac-downloads/files/patch-tracdownloads_consoleadmin.py
@@ -0,0 +1,12 @@
+--- tracdownloads/consoleadmin.py.orig 2011-04-07 08:36:09 UTC
++++ tracdownloads/consoleadmin.py
+@@ -122,7 +122,8 @@ class DownloadsConsoleAdmin(Component):
+ self.log.debug(download)
+
+ # Upload file to DB and file storage.
+- api.store_download(context, download, file)
++ api._add_download(context, download, file)
++
+
+ # Close input file and commit changes in DB.
+ file.close()
diff --git a/www/trac-downloads/files/patch-tracdownloads_tags.py b/www/trac-downloads/files/patch-tracdownloads_tags.py
new file mode 100644
index 000000000000..b529b88dda42
--- /dev/null
+++ b/www/trac-downloads/files/patch-tracdownloads_tags.py
@@ -0,0 +1,14 @@
+--- tracdownloads/tags.py.orig 2010-10-12 12:42:10 UTC
++++ tracdownloads/tags.py
+@@ -1,11 +1,5 @@
+ # -*- coding: utf-8 -*-
+
+-# Deprecated as for Python 2.6.
+-try:
+- import sets
+-except:
+- pass
+-
+ # Trac imports.
+ from trac.core import *
+ from trac.resource import Resource
diff --git a/www/trac-downloads/pkg-descr b/www/trac-downloads/pkg-descr
new file mode 100644
index 000000000000..a3de563c6392
--- /dev/null
+++ b/www/trac-downloads/pkg-descr
@@ -0,0 +1,11 @@
+This plugin provides downloads section which may contain releases or
+other files. It is administrated via WebAdminPlugin and there is an
+interface to the trac-admin tool that may help during automatic server
+maintenance. The Downloads section of Trac displays a table with
+information about the uploaded files such as description, component,
+version, size, architecture, type and optionally assigned tags which the
+download is related to. It also collects information about number of
+downloads which can be displayed on wiki page together with direct links
+to the specified download.
+
+WWW: https://trac-hacks.org/wiki/DownloadsPlugin
diff --git a/www/trac-email2trac-postfix/Makefile b/www/trac-email2trac-postfix/Makefile
new file mode 100644
index 000000000000..048ac6f07b32
--- /dev/null
+++ b/www/trac-email2trac-postfix/Makefile
@@ -0,0 +1,11 @@
+# $FreeBSD$
+
+PKGNAMESUFFIX= -postfix
+
+CONFLICTS_INSTALL= trac-email2trac-[0-9]*
+
+OPTIONS_SLAVE= POSTFIX
+
+MASTERDIR= ${.CURDIR}/../trac-email2trac
+
+.include "${MASTERDIR}/Makefile"
diff --git a/www/trac-email2trac/Makefile b/www/trac-email2trac/Makefile
new file mode 100644
index 000000000000..5d42e67adc30
--- /dev/null
+++ b/www/trac-email2trac/Makefile
@@ -0,0 +1,53 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= email2trac
+PORTVERSION= 2.12.2
+CATEGORIES= www devel python
+MASTER_SITES= ftp://ftp.sara.nl/pub/outgoing/
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Convert email to trac tickets
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= tracd:www/trac
+
+CONFLICTS_INSTALL?= trac-email2trac-postfix-[0-9]*
+
+OPTIONS_DEFINE= POSTFIX DOCS
+POSTFIX_DESC= Configure suid script for postfix
+
+TRACUSER?= ${WWWOWN}
+
+GNU_CONFIGURE= yes
+CONFIGURE_ARGS= --with-trac-user=${TRACUSER} --with-mta-user=${MTAUSER}
+USES= python:2.7
+
+PORTDOCS= AUTHORS ChangeLog INSTALL README
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MPOSTFIX}
+MTAUSER?= nobody
+.else
+MTAUSER?= mailnull
+.endif
+
+do-install:
+ ${INSTALL_SCRIPT} ${WRKSRC}/delete_spam.py ${STAGEDIR}${PREFIX}/bin/delete_spam
+ ${INSTALL_SCRIPT} ${WRKSRC}/email2trac.py ${STAGEDIR}${PREFIX}/bin/email2trac
+ ${INSTALL_PROGRAM} \
+ ${WRKSRC}/run_email2trac ${STAGEDIR}${PREFIX}/bin
+ ${INSTALL_DATA} ${WRKSRC}/email2trac.conf \
+ ${STAGEDIR}${PREFIX}/etc/email2trac.conf.sample
+
+do-install-DOCS-on:
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+.for file in ${PORTDOCS}
+ ${INSTALL_DATA} ${WRKSRC}/${file} ${STAGEDIR}${DOCSDIR}
+.endfor
+
+.include <bsd.port.mk>
diff --git a/www/trac-email2trac/distinfo b/www/trac-email2trac/distinfo
new file mode 100644
index 000000000000..0d470ce7cb99
--- /dev/null
+++ b/www/trac-email2trac/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1525095454
+SHA256 (email2trac-2.12.2.tar.gz) = d2540cdfdb337b10c137a4dd069856e13c5831efa0ced47e905f6901827212d6
+SIZE (email2trac-2.12.2.tar.gz) = 102415
diff --git a/www/trac-email2trac/pkg-descr b/www/trac-email2trac/pkg-descr
new file mode 100644
index 000000000000..4eec701c05cc
--- /dev/null
+++ b/www/trac-email2trac/pkg-descr
@@ -0,0 +1,12 @@
+This is a release of the SARA package email2trac that contains utilities that
+we use to convert emails to trac tickets. The initial setup was made by Daniel
+Lundin from Edgewall Software. SARA has extend the initial setup, with the
+following extensions:
+
+* HTML messages
+* Attachments
+* Use commandline options
+* Use config file to change the behaviour of the email2trac.py program
+* unicode support for special characters in the headers of an email message
+
+WWW: https://oss.trac.surfsara.nl/email2trac
diff --git a/www/trac-email2trac/pkg-plist b/www/trac-email2trac/pkg-plist
new file mode 100644
index 000000000000..bebe28228b82
--- /dev/null
+++ b/www/trac-email2trac/pkg-plist
@@ -0,0 +1,4 @@
+bin/delete_spam
+bin/email2trac
+@(,,4111) bin/run_email2trac
+@sample etc/email2trac.conf.sample
diff --git a/www/trac-estimator/Makefile b/www/trac-estimator/Makefile
new file mode 100644
index 000000000000..e2fb9a675eb3
--- /dev/null
+++ b/www/trac-estimator/Makefile
@@ -0,0 +1,24 @@
+# $FreeBSD$
+
+PORTNAME= estimator
+PORTVERSION= 0.1.1
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Produce detailed range-based estimations for Trac tickets
+
+LICENSE= MIT
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-estimator/distinfo b/www/trac-estimator/distinfo
new file mode 100644
index 000000000000..b8675d0618aa
--- /dev/null
+++ b/www/trac-estimator/distinfo
@@ -0,0 +1,2 @@
+SHA256 (estimatorplugin-0.1.1.tar.gz) = bc6d16af2da264b91c1445d5fc8732f0fa77913a70f8c94e859ff2e402f14155
+SIZE (estimatorplugin-0.1.1.tar.gz) = 32631
diff --git a/www/trac-estimator/pkg-descr b/www/trac-estimator/pkg-descr
new file mode 100644
index 000000000000..2dde91eb6b1d
--- /dev/null
+++ b/www/trac-estimator/pkg-descr
@@ -0,0 +1,5 @@
+This Trac plugin implements a page for creating time estimates. The
+estimates will be attached to whatever tickets are specified in the
+tickets box.
+
+WWW: https://trac-hacks.org/wiki/EstimatorPlugin
diff --git a/www/trac-estimator/pkg-message b/www/trac-estimator/pkg-message
new file mode 100644
index 000000000000..279f1eef0181
--- /dev/null
+++ b/www/trac-estimator/pkg-message
@@ -0,0 +1,21 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+estimatorplugin.api.estimatorsetupparticipant = enabled
+estimatorplugin.macro_provider.estimatormacroprovider = enabled
+estimatorplugin.webui.estimationspage = enabled
+
+to your trac.ini to enable the plugin.
+
+Next, upgrade your database with the command:
+
+ trac-admin /full/path/to/YourProjectName upgrade
+
+Finally, restart your web server, browse to your Trac URL
+and click on the "Estimate" button to create an estimate.
+EOM
+}
+]
diff --git a/www/trac-fivestarvote/Makefile b/www/trac-fivestarvote/Makefile
new file mode 100644
index 000000000000..8d929a227c24
--- /dev/null
+++ b/www/trac-fivestarvote/Makefile
@@ -0,0 +1,34 @@
+# $FreeBSD$
+
+PORTNAME= fivestarvote
+PORTVERSION= 0.1
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Five star plugin for voting on Trac resources
+
+RUN_DEPENDS= tracd:www/trac
+
+LICENSE= BSD
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export http://trac-hacks.org/svn/fivestarvoteplugin/0.11/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-fivestarvote/distinfo b/www/trac-fivestarvote/distinfo
new file mode 100644
index 000000000000..dd517802c657
--- /dev/null
+++ b/www/trac-fivestarvote/distinfo
@@ -0,0 +1,2 @@
+SHA256 (fivestarvote-0.1.tar.gz) = a648d657b7af82e116244a943d79bb6604ed0212a3e6daae9e943076eac064ee
+SIZE (fivestarvote-0.1.tar.gz) = 19456
diff --git a/www/trac-fivestarvote/pkg-descr b/www/trac-fivestarvote/pkg-descr
new file mode 100644
index 000000000000..a438d5a2b770
--- /dev/null
+++ b/www/trac-fivestarvote/pkg-descr
@@ -0,0 +1,6 @@
+This plugin is a modified version of the VotePlugin (www/trac-vote).
+
+Instead of having up and down arrows, this plugin uses a 5-star approach
+to rate resources.
+
+WWW: https://trac-hacks.org/wiki/FiveStarVotePlugin
diff --git a/www/trac-fullblog/Makefile b/www/trac-fullblog/Makefile
new file mode 100644
index 000000000000..7b7b1ba7bff2
--- /dev/null
+++ b/www/trac-fullblog/Makefile
@@ -0,0 +1,33 @@
+# $FreeBSD$
+
+PORTNAME= fullblog
+PORTVERSION= 0.1.1
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin that provides a project Blog
+
+LICENSE= BSD
+
+RUN_DEPENDS= htmldoc:textproc/htmldoc \
+ tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.if defined(BOOTSTRAP)
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ svn export http://trac-hacks.org/svn/fullblogplugin/0.11/ ${WRKSRC}
+ ${MKDIR} ${_DISTDIR}
+ cd ${WRKDIR} && \
+ ${TAR} cfvz ${_DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-fullblog/distinfo b/www/trac-fullblog/distinfo
new file mode 100644
index 000000000000..c74ece692b80
--- /dev/null
+++ b/www/trac-fullblog/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/fullblogplugin-0.1.1.tar.gz) = 9d6480a0b4a82c92af81ccd20af843721c46c1cc42b309a5bc2ccc45cd693288
+SIZE (trac/fullblogplugin-0.1.1.tar.gz) = 34052
diff --git a/www/trac-fullblog/pkg-descr b/www/trac-fullblog/pkg-descr
new file mode 100644
index 000000000000..399a0ec33989
--- /dev/null
+++ b/www/trac-fullblog/pkg-descr
@@ -0,0 +1,5 @@
+This plugin provides a project Blog, but unlike TracBlogPlugin and
+SimpleBlogPlugin it does not use Wiki pages to store the content.
+It has no dependencies on other plugins.
+
+WWW: https://trac-hacks.org/wiki/FullBlogPlugin
diff --git a/www/trac-fullblognotification/Makefile b/www/trac-fullblognotification/Makefile
new file mode 100644
index 000000000000..07964434ab7d
--- /dev/null
+++ b/www/trac-fullblognotification/Makefile
@@ -0,0 +1,31 @@
+# $FreeBSD$
+
+PORTNAME= fullblognotification
+PORTVERSION= 0.2.1
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin that provides a project Blog
+
+RUN_DEPENDS= trac-fullblog>=0.1.1:www/trac-fullblog
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.if defined(BOOTSTRAP)
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ svn export http://trac-hacks.org/svn/fullblognotificationplugin/0.12/ \
+ ${WRKSRC}
+ ${MKDIR} ${_DISTDIR}
+ cd ${WRKDIR} && \
+ tar cfvz ${_DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-fullblognotification/distinfo b/www/trac-fullblognotification/distinfo
new file mode 100644
index 000000000000..e8242e76e2dd
--- /dev/null
+++ b/www/trac-fullblognotification/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/fullblognotificationplugin-0.2.1.tar.gz) = 3c58f59cdb05bdaea6de17af710a90f95915b1bad3880468a87f2bc2edf5eba3
+SIZE (trac/fullblognotificationplugin-0.2.1.tar.gz) = 4605
diff --git a/www/trac-fullblognotification/pkg-descr b/www/trac-fullblognotification/pkg-descr
new file mode 100644
index 000000000000..c2cfe265ebaa
--- /dev/null
+++ b/www/trac-fullblognotification/pkg-descr
@@ -0,0 +1,18 @@
+This plugin uses the blog change interface in FullBlogPlugin to send out
+email notifications for:
+ * new posts
+ * updated posts
+ * comment added
+ * deleted posts
+
+Email notifications are sent to the user who made the change.
+Notifications can also be sent to other users or a distribution list by
+specifying the smtp_always_cc option.
+
+The emails are sent in plain text using a template that was modeled
+after Trac's ticket_notify_email template.
+
+If you are using the AnnouncerPlugin, you should use its FullBlogPlugin
+rather than the FullBlogNotificationPlugin.
+
+WWW: https://trac-hacks.org/wiki/FullBlogNotificationPlugin
diff --git a/www/trac-graphviz/Makefile b/www/trac-graphviz/Makefile
new file mode 100644
index 000000000000..bb9edda7aaf7
--- /dev/null
+++ b/www/trac-graphviz/Makefile
@@ -0,0 +1,33 @@
+# $FreeBSD$
+
+PORTNAME= ${PYDISTUTILS_PKGNAME:S;^Trac;;S;Plugin$;;:tl}
+PORTVERSION= 0.7.4
+PORTREVISION= 9
+CATEGORIES= www devel graphics python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Graphviz plugin for Trac's wiki
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= urwfonts>0:x11-fonts/urwfonts \
+ dot:graphics/graphviz \
+ tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= autoplist distutils
+PYDISTUTILS_PKGNAME= graphviz
+NO_ARCH= yes
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin
+
+post-patch:
+ @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
+ -e 's|%%PREFIX%%|${PREFIX}|' \
+ -e 's|%%OSMAJOR%%|${OSREL:C/\..*$//}|' \
+ ${WRKSRC}/graphviz/graphviz.py
+
+.include <bsd.port.mk>
diff --git a/www/trac-graphviz/distinfo b/www/trac-graphviz/distinfo
new file mode 100644
index 000000000000..a297bc890187
--- /dev/null
+++ b/www/trac-graphviz/distinfo
@@ -0,0 +1,2 @@
+SHA256 (graphvizplugin-0.7.4.tar.gz) = 46de5e8de432366cc21b5683718894f1d6b4db10a5440559ad1dc2b94ac188e1
+SIZE (graphvizplugin-0.7.4.tar.gz) = 17881
diff --git a/www/trac-graphviz/files/patch-graphviz_graphviz.py b/www/trac-graphviz/files/patch-graphviz_graphviz.py
new file mode 100644
index 000000000000..0600bf20bc3e
--- /dev/null
+++ b/www/trac-graphviz/files/patch-graphviz_graphviz.py
@@ -0,0 +1,36 @@
+--- graphviz/graphviz.py.orig 2008-10-13 16:24:45 UTC
++++ graphviz/graphviz.py
+@@ -16,11 +16,11 @@ __docformat__ = 'restructuredtext'
+ __version__ = '0.7.2'
+
+
++import hashlib
+ import inspect
+ import locale
+ import os
+ import re
+-import sha
+ import subprocess
+ import sys
+
+@@ -59,10 +59,7 @@ class Graphviz(Component):
+ 'c:\\Program Files\\ATT\\Graphviz\\bin',
+ ],
+
+- 'freebsd6': ['/usr/local/bin',
+- ],
+-
+- 'freebsd5': ['/usr/local/bin',
++ 'freebsd%%OSMAJOR%%': ['%%LOCALBASE%%/bin',
+ ],
+
+ 'darwin': ['/opt/local/bin',
+@@ -312,7 +309,7 @@ class Graphviz(Component):
+ encoded_cmd = (processor + unicode(self.processor_options)) \
+ .encode(self.encoding)
+ encoded_content = content.encode(self.encoding)
+- sha_key = sha.new(encoded_cmd + encoded_content).hexdigest()
++ sha_key = hashlib.sha1(encoded_cmd + encoded_content).hexdigest()
+ img_name = '%s.%s.%s' % (sha_key, processor, out_format)
+ # cache: hash.<dot>.<png>
+ img_path = os.path.join(self.cache_dir, img_name)
diff --git a/www/trac-graphviz/pkg-descr b/www/trac-graphviz/pkg-descr
new file mode 100644
index 000000000000..c9a4cde28478
--- /dev/null
+++ b/www/trac-graphviz/pkg-descr
@@ -0,0 +1,4 @@
+The GraphvizPlugin allows for the inline creation of diagrams for abstract
+graphs and networks using the Graphviz programs.
+
+WWW: http://trac-hacks.org/wiki/GraphvizPlugin
diff --git a/www/trac-iniadmin/Makefile b/www/trac-iniadmin/Makefile
new file mode 100644
index 000000000000..e576b28b537e
--- /dev/null
+++ b/www/trac-iniadmin/Makefile
@@ -0,0 +1,24 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= iniadmin
+PORTVERSION= 0.2.3915
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= http://people.freebsd.org/~mm/trac/
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Edit all trac.ini option via the WebAdminPlugin
+
+LICENSE= BSD
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-iniadmin/distinfo b/www/trac-iniadmin/distinfo
new file mode 100644
index 000000000000..087b5a9878ef
--- /dev/null
+++ b/www/trac-iniadmin/distinfo
@@ -0,0 +1,2 @@
+SHA256 (iniadminplugin-0.2.3915.tar.gz) = 43ebd22de58f79922b84aef87d4727baa04c6e56830385565484013313777389
+SIZE (iniadminplugin-0.2.3915.tar.gz) = 2735
diff --git a/www/trac-iniadmin/pkg-descr b/www/trac-iniadmin/pkg-descr
new file mode 100644
index 000000000000..702563423e46
--- /dev/null
+++ b/www/trac-iniadmin/pkg-descr
@@ -0,0 +1,3 @@
+Edit all trac.ini options via the WebAdminPlugin
+
+WWW: https://trac-hacks.org/wiki/IniAdminPlugin
diff --git a/www/trac-keywords/Makefile b/www/trac-keywords/Makefile
new file mode 100644
index 000000000000..ff6f01d68104
--- /dev/null
+++ b/www/trac-keywords/Makefile
@@ -0,0 +1,31 @@
+# Created by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
+# $FreeBSD$
+
+PORTNAME= keywords
+PORTVERSION= 0.2
+PORTREVISION= 4
+CATEGORIES= www python
+MASTER_SITES= http://dist.codelabs.ru/fbsd/
+PKGNAMEPREFIX= trac-
+DISTNAME= trackeywordsplugin-r${REL}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for using pre-configured keywords
+
+LICENSE= BSD3CLAUSE
+
+RUN_DEPENDS= trac>=0.11:www/trac
+
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+WRKSRC= ${WRKDIR}/trackeywordsplugin/0.11
+NO_ARCH= yes
+REL= 7273
+
+post-extract:
+# Fix misplaced Genshi template: https://trac-hacks.org/ticket/6104
+ @${MV} ${WRKDIR}/trackeywordsplugin/0.10/trackeywords/templates/keywords.html ${WRKSRC}/trackeywords/templates/
+# Seems like web_ui.py was misplaced too.
+ @${MV} ${WRKDIR}/trackeywordsplugin/0.10/trackeywords/web_ui.py ${WRKSRC}/trackeywords/
+
+.include <bsd.port.mk>
diff --git a/www/trac-keywords/distinfo b/www/trac-keywords/distinfo
new file mode 100644
index 000000000000..8bfa3a9b928b
--- /dev/null
+++ b/www/trac-keywords/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trackeywordsplugin-r7273.zip) = 64f4e88a96039cbcc35ae835d87ed2a9a1aa28e97281caa443092c52ad18f572
+SIZE (trackeywordsplugin-r7273.zip) = 9528
diff --git a/www/trac-keywords/files/patch-fix-javascript b/www/trac-keywords/files/patch-fix-javascript
new file mode 100644
index 000000000000..cb0e6270b48c
--- /dev/null
+++ b/www/trac-keywords/files/patch-fix-javascript
@@ -0,0 +1,22 @@
+--- trackeywords/templates/keywords.cs.orig 2007-09-11 15:09:40 UTC
++++ trackeywords/templates/keywords.cs
+@@ -9,7 +9,7 @@ function initTags() {
+ var el = document.getElementById('keywords');
+ var currentTags = el.value.split(/\s+/);
+ for(i in currentTags) {
+- link = document.getElementById('add_' + currentTags[i]);
++ var link = document.getElementById('add_' + currentTags[i]);
+ if(link)
+ link.className = "sel";
+ }
+--- trackeywords/templates/keywords.html.orig 2009-09-09 13:18:34 UTC
++++ trackeywords/templates/keywords.html
+@@ -14,7 +14,7 @@ function initTags() {
+ var currentTags = el.value.split(/\s+/);
+
+ for(i in currentTags) {
+- link = document.getElementById('add_' + currentTags[i]);
++ var link = document.getElementById('add_' + currentTags[i]);
+ if(link)
+ link.className = "sel";
+ }
diff --git a/www/trac-keywords/files/patch-trackeywords_web__ui.py b/www/trac-keywords/files/patch-trackeywords_web__ui.py
new file mode 100644
index 000000000000..5ad5c2e587c3
--- /dev/null
+++ b/www/trac-keywords/files/patch-trackeywords_web__ui.py
@@ -0,0 +1,12 @@
+--- trackeywords/web_ui.py.orig 2009-09-09 13:18:34 UTC
++++ trackeywords/web_ui.py
+@@ -80,7 +80,8 @@ class TracKeywordsComponent(core.Compone
+
+ # changed to Genshi signature
+ def post_process_request(self, req, template, data, content_type):
+- data['keywords'] = self._get_keywords()
++ if data is not None:
++ data['keywords'] = self._get_keywords()
+ return (template, data, content_type)
+
+ ### ITemplateProvider methods
diff --git a/www/trac-keywords/pkg-descr b/www/trac-keywords/pkg-descr
new file mode 100644
index 000000000000..c7a3e9d9d598
--- /dev/null
+++ b/www/trac-keywords/pkg-descr
@@ -0,0 +1,4 @@
+This plug-in allows you to add entries to the Keywords entry field
+from a configured list of keywords by clicking on them.
+
+WWW: https://trac-hacks.org/wiki/TracKeywordsPlugin
diff --git a/www/trac-keywordsecretticket/Makefile b/www/trac-keywordsecretticket/Makefile
new file mode 100644
index 000000000000..ebd67236d779
--- /dev/null
+++ b/www/trac-keywordsecretticket/Makefile
@@ -0,0 +1,26 @@
+# Created by: Hung-Yi Chen <gaod@hychen.org>
+# $FreeBSD$
+
+PORTNAME= keywordsecretticket
+PORTVERSION= 1.0.2
+CATEGORIES= www devel python
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= gaod@hychen.org
+COMMENT= Ticket security policy based on keyword for Trac
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7
+
+USE_GITHUB= yes
+GH_ACCOUNT= trac-hacks
+GH_PROJECT= trac-keyword-secret-ticket-plugin
+
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-keywordsecretticket/distinfo b/www/trac-keywordsecretticket/distinfo
new file mode 100644
index 000000000000..51710f9c3257
--- /dev/null
+++ b/www/trac-keywordsecretticket/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1541880058
+SHA256 (trac-hacks-trac-keyword-secret-ticket-plugin-1.0.2_GH0.tar.gz) = 60a364b359f5d7b856d69106a1810e958db7947bde6a1506272497c752c37fdd
+SIZE (trac-hacks-trac-keyword-secret-ticket-plugin-1.0.2_GH0.tar.gz) = 2832
diff --git a/www/trac-keywordsecretticket/pkg-descr b/www/trac-keywordsecretticket/pkg-descr
new file mode 100644
index 000000000000..8d61773438ed
--- /dev/null
+++ b/www/trac-keywordsecretticket/pkg-descr
@@ -0,0 +1,3 @@
+Adds ticket security policy based on keyword.
+
+WWW: https://github.com/KKBOX/trac-keyword-secret-ticket-plugin
diff --git a/www/trac-ldap/Makefile b/www/trac-ldap/Makefile
new file mode 100644
index 000000000000..2272155f7600
--- /dev/null
+++ b/www/trac-ldap/Makefile
@@ -0,0 +1,42 @@
+# $FreeBSD$
+
+PORTNAME= ldap
+PORTVERSION= 0.7.0.${SVN_REVISION}
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/matthew
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Trac plugin to use LDAP to store permissions
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac \
+ trac-accountmanager>0:www/trac-accountmanager
+
+NO_ARCH= yes
+PORTSCOUT= ignore:1
+SVN_REVISION= 15146
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export --non-interactive \
+ --trust-server-cert-failures=unknown-ca \
+ --revision ${SVN_REVISION} \
+ https://trac-hacks.org/svn/${PORTNAME}plugin/0.12/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-ldap/distinfo b/www/trac-ldap/distinfo
new file mode 100644
index 000000000000..4e0b8be2c9b1
--- /dev/null
+++ b/www/trac-ldap/distinfo
@@ -0,0 +1,2 @@
+SHA256 (ldapplugin-0.7.0.15146.tar.gz) = 3d7fcd4e8bca7155482982b0c521eb26b0101756d9bffd301b813ffa757a9895
+SIZE (ldapplugin-0.7.0.15146.tar.gz) = 40960
diff --git a/www/trac-ldap/pkg-descr b/www/trac-ldap/pkg-descr
new file mode 100644
index 000000000000..ef5e8325fe25
--- /dev/null
+++ b/www/trac-ldap/pkg-descr
@@ -0,0 +1,9 @@
+LDAP extensions to grant group permissions
+
+This extension enables the use of existing LDAP groups to grant
+permissions rather than defining permissions for every single user on
+the system. Also permits storage of permissions (both users and
+groups permissions) in the LDAP directory itself rather than in the
+database backend.
+
+WWW: https://trac-hacks.org/wiki/LdapPlugin
diff --git a/www/trac-ldapauthstore/Makefile b/www/trac-ldapauthstore/Makefile
new file mode 100644
index 000000000000..120ec49d25ca
--- /dev/null
+++ b/www/trac-ldapauthstore/Makefile
@@ -0,0 +1,44 @@
+# $FreeBSD$
+
+PORTNAME= ldapauthstore
+PORTVERSION= 0.3.2.${SVN_REVISION}
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/matthew
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Trac AccountManager plugin using LDAP authentication store
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac \
+ trac-accountmanager>0:www/trac-accountmanager \
+ trac-ldap>0:www/trac-ldap \
+ ${PYTHON_PKGNAMEPREFIX}ldap>0:net/py-ldap@${PY_FLAVOR}
+
+NO_ARCH= yes
+PORTSCOUT= ignore:1
+SVN_REVISION= 15146
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export --non-interactive \
+ --trust-server-cert-failures=unknown-ca \
+ --revision ${SVN_REVISION} \
+ https://trac-hacks.org/svn/${PORTNAME}plugin/trunk/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-ldapauthstore/distinfo b/www/trac-ldapauthstore/distinfo
new file mode 100644
index 000000000000..eb1d63e430cc
--- /dev/null
+++ b/www/trac-ldapauthstore/distinfo
@@ -0,0 +1,2 @@
+SHA256 (ldapauthstoreplugin-0.3.2.15146.tar.gz) = 380797ff3a965373e36d274dc2b85549d5d9abd5d9eac3278f8b2160a69d52f6
+SIZE (ldapauthstoreplugin-0.3.2.15146.tar.gz) = 25600
diff --git a/www/trac-ldapauthstore/pkg-descr b/www/trac-ldapauthstore/pkg-descr
new file mode 100644
index 000000000000..6225d598c76e
--- /dev/null
+++ b/www/trac-ldapauthstore/pkg-descr
@@ -0,0 +1,9 @@
+This plugin is a password store for the AccountManagerPlugin that
+provides authentication and group membership from an LDAP
+service. Users are authenticated by performing an LDAP bind against a
+directory using their credentials. The plugin will also pull the email
+address and username from the directory and populate the
+session_attribute table.
+
+WWW: https://trac-hacks.org/wiki/LdapAuthStorePlugin
+
diff --git a/www/trac-math/Makefile b/www/trac-math/Makefile
new file mode 100644
index 000000000000..d9b3230a9a3b
--- /dev/null
+++ b/www/trac-math/Makefile
@@ -0,0 +1,35 @@
+# $FreeBSD$
+
+PORTNAME= math
+PORTVERSION= 0.1
+PORTREVISION= 8
+CATEGORIES= www math python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Support for LaTeX math formulas in wiki pages
+
+RUN_DEPENDS= tracd:www/trac
+
+USE_TEX= latex
+SUB_FILES= pkg-message
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export http://trac-hacks.org/svn/tracmathplugin/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-math/distinfo b/www/trac-math/distinfo
new file mode 100644
index 000000000000..8b57fe8b56f0
--- /dev/null
+++ b/www/trac-math/distinfo
@@ -0,0 +1,2 @@
+SHA256 (math-0.1.tar.gz) = 6690f91e1905b6a3f213edb2a69e9268695a7acc1b3df921e963d453d9b2b2db
+SIZE (math-0.1.tar.gz) = 12800
diff --git a/www/trac-math/files/patch-tracmath_tracmath.py b/www/trac-math/files/patch-tracmath_tracmath.py
new file mode 100644
index 000000000000..f0b37da150da
--- /dev/null
+++ b/www/trac-math/files/patch-tracmath_tracmath.py
@@ -0,0 +1,21 @@
+--- tracmath/tracmath.py.orig 2008-04-04 08:58:46 UTC
++++ tracmath/tracmath.py
+@@ -4,8 +4,8 @@ This has currently been tested only on t
+ """
+
+ import codecs
++import hashlib
+ import re
+-import sha
+ from cStringIO import StringIO
+ import os
+ import sys
+@@ -142,7 +142,7 @@ class TracMathPlugin(Component):
+ if m:
+ label = m.group(1)
+
+- key = sha.new(content.encode('utf-8')).hexdigest()
++ key = hashlib.sha1(content.encode('utf-8')).hexdigest()
+
+ imgname = key + '.png'
+ imgpath = os.path.join(self.cacheDirectory, imgname)
diff --git a/www/trac-math/files/pkg-message.in b/www/trac-math/files/pkg-message.in
new file mode 100644
index 000000000000..bb0738e10587
--- /dev/null
+++ b/www/trac-math/files/pkg-message.in
@@ -0,0 +1,17 @@
+[
+{ type: install
+ message: <<EOM
+To use the plugin, you must add at least the following to your trac.ini.
+
+ [tracmath]
+ latex_cmd = %%LOCALBASE%%/bin/latex
+ dvipng_cmd = %%LOCALBASE%%/bin/dvipng
+
+You may also wish to set:
+
+ cache_dir = <cache directory>
+ max_png = <max number of pngs in cache - defaults to 500>
+ use_dollars = enabled
+EOM
+}
+]
diff --git a/www/trac-math/pkg-descr b/www/trac-math/pkg-descr
new file mode 100644
index 000000000000..eb49bb16f000
--- /dev/null
+++ b/www/trac-math/pkg-descr
@@ -0,0 +1,4 @@
+Allow embedded equations in wiki pages. Basically a port of mt-math to
+trac.
+
+WWW: https://trac-hacks.org/wiki/TracMathPlugin
diff --git a/www/trac-mercurial/Makefile b/www/trac-mercurial/Makefile
new file mode 100644
index 000000000000..d14af09a6463
--- /dev/null
+++ b/www/trac-mercurial/Makefile
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+PORTNAME= mercurial
+PORTVERSION= 1.0.0.3
+PORTREVISION= 2
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/rm
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin to use Mercurial instead of Subversion in Trac
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= ${PY_MERCURIAL} \
+ tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-mercurial/distinfo b/www/trac-mercurial/distinfo
new file mode 100644
index 000000000000..17567214e9d4
--- /dev/null
+++ b/www/trac-mercurial/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/mercurialplugin-1.0.0.3.tar.gz) = 733f0e30c5b3e9521f72b755f471b8b8f9ae27f5643ab7ffb01d6ca4bcda2bc9
+SIZE (trac/mercurialplugin-1.0.0.3.tar.gz) = 26597
diff --git a/www/trac-mercurial/pkg-descr b/www/trac-mercurial/pkg-descr
new file mode 100644
index 000000000000..00fdabf14e4e
--- /dev/null
+++ b/www/trac-mercurial/pkg-descr
@@ -0,0 +1,4 @@
+This a plugin for Trac which enables Mercurial to be used instead of Subversion
+as the VersioningSystemBackend for Trac.
+
+WWW: http://trac.edgewall.org/wiki/TracMercurial
diff --git a/www/trac-navadd/Makefile b/www/trac-navadd/Makefile
new file mode 100644
index 000000000000..627a78815a59
--- /dev/null
+++ b/www/trac-navadd/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+PORTNAME= navadd
+PORTVERSION= 0.1
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for adding navigation items into Trac navigation bars
+
+LICENSE= BSD
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin
+
+.include <bsd.port.mk>
diff --git a/www/trac-navadd/distinfo b/www/trac-navadd/distinfo
new file mode 100644
index 000000000000..d5c0b8c185bf
--- /dev/null
+++ b/www/trac-navadd/distinfo
@@ -0,0 +1,2 @@
+SHA256 (navaddplugin-0.1.tar.gz) = be851c37c704e1c031e8043bf9845a259c5c9f3b2e1828be7dcbd5b9f8b0d4fa
+SIZE (navaddplugin-0.1.tar.gz) = 981
diff --git a/www/trac-navadd/pkg-descr b/www/trac-navadd/pkg-descr
new file mode 100644
index 000000000000..9c38a36e61a1
--- /dev/null
+++ b/www/trac-navadd/pkg-descr
@@ -0,0 +1,9 @@
+This plugin allows you to add custom items ("buttons") to both the main
+and the meta navigation bar. Item name, title and URL can be specified
+in trac.ini, as well as an optional permission the user is required to
+have to see the item.
+
+The plugin was inspired by and derived from NavMoverPlugin. In contrast
+to NavMoverPlugin this plugin does not hide navigation bars.
+
+WWW: https://trac-hacks.org/wiki/NavAddPlugin
diff --git a/www/trac-permredirect/Makefile b/www/trac-permredirect/Makefile
new file mode 100644
index 000000000000..091aae99a68b
--- /dev/null
+++ b/www/trac-permredirect/Makefile
@@ -0,0 +1,27 @@
+# Created by: Grzegorz Blach <gblach@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= permredirect
+PORTVERSION= 3.0
+PORTREVISION= 1
+CATEGORIES= www devel python
+MASTER_SITES= http://trac-hacks.org/changeset/${REV}/${PORTNAME}plugin/tags/${PORTVERSION}?old_path=${PORTNAME}plugin&format=zip&filename= \
+ LOCAL/gblach/
+PKGNAMEPREFIX= trac-
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Redirect users to the login screen on PermissionError
+
+LICENSE= BSD
+
+RUN_DEPENDS= tracd:www/trac
+
+FETCH_BEFORE_ARGS= -o ${DISTFILES}
+REV= 13353
+USES= python:2.7 zip:infozip
+USE_PYTHON= distutils autoplist
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/tags/${PORTVERSION}
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-permredirect/distinfo b/www/trac-permredirect/distinfo
new file mode 100644
index 000000000000..c685a3fa4664
--- /dev/null
+++ b/www/trac-permredirect/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/permredirect-3.0.zip) = cdad7f4efefeda90a54cb079ee0ef73eb157227074a638c211481b8b7b89721f
+SIZE (trac/permredirect-3.0.zip) = 2095
diff --git a/www/trac-permredirect/pkg-descr b/www/trac-permredirect/pkg-descr
new file mode 100644
index 000000000000..050b9c799e00
--- /dev/null
+++ b/www/trac-permredirect/pkg-descr
@@ -0,0 +1,3 @@
+Trac plugin which redirects users to the login screen on PermissionError.
+
+WWW: https://trac-hacks.org/wiki/PermRedirectPlugin
diff --git a/www/trac-privatetickets/Makefile b/www/trac-privatetickets/Makefile
new file mode 100644
index 000000000000..1ea12adbb489
--- /dev/null
+++ b/www/trac-privatetickets/Makefile
@@ -0,0 +1,22 @@
+# Created by: Li-Wen Hsu <lwhsu@lwhsu.org>
+# $FreeBSD$
+
+PORTNAME= privatetickets
+PORTVERSION= 2.3.0
+CATEGORIES= www devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= trac-
+DISTNAME= TracPrivateTickets-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Modified ticket security for Trac
+
+LICENSE= BSD2CLAUSE
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-privatetickets/distinfo b/www/trac-privatetickets/distinfo
new file mode 100644
index 000000000000..6b98af1f5e5f
--- /dev/null
+++ b/www/trac-privatetickets/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1536176139
+SHA256 (TracPrivateTickets-2.3.0.tar.gz) = 6ab51573ccafa937b5c9f80c9fa152483d20173823779b6ffc88c0efed7c4a86
+SIZE (TracPrivateTickets-2.3.0.tar.gz) = 5933
diff --git a/www/trac-privatetickets/pkg-descr b/www/trac-privatetickets/pkg-descr
new file mode 100644
index 000000000000..ed2b54c339bd
--- /dev/null
+++ b/www/trac-privatetickets/pkg-descr
@@ -0,0 +1,12 @@
+Allow users to only see tickets they are associated with.
+
+There are three new permissions for this plugin: TICKET_VIEW_REPORTER,
+TICKET_VIEW_CC, and TICKET_VIEW_OWNER. TICKET_VIEW_SELF is an alias
+for all three of these.
+
+With each permission, users will only be able to see tickets where they are
+the person mentioned in the permission. So if a user has TICKET_VIEW_REPORTER,
+they can only see tickets they reported. For TICKET_VIEW_CC, they just have to
+be included in the CC list.
+
+WWW: https://trac-hacks.org/wiki/PrivateTicketsPlugin
diff --git a/www/trac-pydotorgtheme/Makefile b/www/trac-pydotorgtheme/Makefile
new file mode 100644
index 000000000000..e7f0a9e9b700
--- /dev/null
+++ b/www/trac-pydotorgtheme/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+PORTNAME= pydotorgtheme
+PORTVERSION= 2.0
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Theme that emulates the look of python.org
+
+LICENSE= BSD
+
+RUN_DEPENDS= tracd:www/trac \
+ trac-themeengine>=2.0:www/trac-themeengine
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+WRKSRC= ${WRKDIR}/${PORTNAME}
+
+.include <bsd.port.mk>
diff --git a/www/trac-pydotorgtheme/distinfo b/www/trac-pydotorgtheme/distinfo
new file mode 100644
index 000000000000..eeabe8617a6c
--- /dev/null
+++ b/www/trac-pydotorgtheme/distinfo
@@ -0,0 +1,2 @@
+SHA256 (pydotorgtheme-2.0.tar.gz) = 22158d92710938ef7a7ccc4622461a820d596c8292b208d06a981355d0a9d178
+SIZE (pydotorgtheme-2.0.tar.gz) = 2732
diff --git a/www/trac-pydotorgtheme/pkg-descr b/www/trac-pydotorgtheme/pkg-descr
new file mode 100644
index 000000000000..966de1bc7e82
--- /dev/null
+++ b/www/trac-pydotorgtheme/pkg-descr
@@ -0,0 +1,3 @@
+This is a theme that emulates the look of python.org.
+
+WWW: https://trac-hacks.org/wiki/PyDotOrgTheme
diff --git a/www/trac-scrumburndown/Makefile b/www/trac-scrumburndown/Makefile
new file mode 100644
index 000000000000..e04a0aff33c5
--- /dev/null
+++ b/www/trac-scrumburndown/Makefile
@@ -0,0 +1,25 @@
+# Created by: Greg Larkin <glarkin@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= scrumburndown
+PORTVERSION= 1.9.2
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin to enable Scrum burndown chart capabilities
+
+LICENSE= APACHE20
+
+RUN_DEPENDS= tracd:www/trac \
+ trac-timingandestimation>=0:www/trac-timingandestimation
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-scrumburndown/distinfo b/www/trac-scrumburndown/distinfo
new file mode 100644
index 000000000000..85dc93d12a6f
--- /dev/null
+++ b/www/trac-scrumburndown/distinfo
@@ -0,0 +1,2 @@
+SHA256 (scrumburndown-1.9.2.tar.gz) = bcd7a685fdc191a590f0485991dd1f69063f9b1f29824beb4b5d775d85f06d95
+SIZE (scrumburndown-1.9.2.tar.gz) = 6194062
diff --git a/www/trac-scrumburndown/pkg-descr b/www/trac-scrumburndown/pkg-descr
new file mode 100644
index 000000000000..57edabdb5640
--- /dev/null
+++ b/www/trac-scrumburndown/pkg-descr
@@ -0,0 +1,4 @@
+This Trac plugin adds burndown chart capabilities, a common part
+of Scrum and other agile development methodologies.
+
+WWW: http://trac-hacks.org/wiki/ScrumBurndownPlugin
diff --git a/www/trac-scrumburndown/pkg-message b/www/trac-scrumburndown/pkg-message
new file mode 100644
index 000000000000..a198216937f0
--- /dev/null
+++ b/www/trac-scrumburndown/pkg-message
@@ -0,0 +1,22 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+timingandestimationplugin.* = enabled
+burndown.* = enabled
+
+to your trac.ini to enable the plugins.
+
+Next, upgrade your database with the command:
+
+ trac-admin /full/path/to/YourProjectName upgrade
+
+Finally, visit:
+http://trac-hacks.org/wiki/ScrumBurndownPlugin#Usingtheplugin
+
+for usage instructions.
+EOM
+}
+]
diff --git a/www/trac-spam-filter/Makefile b/www/trac-spam-filter/Makefile
new file mode 100644
index 000000000000..11d6db34c6be
--- /dev/null
+++ b/www/trac-spam-filter/Makefile
@@ -0,0 +1,23 @@
+# Created by: sutra
+# $FreeBSD$
+
+PORTNAME= TracSpamFilter
+PORTVERSION= 0.2.1
+PORTREVISION= 7
+CATEGORIES= www devel python
+MASTER_SITES= http://zhoushuqun.com/files/ \
+ http://freebsd.unixfreunde.de/sources/
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= zhoushuqun@gmail.com
+COMMENT= Allow different ways to reject contributions that contain spam
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}dev
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-spam-filter/distinfo b/www/trac-spam-filter/distinfo
new file mode 100644
index 000000000000..92a8ef98e72b
--- /dev/null
+++ b/www/trac-spam-filter/distinfo
@@ -0,0 +1,2 @@
+SHA256 (TracSpamFilter-0.2.1.tar.gz) = 9f94e3b8d6daacc7b1e6cb908925d95793726cbc08a22e116ccddbb1210815ec
+SIZE (TracSpamFilter-0.2.1.tar.gz) = 50911
diff --git a/www/trac-spam-filter/pkg-descr b/www/trac-spam-filter/pkg-descr
new file mode 100644
index 000000000000..8f3a8af758a0
--- /dev/null
+++ b/www/trac-spam-filter/pkg-descr
@@ -0,0 +1,4 @@
+A plugin is being developed that will allow different ways to reject
+contributions that contain spam.
+
+WWW: http://trac.edgewall.org/wiki/SpamFilter
diff --git a/www/trac-subtickets/Makefile b/www/trac-subtickets/Makefile
new file mode 100644
index 000000000000..c2a97c506c61
--- /dev/null
+++ b/www/trac-subtickets/Makefile
@@ -0,0 +1,28 @@
+# Created by: Hung-Yi Chen <gaod@hychen.org>
+# $FreeBSD$
+
+PORTNAME= subtickets
+PORTVERSION= 0.2.0.${GITDATE}
+PORTREVISION= 2
+CATEGORIES= www devel python
+MASTER_SITES= http://distfiles.cse.tw/
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= gaod@hychen.org
+COMMENT= Offers sub-ticket feature for managing tickets
+
+LICENSE= BSD3CLAUSE
+
+RUN_DEPENDS= tracd:www/trac
+
+USE_GITHUB= yes
+GH_ACCOUNT= itota
+GH_PROJECT= trac-subtickets-plugin
+GH_TAGNAME= a0fc153
+GITDATE= 20130328
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-subtickets/distinfo b/www/trac-subtickets/distinfo
new file mode 100644
index 000000000000..06e329f9ee44
--- /dev/null
+++ b/www/trac-subtickets/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1477434380
+SHA256 (itota-trac-subtickets-plugin-0.2.0.20130328-a0fc153_GH0.tar.gz) = 06302d61339cae566f5f3e07a69f81679165ad6910a267843ed62a89bc451452
+SIZE (itota-trac-subtickets-plugin-0.2.0.20130328-a0fc153_GH0.tar.gz) = 7439
diff --git a/www/trac-subtickets/files/patch-setup.cfg b/www/trac-subtickets/files/patch-setup.cfg
new file mode 100644
index 000000000000..ae7ca6ad05af
--- /dev/null
+++ b/www/trac-subtickets/files/patch-setup.cfg
@@ -0,0 +1,10 @@
+--- setup.cfg.orig 2012-10-27 18:40:31 UTC
++++ setup.cfg
+@@ -1,6 +1,6 @@
+ [egg_info]
+ tag_build = .dev
+-tag_date = True
++tag_date = False
+
+ [extract_messages]
+ add_comments = TRANSLATOR:
diff --git a/www/trac-subtickets/files/patch-tracsubtickets_api.py b/www/trac-subtickets/files/patch-tracsubtickets_api.py
new file mode 100644
index 000000000000..d36c42d185d3
--- /dev/null
+++ b/www/trac-subtickets/files/patch-tracsubtickets_api.py
@@ -0,0 +1,20 @@
+--- tracsubtickets/api.py.orig 2012-10-27 18:40:31 UTC
++++ tracsubtickets/api.py
+@@ -153,7 +153,7 @@ class SubTicketsSystem(Component):
+ (parent, ticket.id))
+ # add a comment to old parent
+ xticket = Ticket(self.env, parent)
+- xticket.save_changes(author, _('Remove a subticket #%s.') % ticket.id)
++ xticket.save_changes(author, _('Remove a subticket #%s. (%s)') % (ticket.id, ticket['summary']))
+ tn = TicketNotifyEmail(self.env)
+ tn.notify(xticket, newticket=False, modtime=xticket['changetime'])
+
+@@ -164,7 +164,7 @@ class SubTicketsSystem(Component):
+ (parent, ticket.id))
+ # add a comment to new parent
+ xticket = Ticket(self.env, parent)
+- xticket.save_changes(author, _('Add a subticket #%s.') % ticket.id)
++ xticket.save_changes(author, _('Add a subticket #%s. (%s)') % (ticket.id, ticket['summary']))
+ tn = TicketNotifyEmail(self.env)
+ tn.notify(xticket, newticket=False, modtime=xticket['changetime'])
+
diff --git a/www/trac-subtickets/pkg-descr b/www/trac-subtickets/pkg-descr
new file mode 100644
index 000000000000..aca581164563
--- /dev/null
+++ b/www/trac-subtickets/pkg-descr
@@ -0,0 +1,3 @@
+This plugin offers sub-ticket feature for managing tickets.
+
+WWW: http://trac-hacks.org/wiki/SubticketsPlugin
diff --git a/www/trac-tags/Makefile b/www/trac-tags/Makefile
new file mode 100644
index 000000000000..9959761ea12c
--- /dev/null
+++ b/www/trac-tags/Makefile
@@ -0,0 +1,46 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= tags
+DISTVERSION= 0.7.r${SVN_REV}
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Generic tags frontend for trac
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7 tar:bzip2
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.pre.mk>
+
+.if !defined(SVN_REV)
+.if defined(BOOTSTRAP)
+SVN_REV!= svn info http://trac-hacks.org/svn/tagsplugin/trunk/ | ${GREP} Revision | cut -d' ' -f2
+.else
+.include "Makefile.svn_rev"
+.endif
+.endif
+
+.if defined(BOOTSTRAP) || defined(SVN_FETCH)
+FETCH_DEPENDS+= svn:devel/subversion
+
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ svn export -r ${SVN_REV} \
+ http://trac-hacks.org/svn/tagsplugin/trunk/ ${WRKSRC}
+ cd ${WRKDIR}; tar cvfy ${DISTDIR}/${DIST_SUBDIR}/${DISTNAME}.tar.bz2 ${DISTNAME}
+ echo "SVN_REV= ${SVN_REV}" > ${MASTERDIR}/Makefile.svn_rev
+.if ${USER} == brooks
+ scp ${DISTDIR}/${DIST_SUBDIR}/${DISTNAME}.tar.bz2 \
+ freefall.freebsd.org:public_distfiles/
+.endif
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/www/trac-tags/Makefile.svn_rev b/www/trac-tags/Makefile.svn_rev
new file mode 100644
index 000000000000..c45cee588277
--- /dev/null
+++ b/www/trac-tags/Makefile.svn_rev
@@ -0,0 +1 @@
+SVN_REV= 11504
diff --git a/www/trac-tags/distinfo b/www/trac-tags/distinfo
new file mode 100644
index 000000000000..b6385d4dcdff
--- /dev/null
+++ b/www/trac-tags/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/tags-0.7.r11504.tar.bz2) = d4ca2ad73d8e3ab197b854639daf41747ba3bcacccbedd0e0ecc9c291a588353
+SIZE (trac/tags-0.7.r11504.tar.bz2) = 25799
diff --git a/www/trac-tags/files/patch-tractags_model.py b/www/trac-tags/files/patch-tractags_model.py
new file mode 100644
index 000000000000..66f3247eebdd
--- /dev/null
+++ b/www/trac-tags/files/patch-tractags_model.py
@@ -0,0 +1,21 @@
+--- tractags/model.py.orig 2011-12-14 21:19:06 UTC
++++ tractags/model.py
+@@ -62,17 +62,7 @@ class TagModelProvider(Component):
+ self._upgrade_db(db)
+
+ def _need_migration(self, db):
+- try:
+- cursor = db.cursor()
+- cursor.execute("SELECT COUNT(*) FROM wiki_namespace")
+- cursor.fetchone()
+- self.env.log.debug("tractags needs to migrate old data")
+- return True
+- except Exception, e:
+- # The expected outcome for any up-to-date installation.
+- if self.rollback_is_safe:
+- db.rollback()
+- return False
++ return False
+
+ def _upgrade_db(self, db):
+ try:
diff --git a/www/trac-tags/pkg-descr b/www/trac-tags/pkg-descr
new file mode 100644
index 000000000000..42811568371a
--- /dev/null
+++ b/www/trac-tags/pkg-descr
@@ -0,0 +1,6 @@
+The TagsPlugin implements both a generic tagging engine and frontends for the
+Wiki and ticket systems. An extra text entry box is added to the Wiki edit page
+for tagging Wiki pages and ticket fields (you can configure which ones) are
+treated as tags for the ticket system.
+
+WWW: http://trac-hacks.org/wiki/TagsPlugin
diff --git a/www/trac-themeengine/Makefile b/www/trac-themeengine/Makefile
new file mode 100644
index 000000000000..3e5b4ada0b96
--- /dev/null
+++ b/www/trac-themeengine/Makefile
@@ -0,0 +1,23 @@
+# $FreeBSD$
+
+PORTNAME= themeengine
+PORTVERSION= 2.1.3
+PORTREVISION= 2
+CATEGORIES= www devel python
+MASTER_SITES= CHEESESHOP
+PKGNAMEPREFIX= trac-
+DISTNAME= TracThemeEngine-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin to simplify distributing and deploying themes and styles
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7 tar:bzip2
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-themeengine/distinfo b/www/trac-themeengine/distinfo
new file mode 100644
index 000000000000..df222f18c704
--- /dev/null
+++ b/www/trac-themeengine/distinfo
@@ -0,0 +1,2 @@
+SHA256 (TracThemeEngine-2.1.3.tar.bz2) = 1f6f3e0ce4215dd0098c8d17d2e97715bc94407dcf94b819572b967321ba1824
+SIZE (TracThemeEngine-2.1.3.tar.bz2) = 181127
diff --git a/www/trac-themeengine/pkg-descr b/www/trac-themeengine/pkg-descr
new file mode 100644
index 000000000000..ff85496d9bcb
--- /dev/null
+++ b/www/trac-themeengine/pkg-descr
@@ -0,0 +1,4 @@
+This plugin simplifies the process of distributing and deploying
+themes and styles.
+
+WWW: http://trac-hacks.org/wiki/ThemeEnginePlugin
diff --git a/www/trac-ticketimport/Makefile b/www/trac-ticketimport/Makefile
new file mode 100644
index 000000000000..2666cb73e72b
--- /dev/null
+++ b/www/trac-ticketimport/Makefile
@@ -0,0 +1,35 @@
+# $FreeBSD$
+
+PORTNAME= ticketimport
+PORTVERSION= 0.7c
+PORTREVISION= 4
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Import or update tickets from a CSV file or Excel file
+
+LICENSE= BSD3CLAUSE # "same license as trac"
+
+RUN_DEPENDS= tracd:www/trac \
+ ${PYTHON_PKGNAMEPREFIX}xlrd>=0.7.1:textproc/py-xlrd@${PY_FLAVOR}
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export http://trac-hacks.org/svn/ticketimportplugin/0.11/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-ticketimport/distinfo b/www/trac-ticketimport/distinfo
new file mode 100644
index 000000000000..c0514b315361
--- /dev/null
+++ b/www/trac-ticketimport/distinfo
@@ -0,0 +1,2 @@
+SHA256 (ticketimport-0.7c.tar.gz) = a6cab62cc62ba0d599107869b862951f2826e1fce4ac65f57eb066e4d3843643
+SIZE (ticketimport-0.7c.tar.gz) = 2811904
diff --git a/www/trac-ticketimport/pkg-descr b/www/trac-ticketimport/pkg-descr
new file mode 100644
index 000000000000..91e6afcc20f6
--- /dev/null
+++ b/www/trac-ticketimport/pkg-descr
@@ -0,0 +1,15 @@
+This plugin lets you import into Trac a series of tickets from a CSV
+file or (if the xlrd library is installed) from an Excel file.
+
+You can also use it to modify tickets in batch, by saving a report as
+CSV, editing the CSV file, and re-importing the tickets.
+
+This plugin is very useful when starting a new project: you can import a
+list of requirements that may have come from meeting notes, list of
+features, other ticketing systems... It's also great to review the
+tickets off-line, or to do massive changes to tickets.
+
+Based on the ticket id (or, if no id exists, on the summary) in the
+imported file, tickets are either created or updated.
+
+WWW: http://trac-hacks.org/wiki/TicketImportPlugin
diff --git a/www/trac-tickettemplate/Makefile b/www/trac-tickettemplate/Makefile
new file mode 100644
index 000000000000..369295ccfb63
--- /dev/null
+++ b/www/trac-tickettemplate/Makefile
@@ -0,0 +1,24 @@
+# Created by: Eygene Ryabinkin <rea@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= tickettemplate
+PORTVERSION= 0.7
+PORTREVISION= 3
+CATEGORIES= www python
+MASTER_SITES= http://dist.codelabs.ru/fbsd/trac-${PORTNAME}/
+PKGNAMEPREFIX= trac-
+DISTNAME= trac${PORTNAME}plugin-r${REL}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for making ticket templates
+
+RUN_DEPENDS= trac>=0.11:www/trac
+
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+WRKSRC= ${WRKDIR}/trac${PORTNAME}plugin/0.11
+REL= 10605
+
+.include <bsd.port.mk>
diff --git a/www/trac-tickettemplate/distinfo b/www/trac-tickettemplate/distinfo
new file mode 100644
index 000000000000..6bd1fb501fc8
--- /dev/null
+++ b/www/trac-tickettemplate/distinfo
@@ -0,0 +1,2 @@
+SHA256 (tractickettemplateplugin-r10605.zip) = b37a9509ace8ebb2b73b79fd614e3c5f00cc7cfc7cbdfd6e38f581880eed95f2
+SIZE (tractickettemplateplugin-r10605.zip) = 48209
diff --git a/www/trac-tickettemplate/pkg-descr b/www/trac-tickettemplate/pkg-descr
new file mode 100644
index 000000000000..02af7d2b312f
--- /dev/null
+++ b/www/trac-tickettemplate/pkg-descr
@@ -0,0 +1,4 @@
+TicketTemplate enable users to create ticket using templates
+which can be customized by Trac administrator and themselves.
+
+WWW: http://trac-hacks.org/wiki/TracTicketTemplatePlugin
diff --git a/www/trac-timingandestimation/Makefile b/www/trac-timingandestimation/Makefile
new file mode 100644
index 000000000000..412c47c4e51b
--- /dev/null
+++ b/www/trac-timingandestimation/Makefile
@@ -0,0 +1,23 @@
+# Created by: Greg Larkin <glarkin@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= timingandestimation
+PORTVERSION= 1.0.8b
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Add estimation and time tracking functionality to Trac
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/branches/trac0.12-Permissions
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-timingandestimation/distinfo b/www/trac-timingandestimation/distinfo
new file mode 100644
index 000000000000..a1a4118b4f2c
--- /dev/null
+++ b/www/trac-timingandestimation/distinfo
@@ -0,0 +1,2 @@
+SHA256 (timingandestimationplugin-1.0.8b.zip) = d12eea326e03a27aa7fc3bda5b75ed21749c071bb5cf2e74a4736c1c602ca252
+SIZE (timingandestimationplugin-1.0.8b.zip) = 88910
diff --git a/www/trac-timingandestimation/pkg-descr b/www/trac-timingandestimation/pkg-descr
new file mode 100644
index 000000000000..424edf1f2590
--- /dev/null
+++ b/www/trac-timingandestimation/pkg-descr
@@ -0,0 +1,6 @@
+This is a plugin that adds (aspires to add) estimation and time
+tracking to Trac. This basically adds CustomFields and CustomReports
+and an interface for filling the dynamic variables for the report
+(requires Javascript).
+
+WWW: http://trac-hacks.org/wiki/TimingAndEstimationPlugin
diff --git a/www/trac-timingandestimation/pkg-message b/www/trac-timingandestimation/pkg-message
new file mode 100644
index 000000000000..0fb5bf3b8fff
--- /dev/null
+++ b/www/trac-timingandestimation/pkg-message
@@ -0,0 +1,21 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+timingandestimationplugin.* = enabled
+
+to your trac.ini to enable the plugin.
+
+Next, upgrade your database with the command:
+
+ trac-admin /full/path/to/YourProjectName upgrade
+
+Finally, visit:
+http://trac-hacks.org/wiki/TimingAndEstimationPlugin#PostInstallationConfigurationOptions
+
+for configuration instructions.
+EOM
+}
+]
diff --git a/www/trac-tocmacro/Makefile b/www/trac-tocmacro/Makefile
new file mode 100644
index 000000000000..0cfc8f0789f1
--- /dev/null
+++ b/www/trac-tocmacro/Makefile
@@ -0,0 +1,21 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= tocmacro
+PORTVERSION= 11.0.0.3
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= http://people.freebsd.org/~mm/trac/
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Table of contents macro
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-tocmacro/distinfo b/www/trac-tocmacro/distinfo
new file mode 100644
index 000000000000..82ae9d4b7559
--- /dev/null
+++ b/www/trac-tocmacro/distinfo
@@ -0,0 +1,2 @@
+SHA256 (tocmacro-11.0.0.3.tar.gz) = 0a4432991604739e143f64831ec11772118f9e52655ee77de10c314103adab80
+SIZE (tocmacro-11.0.0.3.tar.gz) = 5125
diff --git a/www/trac-tocmacro/pkg-descr b/www/trac-tocmacro/pkg-descr
new file mode 100644
index 000000000000..e77a455d5fd3
--- /dev/null
+++ b/www/trac-tocmacro/pkg-descr
@@ -0,0 +1,4 @@
+The TocMacro generates a table of contents for the current page or a set of
+pages.
+
+WWW: http://trac-hacks.org/wiki/TocMacro
diff --git a/www/trac-tweakui/Makefile b/www/trac-tweakui/Makefile
new file mode 100644
index 000000000000..79eea59f0374
--- /dev/null
+++ b/www/trac-tweakui/Makefile
@@ -0,0 +1,35 @@
+# Created by: glarkin
+# $FreeBSD$
+
+PORTNAME= tweakui
+PORTVERSION= 0.1.7413
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Easily tweak Trac pages with JavaScript expressions
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= dos2unix python:2.7 zip
+DOS2UNIX_REGEX= .*\.(css|html|js|py|txt)$
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+EXAMPLESDIR= ${PREFIX}/share/examples/${PKGNAMEPREFIX}${PORTNAME}
+PORTEXAMPLES= *
+
+SUB_FILES= pkg-message
+
+WRKSRC= ${WRKDIR}/trac${PORTNAME}plugin/0.11
+
+OPTIONS_DEFINE= EXAMPLES
+
+post-install:
+ cd ${WRKSRC}/tractweakui/htdocs && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}
+
+.include <bsd.port.mk>
diff --git a/www/trac-tweakui/distinfo b/www/trac-tweakui/distinfo
new file mode 100644
index 000000000000..69ab510848b3
--- /dev/null
+++ b/www/trac-tweakui/distinfo
@@ -0,0 +1,2 @@
+SHA256 (tweakuiplugin-0.1.7413.zip) = f067282d97843e9287ea4031de3f100af280942d4feb69d65695e3f6026c6ea3
+SIZE (tweakuiplugin-0.1.7413.zip) = 68697
diff --git a/www/trac-tweakui/files/pkg-message.in b/www/trac-tweakui/files/pkg-message.in
new file mode 100644
index 000000000000..bc3fc1dbd803
--- /dev/null
+++ b/www/trac-tweakui/files/pkg-message.in
@@ -0,0 +1,28 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+tractweakui.* = enabled
+
+to your trac.ini to enable the plugin.
+
+Next, visit:
+http://trac-hacks.org/wiki/TracTweakUiPlugin#Example
+for usage examples.
+
+If you have installed the examples into
+%%EXAMPLESDIR%%,
+you can incorporate them into your Trac project
+with the following command:
+
+cp -Rp %%EXAMPLESDIR%%/* \
+ $TRAC_ENV/htdocs
+
+$TRAC_ENV is the root directory of your Trac
+project. You can copy the TweakUi examples into
+as many Trac projects as you like.
+EOM
+}
+]
diff --git a/www/trac-tweakui/pkg-descr b/www/trac-tweakui/pkg-descr
new file mode 100644
index 000000000000..0657044e85c7
--- /dev/null
+++ b/www/trac-tweakui/pkg-descr
@@ -0,0 +1,9 @@
+This plugin implements a Javascript deployment platform, enabling
+Trac administrators to easily tweak Trac pages with Javascript
+expressions.
+
+The plugin supports the Trac web admin system, and it can apply
+Javascript tweaks to multiple pages by matching their names with
+regular expressions.
+
+WWW: http://trac-hacks.org/wiki/TracTweakUiPlugin
diff --git a/www/trac-vote/Makefile b/www/trac-vote/Makefile
new file mode 100644
index 000000000000..1de0d701ee1d
--- /dev/null
+++ b/www/trac-vote/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+PORTNAME= vote
+PORTVERSION= 0.1.2
+PORTREVISION= 4
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for voting on Trac resources
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+# Maintainter targets below this point
+
+# Retrieve the latest version from SVN and package in a tarball.
+.if defined(BOOTSTRAP)
+FETCH_DEPENDS+= svn:devel/subversion
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ cd ${WRKDIR} && \
+ svn export http://trac-hacks.org/svn/voteplugin/0.11/ \
+ ${DISTNAME}
+ cd ${WRKDIR} && tar cvf ${DISTDIR}/${DISTNAME}.tar.gz ${DISTNAME}
+.endif
+
+.include <bsd.port.mk>
diff --git a/www/trac-vote/distinfo b/www/trac-vote/distinfo
new file mode 100644
index 000000000000..12887a26197a
--- /dev/null
+++ b/www/trac-vote/distinfo
@@ -0,0 +1,2 @@
+SHA256 (vote-0.1.2.tar.gz) = 9f22fc467799ba15ab6ed5fd96ce085909b65fa56781143e6016c17e191791f8
+SIZE (vote-0.1.2.tar.gz) = 30720
diff --git a/www/trac-vote/pkg-descr b/www/trac-vote/pkg-descr
new file mode 100644
index 000000000000..3e81cd5668ce
--- /dev/null
+++ b/www/trac-vote/pkg-descr
@@ -0,0 +1,7 @@
+This plugin adds a context-navigation entry that lets users easily vote
+for a Trac resource, including Wiki pages, tickets, milestones, etc.
+
+If a user has a valid session and the VOTE_MODIFY permission they will
+be able to vote.
+
+WWW: http://trac-hacks.org/wiki/VotePlugin
diff --git a/www/trac-wikigoodies/Makefile b/www/trac-wikigoodies/Makefile
new file mode 100644
index 000000000000..b9cbda7a5007
--- /dev/null
+++ b/www/trac-wikigoodies/Makefile
@@ -0,0 +1,26 @@
+# Created by: Alexey V. Degtyarev <alexey@renatasystems.org>
+# $FreeBSD$
+
+PORTNAME= wikigoodies
+PORTVERSION= 0.3.3522
+PORTREVISION= 3
+CATEGORIES= www devel python
+MASTER_SITES= ftp://ftp.renatasystems.org/pub/FreeBSD/ports/distfiles/
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin.${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin for Trac which extends the Wiki with some goodies
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/0.11
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-wikigoodies/distinfo b/www/trac-wikigoodies/distinfo
new file mode 100644
index 000000000000..408c4f51e4c3
--- /dev/null
+++ b/www/trac-wikigoodies/distinfo
@@ -0,0 +1,2 @@
+SHA256 (wikigoodiesplugin.0.3.3522.tar.gz) = 10a24cf3c4a92dc305051c754590adf43a15baebfd4a2a32869bbe18df6260c8
+SIZE (wikigoodiesplugin.0.3.3522.tar.gz) = 11538
diff --git a/www/trac-wikigoodies/pkg-descr b/www/trac-wikigoodies/pkg-descr
new file mode 100644
index 000000000000..1fcc39de7f3d
--- /dev/null
+++ b/www/trac-wikigoodies/pkg-descr
@@ -0,0 +1,14 @@
+This plugin extends the Trac Wiki in several ways:
+
+- Support for displaying smileys;
+- HTML 4.0 entities (named entities and numerical entities);
+- Automatic replacement of common text idioms by their corresponding symbols
+ (e.g. arrows, fractions, etc.);
+- Simplified markup for single words: *this* /is/ _important_;
+- Replace <name@domain> with "mailto:" links (obfuscated if needed)
+ (0.11 only - though that's now in Trac core);
+- Replace \\... UNC paths with "file:///" links (0.11 only);
+
+Each feature can be disabled individually if needed.
+
+WWW: https://trac-hacks.org/wiki/WikiGoodiesPlugin
diff --git a/www/trac-wikinotification/Makefile b/www/trac-wikinotification/Makefile
new file mode 100644
index 000000000000..45af8074c15d
--- /dev/null
+++ b/www/trac-wikinotification/Makefile
@@ -0,0 +1,24 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= wikinotificationplugin
+PORTVERSION= 0.2.1
+PORTREVISION= 5
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Allow email notifications on wiki page changes
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+RUN_DEPENDS= tracd:www/trac
+
+WRKSRC= ${WRKDIR}/${PORTNAME}
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-wikinotification/distinfo b/www/trac-wikinotification/distinfo
new file mode 100644
index 000000000000..5cc9e2e425d9
--- /dev/null
+++ b/www/trac-wikinotification/distinfo
@@ -0,0 +1,2 @@
+SHA256 (wikinotificationplugin-0.2.1.tar.gz) = 91263ba7ca6e34f54634740cf0f55bd6c84b90f1b36a9f4e9c1b7adf49e8949f
+SIZE (wikinotificationplugin-0.2.1.tar.gz) = 13510
diff --git a/www/trac-wikinotification/files/patch-WikiNotification__notification.py b/www/trac-wikinotification/files/patch-WikiNotification__notification.py
new file mode 100644
index 000000000000..c55eb80a6d4f
--- /dev/null
+++ b/www/trac-wikinotification/files/patch-WikiNotification__notification.py
@@ -0,0 +1,79 @@
+--- WikiNotification/notification.py.orig 2008-03-14 09:02:03 UTC
++++ WikiNotification/notification.py
+@@ -14,14 +14,13 @@
+ # =============================================================================
+
+ import re
+-import md5
+
+ from trac import __version__
+ from trac.core import *
+ from trac.util.text import CRLF
+ from trac.wiki.model import WikiPage
+ from trac.versioncontrol.diff import unified_diff
+-from trac.notification import NotifyEmail
++from trac.notification import NotifyEmail, NotificationSystem
+ from trac.config import Option, BoolOption, ListOption, IntOption
+
+ from genshi.template.text import TextTemplate
+@@ -33,6 +32,7 @@ diff_header = """Index: %(name)s
+ +++ %(name)s (version: %(version)s)
+ """
+
++
+ class WikiNotificationSystem(Component):
+ smtp_from = Option(
+ 'wiki-notification', 'smtp_from', 'trac+wiki@localhost',
+@@ -131,7 +131,7 @@ class WikiNotifyEmail(NotifyEmail):
+ if page.version > 0 and action == 'modified':
+ diff = diff_header % {'name': self.page.name,
+ 'version': self.page.version,
+- 'oldversion': self.page.version -1
++ 'oldversion': self.page.version -1,
+ }
+ oldpage = WikiPage(self.env, page.name, page.version - 1)
+ self.data["oldversion"]= oldpage.version
+@@ -183,8 +183,8 @@ class WikiNotifyEmail(NotifyEmail):
+ public_cc = self.config.getbool('wiki-notification', 'use_public_cc')
+ headers = {}
+ headers['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__
+- headers['X-Trac-Version'] = __version__
+- headers['X-Trac-Project'] = projname
++ headers['X-Trac-Version'] = __version__
++ headers['X-Trac-Project'] = projname
+ headers['X-URL'] = self.config.get('project', 'url')
+ headers['Precedence'] = 'bulk'
+ headers['Auto-Submitted'] = 'auto-generated'
+@@ -284,18 +284,16 @@ class WikiNotifyEmail(NotifyEmail):
+ del msg['Content-Transfer-Encoding']
+ msg.set_charset(self._charset)
+
+- self.add_headers(msg, headers);
+- self.add_headers(msg, mime_headers);
+- self.env.log.info("Sending SMTP notification to %s:%d to %s"
+- % (self.smtp_server, self.smtp_port, recipients))
++ self.add_headers(msg, headers)
++ self.add_headers(msg, mime_headers)
++ self.env.log.info("Sending SMTP notification to %s"
++ % str(recipients))
+ msgtext = msg.as_string()
+ # Ensure the message complies with RFC2822: use CRLF line endings
+ recrlf = re.compile("\r?\n")
+ msgtext = CRLF.join(recrlf.split(msgtext))
+- try:
+- self.server.sendmail(msg['From'], recipients, msgtext)
+- except Exception, err:
+- self.env.log.debug('Notification could not be sent: %r', err)
++ NotificationSystem(self.env).send_email(self.from_email, recipients,
++ msgtext)
+
+ def format_subject(self, action):
+ template = self.config.get('wiki-notification', 'subject_template')
+@@ -308,6 +306,6 @@ class WikiNotifyEmail(NotifyEmail):
+ data = {
+ 'page': self.page,
+ 'prefix': prefix,
+- 'action': action
++ 'action': action,
+ }
+ return template.generate(**data).render('text', encoding=None).strip()
diff --git a/www/trac-wikinotification/files/patch-WikiNotification__templates__wiki_notification_email_template.txt b/www/trac-wikinotification/files/patch-WikiNotification__templates__wiki_notification_email_template.txt
new file mode 100644
index 000000000000..f02f617568d9
--- /dev/null
+++ b/www/trac-wikinotification/files/patch-WikiNotification__templates__wiki_notification_email_template.txt
@@ -0,0 +1,59 @@
+--- WikiNotification/templates/wiki_notification_email_template.txt.orig 2008-03-14 09:02:03 UTC
++++ WikiNotification/templates/wiki_notification_email_template.txt
+@@ -1,40 +1,40 @@
+
+-#if action == 'added'
++{% if action == 'added' %}
+ Added page "${name}" by ${author} from ${ip}*
+ Page URL: <${link}>
+- #if comment
++ {% if comment %}
+ Comment: ${comment}
+- #end
++ {% end %}
+ Content:
+ -------8<------8<------8<------8<------8<------8<------8<------8<--------
+ ${text}
+ -------8<------8<------8<------8<------8<------8<------8<------8<--------
+-#end
+-#if action == 'modified'
++{% end %}
++{% if action == 'modified' %}
+ Changed page "${name}" by ${author} from ${ip}*
+ Page URL: <${link}>
+ Diff URL: <${linkdiff}>
+ Revision ${version}
+- #if comment
++ {% if comment %}
+ Comment: ${comment}
+- #end
++ {% end %}
+
+- #if wikidiff!=None
++ {% if wikidiff!=None %}
+ -------8<------8<------8<------8<------8<------8<------8<------8<--------
+ ${wikidiff}
+ -------8<------8<------8<------8<------8<------8<------8<------8<--------
+- #end
+- #if wikidiff==None
++ {% end %}
++ {% if wikidiff==None %}
+ Changes on attached ${name}.diff file.
+- #end
+-#end
+-#if action == 'deleted'
++ {% end %}
++{% end %}
++{% if action == 'deleted' %}
+ Deleted page "${name}" by ${author} from ${ip}*
+-#end
+-#if action == 'deleted_version'
++{% end %}
++{% if action == 'deleted_version' %}
+ Page URL: <${link}>
+ Deleted version "${version}" of page "${name}" by ${author} from ${ip}*
+-#end
++{% end %}
+
+ * The IP shown here might not mean anything if the user or the server is
+ behind a proxy.
diff --git a/www/trac-wikinotification/pkg-descr b/www/trac-wikinotification/pkg-descr
new file mode 100644
index 000000000000..0936ff2025d0
--- /dev/null
+++ b/www/trac-wikinotification/pkg-descr
@@ -0,0 +1,5 @@
+Trac Wiki Notification is a plugin that allows users (even anonymous,
+as long as email is set) to select wiki pages that they wish to be
+notified (by email) when a change occurs on it.
+
+WWW: http://trac-hacks.org/wiki/WikiNotificationPlugin
diff --git a/www/trac-wikinotification/pkg-message b/www/trac-wikinotification/pkg-message
new file mode 100644
index 000000000000..83fb3af296f6
--- /dev/null
+++ b/www/trac-wikinotification/pkg-message
@@ -0,0 +1,17 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+wikinotification.* = enabled
+
+to your trac.ini to enable the plugin.
+
+Next, visit:
+http://wikinotification.ufsoft.org/wiki/Documentation/0.2.x
+
+for additional configuration instructions.
+EOM
+}
+]
diff --git a/www/trac-wikitemplates/Makefile b/www/trac-wikitemplates/Makefile
new file mode 100644
index 000000000000..74f21c59bf9e
--- /dev/null
+++ b/www/trac-wikitemplates/Makefile
@@ -0,0 +1,27 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= wikitemplates
+PORTVERSION= 0.3.0p3
+PORTREVISION= 6
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/glarkin
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION:S/p/rc/}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Templates for the Trac wiki
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+RUN_DEPENDS= tracd:www/trac
+# ${PYTHON_SITELIBDIR}/TracCtxtnavAdd-2.0-py${PYTHON_VER}.egg:www/trac-ctxtnavadd
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-wikitemplates/distinfo b/www/trac-wikitemplates/distinfo
new file mode 100644
index 000000000000..29cf794ed22d
--- /dev/null
+++ b/www/trac-wikitemplates/distinfo
@@ -0,0 +1,2 @@
+SHA256 (wikitemplatesplugin-0.3.0rc3.tar.gz) = c6299de414f4c4d23d3e84f4724ee5a926380e26ab73576fed889b5a11974bae
+SIZE (wikitemplatesplugin-0.3.0rc3.tar.gz) = 46332
diff --git a/www/trac-wikitemplates/pkg-descr b/www/trac-wikitemplates/pkg-descr
new file mode 100644
index 000000000000..c75be7e210cf
--- /dev/null
+++ b/www/trac-wikitemplates/pkg-descr
@@ -0,0 +1,4 @@
+WikiTemplates is a Trac plugin. This plugin will provide you a way to include
+parts of other wiki pages, the templates, into our current wiki page.
+
+WWW: http://trac-hacks.org/wiki/WikiTemplatesPlugin
diff --git a/www/trac-wikitopdf/Makefile b/www/trac-wikitopdf/Makefile
new file mode 100644
index 000000000000..eaf64467769a
--- /dev/null
+++ b/www/trac-wikitopdf/Makefile
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+PORTNAME= wikitopdf
+PORTVERSION= 2.2.2
+PORTREVISION= 7
+CATEGORIES= www devel python
+MASTER_SITES= LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Plugin to generate PDF documents from the Wiki
+
+RUN_DEPENDS= htmldoc:textproc/htmldoc \
+ tracd:www/trac
+
+USES= python:2.7
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin
+
+.include <bsd.port.mk>
diff --git a/www/trac-wikitopdf/distinfo b/www/trac-wikitopdf/distinfo
new file mode 100644
index 000000000000..7906b1099a34
--- /dev/null
+++ b/www/trac-wikitopdf/distinfo
@@ -0,0 +1,2 @@
+SHA256 (wikitopdfplugin-2.2.2.tar.gz) = fdc9ad5a928ba6850f946ada50129c28267a7f3974389422514397c58a3c9f7b
+SIZE (wikitopdfplugin-2.2.2.tar.gz) = 1819454
diff --git a/www/trac-wikitopdf/pkg-descr b/www/trac-wikitopdf/pkg-descr
new file mode 100644
index 000000000000..078708c7a266
--- /dev/null
+++ b/www/trac-wikitopdf/pkg-descr
@@ -0,0 +1,15 @@
+WikiToPdf combines the functionality of CombineWikiPlugin and
+PageToPdfPlugin on only one plugin and allows one to setup a template
+file used to generate the PDF file with a cover and a licence page, for
+example.
+
+At the end of each wiki page there is a link named WikiToPdf and
+works like athomas PageToPdfPlugin plugin but takes into account the
+parameters on trac.ini (see below) and passes them to htmldoc.
+
+Alternatively, it's possible to select one or more wiki pages and
+generate one single PDF file just like coderanger work with a cover and
+a licence from a template file. This feature also takes into account the
+parameters on trac.ini.
+
+WWW: http://trac-hacks.org/wiki/TracWikiToPdfPlugin
diff --git a/www/trac-wysiwyg/Makefile b/www/trac-wysiwyg/Makefile
new file mode 100644
index 000000000000..e9be92c80b0a
--- /dev/null
+++ b/www/trac-wysiwyg/Makefile
@@ -0,0 +1,43 @@
+# Created by: Greg Larkin <glarkin@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= wysiwyg
+DISTVERSION= 0.4.${SVN_REV}
+PORTREVISION= 2
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/ \
+ LOCAL/brooks
+PKGNAMEPREFIX= trac-
+DIST_SUBDIR= trac
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= WYSIWYG editor for Trac wiki
+
+RUN_DEPENDS= tracd:www/trac
+
+USES= python:2.7 tar:bzip2
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.pre.mk>
+
+.if !defined(SVN_REV)
+.if defined(BOOTSTRAP)
+SVN_URL= http://trac-hacks.org/svn/tracwysiwygplugin/0.12/
+SVN_REV!= svn info ${SVN_URL} | ${GREP} Revision | cut -d' ' -f2
+.else
+.include "Makefile.svn_rev"
+.endif
+.endif
+
+.if defined(BOOTSTRAP) || defined(SVN_FETCH)
+FETCH_DEPENDS+= svn:devel/subversion
+
+do-fetch:
+ ${MKDIR} ${WRKDIR}
+ svn export -r ${SVN_REV} ${SVN_URL} ${WRKSRC}
+ cd ${WRKDIR}; tar cvfy ${DISTDIR}/${DIST_SUBDIR}/${DISTNAME}.tar.bz2 ${DISTNAME}
+ echo "SVN_REV= ${SVN_REV}" > ${MASTERDIR}/Makefile.svn_rev
+.endif
+
+.include <bsd.port.post.mk>
diff --git a/www/trac-wysiwyg/Makefile.svn_rev b/www/trac-wysiwyg/Makefile.svn_rev
new file mode 100644
index 000000000000..c5f669401716
--- /dev/null
+++ b/www/trac-wysiwyg/Makefile.svn_rev
@@ -0,0 +1 @@
+SVN_REV= 11508
diff --git a/www/trac-wysiwyg/distinfo b/www/trac-wysiwyg/distinfo
new file mode 100644
index 000000000000..91602684b96d
--- /dev/null
+++ b/www/trac-wysiwyg/distinfo
@@ -0,0 +1,2 @@
+SHA256 (trac/wysiwyg-0.4.11508.tar.bz2) = 2c988573b57bd4942fad7b023b2faed9a82e3a11beec130cba38ada98de91895
+SIZE (trac/wysiwyg-0.4.11508.tar.bz2) = 41353
diff --git a/www/trac-wysiwyg/pkg-descr b/www/trac-wysiwyg/pkg-descr
new file mode 100644
index 000000000000..b9b647ff36fc
--- /dev/null
+++ b/www/trac-wysiwyg/pkg-descr
@@ -0,0 +1,5 @@
+This plugin provides a wiki WYSIWYG editor that generates Trac
+wiki markup. This enables users to switch between the WYSIWYG mode
+and the standard wiki markup format, as needed.
+
+WWW: http://trac-hacks.org/wiki/TracWysiwygPlugin
diff --git a/www/trac-wysiwyg/pkg-message b/www/trac-wysiwyg/pkg-message
new file mode 100644
index 000000000000..e4b42c817f80
--- /dev/null
+++ b/www/trac-wysiwyg/pkg-message
@@ -0,0 +1,12 @@
+[
+{ type: install
+ message: <<EOM
+To complete the installation, please add:
+
+[components]
+tracwysiwyg.* = enabled
+
+to your trac.ini to enable the WYSIWYG editor.
+EOM
+}
+]
diff --git a/www/trac-xmlrpc/Makefile b/www/trac-xmlrpc/Makefile
new file mode 100644
index 000000000000..7aa1ace41629
--- /dev/null
+++ b/www/trac-xmlrpc/Makefile
@@ -0,0 +1,28 @@
+# Created by: Gerrit Beine <gerrit.beine@gmx.de>
+# $FreeBSD$
+
+PORTNAME= xmlrpc
+PORTVERSION= 1.1.2.r${SVN_REV}
+PORTREVISION= 2
+CATEGORIES= www devel python
+MASTER_SITES= http://www.sourcehosting.net/freebsd/distfiles/
+PKGNAMEPREFIX= trac-
+DISTNAME= ${PORTNAME}plugin-r${SVN_REV}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Provides an XML-RPC interface to Trac
+
+LICENSE= BSD3CLAUSE
+
+RUN_DEPENDS= tracd:www/trac
+
+SVN_REV= 13203
+
+WRKSRC= ${WRKDIR}/${PORTNAME}plugin/trunk
+FETCH_BEFORE_ARGS= -o ${DISTFILES}
+
+USES= python:2.7 zip
+USE_PYTHON= distutils autoplist
+NO_ARCH= yes
+
+.include <bsd.port.mk>
diff --git a/www/trac-xmlrpc/distinfo b/www/trac-xmlrpc/distinfo
new file mode 100644
index 000000000000..87a67cc1f04a
--- /dev/null
+++ b/www/trac-xmlrpc/distinfo
@@ -0,0 +1,2 @@
+SHA256 (xmlrpcplugin-r13203.zip) = c5c00337e1674d874ca8974e5f6609c6683c82cfcbf27c0833b2b1b34629cc28
+SIZE (xmlrpcplugin-r13203.zip) = 58856
diff --git a/www/trac-xmlrpc/pkg-descr b/www/trac-xmlrpc/pkg-descr
new file mode 100644
index 000000000000..4dac1945eb40
--- /dev/null
+++ b/www/trac-xmlrpc/pkg-descr
@@ -0,0 +1,7 @@
+This plugin allows Trac plugins to export select parts of their
+interface via XML-RPC.
+
+It also includes some exported functions for manipulating tickets,
+with plans to include interfaces to other parts of Trac's API.
+
+WWW: http://trac-hacks.org/wiki/XmlRpcPlugin
diff --git a/www/trac/Makefile b/www/trac/Makefile
new file mode 100644
index 000000000000..680072458e20
--- /dev/null
+++ b/www/trac/Makefile
@@ -0,0 +1,61 @@
+# Created by: Kuei-Feng Li <thinker@branda.to>
+# $FreeBSD$
+
+PORTNAME= trac
+PORTVERSION= 1.2.5
+PORTREVISION= 1
+CATEGORIES= www devel python
+MASTER_SITES= http://ftp.edgewall.com/pub/trac/ \
+ ftp://ftp.edgewall.com/pub/trac/
+DISTNAME= Trac-${PORTVERSION}
+
+MAINTAINER= joneum@FreeBSD.org
+COMMENT= Enhanced wiki and issue tracking system for software projects
+
+LICENSE= BSD3CLAUSE
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Babel>=2.8.0:devel/py-babel@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Genshi>=0.7.3:textproc/py-genshi@${PY_FLAVOR}
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Babel>=2.8.0:devel/py-babel@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}Genshi>=0.7.3:textproc/py-genshi@${PY_FLAVOR}
+
+CONFLICTS_INSTALL= trac-devel
+
+PORTSCOUT= limit:^1\.2\.[0-9]*
+
+USES= python:2.7 shebangfix
+SHEBANG_FILES= trac/tests/functional/better_twill.py trac/tests/functional/tester.py \
+ trac/tests/functional/testenv.py trac/tests/functional/compat.py \
+ trac/tests/functional/__init__.py contrib/emailfilter.py \
+ contrib/checkwiki.py contrib/htpasswd.py
+USE_PYTHON= distutils autoplist
+USE_RC_SUBR= tracd
+SUB_LIST= PYTHON_CMD=${PYTHON_CMD}
+
+PORTEXAMPLES= *
+PORTDATA= *
+
+NO_ARCH= yes
+
+OPTIONS_DEFINE= DOCUTILS PYGMENTS TZ SVN EXAMPLES
+OPTIONS_DEFAULT= DOCUTILS PYGMENTS TZ SVN SQLITE
+OPTIONS_RADIO= DATABASE
+OPTIONS_RADIO_DATABASE= PGSQL SQLITE
+DOCUTILS_DESC= Allow additional text markup
+PYGMENTS_DESC= Use generic syntax highlighter
+TZ_DESC= Process Time Zones
+
+DOCUTILS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}docutils>=0.15.2:textproc/py-docutils@${PY_FLAVOR}
+PYGMENTS_RUN_DEPENDS= ${PY_PYGMENTS}
+TZ_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}pytz>0:devel/py-pytz@${PY_FLAVOR}
+PGSQL_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}psycopg2>0:databases/py-psycopg2@${PY_FLAVOR}
+SQLITE_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR}
+SVN_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}subversion-lts>0:devel/py-subversion@${PY_FLAVOR}
+
+post-install-EXAMPLES-on:
+ @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/sample-plugins
+ ${FIND} ${WRKSRC}/contrib -type f -maxdepth 1 -exec ${INSTALL_DATA} {} ${STAGEDIR}${EXAMPLESDIR}/ \;
+ (cd ${WRKSRC}/sample-plugins && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}/sample-plugins)
+
+.include <bsd.port.mk>
diff --git a/www/trac/distinfo b/www/trac/distinfo
new file mode 100644
index 000000000000..7b119f185ebe
--- /dev/null
+++ b/www/trac/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1583237050
+SHA256 (Trac-1.2.5.tar.gz) = 5e26309c19c8781e03ba3db2196f0eac4bfb95dae9d795cfe6a977ba488bc9e6
+SIZE (Trac-1.2.5.tar.gz) = 5333965
diff --git a/www/trac/files/tracd.in b/www/trac/files/tracd.in
new file mode 100644
index 000000000000..27756822a86a
--- /dev/null
+++ b/www/trac/files/tracd.in
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# tracd startup
+#
+# $FreeBSD$
+
+# PROVIDE: tracd
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+#
+# Add the following lines to /etc/rc.conf to enable or configure tracd:
+# tracd_enable (bool): Set to "NO" by default.
+# Set it to "YES" to enable tracd.
+# tracd_listen (str): The host name or IP address to bind tracd to.
+# By default tracd listens 0.0.0.0, i.e. all the
+# available addresses on all interfaces.
+# tracd_port (str): The port number to bind to, 80 by default.
+# tracd_pidfile (str): When daemonizing, file to which to write pid
+# if not to /var/run/tracd.pid.
+# tracd_envdir (str): Directory of the project environments. Set to
+# "/home/trac" by default.
+# tracd_env (str): The project environment name while using single
+# environment mode. The default is empty, meaning
+# multiproject mode.
+# tracd_args (str): Extra arguments passed to tracd startup
+# command. Empty by default.
+#
+
+. /etc/rc.subr
+
+name="tracd"
+rcvar=tracd_enable
+
+tracd_enable=${tracd_enable:-"NO"}
+tracd_listen=${tracd_listen:-"0.0.0.0"}
+tracd_port=${tracd_port:-"80"}
+tracd_pidfile=${tracd_pidfile:-"/var/run/tracd.pid"}
+tracd_envdir=${tracd_envdir:-"/home/trac"}
+tracd_env=${tracd_env:-""}
+tracd_args=${tracd_args:-""}
+
+load_rc_config ${name}
+
+command_args="--daemonize --hostname=${tracd_listen} --port=${tracd_port}"
+command_args="${command_args} --pidfile=${tracd_pidfile} ${tracd_args}"
+
+required_dirs=${tracd_envdir}
+pidfile=${tracd_pidfile}
+
+if [ -z "${tracd_env}" ]; then
+ _trac_env="--env-parent-dir ${tracd_envdir}"
+else
+ _trac_env="${tracd_envdir}/${tracd_env}"
+ command_args="${command_args} --single-env"
+fi
+
+command_args="%%PREFIX%%/bin/tracd ${command_args} ${_trac_env}"
+command="%%PYTHON_CMD%%"
+
+run_rc_command $1
diff --git a/www/trac/pkg-descr b/www/trac/pkg-descr
new file mode 100644
index 000000000000..c3fa069b0639
--- /dev/null
+++ b/www/trac/pkg-descr
@@ -0,0 +1,21 @@
+Trac uses a minimalistic approach to web-based software project management.
+Our mission; to help developers write great software while staying out of
+the way. Trac should impose as little as possible on a team's established
+development process and policies.
+
+All aspects of Trac have been designed with one single goal, to simplify
+tracking and communication of software issues, enhancements and monitoring
+overall progress.
+
+What is Trac?
+
+ * An integrated system for managing software projects
+ * An enhanced wiki
+ * A flexible web-based issue tracker
+ * An interface to the Subversion revision control system
+
+At the core of Trac lies an integrated wiki and issue/bug database. Using
+wiki markup, all objects managed by Trac can directly link to other
+issues/bug reports, code changesets, documentation and files.
+
+WWW: https://trac.edgewall.org/
diff --git a/www/trac/pkg-message b/www/trac/pkg-message
new file mode 100644
index 000000000000..8d8c58ec1add
--- /dev/null
+++ b/www/trac/pkg-message
@@ -0,0 +1,17 @@
+[
+{ type: upgrade, maximum_version: 1
+ message: <<EOM
+From 0.12.x to 1.0.x
+---------------------
+You should be careful to check that the plugins you depend on have
+been ported to 1.0.x, as they most probably won't work without adaptation
+due to the numerous internal changes that occurred during 1.0.x development.
+
+See: http://trac.edgewall.org/wiki/TracDev/ApiChanges/1.0
+
+Consult the upgrade instructions at:
+
+ http://trac.edgewall.org/wiki/TracUpgrade
+EOM
+}
+]